Датчик открытия двери или окна (геркон) на esp32,esp8266 в ESPHome и Home Assistant.

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Геркон – это одна из самых главных частей умного дома. На открытии и закрытии окна и двери завязано очень много автоматизаций. Самая главная автоматизация – это конечно охрана при открытии двери или окна, оповещается хозяин.
Или например при открытии двери в кладовку включается свет. Ну и при закрытии двери следовательно выключается. И таких вариантов автоматизации очень много.
Существуют готовые датчики открытия двери. Например от XIaomi или Tuya. Которые держат батарейку больше года и компактные.
Но я же хочу показать как реализовать такой геркон в ESPHome. Спросите зачем? ведь это громоздко и будет питаться от 5 вольт блока питания.
И я с Вами соглашусь. Но преимущество тут в следующем:
Во первых цена. Такая реализация дешевле готовых решений.
Второе преимущество, это то, что сколько i/o пинов у ESP, столько Вы и можете навесить герконов одновременно. Например таким способом можно сразу обложить окна лоджии которая у меня к слову имеет длину больше 10 метров.
А если учесть тот факт, что при ремонте люди которые планируют себе сделать дом умным, уже прокладывают розетки у окно, чтоб сделать раздвижные автоматические шторы. ПО этому в розетке не будет проблем я думаю.
Итак, давайте приступим к примеру.
Геркон обычно имеет 2 пина. Собственно один пин мы подключаем к 5 вольтам, а второй к i/o пину микроконтроллера. В примере этот пин у меня под номером 2.
В ESPHome код выглядит вот так:
binary_sensor: - platform: gpio pin: number: 2 mode: INPUT_PULLUP name: "Door_contact" device_class: door
Если хотите еще добавить датчик, то ниже пишете все тоже самое начиная от -platform. Меняете пин и имя. И у Вас уже два датчика. Ну и так далее.
В Home Assistant датчик открытия двери выглядит следующим образом:
Подключение геркона к Arduino

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Для начала кто не в курсе, давайте выясним что же такое геркон:
Герко́н (акроним от «герметизированный контакт») — электромеханическое коммутационное устройство, изменяющее состояние подключённой электрической цепи при воздействии магнитного поля от постоянного магнита или внешнего электромагнита, например, соленоида.
Конструктивно в герконе имеются упругие ферромагнитные контакты, впаянные в герметичную стеклянную колбу. Эти контакты совмещают функции токопровода, магнитопровода и пружины .
При увеличении внешнего магнитного поля свыше порогового упругие контакты геркона «слипаются», замыкая электрическую цепь. При снятии внешнего поля за счет упругости контактов происходит размыкание цепи.
Следовательно самым популярным применением геркона служит открытие дверей, так как при открытии двери мы будем размыкать контакты, так как дверь будет отдалять магнит от геркона. Этот датчик очень полезен в применении сигнализации. Поэтом я сразу и заказал в корпусе с ушками геркон MC-38 чтоб можно было сразу прикрутить на дверь и все бы работало.
Ну чтож из теории к практике. Написал простенький скетч который демонстрирует изменение состояния светодиода на открытую и закрытую дверь. Естественно заместо диода всегда можно подключить зуммер, для звукового сигнала.
Так вот геркон мы будем подключать к 6 пину ардуино. А диод у нас будет встроенный на 13 пину ардуино.
После подключения всех компонентов по описанной выше схеме необходимо скопировать программный код приведенный ниже и вставить его в программу Arduino IDE и загрузить этот программный код в саму плату Arduino.
int Door_Led_Pin = 13; // выбрать контакт для светодиода int Door_Sensor_Pin = 6; // контакт для датчика int val = 0; // переменная для хранения состояния датчика void setup() < pinMode(Door_Led_Pin, OUTPUT); // установить Door_Led_Pin как выход pinMode(Door_Sensor_Pin, INPUT); // установить Door_Sensor_Pin как вход >void loop() < val = digitalRead(Door_Sensor_Pin); // читать Door_Sensor_Pin if (val == HIGH) < // Если Door_Sensor N.C. (без магнита) ->HIGH : Дверь открыта / LOW : Дверь закрыта // Если Door_Sensor N.0. (nc с магнитом) -> HIGH : Дверь открыта / LOW : Дверь закрыта digitalWrite(Door_Led_Pin, LOW); //выключить светодиод Door_Led > else < digitalWrite(Door_Led_Pin, HIGH); //включить светодиод Door_Led >>
Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.
KY-021 – Модуль на основе геркона. Подключение к Arduino.
KY-021 – Модуль на основе геркона, является датчиком магнитного поля. При попадании в магнитное поле геркона, распложеннего в стекляной колбе, замыкает цепь. Герконы широко применяются в охранных системах. Это связано с небольшим размером геркона и возможности работать датчика без прямого взаимодействия с магнитом. Магнит можем расположить за небольшой стенкой или в корпусе и при этом на работоспособность модуля KY-021 это никак не повлияет.
Описание модуля наклона KY-021.
Модуль KY-021 для Arduino оснащён герконом. Геркон представляет собой магнитный датчик, который нормально открыт и замыкается под воздействием магнитного поля.

