Arduino - projekt 2 - Poplašné zariadenie
[ naspäť ]
V tomto projekte zostrojíme rôzne verzie poplašného zariadenia, ktoré stráži trezor. Využijeme svetelný IR senzor na zaznamenávanie prekážok, ktorý bude sledovať intenzitu svetla. V prípade, že sa zmení, spustí alarm.
Pripojme IR senzor na zaznamenávanie prekážok na nejaký digitálny pin, napr. 12, zároveň pripojíme zem (GND na GND) a napájanie (VCC na V).
Senzor má malý trimer (premenlivý odpor), ktorým sa dá nastaviť jeho citlivosť. Na svojom výstupe neustále oznamuje buď logickú nulu, ak niečo zaznamená v blízkosti (prípadne do neho zasvieti silné svetlo), alebo logickú jednotku, ak nič nevidí.
Upravme tretí program (03_cyklus_led) tak, že svetelný signál KITT zobazí až vtedy, keď sa k senzoru niekto priblíži, (uložme tento program do nového súboru 05_poplach).
Do funkcie setup() pridáme nastavenie pinu 12 na vstupný:
1 pinMode(12, INPUT);
na začiatok funkcie loop() doplňme cyklus while(), ktorý bude snímať senzor a kým bude senzor hlásiť logickú jednotku, bude len čakať. V okamihu, keď senzo zahlási logickú nulu, zobrazí svetelný efekt.
1 void loop() {
2 while (digitalRead(12) == 1)
3 {
4 // nerobime nic, len cakame
5 }
6
7 while (digitalRead(12) == 0)
8 {
9 for (int i = 2; i < 8; i++)
10 {
11 digitalWrite(i, HIGH);
12 delay(300);
13 digitalWrite(i, LOW);
14 }
15 }
16 }
Všimnime si ako sa používa cyklus while():
1 while (podmienka)
2 {
3 prikazy, ktore sa opakuju, kym je podmienka splnena
4 }
Pripojme teraz k Arduinu zvukovú sirénu, ktorá je malý jednochý reproduktor, ktorý sa dá pripojiť aj priamo k Arduinu (výkonnejšie zariadenia - ako sú napríklad jednosmerné motorčeky, alebo viaceré silnejšie LED nesmieme pripájať priamo, pretože môžu mať pre Arduino príliš veľký odber prúdu).
Jeden pin je označený +, ten pripojíme na niektorý digitálny pin (napr. D8) a druhý pin pripojíme na niektorú zem (G).
Zvuk vzniká kmitaním membrány v siréne, ktorou pohybuje elektromagnet. Preto musíme na pine 8 veľmi rýchlo (typicky niekoľko-sto-krát za sekundu meniť hodnoty 0 a 1 - čím rozkmitáme membránu sirény, ktorá vydá zvuk. Čím rýchlejšie budeme kmitať (vyšší kmitočet = frekvencia), tým vyšší tón siréna vydá.
Napríklad tón malé A má známu frekvenciu 440 Hz (pozri frekvencie ostatných tónov). Za 1 sekundu = 1000000 mikrosekúnd sa kmitnutie na jednu aj druhú stranu zopakuje 440-krát. Koľko mikrosekúnd treba počkať vždy po preklopení membrány na jednu stranu a potom znovu na druhú?
1000000 / 440 = 2273 (približne), čo je celá perióda, čiže polovica periódy je 1000000 / 440 / 2 = 1136.
Najpriamejší spôsob je teda striedať logickú 0 a 1 na výstupnom pine a vždy počkať 1136 mikrosekúnd.
1 void setup() {
2 pinMode(8, OUTPUT);
3 }
4
5 void loop() {
6 digitalWrite(8, HIGH);
7 delayMicroseconds(1136);
8 digitalWrite(8, LOW);
9 delayMicroseconds(1136);
10 }
Všimnime si, že doteraz sme na čakanie používali funkciu delay(), ktorá používala čas v milisekundách. Tisíckrát presnejšia je funkcia delayMicroseconds(), ktorá používa čas v mikrosekundách (miliontinách sekundy).
Arduino ale poskytuje viacero spôsobov, ako môžeme na výstupnom pine generovať kmitavý signál. Jednak je to funkcia
tone(pin, frekvencia) - ktorá začne v pozadí kmitať na zadanom pine, hoci pokračuje ďalej. Môžeme uviesť aj tretí argument - dĺžku trvania tónu v milisekundách: tone(pin, frequency, duration). Ak tretí argument neuvedieme, zvuk musíme zastaviť pomocou funkcie noTone().
Úloha pre vás: upravte program 05_poplach, aby súčasne počas svetelného efektu (ale len počas neho) vydával zvuk.
Pre pokročilých
- upravte program tak, aby nevydával monotónny zvuk, ale aby hral nejakú melódiu.