Gsm alarm s mozgom iz arduina. Kućni alarm ili korištenje senzora pokreta i LCD monitora s Arduinom


Pozdrav dragi čitatelju! Današnji članak govori o stvaranju jednostavnog kućni sustav sigurnost, s dostupnim komponentama. Ovaj mali i jeftini uređaj pomoći će vam da zaštitite svoj dom od upada pomoću Arduina, senzora pokreta, zaslona i zvučnika. Uređaj se može napajati putem baterije ili USB priključka na računalu.

Dakle, počnimo!

Kako radi?

Toplokrvna tijela zrače u infracrvenom području koje je nevidljivo ljudskim očima, ali se može otkriti pomoću senzora. Takvi senzori izrađeni su od materijala koji se, kada je izložen toplini, može spontano polarizirati, što omogućuje detektiranje pojave izvora topline u dometu senzora.

Za širi raspon koriste se Fresnelove leće koje prikupljaju infracrveno zračenje iz različitih smjerova i koncentrirajte ga na sam senzor.

Slika prikazuje kako leća iskrivljuje zrake koje padaju na nju.

Vrijedno je napomenuti da roboti bez posebno grijanih dijelova i oni hladnokrvni emitiraju vrlo malo u infracrvenom području, tako da senzor možda neće raditi ako vas zaposlenici Boston Dynamicsa ili gmazovi odluče okružiti.

Kada dođe do promjene razine IC zračenja u dometu djelovanja, to će obraditi Arduino, nakon čega će se status prikazati na LCD-u, LED će treptati, a zvučnik će se oglasiti zvučnim signalom.

Što će nam trebati?

  1. (ili bilo koja druga naknada).
  2. (16 znakova, dva retka)
  3. Jedan konektor za spajanje krunice na Arduino
  4. (iako možete koristiti normalan zvučnik)
  5. USB kabel - samo programiranje ( cca. trans.: uvijek dolazi s našim Arduinom!)
  6. Računalo (opet samo za pisanje i preuzimanje programa).

Usput, ako ne želite kupiti sve ove dijelove zasebno, preporučujemo da obratite pozornost na naše. Na primjer, sve što trebate, pa čak i više, nalazi se u našem početnom kompletu.

Povezujemo se!

Spajanje senzora pokreta vrlo je jednostavno:

  1. Spojimo Vcc pin na 5V Arduino.
  2. Spojite Gnd pin na GND Arduina.
  3. Pin OUT spojen je na digitalni pin broj 7 iz Arduina

Sada pričvrstimo LED i zvučnik. Ovdje je jednako jednostavno:

  1. Spojimo kratku nogu (minus) LED-a na masu
  2. Spojimo dugu nogu (plus) LED-a na izlazni broj 13 Arduina
  3. Crvena žica zvučnika na izlaz #10
  4. Crna žica na masu

A sada je najteži dio spajanje 1602 LCD zaslona na Arduino. Zaslon je bez I2C, tako da će trebati puno Arduino izlaza, ali rezultat će biti vrijedan toga. Dijagram je prikazan u nastavku:

Treba nam samo dio sklopa (nećemo imati podešavanje kontrasta potenciometrom). Stoga trebate učiniti samo sljedeće:

Sada znate kako spojiti 1602 zaslon na Arduino UNO R3 (kao i bilo koju Arduino verziju od Mini do Mega).

Programiranje

Vrijeme je da prijeđemo na programiranje. Ispod je šifra koju samo trebate ispuniti i ako ste sve dobro sastavili uređaj je spreman!

