реклама

Открийте движение, а след това изплашете дяволите от натрапник с висок звук на алармата и мигащи светлини. Това звучи ли забавно? Разбира се, че го прави. Това е целта на днешния проект на Arduino, подходящ за начинаещи. Ще продължим да пишем напълно от нулата и да тестваме, докато продължаваме, така че можете да се надявате да получите представа как се прави всичко това, а не просто да инсталирате нещо, което вече съм направил.

Отказ от отговорност: това няма да защити реално къщата ви. То биха могли, може дайте на сестра си гаден шок, когато тя се промъкне във вашата стая.

Ще имаш нужда:

  • Ардуино
  • Използвам ултразвуков сензор за „ping“ HC-SR04 PIR би бил по-добър, но тези са скъпи. Датчикът за пинг може да бъде поставен скрито във вратата и все още да обслужва същата основна работа и е само $ 5
  • Пиезо зумер
  • LED лента светлина, със същото окабеляване, което използвахме обратно в този проект Изградете своя собствена динамична осветителна среда за медиен центърАко гледате много филми на вашия компютър или медиен център, сигурен съм, че сте се сблъскали с дилемата на осветлението; изключваш ли напълно всички светлини? Поддържате ли ги на пълен взрив? Или...
    instagram viewer
    Прочетете още
    .

Докато свързвате този проект, не премахвайте всичко всеки път - просто продължавайте да надграждате последния блок. Докато стигнете до секцията „Кодиране на алармената система“, трябва да свържете всички битове и парчета, като изглеждате така:

завършен окабеляване

Мигащи светлини

Използвайте схемата на свързване от този проект Изградете своя собствена динамична осветителна среда за медиен центърАко гледате много филми на вашия компютър или медиен център, сигурен съм, че сте се сблъскали с дилемата на осветлението; изключваш ли напълно всички светлини? Поддържате ли ги на пълен взрив? Или... Прочетете още да закачите вашата LED лента; не сменяйте щифтовете, тъй като се нуждаем от PWM изход употреба този код за да тествате бързо окабеляването си. Ако всичко върви добре, трябва да имате това:

довели-RGB-тест

Датчик за разстояние

В модула SR04 ще намерите 4 пина. VCC и GND отидете на + 5V релса и земя съответно; TRIG е щифтът, използван за изпращане на сонарен сигнал, поставете това на щифт 6; ECHO се използва за четене на сигнала обратно (и следователно изчисляване на разстоянието) - поставете това на 7.

sr04

За да направим нещата изключително прости, има библиотека, която можем да използваме наречена NewPing. Изтеглете и поставете в Arduino's Библиотека папка и рестартирайте IDE, преди да продължите. Тест с помощта този код; отворете серийния монитор и се уверете, че скоростта е настроена на 115200 baud. С късмет трябва да видите някои измервания на разстояния, които ви изпращат с доста висока скорост. Може да откриете отклонение от 1 или 2 сантиметра, но това е добре. Опитайте да пуснете ръката си пред сензора, да я движите нагоре и надолу, за да наблюдавате променящите се показания.

пинг-изход

Кодът трябва да бъде сравнително просто да се разбере. Има няколко декларации на съответните пинове в началото, включително максимално разстояние - това може да варира според точният сензор, който имате, но стига да можете да получите точно отчитане под 1 метър, трябва да бъдете глоба.

В цикъла на това тестово приложение използваме пинг () функция за изпращане на сонарен пинг, връщане на стойност в милисекунди от колко време е отнело връщането на стойността. За да имаме смисъл от това, използваме NewPing библиотеките, изградени в константа на US_ROUNDTRIP_CM, което определя колко микросекунди са необходими, за да измине един сантиметър. Също така има забавяне от 50 ms между pings, за да избегнете претоварване на сензора.

Пиезо аларма

Пиезо кристалният сензор е прост и евтин зумер и можем да използваме PWM щифт 3 за създаване на различни тонове. Свържете една жица към щифт 3, една към заземителна релса - няма значение коя.

употреба този код да тествам.

Единственият начин да убиете доста отвратителната и силна аларма е да издърпате щепселите. Кодът е малко сложен за обяснение, но включва използване на синусоиди за генериране на отличителен звук. Ощипвайте числата, за да играете с различни тонове.

Кодиране на алармената система

Сега, когато имаме всички части на този пъзел, нека ги комбинираме заедно.

Продължете напред и направете нова скица, наречена Аларма. Започнете с комбиниране на всички променливи и дефиниции на щифтове, които сме били в тестовите примери досега.

#include  // Изберете кои PWM-пинове да се използват. #define RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino щифт, завързан за спусъка на ултразвуковия сензор. #define ECHO_PIN 7 // Arduino щифт, завързан за ехо на щифта на ултразвуковия сензор. #define MAX_DISTANCE 100 // Максимално разстояние, за което искаме да пингираме (в сантиметри). #define ALARM 3 float sinVal; int toneVal; 

