Sensor api pada modul ini tidak merasa haba langsung. Ia sebuah photodiode inframerah yang melihat cahaya 760β1100nm; trimmer biru di atas board menetapkan satu voltan rujukan, dan comparator LM393 menjatuhkan pin DO dari HIGH ke LOW pada saat bacaan photodiode melintasi rujukan itu. Peralihan LOW itulah yang membunyikan buzzer β jadi “melaraskan sensitiviti” sebenarnya bermaksud memilih satu ambang, dan ambang itu boleh anda ukur. Kerana ia mengesan cahaya dalam garis pandang terus, ini sebuah demonstrator RBT β bukan pengganti pengesan asap rumah.
Macam mana modul sensor api ini tahu ada api?
Modul sensor api FLAME4P ialah board teal-biru kecil dengan satu kepala peluru hitam di hujungnya: sebuah photodiode inframerah 5mm yang responsif kepada julat 760nm hingga 1100nm dalam kon lebih kurang 60 darjah. Api memang memancar kuat dalam julat itu β tetapi begitu juga banyak benda lain, dan fakta itulah yang menerangkan hampir setiap kelakuan modul ini.
Cahaya inframerah yang jatuh pada photodiode menjadikannya lebih konduktif, jadi voltan pembahagi di sebelahnya turun β dan voltan itulah yang keluar mentah-mentah pada pin AO. Trimmer biru bertanda 103 (10k) ialah pembahagi kedua yang berasingan, menghasilkan voltan rujukan tetap yang anda pilih sendiri. Chip hitam lapan-kaki di tengahnya ialah comparator dual LM393 keluaran TI, dan kerjanya cuma satu: bandingkan dua voltan itu, umumkan yang mana lebih tinggi.
AO duduk tinggi ketika bersih dan jatuh apabila IR naik β api yang lebih dekat memberi analogRead() yang lebih rendah. DO idle HIGH dan turun ke LOW apabila api dikesan, serentak dengan DO-LED menyala. Kedua-duanya boleh anda sahkan sendiri tanpa mempercayai sesiapa. LM393 menarik outputnya ke LOW apabila input songsangnya lebih tinggi daripada input tak-songsangnya. Di sini AO menyuap input tak-songsang dan trimmer menyuap input songsang, jadi api yang menjatuhkan AO ke bawah paras rujukan menjadikan input songsang yang lebih tinggi β dan output pun ditarik LOW. Pemerhatian di meja dan peraturan comparator itu memberi jawapan yang sama.
Output LM393 juga jenis open-collector: di dalamnya cuma ada transistor yang boleh menarik DO ke GND, dan tiada apa-apa yang mampu menolaknya naik semula. Tanpa perintang pull-up, pin itu terapung dan HIGH-nya tidak bermakna apa-apa. Modul sudah membawa perintang itu di atas board, jadi pinMode(pin, INPUT) memang cukup; INPUT_PULLUP cuma menambah pull-up kedua yang selari dengannya.
Belajar board ini sekali dan anda dapat kunci kepada banyak lagi: susun atur teal + trimmer biru + LM393 + VCC/GND/DO/AO yang sama inilah modul kelembapan tanah, modul bunyi, sensor halangan IR dan modul LDR kami. Photodiode IR yang sama juga membaca pantulan lantai dalam robot line follower β fizik yang sama, kerja yang lain.
Senarai komponen
Pilihan: bekalan kuasa 9V
| Item | Price | Qty | |
|---|---|---|---|
Power Supply Adapter DC Universal AC to DC Converter PSU 5V2A 5V3A 9V2A 12V2A - P.S. ADAPTOR (9V2A)PSA0902 | RM13.95 |
Supaya penggera boleh berdiri sendiri tanpa laptop. 9V mendarat di tengah-tengah tetingkap input yang disyorkan untuk Uno; adaptor 5V pula tidak cukup untuk regulator on-board bekerja.

