Рекламное объявление

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

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

Тебе понадобиться:

  • Ардуино
  • Ультразвуковой датчик "пинг", я использую HC-SR04 ПИР был бы лучше, но это дорого. Датчик ping может быть тайно помещен в дверной проем и все еще выполнять ту же самую основную работу, и стоит всего 5 $
  • Пьезо-зуммер
  • Светодиодная лента, с той же проводкой, которую мы использовали вернуться в этот проект Создайте свое собственное динамическое окружающее освещение для медиацентраЕсли вы смотрите много фильмов на своем компьютере или в медиацентре, я уверен, что вы столкнулись с дилеммой освещения; Вы полностью выключаете все огни? Вы держите их на полную мощность? Или же...
    instagram viewer
    Подробнее
    .

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

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

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

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

LED-RGB-тест

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

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

SR04

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

пинг-вывода

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

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

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

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

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

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

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

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

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

#включают  // Выберите, какие штырьки с поддержкой ШИМ будут использоваться. #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 () {// установить 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 на свет.

// вспомогательная функция, позволяющая отправить цвет одной командой. void color (красный без знака, зеленый без знака, синий без знака) // функция генерации цвета. {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); // Новая настройка пинов и максимальное расстояние. 

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

логическое срабатывание = ложь; 

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

Serial.begin (115200); // Открыть последовательный монитор на скорости 115200 бод, чтобы увидеть результаты проверки связи. 

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

void alarm () {color (255,0,0); // красная задержка (100); цвет (255 255,0); // желтая задержка (100); }

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

void loop () {if (triggered == true) {alarm (); } else {delay (50); // Ожидание 50 мс между пингами (около 20 пингов / сек). 29 мс должны быть кратчайшей задержкой между пингами. без знака int uS = sonar.ping (); // Отправить пинг, получить время пинга в микросекундах (сша). unsigned int distance = uS / US_ROUNDTRIP_CM; Serial.println (расстояние); if (distance <100) {triggered = true; } } }

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

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

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

Работает? Отлично. Теперь давайте добавим этот зуммер обратно. добавлять pinMode к настроить() рутина.

pinMode (ALARM, OUTPUT); 

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

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

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

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

#включают 

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

 тон (ALARM, toneVal); 

в

 NewTone (ALARM, toneVal); 

вместо.

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

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

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

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

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