Diy

Как сделать простую систему сигнализации Arduino

Как сделать простую систему сигнализации Arduino

Обнаружьте движение, затем напугайте до чертика злоумышленника высокими звуковыми сигналами тревоги и мигающими огнями. Звучит весело? Конечно, это так. Это цель сегодняшнего проекта Arduino, подходящего для начинающих. Мы будем писать с нуля и тестировать по мере продвижения, чтобы вы могли надеяться получить некоторое представление о том, как все это делается, а не просто установить то, что я уже сделал.

Отказ от ответственности: это не собирается на самом деле защитить ваш дом. Это может вызвать у вашей сестры неприятный шок, когда она пробирается в вашу комнату.

Вам понадобиться:

  • Ардуино
  • Ультразвуковой датчик «ping», я использую HC-SR04 A PIR будет лучше, но это дорого. Датчик ping может быть тайно помещен в дверной проем и все еще выполнять ту же самую основную работу, и стоит всего 5 $
  • Пьезо зуммер
  • Светодиодная лента, с той же проводкой, которую мы использовали в этом проекте. .

Поскольку вы подключаете этот проект, не удаляйте все каждый раз — просто продолжайте работу над последним блоком. К тому времени, когда вы доберетесь до раздела «Coding The Alarm System», у вас должны быть все части и кусочки, которые выглядят примерно так:

законченные проводки

Мигающие огни

Используйте схему подключения из этого проекта. чтобы подключить светодиодную ленту; не меняйте контакты, так как нам нужен выход ШИМ. Используйте этот код для быстрого тестирования вашей проводки. Если все идет хорошо, вы должны иметь это:

LED-RGB-тест

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

На модуле SR04 вы найдете 4 контакта. VCC и GND подключаются к шине + 5V и заземлению соответственно; TRIG — это вывод, используемый для отправки сигнала сонара, поместите его на вывод 6; ECHO используется для считывания сигнала обратно (и, следовательно, для расчета расстояния) — установите это значение на 7.

SR04

Чтобы сделать все невероятно простым, есть библиотека, которую мы можем использовать под названием NewPing . Загрузите и поместите в папку библиотеки Arduino и перезапустите IDE, прежде чем продолжить. Проверьте, используя этот код ; откройте последовательный монитор и убедитесь, что скорость установлена ​​на 115200 бод. Если вам повезет, вы должны увидеть, как некоторые измерения расстояния отправляются вам на довольно высокой скорости. Вы можете найти отклонение в 1 или 2 сантиметра, но это нормально. Попробуйте провести рукой перед датчиком, двигая его вверх и вниз, чтобы увидеть изменяющиеся показания.

пинг-вывода

Код должен быть достаточно простым для понимания. В начале есть несколько деклараций о соответствующих выводах, включая максимальное расстояние — оно может варьироваться в зависимости от того, какой именно датчик у вас есть, но если вы можете получить точные показания менее 1 метра, у вас все будет в порядке.

В цикле этого тестового приложения мы используем функцию ping () для отправки эхолота, возвращая значение в миллисекундах того, сколько времени потребовалось для возврата значения. Чтобы понять это, мы используем библиотеки NewPing, встроенные в константу US_ROUNDTRIP_CM , которая определяет, сколько микросекунд требуется, чтобы пройти один сантиметр. Между пингами также имеется задержка 50 мс, чтобы избежать перегрузки датчика.

Пьезо будильник

Пьезокристаллический сенсор — это простой и дешевый зуммер, и мы можем использовать ШИМ-вывод 3 для создания разных тонов. Подключите один провод к контакту 3, другой — к шине заземления — не важно, какой именно.

Используйте этот код для тестирования.

Единственный способ убить довольно неприятную и громкую тревогу — это выдернуть вилки. Код немного сложен для объяснения, но он включает в себя использование синусоидальных волн для генерации отличительного звука. Настройте числа, чтобы играть разными тонами.

Кодирование системы сигнализации

Теперь, когда у нас есть все части этой головоломки, давайте объединим их вместе.

Идите вперед и сделайте новый набросок под названием « Тревога» . Начните с объединения всех переменных и определений выводов, которые мы использовали в тестовых примерах до сих пор.

#include <NewPing.h> // Select which PWM-capable pins are to be used. #define RED_PIN 10 #define GREEN_PIN 11 #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino pin tied to trigger pin on the ultrasonic sensor. #define ECHO_PIN 7 // Arduino pin tied to echo pin on the ultrasonic sensor. #define MAX_DISTANCE 100 // Maximum distance we want to ping for (in centimeters). #define ALARM 3 float sinVal; int toneVal; 