#uključi int ledPin = 13; // LED pin int inputPin = 7; // Pin na koji je Out senzor pokreta povezan int pirState = LOW; // Trenutno stanje (ništa nije pronađeno na početku) int val = 0; // Varijabla za očitavanje stanja digitalnih ulaza int pinSpeaker = 10; // Pin na koji je spojen zvučnik. Potreban za korištenje PWM pina LiquidCrystal lcd (12, 11, 5, 4, 3, 2); // Inicijalizirajte LCD zaslon void setup() ( // Odredite smjer prijenosa podataka na digitalnim pinovima pinMode(ledPin, OUTPUT); pinMode(inputPin, INPUT); pinMode(pinSpeaker, OUTPUT); // Započnite otklanjanje grešaka izlaznih informacija putem serijski port Serial .begin(9600); // Pokretanje izlaza na LCD zaslon lcd.begin(16, 2); // Postavljanje indeksa na zaslonima za početak izlaza iz // (2 znaka, 0 redaka) lcd. setCursor(2) , 0) ; // Izlaz na LCD zaslon lcd.print("P.I.R Motion"); // Ponovno pomicanje lcd.setCursor(5, 1); // Izlaz lcd.print("Sensor"); // Pauza za čitanje , što je ispisano delay(5000); // Brisanje lcd.clear(); // Isto kao lcd.setCursor(0, 0); lcd.print("Obrada podataka."); delay(3000); lcd.clear (); lcd.setCursor(3, 0); lcd.print("Čekanje"); lcd.setCursor(3, 1); lcd.print("Kretanje...."); ) void loop() ( // Očitajte očitanje senzora val = digitalRead(inputPin); if (val == HIGH) ( // Ako postoji kretanje, tada uključite LED i uključite sirenu digitalWrite(ledPin, HIGH); playTone(300, 300); kašnjenje (150); // Ako do ove točke nije bilo pomaka, ispišite poruku // da je otkriveno // Kôd u nastavku je potreban kako bi se napisala samo promjena stanja, a ne ispisala vrijednost svaki put ako (pirState == LOW) ( Serial.println( "Otkriveno kretanje!"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Otkriveno kretanje!"); pirState = HIGH; ) ) else ( // Ako je kretanje završilo digitalWrite(ledPin, LOW); playTone(0, 0); delay(300); if (pirState == HIGH)( // Javljamo da je kretanje bilo, ali je već završilo Serial.println( "Kretanje je završeno!"; lcd.clear() ; lcd.setCursor(3, 0); lcd.print("Čeka se"); lcd.setCursor(3, 1); lcd.print("Kretanje... ."); pirState = LOW; ) ) ) / / Funkcija reprodukcije zvuka. Duration (duration) - u milisekundama, Freq (frequency) - u Hz void playTone(long duration, int freq) ( duration *= 1000; int period = (1.0 / freq) * 100000; long elapsed_time = 0; while (elapsed_time< duration) { digitalWrite(pinSpeaker,HIGH); delayMicroseconds(period / 2); digitalWrite(pinSpeaker, LOW); delayMicroseconds(period / 2); elapsed_time += (period); } }

GSM alarm na Arduinu

U ovom članku ćete naučiti kako (kupiti) vrlo jeftino napraviti vlastiti GSM alarmni sustav koristeći GSM modul i Arduino. Objekt zaštite GSM alarm savršen prikladna vikendica, kuća, garaža, stan.


Korak 1: Elementi
Za ovaj projekt trebat će vam:


GSM štit

Zujalo
Alarmna sirena 12V
Napajanje 12V

Tipkovnica za Arduino
Okvir.

Korak 2: Spajanje komponenti


Prvo ćete postaviti GSM modul na Arduino Uno, morat ćete zalemiti GND i VCC žice zajedno s dva senzora, zujalicom i ulazom relejnog modula. Nakon toga spojite ove zalemljene žice na odgovarajući GSM shield konektor. Zatim ćete od ovih dijelova napraviti konektor za ulaz/izlaz signala, a zadnje što trebate učiniti je spojiti tipkovnicu

Arduino Uno/GSM terminali:

Pin 0: nije spojen;
Zaključak 1: nepovezano;
Pin 2: nepovezan (GSM će koristiti ovaj pin);
Pin 3: nepovezan (GSM će koristiti ovaj pin);
Zaključak 4: zadnji redak korištenje tipkovnice (kontakt tipkovnice 4 - od 8);
Zaključak 5: nepovezano;
Pin 6: drugi stupac pomoću tipkovnice (pin tipkovnice 6 - s 8);
Zaključak 7: treći stupac s tipkovnice (prst tipkovnice 7 - od 8);
Pin 8: nepovezan (GSM će koristiti ovaj pin);
Pin 9: nepovezan (GSM će koristiti ovaj pin);
Pin 10: podaci PIR senzora #2;
Zaključak 11: zvučni signal sirene (isporučuje se na ulaz relejnog modula);
Pin 12: podaci PIR senzora #1;
Pin 13: ulaz zujalice;

