Skelbimas

Aptikite judesį, tada išgąsdinkite įsibrovėlį iš aukšto garsinio aliarmo garsų ir mirksinčių lempučių. Ar tai skamba linksmai? Žinoma, kad taip yra. Tai yra šiandienos „Arduino“ projekto, tinkamo pradedantiesiems, tikslas. Mes rašysime visiškai nuo nulio ir testuosime eidami kartu, kad, tikėkitės, kad suprastumėte, kaip viskas daroma, užuot paprasčiausiai įdėję tai, ką jau padariau.

Atsakomybės atsisakymas: tai tikrai nebus apsaugoti jūsų namas. Tai gali padaryk seserį bjaurų šoką, kai ji įsikibs į tavo kambarį.

Jums reikės:

  • Arduino
  • Aš naudoju ultragarsinį „ping“ jutiklį HC-SR04 PIR būtų geriau, tačiau jie yra brangūs. „Ping“ jutiklį galima slapta įstatyti į duris ir vis tiek atlikti tą patį pagrindinį darbą, ir jis kainuoja tik 5 USD.
  • Pjezo garsinis signalas
  • Šviesos diodų juostelė su ta pačia instaliacija, kurią mes naudojome atgal į šį projektą Sukurkite savo dinaminį aplinkos apšvietimą „Media Center“Jei žiūrite daug filmų savo kompiuteryje ar laikmenų centre, esu tikras, kad susidūrėte su apšvietimo dilema; ar tu visiškai išjungi visas lemputes? Ar laikote juos visiškai sprogusius? Arba ...
    instagram viewer
    Skaityti daugiau
    .

Kai rengiate projektą, nenuimkite visko kaskart - tereikia kurti paskutinį bloką. Kai pateksite į skyrių „Signalizacijos sistemos kodavimas“, turėtumėte sujungti visus bitus ir gabalus, kad atrodytumėte panašiai:

baigtas instaliacija

Žybsinčios šviesos

Naudokite laidų schemą iš šio projekto Sukurkite savo dinaminį aplinkos apšvietimą „Media Center“Jei žiūrite daug filmų savo kompiuteryje ar laikmenų centre, esu tikras, kad susidūrėte su apšvietimo dilema; ar tu visiškai išjungi visas lemputes? Ar laikote juos visiškai sprogusius? Arba ... Skaityti daugiau užsikabinti savo LED juostelę; nekeiskite kaiščių, nes mums reikia PWM išvesties. Naudokite šį kodą greitai išbandyti laidus. Jei viskas gerai, turėtumėte tai:

led-rgb-testas

Atstumo jutiklis

SR04 modulyje rasite 4 kaiščius. VCC ir GND pereikite atitinkamai prie + 5 V bėgio ir žemės; TRIGAS yra kaištis, naudojamas sonaro signalui siųsti, uždėkite jį ant 6 kaiščio; ECHO naudojamas perskaityti signalą atgal (taigi apskaičiuoti atstumą) - uždėkite tai 7.

sr04

Kad viskas būtų neįtikėtinai paprasta, yra biblioteka, kurią galime naudoti „NewPing“. Atsisiųskite ir įdėkite į savo „Arduino“ Biblioteka aplanką ir prieš tęsdami paleiskite IDE. Testas naudojant šį kodą; atidarykite serijinį monitorių ir įsitikinkite, kad nustatytas 115200 baudų greitis. Bet kokiu pasisekimu turėtumėte pamatyti kai kuriuos atstumo matavimus, kurie bus atsiųsti jums gana dideliu greičiu. Galite rasti 1 ar 2 centimetrų dispersiją, tačiau tai gerai. Pabandykite paleisti ranką prieš jutiklį, judindami ją aukštyn ir žemyn, kad stebėtumėte kintančius rodmenis.

„ping-output“

Kodas turėtų būti gana paprastai suprantamas. Pradžioje yra keletas atitinkamų kaiščių deklaracijų, įskaitant maksimalų atstumą - tai gali skirtis atsižvelgiant į tikslus jūsų turimas jutiklis, tačiau tol, kol sugebėsite tiksliai gauti mažiau nei 1 metro rodmenis, turėtumėte būti gerai.