Характеристики KY-021.
Модуль мини-герконового переключателя KY-021 состоит из резистора 10 кОм и небольшого геркона, который приводится в действие магнитным полем и обычно используется в механических системах в качестве датчиков приближения. Модуль совместим с популярными отладочными платами, такими как Arduino, Teensy и ESP8266.
Принципиальная схема модуля KY-021.

Схема подключения модуль KY-021.

Подключите линию питания (посередине) и землю (-) модуля к +5 и GND соответственно. Контакт сигнала (S) подключите к контакту 2 на Arduino.
Схема подключения модуля геркона KY-021 к Arduino UNO.

Схема подключения модуля геркона KY-021 к Arduino NANO.

Пример кода включения светодиода при обнаружении магнитного поля с помощью геркона.
Следующий скетч включает встроенный светодиод, который подключён к 13 pin на Arduino. Это происходит, когда модуль обнаруживает магнитное поле. Для этого поместите магнит рядом с KY-021, чтобы сработал геркон.
int led = 13 ;// назначение пина для светодиода int miniReedSensorPin = 2; // назначение пина для геркона int value ;// переменная для хранения положения геркона void setup () < pinMode (led, OUTPUT) ;// пин светодиода работает как выход pinMode (miniReedSensorPin, INPUT) ; // пин геркона работает как вход >void loop () < value = digitalRead (miniReedSensorPin) ;// чтение значения с геркона if (value == HIGH) // когда с датчика появляется низкий уровень то светодиод гаснет < digitalWrite (led, HIGH); >else < digitalWrite (led, LOW); >>
Пример2. Включение звуковой сигнализации, когда отсутствует магнитное поле. Используем модули: KY-021 и KY-012.

Чтобы реализовать самую примитивную сигнализацию которая будет издавать звуковой сигнал при открытии дверцы шкафа, где лежит заначка. Добавим в схему еще один модуль, который мы рассматривали в уроке KY-012 — активный звуковой модуль (зуммер). Подключение к Arduino. И сейчас, если нет магнитного поля (дверца открыта) будет включаться светодиод, как в предыдущем примере, и включаться активный звуковой модуле — KY-012.
Схема подключения модулей KY-012, KY-021 к Arduino UNO.

Схема подключения модулей KY-012, KY-021 к Arduino NANO.

Пример кода для модулей KY-012, KY-021 подключенных к Arduino.
int led = 13 ;// назначение пина для светодиода int miniReedSensorPin = 2; // назначение пина для геркона int buzzerPin = 3; // активный звуковой модуль (зуммер) int value ;// переменная для хранения положения геркона void setup () < pinMode (led, OUTPUT) ;// пин светодиода работает как выход pinMode (buzzerPin, OUTPUT);// пин зуммера работает как выход pinMode (miniReedSensorPin, INPUT) ; // пин геркона работает как вход >void loop () < value = digitalRead (miniReedSensorPin) ;// чтение значения с геркона if (value == HIGH) // когда с датчика появляется низкий уровень то светодиод гаснет < digitalWrite (led, HIGH); digitalWrite (buzzerPin, HIGH); >else < digitalWrite (led, LOW); digitalWrite (buzzerPin, LOW); >>
Код несложный. При желании его можно дополнить, например, добавить время ожидания до подачи звукового сигнала.
В данном примере можно заменить зуммер на другой модуль или устройства. Например при использовании ESP8266 или ESP32 можно отправлять уведомление в Whatsapp или Телеграм. Для этого нужно подключение к интернету по Wi-Fi.
Вывод по модулю KY-021.