Kao što vidite, iako tipkovnica ima 8 pinova, samo su tri spojena (jedan redak i dva stupca, što omogućuje čitanje dva broja - matrice 1×2), tako da mogu napraviti lozinke pomoću te tri žice i nema potrebno je koristiti sve kontakte s tipkovnice. To je zato što jednom kada senzor pokreta detektira osobu koja hoda u sobi, osoba će imati samo 5 sekundi da isključi alarm. Nakon što se alarm trenutno ne isključi, GSM shield Vam šalje SMS, ili poziva Vaš telefonski broj. Arduino je programiran za poziv i čim se javite na telefon, poklopit će slušalicu.

Naravno, moguće je dobiti lažna očitanja sa senzora, pa postoji opcija da isključite alarm jednostavnim slanjem SMS-a s telefona na Arduino. Također, još jedna opcija koju možete učiniti je postaviti štit tako da vam šalje jednu poruku dnevno kako biste znali da radi ispravno.

Korak 3: Kod

Samo preuzmite kod ispod i prevedite. Koristi biblioteke Keypad.h i GSM.h.
Preuzmi datoteku: (preuzimanja: 181)
Preuzmi datoteku: (preuzimanja: 104)

Korak 4: Zaključak


S obzirom da će Arduino Uno kod za samo pet sekundi nakon što vam netko provali u kuću poslati SMS poruke i nazvati vaš telefon, pretpostavljam da ćete imati dovoljno vremena da pozovete policiju. Naravno, sirena će uplašiti lopove, a vaš dom ili drugi prostor postat će sigurniji uz pomoć ovog članka.

Infracrveni (IR) senzori obično se koriste za mjerenje udaljenosti, ali se mogu koristiti i za otkrivanje objekata. Spajanjem nekoliko IR senzora na Arduino možemo stvarati protuprovalni alarm.

Pregled

Infracrveni (IR) senzori obično se koriste za mjerenje udaljenosti, ali se mogu koristiti i za otkrivanje objekata. IR senzori se sastoje od infracrvenog odašiljača i infracrvenog prijemnika. Odašiljač emitira impulse infracrveno zračenje dok prijemnik detektira bilo kakve refleksije. Ako prijemnik detektira refleksiju, to znači da postoji neki objekt ispred senzora na nekoj udaljenosti. Ako nema odraza, nema ni objekta.

IR senzor koji ćemo koristiti u ovom projektu detektira refleksije unutar određenog raspona. Ovi senzori imaju mali linearni uređaj nabojno spregnut (CCD), koji detektira kut pod kojim se IR zračenje vraća na senzor. Kao što je prikazano na donjoj slici, senzor odašilje infracrveni puls u prostor, a kada se objekt pojavi ispred senzora, puls se reflektira natrag na senzor pod kutom proporcionalnim udaljenosti između objekta i senzora. Prijemnik senzora detektira i šalje kut, a pomoću te vrijednosti možete izračunati udaljenost.

Spajanjem par IR senzora na Arduino možemo napraviti jednostavan protuprovalni alarm. Postavit ćemo senzore na okvir vrata, a pravilnim postavljanjem senzora moći ćemo detektirati kada netko prođe kroz vrata. Kada se to dogodi, izlaz IR senzora će se promijeniti, a mi ćemo otkriti tu promjenu stalnim očitavanjem izlaza senzora s Arduinom. U ovaj primjer znamo da objekt prolazi kroz vrata kada izlaz IR senzora prijeđe 400. Kada se to dogodi, Arduino će aktivirati alarm. Za resetiranje alarma korisnik može pritisnuti gumb.

Pribor

  • 2 x IR senzor udaljenosti;
  • 1 x Arduino Mega 2560
  • 1 x zujalica;
  • 1 x gumb;
  • 1 x 470 ohm otpornik;
  • 1 x NPN tranzistor;
  • skakači.

Dijagram povezivanja

Krug za ovaj projekt prikazan je na donjoj slici. Izlazi dvaju IR senzora spojeni su na pinove A0 i A1. Druga dva pina spojena su na 5V i GND pinove. Zujalica od 12 volti spojena je na pin 3 preko tranzistora, a gumb koji se koristi za onemogućavanje alarma spojen je na pin 4.


Fotografija ispod pokazuje kako smo zalijepili senzore na okvir vrata za ovaj eksperiment. Naravno, u slučaju stalnog korištenja, senzore biste ugradili drugačije.


