Arduino-сенсор обнаружения вторжений – arduino+

Обнаруживаем движения и жесты с помощью PIR сенсора и Ардуино

27 сентября в 15:51

Используем датчик PIR и Arduino для обнаружения движения руки, чтобы потом использовать для работы с электронным оборудованием.

В этой статье мы покажем вам, как сделать детектор жестов из простых компонентов, таких как датчик PIR и Arduino Nano. Также статья касается следующих вопросов:

  • Объясняет применение PIR-датчиков и то, как они работают;
  • Показывает работу с PIR под названием TPA81
  • Использование датчика PIR для обнаружения движения и жестов с помощью Arduino;
  • Создание детектора для увеличения или уменьшения громкости динамика.

Компоненты

Нам понадобятся следующие компоненты и комплектующие для реализации устройства, которое реагирует на движение и жесты на основе PIR датчика:

  • Arduino Nano R3 × 1
  • TPA81 Devantech 8 Pixal – Датчик температуры × 1
  • HC-SR505 Инфракрасный датчик движения PIR × 8
  • Модуль 0.96″ SPI 128X64 OLED дисплей × 1
  • Макетная плата × 1
  • Провода мама/папа × 1
  • Arduino Uno Rev3 × 1

Из программного обеспечения нам понадобится Arduino IDE.

Пассивный инфракрасный датчик (PIR-датчик) – это электронный датчик, который измеряет инфракрасный (ИК) свет, излучаемый объектами в его поле зрения. Они чаще всего используются в детекторах движения основанных на ПИРах.

Все объекты с температурой выше абсолютного нуля излучают тепловую энергию.

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

Термин «пассив» в этом случае относится к тому факту, что ПИР-устройства не генерируют или не излучают энергию для целей обнаружения. Они работают, обнаруживая инфракрасное излучение, излучаемое или отраженное от объектов. Они не обнаруживают и не измеряют тепло.

TPA81 представляет собой массив термопар, обнаруживающий инфракрасное излучение в диапазоне 2 мкм – 22 мкм. Это длина волны источника тепла.

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

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

Хотя они полезны в робототехнике, их применение ограничено, так как они не могут обнаружить и измерить температуру статического источника тепла.

Другим типом датчика является массив термоэлементов. Они используются в бесконтактных инфракрасных термометрах. Они имеют очень широкий угол обзора или поле зрения (FOV) около 100° и нуждаются либо в устройстве сужения, либо в объективе, либо и то другое, для получения более полезного FOV около 12°.

У некоторых есть встроенный объектив. В последнее время стали доступны датчики с массивом термоэлементов, встроенной электроники и кремниевой линзы. Это тип, используемый в TPA81. Он имеет массив из восьми термополей, расположенных в ряд.

TPA81 может одновременно измерять температуру 8 соседних точек. TPA81 также может управлять сервоприводом для панорамирования модуля и создания теплового изображения.

TPA81 может обнаруживать пламя свечи на расстоянии 2 метров (6 футов) и не подвергается воздействию окружающего света.

Датчики PIR похожи на камеры, которые могут видеть только теплые объекты. Таким образом, TPA81 является тепловой камерой с разрешением 8 пикселей, а, конечно, человеческое тело всегда излучает тепло. Теперь, если мы контролируем датчик PIR контроллером и определим некоторый жест для датчика PIR, мы сможем сделать простой детектор жестов.

В этом материале мы создадим детектор жестов с использованием PIR и Arduino.

Мы использовали TPA81 как PIR, но это немного дорого, поэтому, если вы хотите сэкономить деньги, вы можете использовать 8 простых PIR-датчиков без белой головки (часть фокусировки).

TPA81 поддерживает протокол I2C и совместим с Arduino Nano. Этот проект поможет вам узнать основы обработки изображений и обнаружения жестов.

Схема соединения

Если вы хотите использовать 8 датчиков PIR вместо TPA81, вы должны подключить 8 одиночных PIR-датчиков к плате Arduino и прочитать их один за другим. Таким образом, вы можете сэкономить деньги.

Не подключайте пины питания PIR к Ардуино 5В. В этой схеме выше вы должны отделить белую часть PIR и поставить их рядом друг с другом.

Используйте отдельные источники питания для PIR-сенсоров.

Код

Для первой схемы (с использованием TPA81) скопируйте код в Arduino IDE. Но сначала вы должны добавить библиотеку, а затем загрузить код. Скачайте библиотеку TPA81 ниже.

Если вы впервые запускаете плату Arduino, не волнуйтесь. Просто выполните следующие действия:

  • Перейдите на страницу IDE на нашем сайте или на сайт www.arduino.cc/en/Main/Software и скачайте программное обеспечение для вашей ОС. Установите программное обеспечение Arduino IDE в соответствии с инструкциями.
  • Запустите среду разработки Arduino, очистите текстовый редактор и скопируйте код (ниже) в текстовый редактор.
  • Перейдите к эскизу и включите библиотеки (ссылки библиотеки выше). Теперь нажмите добавить ZIP-библиотеку и добавьте библиотеки.
  • Выберите плату в “инструменты – платы” – выберите Arduino Nano.
  • Подключите Arduino к компьютеру и установите COM-порт в “инструменты – порты”.
  • Нажмите кнопку «Загрузить (стрелка)».
  • У вас все настроено!

Скачать arduino-pir-sensor-kod.ino#include “Wire.h” #include “TPA81.h” // Create new TPA81 instance TPA81 tpa; void setup() { Serial.begin(9600); // You need to begin the Wire library to use TPA81 library Wire.begin(); } void loop() { // Print temperature light Serial.print(tpa.getAmbient()); Serial.print(” “); // Print all temperature point for (int i = 1; i

