KY-026 Flame Sensor with an Arduino Uno

An infrared flame detector with an analog level output and a digital alarm output set by a potentiometer.

KY-026 Flame Sensor, An infrared flame detector with an analog level output and a digital alarm output set by a potentiometer.
In short

Joy-IT's own wiring powers the KY-026 from 5 V on an Arduino, so on the Uno its comparator output DO swings to the Uno's 5 V logic and its analog output AO uses the full range of the Uno's 0 to 5 V ADC. AO goes to A0 for a graded reading and DO to D2, one of the Uno's interrupt pins.

Wiring the KY-026 Flame Sensor to the Arduino Uno

Pin by pin.

KY-026 Flame SensorArduino UnoNote
VCC5V
GNDGND
AOA0
DOD2
Buzzer +D8optional: an active buzzer, its − to GND; the sketch sounds it while DO sees a flame

What to know on the Arduino Uno

  • Powered from the Uno's 5V, the module's AO sits near the top of the Uno's 10-bit range in the dark (the sketch starts from 1023) and falls toward 0 as infrared rises, since AO is inverted.Joy-IT SensorKit, KY-026; Microchip ATmega328P datasheet DS40002061B, p. 2
  • DO comes from an LM393 open-collector output pulled up on the module to its 5 V supply, which is the Uno's logic level, so it reads directly on D2. Because D2 is INT0, attachInterrupt() can react to a flame without polling.TI LM393 datasheet (SLCS005AH), p. 17; Arduino language reference, attachInterrupt()
  • The table's optional last row adds an active buzzer from D8 to GND, which the sketch sounds while DO sees a flame; without it, those lines only toggle an unused pin.Arduino UNO R3 tech specs
  • The sketch measures AO at start-up as the no-flame level, so power the Uno up with no flame in view; a flame at boot becomes the reference.Joy-IT SensorKit, KY-026

KY-026 Flame Sensor code for the Arduino Uno

Compiled for arduino:avr:uno on 2026-10-29.

No library needed
// KY-026 Flame Sensor on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/flame-sensor-ky-026/arduino-uno
const int AO_PIN = A0;     // KY-026 AO: near 1023 in the dark, falls with infrared
const int DO_PIN = 2;      // KY-026 DO: HIGH while it sees a flame
const int BUZZER_PIN = 8;  // an active buzzer: sounds while driven HIGH

int rest = 1023;           // AO with no flame, measured at start-up
unsigned long lastPrint = 0;

int readAo() {
  long sum = 0;
  for (int i = 0; i < 16; i++) sum += analogRead(AO_PIN);
  return sum / 16;         // a flame flickers: average it
}

void setup() {
  Serial.begin(9600);
  pinMode(DO_PIN, INPUT);  // the module has its own pull-up
  pinMode(BUZZER_PIN, OUTPUT);
  rest = readAo();
  Serial.println("KY-026 ready");
}

void loop() {
  int ao = readAo();
  bool flame = digitalRead(DO_PIN) == HIGH;
  // how much infrared, as a percent of the way from the rest level down to 0
  int level = rest > 0 ? constrain(100L * (rest - ao) / rest, 0, 100) : 0;

  digitalWrite(BUZZER_PIN, flame ? HIGH : LOW);

  if (millis() - lastPrint >= 500) {
    lastPrint = millis();
    Serial.print("AO ");
    Serial.print(ao);
    Serial.print("  IR ");
    Serial.print(level);
    Serial.print(" %  ");
    Serial.println(flame ? "FLAME" : "clear");
  }
}

KY-026 Flame Sensor on the Arduino Uno: questions

Should the KY-026 be powered from 5V or 3.3V on an Arduino Uno?

From 5V, as Joy-IT wires it for Arduino. Its DO output and AO range then match the Uno's 5 V logic and 0 to 5 V analog inputs.

Why does the KY-026's analog value drop when it sees a flame on the Uno?

AO is inverted: more infrared gives a lower voltage (Joy-IT SensorKit, KY-026). On the Uno's 10-bit ADC it reads near 1023 in darkness and falls toward 0 with a strong flame.

Can the KY-026 trigger an interrupt on the Arduino Uno?

Yes. Its DO is on D2, the Uno's INT0, so attachInterrupt(digitalPinToInterrupt(2), onFlame, RISING) runs a handler the moment DO goes HIGH.

For AI assistants

This guide as plain Markdown. /components/flame-sensor-ky-026/arduino-uno.md

What will you build with it?