Montaža

  1. Spojite 5V i GND pinove Arduino ploče na napajanje i GND pinove senzora. Također im možete napajati vanjsko napajanje.
  2. Spojite izlazne pinove senzora na pinove A0 i A1 Arduino ploče.
  3. Spojite pin 3 Arduina na bazu tranzistora preko 1K otpornika.
  4. Primijenite 12V na kolektor tranzistora.
  5. Spojite pozitivni vod zujalice od 12 V na odašiljač, a negativni vod na tračnicu za uzemljenje.
  6. Spojite pin 4 na pin 5V preko gumba. Iz sigurnosnih razloga, uvijek je najbolje to učiniti preko dodatnog malog otpornika kako bi se izbjegao visok protok struje.
  7. Spojite Arduino ploču na računalo putem USB kabela i prenesite program na mikrokontroler koristeći Arduino IDE.
  8. Uključite Arduino ploču pomoću napajanja, baterije ili USB kabela.

Kodirati

const int zujalica=3; // pin 3 je izlaz za zujalicu const int pushbutton=4; // pin 4 je gumb input void setup() ( pinMode(buzzer,OUTPUT); // postavi pin 3 na izlaz pinMode(pushbutton,INPUT); // postavi pin 4 na ulaz) void loop() ( // čitanje izlaz oba senzora i usporedite rezultat s vrijednošću praga int sensor1_value = analogRead(A0); int sensor2_value = analogRead(A1); if (sensor1_value > 400 || sensor2_value > 400) ( while(true) ( ​​​​digitalWrite( buzzer,HIGH) ; // omogući alarm if(digitalRead(pushbutton) == HIGH) break; ) ) else ( digitalWrite(buzzer,LOW); // onemogući alarm ) )

Video

Dobar dan 🙂 Danas ćemo pričati o signalizaciji. Tržište usluga prepuno je tvrtki, organizacija koje instaliraju i održavaju sigurnosne sustave. Ove tvrtke kupcu nude širok izbor alarmnih sustava. Međutim, njihov trošak je daleko od jeftinog. Ali što je s osobom koja nema toliko osobnog novca da se može potrošiti na protuprovalni alarm? Mislim da se zaključak nameće sam od sebe - čini alarm njihov ruke. Ovaj članak pruža primjer kako možete izraditi vlastiti kod sigurnosni sustav pomoću Arduino uno ploče i nekih magnetskih senzora.

Sustav se može deaktivirati unosom lozinke s tipkovnice i pritiskom na tipku ‘ * ‘. Ako želite promijeniti svoju trenutnu lozinku, to možete učiniti pritiskom na ' B', a ako želite preskočiti ili prekinuti operaciju, to možete učiniti pritiskom na tipku ‘#’. Sustav ima zujalicu za reprodukciju različitih zvukova prilikom izvođenja određene operacije.

Sustav se aktivira pritiskom na tipku ‘A’. Sustav daje 10 sekundi da napusti prostoriju. Nakon 10 sekundi aktivirat će se alarm. Broj magnetskih senzora ovisit će o vašem vlastitu želju. Projekt je uključivao 3 senzora (za dva prozora i vrata). Kada se prozor otvori, aktivira se sustav i aktivira se zvučni alarm. Sustav se može deaktivirati unosom lozinke. Kada se vrata otvore, alarm daje osobi koja ulazi 20 sekundi da unese lozinku. Sustav koristi ultrazvučni senzor, koji može otkriti kretanje.

Video uređaja

zanatski Napravljeno u informativno/edukativne svrhe. Ako ga želite koristiti kod kuće, morat ćete ga modificirati. Upravljačku jedinicu zatvorite u metalno kućište i osigurajte električni vod od mogućih oštećenja.

Započnimo!

Korak 1: Što će nam trebati

  • ploča Arduino uno;
  • LCD zaslon visokog kontrasta 16×2;
  • tipkovnica 4×4;
  • 10~20kΩ potenciometar;
  • 3 magnetska senzora (oni su i reed prekidači);
  • 3 2-pinske vijčane stezaljke;
  • HC-SR04 ultrazvučni senzor;