Источник: https://ArduinoPlus.ru/obnaruzhivaem-dvizhenija-i-zhesty-s-pomoshhju-pir-sensora-i-arduino/

37 в 1. Hабор датчиков и индикаторов для Arduino

Сегодня на обзор будет набор сенсоров для Arduino. Обычно его называют 37 in 1 Sensors Kit for Arduino. У разных продавцов он бывает в виде кулечка с датчиками и плохонькой фотокопией инфолиста или набор подороже, в пластиковом боксе с ячейками под каждый датчик, нормально отпечатанным инфолистом и датчики собраны качественней чем в дешёвом наборе.

В моем случае набор в пластиковом боксе.Бокс из хорошего пластика, заусенцев от литья нет. Горизонтальные перемычки можно вынуть и получить отделения побольше.Датчики спаяны хорошо, следов флюса не наблюдается.Платы датчиков из стеклотекстолита. Все имеют штырьквые разъемы для подключения.

  • Датчик температуры KY-001
  • Вибровыключатель KY-002
  • Магнитный датчик KY-003
  • Кнопка KY-004
  • Датчик инфракрасного излучения KY-005
  • Пассивный зуммер KY-006
  • Лазерный модуль KY-008
  • Трехцветный светодиод KY-009
  • Датчик с оптическим прерывателем KY-010
  • Трехцветный светодиод KY-011
  • Активный зуммер KY-012
  • Датчик температуры KY-013
  • Датчик температуры и влажности KY-015
  • Трехцветный светодиод KY-016
  • Датчик наклона KY-017
  • Фоторезистор KY-018
  • Реле KY-019
  • Датчик наклона KY-020
  • Геркон KY-021
  • Инфракрасный датчик KY-022
  • Джойстик KY-023
  • Датчик магнитного поля KY-024
  • Датчик магнитного поля KY-025
  • Датчик пламени KY-026
  • Модуль световых эффектов «магическая чашка» KY-027
  • Датчик температуры KY-028
  • Двухцветный светодиод KY-029
  • Датчик удара KY-031
  • Датчик для избегания препятствий KY-032
  • Датчик магнитного поля KY-033
  • Семицветный светодиод KY-034
  • Магнитный датчик KY-035
  • Датчик металла KY-036
  • Датчик звука KY-037
  • Датчика звука KY-038
  • Датчик сердцебиения KY-039
  • Датчик угла поворота (энкодер) KY-040

Каждый использует датчики под свои нужды. Однако примеров использования, как и внятной документации в комплекте не идет, поэтому я напишу краткую информацию на каждый датчик и пример кода. Всю информацию нашел в сети. На ютубе по коду датчика можно найти пример его использования. У китайцев каждый датчик имеет свой код(более – менее общепринятый). Собран на цифровом сенсоре DS18B20, напряжение питания от 3.0 V до 5.5 V. Измеряемая температура -55 ° C до +125 ° C, по Фаренгейту — 67 ° F до 257 ° F. В диапазоне от -10 °C до +85 ° C точность измерения ± 0.5 ° C. Время измерения не более 750 миллисекунд. Каждый DS18B20 имеет уникальный номер, что позволяет подключить к одной шине большое количество датчиков

Подключение (слева направо)

GND +5V S = Signal, в примере подключаем к 10 выводу arduino#include OneWire ds(10); // датчик на 10 выводе void setup(void) { Serial.begin(9600); } void loop(void) { //For conversion of raw data to C int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract; byte i; byte present = 0; byte data[12]; byte addr[8]; // ищем устройства, подключенные к шине if ( !ds.search(addr)) { Serial.print(«No more addresses.
»); ds.reset_search(); return; } Serial.print(«R=»); for( i = 0; i < 8; i++) { Serial.print(addr[i], HEX); Serial.print(" "); } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.print(«CRC is not valid! »); return; } if ( addr[0] == 0x10) { Serial.print(«найдено DS18S20. »); } else if ( addr[0] == 0x28) { Serial.print(«Найдено DS18B20. »); } else { Serial.print(«Устройство не опознано: 0x»); Serial.println(addr[0],HEX); return; } ds.reset(); ds.select(addr); ds.write(0x44,1); // запрос данных delay(1000); // 750ms по документации время получения температуры present = ds.reset(); ds.select(addr); ds.write(0xBE); // читаем данные Serial.print(«P=»); Serial.print(present,HEX); Serial.print(" "); for ( i = 0; i < 9; i++) { // получаем 9 байт data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print( OneWire::crc8( data, 8), HEX); Serial.println(); //преобразуем полученные данные в температуру LowByte = data[0]; HighByte = data[1]; TReading = (HighByte S пин “KY-012″ — активный звуковой модуль представляет собой печатную плату с 5-вольтовым звуковым излучателем (для включения звука нужно просто подать питание 5 В) Подключение к выводам S и -. На моем модуле перепутана полярность подключения На выходе – напряжение, пропорциональное температуре. На плате термистор и резистор делителя. сенсор NTC термистор измеряет: -55°C / +125°C точность: + / — 0.5°C

Подключение (слева направо)