Kenapa ini penggera bilik darjah, bukan pelindung rumah?
Sensor api jenis ini perlukan garis pandang terus, dan itu had fizikal yang datang terus daripada cara ia berfungsi: ia mengesan cahaya, bukan api. Maka ia terlepas kebakaran yang membara perlahan tanpa nyalaan, ia langsung tidak nampak asap, dan ia buta kepada api di sebalik perabot atau di bilik sebelah. Yang melindungi sebuah rumah ialah pengesan asap yang diperakui, bukan projek ini. Kalau zarah dan kualiti udara yang anda mahu kesan, panduan sensor kualiti udara dan jerebu kami tempatnya.
Had yang sama juga menerangkan setiap penggera palsu. Matahari melalui tingkap, mentol pijar atau halogen, lampu inframerah pada kamera CCTV, malah denyutan inframerah daripada alat kawalan jauh TV β semuanya duduk dalam jalur 760β1100nm yang sama. Coraknya senang: yang menipu sensor ini ialah benda yang bercahaya, bukan sekadar panas.
Ujian dengan api sebenar ikut disiplin makmal biasa. Lilin kecil atau pemetik api sejauh hujung tangan, dengan pengawasan guru atau orang dewasa, di atas meja lapang tanpa bahan mudah terbakar berdekatan; jangan guna nyalaan besar, dan jangan tinggalkan ia tanpa pengawasan. Selebihnya binaan ini DC voltan rendah sepenuhnya β satu-satunya benda berkaitan sesalur ialah adaptor dinding pilihan itu, sebuah unit tertutup penebat berganda yang anda cuma pasang ke soket, tidak dibuka dan tidak diubah suai.

Macam mana nak sambung sensor api, buzzer dan Uno?
Modul FLAME4P keluar dari beg dengan satu antara muka sahaja: sebaris header 4-pin male 2.54mm bertanda VCC, GND, DO, AO. Header Arduino Uno yang menghadap pengguna pula semuanya socket female. Pin male memang muat ke dalam socket female β masalahnya lain: empat pin modul itu bersebelahan, sedangkan empat isyarat yang diperlukannya (5V, GND, D2 dan A0) bertaburan pada tiga header Uno yang berlainan. Jadi modul ini tidak boleh dipacak terus ke papan, dan setiap isyarat perlukan wayarnya sendiri. Buzzer SFM-20B pula lain masalahnya: dua wayarnya berakhir dengan tembaga tinned terdedah tanpa sebarang penyambung β cucuk ke dalam header female dan ia mengembang lalu tercabut di tengah demo.
Mini breadboard 170 lubang menyelesaikan kedua-duanya serentak, sebab klip spring di dalamnya memang direka untuk mengapit pin male dan hujung wayar terdedah. Perhatikan: saiz 170 lubang ini tiada rel kuasa + dan β. Kiraannya sendiri membuktikannya β dua blok Γ 17 lajur Γ 5 lubang = 170 tepat, jadi setiap lubang sudah pun milik terminal strip dan tiada baki untuk rel. Wayarkan binaan ini menggunakan lajur sahaja. Nombor lajur pun tidak dicetak pada board ini, jadi “Lajur 1” dalam jadual di bawah bermaksud lajur pertama antara empat lajur bersebelahan yang anda pilih sendiri.
Itu membawa kepada perkara paling berguna tentang breadboard: lima lubang dalam satu lajur ialah satu titik elektrik yang sama. Sebab itu wayar hitam buzzer boleh masuk ke dalam lajur yang sama dengan pin GND modul β kedua-duanya sudah bersambung di dalam board, jadi satu pin GND Uno sahaja diperlukan. Pin modul keluar dari hujung board, bukan dari mukanya, jadi board berdiri tegak apabila dicucuk β dan kepala peluru hitam itu, yang menjulur di hujung bertentangan, jadinya memandang ke atas dan bukan merentasi meja. Bengkokkan dua kakinya perlahan-lahan, atau condongkan modul, supaya kepala itu menghadap kawasan yang anda mahu liputi; sahkan dengan DO-LED pada jarak sebenar.
| Dari | Lajur breadboard | Ke Uno | Wayar |
|---|---|---|---|
| FLAME4P β VCC | Lajur 1 | 5V | Jumper M-M |
| FLAME4P β GND | Lajur 2 (dikongsi) | GND | Jumper M-M |
| FLAME4P β DO | Lajur 3 | D2 | Jumper M-M |
| FLAME4P β AO | Lajur 4 | A0 | Jumper M-M |
| Buzzer β wayar MERAH (+) | Lajur berasingan | D8 | Jumper M-M |
| Buzzer β wayar HITAM (β) | Lajur 2, sama dengan GND modul | β | Tiada wayar tambahan |
Lima batang jumper male-to-male sahaja, sebab baris terakhir itu diselesaikan oleh breadboard dan bukan oleh wayar. Buzzer ini berpolariti: merah ke pin yang dipacu, hitam ke GND; songsangkan dan ia cuma tidak berbunyi.
Buzzer ini tidak perlukan transistor, dan inilah kiraannya. SFM-20B ditarafkan pada 12V DC dengan tarikan arus maksimum 12mA pada taraf itu (julat operasi 3β24V, nada tetap 3300Β±500Hz), jadi dipacu pada 5V ia menarik kurang. Di sebelah Uno pula, datasheet ATmega328P meletakkan had mutlak (Absolute Maximum) arus DC setiap pin I/O pada 40.0mA, dan aras outputnya dijamin pada 20mA β pada VCC 5V dengan 20mA disumber, pin masih dijamin sekurang-kurangnya 4.2V. Kurang daripada 12mA duduk selesa di bawah kedua-dua angka itu.
Pasangan jujurnya: angka kelantangan utama buzzer ini disebut pada 12V yang ditarafkan itu, jadi pada 5V ia lebih perlahan β cukup untuk demo meja atau bilik darjah, bukan siren. Mahukan jeritan penuh? Jalankan buzzer pada 12V dan biarkan satu transistor kecil yang menyuisnya. Bukan relay untuk kerja ini β itu suis mekanikal, dan corak bip beberapa kali sesaat akan memakan hayat kitaran sentuhnya.

