GSM сигналізація з мізками з arduino. Домашня сигналізація або використання датчика руху та LCD монітора з 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).

Програмуємо

Настав час перейти до програмування. Нижче представлений код, який треба лише залити і, якщо ви зібрали все правильно - пристрій готовий!

#include 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("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.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); 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_< duration) { digitalWrite(pinSpeaker,HIGH); delayMicroseconds(period / 2); digitalWrite(pinSpeaker, LOW); delayMicroseconds(period / 2); elapsed_time += (period); } }

GSM сигналізація на Arduino

У цій статті ви дізнаєтеся як (купити) зробити самому GSM сигналізацію за допомогою GSM модуля та Arduino дуже дешево. Об'єктом охорони GSM сигналізаціїідеально підійде дача, будинок, гараж, квартира


Крок 1: Елементи
Для цього проекту вам знадобиться:


GSM Shield

Зумер
Сирена сигналізації 12V
12V джерело живлення

Клавіатура для Arduino
Корпус.

Крок 2: Підключення компонентів


Спочатку ви помістите GSM модуль на Arduino Uno, вам потрібно буде припаяти дроти GND та VCC разом з двома датчиками, зуммером та входом модуля реле. Після цього з'єднати ці припаяні дроти на відповідний роз'єм GSM шилду. Далі ви робитимете роз'єм введення / виведення сигналів з цих частин, і останнє, що потрібно буде - це підключити клавіатуру

Arduino Uno / GSM Клеми:

Висновок 0: не пов'язаний;
Висновок 1: не пов'язаний;
Висновок 2: незв'язаний (GSM буде використовувати цей штир);
Висновок 3: незв'язаний (GSM буде використовувати цей штир);
Висновок 4: останній рядокза допомогою клавіатури (контакт клавіатури 4 – від 8);
Висновок 5: не пов'язаний;
Висновок 6: другий стовпець за допомогою клавіатури (контакт клавіатури 6 - 8);
Висновок 7: третя колонка з клавіатури (клавіатури пальця 7 – від 8);
Висновок 8: незв'язаний (GSM буде використовувати цей штир);
Висновок 9: незв'язаний (GSM буде використовувати цей штир);
Висновок 10: дані PIR датчика №2;
Висновок 11: сирена звуковий сигнал (надходить на вхід модуля реле);
Висновок 12: дані PIR датчика №1;
Висновок 13: вхідний сигнал зумера;

Як можна бачити, хоча клавіатура має 8 висновків, підключилися тільки три (один рядок і дві колонки, що дозволяє використовувати два числа для читання - 1 × 2 матриці), таким чином я можу зробити паролі, використовуючи ці три дроти, і немає необхідності використовувати всі контакти з клавіатури. Це відбувається тому, що після того, як датчик руху виявляє людину, яка йде в кімнаті, людина матиме всього 5 секунд, щоб вимкнути сигналізацію. Після того, як аварійний сигнал не відключається на даний момент часу, GSM шилд відправляє SMS вам або дзвонить на номер телефону. Arduino був запрограмований на виклик і як тільки ви відповісте на телефонний дзвінок, він покладе слухавку.

Звичайно, можна отримати помилкові показання датчика, тому варто опція, щоб відключити сигналізацію, просто відправивши SMS з вашого телефону на Arduino. Крім того, ще один варіант, що ви можете зробити, це налаштувати шилд, щоб він відправляв вам одне повідомлення на день, щоб ви знали, що він працює правильно.

Крок 3: Код

Просто завантажте наведений нижче код та скомпілюйте. Він використовує бібліотеки Keypad.h та GSM.h.
Завантажити файл: (завантажень: 181)
Завантажити файл: (завантажень: 104)

Крок 4: Висновок


Враховуючи, що код Arduino Uno буде відправляти SMS-повідомлення та дзвонити на ваш телефон всього за п'ять секунд після того, як хтось проникне у ваш будинок, я припускаю, що у вас буде достатньо часу, щоб зателефонувати до поліції. Звичайно, сирена буде відлякувати злодіїв і ваш будинок або інше приміщення стане безпечнішим за допомогою цієї статті.

Інфрачервоні (ІЧ, IR) датчики зазвичай використовуються для вимірювання відстаней, але їх також можна використовувати для виявлення об'єктів. Підключивши кілька інфрачервоних датчиків до Arduino, ми можете створити охоронну сигналізацію.

Огляд

Інфрачервоні (ІЧ, IR) датчики зазвичай використовуються для вимірювання відстаней, але їх також можна використовувати для виявлення об'єктів. ІЧ-датчики складаються з інфрачервоного передавача та інфрачервоного приймача. Передавач видає імпульси інфрачервоного випромінюваннятоді, як приймач детектує будь-які відображення. Якщо приймач виявляє відображення, це означає, що перед датчиком певній відстані є якийсь об'єкт. Якщо відображення немає, немає об'єкта.