GND +5В S#include int sensorPin = A5; // подключаем датчик на аналоговый вход double Thermistor(int RawADC) { double Temp; Temp = log(10000.0*((1024.0/RawADC-1))); Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp ); Temp = Temp — 273.15; // преобразуем Кельвин в Цельсий return Temp; } void setup() { Serial.begin(9600); } void loop() { int readVal=analogRead(sensorPin); double temp = Thermistor(readVal); Serial.println(temp); // выводим температуру delay(500); }Характеристики: напряжение питания, В: 3.3…5 выход: цифровой диапазон измерения влажности, % RH:  20-90 диапазон измерения температуры, ℃: 0…50 точность измерения влажности, % RH: + / – 5 точность измерения температуры, ℃: + / – 2 разрешающая способность при измерении влажности, % RH: 1 разрешающая способность при измерении температуры, ℃: 1 долгосрочная стабильность, % RH / год: < ± 1

подключение

левый пин S –> к выводу 10 ардуино Правый пин GND Средний пин +5

Для работы используется библиотека DHTLib, почитать о ней можно тут http://playground.arduino.cc/Main/DHTLib

содержит RGB светодиод с 3-мя входами, что позволяет получать нужный цвет излучения с помощью подачи нужного напряжения на входы. Светодиод имеет общий катод.

Ограничительные резисторы установлены на плате.

Подключение: R – плюс 5 В (красный) G -плюс 5 В (зеленый) B – плюс 5 В (синий) GND – общий источника питания

KY-017 переключатель срабатывающий в зависимости от наклона

Ртутный. На плате присутствуют помимо датчика резистор и светодиод Работаем как с обычной кнопкой

Подключение (слева направо)

GND 5+ Выход S на плате светодиод, при замкнутых контактах горит красным фоторезистор (датчик освещенности), который применяется для измерения интенсивности света или определения его наличия/отсутствия. При отсутствии света сопротивление фоторезистора большое и доходит до 1 мОм, а при его освещении падает до нескольких Ом. между «S»  и +5 В впаян резистор 10 кОм, что вместе с самим фоторезистором образует делитель напряжения, который удобно подключить к аналоговому входу Arduino.

Подключение (слева направо)

+5в S – выход GND int sensorPin = A5; // вход для подкл фоторезистора int ledPin = 13; // светодиод int sensorValue = 0; // переменная для значения сенсора void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { sensorValue = analogRead(sensorPin); digitalWrite(ledPin, HIGH); delay(sensorValue); digitalWrite(ledPin, LOW); delay(sensorValue); Serial.println(sensorValue, DEC); }Используется для коммутации нагрузки с большим напряжением или током. Например лампы

Читайте также:  Arm микроконтроллеры: обсуждаем преимущества и технические характеристики

Коммутируемая нагрузка

Переменного тока 10А 250 В 10 А 125В Постоянного тока 10А 30В 10А 28В На плате распаян транзистор, защитный диод и светодиод, показывающий срабатывание реле.

Подключение (слева направо)

S управляющий сигнал с ардуино +5в — GND int relay = 10; // подключение реле void setup () { pinMode (relay, OUTPUT); } void loop () { digitalWrite (relay, HIGH); // включить реле delay (1000); digitalWrite (relay, LOW); // выключить реле delay (1000); }переключатель срабатывающий от наклона модуля, имеющий цифровой интерфейс.  При наклоне датчика в одну сторону контакты  “-”  и “S” замыкаются, при наклоне в другую размыкаются.  Модуль позволяет определять только 2 положения и не измеряет угол наклона. Между контактами “+5В”  и “S” впаян резистор 10 кОм. Контакт, срабатывающий при поднесении к нему магнита. Напаян подтягивающий резистор. Подключаем к контактам + и – питание, средний вывод – выход кнопки. Работаем как с обычной кнопкой. Модуль  предназначен для приема данных по инфракрасному каналу от пультов управления. На плате имеется светодиод с токоограничивающим резистором 1 кОм, которые включены между контактами +5 и “S”.
Технические характеристики: несущая частота: 38 кГц дистанция приема от обычного пульта: 18-20 м угол приема: 90 градусов напряжение питания постоянного тока: 2,7-5,5 В

Подключение (слева направо)

— GND +5V S выход приемника

Применение:

управление устройствами в доме через пульт по ИК каналу#include int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // начинаем прием } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.

resume(); // принимаем следующее значение } }Двухосевой аналоговый джойстик с кнопкой
Подключение (слева направо) GND – общий провод +5V – “+5 В” питания VRx  – аналоговый выход потенциометра оси X VRy – аналоговый выход потенциометра оси Y SW – цифровой выход кнопки int JoyStick_X = A0; // x int JoyStick_Y = A1; // y int JoyStick_Z = 3; // кнопка void setup () { pinMode (JoyStick_X, INPUT); pinMode (JoyStick_Y, INPUT); pinMode (JoyStick_Z, INPUT_PULLUP); Serial.begin (9600); // 9600 bps } void loop () { int x, y, z; x = analogRead (JoyStick_X); y = analogRead (JoyStick_Y); z = digitalRead (JoyStick_Z); Serial.print (x, DEC); Serial.print (“,”); Serial.print (y, DEC); Serial.print (“,”); Serial.println (z, DEC); delay (100); }
Датчик имеет и цифровой и аналоговый выходы. На плате светодиод, который загорается при детектировании магнитного поля.

Подключение (слева направо)

AO аналоговый выход GND +5 DO цифровой выход красный светодиод на плате при замыкании загорается в отличие от модуля с простым герконом у этой платы 4 вывода, на борту есть компаратор и светодиод.

Подключение (слева направо)

