Oglas
Zaznajte gibanje in prestrašite vraga vsiljivca z visokimi zvočnimi alarmi in utripajočimi lučmi. Se to sliši zabavno? Seveda se. To je cilj današnjega projekta Arduino, primeren za začetnike. Pisali bomo povsem iz nič in preizkušali, tako da lahko nadaljujete, kako boste vse to naredili, namesto da bi preprosto namestili nekaj, kar sem že naredil.
Izjava o omejitvi odgovornosti: to dejansko ne bo zaščitilo vaše hiše. To je morda daj sestri grdo šok, ko se prikrade v tvojo sobo.
Potrebovali boste:
- Arduino
- Ultrazvočni senzor pinga, ki ga uporabljam HC-SR04 PIR bi bil boljši, vendar so dragi. Senzor za ping lahko naključno namestite v vrata in še vedno opravlja isto osnovno delo in znaša le 5 USD
- Piezo piščal
- LED luč s trakovi, z enakim ožičenjem kot mi nazaj v ta projekt Izdelajte svojo dinamično zunanjo osvetlitev za medijski centerČe v računalniku ali medijskem središču gledate veliko filmov, sem prepričan, da ste se soočili z dilemo razsvetljave; ali popolnoma ugasnete vse luči? Ali jih držite na polnem pihu? Ali ... Preberi več .
Ko povežete ta projekt, ne odstranjujte vsega vsakič - samo nadaljujte z gradnjo na zadnjem bloku. Ko pridete do razdelka »Kodiranje alarmnega sistema«, bi morali vse bite in kose ožičiti, videti nekako takole:
Utripajoče luči
Uporabite shemo ožičenja iz tega projekta Izdelajte svojo dinamično zunanjo osvetlitev za medijski centerČe v računalniku ali medijskem središču gledate veliko filmov, sem prepričan, da ste se soočili z dilemo razsvetljave; ali popolnoma ugasnete vse luči? Ali jih držite na polnem pihu? Ali ... Preberi več za priklop vašega LED traku; ne spreminjajte zatičev, saj potrebujemo izhodno širino. Uporaba ta koda da hitro preizkusite ožičenje. Če gre vse v redu, bi morali imeti to:
Senzor razdalje
Na modulu SR04 boste našli 4 nožice. VCC in BND pojdite na + 5V tirnice in tal; TRIG je zatič, ki se uporablja za pošiljanje sonarnega signala, to postavite na pin 6; ECHO se uporablja za branje signala nazaj (in zato izračunavanje razdalje) - to postavite na 7.
Da bodo stvari neverjetno preproste, obstaja knjižnica, ki jo lahko imenujemo NewPing. Prenesite in postavite v svoje Arduino Knjižnica mapo in pred nadaljevanjem znova zaženite IDE. Preizkusite z uporabo ta koda; odprite serijski monitor in se prepričajte, da je hitrost nastavljena na 115200 baud. Z nekaj sreče bi morali videti nekaj meritev razdalj, ki vam jih pošiljajo z zelo veliko hitrostjo. Morda boste našli odstopanje za 1 ali 2 centimetra, vendar je to v redu. Poskusite z roko pred senzorjem, ga premikati navzgor in navzdol, da opazujete spreminjajoče se odčitke.
Koda mora biti dokaj preprosta za razumevanje. Na začetku je nekaj deklaracij ustreznih zatičev, vključno z največjo razdaljo - to se lahko razlikuje glede na točen senzor, ki ga imate, toda dokler boste lahko natančno prebrali odčitke manj kot 1 meter, bi morali biti globa.
V zanki te testne aplikacije uporabljamo ping () funkcijo za pošiljanje sonarnega pinga, pri čemer dobimo vrednost v milisekundah, koliko časa je trajalo, da se vrednost vrne. Da bi to razumeli, uporabljamo knjižnice NewPing, vgrajene v stalnici US_ROUNDTRIP_CM, ki določa, koliko mikrosekund traja en centimeter. Med pingi je tudi 50 ms zakasnitve, da se senzor ne preobremeni.
Piezo Alarm
Piezo kristalni senzor je preprost in poceni piščalnik, za izdelavo različnih tonov pa lahko uporabimo PWM pin 3. Eno žico priključite na pin 3, eno na ozemljitev tirnice - ni pomembno, katera.
Uporaba ta koda testirati.
Edini način za uničenje precej neprijetnega in glasnega alarma je vlečenje čepov. Koda je nekoliko zapletena za razlago, vendar vključuje uporabo sinusnih valov za ustvarjanje značilnega zvoka. Pritrdite številke za igranje z različnimi toni.
Kodiranje alarma
Zdaj, ko imamo vse koščke te sestavljanke, jih združimo skupaj.
Pojdite naprej in naredite novo skico, imenovano Alarm. Začnite s kombiniranjem vseh spremenljivk in definicij pin, ki smo jih do zdaj imeli v testnih primerih.
#include // Izberite, ki jih je treba uporabiti PWM zatiči. #define RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino zatič, vezan na sprožilni zatič na ultrazvočnem senzorju. #define ECHO_PIN 7 // Arduino zatič, vezan na odmerek na ultrazvočnem senzorju. #define MAX_DISTANCE 100 // Največja razdalja, ki jo želimo pingati (v centimetrih). #define ALARM 3 float sinVal; int toneVal;
Začnite s pisanjem osnovnega nastaviti() funkcija - za zdaj se bomo ukvarjali le z lučmi. Pred začetkom glavne zanke sem dodal 5-sekundni zamik, da bi dobili nekaj časa, da se umaknemo s poti, če je potrebno.
void setup () {// nastavi pinMode za RGB trak pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // ponastavite luči analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); zamuda (5000); }
Uporabljamo pomožno funkcijo, ki nam omogoča hitro zapisovanje ene vrednosti RGB na lučke.
// pomožna funkcija, ki nam omogoča, da barvo pošljemo z enim ukazom. barva praznine (nepodpisano rdeče, nepodpisano zeleno, nepodpisano modro) // funkcija ustvarjanja barv {analogWrite (RED_PIN, rdeča); analogWrite (BLUE_PIN, modra); analogWrite (GREEN_PIN, zelena); }
Končno bo naša zanka za zdaj sestavljena iz preprostega barvnega utripa med rdečo in rumeno (ali karkoli že želite, da je vaš alarm - samo spremenite vrednosti RGB).
void loop () {barva (255,0,0); // rdeča zamuda (100); barva (255,255,0); // rumena zamuda (100); }
Prenesite in preizkusite, da boste na pravi poti.
Zdaj vključimo senzor razdalje, da sproži te luči samo, če pride nekaj, recimo, 50 cm (le manj kot širina okvirja vrat). Že smo določili prave zatiče in uvozili knjižnico, torej pred vašo nastaviti() funkcijo dodajte naslednjo vrstico, da jo uveljavite:
Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing nastavitev zatičev in največja razdalja.
Pod tem dodajte spremenljivko, ki bo shranila stanje alarma, ki se sproži ali ne, seveda privzeto lažno.
sproži boole = napačno;
Dodaj vrstico v nastaviti() funkcijo, tako da lahko spremljamo izhod na serijski in odpravljanje napak.
Serial.begin (115200); // Odprite serijski monitor pri 115200 baud, če želite videti rezultate pinga.
Nato preimenujemo trenutno zanko alarm () - to se bo poklicalo, če se je alarm sprožil.
prazninski alarm () {barva (255,0,0); // rdeča zamuda (100); barva (255,255,0); // nizka zamuda (100); }
Zdaj ustvarite novo zanka () funkcijo, pri kateri dobimo nov ping, preberemo rezultate in sprožimo alarm, če v merilnem območju zaznamo nekaj.
void loop () {if (sproženo == res) {alarm (); } else {delay (50); // Počakajte 50 ms med pingi (približno 20 pingov / sek). 29ms naj bo najkrajša zamuda med pingi. nepopisan int uS = sonar.ping (); // Pošlji ping, pridobi čas pinga v mikrosekundah (uS). nepopisana int razdalja = uS / US_ROUNDTRIP_CM; Serijski.println (razdalja); če (razdalja <100) {sproži = res; } } }
Naj na kratko razložim kodo:
- Začnite tako, da preverite, ali se je alarm sprožil, in če je odgovor da, izklopite funkcijo alarma (trenutno utripajo luči).
- Če se še ne sproži, prenesite trenutni odčitek s senzorja.
- Če ima senzor odčitke <100 cm, je nekaj podtaknilo snop (prilagodite to vrednost, če očitno za vas zgodaj sproži).
Poskusite ga preizkusiti, preden dodamo nadležni piezo.
Deluje? Super. Zdaj pa dodajmo ta brenčač nazaj. Dodaj pinMode na nastaviti() rutina.
pinMode (ALARM, IZHOD);
Nato v funkcijo alarma () dodajte zanko piščalke:
za (int x = 0; x <180; x ++) {// pretvorite stopinje v radiane, nato dobite vrednost sin sinVal = (sin (x * (3.1412 / 180))); // ustvari frekvenco iz vrednosti greha toneVal = 2000+ (int (sinVal * 1000)); ton (ALARM, toneVal); }
Če poskusite sestaviti na tej točki, boste naleteli na napako - to sem pustil namerno, da boste lahko videli nekaj pogostih težav. V tem primeru tako NewPing kot standardna knjižnica tonov uporabljata iste prekinitve - v bistvu sta v konfliktu, zato tega ne morete storiti veliko. Ojoj.
Brez skrbi, čeprav. To je pogosta težava in nekdo ima rešitev že - prenesite jo in dodajte NewTone v mapo Arduino Libraries. Prilagodite začetek svojega programa tako, da vključuje to:
#include
In prilagodite vrstico:
ton (ALARM, toneVal);
do
NewTone (ALARM, toneVal);
namesto tega.
To je to. Alarm nastavite na vratih svoje spalnice za naslednji nesrečni vlomilec.
Ali pa norčavega psa, ki se mu je alarm zdel popolnoma nejevoljen.
Imate težave s kodo? Tukaj je popolna aplikacija. Če imate naključne napake, jih poskusite prilepiti spodaj in videl bom, če lahko pomagam.
Kreditna slika: Požarni alarm prek Flickr
James ima doktorat iz področja umetne inteligence in ima certifikat CompTIA A + in Network +. Je vodilni razvijalec MakeUseOf in svoj prosti čas preživlja z igranjem VR paintball in družabnih iger. Z računalniki gradi že od malih nog.