Геркон используется уже очень долгое время и нашел применение в различных системах. Как я уже говорил выше, его можно использовать в охранной системе или в небольших устройствах, где нужно определить магнитное поле за стеной, например в резервуаре с газом или жидкостью. Вывод сделать можно один: модуль KY-021 можно применить в различных Arduino проектах.
Понравился Урок KY-021 – Модуль на основе геркона. Подключение к Arduino? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Как подключить геркон к Arduino

Название «геркон» происходит от словосочетания «герметичный контакт». И это объясняет его устройство. По сути, геркон – это два разомкнутых (или замкнутых) контакта, находящихся в вакуумной колбе, которые меняют своё состояние на противоположное при воздействии на них магнитного поля. Герконы – очень популярные датчики, которые используются во многих задачах. Это и контроль открытия/закрытия дверей, разнообразные счётчики срабатываний, счётчики скорости и т.д. Давайте посмотрим, как подключить геркон к Arduino и посмотрим, как он работает.
Инструкция по подключению геркона к Arduino
- Arduino UNO или иная совместимая плата;
- геркон или модуль с герконом;
- постоянный магнит;
- соединительные провода (рекомендую вот такой набор);
- макетная плата (breadboard);
- персональный компьютер со средой разработки Arduino IDE.
1 Схема подключениягеркона к Arduino
Используем вот такой модуль с герконом. Подключим его к Arduino по приведённой схеме. Питание осуществляется от 5 В или от 3,3 В. Сигнал подключим к цифровому пину D2.
Модуль с герконом содержит переменный резистор номиналом 10 кОм. Этим резистором можно установить порог срабатывания геркона и таким образом отрегулировать чувствительность. Также модуль содержит компаратор LM393 для генерирования цифрового сигнала при срабатывании магнитного датчика.

2 Скетч обработкисрабатывания геркона
Напишем скетч обработки срабатывания геркона. Тут всё просто.
int switchPin = 2; // к выводу 2 подключён геркон int ledPin = 13; // к пину 13 подключён встроенный светодиод void setup() pinMode(switchPin, INPUT); // задаём вывод 2 в качестве входа (будем считывать с него) digitalWrite(switchPin, HIGH); // активируем внутренний подтягивающий резистор вывода pinMode(ledPin, OUTPUT); // задаём вывод 13 в качестве выхода Serial.begin(9600); // задействуем последовательный порт > void loop() int g = digitalRead(switchPin); // считываем показания с геркона digitalWrite(ledPin, !g); // инвертированные показания записываем в порт со светодиодом Serial.println(g); // посылаем в последовательный порт значения с геркона //когда геркон замкнут, значение "0" (LOW), когда разомкнут - "1" (HIGH) delay(20); // повторяем цикл через 20 мсек >
Задаём номер пина, к которому подключаем выход модуля – «2», и включаем его на «прослушку». Активируем подтягивающий резистор на ножке «2». Задаём 13 пин в качестве выходного. Включаем в работу последовательный порт на скорости 9600 бод. А затем каждые 20 миллисекунд считываем показания геркона и выдаём значение в порт. Если геркон разомкнут – выводится «1», если замкнут – выводится «0». Кроме того, светодиод на 13-ой ножке Arduino светится, пока замкнуты контакты геркона.
Обратите внимание на инверсию считываемого с датчика сигнала.
3 Проверка работыдатчика с герконом
Подключим питание к Arduino. На модуле загорится светодиод, сигнализирующий о наличии питания модуля.
Теперь поднесём к геркону постоянный магнит – контакты геркона замкнутся, и загорится светодиод, показывающий срабатывание геркона. Снова уберём магнит – геркон разомкнётся, и светодиод погаснет. Если мы включим монитор последовательного порта, то увидим срабатывания геркона в виде нулей среди потока единиц при разомкнутом контакте.

4 Подключение герконак Arduino напрямую
Возьмём обычный геркон, без модуля (например, вот такой), и подключим его к Arduino. Геркон подключается аналогично кнопке. Код скетча останется таким же.
Соберём схему как на иллюстрации, включим питание Arduino. Если поднести постоянный магнит к геркону – светодиод Arduino загорится и будет светить пока замкнуты контакты геркона.