AO аналоговый выход – можно подключать к аналоговому входу ардуино GND +5 DO – цифровой выход. датчик пламени реагирует на инфракрасное излучение и наиболее чувствителен к длинам волн от 760 нм до 1100 нм. Этот модуль имеет два выхода – цифровой и аналоговый. На плате имеется 2 светодиода – индикации питания и индикации выхода с компаратора. Построечным резистором можно изменять чувствительность датчика.
Подключение (слева направо) AO аналоговый вход GND 5V D0 цифровой выход int Led = 13 ;// светодиод int buttonpin = 10; // цифровой вход int analogin = A3; // аналоговый вход int val ;// float sensor; //значение датчика void setup () { pinMode (Led, OUTPUT) ; pinMode (buttonpin, INPUT) ; pinMode (analogin, INPUT) ; Serial.begin(9600); } void loop () { sensor = analogRead(analogin); Serial.println(sensor); // данные с датчика val = digitalRead (buttonpin) ; if (val == HIGH) // если сработал датчик { digitalWrite (Led, HIGH); } else { digitalWrite (Led, LOW); } delay(1000); } Подключение (слева направо) GND +5 S Светодиод Напряжение: G :2.3-2 .6 V; R :1.9-2 .2 V Ток 20мА На моей плате распаян резистор и зачем-то smd светодиод подключение через токоограничительные резисторы

Подключение (слева направо)

GND 330 Ohm –> S пин 330 Ohm –> средний пин Работаем как с обычным светодиодом (управление по двум выводам для красного и зеленого) Работает очень просто – при ударах(сотрясении) замыкается контакт.
Подключение (слева направо) +5 Средний – выход — земля Между +5 и выходом впаян резистор Работаем как с кнопкой. На модуле установлен инфракрасный передатчик и приемник. Эффективная дистанция срабатывания 2 ~ 40cm, рабочее напряжение 3.3V-5V. Есть подстроечные резисторы, позволяют выставить дистанцию. При срабатывании на плате загорается светодиод. Модуль имеет маркировку IR-08H Выход – логический Угол обнаружения : 35 °

Подключение (слева направо)

EN Второй пин +5 Третий сигнал Четвертый- земля Используем аналогично кнопки Этот модуль имеет два выхода – цифровой и аналоговый. На плате имеется 2 светодиода – индикации питания и индикации выхода с компаратора. Построечным резистором можно изменять чувствительность датчика
Подключение (слева направо) AO аналоговій вход GND 5V D0 цифровой выход int Led = 13 ;// светодиод int buttonpin = 10; // цифровой вход int analogin = A3; // аналоговый вход int val ;// float sensor; //значение датчика void setup () { pinMode (Led, OUTPUT) ; pinMode (buttonpin, INPUT) ; pinMode (analogin, INPUT) ; Serial.begin(9600); } void loop () { sensor = analogRead(analogin); Serial.println(sensor); // данные с датчика val = digitalRead (buttonpin) ; if (val == HIGH) // если сработал датчик { digitalWrite (Led, HIGH); } else { digitalWrite (Led, LOW); } delay(1000); } При приближении препятствия срабатывает датчик, на выходе 1 и загорается светодиод на плате
Подключение (слева направо) пин — = GND средний пин OUT +5v На плате напаян токоограничительный резистор. Работаем как с обычным светодиодом На выходе аналоговый сигнал, пропорциональный напряженности магнитного поля
Подключение (слева направо) пин — = GND средний пин +5 V пин S –выходной сигнал, в примере подключаем Arduino пин A5 int sensorPin = A5; // подключаем датчик к 5 аналоговому входу int ledPin = 13; // светодиод int sensorValue = 0; // данные с датчика void setup () { pinMode (ledPin, OUTPUT); Serial.begin (9600); } void loop () { sensorValue = analogRead (sensorPin); digitalWrite (ledPin, HIGH); delay (100); digitalWrite (ledPin, LOW); delay (100); Serial.println (sensorValue, DEC);//выводим данные с датчика } сенсорный модуль имеет металлический контакт для определения касания человека. На плате два светодиода – питание и срабатывание датчика

Подключение (слева направо)

AO GND +5V

DO

int sensorPin = A5; // подключаем датчик к 5 аналоговому входу int ledPin = 13; // светодиод int sensorValue = 0; // данные с датчика void setup () { pinMode (ledPin, OUTPUT); Serial.begin (9600); } void loop () { sensorValue = analogRead (sensorPin); digitalWrite (ledPin, HIGH); delay (100); digitalWrite (ledPin, LOW); delay (100); Serial.println (sensorValue, DEC);//выводим данные с датчика }Плата с большим микрофоном, имеет 2 выхода: цифровой и аналоговый AO, аналоговый выход – сигнал напрямую с микрофона DO, цифровой выход – при превышении порога срабатывания на выходе 1. Чувствительность срабатывания регулируется подстроечным Резистором На плате два светодиода – один при подаче питания, второй при срабатывании цифрового выхода

Подключение (слева направо)

AO GND +5V DO

Работа с цифровым выходом

int Led = 13 ;// светодиод int buttonpin = 10; // цифровой выход микрофона void setup () { pinMode (Led, OUTPUT) ; pinMode (buttonpin, INPUT) ; } void loop () { val = digitalRead(buttonpin);// читаем цифровой выход if (val == HIGH) // Если сработал цифровой выход { digitalWrite (Led, HIGH); } else { digitalWrite (Led, LOW); } } Работа с аналоговым выходом int sensorPin = A0; // подключаем аналоговый выход int ledPin = 13; // подключаем светодиод int sensorValue = 0; // амплитуда звука void setup () { pinMode (ledPin, OUTPUT); Serial.begin (9600); } void loop () { sensorValue = analogRead (sensorPin);// читаем с аналогового выхода Serial.println (sensorValue, DEC);// выводим амплитуду сигнала digitalWrite (ledPin, HIGH); delay (100); digitalWrite (ledPin, LOW); delay (100); }Плата с маленьким микрофоном, имеет 2 выхода: цифровой и аналоговый AO, аналоговый выход – сигнал напрямую с микрофона DO, цифровой выход – при превышении порога срабатывания на выходе 1. Чувствительность срабатывания регулируется подстроечным Резистором На плате два светодиода – один при подаче питания, второй при срабатывании цифрового выхода

