20. Alkohol tester – detekcia alkoholu pomocou Arduino
Cieľom cvičenia je zostrojiť a naprogramovať jednoduchý alkohol tester, ktorý dokáže detegovať prítomnosť alkoholových pár vo vzduchu a reagovať zmenou jasu LED (alebo rozsvietením výstražnej LED).
Žiak sa naučí:
- pracovať s plynovým senzorom (MQ-3),
- čítať analógové hodnoty zo senzora,
- pochopiť rozdiel medzi detekciou prítomnosti a odhadom koncentrácie,
- uvedomiť si limity lacných senzorov.
🧠 Princíp činnosti
Senzor MQ-3 reaguje na alkoholové pary (etanol).
Jeho výstupom je analógový signál, ktorého hodnota rastie so zvyšujúcou sa koncentráciou alkoholu v okolí senzora.
⚠️ Dôležité:
- nejde o presný certifikovaný alkohol tester,
- ide o indikátor prítomnosti alkoholu, nie o právne záväzné meranie.
🧰 Použité súčiastky
- Arduino UNO
- Modul Alcohol Sensor (MQ-3) zo sady Keyestudio KS0068
- LED dióda
- Rezistor 220–330 Ω
- Breadboard
- Prepojovacie vodiče
🔌 Zapojenie obvodu
Zapojenie MQ-3 senzora
| MQ-3 modul | Arduino UNO |
|---|---|
| VCC | 5V |
| GND | GND |
| AO | A0 |
(Digitálny výstup DO v tomto cvičení nepoužívame)
Zapojenie LED
| LED | Arduino UNO |
|---|---|
| Anóda (dlhá noha) | D9 (PWM) cez rezistor |
| Katóda (krátka noha) | GND |
🧩 Schéma zapojenia (textová)
Arduino UNO Breadboard
----------- -----------
5V ------------> + lišta
GND ------------> - lišta
MQ-3 modul:
VCC ------------> + lišta
GND ------------> - lišta
AO ------------> A0
LED:
D9 --> [220Ω] --> |>| --> GND
🔥 DÔLEŽITÉ UPOZORNENIE PRE HODINU
Senzor MQ-3 potrebuje zahriatie:
- po zapnutí počkaj 1–2 minúty,
- hodnoty sa postupne stabilizujú.
👉 Toto je výborný moment na vysvetlenie, že reálne senzory nie sú okamžité.
💻 Program – indikácia alkoholu jasom LED
const int MQ3 = A0;
const int LED = 9; // PWM pin
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
int alcoholValue = analogRead(MQ3); // 0–1023
int brightness = map(alcoholValue, 0, 1023, 0, 255);
analogWrite(LED, brightness);
Serial.print("Alkohol: ");
Serial.print(alcoholValue);
Serial.print(" | Jas LED: ");
Serial.println(brightness);
delay(200);
}
🧪 Testovanie
Bezpečný postup:
- fúknuť vzduch z úst (bez alkoholu),
- použiť dezinfekčný sprej na ruky (krátko, z diaľky),
- porovnať hodnoty pred a po.
➡️ LED sa rozjasní pri zvýšenej koncentrácii alkoholových pár.
🧠 Dôležitá myšlienka
Senzor nemeria promile – meria zmenu prostredia, ktorú musíme správne interpretovať.
⭐ Rozšírenie (pre rýchlejších žiakov)
- Nastaviť prahovú hodnotu a zapnúť alarm (LED / bzučiak).
- Porovnať hodnoty pri rôznych vzdialenostiach od senzora.
- Zobraziť hodnoty v Serial Plotteri.
- Diskusia: prečo je kalibrácia v praxi nutná?
❓ Kontrolné otázky
- Prečo senzor potrebuje čas na zahriatie?
- Prečo tento tester nemôže byť právne záväzný?
- Aký je rozdiel medzi indikáciou a presným meraním?
🔗 Prepojenie na prax
Podobné senzory sa používajú:
- v priemysle na detekciu únikov plynov,
- v bezpečnostných systémoch,
- v senzorických sieťach, kde sa nesleduje absolútna hodnota, ale trend a zmena.
Kód (plynulý jas podľa prahu 600–750)
const int MQ3 = A0;
const int LED = 9; // PWM pin
const int BASELINE = 600; // cca bez alkoholu
const int ALCOHOL = 750; // cca s alkoholom (silnejšia reakcia)
const int AVG_N = 10; // filter: počet vzoriek pre priemer
int buf[AVG_N];
long sum = 0;
int idx = 0;
int readAvg() {
int v = analogRead(MQ3);
sum -= buf[idx];
buf[idx] = v;
sum += v;
idx = (idx + 1) % AVG_N;
return (int)(sum / AVG_N);
}
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
// inicializácia filtra
for (int i = 0; i < AVG_N; i++) {
buf[i] = analogRead(MQ3);
sum += buf[i];
delay(20);
}
Serial.println("MQ-3 ready (wait 1-2 min for warm-up).");
}
void loop() {
int v = readAvg(); // vyhladená hodnota 0–1023
int brightness = 0;
if (v <= BASELINE) {
brightness = 0; // LED vypnutá
} else if (v >= ALCOHOL) {
brightness = 255; // max jas
} else {
// plynulý prechod medzi 600 a 750
brightness = map(v, BASELINE, ALCOHOL, 0, 255);
}
analogWrite(LED, brightness);
Serial.print("MQ3=");
Serial.print(v);
Serial.print(" LED=");
Serial.println(brightness);
delay(100);
}
Poznámky pre hodinu (dôležité)
- MQ-3 sa po zapnutí zahrieva → prvé 1–2 min budú hodnoty „plávať“.
- Hodnoty 600 a 750 sú lokálne (záleží od senzora, napájania, vzdialenosti, prúdenia).
- Ak to bude reagovať príliš skoro / neskoro, uprav:
BASELINE(napr. 580–650)ALCOHOL(napr. 700–820)