Macam mana nak kalibrasi trimmer biru itu dengan betul?
Trimmer 10k pada FLAME4P menetapkan satu ambang, jadi kalibrasinya bukan “pusing sampai jadi” β ia satu ukuran. Sebab itulah sketch di bawah mencetak analogRead(A0) ke Serial Monitor: nombor itu memberi anda dua penanda sempadan.
- Buka Serial Monitor pada 9600 baud, meja bersih tanpa api. Catat bacaan AO yang duduk stabil β inilah nombor “bersih” anda.
- Pegang nyalaan pada jarak yang anda memang mahu liputi, contohnya 20 sentimeter. Catat bacaan AO baharu; ia akan lebih rendah.
- Pusing trimmer perlahan-lahan sehingga DO bertukar keadaan antara dua nombor itu. DO-LED menyala pada saat yang sama, jadi titik lompatan itu boleh dilihat tanpa memandang skrin. Tidak perlu menghafal arah pusingan: dengan meja bersih, pusing sedikit dan lihat arah mana yang menyalakan DO-LED β itulah arah yang lebih sensitif.
Sebab itu jugalah memusing trimmer ke hujung tidak pernah menjadi. Satu hujung meletakkan rujukan di atas bacaan bersih anda, jadi DO kekal LOW dan penggera berbunyi tanpa henti; hujung satu lagi meletakkannya di bawah bacaan api anda, jadi DO tidak pernah bergerak. Ambang yang berguna sentiasa duduk antara dua ukuran tadi.
Mahu melihat DO-LED itu benar-benar melompat semasa skru dipusing? Demonstrasi modul ini merakamkan hardware yang sama:
Macam mana rupa kod Arduino untuk penggera api ini?
Buzzer SFM-20B ialah buzzer aktif β pengayunnya ada di dalam, jadi digitalWrite(HIGH) membunyikannya dan digitalWrite(LOW) mendiamkannya. tone() tidak akan menukar nadanya dan ia tidak boleh memainkan melodi; bunyi berselang datang daripada kod anda, bukan daripada buzzer.
Satu lagi keputusan reka bentuk yang berbaloi diterangkan: sketch ini menuntut lima bacaan berturut-turut yang mengesahkan api sebelum berbunyi. Sampel diambil setiap 20 milisaat dan penggera hanya hidup pada sampel kelima, jadi api mesti bertahan 80 hingga 100 milisaat tanpa putus β 80ms ialah jarak antara sampel pertama dan kelima, dan bakinya bergantung pada fasa pensampelan. Denyar kamera hanya beberapa milisaat dan alat kawalan jauh menghantar denyutan pendek berselang celah β kedua-duanya tidak mampu mengisi tetingkap itu, sedangkan api sebenar mengisinya dengan mudah. Satu per sepuluh saat pula tidak melambatkan apa-apa yang penting.
// Penggera kebakaran: modul sensor api (FLAME4P) + buzzer aktif SFM-20B.
// DO modul ini active-LOW: ia idle HIGH dan turun ke LOW bila api dikesan.
// AO pula bergerak arah bertentangan - paling tinggi bila tiada api, dan
// turun bila IR naik. Serial mencetak kedua-duanya supaya anda boleh
// kalibrasi trimmer biru itu daripada nombor sebenar unit anda sendiri.
const int PIN_DO = 2; // output digital modul (sudah ada pull-up di atas board)
const int PIN_AO = A0; // voltan pembahagi photodiode, mentah
const int PIN_BUZZ = 8; // wayar merah buzzer
// Sampel setiap 20 ms, dan 5 sampel berturut-turut sebelum menganggapnya api:
// api mesti bertahan 80-100 ms tanpa putus. Denyar kamera dan denyutan pendek
// alat kawalan jauh TV tidak mampu mengisi tetingkap itu; api sebenar boleh.
const unsigned long SAMPLE_MS = 20;
const int CONFIRM_HITS = 5;
// Bunyi berselang lebih senang didengar daripada jeritan berterusan, dan
// buzzer aktif ini hanya faham HIGH atau LOW - jadi coraknya datang dari kod.
const unsigned long BEEP_ON_MS = 400;
const unsigned long BEEP_OFF_MS = 200;
// Cetak bacaan kalibrasi 4 kali sesaat supaya Serial Monitor masih boleh dibaca.
const unsigned long PRINT_MS = 250;
unsigned long lastSample = 0;
unsigned long lastPrint = 0;
unsigned long beepMark = 0;
int hits = 0; // berapa sampel berturut-turut yang mengesahkan api
bool alarming = false;
bool beepHigh = false;
void setup() {
Serial.begin(9600);
// INPUT, bukan INPUT_PULLUP. Output LM393 ialah open-collector - ia hanya
// mampu menarik ke LOW - dan modul sudah membawa perintang pull-upnya
// sendiri, jadi pull-up dalaman Uno tiada kerja di sini.
pinMode(PIN_DO, INPUT);
pinMode(PIN_BUZZ, OUTPUT);
digitalWrite(PIN_BUZZ, LOW);
Serial.println(F("Sensor api sedia. AO tinggi = tiada api. DO LOW = api dikesan."));
}
void loop() {
unsigned long now = millis();
if (now - lastSample >= SAMPLE_MS) {
lastSample = now;
bool flameNow = (digitalRead(PIN_DO) == LOW);
if (flameNow) {
if (hits < CONFIRM_HITS) hits++;
} else {
hits = 0;
}
bool wantAlarm = (hits >= CONFIRM_HITS);
if (wantAlarm && !alarming) {
alarming = true;
beepHigh = true;
beepMark = now;
digitalWrite(PIN_BUZZ, HIGH);
Serial.println(F("API DIKESAN - penggera hidup"));
} else if (!wantAlarm && alarming) {
alarming = false;
beepHigh = false;
digitalWrite(PIN_BUZZ, LOW);
Serial.println(F("Bersih - penggera mati"));
}
}
// Corak bunyi berselang, tanpa delay(), supaya sensor terus dibaca.
if (alarming) {
unsigned long span = beepHigh ? BEEP_ON_MS : BEEP_OFF_MS;
if (now - beepMark >= span) {
beepMark = now;
beepHigh = !beepHigh;
digitalWrite(PIN_BUZZ, beepHigh ? HIGH : LOW);
}
}
// Baris kalibrasi: AO dahulu, kemudian keadaan DO yang trimmer tentukan.
if (now - lastPrint >= PRINT_MS) {
lastPrint = now;
Serial.print(F("AO="));
Serial.print(analogRead(PIN_AO));
Serial.print(F(" DO="));
Serial.println(digitalRead(PIN_DO) == LOW ? F("LOW (api)") : F("HIGH (bersih)"));
}
}
Perhatikan tiada delay() di dalam loop(). Corak bip dipandu oleh millis(), jadi sensor terus dibaca setiap 20ms walaupun buzzer sedang berbunyi β kalau tidak, penggera jadi pekak kepada dunia sepanjang setiap bip.
Perhatikan juga asimetrinya: lima sampel untuk menghidupkan penggera, tetapi satu sampel bersih sudah cukup untuk mematikannya. Buzzer yang berbunyi tersekat-sekat bermakna ambang anda duduk terlalu rapat dengan bacaan api anda. Mahu ia terus berbunyi sehingga dimatikan? Kekalkan alarming pada true sebaik ia hidup, dan biarkan butang reset Uno sahaja yang mengosongkannya.
Kesilapan biasa yang kami nampak daripada pelanggan sebenar
Yang paling kerap dengan modul sensor api ini ialah membaca DO terbalik: kod yang menganggap HIGH bermakna api menghasilkan penggera yang berbunyi sepanjang masa dan hanya senyap apabila api ditunjukkan kepadanya. Nombor dua: mengharapkan lagu daripada buzzer aktif, mencuba tone(), lalu menyangka buzzer itu rosak.
Kemudian trimmer yang dipusing ke hujung sekali β terpasang kekal di satu hujung, pekak di hujung yang satu lagi β sedangkan tempatnya antara dua bacaan AO yang diukur. Selalunya berpasangan dengan satu lagi: meja ujian diletak di sebelah tingkap yang terkena matahari terus, lalu kesimpulan bahawa sensor itu rosak sedangkan ia bekerja tepat seperti sepatutnya.
Dua lagi berkaitan hardware. Wayar tinned buzzer dicucuk terus ke dalam header female Uno, lalu mengembang dan tercabut di tengah demo β itulah sebab breadboard ada dalam senarai komponen. Dan bagi kuasa: pilih adaptor 9V, bukan 5V. Barrel jack Uno menyuap regulator on-board, dan regulator hanya boleh menurunkan voltan β sebab itulah Arduino menyarankan 7β12V pada jack itu, dan 9V duduk kemas di tengahnya.
Soalan lazim tentang sensor api Arduino
Kenapa buzzer saya berbunyi tak henti walaupun tiada api?
Hampir selalunya DO dibaca terbalik. Modul ini active-LOW, jadi ujian anda mesti digitalRead(pin) == LOW. Kalau kod sudah betul, DO-LED yang menyala kekal bermakna rujukan trimmer duduk di atas bacaan AO bersih anda β pusing balik sampai LED itu padam.
Boleh tak sensor ini gantikan pengesan asap di rumah?
Tak boleh, dan ini bukan soal kualiti komponen. Ia mengesan cahaya dalam garis pandang terus, jadi kebakaran yang membara tanpa nyalaan, asap, dan api di sebalik dinding semuanya terlepas. Guna ia sebagai demonstrator RBT atau projek elektronik sekolah, dan biarkan pengesan asap yang diperakui melindungi rumah.
Kenapa penggera berbunyi bila lampu dipasang atau tirai dibuka?
Photodiode itu responsif kepada 760β1100nm, dan matahari, mentol pijar, lampu halogen serta lampu inframerah kamera CCTV semuanya memancar kuat dalam jalur itu. Alihkan sensor daripada matahari terus, kemudian kalibrasi semula di tempat ia akan digunakan.
Boleh tak buzzer SFM-20B main melodi dengan tone()?
Tak boleh. Ia buzzer aktif dengan pengayun terbina dalam pada 3300Β±500Hz, jadi hanya ada satu nada. digitalWrite() HIGH membunyikannya dan LOW mendiamkannya; corak bip dibuat dengan mengatur masa pin itu di dalam kod.
Perlukah transistor untuk memacu buzzer ini daripada pin Arduino?
Tidak. SFM-20B ditarafkan pada 12V dengan tarikan arus maksimum 12mA pada taraf itu, jadi pada 5V ia menarik kurang β selesa di bawah Had Mutlak 40.0mA setiap pin I/O yang ditetapkan datasheet ATmega328P. Transistor hanya perlu kalau buzzer dinaikkan ke 12V.
Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.



Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
Infrared Flame Sensor Module Fire Detector Sensor Module For Arduino IOT Application
SFM-20B Active Buzzer DC 3-24V Piezoelectric Long Continous Beep
MB102 Breadboard 170 400 830 Holes Breadboard Donut Board Arduino Prototype Multi Color - MINI BREADBOARD 170 HOLES (WHITE)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 30CM
Power Supply Adapter DC Universal AC to DC Converter PSU 5V2A 5V3A 9V2A 12V2A - P.S. ADAPTOR (9V2A)