Подключение (слева направо)

AO GND +5V DOсостоит из инфракрасного светодиода  (LED) и фототранзистора, с помощью которых можно измерять пульс в пальце. Монитор сердечного ритма работает следующим образом: палец должен быть расположен между IR светодиодом и фототранзистором, который получает поток инфракрасного излучения. Когда в пальце пульсирует кровь — сопротивление фототранзистора меняется. При измерениях пульса необходимо чтобы фототранзистор был защищен от попадания прямого солнечного или искусственного света для исключения нежелательных помех.
Подключение (слева направо) S подключаем к аналоговому входу ардуино +5в GND int sensorPin = 0; double alpha = 0.75; int period = 100; double change = 0.0; double minval = 0.0; void setup () { Serial.begin (9600); } void loop () { static double oldValue = 0; static double oldChange = 0; int rawValue = analogRead (sensorPin); double value = alpha * oldValue + (1 – alpha) * rawValue; Serial.print (rawValue); Serial.print (“,”); Serial.println (value); oldValue = value; delay (period);Енкодер выдает при вращении двоичный код на двух выходах. По этому коду можно определить направление вращения. на полный оборот в моем случае приходится 24 импульса. Помимо этого нажатие на ручку – срабатывание кнопки.

Подключение (слева направо)

“CLK” – энкодер контакт “A” “DT”  – энкодер контакт “B” “SW” – кнопка “+”  – питание “+5 В” “GND” — общий

Товар предоставлен для написания обзора магазином. Обзор опубликован в соответствии с п.18 Правил сайта.

Источник: https://mysku.ru/blog/china-stores/37299.html

Датчик протечки и дождя ардуино

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

При этом почти всегда имеется в виду один и тот же датчик, как правило, выполненный в виде готового модуля. Датчик легко подключается к Arduino, скетч для работы с такими датчиками прост, цена не высока.

Идеальный вариант для несложных проектов на Arduino Uno, Mega, Nano.

Описание датчика

Датчик протечки и дождя в проектах ардуино позволяет определить появление капель влаги и вовремя отреагировать на это, например, включив оповещение.

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

В этой статье мы рассмотрим работу с готовым модулем, который можно легко приобрести в любых специализированных интернет-магазинах.

Модуль датчика состоит из двух частей:

  • «Сенсорная» плата обнаружения капель. Она отслеживает количество попавшей на неё влаги. По сути, сенсор представляет собой простой переменный резистор, замыкаемый водой в разных местах, что вызывает изменение сопротивления.
  • Вторая часть датчика – сдвоенный компаратор (как правило, LM393, но возможны варианты LM293 и LM193). Его главная задача — преобразование значения с сенсора в аналоговый сигнал от 0 до 5 вольт.

На рынке встречаются варианты датчиков как с разнесенными сенсором и компаратором, так и с объединенными на одной панели.

Читайте также:  Делаем собственный аналог ардуино уно своими руками

Датчик запитывается от напряжения 5 В, который можно легко завести с любой платы Arduino. Как правило, у модуля датчика доступно два выхода:

  • Аналоговый. Значение, получаемое контроллером, будет варьироваться от 0 до 1023. Где 0 – все затопило или идет ливень, сенсор очень влажный, 1023 – сухая погода, сенсор сухой (в некоторых датчиках встречаются противоположные значения, 1023 – максимальная влажность, 0 – максимальная сухость).
  • Цифровой. Выдает высокое (5В) или низкое напряжение в случае превышения некоторого порога. Уровень порога срабатывания регулируется с помощью подстроечного резистора.

Подключение датчика протечки и дождя к ардуино

Для подключения датчика к ардуино понадобится сама плата (UNO, Mega, Nano или любая другая) и сам датчик. Если вы хотите проверять интенсивность осадков, то рекомендуется расположить датчик не горизонтально, а под некоторым углом, чтобы накапливаемые капли стекали вниз.

Схема подключения модуля датчика протечки к ардуино:

  • VCC (вход питания) – должен совпадать для соединенной схемы ардуино по напряжению и току. То есть в данном случае 5В;
  • GND – заземление;
  • АO – аналоговый выход;
  • DO — цифровой выход.

Аналоговый выход присоединяем к аналоговому пину микроконтроллера, например, A1. Цифровой выход, соответственно подключается к одному из цифровых пинов. Напряжение можно подать с вывода 5В платы ардуино, земля соединяется с землей.

При подключении датчиков протечки в реальных проектах надо обязательно предусматривать защиту электронной части модуля от попадания влаги!

Пример скетча

#define PIN_ANALOG_RAIN_SENSOR A1 // Аналоговый вход для сигнала датчика протечки и дождя
#define PIN_DIGITAL_RAIN_SENSOR 5 // Цифровой вход для сигнала датчика протечки и дождя void setup(){ Serial.

begin(9600);
}
void loop(){ int sensorValue = analogRead(PIN_ANALOG_RAIN_SENSOR); // Считываем данные с аналогового порта Serial.print(“Analog value: “); Serial.println(sensorValue); // Выводим аналоговое значение в монитр порта sensorValue = digitalRead(PIN_DIGITAL_RAIN_SENSOR); // Считываем данные с цифрового порта Serial.

print(“Digital value: “); Serial.println(sensorValue); // Выводим цифровое значение в монитр порта delay(1000); // Задержка между измерениями
}

