Блог
492 0

Gsm сигнализация с датчиком движения на ардуино. Создание охранной сигнализации с датчиком движения на базе Arduino и инфракрасных датчиков

Простая охранная сигнализация для дома на Arduino Uno — тема данного обзора. Несмотря на то, что микроконтроллеры данного семейства были изначально предназначены для обучения студентов, вполне реально сделать действительно полезный проект на Arduino. Охранные сигнализации для дома или садового участка смогут предупредить владельца о ЧП и послать сообщение с датчиков на смартфон.

Сигнализация для дома на Arduino

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

Датчики Ардуино для охранной сигнализации

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

В проекте использованы самые простые сенсоры — температурный датчик DHT11, датчик утечки воды, который можно сделать самому, а также датчик движения. Если вы решите сделать более сложную сигнализацию — рекомендуем вам посмотреть проект пожарной сигнализации или сигнализации на GSM. Также потребуется установить приложение на смартфон и зарегистрировать два аккаунта в Твиттере.

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

Для этого проекта нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • смартфон с выходом в Интернет;
  • датчик температуры и влажности DHT11;
  • датчик утечки воды (water sensor);
  • датчик движения и кнопка (переключатель);
  • светодиоды, резисторы, провода и т.д.

Скетч для сигнализации, все необходимые библиотеки и приложение для смартфона можно скачать одним архивом. Отметим, что нельзя будет дистанционно управлять Arduino, так как проект максимально простой. Вы сможете лишь в сообщениях на смартфоне узнавать о показаниях датчиков, установленных в доме, через заданный промежуток времени или при срабатывании какого-либо датчика.

Скетч охранной сигнализации на Arduino Uno / Nano

