Reklama

Detekujte pohyb a potom vystrašte sakra z narušiteľa vysokými tónmi zvukov alarmu a blikajúcich svetiel. Znie to zábavne? Samozrejme, že áno. To je cieľom dnešného projektu Arduino, ktorý je vhodný pre začiatočníkov. Keď budeme postupovať, budeme písať úplne od nuly a testovania, takže dúfajme, že získate nejakú predstavu o tom, ako sa to všetko robí, namiesto jednoduchej inštalácie niečoho, čo som už urobil.

Zrieknutie sa zodpovednosti: váš dom to nebude chrániť. to možno keď sa vkradne do svojej izby, daj svojej sestre škaredý šok.

Budete potrebovať:

  • Arduino
  • Ultrazvukový senzor „ping“, ktorý používam HC-SR04 PIR by bolo lepšie, ale tie sú drahé. Senzor ping môže byť tajne umiestnený vo dverách a stále slúžiť na rovnakú základnú prácu, a je iba 5 dolárov
  • Piezoelektrický bzučiak
  • LED pásikové svetlo, s rovnakým zapojením, aké sme použili späť v tomto projekte Zostavte si svoje vlastné dynamické okolité osvetlenie pre mediálne centrumAk sledujete veľa filmov na počítači alebo v mediálnom centre, určite ste čelili dileme osvetlenia; úplne vypnete všetky svetlá? Myslíte si, že ich máte na dosah? Alebo ...
    instagram viewer
    Čítaj viac
    .

Pri pripájaní tohto projektu neodstraňujte vždy všetko - len pokračujte v budovaní posledného bloku. V čase, keď sa dostanete do časti „Coding The Alarm System“, mali by ste si nechať zapojiť všetky kúsky a kúsky a vyzerať takto:

Hotový-elektroinštalácie

Blikajúce svetlá

Použite schému zapojenia z tohto projektu Zostavte si svoje vlastné dynamické okolité osvetlenie pre mediálne centrumAk sledujete veľa filmov na počítači alebo v mediálnom centre, určite ste čelili dileme osvetlenia; úplne vypnete všetky svetlá? Myslíte si, že ich máte na dosah? Alebo ... Čítaj viac pripevniť si LED pásik; nemeňte kolíky, pretože potrebujeme výstup PWM. použitie tento kód aby ste rýchlo otestovali vaše zapojenie. Ak všetko pôjde dobre, mali by ste mať toto:

LED rgb-test

Senzor vzdialenosti

V module SR04 nájdete 4 piny. VCC a GND choďte na + 5 V koľajnicu a zem; TRIG je kolík, ktorý sa používa na vysielanie sonarového signálu, nasadený na kolík 6; ECHO sa používa na čítanie signálu späť (a preto na výpočet vzdialenosti) - tento údaj sa nastaví na 7.

SR04

Aby sa veci stali neuveriteľne jednoduchými, existuje knižnica, ktorú môžeme použiť NewPing. Stiahnite si a umiestnite ho do svojho Arduina knižnica priečinok a pred pokračovaním reštartujte IDE. Test pomocou tento kód; otvorte sériový monitor a skontrolujte, či je rýchlosť nastavená na 115200 baudov. S trochou šťastia by ste mali vidieť, že sa niektoré merania vzdialenosti odosielajú späť veľmi vysokou rýchlosťou. Možno nájdete odchýlku 1 alebo 2 centimetre, ale je to v poriadku. Skúste položiť ruku pred senzor, posunutím nahor a nadol, aby ste pozorovali meniace sa hodnoty.

ping-output

Kód by mal byť celkom zrozumiteľný. Existuje niekoľko vyhlásení o príslušných kolíkoch na začiatku, vrátane maximálnej vzdialenosti - to sa môže líšiť podľa presný snímač, ktorý máte, ale ak dokážete získať presnú hodnotu menej ako 1 meter, mali by ste byť poriadku.

V cykle tejto testovacej aplikácie používame ping () funkcia, ktorá vysiela sonarový ping a získava späť hodnotu v milisekundách, ako dlho trvalo, kým sa hodnota vráti. Aby sme to pochopili, používame knižnice NewPing postavené na konštantnej úrovni US_ROUNDTRIP_CM, ktorá definuje, koľko mikrosekúnd trvá jeden centimeter. Medzi pingmi je tiež oneskorenie 50 ms, aby sa zabránilo preťaženiu senzora.

Piezo alarm

Piezo kryštálový senzor je jednoduchý a lacný bzučiak a pomocou PWM pin 3 môžeme vytvoriť rôzne tóny. Pripojte jeden vodič ku kolíku 3, jeden k uzemňovacej koľajnici - nezáleží na tom, ktoré.

použitie tento kód Testovať.

Jediným spôsobom, ako zabiť dosť nepríjemný a hlasný poplach, je vytiahnuť zástrčky. Vysvetlenie kódu je trochu zložité, vyžaduje si to však použitie sínusových vĺn na vytvorenie výrazného zvuku. Vylepšite čísla tak, aby sa dali hrať rôznymi tónmi.

Kódovanie poplachového systému

Teraz, keď máme všetky kúsky tejto hádanky, spojme ich dohromady.

Choďte do toho a vytvorte novú skicu s názvom poplach. Začnite tým, že skombinujete všetky premenné a definície pinov, ktoré sme doteraz použili v príkladoch testov.

#include  // Vyberte, ktoré kolíky, ktoré sa majú použiť s PWM, sa majú použiť. #define RED_PIN 10. #definovať GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Kolík Arduino je priviazaný na spustenie kolíka na ultrazvukovom senzore. #define ECHO_PIN 7 // Arduino pin priviazaný k echo pinu na ultrazvukovom senzore. #define MAX_DISTANCE 100 // Maximálna vzdialenosť, za ktorú chceme ping (v centimetroch). #define ALARM 3 float sinVal; int toneVal; 

