Обзор
KY-021 — это миниатюрный модуль на базе reed switch (герконового переключателя) для детектирования магнитного поля. Модуль выдает цифровой сигнал и работает при напряжениях 3.3В–5В, что делает его совместимым с большинством микроконтроллеров. Применяется в системах охраны, датчиках положения и проектах, где нужно реагировать на приближение магнита.
KY-021 — модуль с reed switch для обнаружения магнитного поля. Выдает цифровой сигнал (замкнутый/разомкнутый контакт) при наличии магнита. Идеален для охранных датчиков, систем контроля положения и событий приближения магнита.
О модуле KY-021 Mini Magnetic Reed Switch
Модуль KY-021 содержит reed switch (герконовый переключатель), который замыкает контакты при воздействии магнитного поля. В состав модуля входят подтягивающий резистор и светодиодная индикация, что упрощает подключение. Он работает от 3.3В до 5В и выдает цифровой сигнал (LOW при наличии магнита). Распространённые применения: датчики открытия/закрытия дверей и окон, контроль положения, системы охраны.
⚡ Ключевые особенности
- Простое детектирование – Переключатель срабатывает при приближении магнита, обеспечивая надежный цифровой сигнал.
- Гибкое питание – Совместим с логикой 3.3В и 5В, что удобно для ESP32 и Arduino.
- Готов к установке – Встроенный резистор и LED облегчают отладку и монтаж.
Приобретите KY-021
Характеристики KY-021
Полные технические характеристики модуля KY-021 Mini Magnetic Reed Switch.
Распиновка KY-021
Распиновка KY-021 состоит из трёх выводов: питание (VCC), земля (GND) и цифровой выход (S). Герконовый переключатель внутри модуля замыкается при наличии магнитного поля, что даёт LOW на выводе S (при подтяжке к VCC).
- Логика: при магните — замкнуто (LOW), иначе HIGH (подтяжка).
- Подтяжка: на плате обычно уже стоит резистор.
- GPIO: любой цифровой вход microcontroller.
| № | Название | Тип | Описание | Примечания |
|---|---|---|---|---|
| 1 | (-) | Питание | Земля (GND) | Общая земля |
| 2 | (middle) | Питание | Питание 3.3В–5В | Любое в диапазоне |
| 3 | S | Digital | Цифровой выход | LOW при магните, иначе HIGH |
Подключение KY-021 к ESP32
Подключите модуль KY-021 к GPIO микроконтроллера. Поскольку модуль содержит подтягивающий резистор, никаких дополнительных компонентов не требуется. Подайте питание 3.3В (рекомендуется для ESP32) или 5В.
| Вывод KY-021 | Подключение | Вывод ESP32 | Описание |
|---|---|---|---|
| (-) обязательно | → | GND | Общая земля |
| (middle) обязательно | → | 3.3V | Питание (3.3В рекомендуется) |
| S обязательно | → | GPIO4 | Цифровой вход (любой GPIO) |
Устранение неполадок KY-021
Распространённые проблемы и решения, которые помогут запустить датчик.
Датчик всегда показывает HIGH
Нет реакции на магнит
Проблема: цифровой вход всегда HIGH, даже когда магнит рядом.
Возможные причины: модуль не получил питание, проводка не соответствует схеме, неисправен reed switch.
Решение: проверьте, подаётся ли 3.3В/5В на вывод питания, убедитесь что магнит достаточно близко (10–20 мм), проверьте мультиметром замыкание контактов reed switch при поднесении магнита. Удостоверьтесь, что GPIO настроен как INPUT (или INPUT_PULLUP в зависимости от логики).
Случайные срабатывания (дребезг)
Один импульс — много регистраций
Причина: механический reed switch может «дребезжать» при переключении. Также возможны вибрации или помехи на линии.
Решение: добавьте аппаратный debounce-конденсатор (допустим 0.1 мкФ параллельно выводу S) или программную debounce-задержку (например, 50 мс после обнаружения перепада).
Неправильная логика
Модуль ведёт себя наоборот
Комментарий: Некоторые версии модуля могут иметь обратную логику (reed switch между S и GND, без подтяжки к VCC). Если ваш модуль показывает HIGH при магните и LOW без, попробуйте использовать INPUT_PULLUP или измените логику кода на обратную.
Советы по отладке
Serial Monitor
Просмотр состояния датчика
digitalRead(pin) с периодом 200–500 мс. Это позволит увидеть, как меняется состояние при движениях магнита.
Проверка мультиметром
Замкнулся/разомкнут контакт
Дополнительные ресурсы
Примеры программирования KY-021
Готовые к использованию примеры кода для различных платформ и фреймворков.
Пример для Arduino
Совместим с Arduino IDE и платами ESP32
C++
Пример для Arduino
Совместим с Arduino IDE и платами ESP32
int reed_magnet = 10; // Пин, к которому подключен вывод S KY-021
int value; // Временная переменная
void setup() {
pinMode(reed_magnet, INPUT); // Инициализация пина как входа
Serial.begin(9600); // Инициализация Serial Monitor
Serial.println("KY-021 Magnetic field detection");
}
void loop() {
// Считываем текущее состояние пина
value = digitalRead(reed_magnet);
// Если обнаружен магнит (LOW), выводим сообщение
if (value == LOW) {
Serial.println("Magnetic field detected");
delay(100); // Пауза 100 мс
}
}
Этот Arduino скетч подключает KY-021 к цифровому пину 10. При поднесении магнита геркон замыкается, и пин становится LOW (так как на модуле есть подтяжка к VCC). Код периодически опрашивает пин и выводит сообщение в Serial Monitor при обнаружении магнитного поля. Задержка 100 мс снижает нагрузку.
Пример для ESP-IDF
Официальный фреймворк Espressif для разработки IoT
C++
Пример для ESP-IDF
Официальный фреймворк Espressif для разработки IoT
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#define REED_SWITCH_PIN GPIO_NUM_4 // Пин подключения вывода S KY-021
void app_main(void) {
// Конфигурация пина как входа с подтяжкой к VCC (Internal pull-up)
gpio_config_t io_conf = {
.pin_bit_mask = (1ULL << REED_SWITCH_PIN),
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_ENABLE, // Внутренняя подтяжка к 3.3В
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE // Прерывания не используем
};
gpio_config(&io_conf);
printf("KY-021 Magnetic Field Detection Test\n");
while (1) {
int level = gpio_get_level(REED_SWITCH_PIN);
// При наличии магнита геркон замыкается, напряжение LOW (0)
if (level == 0) {
printf("Magnetic field detected\n");
vTaskDelay(pdMS_TO_TICKS(100)); // Задержка 100 мс
}
vTaskDelay(pdMS_TO_TICKS(100)); // Основной опрос 100 мс
}
}
Пример на ESP-IDF настраивает GPIO4 как цифровой вход с внутренней подтяжкой к 3.3В (эквивалент INPUT_PULLUP в Arduino). Когда магнит подносится к модулю, геркон замыкается и пин становится LOW. Программа непрерывно опрашивает пин и выводит сообщение при обнаружении поля. Задержка 100 мс в цикле снижает нагрузку на CPU.
Пример для ESPHome
Конфигурация ESPHome для Home Assistant
YAML
Пример для ESPHome
Конфигурация ESPHome для Home Assistant
# Пример конфигурации ESPHome для KY-021
binary_sensor:
- platform: gpio
pin:
number: GPIO4
mode: INPUT_PULLUP # Подтяжка к 3.3В
name: "KY-021 Magnetic Reed Switch"
filters:
- delayed_on: 50ms # Фильтр дребезга включения
- delayed_off: 50ms # Фильтр дребезга выключения
on_press:
- then:
- lambda: |-
ESP_LOGD("sensor", "Magnetic field detected!");
ESPHome конфигурация определяет binary_sensor на GPIO4 с режимом INPUT_PULLUP. При срабатывании reed switch (замыкании) пин становится LOW, и бинарный сенсор переходит в состояние «ON». Фильтры задержек (50 мс) убирают дребезг. Событие логируется в Home Assistant.
Пример для PlatformIO
Профессиональная среда разработки
C++
Пример для PlatformIO
Профессиональная среда разработки
platformio.ini
[env:esp32]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
src/main.cpp
#define REED_SWITCH_PIN 4
void setup() {
pinMode(REED_SWITCH_PIN, INPUT_PULLUP); // Вход с подтяжкой к 3.3В
Serial.begin(115200);
Serial.println("KY-021 Magnetic Field Detection Test");
}
void loop() {
if (digitalRead(REED_SWITCH_PIN) == LOW) {
Serial.println("Magnetic field detected");
delay(100);
}
delay(100);
}
Проект PlatformIO настраивается для ESP32 на фреймворке Arduino. Пин GPIO4 задаётся как INPUT_PULLUP. При замыкании reed switch (магнит рядом) пин становится LOW, и выводится сообщение. Задержка 100 мс в основном цикле.
Пример для MicroPython
Python для микроконтроллеров
Python
Пример для MicroPython
Python для микроконтроллеров
import machine
import time
REED_SWITCH_PIN = machine.Pin(4, machine.Pin.IN, machine.Pin.PULL_UP)
while True:
if REED_SWITCH_PIN.value() == 0:
print("Magnetic field detected")
time.sleep(0.1)
time.sleep(0.1)
MicroPython скрипт настраивает GPIO4 как вход с внутренней подтяжкой к 3.3В (machine.Pin.PULL_UP). При замыкании reed switch пин становится LOW (0), что вызывает вывод сообщения. Двойная задержка 0.1 секунды (~100 мс) между опросами снижает нагрузку.
Итоги KY-021
Модуль KY-021 — это простой и дешёвый цифровой датчик магнитного поля на базе reed switch. Он работает с напряжениями 3.3В–5В и совместим с Arduino, ESP32, Raspberry Pi через любой GPIO. Благодаря встроенной подтяжке и LED-индикации, модуль готов к использованию «из коробки».
Рекомендации
Убедитесь, что используется сильный неодимовый магнит и расстояние до датчика не превышает 15–20 мм. Для защиты от дребезга добавьте программную или аппаратную фильтрацию (50–100 мс).
Безопасность прежде всего
Проверьте полярность питания (VCC 3.3В/5В). Не замыкайте выводы S на землю или питание вручную — это может повредить пин microcontroller. Используйте стабильный источник питания.
Готовы начать создавать?
Теперь, когда у вас есть вся необходимая информация, пора интегрировать KY-021 в проект на ESP32 и воплотить идеи в жизни!
Изучите альтернативные датчики
Ищете альтернативы KY-021? Посмотрите эти похожие датчики — возможно, они лучше подойдут под задачи вашего проекта.

Модуль фоторезистора KY-018
Фоторезисторный модуль KY-018 изменяет сопротивление в зависимости от освещённости. Подходит для проектов автоматического управления светом...

Модуль датчика температуры KY-001
Температурный датчик на основе DS18B20 с интерфейсом 1-Wire. Измеряет температуру в широком диапазоне...

Модуль фотопрерывателя KY-010
Фоторазрывный модуль KY-010 обнаруживает объекты, прерывающие инфракрасный луч. Используется в системах счёта объектов...