#include// подключение библиотеки SoftwareSerial.h SoftwareSerial mySerial(2, 3); // указываем пины rx и tx соответственно #include// подключаем библиотеку для датчика DHT dht(16, DHT11); // сообщаем на каком порту будет датчик int tmp; #define PIR 5 // порт для подключения датчика движения int pir; #define KNP 7 // порт для подключения переключателя int knp; #define WTR 19 // порт для подключения датчика воды int wtr; #define LED 11 // порт для подключения светодиодов #define BUZ 9 // порт для подключения пьезодинамика // строки для идентификации информации, получаемой на смартфоне String stringT = String ("*" ); String stringP = String ("^" ); String stringW = String ("-" ); String stringH = String ("#" ); // переменные для счетчиков, отсчета циклов и т.д. unsigned long motion; unsigned long hour; byte m, s1, s2, s3, c = 10; void setup () { mySerial.begin (9600); Serial. begin (9600); dht.begin (); pinMode (PIR, INPUT ); analogWrite (PIR, LOW ); pinMode (KNP, INPUT ); analogWrite (KNP, LOW ); pinMode (WTR, INPUT ); analogWrite (WTR, LOW ); // проверка светодиодов и пищалки при включении питания pinMode (BUZ, OUTPUT ); pinMode (LED, OUTPUT ); analogWrite (LED, 255); tone (BUZ, 100); delay (1000); analogWrite (LED, 0); noTone (BUZ); delay (1000); } void loop () { tmp = dht.readTemperature (); pir = digitalRead (PIR); knp = digitalRead (KNP); wtr = analogRead (WTR); // запускаем счетчик hour = millis (); // 3600000 миллисекунд - это 1 час, 10800000 - 3 часа // если прошло 3 часа - отправляем данные на смартфон // при необходимости ставите свои значения вместо 10800000 if (millis () - hour > 10800000) { mySerial.println (tmp + stringT); mySerial.println (stringH); // отправляем сигнал, что 3 часа прошло } // ведем отсчет циклов, каждый десятый цикл отправляем данные на смартфон c--; Serial. print (c); Serial. println (" - цикл" ); Serial. println ("" ); delay (1000); noTone (BUZ); if (c > 10) { c = 10; } if (c < 1) { s1 = 0; s2 = 0; s3 = 0; mySerial.println (tmp + stringT); // отправляем значение температуры mySerial.println (pir + stringP); // отправляем наличие движения в доме mySerial.println (wtr + stringW); // отправляем данные с датчиков воды // СРАБОТАЛ ДАТЧИК ДВИЖЕНИЯ И КНОПКА ВЫКЛЮЧЕНА - ВКЛЮЧАЕМ СВЕТ if (pir == HIGH && knp == LOW ) { analogWrite (LED, 255); } // ДАТЧИК ДВИЖЕНИЯ ОТКЛЮЧИЛСЯ И КНОПКА ВЫКЛЮЧЕНА - ВЫКЛЮЧАЕМ СВЕТ if (pir == LOW && knp == LOW ) { motion = millis (); while (pir == LOW ) { tmp = dht.readTemperature (); pir = digitalRead(PIR); knp = digitalRead(KNP); wtr = analogRead(WTR); c--; Serial. print (c); Serial. println (" - цикл" ); Serial. println ("" ); delay (1000); noTone (BUZ); if (c > 10) { c = 10; } if (c < 1) { s1 = 0; s2 = 0; s3 = 0; mySerial.println (tmp + stringT); // отправляем значение температуры mySerial.println (pir + stringP); // отправляем наличие движения в доме mySerial.println (wtr + stringW); // отправляем данные с датчиков воды // выводим на монитор порта номер все данные с датчиков Serial. print ("TMP = " ); Serial. println (tmp); Serial. print ("PIR = " ); Serial. println (pir); Serial. print ("KNP = " ); Serial. println (knp); Serial. print ("WTR = " ); Serial. println (wtr); Serial. println ("" ); } // ИНТЕРВАЛ ВЫКЛЮЧЕНИЯ СВЕТА В МИЛЛИСЕКУНДАХ if (millis() - motion > 5000) { analogWrite (LED, 0); break ; } if (pir == HIGH ) { analogWrite (LED, 255); break ; } } } // СРАБОТАЛ ДАТЧИК ДВИЖЕНИЯ И КНОПКА ВКЛЮЧЕНА - ЗАПУСКАЕМ ТАЙМЕР if (pir == HIGH && knp == HIGH ) { motion = millis (); delay (1000); analogWrite (LED, 255); Serial. println ("СРАБОТАЛ ДАТЧИК" ); Serial. println ("" ); delay (1000); while (knp == HIGH) { tmp = dht.readTemperature (); pir = digitalRead(PIR); knp = digitalRead(KNP); wtr = analogRead(WTR); c--; Serial. print (c); Serial. println (" - цикл" ); Serial. println ("" ); delay (1000); noTone (BUZ); if (c > 10) { c = 10; } if (c < 1) { s1 = 0; s2 = 0; s3 = 0; mySerial.println (tmp + stringT); // отправляем значение температуры mySerial.println (pir + stringP); // отправляем наличие движения в доме mySerial.println (wtr + stringW); // отправляем данные с датчиков воды // выводим на монитор порта номер все данные с датчиков Serial. print ("TMP = " ); Serial. println (tmp); Serial. print ("PIR = " ); Serial. println (pir); Serial. print ("KNP = " ); Serial. println (knp); Serial. print ("WTR = " ); Serial. println (wtr); Serial. println ("" ); } // ЕСЛИ ДАТЧИК ДВИЖЕНИЯ ОТКЛЮЧИЛИ - ОТПРАВКА СООБЩЕНИЯ НА БЛЮТУЗ if (knp == LOW ) { Serial. println ("СИГНАЛИЗАЦИЯ ОТКЛЮЧЕНА" ); Serial. println ("" ); delay (1000); } // ЕСЛИ ПРОШЛО БОЛЕЕ 10 СЕКУНД - ОТПРАВКА СООБЩЕНИЯ НА БЛЮТУЗ if (millis () - motion > 10000 && s1! = 1) { m = 1; goto message1; } delay (1000); } } // ЕСЛИ ПРОИЗОШЛА УТЕЧКА ВОДЫ - ОТПРАВКА СООБЩЕНИЯ НА БЛЮТУЗ if (wtr > 500 && s2! = 2) { m = 2; goto message2; } if (wtr > 500) { tone (BUZ, 400); } if (wtr <= 500) { noTone (BUZ); } // ЕСЛИ УПАЛА ТЕМПЕРАТУРА - ОТПРАВКА СООБЩЕНИЯ НА БЛЮТУЗ if (tmp < 20 && s3! = 3) { m = 3; goto message3; } if (tmp < 20) { tone (BUZ, 200); } if (tmp >= 20) { noTone (BUZ); } message1: while (m == 1) { Serial. println ("СИГНАЛ ТРЕВОГИ ОТПРАВЛЕН НА БЛЮТУЗ" // отправляем значение температуры mySerial.println (1 + stringP); // отправляем наличие движения в доме mySerial.println (wtr + stringW); // отправляем данные с датчиков воды s1 = 1; m = 0; break ; } message2: while (m == 2) { Serial. println ("СИГНАЛ УТЕЧКИ ВОДЫ ОТПРАВЛЕН НА БЛЮТУЗ" ); Serial. println ("" ); delay (1000); mySerial.println (tmp + stringT); // отправляем значение температуры mySerial.println (pir + stringP); // отправляем наличие движения в доме mySerial.println (500 + stringW); // отправляем данные с датчиков воды s2 = 2; m = 0; break ; } message3: while (m == 3) { Serial. println ("СИГНАЛ ТЕМПЕРАТУРЫ ОТПРАВЛЕН НА БЛЮТУЗ" ); Serial. println ("" ); delay (1000); mySerial.println (20 + stringT); // отправляем значение температуры mySerial.println (pir + stringP); // отправляем наличие движения в доме mySerial.println (wtr + stringW); // отправляем данные с датчиков воды s3 = 3; m = 0; break ; } }