С помощью геркона можно сделать, например, датчик открытия двери или окна, датчик определения скорости вращения колеса или датчик уровня воды, и много чего ещё. Но геркон, всё же, является электромеханическим устройством, и срок его эксплуатации зависит от интенсивности использования. Поэтому можно использовать вместо геркона магнитный датчик Холла, о чём рассказывается в этой статье.
Последнее изменениеВоскресенье, 13 Январь 2019 18:08 Прочитано 40158 раз
Поблагодарить автора:
Поделиться

Похожие материалы (по тегу)
Последнее от .aave.
- Как провести моделирование с помощью ModelSim — Altera
- Как провести симуляцию сигнала в Simulation Waveform Editor
- Как прочитать билет на метро и автобус с помощью Arduino
- Что такое Arduino и что с ним можно сделать
- Как подключить к Arduino модуль Bluetooth
Другие материалы в этой категории:
11 комментарии
Толик 01.11.2019 19:37 Комментировать как подключить 2 (два) геркона на одновременную работу и передать данные о состоянии герконов с помощью nRF24LO1нужен скетчь ( NANO )
aave1 02.11.2019 19:08 Комментировать Подключить два геркона к Arduino можно абсолютно аналогично тому, как описано здесь. А работу с беспроводным модулем nRF24LO1 я ещё здесь не разбирал, но скоро сделаю. Пока что — воспользуйтесь одной из многих библиотек для этих модулей. Например, этой https://iarduino.ru/file/27.html. Там же и примеры.
Толик 02.11.2019 20:12 Комментировать Спасибо ВАМ, я тока начинаю с ардуино, а как будет выглядеть скетчь на два геркона исключающее дребезг контактов
aave1 03.11.2019 16:49 Комментировать Толик, геркон это, по сути, кнопка. Как подключить к Arduino кнопку без дребезга, было рассказано в этой статье: https://soltau.ru/index.php/arduino/item/376-kak-podklyuchit-knopku-k-arduino
Толик 03.11.2019 19:13 Комментировать aave1 спасибо. значит ничего не меняя в этом скетче просто загрузить его, а в каком месте кода указать второй геркон , чтоб работали одновременно
aave1 03.11.2019 23:55 Комментировать В цикле «void loop()». В нём последовательно и непрерывно выполняются инструкции скетча. Только теперь вместо одного геркона данные будут считываться с двух. Примерно так:
void loop() int ger1 = digitalRead(pin1);
int ger2 = digitalRead(pin2);
// . далее делаем что-то с этими значениями.
>
Это, конечно, упрощённо, и без учёта дребезга контактов. О борьбе с дребезгом контактов рассказывалось здесь: https://soltau.ru/index.php/arduino/item/393-kak-izbavitsya-ot-drebezga-kontaktov-pri-podklyuchenii-knopki-k-arduino
Толик 04.11.2019 14:35 Комментировать aave1 Большое спасибо, попробую переписать код..
Чингис 12.11.2019 19:55 Комментировать Здравствуйте! Помогите пожалуйста. Поставил доп циркуляционный насос для настенного котла, но появилась проблема, что бы использовать горячую воду мне приходится отключать насос. Хотел это дело автоматизировать спомошью ардуино но в спрграмированием проблемы .В котле есть датчик протока на линии горячей воды. Клапон с герконом ( турбика с магнитом на лопасте крутится и замыкает геркон ) Помогите с скетчем. Ка сделать так, что бы реле остовалось включёным, пока поступают импульсы с геркона и отключалось когда импульсы перестали поступать.
aave1 19.11.2019 17:49 Комментировать Чингис, добрый день! Ваш проект интересный, но связан со сферой жизни и здоровья. Поэтому использовать Ардуино в таких целях я бы не стал. А если бы и стал, то, по крайней мере, нужно написать надёжную программу и протестировать её в различных ситуациях, в том числе и нештатных. Это занимает время и немалое. Поэтому лучше обратитесь к профессионалам или купите профессиональное оборудование для этой цели.
Алексей 13.06.2021 00:38 Комментировать Здравствуйте. Заинтересовался Arduino. Подскажите, можно ли датчик открытия двери подключить к Arduino с модулем Wi-Fi для дальнейшей обработки этого сигнала в компьютерной программе по своему усмотрению? Заранее спасибо!