Започнете с написването на основно настройвам() функция - засега ще се занимаваме само със светлините. Добавих 5 секундно закъснение преди да започне основният цикъл, за да ни даде малко време да излезем от пътя, ако е необходимо.

void setup () {// set pinModes за RGB лента pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // нулиране на светлините analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); забавяне (5000); }

Нека използваме помощна функция, която ни позволява бързо да запишем една RGB стойност на светлините.

// помощна функция, която ни позволява да изпратим цвят в една команда. празен цвят (неподписано червено червено, неподписано черно зелено, неподписано синьо синьо) // функцията за генериране на цвят. {analogWrite (RED_PIN, червен); analogWrite (BLUE_PIN, син); analogWrite (GREEN_PIN, зелен); }

И накрая, нашата линия за сега ще се състои от обикновена цветна светкавица между червено и жълто (или, каквото искате да бъде алармата ви - просто променете RGB стойностите).

void loop () {color (255,0,0); // червено забавяне (100); цвят (255 255,0); // жълто забавяне (100); }

Качете и тествайте това, за да сте сигурни, че сте на правилния път.

Сега, интегрирайте сензора за разстояние, за да задейства тези светлини само когато нещо влезе, например, 50 см (малко по-малко от ширината на рамката на вратата). Вече сме дефинирали правилните пинове и импортирахме библиотеката, така че преди вашата настройвам() функция добавете следния ред, за да го създадете:

NewPing сонар (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing настройка на пинове и максимално разстояние. 

Под това добавете променлива, която да съхранява състоянието на алармата, която се задейства или не, разбира се, по подразбиране към невярно.

булево задействане = невярно; 

Добавете ред към настройвам() функция, за да можем да следим изхода при сериен и грешка.

Serial.begin (115200); // Отворете сериен монитор при 115200 бод, за да видите резултатите от ping. 

След това нека преименуваме текущия цикъл в аларма() - това ще се извика, ако алармата е била активирана.

аварийна аларма () {color (255,0,0); // червено забавяне (100); цвят (255 255,0); // ниско забавяне (100); }

Сега създайте нова линия () функция, при която получаваме нов пинг, четем резултатите и задействаме алармата, ако нещо бъде открито в обхвата на измервателния уред.

void loop () {if (задейства == true) {alarm (); } else {забавяне (50); // Изчакайте 50ms между pings (около 20 pings / sec). 29ms трябва да е най-краткото закъснение между pings. неподписан int uS = sonar.ping (); // Изпратете ping, вземете време за ping в микросекунди (uS). неподписано инт разстояние = uS / US_ROUNDTRIP_CM; Serial.println (разстояние); ако (разстояние <100) {triggered = true; } } }

Позволете ми да обясня накратко кода:

  • Започнете, като проверите дали алармата е задействана и ако е така, изключете алармената функция (просто мига светлините в момента).
  • Ако все още не е задействано, вземете текущото отчитане от сензора.
  • Ако сензорът отчита <100 см, нещо е запълнило лъча (коригирайте тази стойност, ако очевидно задейства твърде рано за вас).

Изпробвайте го сега, преди да добавим досадния пиезозвук.

Работа? Страхотен. Сега нека добавим този зумер обратно. Добави pinMode към настройвам() рутина.

pinMode (ALARM, OUTPUT); 

След това добавете пиезо звънеца към функцията за аларма ():

за (int x = 0; х <180; x ++) {// конвертирате градуси в радиани, след това получавате стойност на sin sinVal = (sin (x * (3.1412 / 180))); // генериране на честота от грешката стойност toneVal = 2000+ (int (sinVal * 1000)); тон (ALARM, toneVal); }

Ако в този момент се опитате да компилирате, ще се сблъскате с грешка - умишлено оставих това, за да видите някои често срещани проблеми. В този случай и NewPing, и стандартната тонална библиотека използват едни и същи прекъсвания - те са в основата си противоречиви и няма много какво да направите, за да го поправите. О Боже.

Без притеснения обаче. Това е често срещан проблем и някой вече има решение - изтеглете и добавете това NewTone до вашата папка Arduino Libraries. Настройте началото на програмата си, за да включите това:

#include 

И коригирайте реда:

 тон (ALARM, toneVal); 

да се

 NewTone (ALARM, toneVal); 

вместо.

Това е. Поставете алармата си във вратата на вашата спалня за следващия неудачен крадец на взлом.

Или куче за отвращение, което изглеждаше напълно неразбрано от алармата.

Имате проблеми с кода? Ето го пълно приложение. Ако получавате случайни грешки, опитайте да ги поставите по-долу и ще видя дали мога да помогна.

Кредит за изображение: Пожароизвестяване чрез Flickr

Джеймс има бакалавърска степен по изкуствен интелект и е сертифициран като CompTIA A + и Network +. Той е водещ разработчик на MakeUseOf и прекарва свободното си време, играейки VR пейнтбол и настолни игри. Той изгражда компютри още от дете.