Пояснения к коду:

На первый взгляд схема может показаться сложной, однако это не так. Сигнализацию можно собрать на любой плате, в том числе и Arduino Uno. Вместо светодиодов можно можно использовать LED ленту, но при этом питание для платы нужно будет уже 12 Вольт, и подключать LED ленту не к 5V, а к пину Vin Arduino. Со светодиодами можно использовать для питания схемы обычную зарядку от телефона на 5 Вольт.

Установка приложения на смартфон для сигнализации

Чтобы установить приложение закачайте файл home_twit.apk на свой телефон через USB шнур, найдите его в памяти телефона и нажмите «Установить». Этот телефон должен быть всегда в зоне Bluethoth сигнала Ардуино. После установки откройте приложение и нажмите кнопку «Настроить». Здесь потребуется указать минимальное и максимальное значение температуры, при которой будет отправляться сообщение.

А сейчас самое сложное — настройка аккаунтов в Twitter. Укажите в настройках логин пользователя в Твиттере, кому вы будете отправлять сообщение. Также требуется указать логин,API keyиAPI secret keyот лица которого будут поступать сообщения. Последние нововведения обусловлены борьбой со спамом и сбором информации о пользователях в соцсети. Как получить API key и API secret — читайте в этом обзоре.

На телефоне, который будет всегда при вас и будет получать сообщения потребуется установить официальное приложение Twitter с PlayMarket и войти в него под нужным логином. В итоге приложение signalizaciya.apk с телефона, находящегося в доме, будет собирать данные с датчиков Ардуино и отправлять их личным сообщением через Твиттер пользователю, под чьим логином вы установили приложение Twitter.

Если у вас возникли проблемы с настройками сигнализации на Ардуино — пишите свои вопросы в комментариях к этому обзору.

Доброе время суток 🙂 Сегодня поговорим о сигнализации. На рынке услуг полно фирм, организацией, которые занимаются установкой и обслуживанием охранных систем. Эти фирмы предлагают покупателю широкий выбор сигнализацией. Однако их стоимость далеко не копеечная. Но что же делать человеку, у которого не так уж и много личных средств, что можно потратить на охранную сигнализацию? Думаю, вывод напрашивается сам собой –сделатьсигнализациюсвоимируками. В этой статье приведён пример того, как можно сделать свою собственную кодовую охранную систему используя плату Arduino uno и несколько магнитных датчиков.

Систему можно дезактивировать вводом пароля с клавиатуры и нажатием кнопки ‘*‘. Если хотите изменить текущий пароль, можете сделать это нажав на клавишу ‘B‘, а если хотите пропустить или прервать операцию, можете сделать это нажав на клавишу‘#’.В системе есть зуммер для воспроизведения различных звуков при выполнении той либо иной операции.

Активируется система нажатием кнопки ‘A’. Система даёт 10 секунд на то, чтобы покинуть помещение. После прошествии 10 секунд сигнализация будет активирована. Количество магнитных датчиков будет зависит от вашего собственного желания. В проекте задействованы 3 датчика (для двух окон и двери). Когда окно открывается система активируется, и включается сигнал тревоги идущий с зуммера. Систему можно дезактивировать путем набора пароля. Когда открывается дверь, сигнализация даёт вошедшему 20 секунд для ввода пароля. Система использует ультразвуковой датчик, что может обнаруживать движение.