Ako želite izgraditi sustav bez korištenja Arduina, trebat će vam i sljedeće:

  • DIP zaglavlje za atmega328 + mikrokontroler atmega328;
  • 16MHz kvarcni rezonator;
  • 2 kom. 22pF keramika, 2 kom. 0,22uF elektrolitski kondenzator;
  • 1 kom. otpornik od 10kΩ;
  • utičnica za struju (DC power jack);
  • daska za kruh;
  • 5V napajanje;

I jedna kutija za sve to spakirati!

Alati:

  • Nešto što može prorezati plastičnu kutiju;
  • pištolj za vruće ljepilo;
  • Bušilica / odvijač.

Korak 2: Dijagram alarma

Shema povezivanja je prilično jednostavna.

Malo pojašnjenje:

LCD visokog kontrasta:

  • Pin1 - Vdd na GND
  • Pin2 - Vss do 5V;
  • Pin3 - Vo (na središnji izlaz potenciometra);
  • Pin4 - RS na Arduino pin 8;
  • Pin5 - RW na GND
  • Pin6 - EN na Arduino pin 7;
  • Pin11 - D4 na Arduino pin 6;
  • Pin12 - D5 na Arduino pin 5;
  • Pin13 - D6 na Arduino pin 4;
  • Pin14 - D7 na Arduino pin 3;
  • Pin15 - Vee (na desnom ili lijevom izlazu potenciometra).

Tipkovnica 4×4:

S lijeva na desno:

  • Pin1 do A5 Arduino pin;
  • Pin2 na A4 Arduino pin;
  • Pin3 na Arduino pin A3;
  • Pin4 na Arduino pin A2;
  • Pin5 na Arduino pin 13;
  • Pin6 na Arduino pin 12;
  • Pin7 na Arduino pin 11;
  • Pin8 na Arduino pin 10.

Korak 3: Firmware

Korak prikazuje kod koji koristi ugrađeni !

Preuzmite dodatak Codebender. Kliknite na gumb "Run" u Arduinu i flashajte svoju ploču ovim programom. To je sve. Upravo ste programirali Arduino! Ako želite promijeniti kod, kliknite gumb "Uredi".

Napomena: Ako ne koristite Codebender IDE za programiranje Arduino ploče, morat ćete instalirati dodatne biblioteke u Arduino IDE.

Korak 4: Izrada vlastite upravljačke ploče

Nakon uspješno sastavljenog i testiranog novi projekt na Arduino baza uno, možete početi izrađivati ​​vlastitu ploču.

Nekoliko savjeta za uspješniji završetak pothvata:

  • Otpornik od 10 kΩ mora biti spojen između pina 1 (reset) i pina 7 (Vcc) mikrokontrolera Atmega328.
  • Kristal od 16MHz trebao bi biti spojen na pinove 9 i 10 označene kao XTAL1 i XTAL2
  • Spojite svaki vod rezonatora na kondenzatore od 22pF. Spojite slobodne izvode kondenzatora na pin 8 (GND) mikrokontrolera.
  • Ne zaboravite spojiti drugu strujnu liniju ATmega328 na napajanje, pinovi 20-Vcc i 22-GND.
  • Dodatne informacije o pinovima mikrokontrolera možete pronaći na drugoj slici.
  • Ako planirate koristiti napajanje s naponom većim od 6V, morate koristiti LM7805 linearni regulator i dva elektrolitska kondenzatora od 0,22uF, koji se moraju montirati na ulaz i izlaz regulatora. To je važno! Ne stavljajte više od 6V na ploču!!! U protivnom ćete spaliti svoj Atmega mikrokontroler i LCD zaslon.

Korak 5: Postavite strujni krug u kućište

Pozdrav svima, danas ćemo pogledati uređaj koji se zove senzor pokreta. Mnogi od nas su čuli za ovu stvar, netko se čak bavio ovim uređajem. Što je senzor pokreta? Pokušajmo to shvatiti, pa:

Senzor pokreta ili senzor pomaka - uređaj (uređaj) koji otkriva kretanje bilo kakvih predmeta. Vrlo često se ovi uređaji koriste u sigurnosnim, alarmnim i nadzornim sustavima. Postoji mnogo faktora oblika ovih senzora, ali mi ćemo razmotriti modul senzora kretanja za povezivanje s pločama arduino,i od tvrtke RobotDyn. Zašto baš ova tvrtka? Ne želim reklamirati ovu trgovinu i njene proizvode, ali upravo su proizvodi ove trgovine odabrani kao laboratorijski uzorci zbog kvalitetne prezentacije proizvoda krajnjem potrošaču. Dakle, upoznajte - senzor pokreta(PIR senzor) iz RobotDyn-a:


Ovi senzori su male veličine, troše malo energije i jednostavni su za korištenje. Osim toga, RobotDyn senzori pokreta također imaju kontakte označene sitotiskom, to je naravno sitnica, ali vrlo ugodno. Pa, za one koji koriste iste senzore, ali samo od drugih tvrtki, ne brinite - svi imaju istu funkcionalnost, pa čak i ako kontakti nisu označeni, pinout takvih senzora lako je pronaći na Internetu.

Glavni tehnički podaci Senzor pokreta (PIR senzor):

Radno područje senzora: od 3 do 7 metara

Kut praćenja: do 110 o

Radni napon: 4,5...6 Volti

Potrošnja struje: do 50uA

Bilješka: Standardna funkcionalnost senzora može se proširiti spajanjem svjetlosnog senzora na IN i GND pinove i tada će senzor pokreta raditi samo u mraku.

Inicijalizacija uređaja.

Kada je uključen, senzoru treba gotovo jedna minuta da se inicijalizira. Tijekom tog razdoblja senzor može davati lažne signale, to treba uzeti u obzir pri programiranju mikrokontrolera s senzorom spojenim na njega ili u krugovima aktuatora ako se veza vrši bez upotrebe mikrokontrolera.

Kut i područje detekcije.

Kut detekcije (praćenja) je 110 stupnjeva, raspon udaljenosti detekcije je od 3 do 7 metara, ilustracija ispod sve to prikazuje:

Podešavanje osjetljivosti (udaljenost detekcije) i vremenske odgode.

Donja tablica prikazuje glavne prilagodbe senzora kretanja, lijevo je kontrola vremenske odgode, odnosno u lijevom stupcu je opis mogućih postavki. Desni stupac opisuje prilagodbe udaljenosti detekcije.


Spajanje senzora:

  • PIR senzor- Arduino Nano
  • PIR senzor - Arduino Nano
  • PIR senzor - Arduino Nano
  • PIR senzor - za svjetlosni senzor
  • PIR senzor - za svjetlosni senzor

Tipični dijagram povezivanja je dan na dijagramu ispod, u našem slučaju senzor je prikazan uvjetno sa stražnje strane i spojen je na Arduino Nano ploču.

Skica koja prikazuje rad senzora pokreta (koristimo program):

