Здрастуй, дорогий читачу! Сьогоднішня стаття присвячена створенню простої домашньої системи безпеки, за допомогою доступних компонентів. Це маленьке і недороге пристрій допоможе тобі захистити ваше житло від проникнення за допомогою Arduino, датчика руху, дисплея і динаміка. Харчуватися пристрій зможе від батарейки або USB-порту комп'ютера.
Тож почнемо!
Як воно працює?
Тіла теплокровних випромінюють в ІК-діапазоні, який невидимий для людських очей, однак може бути виявлений за допомогою датчиків. Такі датчики робляться з матеріалу, який під впливом тепла може спонтанно поляризуватися, завдяки чому це дозволяє визначити появи джерел тепла в радіусі дії датчика.
Для більш широкого радіусу дії використовують лінзи Френеля, які збирають ІК-випромінювання з різних напрямків і концентрують його на самому датчику.
На малюнку видно, як лінза спотворює промені, які падають на неї.
Варто відзначити, що роботи без особливо гріються частин і холоднокровні випромінюють в ІК-діапазоні дуже слабо, тому датчик може не спрацювати в разі, якщо тебе вирішать обнести співробітники Boston Dynamics або рептилоїди.
Коли відбувається зміна рівня ІК випромінювання в діапазоні дії, це буде оброблятися на Arduino після чого на LCD дисплеї буде виводиться статус, світлодіод буде блимати, а спікер пищати.
Що нам буде потрібно?
- Arduino UNO (Або будь-яка інша плата Arduino-сумісна плата ).
- Датчик руху
- Дисплей LCD 1602 (16 символів по два рядки)
- Одна батарейка Крона
- Один роз'єм для підключення крони до Arduino
- один світлодіод
- один спікер (Хоча можна використовувати і звичайний динамік)
- Макетна плата
- Провід тато-тато
- USB-кабель - тільки для програмування (прим. Пер .: з нашими Arduino він завжди йде в комплекті!)
- Комп'ютер (знову ж тільки для того, щоб написати і завантажити програму).
До речі, якщо не хочеться купувати всі ці деталі окремо - рекомендуємо звернути увагу на наші стартові набори . Наприклад, все необхідне і навіть більше є в нашому стартовому наборі Кавасакі-2 .
Підключаємо!
Підключення датчика руху дуже просте:
- Пін Vcc підключаємо до 5V Ардуіно.
- Пін Gnd підключаємо до GND Ардуіно.
- Пін OUT підключаємо до цифрового піну №7 від Arduino
Тепер приєднаємо світлодіод і спікер. Тут все так само просто:
- Коротку ніжку (мінус) світлодіода підключаємо до землі
- Довгу ніжку (плюс) світлодіода підключаємо до виходу №13 Arduino
- Червоний дріт спікера до виходу №10
- Чорний провід - до землі
І тепер найскладніше - підключення LCD дисплея 1602 до Arduino. Дисплей у нас без I2C, тому буде потрібно багато виходів Arduino, але результат буде того вартий. Схема представлена нижче:
Нам потрібна тільки частина схеми (у нас не буде регулювання контрасту потенціометром). Тому потрібно зробити лише такі:
пін дисплея
пін Arduino
RS
12
Enable
11
D4
5
D5
4
D6
3
D7
2
Тепер ти знаєш, як підключити дисплей 1602 до Arduino UNO R3 (рівно як і до будь-якої версії Arduino від Mini до Mega).
програмуємо
Прийшов час перейти до програмування. Нижче представлений код, який треба лише залити і, якщо ви зібрали все вірно - пристрій готовий!
#include <LiquidCrystal.h> int 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 ( "PIR 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); }}
висновок
Підсумкова схема представлена на малюнку:
На ній Arduino вже запитана від батарейки 9V, а не від USB порту.
джерела
- http://www.instructables.com/id/Home-Security-Alarm-or-a-Motion-Detector-Using-Ard/?ALLSTEPS
Що нам буде потрібно?
Як воно працює?
Що нам буде потрібно?
Com/id/Home-Security-Alarm-or-a-Motion-Detector-Using-Ard/?