Начните с написания базовой функции setup () — пока мы будем иметь дело только с индикаторами. Я добавил 5-секундную задержку перед запуском основного цикла, чтобы дать нам некоторое время, чтобы уйти с дороги в случае необходимости.

 void setup(){ //set pinModes for RGB strip pinMode(RED_PIN,OUTPUT); pinMode(BLUE_PIN,OUTPUT); pinMode(GREEN_PIN,OUTPUT); //reset lights analogWrite(RED_PIN,0); analogWrite(BLUE_PIN,0); analogWrite(RED_PIN,0); delay(5000); } 

Давайте используем вспомогательную функцию, которая позволяет нам быстро записать одно значение RGB на источники света.

 //helper function enabling us to send a colour in one command void color (unsigned char red, unsigned char green, unsigned char blue) // the color generating function { analogWrite(RED_PIN, red); analogWrite(BLUE_PIN, blue); analogWrite(GREEN_PIN, green); } 

Наконец, наш цикл на данный момент будет состоять из простой цветовой вспышки между красным и желтым (или, что бы вы ни хотели, чтобы ваш будильник был — просто измените значения RGB).

 void loop(){ color(255,0,0); //red delay(100); color(255,255,0); //yellow delay(100); } 

Загрузите и проверьте это, чтобы убедиться, что вы на правильном пути.

Теперь давайте интегрируем датчик расстояния, чтобы включить эти огни только тогда, когда что-то находится, скажем, в 50 см (чуть меньше ширины дверной рамы). Мы уже определили правильные выводы и импортировали библиотеку, поэтому перед вашей функцией setup () добавьте следующую строку для ее создания:

 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. 

Под этим, добавьте переменную для хранения состояния срабатывания тревоги или нет, конечно, по умолчанию false.

 boolean triggered = false; 

Добавьте строку в функцию setup (), чтобы мы могли отслеживать вывод по последовательному порту и отлаживать.

 Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results. 

Далее, давайте переименуем токовую петлю в alarm () — это то, что будет вызываться, если сработала сигнализация.

 void alarm(){ color(255,0,0); //red delay(100); color(255,255,0); //yelow delay(100); } 

Теперь создайте новую функцию loop () , в которой мы получаем новый пинг, читаем результаты и запускаем сигнализацию, если что-то обнаружено в пределах диапазона счетчика.

 void loop(){ if(triggered == true){ alarm(); } else{ delay(50);// Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings. unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS). unsigned int distance = uS / US_ROUNDTRIP_CM; Serial.println(distance); if(distance < 100){ triggered = true; } } } 

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

  • Начните с проверки, сработала ли сигнализация, и, если это так, отключите функцию будильника (просто мигая в данный момент).
  • Если это еще не сработало, получите текущее показание от датчика.
  • Если датчик читает <100 см, что-то попало лучу (очевидно, отрегулируйте это значение, если он срабатывает слишком рано).

Дайте ему пробную версию сейчас, прежде чем мы добавим надоедливый пьезо-зуммер.

За работой? Отлично. Теперь давайте добавим этот зуммер обратно. Добавьте pinMode в процедуру setup () .

 pinMode(ALARM, OUTPUT); 

Затем добавьте пьезо-зуммер в функцию alarm ():

 for (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); } 

Если вы попытаетесь скомпилировать на этом этапе, вы столкнетесь с ошибкой — я оставил это намеренно, чтобы вы могли увидеть некоторые распространенные проблемы. В этом случае и библиотека NewPing, и библиотека стандартных тонов используют одни и те же прерывания — они в основном конфликтуют, и вы не можете многое сделать, чтобы это исправить. О, Боже.

Не беспокойтесь, хотя. Это распространенная проблема, и у кого-то уже есть решение — скачайте и добавьте этот NewTone в папку Arduino Libraries. Настройте начало вашей программы, чтобы включить это:

 #include <NewTone.h> 

И настроить строку:

 tone(ALARM, toneVal); 

в

 NewTone(ALARM, toneVal); 

вместо.

Вот и все. Установите будильник в дверях своей спальни для следующего несчастного потенциального грабителя.

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

Возникли проблемы с кодом? Вот полное приложение . Если вы получаете случайные ошибки, попробуйте вставить их ниже, и я посмотрю, смогу ли я помочь.

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

Похожие посты
Diy

Вещи, которые вы должны иметь в виду, прежде чем брать ноутбук или смартфон в службу технической поддержки

Diy

Как использовать Arduino для съемки красивой скоростной фотографии

DiyLinux

Пять великолепных расширений Raspberry Pi, которые делают его еще более полезным

Diy

Первые шаги с Arduino: пристальный взгляд на печатную плату и структуру программы