/* * PIR senzor -> Arduino Nano * PIR senzor -> Arduino Nano * PIR senzor -> Arduino Nano */ void setup() ( //Postavite vezu na port monitor Serial.begin(9600); ) void petlja () ( //Očitajte vrijednost praga s porta A0 //obično je veća od 500 ako postoji signal if(analogRead(A0) > 500) ( //Signal sa senzora kretanja Serial.println("Postoji kretanje !!!"); ) else ( / /Nema signala Serial.println("Sve je tiho..."); ) )

Skica je normalan test senzora pokreta, ima mnogo nedostataka, kao što su:

  1. Mogući lažni alarmi, senzor treba samoinicijalizaciju unutar jedne minute.
  2. Čvrsto vezanje na port monitor, bez izlaznih pokretača (relej, sirena, LED)
  3. Vrijeme signala na izlazu senzora je prekratko, kod detekcije pokreta potrebno je programski odgoditi signal na duže vrijeme.

Kompliciranjem kruga i proširenjem funkcionalnosti senzora mogu se izbjeći gore navedeni nedostaci. Da biste to učinili, morat ćete nadopuniti krug relejnim modulom i spojiti običnu svjetiljku od 220 volti kroz ovaj modul. Sam relejni modul bit će spojen na pin 3 na Arduino Nano ploči. Dakle, koncept je:

Sada je vrijeme da malo poboljšamo skicu, koja je testirala senzor pokreta. Na skici će biti implementirana odgoda isključivanja releja, jer sam senzor kretanja ima prekratko vrijeme izlaznog signala kada se aktivira. Program implementira odgodu od 10 sekundi kada se senzor aktivira. Ako želite, ovo vrijeme se može povećati ili smanjiti promjenom vrijednosti varijable DelayValue. Ispod je skica i video rada cjeline sklopljeni sklop:

/* * PIR senzor -> Arduino Nano * PIR senzor -> Arduino Nano * PIR senzor -> Arduino Nano * Relejni modul -> Arduino Nano */ //relout - pin (izlazni signal) za relejni modul const int relout = 3 ; //prevMillis - varijabla za pohranjivanje vremena prethodnog ciklusa skeniranja programa //interval - vremenski interval za brojanje sekundi dok se relej ne isključi unsigned long prevMillis = 0; int interval = 1000; //DelayValue - period tijekom kojeg je relej uključen int DelayValue = 10; //initSecond - Iteracijska varijabla inicijalizacijske petlje int initSecond = 60; //countDelayOff - brojač vremenskog intervala static int countDelayOff = 0; //okidač - zastavica aktivacije senzora kretanja static bool okidač = false; void setup() ( // Standardni postupak inicijalizacija porta na koji je spojen relejni modul //VAŽNO!!! - kako bi relejni modul ostao u inicijalno isključenom stanju //i ne bi radio tijekom inicijalizacije, potrebno je upisati vrijednost HIGH na ulazno/izlazni port, time će se izbjeći lažni "klikovi" i zadržati // stanje releja kakvo je bilo prije uključivanja cijelog kruga u rad pinMode(relout, OUTPUT); digitalWrite(reout, HIGH); // Ovdje je sve jednostavno - čekamo da završi 60 ciklusa (varijabla initSecond) // u trajanju od 1 sekunde, tijekom tog vremena senzor se "samoinicijalizira" za (int i = 0; i< initSecond; i ++) { delay(1000); } } void loop() { //Считать значение с аналогового порта А0 //Если значение выше 500 if(analogRead(A0) >500) ( //Postavi zastavicu okidača senzora kretanja if(!trigger) ( trigger = true; ) ) //Dok je zastavica okidača senzora kretanja postavljena while(okidač) ( //Izvrši slijedeći upute//Spremi u varijablu currMillis //vrijednost milisekundi proteklih od //početka izvođenja programa unsigned long currMillis = millis(); //Usporedi s prethodnom vrijednošću milisekundi //ako je razlika veća od navedenog intervala, tada: if(currMillis - prevMillis > interval) ( //Spremi trenutnu vrijednost milisekundi u varijablu prevMillis prevMillis = currMillis; // Provjerite brojač kašnjenja uspoređujući ga s vrijednošću razdoblja / /tijekom kojeg se relej mora držati u uključenom stanju if(countDelayOff >= DelayValue) ( ​​​​//Ako je vrijednost jednaka, tada: //resetirajte zastavica za aktiviranje okidača senzora kretanja = false; //Poništi brojač kašnjenja countDelayOff = 0; // Isključi relej digitalWrite(relout, HIGH); //Prekini prekid petlje; ) else ( //Ako je vrijednost i dalje manje, zatim //Povećaj brojač kašnjenja za jedan countDelayOff ++; //Zadrži relej na digitalWrite(relout, LOW ); ) ) ) )

Program sadrži strukturu:

unsigned long prevMillis = 0;

int interval = 1000;

...

unsigned long currMillis = millis();

if(currMillis - prevMillis > interval)

{

prevMillis = currMillis;

....

// Naše operacije zatvorene u tijelu konstrukcije

....

}

Da pojasnimo, odlučeno je zasebno komentirati ovu konstrukciju. Tako, ovaj dizajn omogućuje izvođenje, tako reći, paralelnog zadatka u programu. Tijelo strukture puca otprilike jednom u sekundi, što je olakšano varijablom interval. Prvo, promjenjivo currMillis vrijednost koja se vraća kada je funkcija pozvana je dodijeljena millis(). Funkcija millis() vraća broj milisekundi proteklih od početka programa. Ako razlika currMillis-prevMillis veća od vrijednosti varijable interval onda to znači da je već prošlo više od jedne sekunde od početka izvođenja programa, te trebate spremiti vrijednost varijable currMillis u varijablu prevMillis zatim izvršiti operacije zatvorene u tijelu strukture. Ako razlika currMillis-prevMillis manja od vrijednosti varijable interval, tada još nije prošla sekunda između ciklusa skeniranja programa, a operacije sadržane u tijelu strukture su preskočene.

Pa, na kraju članka, video od autora:

Omogućite javascript kako bi komentari radili.