Šios bandomosios programos kilpoje naudojame ping () funkcija, norint išsiųsti sonarą, gaunant vertę milisekundėmis, kiek laiko prireikė, kad vertė būtų grąžinta. Norėdami tai suprasti, naudojame „NewPing“ bibliotekas, kurių konstanta yra US_ROUNDTRIP_CM, kuris nusako, kiek mikrosekundžių reikia nuvažiuoti vieną centimetrą. Taip pat yra 50 ms vėlavimas tarp takelių, kad jutiklis nebūtų perkrautas.

Pjezo aliarmas

„Piezo“ kristalų jutiklis yra paprastas ir pigus garsinis signalas, todėl skirtingiems tonams kurti galime naudoti „PWM 3“ kaištį. Prijunkite vieną laidą prie 3 kaiščio, kitą prie įžeminimo bėgio - nesvarbu, kuris.

Naudokite šį kodą Tikrinti.

Vienintelis būdas nužudyti gana nemalonų ir garsų aliarmą yra užtraukti kištukus. Kodas yra šiek tiek sudėtingas paaiškinti, tačiau jis apima sinuso bangų naudojimą, kad būtų sukurtas savitas garsas. Koreguokite skaičius, kad galėtumėte žaisti skirtingais tonais.

Signalizacijos sistemos kodavimas

Dabar, kai turime visus šio galvosūkio elementus, sujungkime juos kartu.

Eik į priekį ir padaryk naują eskizą, pavadintą Signalizacijos. Pradėkite derindami visus kintamuosius ir sąvokų apibrėžimus, kuriuos iki šiol pateikėme bandymų pavyzdžiuose.

# įtraukti  // Pasirinkite, kuriuos kaiščius reikia naudoti su PWM. #define RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino smeigtukas, susietas su ultragarso jutiklio trigeriniu kaiščiu. #define ECHO_PIN 7 // Arduino kaištis, susietas su ultragarso jutiklio aido kaiščiu. #define MAX_DISTANCE 100 // Didžiausias atstumas, kurį norime nustatyti (centimetrais). #define ALARM 3 plūduriuojantis sinVal; int toneVal; 

Pradėkite rašydami pagrindinius dalykus sąranka () funkcija - kol kas nagrinėsime tik žibintus. Pridėjau 5 sekundžių delsą prieš pradedant naudoti pagrindinę liniją, kad suteiktume šiek tiek laiko išeiti iš kelio, jei to prireiktų.