Видео работы устройства

Поделкаизготовлена в ознакомительных/обучающих целях. Если хотите использовать её у себя дома, будет необходимо её доработать. Заключить управляющий блок в металлический корпус и обезопасить линию питания от возможного повреждения.

Давайте начинать!

  • плата Arduino uno;
  • высококонтрастный LCD дисплей 16×2;
  • клавиатура 4×4;
  • 10~20кОм потенциометр;
  • 3 магнитных датчика (они же герконы);
  • 3 2-х пиновых винтовых клеммы;
  • HC-SR04 ультразвуковой датчик;

Если вы хотите собрать систему без использования Arduino, вам также потребуется следующее:

  • DIP разъём для atmega328 + микроконтроллер atmega328;
  • 16MГц кварцевый резонатор;
  • 2 шт. 22pF керамических, 2 шт. 0.22uF электролитических конденсатора;
  • 1 шт. 10кОм резистор;
  • гнездо под питание (DC power jack);
  • макетная плата;
  • 5В блок питания;

И одна коробка, чтобы всё это упаковать!

Инструменты:

  • Что-то, чем можно разрезать пластиковую коробку;
  • Термоклеевой пистолет;
  • Дрель/шуруповерт.

Схема соединения довольно простая.

Небольшое уточнение:

Высококонтрастный LCD:

  • Pin1 — Vdd к GND;
  • Pin2 — Vss к 5В;
  • Pin3 — Vo (к центральному выводу потенциометра);
  • Pin4 — RS к 8 выводу Arduino;
  • Pin5 — RW к GND;
  • Pin6 — EN к 7 выводу Arduino;
  • Pin11 — D4 к 6 выводу Arduino;
  • Pin12 — D5 к 5 выводу Arduino;
  • Pin13 — D6 к 4 выводу Arduino;
  • Pin14 — D7 к 3 выводу Arduino;
  • Pin15 — Vee (к правому или левому выводу потенциометра).

Клавиатура 4×4:

От левого к правому:

  • Pin1 к A5 выводу Arduino;
  • Pin2 к A4 выводу Arduino;
  • Pin3 к A3 выводу Arduino;
  • Pin4 к A2 выводу Arduino;
  • Pin5 к 13 выводу Arduino;
  • Pin6 к 12 выводу Arduino;
  • Pin7 к 11 выводу Arduino;
  • Pin8 к 10 выводу Arduino.

В шаге представлен код, что используется встроенным!

Скачайте плагин codebender. Нажмите на кнопку «Run» в Arduino и прошейте свою плату этой программой. На этом всё. Вы только что запрограммировали Arduino! Если хотите внести изменения в код, нажмите кнопку»Edit».

Примечание: Если вы не будете использовать Codebender IDE для программирования платы Arduino, вам будет нужно установить дополнительные библиотеки в Arduino IDE.

После того, как удачно собрали и протестировали новый проект на базе Arduino uno, можете начать изготовление собственной платы.

Несколько советов, для более успешного завершения затеянного:

  • 10кОм резистор должен монтироваться между 1 (reset) и 7 (Vcc) выводами микроконтроллера Atmega328.
  • 16MГц кварцевый резонатор должен подсоединятся к выводам 9 и 10, отмеченными, как XTAL1 и XTAL2
  • Соедините каждый вывод резонатора с 22pF конденсаторами. Свободные выводы конденсаторов заведите на 8 вывод (GND) микроконтроллера.
  • Не забудьте соединить вторую линию питания ATmega328 с блоком питания, выводы 20-Vcc и 22-GND.
  • Дополнительную информацию по выводам микроконтроллера можете найти на втором изображении.
  • Если планируете использовать блок питания с напряжением выше 6В, необходимо воспользоваться линейный регулятором LM7805 и двумя 0.22uF электролитическими конденсаторами, которые следует смонтировать на входе и выходе регулятора. Это важно! Не подавайте больше, чем 6В на плату!!! В противном случае вы спалите свой микроконтроллер Atmega и LCD дисплей.