Začnite tým, že napíšete základné nastaviť() funkcie - so svetlami sa budeme zaoberať iba teraz. Pridal som 5-sekundové oneskorenie predtým, ako sa spustí hlavná slučka, aby sme v prípade potreby dostali čas na to, aby sme sa dostali z cesty.

void setup () {// set pinModes pre RGB strip pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // resetovanie svetiel analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); oneskorenie (5000); }

Použime pomocnú funkciu, ktorá nám umožní rýchlo zapísať do svetiel jednu hodnotu RGB.

// pomocná funkcia, ktorá nám umožňuje poslať farbu jedným príkazom. prázdna farba (nepodpísané char červená, nepodpísané char green, nepodpísané char blue) // funkcia generovania farieb. {analogWrite (RED_PIN, červený); analogWrite (BLUE_PIN, modrý); analogWrite (GREEN_PIN, zelená); }

Nakoniec bude naša slučka pozostávať z jednoduchého farebného blesku medzi červenou a žltou farbou (alebo podľa toho, čo chcete, aby bol váš budík - jednoducho zmeňte hodnoty RGB).

void loop () {color (255,0,0); // červené oneskorenie (100); farba (255 255,0); // žlté oneskorenie (100); }

Odovzdajte ho a otestujte, aby ste sa uistili, že ste na správnej ceste.

Teraz integrujme senzor vzdialenosti, ktorý spustí tieto svetlá, len keď niečo príde, povedzme 50 cm (len menšia ako šírka rámu dverí). Už sme definovali správne špendlíky a knižnicu sme importovali, takže pred vašou nastaviť() Ak chcete spustiť inštanciu, pridajte nasledujúci riadok:

Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing nastavenie pinov a maximálna vzdialenosť. 

Pod tým, pridajte premennú na uloženie stavu spusteného alebo nespusteného alarmu, samozrejme predvolené na false.

boolean triggered = false; 

Pridajte riadok do nastaviť() fungujú tak, aby sme mohli monitorova výstup na sériovom a ladiacom zariadení.

Serial.egin (115200); // Otvorte sériový monitor pri 115 200 baudoch, aby ste videli výsledky pingu. 

Ďalej premenujme aktuálnu slučku alarm () - toto sa bude volať po spustení budíka.

alarm neplatnosti () {farba (255,0,0); // červené oneskorenie (100); farba (255 255,0); // yelow delay (100); }

Teraz vytvorte nový slučka () funkcii, v ktorej načítame nový ping, prečítame výsledky a spustíme alarm, ak sa niečo zistí v rozsahu glukomera.

void loop () {if (triggered == true) {alarm (); } else {delay (50); // Počkajte 50ms medzi pingmi (asi 20 ping / s). 29 ms by malo byť najkratším oneskorením medzi pingmi. unsigned int uS = sonar.ping (); // Pošlite ping, získajte ping čas v mikrosekundách (uS). unsigned int distance = uS / US_ROUNDTRIP_CM; Serial.println (vzdialenosť); if (vzdialenosť <100) {triggered = true; } } }

Dovoľte mi stručne vysvetliť kód:

  • Najprv skontrolujte, či sa spustil alarm, a ak áno, vypnite funkciu alarmu (v tomto okamihu iba blikajú svetlá).
  • Ak ešte nie je spustený, získajte aktuálny údaj zo senzora.
  • Ak senzor sníma <100 cm, lúč sa polstroval lúčom (túto hodnotu upravte, ak sa na vás spúšťa príliš skoro, samozrejme).

Vyskúšajte to hneď teraz, skôr ako pridáme nepríjemný piezový bzučiak.

Práca? Skvelé. Teraz pridáme tento bzučiak späť. pridať pinMode do nastaviť() rutina.

pinMode (ALARM, OUTPUT); 

Potom k funkcii alarmu () pridajte piezoelektrickú slučku:

pre (int x = 0; x <180; x ++) {// prevádzajte stupne na radiány a potom získajte hodnotu hriechu sinVal = (sin (x * (3,1412 / 180)))); // generovať frekvenciu zo sinovej hodnoty toneVal = 2000+ (int (sinVal * 1000)); tón (ALARM, tónVal); }

Ak sa v tomto okamihu pokúsite kompilovať, narazíte na chybu - túto otázku som nechal zámerne, aby ste videli niektoré bežné problémy. V takom prípade používa knižnica NewPing aj štandardná knižnica tónov rovnaké prerušenia - v podstate sú v konflikte a nie je toho veľa, čo by ste mohli urobiť. Och drahý.

Bez obáv. Je to bežný problém a niekto už má riešenie - stiahnite a pridajte Newton do priečinka knižnice Arduino. Upravte začiatok programu tak, aby obsahoval toto:

#include 

A upravte čiaru:

 tón (ALARM, tónVal); 

na

 NewTone (ALARM, toneVal); 

miesto.

To je všetko. Postavte alarm vo dverách svojej izby na ďalší nešťastný rádoby zlodej.

Alebo je to psík, ktorý bol poplašný, ktorý sa zdal alarmom úplne nepotrestaný.

Máte problémy s kódom? Tu je kompletná aplikácia. Ak máte náhodné chyby, skúste ich vložiť nižšie a uvidíme, či vám môžem pomôcť.

Obrázkový kredit: Požiarny hlásič cez Flickr

James má bakalárske štúdium v ​​oblasti umelej inteligencie a je držiteľom certifikátu CompTIA A + a Network +. Je popredným vývojárom MakeUseOf a trávi svoj voľný čas hraním VR paintballu a spoločenských hier. Staval počítače od malička.