
Joseph Goodman
0
4612
922
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 Arduinog projekta, pogodnog za početnike. U nastavku ćemo pisati potpuno ispočetka 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
- Ultrazvučni “ping” senzor, koristim HC-SR04 A 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čenjima koje smo koristili u ovom projektu Izradite vlastitu dinamičku ambijentalnu rasvjetu za Media Center Izradite vlastitu dinamičku ambijentalnu rasvjetu za Media Center Ako gledate puno filmova na računalu ili medijskom centru, ja ' Siguran sam da ste se suočili s dilemom rasvjete; potpuno isključite sva svjetla? Držite li ih u punoj eksploziji? Ili… .
Dok spajate ovaj projekt, ne uklanjajte sve svaki put - samo nastavite dalje graditi na posljednjem bloku. Do trenutka kada stignete “Kodiranje alarma” odjeljak, trebali biste imati sve komade i komade ožičene i izgledaju ovako:
Svjetlucanje
Koristite dijagram ožičenja iz ovog projekta Izgradite vlastitu dinamičku ambijentalnu rasvjetu za medijski centar Izradite vlastitu dinamičku ambijentalnu rasvjetu za medijski centar Ako gledate puno filmova na računalu ili medijskom centru, siguran sam da ste se suočili s dilema oko osvjetljenja; potpuno isključite sva svjetla? Držite li ih u punoj eksploziji? Ili… zakačiti svoju LED traku; ne mijenjajte igle jer nam treba PWM izlaz. Pomoću ovog koda brzo testirajte ožičenje. 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 stvari budu nevjerojatno jednostavne, postoji knjižnica koju možemo koristiti pod nazivom NewPing. Preuzmite i smjestite u svoje Arduino's Knjižnica mapu i ponovno pokrenite IDE prije nastavka. Test pomoću ovog koda; otvorite serijski monitor i provjerite je li brzina podešena na 115200 baud. Uz malo sreće, trebali biste vidjeti kako 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 je nekoliko deklaracija relevantnih igara, uključujući maksimalnu udaljenost - to može varirati ovisno o senzoru koji imate, ali sve dok možete očitati očitanje manje od jednog metra, trebali biste biti u redu.
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 pređete jedan centimetar. Tu je i odgoda od 50 ms između pingova kako bi se izbjeglo preopterećenje senzora.
Piezo Alarm
Piezo kristalni senzor jednostavan je i jeftin zujalica, a mi možemo koristiti PWM pin 3 za stvaranje različitih tonova. Jednu žicu spojite na pin 3, jednu na uzemljenje - nije bitno koja.
Upotrijebite ovaj kôd za testiranje.
Jedini način ubijanja prilično neugodnog i glasnog alarma jest izvlačenje čepova. Kôd je malo složeno objasniti, ali uključuje korištenje 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 testnim primjerima.
#include // Odaberite koje se PWM pinove koristi. #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 igla povezana na 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 od 5 sekundi prije nego što se glavna petlja pokrene, kako bi nam dali malo vremena da krenemo s puta ako je potrebno.
void setup () // postavi pinMode za RGB strip 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šnjenja (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 naredbenoj praznoj boji (nepotpisan char crveni, nepotpisani char zeleni, nenapisani char plavi) // 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.
Sada 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 knjižnicu, dakle 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ž..
boolean pokrenuto = lažno;
Dodajte liniju na postaviti() funkciju, tako da možemo nadzirati izlaz serijski i ispravljanje pogrešaka.
Serial.begin (115200); // Otvorite serijski monitor na 115200 baud kako biste vidjeli rezultate pinga.
Zatim preimenujmo trenutnu petlju u alarm() - to ć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 dohvaćamo 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. unsigned int uS = sonar.ping (); // Pošaljite ping, uzmite vrijeme pinga u mikrosekundama (uS). nenapisana int udaljenost = uS / US_ROUNDTRIP_CM; Serial.println (razmak); if (udaljenost < 100) triggered = true;
Dopustite mi da vam ukratko objasnim kôd:
- Započnite provjerom da li je alarm pokrenut, a ako jeste, isključite funkciju alarma (trenutno trepću lampice).
- Ako se još nije pokrenulo, uzmite trenutni očitavanje od senzora.
- Ako senzor očitava <100 cm, something has padded the beam (adjust this value if it's triggering too early for you, obviously).
Pokušajte pokusati sada, prije nego što dodamo dosadni pištolj.
Radna? Sjajno. Sad vratimo natrag taj zujalica. Dodati pinMode prema postaviti() rutina.
pinMode (ALARM, IZLAZ);
Zatim dodajte piezo zujanje petlje u funkciju alarma ():
za (int x = 0; x<180; x++) // convert degrees to radians then obtain sin value sinVal = (sin(x*(3.1412/180))); // generate a frequency from the sin value toneVal = 2000+(int(sinVal*1000)); tone(ALARM, toneVal);
Ako u ovom trenutku pokušate sastaviti, naići ćete na pogrešku - ovo sam napustio namjerno kako biste vidjeli neke uobičajene probleme. U ovom slučaju i NewPing i biblioteka standardnih tonova koriste iste prekide - oni se u osnovi sukobljavaju i ne možete puno toga popraviti. Oh draga.
Bez brige. Čest je problem, a netko već ima rješenje - preuzmite i dodajte ovaj NewTone u mapu Arduino Libraries. Prilagodite početak svog programa tako da uključite ovo:
#include
I prilagodite liniju:
ton (ALARM, tonVal);
do
NewTone (ALARM, toneVal);
umjesto.
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 cjelovite aplikacije. Ako vam se javljaju slučajne pogreške, pokušajte ih zalijepiti u nastavku i vidjet ću mogu li vam pomoći.
Kreditna slika: Alarm požara putem Flickr