IR-датчик, який ми будемо використовувати у цьому проекті, виявляє відображення у певному діапазоні. Ці датчики мають невелике лінійний пристрійіз зарядовим зв'язком (CCD), яке детектує кут, з яким ІЧ-випромінювання повертається до датчика. Як показано на малюнку нижче, датчик передає інфрачервоний імпульс у простір, а коли перед датчиком з'являється об'єкт, імпульс відбивається назад до датчика під кутом, пропорційним відстані між об'єктом та датчиком. Приймач датчика детектує та виводить кут, і, використовуючи це значення, ви можете розрахувати відстань.

Підключивши пару інфрачервоних датчиків до Arduino, ми можемо зробити просту охоронну сигналізацію. Ми встановимо датчики на одвірок, і, правильно вирівнявши датчики, ми зможемо виявити, коли хтось проходить через двері. Коли це станеться, сигнал на виході ІЧ-датчика зміниться, а ми виявимо цю зміну постійно зчитуючи вихідний сигнал датчиків за допомогою Arduino. У даному прикладіми знаємо, що об'єкт проходить через двері, коли показ на виході ІЧ-датчика перевищує 400. Коли це станеться, Arduino увімкне сигнал тривоги. Щоб скинути спрацювання сигналізації, користувач може натиснути кнопку.

Комплектуючі

  • 2 x ІЧ-датчик відстані;
  • 1 x Arduino Mega 2560;
  • 1 x зумер;
  • 1 x кнопка;
  • 1 x резистор 470 Ом;
  • 1 x транзистор NPN;
  • перемички.

Схема з'єднань

Схема для цього проекту показана на малюнку нижче. Виходи двох ІЧ-датчиків підключені до висновків A0 та A1. Два інших висновки підключені до висновків 5V та GND. 12-вольтовий зумер підключений до виведення 3 через транзистор, а кнопка, яка використовується для відключення сигналізації, підключена до виводу 4.


На наведеній нижче фотографії показано, як ми наклеїли датчики на одвірок для цього експерименту. Зрозуміло, у разі постійного використання ви встановили датчики по-іншому.


Встановлення

  1. Підключіть висновки 5V та GND плати Arduino до виводів живлення та GND датчиків. Ви також можете подавати на них зовнішнє живлення.
  2. Підключіть вихідні висновки датчиків до висновків A0 та A1 плати Arduino.
  3. Підключіть виведення 3 Arduino до бази транзистора через резистор 1 ком.
  4. Подайте напругу 12 на колектор транзистора.
  5. Підключіть позитивний висновок 12-вольтового зумера до емітера, а негативний - до шини землі.
  6. Підключіть висновок 4 до 5V виведення через кнопку. З метою безпеки, щоб уникнути протікання великого струму, це завжди краще робити через додатковий невеликий резистор.
  7. Підключіть плату Arduino до комп'ютера через кабель USB і завантажте програму в мікроконтролер, використовуючи Arduino IDE.
  8. Подайте на плату Arduino живлення, використовуючи блок живлення, акумулятор або кабель USB/

Код

const int buzzer=3; // висновок 3 – це вихід зумер const int pushbutton=4; // висновок 4 – це вхід для кнопки void setup() ( pinMode(buzzer,OUTPUT); // налаштувати виведення 3 на вихід pinMode(pushbutton,INPUT); // налаштувати висновок 4 на вхід ) void loop() ( // прочитати вихідний сигнал обох датчиків і порівняти результат з пороговим значенням int sensor1_value = analogRead(A0);int sensor2_value = analogRead(A1); // включити сигнал тривоги if(digitalRead(pushbutton) == HIGH) break;)) else (digitalWrite(buzzer,LOW); // вимкнути сигнал тривоги)))

Відео

Доброго часу доби 🙂 Сьогодні поговоримо про сигналізацію. На ринку послуг повно фірм, організацією, що займаються встановленням та обслуговуванням охоронних систем. Ці компанії пропонують покупцеві широкий вибір сигналізацією. Однак їхня вартість далеко не копійчана. Але що ж робити людині, у якої не так вже й багато власних коштів, що можна витратити на охоронну сигналізацію? Думаю, висновок напрошується сам собою - зробитисигналізацію своїми руками. У цій статті наведено приклад того, як можна зробити свою власну кодову охоронну системувикористовуючи плату Arduino uno та кілька магнітних датчиків.

Систему можна дезактивувати введенням пароля з клавіатури та натисканням кнопки ‘ * ‘. Якщо хочете змінити поточний пароль, можете це зробити натиснувши на клавішу ‘ B', а якщо хочете пропустити або перервати операцію, можете зробити це, натиснувши на клавішу ‘#’. У системі є зумер для відтворення різних звуків і під час тієї чи іншої операції.

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

