Flammensensor mit Arduino: Anschluss, Code und Feueralarm
Flammensensor am Arduino: Anschluss, DO- und AO-Ausgang, Empfindlichkeit, Reichweite, Feueralarm mit Buzzer, Kombination mit MQ-2, Fehlalarme, ESP32 und Pico.
Ein Flammensensor ist ein günstiges Modul, das das Infrarotlicht eines Feuerzeugs, einer Kerze oder von brennendem Papier erkennt, und du kannst ihn mit wenigen Zeilen Code am Arduino nutzen. Für den Flammensensor am Arduino brauchst du keine Bibliothek: Der DO-Pin des Moduls wechselt seinen Zustand, sobald er eine Flamme sieht, und der AO-Pin der 4-poligen Versionen liefert eine Spannung, die sich mit der Stärke der Flamme ändert. Er gehört zu den beliebtesten Sensoren für Feueralarme, Löschroboter, Sicherheitssysteme für die Küche und Schulprojekte.
In dieser Anleitung erfährst du, was in einem Flammensensor steckt und warum er nur auf Licht zwischen 760 und 1100 nm reagiert, wie sich der digitale und der analoge Ausgang unterscheiden, wie du das Empfindlichkeits-Poti richtig einstellst und welche Reichweite und welchen Erfassungswinkel er hat. Danach baust du einen Feueralarm mit Buzzer und LED, kombinierst den Sensor mit einem MQ-2-Gassensor, verringerst Fehlalarme durch Sonnenlicht oder Fernbedienungen per Software, schickst mit einem ESP32 eine Telegram-Nachricht auf dein Handy und bringst dieselbe Schaltung mit MicroPython auf einem Raspberry Pi Pico zum Laufen.