Являются специальными аппаратными платформами, на основе которых можно создавать различные электронные устройства, включая и. Устройства этого типа отличаются простой конструкцией и возможностью программирования алгоритмов их работы. Благодаря этому, созданная с помощью Arduino GSM сигнализация,может максимально настраиваться под объект, который она будет охранять.

Что собой представляет модуль Arduino?

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

Процессор Arduino позволяет загружать в себя программу, написанную пользователем самостоятельно. Создавая собственный уникальный алгоритм, можно обеспечивать оптимальные режимы работы охранных сигнализаций для разных объектов и для разных условий использования и решаемых задач.

Сложно ли работать с Arduino?

Модули Arduino отличаются высокой популярностью среди многих пользователей. Это стало возможным благодаря своей простоте и доступности.

Программы для управления модулями пишутся с использованием обычного C++ и дополнений в виде простых функций управления процессами ввода/вывода на контактах модуля. Кроме этого, для программирования может применяться и бесплатная программная среда Arduino IDE, функционирующая под Windows, Linux или Mac OS.

С модулями Arduino существенно упрощена процедура сборки устройств. GSM сигнализация на Ардуино может создаваться без потребности в паяльнике – сборка происходит с использованием макетной доски, перемычек и проводов.

Как создать сигнализацию с помощью Arduino?

К основным требованиям, которым должна отвечать созданная gsm сигнализация на Ардуино своими руками относятся:

  • оповещать владельца объекта о взломе или проникновении;
  • поддержке внешних систем типа звуковая сирена, сигнальные фонари;
  • управление сигнализацией через СМС или звонок;
  • автономная работа без внешнего питания.

Для создания сигнализации потребуется:

  • модуль Arduino;
  • набор функциональных датчиков;
  • или модем;
  • источник автономного питания;
  • внешние исполнительные устройства.

Отличительной особенностью модулей Ардуино является использование специальных плат расширения. С их помощью осуществляется подключение всех дополнительных устройств к Arduino, которые требуются для сборки конфигурации охранной системы. Такие платы устанавливаются поверх модуля Ардуино в виде «бутерброда», а уже к самим платам подключаются соответствующие вспомогательные устройства.

Как это работает?

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

Чтобы обеспечить возможность оправки предупредительных сигналов владельцу дома или квартиры, которые охраняются, к модулю Arduino, через плату расширения, подключается специальный модуль GSM. В него устанавливается SIM-карта одного из провайдеров сотовой связи.

При отсутствии специального GSM-адаптера его роль может выполнять и обычный мобильный телефон. Кроме отправки СМС-сообщений с предупреждением о тревоге и дозвона, наличие сотовой связи позволит управлять GSM сигнализацией на Ардуино дистанционно, а также контролировать состояние объекта, отправляя специальные запросы.

«Обратите внимание!

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

В таком случае, когда срабатывает датчик, обработанный процессором сигнал, передается через модем на специальный портал или сайт. А уже из сайта осуществляется автоматическое генерирование предупредительной СМС или рассылки на привязанный e-mail.

Выводы

Использование модулей Arduino позволит пользователям самостоятельно проектировать GSM-сигнализации, которые могут работать с разно функциональными датчиками и управлять внешними устройствами. Благодаря возможности применения различных датчиков функции сигнализации можно существенно расширить и создать комплекс, который будет следить не только за безопасностью объекта, а и за его состоянием. Например, можно будет контролировать температуру на объекте, фиксировать утечку воды и газа, перекрывать их подачу в случае аварии и многое другое.

Для защиты своего дома от непрошенных гостей все больше людей устанавливают сигнализации. Они позволяют своевременно предупредить о проникновении в помещение. Сегодня существуют различные типы сигнализаций, но в последнее время начался рост популярности GSM-сигнализаций, поскольку они позволяют получать информацию о проникновении на любом расстоянии от объекта, главное чтобы у хозяина в это время был с собой телефон, и этот телефон был в сети. К сожалению, эти системы пока стоят не слишком дешево, чтобы отдавать предпочтение исключительно им. Но в наше время сделать простую GSM-сигнализацию можно самостоятельно. И поможет в этом деле популярная плата Arduino.

Данный проект представляет собой систему безопасности (сигнализации) для оповещения о проникновении злоумышленников в дом. Система использует технологию GSM.

