Reklāma
Atklājiet kustību, pēc tam nobiedējiet viņu no iebrucēja ar augstu skaņas signālu un mirgojošām gaismām. Vai tas izklausās jautri? Protams, ka tā arī ir. Tas ir mūsdienu Arduino projekta mērķis, kas piemērots iesācējiem. Mēs rakstīsim pilnīgi no jauna un pārbaudīsim, līdzko ejam garām, lai jūs, cerams, gūtu priekšstatu par to, kā tas viss tiek darīts, nevis vienkārši instalētu kaut ko jau izveidotu.
Atsaukums: tas faktiski neaizsargās jūsu māju. Tā varētu sagādājiet māsai šķebinošu šoku, kad viņa ielīst jūsu istabā.
Jums būs nepieciešams:
- Arduīno
- Ultraskaņas “ping” sensors, es izmantoju HC-SR04 PIR būtu labāks, bet tie ir dārgi. Pinga sensoru var slepeni ievietot durvīs un joprojām izmantot to pašu pamatdarbu, un tas ir tikai 5 USD
- Pjezo zumeris
- LED sloksnes gaisma, ar to pašu vadu, ko mēs izmantojām atpakaļ šajā projektā Izveidojiet pats savu dinamisko apkārtnes apgaismojumu multivides centramJa datorā vai multivides centrā skatāties daudz filmu, esmu pārliecināts, ka esat saskāries ar apgaismojuma dilemmu; vai tu pilnībā izslēdz visas gaismas? Vai jūs uzturat viņiem pilnu sprādzienu? Vai arī ... Lasīt vairāk .
Veicot projekta vadīšanu, katru reizi nenoņemiet visu - vienkārši turpiniet darbu pie pēdējā bloka. Kad jūs nokļūsit sadaļā “Signalizācijas sistēmas kodēšana”, jums vajadzētu būt savienotiem visiem bitiem un gabaliem, izskatot kaut ko līdzīgu:
Mirgojošas gaismas
Izmantojiet elektroinstalācijas shēmu no šī projekta Izveidojiet pats savu dinamisko apkārtnes apgaismojumu multivides centramJa datorā vai multivides centrā skatāties daudz filmu, esmu pārliecināts, ka esat saskāries ar apgaismojuma dilemmu; vai tu pilnībā izslēdz visas gaismas? Vai jūs uzturat viņiem pilnu sprādzienu? Vai arī ... Lasīt vairāk piekabināt savu LED sloksni; nemainiet tapas, jo mums ir nepieciešama PWM izvade. Izmantojiet šo kodu lai ātri pārbaudītu elektroinstalāciju. Ja viss iet labi, jums ir jābūt šādam:
Attāluma sensors
SR04 modulī jūs atradīsit 4 tapas. RKC un GND dodieties attiecīgi uz + 5 V sliedi un zemi; TRIG ir tapa, ko izmanto, lai nosūtītu hidrolokatoru, ielieciet to uz 6. tapas; ECHO izmanto, lai nolasītu signālu atpakaļ (un tādējādi aprēķinātu attālumu) - uzlieciet to uz 7.
Lai padarītu lietas neticami vienkāršas, ir bibliotēka, kuru mēs varam izmantot NewPing. Lejupielādējiet un ievietojiet savā Arduino Bibliotēka pirms turpināt, restartējiet IDE. Pārbaude, izmantojot šo kodu; atveriet seriālo monitoru un pārliecinieties, vai ātrums ir iestatīts uz 115200 baud. Jebkurā veiksmē jums vajadzētu redzēt, ka daži attāluma mērījumi tiek nosūtīti jums diezgan lielā ātrumā. Jūs varat atrast 1 vai 2 centimetru novirzi, bet tas ir lieliski. Mēģiniet palaist roku sensora priekšā, pārvietojot to uz augšu un uz leju, lai novērotu mainīgos rādījumus.
Kodam jābūt diezgan vienkārši saprotamam. Sākumā ir dažas deklarācijas par attiecīgajām tapām, ieskaitot maksimālo attālumu - tas var atšķirties atkarībā no tā precīzs sensors, kas jums ir, bet, kamēr jūs precīzi varat iegūt mazāk nekā 1 metra rādījumus, jums vajadzētu būt labi.
Šīs testa lietotnes cilpā mēs izmantojam ping () funkcija, lai nosūtītu hidrolokatoru, iegūstot vērtību milisekundēs no tā, cik ilgs laiks bija nepieciešams, lai šī vērtība atgrieztos. Lai to saprastu, mēs izmantojam NewPing bibliotēkas, kas izveidotas ar konstantu US_ROUNDTRIP_CM, kas nosaka, cik mikrosekundes nepieciešamas, lai izietu vienu centimetru. Starp punduriem ir arī 50 ms kavēšanās, lai nepārslogotu sensoru.
Pjezo trauksme
Pjezo kristāla sensors ir vienkāršs un lēts signāls, un dažādu toņu veidošanai mēs varam izmantot PWM pin 3. Pievienojiet vienu vadu ar 3. piespraudi, otru ar iezemēto sliedi - tas nav svarīgi, kurš.
Izmantojiet šo kodu testēt.
Vienīgais veids, kā nogalināt diezgan nepatīkamo un skaļo trauksmi, ir aizvilkt kontaktdakšas. Kods ir nedaudz sarežģīti izskaidrojams, taču tas ietver sinusoidālo viļņu izmantošanu, lai radītu atšķirīgu skaņu. Pielāgojiet numurus, lai spēlētu ar dažādiem toņiem.
Signalizācijas sistēmas kodēšana
Tagad, kad mums ir visi šīs mīklas gabali, apvienosim tos kopā.
Iet uz priekšu un izveidojiet jaunu skici ar nosaukumu Trauksme. Sāciet, apvienojot visus mainīgos un tapu definīcijas, kuras līdz šim esam bijuši testa piemēros.
# iekļaut // Atlasiet, kuras kontaktligzdas ir izmantojamas. #definēt RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino tapa, kas piesaistīta sprūda tapam uz ultraskaņas sensora. #definēt ECHO_PIN 7 // Arduino tapa, kas piestiprināta pie atbalss tapa uz ultraskaņas sensora. #define MAX_DISTANCE 100 // Maksimālais attālums, pie kura vēlamies piespraust (centimetros). #definēt 3. signalizāciju peldēt sinVal; int toneVal;
Sāciet, rakstot pamata uzstādīt() funkcija - pagaidām mēs nodarbosimies tikai ar gaismām. Es esmu pievienojis 5 sekunžu aizkavi, pirms tiek sākta galvenā sakaru līnija, lai dotu mums kādu laiku, lai nepieciešamības gadījumā noietu no ceļa.
void setup () {// iestatīt pinModes RGB sloksnei pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // atiestatīt gaismas analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); kavēšanās (5000); }
Izmantosim palīga funkciju, kas mums ļauj ātri norakstīt gaismai vienu RGB vērtību.
// palīga funkcija, kas ļauj nosūtīt krāsu vienā komandā. tukšas krāsas (neparakstīts char red, neparakstīts char green, neparakstīts char blue) // krāsu ģenerēšanas funkcija. {analogWrite (RED_PIN, sarkans); analogWrite (BLUE_PIN, zils); analogWrite (GREEN_PIN, zaļš); }
Visbeidzot, mūsu cilpa pagaidām sastāvēs no vienkāršas krāsas zibspuldzes starp sarkanu un dzeltenu krāsu (vai neatkarīgi no tā, cik vēlaties, lai jūsu trauksme būtu, vienkārši mainiet RGB vērtības).
tukšs cilpa () {krāsa (255,0,0); // sarkana kavēšanās (100); krāsa (255 255,0); // dzeltenā kavēšanās (100); }
Augšupielādējiet un pārbaudiet to, lai pārliecinātos, ka esat uz pareizā ceļa.
Integrēsim attāluma sensoru, lai iedarbinātu šos lukturus tikai tad, ja kaut kas atrodas, piemēram, 50 cm attālumā (tikai mazāks par durvju rāmja platumu). Mēs jau esam definējuši pareizās piespraudes un importējuši bibliotēku, tāpēc pirms jūsu uzstādīt() funkcija pievienojiet šo rindu, lai to aktivizētu:
NewPing hidrolokatoru (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing tapu iestatīšana un maksimālais attālums.
Zem tā pievienojiet mainīgo, lai saglabātu trauksmes signālu, kas tiek aktivizēts vai nav, protams, pēc noklusējuma ir nepatiess.
Būla iedarbināta = nepatiesa;
Pievienojiet līniju uzstādīt() funkcija, lai mēs varētu uzraudzīt sērijveida izvadi un atkļūdošanu.
Sērijas.begin (115200); // Atveriet seriālo monitoru ar ātrumu 115200 baud, lai redzētu ping rezultātus.
Pēc tam pārdēvēsim pašreizējo cilpu uz trauksme () - tas tiks saukts, ja trauksme ir ieslēgta.
tukšs trauksmes signāls () {krāsa (255,0,0); // sarkana kavēšanās (100); krāsa (255 255,0); // dzeltenā kavēšanās (100); }
Tagad izveidojiet jaunu cilpa () funkcija, kurā mēs ienesam jaunu ping, lasām rezultātus un izsaucam trauksmi, ja skaitītāja diapazonā tiek atklāts kaut kas.
void loop () {if (trigger == true) {alarm (); } cits {kavēšanās (50); // Pagaidiet 50ms starp tabuliem (apmēram 20 tabu / s). Starp 29 tabulām jābūt īsākajai aizkavei starp tabuliem. neparakstīts int uS = sonar.ping (); // Sūtīt ping, saņemt ping laiku mikrosekundēs (ASV). neparakstīts iekšējais attālums = uS / US_ROUNDTRIP_CM; Serial.println (distance); if (attālums <100) {aktivizēts = patiess; } } }
Ļaujiet man īsi paskaidrot kodu:
- Sāciet ar pārbaudi, lai redzētu, vai nav aktivizēts trauksmes signāls, un, ja tā, tad atslēdziet trauksmes funkciju (tikai mirgo gaismas).
- Ja tas vēl nav aktivizēts, iegūstiet pašreizējo nolasījumu no sensora.
- Ja sensora rādījums ir <100 cm, kaut kas ir piestiprinājis staru (acīmredzot noregulējiet šo vērtību, ja tas iedarbina pārāk agri).
Izmēģiniet to tagad, pirms mēs pievienojam kaitinošo pjezo signālu.
Strādā? Lieliski. Tagad pievienosim šo skaņas signālu. Pievienot pinMode uz uzstādīt() rutīna.
pinMode (trauksme, izeja);
Tad trauksmes () funkcijai pievienojiet pjezo signāla cilpu:
priekš (int x = 0; x <180; x ++) {// grādus konvertē uz radiāniem, pēc tam iegūst grēka vērtību sinVal = (sin (x * (3.1412 / 180))); // ģenerē frekvenci no sin vērtības toneVal = 2000+ (int (sinVal * 1000)); tonis (ALARM, toneVal); }
Ja jūs mēģināt sastādīt šajā brīdī, jums radīsies kļūda - es to esmu atstājis apzināti, lai jūs varētu redzēt dažas izplatītas problēmas. Šajā gadījumā gan NewPing, gan standarta toņu bibliotēkā tiek izmantoti vieni un tie paši pārtraukumi - principā tie ir konfliktējoši, un to nevar labot daudz. Ak vai.
Tomēr nav jāuztraucas. Tā ir izplatīta problēma, un kādam jau ir risinājums - lejupielādējiet un pievienojiet to NewTone mapē Arduino bibliotēkas. Pielāgojiet programmas sākumu, lai iekļautu šo:
# iekļaut
Un pielāgojiet līniju:
tonis (ALARM, toneVal);
uz
NewTone (ALARM, toneVal);
tā vietā.
Tieši tā. Iestatiet modinātāju guļamistabas durvīs nākamajam nelaimīgajam potenciālajam apsardzei.
Vai arī nokaunējies suns, kuru trauksme šķita pilnīgi nesatrauktu.
Vai jums ir problēmas ar kodu? Lūk, pilnīga lietotne. Ja jūs saņemat izlases kļūdas, mēģiniet ielīmēt tās zemāk, un es redzēšu, vai varu palīdzēt.
Attēla kredīts: Ugunsgrēka trauksme caur Flikru
Džeimsam ir mākslīgā intelekta bakalaura grāds, un viņš ir sertificēts CompTIA A + un Network +. Viņš ir galvenais MakeUseOf izstrādātājs un brīvo laiku pavada, spēlējot VR peintbolu un galda spēles. Kopš mazotnes viņš būvēja datorus.