Was ist ein Flammensensor und wie funktioniert er?
Das schwarze, LED-ähnliche Bauteil an der Spitze des Moduls ist in Wirklichkeit ein Infrarot-Fototransistor (auf manchen Platinen eine Fotodiode); ein verbreitetes Beispiel ist der YG1006. Sein schwarzes Epoxidgehäuse filtert den Großteil des sichtbaren Lichts heraus und lässt nur nahes Infrarot zwischen etwa 760 und 1100 nm durch; am empfindlichsten ist er um 940 nm. Die obere Grenze kommt vom Silizium selbst: Mit einer Bandlücke von 1,12 eV kann Silizium keine Photonen mit Wellenlängen über etwa 1100 nm absorbieren. Weil die heißen Rußpartikel einer Flamme auch in diesem Bereich strahlen, steigt der Strom durch den Fototransistor, je näher eine Flamme kommt. Ein Spannungsteiler auf der Platine wandelt diesen Strom in eine Spannung um, und der LM393-Komparator vergleicht sie mit der am Poti eingestellten Schwelle und legt so den Zustand des DO-Pins fest.
| Merkmal | Wert |
|---|---|
| Erfasste Wellenlänge | 760–1100 nm (maximale Empfindlichkeit ~940 nm) |
| Erfassungswinkel | Etwa 60° (~30° zu beiden Seiten der Achse) |
| Erfassungsabstand | Bei einer Feuerzeugflamme typisch bis 80 cm; bei größeren Flammen mehr |
| Versorgungsspannung | 3,3–5 V |
| Komparator | LM393; Schwelle über ein Mehrgang-Poti einstellbar |
| Ausgänge | DO (digital, bei allen Modellen), AO (analog, bei 4-poligen Modellen) |
| DO-Logik | Verbreitete blaue Module: Flamme = LOW und die DO-LED leuchtet; KY-026: meist Flamme = HIGH |
| Reaktionszeit | Deutlich unter einer Millisekunde; der Fototransistor reagiert in Mikrosekunden |
| Betriebstemperatur des Empfängers | Etwa −25 bis +85 °C |
Es gibt mehrere Flammensensor-Platinen, die dieselbe Aufgabe erfüllen. 3-polige Module wie das auf dem Foto oben haben nur einen digitalen Ausgang; 4-polige Module bringen zusätzlich einen analogen Ausgang mit. Der KY-026, den du vielleicht aus Sensor-Kits kennst, funktioniert genauso, sein DO-Ausgang ist aber meist invertiert. Löschroboter verwenden Mehrkanal-Platinen mit fünf fächerförmig angeordneten Empfängern. Ein Flammensensor ist passiv, er sendet also selbst kein Licht aus; darin unterscheidet er sich vom TCRT5000-Infrarotsensor, der Sender und Empfänger enthält.
| Modell | Pins | Eigenschaft | Wann wählen? |
|---|---|---|---|
| 3-poliges Modul | VCC, GND, DO | Nur Flamme ja/nein | Einfacher Feueralarm, erste Versuche |
| 4-poliges Modul | VCC, GND, DO, AO | Schwellenausgang + Flammenstärke | Mehrstufiger Alarm, Fehlalarmfilter |
| KY-026 | A0, G, +, D0 | Wie das 4-polige Modul; DO bei Flamme meist HIGH | Projekte aus Sensor-Kits |
| 5-Kanal-Modul | VCC, GND und ein eigener Ausgang pro Empfänger | Breiter Erfassungsbereich von etwa 120° | Roboter, die die Richtung der Flamme finden |
Digitaler (DO) und analoger (AO) Ausgang im Vergleich
Der DO-Pin liefert eine Ja/Nein-Antwort: Er wechselt den Zustand, wenn das Infrarotlicht die am Poti eingestellte Schwelle überschreitet. Bei den verbreiteten blauen Platinen ist dieser Pin normalerweise HIGH, wird bei einer Flamme LOW, und die DO-LED leuchtet; bei manchen Platinen wie dem KY-026 ist es umgekehrt. Teste dein Modul deshalb zuerst mit einem Feuerzeug und schau im seriellen Monitor nach, welchen Wert du liest. Der AO-Pin liefert das Rohsignal. Bei den meisten Modulen sinkt dieser Wert, je näher die Flamme kommt: Ein analogRead-Wert von 900–1020 in einem Raum ohne Flamme kann mit einem nahen Feuerzeug auf einige Hundert fallen. Das Poti ändert nur die DO-Schwelle und hat keinen Einfluss auf AO.
| Merkmal | DO (digital) | AO (analog) |
|---|---|---|
| Gelesener Wert | HIGH oder LOW | 0–1023 am Arduino Uno |
| Schwelle | Poti auf der Platine | Legst du im Code fest |
| Information | Flamme vorhanden oder nicht | Flammenstärke, ungefähre Entfernung und Flackern |
| Anschluss-Pin | Beliebiger Digitalpin | Analogpin (ADC) |
| Am besten für | Einfachen Alarm, sofortige Reaktion per Interrupt | Mehrstufigen Alarm, Fehlalarmfilter, Richtungssuche |
Empfindlichkeit am Poti richtig einstellen
- Versorge das Modul mit Strom und platziere den Sensor dort, wo er arbeiten soll, in der Richtung, die er überwachen soll; stelle ihn immer in der echten Umgebung ein.
- Drehe das blaue Poti ohne Flamme mit einem kleinen Schraubendreher und suche den Punkt, an dem die DO-LED zwischen an und aus wechselt.
- Drehe von diesem Punkt aus noch eine halbe bis ganze Umdrehung in die Richtung, in der die LED aus bleibt. So lösen kleine Schwankungen im Umgebungslicht keinen Alarm aus.
- Halte ein Feuerzeug im größten gewünschten Abstand in Richtung Sensor und prüfe, ob die LED aufleuchtet. Wenn nicht, stelle ihn etwas empfindlicher ein und versuche es erneut.
- Achte darauf, dass der Sensor nicht auf ein sonniges Fenster oder eine Glühlampe zeigt, und prüfe die Einstellung einige Stunden später bei anderem Licht noch einmal.
Reichweite und Erfassungswinkel
Angaben wie 80 cm in Herstellerdaten beziehen sich auf eine normale Feuerzeugflamme; die echte Reichweite hängt von der Größe der Flamme, der Poti-Einstellung und dem Umgebungslicht ab. Hier gilt ein einfaches physikalisches Gesetz: Die Intensität des Lichts einer kleinen Quelle nimmt mit dem Quadrat der Entfernung ab. Verdoppelst du den Abstand, sinkt das Infrarotlicht am Sensor auf ein Viertel. Umgekehrt erkennst du eine Flamme, die viermal so viel Licht abgibt, aus doppelter Entfernung und eine hundertmal stärkere aus zehnfacher Entfernung. Deshalb wird eine Kerzenflamme aus kürzerer Entfernung erkannt als ein Feuerzeug, ein brennender Papierstapel dagegen aus mehreren Metern.
| Abstand | Licht am Sensor (20 cm = 100 %) |
|---|---|
| 20 cm | 100 % |
| 40 cm | 25 % |
| 60 cm | 11 % |
| 80 cm | 6 % |
| 1 m | 4 % |
Der Erfassungswinkel beträgt etwa 60 Grad; der Sensor sieht also Flammen in einem Kegel von rund 30 Grad zu beiden Seiten seiner Achse, und das Signal wird schnell schwächer, je weiter die Flamme an den Rand dieses Kegels rückt. Der Empfänger hat lange Beinchen, deshalb kannst du ihn vorsichtig in jede Richtung biegen, aber ständiges Biegen an der Stelle, wo die Beinchen ins Gehäuse gehen, bricht sie ab. Um den Sichtbereich einzuengen, schiebst du ein mattschwarzes Röhrchen über den Empfänger: Ein Röhrchen mit 6 mm Innendurchmesser und 2 cm Länge verringert den Winkel auf ungefähr 30 Grad und blockiert seitlich einfallendes Sonnen- oder Lampenlicht. Der Sichtbereich sollte gerade groß genug sein, um den zu überwachenden Bereich abzudecken; alles darüber hinaus bringt nur neue Fehlalarmquellen.
Flammensensor anschließen: Arduino Uno, ESP32 und Pico
| Verbindung | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| Modul VCC | 5V | 3V3 | 3V3(OUT), Pin 36 |
| Modul GND | GND | GND | GND, Pin 38 |
| Modul DO | D2 | GPIO 27 | GP15, Pin 20 |
| Modul AO (4-polig) | A0 | GPIO 34 (ADC1) | GP26 / ADC0, Pin 31 |
| Aktiver Buzzer (+) | D8 | GPIO 25 | GP14, Pin 19 |
| Rote LED (mit 220 Ω) | D7 | GPIO 26 | GP13, Pin 17 |
Schritt für Schritt: Feueralarm mit Flammensensor und Arduino
- Verbinde VCC des Moduls mit dem 5V-Pin des Arduino, GND mit GND und DO mit D2.
- Verbinde das lange (+) Bein des aktiven Buzzers mit D8 und das kurze Bein mit GND.
- Verbinde das lange Bein der roten LED über einen 220-Ω-Widerstand mit D7 und das kurze Bein mit GND. Für eine andere LED berechnest du den Vorwiderstand mit dem LED-Vorwiderstandsrechner.
- Lade den folgenden Code hoch, öffne den seriellen Monitor mit 9600 Baud und halte kurz ein Feuerzeug aus 20–30 cm Entfernung in Richtung Sensor.
- Piept der Buzzer und leuchtet die LED, funktioniert die Schaltung; löst der Alarm ohne Flamme aus und verstummt bei einer Flamme, setze FLAME_ACTIVE im Code auf HIGH.
1// Alev sensörü ile basit yangın alarmı / Simple fire alarm with a flame sensor
2const int FLAME_DO = 2; // modülün DO pini / module DO pin
3const int BUZZER = 8; // aktif buzzer / active buzzer
4const int LED = 7; // kırmızı LED (220 Ω ile) / red LED (with 220 Ω)
5const int FLAME_ACTIVE = LOW; // çoğu modülde alev = LOW, KY-026'da HIGH / most modules: flame = LOW, KY-026: HIGH
6
7void setup() {
8 Serial.begin(9600);
9 pinMode(FLAME_DO, INPUT);
10 pinMode(BUZZER, OUTPUT);
11 pinMode(LED, OUTPUT);
12}
13
14void loop() {
15 bool flame = digitalRead(FLAME_DO) == FLAME_ACTIVE;
16
17 if (flame) {
18 Serial.println(F("ALEV ALGILANDI! / FLAME DETECTED!"));
19 digitalWrite(LED, HIGH);
20 digitalWrite(BUZZER, HIGH); // kesik kesik alarm sesi / beeping alarm
21 delay(150);
22 digitalWrite(BUZZER, LOW);
23 delay(150);
24 } else {
25 digitalWrite(LED, LOW);
26 digitalWrite(BUZZER, LOW);
27 delay(50);
28 }
29}Der Code liest bei jedem Durchlauf den DO-Pin und vergleicht das Ergebnis mit der Konstante FLAME_ACTIVE. Dank dieser Konstante funktioniert derselbe Code mit blauen Modulen, die bei einer Flamme LOW liefern, und mit dem KY-026, der HIGH liefert. Solange eine Flamme zu sehen ist, leuchtet die LED, und der Buzzer schaltet alle 150 ms ein und aus, sodass ein auffälliges, unterbrochenes Piepen entsteht. Ein aktiver Buzzer hat einen eigenen Oszillator und braucht nur HIGH und LOW; hast du einen passiven Buzzer, nimm tone() statt digitalWrite, wie in Was ist ein Buzzer erklärt. Es gibt noch einen Grund, warum DO an D2 hängt: Beim Uno ist D2 einer der beiden interruptfähigen Pins, du kannst die Flamme also mit attachInterrupt erfassen, ohne auf den Rest der Schleife zu warten.
Analog auslesen: Flammenstärke und ungefähre Entfernung
Mit einem 4-poligen Modul kannst du über den AO-Ausgang viel mehr machen. Weil der Rohwert in jeder Umgebung anders ist, nutze statt einer festen Schwelle diese Methode: Miss beim Start, ohne Flamme, einen Grundwert (Baseline) und beobachte dann, wie weit jede neue Messung davon abweicht. Der folgende Code mittelt 16 Messungen, um das Rauschen zu verringern, berechnet die Abweichung als Flammenstärke und sagt grob, ob die Flamme nah oder fern ist. Steigt der AO-Wert deines Moduls bei einer Flamme, setze DROPS_WITH_FLAME einfach auf false.
1// AO ile alev gücü ve yaklaşık mesafe / Flame strength and rough distance via AO
2const int FLAME_AO = A0; // 4 pinli modülün AO pini / AO pin of the 4-pin module
3const bool DROPS_WITH_FLAME = true; // çoğu modülde alev yaklaşınca değer düşer / on most modules the value falls as the flame approaches
4int baseline; // alevsiz ortam değeri / flame-free ambient value
5
6int readAverage() {
7 long sum = 0;
8 for (int i = 0; i < 16; i++) { // 16 ölçümün ortalaması / average of 16 readings
9 sum += analogRead(FLAME_AO);
10 delay(2);
11 }
12 return sum / 16;
13}
14
15void setup() {
16 Serial.begin(9600);
17 delay(1000); // açılışta ortamda alev olmamalı / no flame at start-up
18 baseline = readAverage();
19 Serial.print(F("Taban / Baseline: "));
20 Serial.println(baseline);
21}
22
23void loop() {
24 int value = readAverage();
25 int strength = DROPS_WITH_FLAME ? baseline - value : value - baseline; // alev gücü / flame strength
26 if (strength < 0) strength = 0;
27
28 Serial.print(F("AO: "));
29 Serial.print(value);
30 Serial.print(F(" Guc / Strength: "));
31 Serial.print(strength);
32
33 if (strength > 400) {
34 Serial.println(F(" -> YAKIN ALEV / CLOSE FLAME"));
35 } else if (strength > 100) {
36 Serial.println(F(" -> UZAK ALEV / DISTANT FLAME"));
37 } else {
38 Serial.println(F(" -> alev yok / no flame"));
39 }
40 delay(250);
41}Die Schwellen 100 und 400 im Code sind nur ein Ausgangspunkt. Um sie an deinen Sensor anzupassen, lade den Code hoch, öffne den seriellen Monitor und notiere die Flammenstärke, während du ein Feuerzeug in 10, 30 und 60 cm Abstand hältst; wegen des Abstandsquadratgesetzes ändert sich der Wert in der Nähe sehr schnell und in der Ferne langsam. Darum lässt sich aus dem Analogwert keine genaue Entfernung in Zentimetern berechnen: Derselbe Wert kann von einer kleinen nahen oder einer großen fernen Flamme stammen. Wie der ADC den Rohwert erzeugt, erfährst du in Analog-Digital-Wandlung, Feinheiten des seriellen Monitors in Arduino Serial Monitor.
Sonnenlicht und andere Ursachen für Fehlalarme
Ein Flammensensor sieht kein Feuer, sondern Infrarotlicht in einem bestimmten Band, und alles, was in diesem Band Licht abgibt, kann ihn auslösen. Welche Quellen Ärger machen, erklärt das Wiensche Verschiebungsgesetz: Die Wellenlänge, bei der ein heißer Körper am stärksten strahlt, liegt bei etwa 2898 / T Mikrometern (T ist die Temperatur in Kelvin). Sonne und Glühlampen strahlen genau im Band des Sensors stark, der menschliche Körper ist dagegen viel zu kühl, der Sensor sieht dich also überhaupt nicht. Deshalb brauchst du zur Bewegungserkennung einen PIR-Sensor, der viel längere Wellenlängen auswertet.
| Quelle | Ungefähre Temperatur | Wellenlänge der stärksten Strahlung | Wirkung auf den Flammensensor |
|---|---|---|---|
| Sonne | 5800 K | 0,5 µm | Sehr stark; direkte Sonne oder Spiegelungen an Glas können den Sensor blenden |
| Glüh- und Halogenlampe | 2700–3000 K | ~1 µm | Stark; ein Großteil ihres Lichts liegt genau im Band des Sensors |
| Kerzen- und Feuerzeugflamme (Rußpartikel) | ~1500 K | ~1,9 µm | Die gewünschte Quelle; ein Teil der Strahlung fällt ins Band |
| Glühender Heizdraht, Ofen | ~1100 K | ~2,6 µm | Kann aus der Nähe auslösen |
| TV-Fernbedienung | - | 0,94 µm (schmalbandig) | Löst mit kurzen Impulsen aus |
| LED- und Leuchtstofflampen | - | Sichtbarer Bereich | Fast kein Infrarot, meist unproblematisch |
| Menschlicher Körper | 310 K | ~9,3 µm | Für den Sensor unsichtbar |
Die meisten Fehlalarme kannst du mit der Hardware verhindern: Platziere den Sensor so, dass er nicht auf ein Fenster, eine sonnige Wand oder eine Glühlampe zeigt, möglichst nach unten und in den Raum hinein, enge seinen Sichtbereich mit einem schwarzen Röhrchen ein und stelle das Poti bei echtem Umgebungslicht ein. Bedenke, dass starkes Sonnenlicht nicht nur Fehlalarme auslöst, sondern den Sensor auch durch Sättigung blind macht: Ist der AO-Wert in der Sonne schon ganz unten, bleibt nichts mehr übrig, was sich bei einer echten Flamme ändern könnte. Professionelle Infrarot-Flammenmelder lösen das, indem sie das 4,3-µm-Band auswerten, in dem heißes Kohlendioxid strahlt und das Sonnenlicht von der Atmosphäre weitgehend absorbiert wird, mehrere Wellenlängen vergleichen und das Flackern der Flamme analysieren. Dein Modul kann die ersten beiden Punkte nicht, aber Flackeranalyse und Zeitbestätigung kannst du per Software nachbilden.
Fehlalarme per Software verringern: Zeitbestätigung und Flackeranalyse
Eine echte Flamme brennt nie gleichmäßig; Luftströmungen und aufsteigende heiße Gase lassen ihre Helligkeit etwa 1- bis 20-mal pro Sekunde schwanken. Sonnenlicht und das Licht einer Glühlampe sind dagegen über kurze Zeit fast konstant, und die Impulse einer Fernbedienung dauern nur Millisekunden. Der folgende Code nutzt diese Unterschiede mit drei Regeln: Die Flammenstärke muss deutlich über dem Grundwert liegen, der Wert muss in der letzten Sekunde stärker als ein festgelegter Betrag geschwankt haben, und beide Bedingungen müssen mindestens zwei Sekunden ununterbrochen erfüllt sein. Außerdem ist jede Messung der Mittelwert aus 20 Werten, die über 10 ms erfasst werden. Am 50-Hz-Netz flackern Lampen leicht mit 100 Hz; der Mittelwert über 10 ms, also genau eine Flackerperiode, löscht diese Welligkeit aus, sodass eine Lampe nicht für eine flackernde Flamme gehalten wird.
1// Süre doğrulamalı ve titreşim analizli alev alarmı / Flame alarm with time confirmation and flicker analysis
2const int FLAME_AO = A0;
3const int BUZZER = 8;
4const int LED = 7;
5const int STRENGTH_LIMIT = 150; // tabandan en az bu kadar sapma / minimum deviation from the baseline
6const int FLICKER_LIMIT = 20; // 1 sn içindeki en az dalgalanma / minimum swing within 1 s
7const unsigned long CONFIRM_MS = 2000; // koşul bu kadar kesintisiz sürmeli / condition must hold this long
8
9float baseline;
10int winMin = 1023, winMax = 0;
11bool flickering = false;
12unsigned long windowStart = 0;
13unsigned long candidateSince = 0;
14
15// 10 ms boyunca 20 ölçüm: 100 Hz lamba titreşimini siler / 20 samples over 10 ms: cancels 100 Hz lamp flicker
16int readFiltered() {
17 long sum = 0;
18 for (int i = 0; i < 20; i++) {
19 sum += analogRead(FLAME_AO); // yaklaşık 0,11 ms sürer / takes about 0.11 ms
20 delayMicroseconds(390);
21 }
22 return sum / 20;
23}
24
25void setup() {
26 Serial.begin(9600);
27 pinMode(BUZZER, OUTPUT);
28 pinMode(LED, OUTPUT);
29 baseline = readFiltered(); // açılışta ortamda alev olmamalı / no flame at start-up
30}
31
32void loop() {
33 int value = readFiltered();
34 int strength = (int)baseline - value; // AO alevle artıyorsa: value - baseline / if AO rises with flame: value - baseline
35 unsigned long now = millis();
36
37 if (value < winMin) winMin = value;
38 if (value > winMax) winMax = value;
39
40 if (now - windowStart >= 1000) { // her saniye pencereyi değerlendir / evaluate the window every second
41 int swing = winMax - winMin;
42 flickering = swing > FLICKER_LIMIT; // alev titrer, güneş sabittir / flames flicker, sunlight is steady
43 if (strength < STRENGTH_LIMIT / 2) {
44 baseline += (value - baseline) * 0.05; // ortam ışığını yavaşça izle / slowly follow ambient light
45 }
46 Serial.print(F("Guc / Strength: "));
47 Serial.print(strength);
48 Serial.print(F(" Dalgalanma / Swing: "));
49 Serial.println(swing);
50 winMin = 1023;
51 winMax = 0;
52 windowStart = now;
53 }
54
55 bool candidate = strength > STRENGTH_LIMIT && flickering;
56 if (!candidate) candidateSince = now; // koşul bozulunca sayaç sıfırlanır / timer resets when the condition breaks
57 bool alarm = now - candidateSince >= CONFIRM_MS;
58
59 digitalWrite(LED, alarm ? HIGH : LOW);
60 digitalWrite(BUZZER, (alarm && (now / 200) % 2) ? HIGH : LOW); // kesik siren / beeping siren
61}Weil der Code die Zeit mit millis() statt mit delay() misst, misst er auch weiter, während der Alarm läuft; die Details dazu stehen in millis und delay im Vergleich. Auch der Grundwert bleibt nicht fest: Ohne Flamme wandert er einmal pro Sekunde um 5 Prozent in Richtung des neuesten Messwerts und folgt so langsam dem Umgebungslicht im Tagesverlauf. Um einen passenden FLICKER_LIMIT zu finden, beobachte im seriellen Monitor die Schwankung pro Sekunde einer gleichmäßigen Lichtquelle, dann die einer Kerzenflamme, und lege die Schwelle dazwischen. Die Methode ist nicht perfekt; Sonnenlicht, das durch im Wind bewegte Blätter fällt, flackert ebenfalls. Weitere Verfahren wie gleitenden Mittelwert und Medianfilter findest du in Sensordaten filtern.
Kombination mit dem MQ-2-Gassensor
Ein Flammensensor und ein MQ-2-Gassensor gleichen gegenseitig ihre Schwächen aus. Der Flammensensor ist sehr schnell, sieht aber nur Flammen in seinem Sichtbereich und lässt sich von der Sonne täuschen. Der MQ-2 erkennt Rauch und brennbare Gase und bemerkt auch ein Feuer hinter einer Ecke oder einen Schwelbrand ohne Flamme, doch der Rauch braucht Zeit, um ihn zu erreichen, und er muss nach jedem Einschalten vorheizen. Nutzt du beide, kannst du das Signal eines Sensors als Warnung und das gleichzeitige Signal beider als Feuer werten.