К микроконтроллерной плате этой системы безопасности подключается модуль обнаружения проникновения, который может быть основан, например, на ИК-датчике или ультразвуковом датчике приближения. При получении сигнала от такого модуля на телефон пользователя отправляется SMS-сообщение о проникновении в его жилище.

На рисунке ниже представлена блок-схема системы безопасности.

Основными элементами системы являются микроконтроллерная плата (например, Arduino Uno) и модуль GSM/GPRS SIM900A. Вся система может быть запитана от одного источника питания 12В/2А.

На приведенном ниже изображении показана принципиальная схема домашней системы безопасности с GSM на основе Arduino.

Работа системы очень проста и не требует особых пояснений. При подачи напряжения питания система переходит в режим ожидания. Однако, когда J2 замыкается, сообщение предупреждения автоматически передается на заранее заданный номер мобильного телефона. К входному разъему J2 можно подключить любой датчик обнаружения. Нужно заметить, что низкий уровень на выводе 1 разъема J2 является активным и включает систему безопасности.

Кроме того, в систему добавлена возможность совершения вызова по нажатию кнопки S2. С помощью кнопки S3 можно осуществить сброс этого вызова.

Ниже приведен код для Arduino.

//Соединить вывод Tx с выводом D3 GPS-модуля //Соединить вывод Rx с выводом D4 GPS-модуля //сигнал отправки SMS соединить с выводом D7 (активный уровень низкий) //Сигнал вызова CALL соединить с выводом D8 (активный уровень низкий) //Сигнал сброса вызова END соединить с выводом D9 (активный уровень низкий) #includeNewSoftSerial mySerial(3,4); // выводы RX и TX настроить на связь с модулем GSM #define msg_key 7 #define call_key 8 #define end_key 9 String number ="0000000000"; // Сюда вместо нулей нужно вписать 10-значный мобильный номер void setup() { Serial.begin(9600); mySerial.begin(9600); pinMode(msg_key,INPUT); pinMode(call_key,INPUT); pinMode(end_key,INPUT); digitalWrite(msg_key,HIGH); digitalWrite(call_key,HIGH); digitalWrite(end_key,HIGH); } void loop() { //отправлять sms каждый раз, когда срабатывает msg_key if (digitalRead(msg_key)==LOW) // Проверка, нажата ли кнопка отправки sms { mySerial.println("AT+CMGF=1"); // Устанавливаем режим в качестве тектового режима delay(150); mySerial.println("AT+CMGS=\"+00"+number+"\""); // Укажите номер адресата в международном формате, заменив нули delay(150); mySerial.print("Warning! Intruder Alert!"); // Введите сообщение delay(150); mySerial.write((byte)0x1A); // Символ конца сообщения 0x1A: эквивалент Ctrl+z delay(50); mySerial.println(); } //Совершить вызов, когда сработает call_key else if (digitalRead(call_key)==LOW) // Проверка, нажат ли уже call_key { mySerial.println("ATD+91"+number+";"); //Определяем номер для вызова while(digitalRead(call_key)==LOW); delay(50); } //Сброс вызова else if (digitalRead(end_key)==LOW) // Проверка, нажата ли уже кнопка сброса вызова { mySerial.println("ATH"); while(digitalRead(end_key)==LOW); delay(50); } }

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

Здравствуй, дорогой читатель! Сегодняшняя статья посвящена созданию простой домашней системы безопасности, при помощи доступных компонентов. Это маленькое и дешёвое устройство поможет тебе защитить ваше жилище от проникновения при помощи Arduino, датчика движения, дисплея и динамика. Питаться устройство сможет от батарейки или USB-порта компьютера.

Итак, начнём!

Как оно работает?

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

Для более широкого радиуса действия используют линзы Френеля, которые собирают ИК-излучение с разных направлений и концентрируют его на самом датчике.

На рисунке видно, как линза искажает лучи, которые падают на неё.

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

Когда происходит изменение уровня ИК излучения в диапазоне действия, это будет обрабатываться на Arduino после чего на LCD дисплее будет выводится статус, светодиод будет мигать, а спикер пищать.

Что нам потребуется?

  1. (или любая другая плата ).
  2. (16 символов по две строки)
  3. Один разъём для подключения кроны к Arduino
  4. (хотя можно использовать и обычный динамик)
  5. USB-кабель - только для программирования (прим. пер.: с нашими Arduino он всегда идёт в комплекте!)
  6. Компьютер (опять же только для того, чтобы написать и загрузить программу).