Відео роботи пристрою

Вирібвиготовлена ​​в ознайомлювальних/навчальних цілях. Якщо хочете використовувати її у себе вдома, потрібно буде її доопрацювати. Укласти керуючий блок у металевий корпус та убезпечити лінію живлення від можливого пошкодження.

Починайте!

Крок 1: Що нам буде потрібно

  • плата 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В блок живлення;

І одна коробка, щоб все це запакувати!

Інструменти:

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

Крок 2: Схема сигналізації

Схема з'єднання досить проста.

Невелике уточнення:

Висококонтрастний 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.

Крок 3: Прошивка

На кроці представлений код, що використовується вбудованим !

Завантажте плагін codebender. Натисніть на кнопку Run в Arduino і прошийте свою плату цією програмою. На цьому все. Ви щойно запрограмували Arduino! Якщо хочете змінити код, натисніть кнопку «Edit».

Примітка: Якщо ви не будете використовувати Codebender IDE для програмування плати Arduino, вам потрібно буде встановити додаткові бібліотеки в Arduino IDE.

Крок 4: Виготовляємо власну керуючу плату

Після того, як вдало зібрали та протестували новий проектна базі 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 дисплей.

Крок 5: Розміщуємо схему у корпусі

Всім привіт сьогодні ми розглянемо пристрій під назвою датчик руху. Багато хто з нас чув про цю штуку, хтось навіть мав справу з цим пристроєм. Що таке датчик руху? Спробуємо розібратися, отже:

Датчик руху, або датчик переміщення - пристрій (прилад) що виявляє переміщення будь-яких об'єктів. Дуже часто ці пристрої використовуються в системах охорони, сигналізації та моніторингу. Форм факторів цих датчиків існує безліч, але ми розглянемо саме модуль датчика руху для підключення до плат Arduino,і саме від фірми RobotDyn. Чому саме цієї фірми? Я не хочу займатися рекламою цього магазину та його продукції, але саме продукція цього магазину була обрана як лабораторні зразки завдяки якісній подачі своїх виробів для кінцевого споживача. Отже, зустрічаємо - датчик руху(PIR Sensor)від фірми RobotDyn:


Ці датчики малі за габаритами, споживають мало енергії та прості у використанні. Крім того – датчики руху фірми RobotDyn мають ще й марковані шовкографією контакти, це звичайно дрібниця, але дуже приємна. А тим, хто використовує такі ж датчики, але тільки інших фірм, не варто турбуватися - всі вони мають однаковий функціонал, і навіть якщо не промарковані контакти, то цоколівку таких датчиків легко знайти в інтернеті.

Основні технічні характеристикидатчика руху (PIR Sensor):

Зона роботи датчика: від 3 до 7 метрів

Кут стеження: до 110 о

Робоча напруга: 4,5...6 Вольт

Споживаний струм: до 50мкА

Примітка:Стандартний функціонал датчика можна розширити, підключивши на піни IN та GND датчик освітленості, і тоді датчик руху спрацьовуватиме лише у темряві.

Ініціалізація пристрою.

При включенні датчику потрібна майже хвилина для ініціалізації. Протягом цього періоду датчик може давати помилкові сигнали, це слід врахувати при програмуванні мікроконтролера з підключеним до нього датчиком, або в ланцюгах виконавчих пристроїв, якщо підключення здійснюється без використання мікроконтролера.

Кут та область виявлення.

Кут виявлення (стеження) складає 110 градусів, діапазон відстані виявлення від 3 до 7 метрів, ілюстрація нижче показує все це:

Регулювання чутливості (дистанції виявлення) та тимчасової затримки.

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


Підключення датчика:

  • PIR Sensor - Arduino Nano
  • PIR Sensor - Arduino Nano
  • PIR Sensor - Arduino Nano
  • PIR Sensor – для датчика освітленості
  • PIR Sensor – для датчика освітленості

Типова схема підключення дана на схемі нижче, у нашому випадку датчик показаний умовно з тильного боку та підключений до плати Arduino Nano.

Скетч демонструє роботу датчика руху (використовуємо програму):

/* * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano */ void setup() ( //Встановити з'єднання з монітором порту Serial.begin(9600); ) void loop() ( //Зчитуємо порогове значення з порту А0 //зазвичай воно вище 500 якщо є сигнал if(analogRead(A0) > 500) ( //Сигнал з датчика руху Serial.println("Є рух!!!"); ) else ( / /Немає сигналу Serial.println("Все тихо..."); ) )

Скетч є звичайною перевіркою роботи датчика руху, в ньому є багато недоліків, таких як:

  1. Можливі несправжні спрацьовування, датчику необхідна самоініціалізація протягом однієї хвилини.
  2. Жорстка прив'язка до монітора порту, немає вихідних виконавчих пристроїв (реле, сирена, світлоіндикація)
  3. Занадто короткий час сигналу на виході датчика, при виявленні руху необхідно програмно затримати сигнал більш тривалий час.

Ускладнивши схему та розширивши функціонал датчика, можна уникнути вищеописаних недоліків. Для цього потрібно доповнити схему реле модулем і підключити звичайну лампу на 220 вольт через даний модуль. Сам модуль реле буде підключений до піна 3 на платі Arduino Nano. Отже принципова схема:

Тепер настав час трохи вдосконалити скетч, яким перевірявся датчик руху. Саме в скетчі буде реалізована затримка вимкнення реле, так як сам датчик руху має занадто короткий час сигналу на виході при спрацьовуванні. Програма реалізує 10 секундну затримку при спрацьовуванні датчика. За бажання цей час можна збільшити або зменшити, змінивши значення змінної DelayValue. Нижче представлений скетч та відео роботи всієї зібраної схеми:

/* * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano * PIR Sensor -> Arduino Nano * Relay Module -> Arduino Nano */ // relout - пін (вихідний сигнал) для модуля реле const int relout = 3; //prevMillis - змінна для зберігання часу попереднього циклу сканування програми //interval - часовий інтервал для відліку секунд до вимкнення реле unsigned long prevMillis = 0; int interval = 1000; //DelayValue - період протягом якого реле утримується у включеному стані int DelayValue = 10; //initSecond - Змінна ітерація циклу ініціалізації int initSecond = 60; //countDelayOff - лічильник часових інтервалів static int countDelayOff = 0; //trigger – прапор спрацьовування датчика руху static bool trigger = false; void setup() (// Стандартна процедураініціалізації порту який підключений модуль реле //ВАЖЛИВО!!! - щоб модуль реле залишався в спочатку вимкненому стані //і не спрацьовував при ініціалізації, потрібно записати в порт входу/виходу //значення HIGH, це дозволить уникнути хибних "переклацань", і збереже //стан реле таким, яким воно було до включення всієї схеми в роботу pinMode(relout, OUTPUT); digitalWrite(relout, HIGH); //Тут все просто - чекаємо коли закінчаться 60 циклів(змінна initSecond) //тривалістю в 1 секунду, за цей час датчик "самоініціалізується" for(int i = 0; i< initSecond; i ++) { delay(1000); } } void loop() { //Считать значение с аналогового порта А0 //Если значение выше 500 if(analogRead(A0) >500) ( //Встановити прапор спрацьовування датчика руху if(!trigger) ( trigger = true; ) ) //Поки прапор спрацьовування датчика руху встановлений while(trigger) ( //Виконувати наступні інструкції//Зберегти в змінній currMillis //значення мілісекунд минулих з початку //виконання програми unsigned long currMillis = millis(); //Порівнюємо з попереднім значенням мілісекунд //якщо різниця більше заданого інтервалу, то: if(currMillis - prevMillis > interval) ( //Зберегти поточне значення мілісекунд в змінну prevMillis prevMillis = currMillis; //Перевіряємо лічильник затримки порівняння /протягом якого реле має утримуватися у включеному //стані if(countDelayOff >= DelayValue) ( ​​//Якщо значення зрівнялося, то: //скинути прапор спрацьовування датчика руху trigger = false; //Обнулити лічильник затримки countDelayOff = 0; // Вимкнути реле digitalWrite(relout, HIGH); // Перервати цикл break; ); ) ) ) )

У програмі є конструкція:

unsigned long prevMillis = 0;

int interval = 1000;

...

unsigned long currMillis = millis();

if(currMillis - prevMillis > interval)

{

prevMillis = currMillis;

....

// Наші операції укладені у тіло конструкції

....

}

Щоб зробити ясність, було вирішено окремо прокоментувати цю конструкцію. Отже, дана конструкціядозволяє виконати паралельну задачу в програмі. Тіло конструкції спрацьовує приблизно раз на секунду, цьому сприяє змінна interval. Спочатку, змінною currMillisприсвоюється значення, що повертається при виклику функції millis(). Функція millis()повертає кількість мілісекундів, що пройшли з початку програми. Якщо різниця currMillis - prevMillisбільше ніж значення змінної intervalто це означає, що вже пройшло більше секунди з початку виконання програми, і потрібно зберегти значення змінної currMillisу змінну prevMillisпотім виконати операції укладені у тілі конструкції. Якщо ж різниця currMillis - prevMillisменше ніж значення змінної interval, то між циклами сканування програми ще не минуло секунди, і операції ув'язнені в тілі конструкції пропускаються.

Ну і на завершення статті відео від автора:

Будь ласка, увімкніть JavaScript для роботи з коментарями.