В данной статье мы рассмотрим создание интеллектуальной системы безопасности, которая при обнаружении нарушителя будет отправлять Email на заданный адрес и формировать голосовое сообщение. В качестве голосового сообщения вы можете использовать любую вашу аудио запись. Система безопасности в любое время может быть активирована/деактивирована дистанционно через сеть Интернет.
Система безопасности будет построена на основе модуля ESP8266, PIR датчика и голосового модуля ISD1820. Также на нашем сайте вы можете посмотреть все проекты систем безопасности, которые мы рассматривали ранее.
Для лучшего понимания данного проекта (если вы начинающий в этих вопросах) вам целесообразно изучить основы работы с модулем ESP8266 и его программирование с помощью Arduino IDE.
Необходимые компоненты
- Модуль ESP8266 (купить на AliExpress).
- PIR датчик (купить на AliExpress).
- Голосовой модуль ISD1820 (ISD1820 Voice Module) (купить на AliExpress).
- Регуляторы напряжения LM317 (купить на AliExpress), LM7805 (купить на AliExpress).
- Транзистор BC547 – 2 шт. (купить на AliExpress).
- Резистор 1 кОм, 200 Ом и 330 Ом (купить на AliExpress).
- Конденсаторы 10 мкФ (купить на AliExpress) и 0,1 мкФ (купить на AliExpress).
- Адаптер на 12V или батарейка на 9V.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Модуль ESP8266
Это весьма известный в настоящее время WiFi модуль с широким набором функциональных возможностей. Данный модуль находит применение в различных проектах интернета вещей (Internet of Things, IoT). Внешний вид и распиновка данного модуля представлены на следующих рисунках.
PIR датчик
PIR датчик (Passive Infrared sensor) – это пассивный инфракрасный датчик, отличающийся невысокой стоимостью и способный обнаруживать присутствие человека или животных. Основными компонентами данного датчика являются пироэлектрический кристалл, который может обнаруживать тепловые сигнатуры живого организма (человек/животное), и линзы Френеля (Fresnel lenses), расширяющие диапазон действия датчика. Также в составе PIR датчика есть элементы, позволяющие производить его регулировку.
Два потенциометра в составе датчика (оранжевого цвета) используются для управления чувствительностью и временем срабатывания датчика. Выходным контактом датчика является контакт Dout, расположенный между контактами Vcc и Gnd. Модуль работает от 3.3V, но может быть запитан и от 5V. В левом верхнем углу датчика расположен переключатель (джампер), с помощью которого можно переключаться между двумя режимами работы датчика - “H” и “I”.
В режиме “H” на выходном контакте Dout формируется напряжение высокого уровня (high, 3.3V) когда датчик обнаруживает присутствие человека (животного). Через некоторое время после этого (это время регулируется с помощью потенциометра) на контакте Dout уровень выходного напряжения падает до low. В данном режиме на контакте Dout будет уровень high независимо от того, присутствует ли еще человек в зоне действия датчика или он покинул эту зону. В данном проекте мы будем использовать режим “H” датчика.
В режиме “I” на выходном контакте Dout датчика появится уровень high (3.3V) когда человек будет обнаружен и контакт Dout будет оставаться в состоянии high до тех пор, пока человек будет находиться в зоне действия датчика. Когда человек покинет эту зону, то через некоторое время (устанавливается потенциометром) на контакте Dout сформируется уровень low.
На нашем сайте вы можете посмотреть все проекты с использованием PIR датчика.
Примечание: положение потенциометров и контактов PIR датчика может различаться в зависимости от производителя датчика.
Голосовой модуль ISD1820
Данный модуль способен записывать аудио сигнал в течение 10 секунд и затем воспроизводить его когда будет необходимо. Модуль содержит в своем составе микрофон и динамик (8 Ом, 0,5 Вт). Его внешний вид и распиновка показаны на следующем рисунке.
Модуль работает от напряжения +5V и содержит в своем составе 3 кнопки: Rec, PlayE и PlayL. Вы можете записать свой голос нажав кнопку Rec и затем воспроизвести его нажав кнопку PlayE. При нажатии кнопки PlayL модуль будет воспроизводить ваш голос так долго, сколько вы держите нажатой кнопку. Для подключения модуля к микроконтроллерам используются контакты на его левой стороне. Эти контакты "толерантны" к уровням напряжения 3V-5V и поэтому могут непосредственно подключаться к Arduino/ESP8266. В нашем проекте мы будем управлять контактом PLAYE модуля ISD1820 используя контакт GPIO 0 нашего модуля ESP8266. Таким образом мы будем воспроизводить записанный голос при обнаружении нарушителя.
Схема проекта
Схема системы безопасности на ESP8266 с голосовыми сообщениями и оповещениями по Email представлена на следующем рисунке.
Схема содержит два регулятора напряжения. Один регулятор на 3.3V на основе микросхемы LM317, а второй – на 5V на основе микросхемы 7805. Напряжение 3.3V на выходе микросхемы LM317 формируется с помощью резисторов 220 и 330 Ом. Оба регулятора запитываются от адаптера с напряжением 12V. Но энергопотребление схемы нашего проекта очень мало, поэтому ее можно запитать и от батарейки 9V.
PIR датчик и голосовой модуль включаются при помощи подачи на контакт GPIO 2 модуля ESP8266 уровня high. Этот контакт через токоограничивающий резистор 1 кОм управляет работой транзистора BC547 и завершает цепь питания для обоих модулей. Контакт GPIO_0 модуля ESP8266 используется как входной контакт. Он подключен к контакту Dout PIR датчика через транзистор BC547. Когда на контакте Dout PIR датчика будет уровень high мы будем с помощью программы для модуля ESP8266 отправлять E-mail по заданному адресу.
Токи на выходных контактах Dout, GPIO_2 и GPIO2 очень малы, поэтому мы использовали транзисторы для управления ими. Также необходимо учитывать такую особенность модуля ESP8266, что его контакты общего назначения (GPIO) не должны быть нагружены во время подачи на него питания иначе модуль зациклится в бесконечном цикле сброса. Чтобы предотвратить это мы в схеме использовали два переключателя, контакты которых необходимо разъединять во время подачи на модуль питания.
Вы можете использовать перфорированную или макетную плату для сборки схемы проекта. Автор проекта (ссылка на оригинал приведена в конце статьи) использовал перфорированную плату с соединительными колодками для подключения модулей, таким образом, для подключения модулей он избежал использования пайки. Получившаяся у него конструкция проекта показана на следующем рисунке.
Создание API для передачи E-mail с помощью сервиса IFTTT
Когда аппаратная часть проекта будет готова можно будет приступать к созданию API (Application Program Interface, программный интерфейс приложения), с помощью которого можно будет передавать E-mail на заданный адрес электронной почты. Это можно сделать с помощью такого известного сервиса как IFTTT.com. Более подробно про работу с данным сервисом вы можете посмотреть в видео, представленном в конце статьи.
Для работы с сервисом IFTTT выполните следующую последовательность шагов.
1. Зарегистрируйте себе аккаунт на сайте IFTTT.com и войдите в него.
2. Перейдите в нем на вкладку “Maker Web hooks” и нажмите на connect (соединиться).
3. Выполните поиск “Gmail”, нажмите на connect и выполните предлагаемую сервисом последовательность шагов чтобы предоставить доступ.
4. Создайте Applet (апплет, прикладная программа) выбрав пункт меню My Applet-> New Applet.
5. Далее вы можете использовать функцию “This” для создания веб-хуков и функцию “that” для работы с сервисами Gmail.
6. Нажмите на “This”, выполните поиск и выберите Web maker hooks (веб-хуки). Сервис запросит имя события (event name), мы назвали наше событие “123”, вы можете использовать любое другое имя.
7. Нажмите на “That”, выполните поиск и выберите Gmail, после чего введите тему и содержание письма.
8. После того как все необходимые настройки будут сделаны вы должны будете увидеть примерно следующую картину.
9. Теперь снова выполните поиск и войдите в Web Maker Hooks и там нажмите на “Documentation”. Там под именем события (event name) введите имя события, которое мы использовали в нашем Applet (в нашем случае это “123”). Также скопируйте URL – он будет нужен нам при написании программы. URL должен выглядеть примерно следующим образом:
10. Вы можете нажать на кнопку “Test it” чтобы проверить что ваша ссылка работает корректно – в этом случае вы должны получить тестовое E-mail на указанный вами адрес.
Объяснение программы для модуля ESP8266
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Программа для нашего проекта достаточно проста – нам необходимо чтобы наш модуль ESP8266 работал в качестве точки доступа (AP) и станции (STA). Затем создадим веб-страницу используя HTML код. С помощью этой веб-страницы мы сможем включать/выключать нашу систему безопасности.
В программе сначала мы зададим SSID (идентификатор сети) и Password (пароль). Введите SSID и пароль для своего роутера.
1 2 3 |
const char* ssid = "BPAS home"; //Enter you Wifi SSID here const char* password = "cracksen"; //Enter your password here |
Если вы хотите определить IP адрес вашего ESP8266, вы можете запустить следующие строчки кода на выполнение и вы увидите этот IP адрес в окне монитора последовательной связи в Arduino IDE.
1 2 3 4 5 6 7 8 9 |
Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); //Serial monitor will give the IP addrss of your ESP module |
В следующих строчках кода мы будем формировать HTML код, с помощью которого и будет создаваться наша веб-страница. Вы можете изменить этот код чтобы кастомизировать эту веб-страницу по своему усмотрению.
1 2 3 4 5 6 7 |
//HTML code for webpage// mainPage += "<h1 align=\"center\">IOT based security System</h1><h2 align=\"center\">-CircuitDigest</h2><h1 align=\"center\"><p>Alarm Status: <a href=\"switch2On\"><button>ARM</button></a> <a href=\"switch2Off\"><button>DISARM</button> </a></p>"; feedback = "<h3 align=\"center\">Click on ARM to enable the security system</h3>"; //End of HTML code// |
Следующие строчки кода определяют включена (Armed) или отключена (Disarmed) наша система безопасности. Автор проекта изменил часть HTML кода, отвечающего за ответ пользователю (feedback part). Также он изменяет состояние контакта GPIO 2 модуля ESP8266 на HIGH/LOW в зависимости от нажатия кнопки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
server.on("/switch2On", [](){ feedback = "<h3 align=\"center\">Alarm is up and running </h3>"; //HTML code modification currentPage=mainPage+feedback; server.send(200, "text/html", currentPage); currentPage=""; digitalWrite(GPIO_2, HIGH); //Turn on PIR and Voice module power_module=true; delay(1000); }); server.on("/switch2Off", [](){ feedback = "<h3 align=\"center\">Alarm is down</h3>"; //HTML code modification currentPage=mainPage+feedback; server.send(200, "text/html", currentPage); currentPage=""; digitalWrite(GPIO_2, LOW); //Turn off PIR and Voice Module power_module=false; delay(1000); }); |
Чтобы программа для нашего проекта системы безопасности работала правильно необходимо изменить строку с URL. Вам необходимо скопировать строку адреса (после ”/trigger”), которую вы скопировали в сервисе IFTTT. Автор проекта привел пример этого URL со своим API ключом, но вам нужно использовать свой адрес, иначе программа у вас работать не будет.
1 |
String url = "/trigger/123/with/key/mDsoOV_EERS3xRfrh3_UQBhbcx0qlRHns-z2qXXXXX"; //Must change it to your API URL |
Тестирование работы проекта
Когда аппаратная часть проекта у вас будет готова, вы можете загрузить программу в модуль ESP8266 с помощью платы FTDI или используя плату Arduino в качестве FTDI программатора. Программу в модуль можно загружать с помощью среды Arduino IDE.
После загрузки программы в модуль откройте в Arduino IDE окно монитора последовательной связи (serial monitor) и в нем вы должны увидеть картинку, показанную на следующем рисунке. Если эта картинка не появляется, произведите сброс модуля ESP8266 и попробуйте снова.
Из информации в окне монитора последовательной связи запишите IP адрес, выданный вашему модулю ESP8266. Этот IP адрес вы затем можете использовать для открытия в браузере веб-страницы, с которой вы сможете включать/выключать (Arm/Disarm) систему безопасности.
После того как вы проверили эту часть нашего проекта, вы можете переместить модуль ESP8266 на конструкцию нашего проекта (у нас она на перфорированной плате), подать на нее питание и замкнуть переключатели как показано на видео в конце статьи.
После этого, используя IP адрес модуля ESP8266, вы можете заходить на формируемую им веб-страницу и включить нашу систему безопасности. После ее включения подождите 50-60 секунд пока PIR датчик произведет свою калибровку.
После этого ваш проект системы безопасности будет готов к работе и вы можете поместить его в любое место, где хотите отслеживать появление нарушителей. При появлении нарушителя в зоне действия PIR датчика будет произноситься голосовое сообщение и будет передаваться E-mail на указанный вами адрес с датой и временем, когда произошло нарушение. Пример этого E-mail показан на следующем рисунке.
Боле подробно работу всего проекта вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
/*Program for : IOT based Security system system with Voice warning * Program by :Aswinth Raj * Published on : circuitdigest.com * Dated:17-05-2017 */ #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <WiFiClientSecure.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> MDNSResponder mdns; boolean trigger_sms = false; boolean power_module = false; const char* ssid = "BPAS home"; //Enter you Wifi SSID here const char* password = "cracksen"; //Enter your password here ESP8266WebServer server(80); String mainPage = ""; //The default page String feedback = ""; //Gives staus of the switch String currentPage = ""; //Combines main and feedback page (объединяем главную и страницу ответа) int GPIO_0 = 0; //Pin defanition int GPIO_2 = 2; //Pin defanition void setup(void){ //HTML code for webpage// mainPage += "<h1 align=\"center\">IOT based security System</h1><h2 align=\"center\">-CircuitDigest</h2><h1 align=\"center\"><p>Alarm Status: <a href=\"switch2On\"><button>ARM</button></a> <a href=\"switch2Off\"><button>DISARM</button> </a></p>"; feedback = "<h3 align=\"center\">Click on ARM to enable the security system</h3>"; //End of HTML code// currentPage = mainPage+feedback; // preparing GPIOs pinMode(GPIO_0, INPUT); //feeded by PIR sensor (на него подается сигнал с PIR датчика) pinMode(GPIO_2, OUTPUT); //used to turn on PIR and Voice module (этот контакт используется для включения в работу PIR датчика и голосового модуля) digitalWrite(GPIO_2, LOW); delay(1000); Serial.begin(115200); WiFi.begin(ssid, password); Serial.println(""); // Wait for connection (ждем соединения) while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // config static IP Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); //Serial monitor will give the IP addrss of your ESP module (в окне монитора последовательной связи вы увидите IP адрес вашего модуля ESP) if (mdns.begin("esp8266", WiFi.localIP())) { Serial.println("MDNS responder started"); } server.on("/", [](){ currentPage = mainPage+feedback; server.send(200, "text/html", currentPage); currentPage = ""; }); server.on("/switch2On", [](){ feedback = "<h3 align=\"center\">Alarm is up and running </h3>"; //HTML code modification currentPage=mainPage+feedback; server.send(200, "text/html", currentPage); currentPage=""; digitalWrite(GPIO_2, HIGH); //Turn on PIR and Voice module power_module=true; delay(1000); }); server.on("/switch2Off", [](){ feedback = "<h3 align=\"center\">Alarm is down</h3>"; //HTML code modification currentPage=mainPage+feedback; server.send(200, "text/html", currentPage); currentPage=""; digitalWrite(GPIO_2, LOW); //Turn off PIT and Voice Module (выключаем PIR датчик и голосовой модуль) power_module=false; delay(1000); }); server.begin(); Serial.println("IOT security system is up and running"); } //Function to send an E-mail// void send_Email() { const char* host = "maker.ifttt.com"; //The host of API URL will be the same for all const int httpsPort = 443; WiFiClientSecure client; Serial.print("connecting to "); Serial.println(host); if (!client.connect(host, httpsPort)) { Serial.println("connection failed"); return; } String url = "/trigger/123/with/key/mDsoOV_EERS3xRfrh3_UQBhbcx0qlRHns-z2qXXXXX"; //Must change it to your API URL (вам необходимо изменить на свой API URL) Serial.print("requesting URL: "); Serial.println(url); client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: BuildFailureDetectorESP8266\r\n" + "Connection: close\r\n\r\n"); Serial.println("request sent"); while (client.connected()) { String line = client.readStringUntil('\n'); if (line == "\r") { Serial.println("headers received"); break; } } String line = client.readStringUntil('\n'); Serial.println("reply was:"); Serial.println("=========="); Serial.println(line); Serial.println("=========="); Serial.println("closing connection"); } //Function to send an E-mail void loop(void){ server.handleClient(); if (digitalRead(GPIO_0==HIGH) && power_module==true) trigger_sms=true; else trigger_sms=false; if (trigger_sms==true) { send_Email(); // если PIR датчик обнаружил человека передаем E-mail trigger_sms=false; delay(2000); } } |