Кстати, если не хочется покупать все эти детали по отдельности - рекомендуем обратить внимание на наши. К примеру, всё необходимое и даже больше есть в нашем стартовом наборе.

Подключаем!

Подключение датчика движения очень простое:

  1. Пин Vcc подключаем к 5V Ардуино.
  2. Пин Gnd подключаем к GND Ардуино.
  3. Пин OUT подключаем к цифровому пину №7 от Arduino

Теперь присоединим светодиод и спикер. Тут всё так же просто:

  1. Короткую ножку (минус) светодиода подключаем к земле
  2. Длинную ножку (плюс) светодиода подключаем к выходу №13 Arduino
  3. Красный провод спикера к выходу №10
  4. Чёрный провод – к земле

И теперь самое сложное – подключение LCD дисплея 1602 к Arduino. Дисплей у нас без I2C, поэтому потребуется много выходов Arduino, но результат будет того стоить. Схема представлена ниже:

Нам нужна только часть схемы (у нас не будет регулировки контраста потенциометром). Поэтому требуется сделать лишь следующие:

Теперь ты знаешь, как подключить дисплей 1602 к Arduino UNO R3 (ровно как и к любой версии Arduino от Mini до Mega).

Программируем

Пришло время перейти к программированию. Ниже представлен код, который надо лишь залить и, если вы собрали всё верно – устройство готово!

#includeint ledPin = 13; // Пин светодиода int inputPin = 7; // Пин, к которому подключен Out датчика движения int pirState = LOW; // Текущее состояние (в начале ничего не обнаружено) int val = 0; // Переменная для чтения состояния цифровых входов int pinSpeaker = 10; // Пин, к которому подключен динамик. Требуется использовать пин с ШИМ (PWM) LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Инициалиация LCD дисплея void setup() { // Определение направления передачи данных на цифровых пинах pinMode(ledPin, OUTPUT); pinMode(inputPin, INPUT); pinMode(pinSpeaker, OUTPUT); // Запуск вывода отладочной информации через последовательный порт Serial.begin(9600); // Запуск вывода на LCD дисплей lcd.begin(16, 2); // Устанавливаем индекс на дисплеи, с которого начнём вывод // (2 символ, 0 строки) lcd.setCursor(2, 0); // Вывод на LCD дисплей lcd.print("P.I.R Motion"); // Снова перемещаем lcd.setCursor(5, 1); // Выводим lcd.print("Sensor"); // Пауза, чтобы успели прочитать, что вывели delay(5000); // Очистка lcd.clear(); // Аналогично lcd.setCursor(0, 0); lcd.print("Processing Data."); delay(3000); lcd.clear(); lcd.setCursor(3, 0); lcd.print("Waiting For"); lcd.setCursor(3, 1); lcd.print("Motion...."); } void loop() { // Считываем показание датчика val = digitalRead(inputPin); if (val == HIGH) { // Если есть движение, то зажигаем светодиод и включаем сирену digitalWrite(ledPin, HIGH); playTone(300, 300); delay(150); // Если движения до данного момента не было, то выводим сообщение // что оно обнаружено // Код ниже нужен для того, чтобы писать лишь смену состояния, а не каждый раз выводить значение if (pirState == LOW) { Serial.println("Motion detected!"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Motion Detected!"); pirState = HIGH; } } else { // Если движене закончилось digitalWrite(ledPin, LOW); playTone(0, 0); delay(300); if (pirState == HIGH){ // Сообщаем, что движение было, но уже закончилось Serial.println("Motion ended!"); lcd.clear(); lcd.setCursor(3, 0); lcd.print("Waiting For"); lcd.setCursor(3, 1); lcd.print("Motion...."); pirState = LOW; } } } // Функция воспроизведения звука. Duration (длительность)- в миллисекундах, Freq (частота) - в Гц void playTone(long duration, int freq) { duration *= 1000; int period = (1.0 / freq) * 100000; long elapsed_time = 0; while (elapsed_time < duration) { digitalWrite(pinSpeaker,HIGH); delayMicroseconds(period / 2); digitalWrite(pinSpeaker, LOW); delayMicroseconds(period / 2); elapsed_time += (period); } }

Добавить комментарий