void setup () {// nustatyti pinModes RGB juostelei pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // iš naujo nustatyti „analogWrite“ žibintus (RED_PIN, 0); „analogWrite“ (BLUE_PIN, 0); analoWrite (RED_PIN, 0); vėlavimas (5000); }

Panaudokime pagalbinę funkciją, leidžiančią mums greitai nurašyti vieną RGB reikšmę šviestuvams.

// pagalbininko funkcija, leidžianti mums nusiųsti spalvą viena komanda. tuščia spalva (neparašyta char raudona, nepasirašyta char žalia, nepasirašyta char blue) // spalvą sukurianti funkcija. {analogWrite (RED_PIN, raudona); analoWrite (BLUE_PIN, mėlyna); analoWrite (GREEN_PIN, žalia); }

Pagaliau dabar mūsų ciklą sudarys paprastas spalvotas blyksnis tarp raudonos ir geltonos spalvos (arba, kad ir kaip bebūtų jūsų žadintuvas, tiesiog pakeiskite RGB reikšmes).

tuščia kilpa () {spalva (255,0,0); // raudonas uždelsimas (100); spalva (255 255,0); // geltonasis uždelsimas (100); }

Įkelkite ir išbandykite tai, kad įsitikintumėte, jog einate teisingu keliu.

Integruokime atstumo jutiklį, kad įjungtume tas šviesas tik tada, kai kažkas, tarkime, 50 cm (tik mažesnis už durų rėmo plotį). Mes jau apibrėžėme tinkamus kaiščius ir importavome biblioteką, taigi prieš jūsų sąranka () funkcija pridėkite šią eilutę, kad ją pagyvintumėte:

„NewPing“ sonarą (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // „NewPing“ kaiščių sąranka ir maksimalus atstumas. 

Po juo pridėkite kintamąjį, kad būtų išsaugota suaktyvinto ar neveikiančio aliarmo būsena, žinoma, kad numatytasis yra klaidingas.

boolean trigged = false; 

Pridėti eilutę prie sąranka () funkcija, kad galėtume stebėti nuoseklųjį išvestį ir derinti.

Serialas.beginas (115200); // Atidarykite serijinį monitorių 115200 baudų greičiu, kad pamatytumėte ping rezultatus. 

Tada pervadinkime dabartinę kilpą į aliarmas () - tai bus vadinama, jei suveikė žadintuvas.

void alarm () {spalva (255,0,0); // raudonas uždelsimas (100); spalva (255 255,0); // geltonos spalvos uždelsimas (100); }

Dabar sukurkite naują kilpa () funkcija, kurioje mes gauname naują pingą, perskaitysime rezultatus ir suaktyvinsime aliarmą, jei kas nors bus aptikta skaitiklio diapazone.

void loop () {if (suveikė == tiesa) {aliarmas (); } else {delay (50); // Palaukite 50ms tarp taškų (apie 20 taškų per sekundę). 29 ms turėtų būti trumpiausias laiko tarpas tarp pranešimų. nepasirašytas int uS = sonar.ping (); // Siųsti ping, gauti ping laiką mikrosekundėmis (JAV). nepasirašytas atstumas = uS / US_ROUNDTRIP_CM; Serial.println (distance); if (atstumas <100) {suaktyvinta = teisinga; } } }

Leiskite man trumpai paaiškinti kodą:

  • Pirmiausia patikrinkite, ar suveikė žadintuvas, ir jei taip, išjunkite žadintuvo funkciją (tiesiog mirksi žibintai).
  • Jei jis dar nesuaktyvinamas, iš jutiklio gaukite dabartinį rodmenį.
  • Jei jutiklio rodmuo yra <100 cm, kažkas uždengė spindulį (akivaizdu, kad pakoreguokite šią vertę, jei jis suveikia per anksti).

Leiskite jam išbandyti dabar, prieš pridėdami erzinantį pjezo garsinį signalą.

Dirbate? Puiku. Dabar pridėkime tą garsinį signalą. Papildyti pinMode į sąranka () rutina.

pinMode (ALARM, OUTPUT); 

Tada pridėkite pjezo garsinio signalo kilpą prie aliarmo () funkcijos:

už (int x = 0; x <180; x ++) {// paverskite laipsnius radianais, tada gaukite nuodėmės reikšmę sinVal = (sin (x * (3.1412 / 180))); // generuoti dažnį iš nuodėmės vertės toneVal = 2000+ (int (sinVal * 1000)); tonas (ALARM, toneVal); }

Jei bandysite kompiliuoti šiuo metu, jums bus padaryta klaida - aš tai palikau sąmoningai, kad galėtumėte pamatyti keletą bendrų problemų. Šiuo atveju tiek „NewPing“, tiek standartinių tonų biblioteka naudoja tuos pačius pertraukimus - jie iš esmės konfliktuoja, ir jūs negalite padaryti daug ką, kad juos ištaisytumėte. O varge.

Vis dėlto nerimauti. Tai dažna problema, ir kažkas jau turi sprendimą - atsisiųskite ir pridėkite tai „NewTone“ į aplanką „Arduino bibliotekos“. Pakoreguokite savo programos pradžią, kad įtrauktumėte tai:

# įtraukti 

Ir sureguliuokite liniją:

 tonas (ALARM, toneVal); 

į

 „NewTone“ (ALARM, toneVal); 

vietoj to.

Viskas. Pasirenkite žadintuvą šalia savo miegamojo durų, kad galėtumėte įsižeisti.

Arba apleistas šuo, kuris atrodė visiškai nepastebimas aliarmo.

Turite problemų su kodu? Štai visa programa. Jei gaunate atsitiktinių klaidų, pabandykite jas įklijuoti žemiau ir pažiūrėsiu, ar galiu padėti.

Vaizdo kreditas: Gaisro signalizacija per „Flickr“

Jamesas yra dirbtinio intelekto bakalauras ir yra CompTIA A + bei Network + sertifikuotas. Jis yra pagrindinis „MakeUseOf“ kūrėjas ir laisvalaikį praleidžia žaisdamas VR dažasvydį ir stalo žaidimus. Nuo mažens jis statė kompiuterius.