| Flammensensor | MQ-2 | Entscheidung | Reaktion |
|---|---|---|---|
| Nein | Normal | Normal | LED und Buzzer aus |
| Ja | Normal | Warnung: könnte Sonne, eine Lampe oder ein beginnendes Feuer sein | LED blinkt, kurzer Piepton alle 2 Sekunden |
| Nein | Hoch | Warnung: Rauch, Gasleck oder ein Feuer außerhalb des Sichtbereichs | LED blinkt, kurzer Piepton alle 2 Sekunden |
| Ja | Hoch | Feuer | LED leuchtet dauerhaft, schnelle unterbrochene Sirene |
1// Alev sensörü + MQ-2 ile iki kademeli yangın alarmı / Two-level fire alarm with a flame sensor + MQ-2
2const int FLAME_DO = 2;
3const int MQ2_AO = A1; // MQ-2 analog çıkışı / MQ-2 analog output
4const int BUZZER = 8;
5const int LED = 7;
6const int FLAME_ACTIVE = LOW; // KY-026 kullanıyorsan HIGH / HIGH if you use a KY-026
7const int SMOKE_LIMIT = 400; // temiz hava değerinin belirgin üstü / well above the clean-air value
8const unsigned long WARMUP_MS = 60000; // MQ-2 ön ısıtma süresi / MQ-2 warm-up time
9const unsigned long HOLD_MS = 300; // DO'daki kısa kesintileri yok say / ignore short gaps on DO
10
11unsigned long lastFlame = 0;
12unsigned long lastPrint = 0;
13
14void setup() {
15 Serial.begin(9600);
16 pinMode(FLAME_DO, INPUT);
17 pinMode(BUZZER, OUTPUT);
18 pinMode(LED, OUTPUT);
19}
20
21void loop() {
22 unsigned long now = millis();
23 if (digitalRead(FLAME_DO) == FLAME_ACTIVE) lastFlame = now;
24 bool flame = lastFlame > 0 && now - lastFlame < HOLD_MS;
25
26 int gas = analogRead(MQ2_AO);
27 bool smoke = now > WARMUP_MS && gas > SMOKE_LIMIT; // ısınana kadar dumanı yok say / ignore smoke until warmed up
28
29 int level = 0; // 0 normal, 1 uyarı / warning, 2 yangın / fire
30 if (flame && smoke) level = 2;
31 else if (flame || smoke) level = 1;
32
33 if (level == 2) {
34 digitalWrite(LED, HIGH);
35 digitalWrite(BUZZER, (now / 150) % 2 ? HIGH : LOW); // hızlı siren / fast siren
36 } else if (level == 1) {
37 digitalWrite(LED, (now / 500) % 2 ? HIGH : LOW); // yanıp sönen LED / blinking LED
38 digitalWrite(BUZZER, (now % 2000) < 100 ? HIGH : LOW); // 2 sn'de bir kısa bip / short beep every 2 s
39 } else {
40 digitalWrite(LED, LOW);
41 digitalWrite(BUZZER, LOW);
42 }
43
44 if (now - lastPrint >= 1000) {
45 lastPrint = now;
46 Serial.print(F("Alev / Flame: "));
47 Serial.print(flame ? 1 : 0);
48 Serial.print(F(" MQ-2: "));
49 Serial.print(gas);
50 Serial.print(F(" Seviye / Level: "));
51 Serial.println(level);
52 }
53}Verbinde den AO-Ausgang des MQ-2 mit A1 und versorge das Modul mit 5V; der Flammensensor bleibt an D2. Lege SMOKE_LIMIT deutlich über den Wert, den du nach einigen Minuten in sauberer Luft liest, wie in der MQ-2-Anleitung beschrieben. Die Rauchbedingung wird in den ersten 60 Sekunden ignoriert, weil ein kalter MQ-2 mit einem hohen Wert startet. Die Haltezeit von 300 ms für das Flammensignal (HOLD_MS) macht aus dem kurzen An- und Ausschalten des DO-Ausgangs, das die flackernde Flamme verursacht, eine durchgehende Erkennung. Wenn du diese Kombination auf einen ESP32 überträgst, aufgepasst: Der MQ-2 braucht 5 V und sein AO-Ausgang kann 5 V erreichen, deshalb gehört an seinen Ausgang unbedingt ein Spannungsteiler; der Flammensensor läuft dagegen direkt an 3V3.
Feuer-Benachrichtigung aufs Handy mit dem ESP32 (Telegram)
Damit der Alarm nicht nur die Leute im Raum warnt, sondern auch dich, wenn du unterwegs bist, kannst du einen ESP32 verwenden. Telegram-Bots sind der einfachste Weg: Sie sind kostenlos, brauchen keinen eigenen Server, und die Nachricht kommt sofort als Benachrichtigung auf dem Handy an. Der folgende Code lässt den Buzzer ertönen und schickt eine Telegram-Nachricht, sobald 1,5 Sekunden lang eine Flamme zu sehen war, und wartet zwischen zwei Nachrichten mindestens eine Minute, damit dein Handy beim selben Feuer nicht überflutet wird. Die Einrichtung des Bots und die Steuerung in beide Richtungen per Befehl erklären wir ausführlich in ESP32-Telegram-Bot.
- Schreibe in Telegram mit @BotFather, sende den Befehl /newbot, gib deinem Bot einen Namen und kopiere den Token, den du erhältst.
- Öffne einen ID-Bot wie @userinfobot und tippe auf Start; er schickt dir deine eigene Chat-ID.
- Suche deinen neuen Bot in Telegram und tippe auf Start; sonst kann der Bot dir keine Nachrichten schicken.
- Installiere in der Arduino IDE über den Bibliotheksverwalter die Bibliotheken UniversalTelegramBot und ArduinoJson.
- Ersetze WLAN-Name, Passwort, Token und Chat-ID im Code durch deine eigenen Daten, wähle als Board den ESP32 und lade den Code hoch.
1// ESP32 alev alarmı + Telegram bildirimi / ESP32 flame alarm + Telegram notification
2#include <WiFi.h>
3#include <WiFiClientSecure.h>
4#include <UniversalTelegramBot.h> // ArduinoJson kütüphanesi de gerekir / also needs the ArduinoJson library
5
6const char* WIFI_SSID = "WIFI_ADI"; // Wi-Fi ağının adı / your Wi-Fi name
7const char* WIFI_PASS = "WIFI_SIFRESI"; // Wi-Fi şifren / your Wi-Fi password
8#define BOT_TOKEN "1234567890:ABCdefGhIJKlmNoPQRstuVWXyz" // BotFather'dan / from BotFather
9#define CHAT_ID "123456789" // senin chat ID'n / your chat ID
10
11const int FLAME_DO = 27; // modülün DO pini / module DO pin
12const int BUZZER = 25; // aktif buzzer / active buzzer
13const int LED = 26; // kırmızı LED (220 Ω ile) / red LED (with 220 Ω)
14const int FLAME_ACTIVE = LOW;
15const unsigned long HOLD_MS = 300; // DO'daki kısa kesintileri yok say / ignore short gaps on DO
16const unsigned long CONFIRM_MS = 1500; // alev bu kadar sürmeli / flame must last this long
17const unsigned long COOLDOWN_MS = 60000; // iki mesaj arası en az 1 dk / at least 1 min between messages
18
19WiFiClientSecure client;
20UniversalTelegramBot bot(BOT_TOKEN, client);
21
22unsigned long lastFlame = 0;
23unsigned long flameStart = 0;
24unsigned long lastMessage = 0;
25bool messageSent = false;
26
27void setup() {
28 Serial.begin(115200);
29 pinMode(FLAME_DO, INPUT);
30 pinMode(BUZZER, OUTPUT);
31 pinMode(LED, OUTPUT);
32
33 WiFi.mode(WIFI_STA);
34 WiFi.begin(WIFI_SSID, WIFI_PASS);
35 client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // api.telegram.org kök sertifikası / root certificate
36 unsigned long start = millis();
37 while (WiFi.status() != WL_CONNECTED && millis() - start < 15000) { // en fazla 15 sn bekle / wait up to 15 s
38 delay(500);
39 Serial.print(".");
40 }
41 if (WiFi.status() == WL_CONNECTED) {
42 Serial.println(WiFi.localIP());
43 bot.sendMessage(CHAT_ID, "Yangin alarmi devrede / Fire alarm is online", "");
44 }
45}
46
47void loop() {
48 unsigned long now = millis();
49 if (digitalRead(FLAME_DO) == FLAME_ACTIVE) lastFlame = now;
50 bool flame = lastFlame > 0 && now - lastFlame < HOLD_MS;
51 if (!flame) flameStart = now; // alev yoksa sayaç sıfırlanır / timer resets without flame
52 bool alarm = now - flameStart >= CONFIRM_MS;
53
54 digitalWrite(LED, alarm ? HIGH : LOW);
55 digitalWrite(BUZZER, (alarm && (now / 200) % 2) ? HIGH : LOW); // kesik siren / beeping siren
56
57 if (alarm && (!messageSent || now - lastMessage >= COOLDOWN_MS)) {
58 if (WiFi.status() == WL_CONNECTED) {
59 bool ok = bot.sendMessage(CHAT_ID, "ALEV ALGILANDI! / FLAME DETECTED!", "");
60 Serial.println(ok ? "Mesaj gitti / Message sent" : "Gonderilemedi / Send failed");
61 } else {
62 WiFi.reconnect(); // bağlantı koptuysa yeniden dene / reconnect if the link dropped
63 }
64 lastMessage = now; // başarısızsa 1 dk sonra yeniden dener / retries after 1 min if it failed
65 messageSent = true;
66 }
67 delay(10);
68}Der Aufruf sendMessage() baut eine sichere HTTPS-Verbindung auf und kann deshalb ein bis zwei Sekunden dauern; in dieser Zeit friert das Piepmuster kurz ein, das ist normal. Beim Start versucht der Code bis zu 15 Sekunden lang, sich mit dem WLAN zu verbinden; ohne Verbindung läuft der Alarm lokal weiter, und eine nicht gesendete Nachricht wird eine Minute später erneut versucht, der Buzzer piept also auch ohne Internet. Willst du am ESP32 auch AO auslesen, schließe ihn unbedingt an einen ADC1-Pin (GPIO 32–39) an, denn ADC2-Pins sind bei aktivem WLAN nicht nutzbar; deshalb steht in der Tabelle GPIO 34. Die sicheren Pins deines Boards zeigt dir das Tool Pinout. Klingt ein 5-V-Aktivbuzzer an einem 3,3-V-Pin zu leise, steuere ihn über einen Transistor aus 5 V an. Für eine Garage oder ein Ferienhaus ohne WLAN kannst du denselben Alarm auch mit einem SIM800L-GSM-Modul per SMS melden lassen.
Flammensensor mit Raspberry Pi Pico und MicroPython
Am Raspberry Pi Pico gilt dieselbe Logik. Versorge das Modul über den Pin 3V3(OUT), verbinde DO mit GP15 und, falls vorhanden, AO mit GP26. Das Modul hat auf der DO-Leitung einen eigenen Pull-up-Widerstand, den internen Pull-up des Pico brauchst du also nicht. Der ADC des Pico hat 12 Bit, aber read_u16() skaliert das Ergebnis in MicroPython auf 0–65535; das Gegenstück zu den 1023 des Arduino ist hier also etwa 65535. Der Code nutzt eine Haltezeit von 300 ms, die kurze Lücken an DO überbrückt, und eine Bestätigung von 1,5 Sekunden:
1# Raspberry Pi Pico alev alarmı / Raspberry Pi Pico flame alarm
2from machine import Pin, ADC
3import time
4
5flame_do = Pin(15, Pin.IN) # modülün DO pini / module DO pin
6flame_ao = ADC(26) # GP26 = ADC0, 4 pinli modülde AO / AO on the 4-pin module
7buzzer = Pin(14, Pin.OUT) # aktif buzzer / active buzzer
8led = Pin(13, Pin.OUT) # kırmızı LED (220 Ω ile) / red LED (with 220 Ω)
9
10FLAME_ACTIVE = 0 # çoğu modülde alev = 0, KY-026'da 1 / most modules: flame = 0, KY-026: 1
11HOLD_MS = 300 # DO'daki kısa kesintileri yok say / ignore short gaps on DO
12CONFIRM_MS = 1500 # alev bu kadar sürmeli / flame must last this long
13
14last_flame = None
15flame_start = time.ticks_ms()
16last_print = time.ticks_ms()
17
18while True:
19 now = time.ticks_ms()
20 if flame_do.value() == FLAME_ACTIVE:
21 last_flame = now
22 flame = last_flame is not None and time.ticks_diff(now, last_flame) < HOLD_MS
23 if not flame:
24 flame_start = now # alev yoksa sayaç sıfırlanır / timer resets without flame
25 alarm = time.ticks_diff(now, flame_start) >= CONFIRM_MS
26
27 led.value(1 if alarm else 0)
28 buzzer.value(1 if alarm and (now // 200) % 2 else 0) # kesik siren / beeping siren
29
30 if time.ticks_diff(now, last_print) >= 500: # yarım saniyede bir yaz / print every half second
31 last_print = now
32 print(flame_ao.read_u16(), "ALARM" if alarm else "-")
33 time.sleep_ms(10)Wenn du den Code in Thonny ausführst, siehst du den AO-Wert und den Alarmzustand im Shell-Fenster; über das Menü Ansicht öffnest du den Plotter und verfolgst die Werte als Grafik. Damit das Programm beim Einschalten des Pico automatisch startet, speichere die Datei auf dem Pico als main.py. Für die Zeitmessung ist time.ticks_diff() wichtig, denn der Zähler von ticks_ms() läuft nach einem bestimmten Wert über, und eine einfache Subtraktion liefert in diesem Moment ein falsches Ergebnis.
Projektideen mit dem Flammensensor
- Feueralarm für die Küche: Baue mit einem auf den Herd gerichteten Flammensensor und einem MQ-2 einen Alarm mit der zweistufigen Logik von oben.
- Herd-vergessen-Warnung: Ist länger als 30 Minuten ununterbrochen eine Flamme zu sehen, ertönt der Buzzer und eine Nachricht geht ans Handy.
- Löschroboter: Finde mit einem 5-Kanal-Sensor die Richtung der Flamme, fahre den Roboter mit L298N und DC-Motoren dorthin und lösche die Kerze mit einer Mini-Wasserpumpe.
- Flammen-Richtungsscanner: Setze einen einzelnen Sensor auf einen Servomotor, schwenke von 0 bis 180 Grad und zeige den Winkel mit dem stärksten Signal an.
- Sicherheitszentrale fürs Smart Home: Vereine Flammen-, Gas- und Bewegungssensoren auf einer Platine; Details in Arduino-Smart-Home-Projekt.
- Werkstattwächter: Taucht in der Nähe der Lötstation unerwartet eine Flamme auf, schaltet ein Relais eine Warnleuchte ein.
- Kerzenlösch-Wettbewerb: Baue wie bei Schul-Roboterwettbewerben einen Roboter, der eine Kerze im Labyrinth möglichst schnell findet und löscht; für den Einstieg reicht ein Flammensensor.
Typische Fehler und ihre Lösungen
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| Die DO-LED leuchtet ständig, der Alarm hört nie auf | Die Schwelle ist zu empfindlich, oder der Sensor zeigt auf die Sonne oder eine Glühlampe | Drehe das Poti ohne Flamme, bis die LED erlischt, und richte den Sensor von der Lichtquelle weg |
| Beim Feuerzeug passiert nichts | Die Schwelle ist zu hoch, oder die Flamme liegt außerhalb des 60-Grad-Sichtbereichs oder zu weit weg | Drehe das Poti einige Umdrehungen in Richtung empfindlicher und halte die Flamme direkt vor den Sensor und näher heran |
| Der Alarm läuft ohne Flamme und verstummt bei einer Flamme | Der DO-Ausgang des Moduls ist HIGH-aktiv (z. B. KY-026) | Setze FLAME_ACTIVE im Code auf HIGH |
| Die DO-LED flackert vor einer Flamme | Der Komparator liegt sehr nah an der Schwelle, und das Flackern der Flamme schaltet den Ausgang hin und her | Nutze im Code eine Haltezeit (HOLD_MS) oder stelle die Schwelle etwas empfindlicher ein |
| Der Analogwert ändert sich nie | Das 3-polige Modul hat keinen AO, oder der DO-Pin hängt am Analogeingang | Nutze ein 4-poliges Modul und schließe dessen AO-Pin an den Analogeingang an |
| Ein Druck auf die Fernbedienung löst den Alarm aus | Die 940-nm-Infrarot-LED der TV-Fernbedienung | Löse den Alarm erst nach einer Zeitbestätigung von mindestens 1–2 Sekunden aus |
| Am Fenster gibt es tagsüber Fehlalarme, oder die Flamme wird gar nicht erkannt | Sonnenlicht löst den Sensor aus oder sättigt ihn | Platziere den Sensor abgewandt von der Sonne, nutze ein schwarzes Röhrchen und ergänze eine Flackeranalyse |
| Am ESP32 spielt der AO-Wert verrückt, sobald WLAN läuft | AO hängt an einem ADC2-Pin | Schließe AO an einen ADC1-Pin zwischen GPIO 32 und 39 an |
| Der Buzzer ist am ESP32 oder Pico sehr leise | Ein 5-V-Aktivbuzzer wird von einem 3,3-V-Pin angesteuert | Nutze einen 3,3-V-Buzzer oder steuere den Buzzer über einen Transistor aus 5 V an |
Ein Flammensensor ist ein günstiges, aber lehrreiches Bauteil, mit dem du gleichzeitig die Physik des Infrarotlichts, Komparatorschaltungen und den Kampf gegen Fehlalarme kennenlernst. Beginne mit einem einfachen DO-Alarm und verbessere dein System dann Schritt für Schritt mit Analogwerten, Flackeranalyse und einem MQ-2; für ein umfassenderes Sicherheitssystem wirf einen Blick auf Arduino-Alarmanlage. In der BlueGrays-App findest du Projekte zu Flammensensor, Flammen- und Gassensor-Alarm, ESP32-MQ-2-Rauchmelder und ESP32-Alarmanlage mit Telegram-Benachrichtigung, jeweils mit Schritt-für-Schritt-Schaltplänen und fertigem Code.
Häufige Fragen
Wie weit erkennt ein Flammensensor eine Flamme?
Die meisten Module erkennen eine normale Feuerzeugflamme bis etwa 80 cm; bei einer Kerzenflamme ist der Abstand kürzer. Weil die Lichtintensität mit dem Quadrat der Entfernung abnimmt, wird eine viermal stärkere Flamme aus doppelter Entfernung gesehen, ein großes Papier- oder Holzfeuer also aus mehreren Metern. Auch Poti-Einstellung und Umgebungslicht beeinflussen die Reichweite direkt.
Wird ein Flammensensor von Sonnenlicht beeinflusst?
Ja. Sonnenlicht ist im Bereich von 760–1100 nm, auf den der Sensor reagiert, sehr stark; direkte Sonne oder Spiegelungen an Glas verursachen Fehlalarme und können den Sensor so blenden, dass er eine echte Flamme übersieht. Richte den Sensor von der Sonne weg, enge den Sichtbereich mit einem schwarzen Röhrchen ein und nutze in der Software Zeitbestätigung und Flackeranalyse.
Gibt ein Flammensensor bei einer Flamme LOW oder HIGH aus?
Bei den verbreiteten blauen LM393-Modulen ist der DO-Pin normalerweise HIGH, wird bei einer Flamme LOW, und die DO-LED leuchtet. Bei manchen Platinen wie dem KY-026 geht der Ausgang bei einer Flamme auf HIGH. Teste dein Modul mit einem Feuerzeug und passe den Vergleich im Code an den Wert im seriellen Monitor an.
Funktioniert ein Flammensensor mit 3,3 V?
Ja, diese Module arbeiten mit 3,3 bis 5 V. Versorgst du das Modul an ESP32 oder Raspberry Pi Pico über den 3V3-Pin, bleiben auch DO und AO unter 3,3 V und lassen sich direkt an die Pins anschließen. Versorgst du es mit 5 V, brauchst du an diesen Boards Spannungsteiler an den Ausgängen.
Wie stellt man die Empfindlichkeit eines Flammensensors ein?
Drehe das blaue Mehrgang-Poti auf der Platine ohne Flamme bis zu dem Punkt, an dem die DO-LED gerade erlischt, und dann noch eine halbe Umdrehung in Richtung weniger empfindlich. Teste anschließend mit einem Feuerzeug im größten gewünschten Abstand. Das Poti ändert nur die DO-Schwelle; für AO legst du die Schwelle selbst im Code fest.
Kann ein Flammensensor einen Brandmelder ersetzen?
Nein. Ein Hobby-Flammensensor lässt sich von Sonnenlicht, Glühlampen und Fernbedienungen täuschen, sieht kein Feuer außerhalb seines Sichtbereichs und keinen Schwelbrand ohne Flamme und wurde nach keiner Norm geprüft. Für den Schutz von Leben verwende einen Rauchmelder nach EN 14604 und betrachte deine eigene Schaltung als zusätzliches Warnsystem.
Projekte, die du danach bauen kannst
Alle Projekte ansehen
Verwendung des Summers
Hast du dich mal gefragt, wie eine Türklingel oder ein Alarm seinen Ton erzeugt? Der Arduino lässt einen kleinen Summer in kurzen Abständen piepen: piep, Pause, piep, Pause. Du siehst, wie Strom zu Kl

Lichtstärke messen mit LDR
Willst du sehen, wie hell dein Zimmer ist, und zwar als Zahl? Der LDR, ein kleines lichtempfindliches Bauteil, misst das Umgebungslicht, und der Arduino schreibt den Wert jede halbe Sekunde auf deinen

Verwendung des Flammensensors
Ein kleiner Wächter, der Feuer in Küche oder Werkstatt vor dir bemerkt. Der Flammensensor fängt das unsichtbare Licht auf, das Feuer abgibt; ist alles in Ordnung, leuchtet die grüne LED, sieht er eine

Flammen- und Gassensor-Alarm
Ein kleiner Wächter, der dich sofort warnt, wenn Gas austritt oder irgendwo eine Flamme auftaucht. Der Gassensor überwacht die Luft, der Flammensensor achtet auf das Licht eines Feuers; solange alles

Verwendung von Gassensoren
Ein kleiner Wächter, der ein Gasleck in der Küche bemerkt, bevor du es tust. Der Gassensor schnuppert ständig an der Luft; solange alles in Ordnung ist, leuchtet die grüne LED, übersteigt das Gas in d

ESP32 MQ-2 Gas-/Rauchmelder-Alarm
In diesem Projekt wird die Erkennung brennbarer Gase (LPG, Methan, Propan) und Rauch mit einem MQ-2-Gassensormodul durchgeführt; bei Erkennung ertönt über einen passiven Summer ein sirenenähnlicher Alarmton. Der digitale Schwellenausgang (DO) des Sensors wird an GPIO 4 des ESP32 angeschlossen; überschreiten Gas oder Rauch den Schwellenwert, geht DO auf LOW und der Alarm wird ausgelöst. Die Empfindlichkeit wird über das Potentiometer eingestellt. Der passive Summer wird mit `tone()` angesteuert.

ESP32 Bewegungsalarmsystem (PIR + Buzzer + LED + Telegram)
Ein intelligentes Sicherheitsalarmsystem, das Buzzer und LED aktiviert, sobald der PIR-Sensor Bewegung erkennt, und gleichzeitig eine sofortige Benachrichtigung per Telegram an den Besitzer sendet. Ein 30-sekündiger Cooldown begrenzt die Häufigkeit wiederholter Alarme; dieser Mechanismus überprüft weder die Gültigkeit der PIR-Erkennungen noch verhindert er Fehlauslösungen. Geeignet für Heimsicherheit, Garagenüberwachung, Lagerräume oder Arbeitszimmer. Mit ESP32-CAM sind Foto-Benachrichtigungen m

ESP32-Bewegungsalarm
In diesem Projekt, das mit einem ESP32 und einem PIR-Sensor realisiert wurde, wird bei Bewegungserkennung ein Summer aktiviert, der einen akustischen Alarm auslöst. Es handelt sich um eine einfache und kostengünstige Sicherheitssystem-Anwendung. (Die Abbildungen dienen nur zur Veranschaulichung; bitte ordnen Sie sie den Texten zu.)
Weitere Artikel
BlueGrays-App
Diese Schaltung Schritt für Schritt auf dem Handy nachbauen
Schaltplan, Code und Teileliste auf einem Bildschirm. Über 160 Arduino-, ESP32- und Pico-Projekte zum Nachbauen.
Mit dem Handy scannen
Richte die Kamera auf den Code, dann öffnet sich der App-Store deines Handys.
oder im Store öffnen

