Oglas
Otkrijte pokret, a zatim uplaši kalupe iz uljeza s visokim zvukovima alarma i treperavim svjetlima. Zvuči li to zabavno? Naravno da ima. To je cilj današnjeg Arduinovog projekta, pogodnog za početnike. Pritom ćemo pisati u potpunosti od nule i testirati, tako da se s nadom možete zamisliti kako se sve to radi, nego da jednostavno instalirate nešto što sam već napravio.
Izjava o odricanju odgovornosti: ovo zapravo neće zaštititi vašu kuću. To moć daj sestri grozan šok kad se ipak ušulja u tvoju sobu.
Trebat će vam:
- Arduino
- Ja koristim ultrazvučni "ping" senzor HC-SR04 PIR bi bio bolji, ali oni su skupi. Senzor za ping može se nečujno postaviti u vrata i još uvijek poslužiti isti osnovni posao, a iznosi samo 5 USD
- Piezo zujanje
- LED traka, s istim ožičenjem kao i mi još uvijek u ovom projektu Izgradite vlastitu dinamičku ambijentalnu rasvjetu za medijski centarAko gledate puno filmova na računalu ili medijskom centru, siguran sam da ste se suočili s dilemom rasvjete; potpuno isključite sva svjetla? Držite li ih u punoj eksploziji? Ili... Čitaj više .
Dok spajate ovaj projekt, ne uklanjajte sve svaki put - samo nastavite dalje graditi na posljednjem bloku. Kad dođete na odjeljak "Kodiranje alarma", trebali biste ožičiti sve bitove i dijelove, izgledajući ovako:
Svjetlucanje
Koristite dijagram ožičenja iz ovog projekta Izgradite vlastitu dinamičku ambijentalnu rasvjetu za medijski centarAko gledate puno filmova na računalu ili medijskom centru, siguran sam da ste se suočili s dilemom rasvjete; potpuno isključite sva svjetla? Držite li ih u punoj eksploziji? Ili... Čitaj više zakačiti svoju LED traku; ne mijenjajte igle jer nam treba PWM izlaz. Koristiti ovaj kod za brzo testiranje ožičenja. Ako sve pođe dobro, trebali biste imati ovo:
Senzor udaljenosti
Na modulu SR04 naći ćete 4 igle. VCC i GND idite na + 5V željeznicu i zemlju; TRIGONOMETRIJA je pin koji se koristi za slanje sonarskog signala, stavite ovo na pin 6; JEKA koristi se za ponovno čitanje signala (i stoga izračunava udaljenost) - stavite ovo na 7.
Da bi stvari postale nevjerojatno jednostavne, postoji biblioteka koju možemo koristiti nazvanu NewPing. Preuzmite i smjestite se u Arduinovu Knjižnica mapu i ponovno pokrenite IDE prije nastavka. Ispitivanje pomoću ovaj kod; otvorite serijski monitor i provjerite je li brzina podešena na 115200 baud. Uz malo sreće, trebali biste vidjeti da se neka mjerenja udaljenosti šalju na vas prilično velikom brzinom. Možda ćete pronaći varijancu od 1 ili 2 centimetra, ali to je u redu. Pokušajte ispružiti ruku ispred senzora, pomičući je gore-dolje kako biste promatrali očitanja koja se mijenjaju.
Kôd bi trebao biti prilično jednostavno razumljiv. Na početku se nalazi nekoliko deklaracija relevantnih igara, uključujući i maksimalnu udaljenost - ovisno o tome točan senzor koji imate, ali sve dok možete točno očitavati manje od jednog metra, trebali biste biti fino.
U petlji ove testne aplikacije koristimo ping () funkcija za slanje sonarnog pinga, vraćanje vrijednosti u milisekundama koliko je trebalo da se vrijednost vrati. Da bismo to smislili, koristimo NewPing biblioteke izgrađene u konstantu od US_ROUNDTRIP_CM, što definira koliko mikrosekundi je potrebno da prijeđete jedan centimetar. Tu je i 50 ms zakašnjenja između pingova kako bi se izbjeglo preopterećenje senzora.
Piezo Alarm
Piezo kristalni senzor jednostavan je i jeftin zvuk, a mi možemo koristiti PWM pin 3 za stvaranje različitih tonova. Jednu žicu spojite na pin 3, jednu s uzemljenicom - nije važno koja.
Koristiti ovaj kod testirati.
Jedini način ubijanja prilično neugodnog i glasnog alarma jest izvlačenje čepova. Kôd je malo složeno objasniti, ali uključuje upotrebu sinusnih valova za stvaranje karakterističnog zvuka. Promešajte brojeve da biste se igrali različitim tonovima.
Kodiranje alarma
Sada kada imamo sve dijelove ove slagalice, kombinirajmo ih zajedno.
Samo naprijed i napravi novu skicu, zvanu Alarm. Započnite kombiniranjem svih varijabli i definicija pin-a koje smo do sada imali u oglednim primjerima.
#include // Odaberite koji će se PWM pinovi koristiti. #define RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino iglica vezana za okidač na ultrazvučnom senzoru. #define ECHO_PIN 7 // Arduino iglica vezana za eho na ultrazvučnom senzoru. #define MAX_DISTANCE 100 // Maksimalna udaljenost za koju želimo pingati (u centimetrima). #define ALARM 3 plutaju sinVal; int tonVal;
Započnite s pisanjem osnovnih postaviti() funkcija - zasad ćemo se baviti samo svjetlima. Dodao sam kašnjenje u trajanju od 5 sekundi prije nego što se glavna petlja pokrene, kako bismo dobili malo vremena da se izvučemo s puta ako je potrebno.
void setup () {// set pinModes za RGB traku pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // resetiranje lampica analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); kašnjenje (5000); }
Koristimo pomoćnu funkciju koja nam omogućava brzo pisanje jedne RGB vrijednosti na svjetla.
// pomoćna funkcija koja nam omogućuje slanje boje u jednoj naredbi. void color (nenapisan char crveni, unsigned char green, unsigned char blue) // funkcija generiranja boja. {analogWrite (RED_PIN, crvena); analogWrite (BLUE_PIN, plava); analogWrite (GREEN_PIN, zelena); }
Konačno, naša petlja zasad će se sastojati od jednostavne bljeskalice u boji između crvene i žute boje (ili, što god želite da bude vaš alarm - samo promijenite RGB vrijednosti).
praznina petlje () {boja (255,0,0); // crveno kašnjenje (100); boja (255,255,0); // žuto kašnjenje (100); }
Prenesite i testirajte da biste bili sigurni da ste na pravom putu.
A sad, integriramo senzor udaljenosti kako bi aktivirali ta svjetla samo kad nešto dođe, recimo, 50 cm (nešto manje od širine okvira vrata). Već smo definirali prave igle i uvezli biblioteku, pa prije vašeg postaviti() dodajte sljedeći redak da ga instancirate:
NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing postavljanje igle i maksimalne udaljenosti.
Ispod toga dodajte varijablu za pohranjivanje stanja alarma koji se aktivira ili ne, naravno, ako neispravno iznosi lažno.
boolean pokrenuto = lažno;
Dodajte liniju na postaviti() funkciju, tako da možemo pratiti izlaz na serijski i ispravljanje pogrešaka.
Serijski početak (115200); // Otvorite serijski monitor na 115200 baud kako biste vidjeli rezultate pinga.
Zatim preimenujmo trenutnu petlju u alarm() - ovo će se nazvati ako se alarm aktivirao.
praznina alarma () {boja (255,0,0); // crveno kašnjenje (100); boja (255,255,0); // žuto kašnjenje (100); }
Sada stvorite novu petlja() funkcija u kojoj dohvatimo novi ping, čitamo rezultate i aktiviramo alarm ako se nešto detektira u rasponu brojila.
void petlja () {if (pokreće == istina) {alarm (); } else {kašnjenje (50); // Pričekajte 50 ms između pingova (oko 20 pingova / sek). 29ms bi trebao biti najkraći zastoj između pingova. nepotpisani int uS = sonar.ping (); // Pošaljite ping, uzmite vrijeme pinga u mikrosekundama (uS). nenapisana int udaljenost = uS / US_ROUNDTRIP_CM; Serijski.println (udaljenost); ako je (udaljenost <100) {okidač = istina; } } }
Dopustite mi da vam ukratko objasnim kôd:
- Započnite provjerom da li je alarm pokrenut, a ako jeste, isključite funkciju alarma (trenutno treperi samo svjetlo).
- Ako se još nije pokrenulo, preuzmite trenutno očitanje od senzora.
- Ako senzor očitava <100 cm, nešto je podmetalo snop (prilagodite tu vrijednost ako se očito aktivira prerano).
Pokušajte pokusati sada, prije nego što dodamo dosadni pištolj.
Rad? Sjajno. Sada vratimo taj zvučni signal. Dodati pinMode prema postaviti() rutina.
pinMode (ALARM, IZLAZ);
Zatim dodajte piezo zujanje petlje u funkciju alarma ():
za (int x = 0; x <180; x ++) {// pretvoriti stupnjeve u radijane, a zatim dobiti vrijednost sin sinVal = (sin (x * (3.1412 / 180))); // generirati frekvenciju iz vrijednosti sin tone tone Val = 2000+ (int (sinVal * 1000)); ton (ALARM, toneVal); }
Ako to pokušate sastaviti u ovom trenutku, naići ćete na grešku - ovo sam namjerno ostavio da biste vidjeli neke uobičajene probleme. U ovom slučaju i NewPing i biblioteka standardnih tonova koriste iste prekide - oni se u osnovi međusobno sukobljavaju i ne možete puno toga popraviti. Oh draga.
Bez brige. To je čest problem, a netko već ima rješenje - preuzmi ga i dodaj NewTone u mapu Arduino Libraries. Prilagodite početak svog programa tako da uključite ovo:
#include
I prilagodite liniju:
ton (ALARM, toneVal);
do
NewTone (ALARM, toneVal);
umjesto toga.
To je to. Podesite svoj alarm na vratima svoje spavaće sobe za sljedećeg nesretnog provalnika.
Ili, bezvezni pas, koji se činio potpuno neraspoložen alarmom.
Imate problema s kodom? Evo kompletna aplikacija. Ako vam se prikazuju slučajne pogreške, pokušajte ih zalijepiti u nastavku i vidjet ću mogu li vam pomoći.
Kreditna slika: Protupožarni alarm putem Flickr-a
James je diplomirao iz umjetne inteligencije i certificiran je CompTIA A + i Network +. Vodeći je programer MakeUseOf-a, a svoje slobodno vrijeme provodi igrajući VR paintball i boardgames. Gradio je računala još od djeteta.