В данном скетче мы просто считываем значения с датчика и выводим их в монитор порта.

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

Пример проекта дождевой сигнализации

Рассмотрим пример с использованием звуковой сигнализации в виде подключенного зумера на цифровом выходе D6. При желании можно вместо сигнализации подключить реле и выполнять различные операции с размыканием сети. В скетче полученные данные мы будем передавать в монитор порта по UART-интерфейсу.

Скетч для проекта с сигнализацией

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

Работа реализована через переменную, которая обновляется каждую секунду и выступает порогом – curCounter. Сигнализация приводится в действие тогда, когда значение, передаваемое с сенсора, станет меньше 300.

Задержка между обнаружением влаги и срабатыванием звукового сигнала составляет чуть больше 30 секунд.

#define PIN_RAIN_SENSOR A1 // Аналоговый вход для сигнала датчика протечки и дождя
#define PIN_ALERT 6 // Цифровой выход для сигнализации
#define MAX_COUNTER 30 // Пороговое значение для счетчика
#define ALERT_LEVEL 300 // Пороговое значение для счетчика int curCounter= 0; // Счётчик для сбора “статистики”, который увеличивается на 1 каждую секунду после срабатывания датчика void setup(){ Serial.begin(9600); pinMode(PIN_ALERT, OUTPUT); pinMode(PIN_RAIN_SENSOR, INPUT); // Можно не указывать, т.к. это значение по умолчанию
}
void loop(){ int sensorValue = analogRead(PIN_RAIN_SENSOR); Serial.println(sensorValue); // Выводим значение в монитр порта delay(300); // короткая задержка // Если накопили достаточно оснований для включения сигнализации if (curCounter >= MAX_COUNTER){ digitalWrite(PIN_ALERT, HIGH); // Срабатывание сигнализации curCounter = MAX_COUNTER; // Защита от переполнения переменной } // Определяем уровень влажности if (sensorValue < ALERT_LEVEL){ // В очередной раз убедились, что все влажно, увеличиваем счетчик curCounter++; }else { // Интенсивность дождя не превышает порога digitalWrite(PIN_ALERT, LOW); // Выключаем сигнализацию curCounter = 0; // Обнуляем счетчик } delay(1000); // Задержка между измерениями }

Подведение итогов

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

Подключается датчик очень легко – с помощью аналогового или цифрового выходов. Для получения значения в скетче используется стандартная функция analogRead (или digitalRead для цифрового пина).

Используя полученные значения, можно включать сигнализацию или другие внешние устройства с помощью реле.

Источник: https://ArduinoMaster.ru/datchiki-arduino/datchik-protechki-i-dozhdya-v-arduino-opisanie-shemy-sketchi/

KY-032 – Obstacle avoidance sensor module

⚪ ⚪

Для платформы Arduino создано очень много дополнительных модулей, одним из ных является модуль дальномера.

Модуль дальномера – KY-032: Obstacle avoidance sensor module

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

Таким образом датчик позволяет обнаружить ближайшие препятствия, а также черный цвет. Датчик возвращает показания в зависимости от обнаружения черного (возвращает 0) или белого (возвращает 1) цветов.
Датчик способен измерять растояние от 2см до 40см.

  • линия данных «DO» – дискретный сигнал который сигнализирует о препятствии.
  • линии данных «AO» – аналоговый сигнал который содержит данные о растоянии к препятствию.

Настройка:

  • резистор «103» – регулирует растояние к препятствию.
  • резистор «502» – регулирует чуствительность.

Модуль расположен на плате с 4 выводами.

Обозначение выводов:

  • Вывод с меткой «GND» –> Данные дискретного сигнала
  • Вывод с меткой «OUT» –> +5V
  • Вывод с меткой «VCC» –> GND
  • Вывод бес метки –> Данные аналогового сигнала

Назначение выводов модуля:

  • Напряжение: 3.3В/5В
  • Ток:
  • Размеры (Д/Д с пинами/Ш/В): 25мм/30мм/15мм/5мм
  • 1 х Платформа Arduino
  • 1 х KY-032 – Obstacle avoidance sensor module
  • 1 х USB-кабель для передачи данных
  • 4 х Монтажные провода типа папа-мама
Arduino кон.«GND» модуль Крайний вывод с меткой «GND» :: пр.папа-мама
Arduino кон.«10» модуль Средний вывод с меткой «OUT» :: пр.папа-мама
Arduino кон.«5V» модуль Крайний вывод с меткой «VCC» :: пр.папа-мама
Arduino кон.«А0» модуль Крайний вывод бес метки :: пр.папа-мама

Для того что бы программыа узнала о припятствии, сначала нужно считать состояние модуля:
// Номер пина на плате к которому будет подключен вывод “AO” модуля
#define SensorPin_AO A0 // Номер пина на плате к которому будет подключен вывод “DO” модуля
#define SensorPin_DO 10 // Переменная для хранения полученых данных с модуля
int SensorVal_AO; // Переменная для хранения полученых данных с модуля
int SensorVal_DO; // Устанавливаем в пин в режим “Ввод”
pinMode (SensorPin_DO, INPUT); // Получаем данные с модуля
SensorVal_AO = analogRead (SensorPin_AO); // Получаем данные с модуля
SensorVal_DO = digitalRead(SensorPin_DO); После того как считали состояние модуля с дискретного в выхода DO, полученое состояние нужно сравнить с эталонными значениями:
// Проверка для дискретного выхода: препятствие?
if(SensorVal_DO == LOW) { // Вывод состояния дискретного выхода DO Serial.println(“Obstacle discrete: YES.”); }
else { // Вывод состояния дискретного выхода DO Serial.println(“Obstacle discrete: NO.”); }
После того как считали состояние модуля с аналогового в выхода AO, полученое состояние нужно сравнить с эталонными значениями:
// Проверка для аналогового выхода: препятствие?
if(SensorVal_AO < 20) { // Вывод состояния дискретного выхода DO Serial.println("Obstacle analog: YES."); } // Проверка для аналогового выхода: нет препятствия? if(SensorVal_AO > 20) { // Вывод состояния дискретного выхода DO Serial.println(“Obstacle analog: NO.”); }
Вывод данных с аналогового в выхода AO:
// Вывод данных с аналогового выхода
Serial.print(“Obstacle value: “);
Serial.println(SensorVal_AO, DEC);

001.002.003.004.005.006.007.008.009.010. 011.012.013.014.015.016.017.018.019.020. 021.022.023.024.025.026.027.028.029.030. 031.032.033.034.035.036.037.038.039.040. 041.042.043.044.045.046.047.048.049.050. 051.052.053.054.055.056.057.058.059.060. 061.062.063.064.065. // ### Демонстрация роботы модуля KY-032### // Номер пина на плате к которому будет подключен вывод “AO” модуля
#define SensorPin_AO A0 // Номер пина на плате к которому будет подключен вывод “DO” модуля
#define SensorPin_DO 10 // Переменная для хранения полученых данных с модуля
int SensorVal_AO; // Переменная для хранения полученых данных с модуля
int SensorVal_DO; void setup () { // Инициализация SerialPort Serial.begin(9600); Serial.println(“Start Serial Port”); // Устанавливаем в пин в режим “Ввод” pinMode (SensorPin_DO, INPUT); } void loop () { // Получаем данные с модуля SensorVal_AO = analogRead (SensorPin_AO); // Получаем данные с модуля SensorVal_DO = digitalRead(SensorPin_DO); // Проверка для дискретного выхода: препятствие? if(SensorVal_DO == LOW) { // Вывод состояния дискретного выхода DO Serial.println(“Obstacle discrete: YES.”); } else { // Вывод состояния дискретного выхода DO Serial.println(“Obstacle discrete: NO.”); } // Проверка для аналогового выхода: препятствие? if(SensorVal_AO < 20) { // Вывод состояния дискретного выхода DO Serial.println("Obstacle analog: YES."); } // Проверка для аналогового выхода: нет препятствия? if(SensorVal_AO > 20) { // Вывод состояния дискретного выхода DO Serial.println(“Obstacle analog: NO.”); } // Вывод данных с аналогового выхода Serial.print(“Obstacle value: “); Serial.println(SensorVal_AO, DEC); // Задержка delay(200); }

Источник: http://smart-boards.ml/module-location-4.php

Про датчик движения и подключение его к Arduino

Всем привет, сегодня мы рассмотрим устройство под названием датчик движения. Многие из нас слышали об этой штуке, кто то даже имел дело с этим устройством. Что же такое датчик движения? Попробуем разобраться, итак:

Датчик движения, или датчик перемещения – устройство (прибор) обнаруживающий перемещение каких либо объектов. Очень часто эти устройства, используются в системах охраны, сигнализации и мониторинга.

Форм факторов этих датчиков существует великое множество, но мы рассмотрим именно модуль датчика движения для подключения к платам Arduino, и именно от фирмы RobotDyn.

  Почему именно этой фирмы? Я не хочу заниматься рекламой этого магазина и его продукции, но именно продукция данного магазина была выбрана в качестве лабораторных образцов благодаря качественной подаче своих изделий для конечного потребителя. Итак, встречаем – датчик движения(PIR Sensor) от фирмы RobotDyn:

Эти датчики малы по габаритам, потребляют мало энергии и просты в использовании. Кроме того – датчики движения фирмы RobotDyn имеют еще и маркированные шелкографией контакты, это конечно мелочь, но очень приятная.

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

 

Основные технические характеристики датчика движения(PIR Sensor):

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

Угол слежения: до 110о

Рабочее напряжение: 4,5…6 Вольт

Потребляемый ток: до 50мкА

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

Инициализация устройства.

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

Угол и область обнаружения.

Угол обнаружения(слежения) составляет 110 градусов, диапазон расстояния обнаружения от 3 до 7 метров, иллюстрация ниже показывает всё это:

Регулировка чувствительности(дистанции обнаружения) и временной задержки. 

Читайте также:  Dji phantom 3 advanced: обзор - arduino+

На приведённой ниже таблице показаны основные регулировки датчика движения, слева находится регулятор временной задержки соответственно в левом столбце приведено описание возможных настроек. В правом столбце описание регулировок расстояния обнаружения. 

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

  • PIR Sensor[PIN GND] – Arduino Nano[PIN GND]
  • PIR Sensor[PIN 5V]   – Arduino Nano[PIN 5V]
  • PIR Sensor[PIN OUT] – Arduino Nano[PIN A0]
  • PIR Sensor[PIN IN] – для датчика освещенности
  • PIR Sensor[PIN GND] – для датчика освещенности

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

Скетч демонстрирующий работу датчика движения(используем программу Serial Monitor Pro):

/*  * PIR Sensor[PIN GND] -> Arduino Nano[PIN GND]  * PIR Sensor[PIN 5V]  -> Arduino Nano[PIN 5V]  * PIR Sensor[PIN OUT] -> Arduino Nano[PIN A0]  */ 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[PIN GND]  -> Arduino Nano[PIN GND]  * PIR Sensor[PIN 5V]   -> Arduino Nano[PIN 5V]  * PIR Sensor[PIN OUT]  -> Arduino Nano[PIN A0]  * Relay Module[PIN IN] -> Arduino Nano[PIN 3]  */  //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;       }       else       {         //Если значение всё еще меньше, то         //Инкрементировать счетчик задержки на единицу         countDelayOff ++;         //Удерживать реле во включенном состоянии         digitalWrite(relout, LOW);       }     }   } }

В программе присутствует конструкция:

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, то между циклами сканирования программы еще не прошло секунды, и операции заключенные в теле конструкции пропускаются.   

Ну и в завершение статьи видео от автора:

Источник: http://arduino.on.kg/podklyuchenie-datchika-dvizheniya-k-Arduino

Схема системы безопасности на базе Arduino с использованием датчика движения PIR

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

Было бы замечательно, если бы мы подключили PIR датчик к Arduino, чтобы получить дешевую систему безопасности дома, не так ли?

Как использовать интерфейс PIR Wireless Motion Sensor с Arduino?

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

Наша домашняя система безопасности обнаруживает движение человека и включает свет и звуковой сигнал.

Здесь в демонстрационных целях использован светодиод. Этот проект можно расширить для использования совместно с автоматическими дверями, систем автоматизации, для автоматической подсветка пола, подвала, веранды, ванной комнаты, склада, гаража и т. д.

Компоненты, необходимые для простой системы домашней безопасности

  • Arduino UNO
  • USB-кабель
  • Датчик PIR
  • Зуммер на 5В
  • Светодиод

Как работает датчик движения PIR

Датчик PIR имеет 2 окна, которые чувствительны к ИК-излучению. Когда датчик находится в режиме ожидания, оба окна обнаруживают одинаковое количество ИК-излучения.

В то время как объект, излучающий инфракрасные волны (тело человека или животного) перемещается в зоне чувствительности PIR датчика, одно из окон датчика получает больше ИК излучения, что вызывает положительное дифференциальное изменение между двумя окнами.

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

У PIR датчика есть три контакта: GND, OUTPUT и VCC. Питание датчика осуществляется постоянным напряжением от 5 до 20 В. При обнаружении движения на выходе датчика (OUTPUT) появляется высокое состояние. Время задержки выходного сигнала может быть отрегулировано от 0,3 до 5 минут, это означает, что в случае обнаружения какого-либо движения выход будет высоким в течение установленного времени.

Переставляя перемычку на плате можно выбрать один из двух режимов работы датчика: с перезапуском и без перезапуска.

  • С перезапуском – при движении на выходе происходит переключение с высокого состояния на низкое.
  • Без перезапуска – на выходе всегда будет высокое состояние  пока есть движение.

Зона охвата датчика: до 120 градусов на расстоянии до 7 метров.

Три контакта GND, OUTPUT и VCC датчика PIR подключены к цифровым контактам Arduino (2, 3 и 4), а контакты 5, 6 используются для подключения зуммера и светодиода, которые будут активны при обнаружении движения.

const int LEDPin = 6; // вывод для светодиода const int PIRgnd = 2; // GND для датчика PIR const int inputPin = 3; // входной контакт для датчика PIR const int PIRvcc = 4; // VCC для датчика PIR const int BUZZERpin = 5; // вывод для зуммера void setup () { pinMode (LEDPin, OUTPUT); // объявляем LEDpin как выход pinMode (BUZZERpin, OUTPUT); // объявляем BUZZERpin как выход pinMode (PIRgnd, OUTPUT); // объявлять вывод GND как выход pinMode (inputPin, INPUT); // объявлять inputPin как выход pinMode (PIRvcc, OUTPUT); // объявлять вывод PIRvcc как выход digitalWrite (PIRgnd, LOW); digitalWrite (PIRvcc, HIGH); } void loop () { int val = digitalRead (inputPin); // чтение входного значения if (val == HIGH) // проверить, является ли вход HIGH { digitalWrite (LEDPin, HIGH); // включить светодиод, если обнаружено движение digitalWrite (BUZZERpin, HIGH); // включить зуммер, если обнаружено движение delay (500); digitalWrite (LEDPin, LOW); // выключить светодиод digitalWrite (BUZZERpin, LOW); // выключить зуммер } }

Скетч достаточно прост. Устанавливаем 3-й контакт Arduino как вход, так как этот вывод используется для подключения выхода инфракрасного датчика. Другие контакты зададим как выход. Контакт 2 установлен в положение LOW, а контакт 4 — HIGH, который дает GND и VCC для датчика PIR.

Функция «loop ()» является бесконечным циклом, она непрерывно считывает значения с выхода PIR и проверяет, является ли уровень сигнала НИЗКИЙ или ВЫСОКИЙ. Если он высокий, то на 500 миллисекунд включается светодиод и зуммер.

Если мы хотим при входе включить свет или вентилятор, то подключите контакты 5, 6 к реле через транзистор.

www.circuitsgallery.com

Источник: http://fornk.ru/3403-sxema-sistemy-bezopasnosti-na-baze-arduino-s-ispolzovaniem-datchika-dvizheniya-pir/

Ссылка на основную публикацию
Adblock
detector