Рекламное объявление
Обнаружьте движение, затем напугайте до чертика злоумышленника высокими звуковыми сигналами тревоги и мигающими огнями. Звучит весело? Конечно, это так. Это цель сегодняшнего проекта Arduino, подходящего для начинающих. Мы будем писать с нуля и тестировать по мере продвижения, чтобы вы могли надеяться получить некоторое представление о том, как все это делается, а не просто установить то, что я уже сделал.
Отказ от ответственности: это не собирается на самом деле защитить ваш дом. Это мог бы хотя шокируй твою сестру, когда она пробирается в твою комнату.
Тебе понадобиться:
- Ардуино
- Ультразвуковой датчик "пинг", я использую HC-SR04 ПИР был бы лучше, но это дорого. Датчик ping может быть тайно помещен в дверной проем и все еще выполнять ту же самую основную работу, и стоит всего 5 $
- Пьезо-зуммер
- Светодиодная лента, с той же проводкой, которую мы использовали вернуться в этот проект Создайте свое собственное динамическое окружающее освещение для медиацентраЕсли вы смотрите много фильмов на своем компьютере или в медиацентре, я уверен, что вы столкнулись с дилеммой освещения; Вы полностью выключаете все огни? Вы держите их на полную мощность? Или же... Подробнее .
Поскольку вы подключаете этот проект, не удаляйте все каждый раз - просто продолжайте работу над последним блоком. К тому времени, когда вы доберетесь до раздела «Coding The Alarm System», у вас должны быть все части и фрагменты, выглядящие примерно так:
Мигающие огни
Используйте схему подключения из этого проекта Создайте свое собственное динамическое окружающее освещение для медиацентраЕсли вы смотрите много фильмов на своем компьютере или в медиацентре, я уверен, что вы столкнулись с дилеммой освещения; Вы полностью выключаете все огни? Вы держите их на полную мощность? Или же... Подробнее подключить вашу светодиодную ленту; не меняйте контакты, так как нам нужен выход ШИМ. использование этот код быстро проверить свою проводку. Если все идет хорошо, вы должны иметь это:
Датчик расстояния
На модуле SR04 вы найдете 4 контакта. VCC и GND перейти к + 5В рельсу и земле соответственно; TRIG это контакт, используемый для отправки сигнала сонара, поместите его на контакт 6; ECHO используется для считывания сигнала обратно (и, следовательно, для расчета расстояния) - установите это значение на 7.
Чтобы сделать вещи невероятно простыми, есть библиотека, которую мы можем использовать под названием 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-пейнтбол и настольные игры. Он строит компьютеры с детства.