
Michael Cain
0
811
213
Обнаружьте движение, затем напугайте до чертика злоумышленника громкими звуковыми сигналами тревоги и мигающими огнями. Звучит весело? Конечно, это так. Это цель сегодняшнего проекта Arduino, подходящего для начинающих. Мы будем писать с нуля и тестировать по мере продвижения, чтобы вы могли надеяться получить некоторое представление о том, как все это делается, а не просто установить то, что я уже сделал.
Отказ от ответственности: это не собирается на самом деле защитить ваш дом. Это может быть хотя твоя сестра будет шокирована, когда она пробирается в твою комнату.
Тебе понадобиться:
- Ардуино
- Ультразвуковой “пинг” датчик, я использую HC-SR04 A PIR было бы лучше, но это дорого. Датчик ping может быть тайно помещен в дверной проем и все еще выполнять ту же самую основную работу, и стоит всего 5 $
- Пьезо зуммер
- Светодиодная лента, с той же проводкой, которую мы использовали в этом проекте. Создайте свое собственное динамическое окружающее освещение для медиацентра Создайте свое собственное динамическое окружающее освещение для медиацентра Если вы смотрите много фильмов на своем компьютере или в медиацентре, я я уверен, что вы столкнулись с дилеммой освещения; Вы полностью выключили все огни? Вы держите их на полную мощность? Или же… .
Поскольку вы подключаете этот проект, не удаляйте все каждый раз - просто продолжайте работу над последним блоком. К тому времени, когда вы доберетесь до “Кодирование системы сигнализации” раздел, вы должны иметь все фрагменты, выглядящие примерно так:
Мигающие огни
Используйте схему подключения из этого проекта. Создайте свое собственное динамическое окружающее освещение для медиацентра. Создайте свое собственное динамическое окружающее освещение для медиацентра. Если вы смотрите много фильмов на своем компьютере или в медиацентре, я уверен, что вы столкнулись с дилемма освещения; Вы полностью выключили все огни? Вы держите их на полную мощность? Или ... подключить светодиодную ленту; не меняйте контакты, так как нам нужен выход ШИМ. Используйте этот код для быстрого тестирования вашей проводки. Если все идет хорошо, вы должны иметь это:
Датчик расстояния
На модуле SR04 вы найдете 4 контакта. VCC а также GND перейти к + 5В рельсу и земле соответственно; TRIG это контакт, используемый для отправки сигнала сонара, поместите его на контакт 6; ECHO используется, чтобы прочитать сигнал обратно (и, следовательно, рассчитать расстояние) - поставить это на 7.
Чтобы сделать все невероятно простым, есть библиотека, которую мы можем использовать под названием NewPing. Скачайте и поместите в свой Arduino's Библиотека папку и перезапустите IDE, прежде чем продолжить. Проверьте, используя этот код; откройте последовательный монитор и убедитесь, что скорость установлена на 115200 бод. Если вам повезет, вы должны увидеть, как некоторые измерения расстояния отправляются вам на довольно высокой скорости. Вы можете найти отклонение в 1 или 2 сантиметра, но это нормально. Попробуйте провести рукой перед датчиком, двигая его вверх и вниз, чтобы увидеть изменяющиеся показания.
Код должен быть достаточно простым для понимания. В начале есть несколько деклараций о соответствующих выводах, включая максимальное расстояние - оно может варьироваться в зависимости от того, какой датчик у вас есть, но если вы можете получить точные показания менее 1 метра, у вас должно быть все в порядке.
В цикле этого тестового приложения мы используем пинг() функция для отправки эхолота, возвращая значение в миллисекундах того, сколько времени потребовалось для возврата значения. Чтобы понять это, мы используем библиотеки NewPing, встроенные в константу US_ROUNDTRIP_CM, который определяет, сколько микросекунд требуется, чтобы пройти один сантиметр. Существует также задержка 50 мс между пингами, чтобы избежать перегрузки датчика..
Пьезо будильник
Пьезокристаллический сенсор - это простой и дешевый зуммер, и мы можем использовать ШИМ-вывод 3 для создания разных тонов. Подключите один провод к контакту 3, другой - к шине заземления - не важно, какой.
Используйте этот код для тестирования.
Единственный способ убить довольно неприятную и громкую тревогу - это выдернуть вилки. Код немного сложен для объяснения, но он включает в себя использование синусоидальных волн для генерации отличительного звука. Настройте числа, чтобы играть разными тонами.
Кодирование системы сигнализации
Теперь, когда у нас есть все части этой головоломки, давайте объединим их вместе.
Идите и сделайте новый набросок под названием Тревога. Начните с объединения всех переменных и определений выводов, которые мы использовали в тестовых примерах до сих пор..
#include // Выберите, какие выводы с поддержкой ШИМ должны использоваться. #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); // NewPing настройка пинов и максимальное расстояние.
Под этим, добавьте переменную для хранения состояния срабатывания тревоги или нет, по умолчанию, конечно, значение 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 (расстояние); если (расстояние < 100) triggered = true;
Позвольте мне кратко объяснить код:
- Начните с проверки, сработала ли сигнализация, и, если это так, отключите функцию будильника (просто мигая в данный момент).
- Если это еще не сработало, получить текущее показание от датчика.
- Если датчик читает <100 cm, something has padded the beam (adjust this value if it's triggering too early for you, obviously).
Дайте ему пробную версию сейчас, прежде чем мы добавим раздражающий пьезо-зуммер.
За работой? Отлично. Теперь давайте добавим этот зуммер обратно. добавлять pinMode к настроить() рутинный.
pinMode (ALARM, OUTPUT);
Затем добавьте пьезо-зуммер в функцию alarm ():
для (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. Настройте начало вашей программы, чтобы включить это:
#включают
И настроить строку:
тон (ALARM, toneVal);
в
NewTone (ALARM, toneVal);
вместо.
Вот и все. Установите будильник в дверях своей спальни для следующего несчастного потенциального грабителя.
Или вялый пес, который казался совершенно равнодушным к тревоге.
Возникли проблемы с кодом? Вот полное приложение. Если вы получаете случайные ошибки, попробуйте вставить их ниже, и я посмотрю, смогу ли я помочь.
Кредит изображения: Пожарная тревога через Flickr