Датчик Холла и Arduino: A3144 и 49E для магнитов и измерения оборотов
Датчик Холла и Arduino: цифровой A3144 и аналоговые KY-024 / 49E, подтяжка, полюс и сила поля, подсчёт оборотов, датчик двери, встроенный датчик ESP32 и сравнение с герконом.
Датчик Холла — это маленькая полупроводниковая микросхема, которая без всяких движущихся частей определяет наличие магнита, его полярность и силу поля. В проектах на Arduino с ним считают обороты мотора, измеряют скорость велосипеда, узнают, открыта ли дверь, или читают положение джойстика. Чехол-книжка, который гасит экран телефона, сигнал оборотов компьютерного вентилятора и датчики скорости колёс в автомобилях — всё это работает на эффекте Холла. В любительских наборах чаще всего встречаются два типа: цифровой A3144, который выдаёт сигнал «вкл/выкл», и аналоговый 49E (модуль KY-024), который выдаёт силу поля в виде напряжения.
В этом руководстве простыми словами объясним физику эффекта Холла, затем покажем разницу между цифровыми и аналоговыми датчиками, как их подключать и зачем им нужен подтягивающий резистор. После этого обнаружим магнит с помощью A3144, измерим с 49E, какой полюс приближается и сколько гаусс в поле, и посчитаем обороты мотора через прерывание. Ещё здесь есть ответ на вопрос, зачем нужен встроенный датчик Холла ESP32 и почему его убрали в новых версиях, код на MicroPython для Raspberry Pi Pico и сравнение датчика Холла с герконом.

Что такое эффект Холла и как работает датчик Холла?
В 1879 году Эдвин Холл обнаружил: если на тонкий проводник с током подать магнитное поле под прямым углом, между двумя краями проводника появляется небольшое напряжение. Причина в том, что движущиеся заряды в магнитном поле отклоняются в сторону (сила Лоренца): электроны скапливаются у одного края пластины, у другого их не хватает, и эта разница измеряется как напряжение Холла. Оно пропорционально силе поля, а при смене направления поля меняет знак. В полупроводниках эффект гораздо сильнее, чем в металлах, но всё равно это лишь микровольты–милливольты. Поэтому в микросхеме датчика Холла рядом с пластиной Холла стоят стабилизатор, усилитель, а в цифровых моделях ещё триггер Шмитта и выходной транзистор.
Индукцию магнитного поля измеряют в гауссах (G) или миллитеслах (mT); 1 mT = 10 G. Магнитное поле Земли — примерно 0,25–0,65 G, поэтому на датчики Холла оно не влияет. У поверхности маленького неодимового магнита несколько тысяч гаусс, и с расстоянием это значение падает очень быстро: если увеличить расстояние вдвое, поле уменьшится примерно в восемь раз. Поэтому дальность обнаружения, в зависимости от порога датчика и размера магнита, обычно лежит в пределах от нескольких миллиметров до нескольких сантиметров.
Типы датчиков Холла: A3144, KY-024 / 49E и другие
По типу выхода датчики Холла делятся на три основные группы. У униполярных ключей (unipolar switch), например A3144, выход переходит в LOW, только когда достаточно близко подходит один полюс (у A3144 — южный), и возвращается в HIGH, когда магнит удаляется. У датчиков с фиксацией (latch), например US1881, южный полюс переводит выход в одно состояние, северный — в другое, и последнее состояние сохраняется даже после того, как магнит ушёл; такой тип идеален для моторов, вокруг которых по очереди расположены магниты N–S. У линейных (linear) датчиков, например 49E, выход — не ключ, а аналоговое напряжение, пропорциональное силе поля: без магнита оно равно половине напряжения питания, при приближении одного полюса растёт, а при другом — падает.
| Характеристика | A3144 (цифровой) | 49E / SS49E (аналоговый) | US1881 (с фиксацией) |
|---|---|---|---|
| Питание | 4,5–24 V | 2,7–6,5 V | 3,5–24 V |
| Выход | Открытый коллектор, LOW при магните | Аналоговый, VCC/2 при нулевом поле | Открытый сток, LOW у S, HIGH у N |
| Реагирует на | Только южный полюс (S) | Оба полюса, со знаком | S включает, N выключает |
| Порог / чувствительность | Точка срабатывания около 70–350 G | Обычно 1,4 mV/G при 5 V | Обычно ±95 G |
| Нужна подтяжка? | Да (10 kΩ или INPUT_PULLUP) | Нет | Да |
| Название модуля | KY-003 | KY-024 (с DO через LM393), KY-035 | В виде модуля встречается редко |
| Выводы (маркировкой к себе) | VCC, GND, OUT | VCC, GND, OUT | VDD, GND, OUT |
Подключение датчика Холла к Arduino и подтягивающий резистор
Выход A3144 — транзистор с открытым коллектором: при магните он соединяет выход с GND, а без магнита ни с чем его не соединяет, и выход «висит в воздухе». Висящий пин из-за помех читает случайные HIGH и LOW. Поэтому выход нужно подтянуть к питанию через резистор — это и называется подтяжкой (pull-up). На Arduino проще всего включить встроенный резистор платы на 20–50 kΩ командой pinMode(pin, INPUT_PULLUP). Если кабель длинный, вокруг много помех или нужно считать быстро вращающийся вал, внешний резистор 10 kΩ между выходом и питанием даёт более чистые фронты. У открытого коллектора есть полезный побочный эффект: если питать датчик от 5 V, а выход подтянуть к 3,3 V, его можно безопасно использовать и с платами на 3,3 V вроде ESP32 и Pico.
| Подключение | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| A3144 VCC | 5V | VIN (5 V) | VBUS (5 V) |
| A3144 OUT | D2 + INPUT_PULLUP (или 10 kΩ → 5V) | GPIO 27 + INPUT_PULLUP (или 10 kΩ → 3V3) | GP15 + PULL_UP (или 10 kΩ → 3V3) |
| 49E VCC | 5V | 3V3 | 3V3 |
| 49E OUT | A0 | GPIO 34 | GP26 (ADC0) |
| GND (оба датчика) | GND | GND | GND |
Обнаружение магнита с A3144
- Если держать A3144 маркировкой к себе, выводы слева направо — VCC, GND и OUT. Подключи VCC к 5V, GND к GND, а OUT к D2.
- Загрузи код ниже и открой монитор порта на скорости 9600 бод.
- Поднеси одну грань магнита к стороне датчика с маркировкой. Если встроенный светодиод платы не загорается, переверни магнит: A3144 реагирует только на южный полюс.
- Отметь расстояния, на которых светодиод включается и выключается; разница между ними — встроенный гистерезис датчика.
1const byte HALL_PIN = 2; // A3144 OUT
2const byte LED_PIN = 13; // dahili LED / onboard LED
3
4bool lastMagnet = false;
5
6void setup() {
7 pinMode(HALL_PIN, INPUT_PULLUP); // açık kolektör çıkış için pull-up / pull-up for the open-collector output
8 pinMode(LED_PIN, OUTPUT);
9 Serial.begin(9600);
10}
11
12void loop() {
13 bool magnet = digitalRead(HALL_PIN) == LOW; // mıknatıs varken LOW / LOW when a magnet is present
14 digitalWrite(LED_PIN, magnet ? HIGH : LOW);
15
16 if (magnet != lastMagnet) { // yalnız durum değişince yaz / print only on change
17 Serial.println(magnet ? F("Miknatis var / magnet detected") : F("Miknatis yok / no magnet"));
18 lastMagnet = magnet;
19 }
20}В отличие от геркона или кнопки, A3144 не нуждается в антидребезге. Триггер Шмитта внутри датчика гарантирует, что точка срабатывания (BOP) как минимум на 20 G выше точки отпускания (BRP): даже если магнит колеблется на границе, выход не прыгает туда-сюда. Подвижного контакта нет, поэтому фронты на выходе чистые, а срабатывать датчик может тысячи раз в секунду. Помни, что логика инверсная: с INPUT_PULLUP при магните читается LOW, а без него — HIGH; это та же логика подтяжки, что и при подключении кнопки.
Измеряем полюс и силу поля с KY-024 / 49E
49E — линейный датчик: при питании 5 V без магнита на его выходе около 2,5 V, а на каждый гаусс напряжение меняется обычно на 1,4 mV. Когда к стороне с маркировкой подходит южный полюс, напряжение растёт, при северном — падает. Так можно узнать не только, есть ли рядом магнит, но и какой полюс приближается и насколько сильно поле: B (G) = (Vout − Vzero) / 0,0014. На модуле KY-024 пин AO — это напрямую выход 49E, а пин DO — цифровой выход компаратора LM393, который переключается, когда поле переходит порог, выставленный потенциометром. Код ниже при запуске измеряет нулевую точку, затем выводит поле в гауссах и миллитеслах и сообщает, какой это полюс.
1const byte HALL_PIN = A0; // 49E OUT ya da KY-024 AO / 49E OUT or KY-024 AO
2const float VCC = 5.0;
3const float SENSITIVITY = 0.0014; // 1,4 mV/G (5 V'ta tipik) / 1.4 mV/G (typical at 5 V)
4const float DEAD_BAND = 20.0; // bu değerin altını yok say (G) / ignore below this (G)
5
6float zeroVolt = 2.5;
7
8float readVolt() {
9 long sum = 0;
10 for (byte i = 0; i < 32; i++) sum += analogRead(HALL_PIN); // 32 ölçüm ortalaması / average of 32 readings
11 return sum / 32.0 * VCC / 1023.0;
12}
13
14void setup() {
15 Serial.begin(9600);
16 delay(200);
17 zeroVolt = readVolt(); // mıknatıs yokken sıfır noktası / zero point with no magnet nearby
18 Serial.print(F("Sifir / zero: "));
19 Serial.print(zeroVolt, 3);
20 Serial.println(F(" V"));
21}
22
23void loop() {
24 float gauss = (readVolt() - zeroVolt) / SENSITIVITY;
25 Serial.print(gauss, 0);
26 Serial.print(F(" G ("));
27 Serial.print(gauss / 10.0, 1); // 10 G = 1 mT
28 Serial.print(F(" mT) "));
29 if (gauss > DEAD_BAND) Serial.println(F("Guney kutbu / south pole"));
30 else if (gauss < -DEAD_BAND) Serial.println(F("Kuzey kutbu / north pole"));
31 else Serial.println(F("Alan yok / no field"));
32 delay(250);
33}10-битный АЦП Uno делит 5 V на 1024 шага, то есть один шаг — примерно 4,9 mV; с 49E это даёт разрешение около 3,5 G. Маркировка полюсов у разных производителей может отличаться, поэтому в первый раз проверь её компасом: конец стрелки, указывающий на север, поворачивается к южному полюсу магнита. Датчик насыщается примерно на ±1000 G: если почти прижать к нему очень сильный магнит, значение перестаёт расти. Нулевая точка может уплывать на несколько милливольт от температуры, поэтому для точных измерений повторяй обнуление прямо перед замером.
Измерение оборотов и скорости датчиком Холла
Чтобы измерить обороты мотора, вентилятора или колеса, на вал или обод клеят маленький магнит, а A3144 закрепляют так, чтобы магнит проходил перед ним один раз за оборот. При каждом проходе выход один раз переходит в LOW. Если ловить импульсы через digitalRead() в loop(), на высокой скорости часть из них теряется; правильный способ — прерывание. Код ниже измеряет время между двумя импульсами с точностью до микросекунды и считает скорость по формуле об/мин = 60 000 000 / (период_µs × число_магнитов). Если импульсов нет 2 секунды, вал считается остановленным. Как работают прерывания, подробно рассказано в руководстве прерывания в Arduino.
1const byte HALL_PIN = 2; // A3144 OUT, Uno'da kesme pini (INT0) / interrupt pin on the Uno (INT0)
2const byte MAGNETS = 1; // mildeki mıknatıs sayısı / magnets on the shaft
3const unsigned long MIN_GAP_US = 2000; // 2 ms'den sık darbeler gürültüdür / pulses closer than 2 ms are noise
4const unsigned long STOP_US = 2000000; // 2 sn darbe yoksa durdu / no pulse for 2 s means stopped
5
6volatile unsigned long lastPulse = 0;
7volatile unsigned long period = 0; // iki darbe arası süre (µs) / time between pulses (µs)
8
9void onPulse() {
10 unsigned long now = micros();
11 unsigned long gap = now - lastPulse;
12 if (gap > MIN_GAP_US) {
13 period = gap;
14 lastPulse = now;
15 }
16}
17
18void setup() {
19 pinMode(HALL_PIN, INPUT_PULLUP);
20 attachInterrupt(digitalPinToInterrupt(HALL_PIN), onPulse, FALLING); // mıknatıs gelince LOW'a iner / falls LOW when the magnet arrives
21 Serial.begin(9600);
22}
23
24void loop() {
25 noInterrupts(); // iki değişkeni birlikte oku / read both variables together
26 unsigned long p = period;
27 unsigned long last = lastPulse;
28 interrupts();
29
30 float rpm = 0;
31 if (p > 0 && micros() - last < STOP_US) {
32 rpm = 60000000.0 / ((float)p * MAGNETS);
33 }
34 Serial.print(F("RPM: "));
35 Serial.println(rpm, 0);
36 delay(500);
37}В коде есть блокировка на 2 мс: с одним магнитом это позволяет измерять до 30 000 об/мин — с запасом для большинства любительских моторов. Если поставить на вал два или четыре магнита, на низкой скорости показания будут обновляться чаще; достаточно изменить MAGNETS. Располагай магниты равномерно: перевес на одну сторону заставит быстро вращающийся вал вибрировать. Жёлтый провод компьютерного вентилятора — это на самом деле выход с открытым коллектором от датчика Холла внутри, и он даёт два импульса за оборот; чтобы читать обороты вентилятора, используй тот же код с MAGNETS = 2. Расчёт длины окружности и км/ч для велоспидометра есть в руководстве по геркону; с датчиком Холла формула та же.
Датчик двери и крышки на датчике Холла
Для датчика двери магнит ставят на подвижную створку, а A3144 — на дверную коробку, так чтобы при закрытой двери южный полюс магнита смотрел на сторону датчика с маркировкой. Когда дверь закрыта, выход в LOW; когда открывается — в HIGH. Даже если провод оборвётся, подтяжка вытянет пин в HIGH, и система увидит «дверь открыта», так что неисправность остаётся на безопасной стороне. У датчика Холла здесь два преимущества: без подвижного контакта он не изнашивается на вибрирующих дверях или крышках, которые открываются и закрываются много раз в секунду, и видит магнит даже через стенку герметичного корпуса. Минус в том, что он постоянно потребляет ток: A3144 берёт около 4–5 mA, и один только датчик посадил бы батарею на 2000 mAh примерно за 18 дней. Для датчика двери, который месяцами должен работать от батареек, лучше подходит геркон, вообще не потребляющий энергии.
Встроенный датчик Холла ESP32
В оригинальном чипе ESP32 есть маленький датчик Холла, и в версиях 2.x ядра Arduino ESP32 его можно читать функцией hallRead(). Но этот датчик сильно шумит и заметно реагирует, только когда сильный магнит почти касается металлического экрана модуля; кроме того, во время измерения он занимает GPIO 36 и GPIO 39, так что если к этим пинам что-то подключено, результаты портятся. В новых чипах вроде ESP32-S2, S3 и C3 его нет вообще, а после того как Espressif убрала поддержку в ESP-IDF 5, функции hallRead() в ядре Arduino ESP32 3.x больше нет. Код ниже компилируется в обеих версиях: на 2.x он выводит среднее значение, на 3.x вместо этого показывает предупреждение. Для серьёзного проекта всегда лучше подключить к ESP32 внешний A3144 или 49E; общие возможности платы описаны в статье что такое ESP32.
1// ESP32 dahili Hall sensörü (yalnız orijinal ESP32) / built-in Hall sensor (original ESP32 only)
2void setup() {
3 Serial.begin(115200);
4}
5
6void loop() {
7#if ESP_ARDUINO_VERSION_MAJOR < 3
8 long sum = 0;
9 for (int i = 0; i < 100; i++) {
10 sum += hallRead(); // GPIO 36 ve 39'u kullanır / uses GPIO 36 and 39
11 }
12 Serial.println(sum / 100); // gürültülü, ortalama al / noisy, so average it
13#else
14 Serial.println("hallRead() 3.x cekirdekte yok / not available in core 3.x");
15#endif
16 delay(200);
17}Измерение оборотов на Raspberry Pi Pico (MicroPython)
На Pico питай A3144 от 5 V с пина VBUS, выход подключи к GP15 и включи встроенный подтягивающий резистор пина; этот резистор идёт к 3,3 V, поэтому 5 V на пин никогда не попадут. Код ниже считает импульсы через прерывание и каждую секунду читает и обнуляет счётчик. Короткое отключение прерываний на время чтения счётчика не даёт импульсу проскочить между чтением и обнулением и потеряться. С одним магнитом у этого способа разрешение 60 об/мин; для более точного результата можно, как в примере для Arduino, измерять время между двумя импульсами через time.ticks_us().
1from machine import Pin, disable_irq, enable_irq
2import time
3
4hall = Pin(15, Pin.IN, Pin.PULL_UP) # A3144 OUT (sensör VBUS'tan 5 V ile) / A3144 OUT (sensor on 5 V from VBUS)
5MAGNETS = 1 # mildeki mıknatıs sayısı / magnets on the shaft
6count = 0
7last_us = 0
8
9def on_pulse(pin):
10 global count, last_us
11 now = time.ticks_us()
12 if time.ticks_diff(now, last_us) > 2000: # 2 ms gürültü filtresi / 2 ms noise filter
13 count += 1
14 last_us = now
15
16hall.irq(trigger=Pin.IRQ_FALLING, handler=on_pulse)
17
18while True:
19 time.sleep(1)
20 state = disable_irq() # sayacı güvenle oku / read the counter safely
21 pulses = count
22 count = 0
23 enable_irq(state)
24 print("RPM:", pulses * 60 // MAGNETS)Датчик Холла или геркон?
Оба обнаруживают магнит, но совершенно по-разному. Геркон — механический переключатель: две металлические пластинки внутри стеклянной колбы соприкасаются, когда рядом оказывается магнит, и энергии он не потребляет вообще. Датчик Холла — электронная микросхема без движущихся частей, которой нужно питание. Короткое правило: геркон — для датчика, который срабатывает редко и месяцами работает от батареек; датчик Холла — для быстро вращающегося вала, условий с вибрацией и любых задач, где нужны полюс или сила поля.

| Характеристика | Датчик Холла (A3144 / 49E) | Геркон |
|---|---|---|
| Принцип работы | Полупроводник, без движущихся частей | Механический контакт |
| Питание | Нужно (около 4–6 mA) | Не нужно |
| Полюс и сила поля | A3144 — только южный; 49E даёт полюс и силу | Полюс не важен, только «есть / нет» |
| Скорость | До десятков kHz, чистые фронты | Сотни Hz, дребезг контактов |
| Срок службы и надёжность | Не изнашивается, выдерживает вибрацию | Миллионы срабатываний, стекло может разбиться |
| Лучшее применение | Обороты, скорость, положение, определение полюса | Датчики дверей и окон на батарейках |
Идеи проектов с датчиком Холла
- Велоспидометр: закрепи магнит на спице, а A3144 на вилке; выводи скорость, пройденное расстояние и среднюю скорость на OLED-дисплей.
- Тахометр для мотора и вентилятора: измеряй обороты DC-мотора или компьютерного вентилятора и следи за реальной скоростью, пока регулируешь её ШИМ.
- Анемометр: закрепи магнит на оси чашечного ротора, вычисляй скорость ветра по оборотам и записывай её с помощью ESP32.
- Расходомер воды: внутри датчиков потока вроде YF-S201 тоже стоит датчик Холла; считай импульсы, чтобы измерять литры, подробности в руководстве по датчику расхода воды.
- Шкатулка с секретом или замок для ящика: 49E, спрятанный в крышке, открывает замок, только когда магнит приложен точно в нужное место.
- Сигнализация на дверь или крышку: сигнализация на A3144, которая включает зуммер или через ESP32 отправляет уведомление на телефон, когда крышку открывают.
Частые ошибки и как их исправить
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Пин читает случайные HIGH и LOW | На выходе A3144 нет подтяжки | Используй INPUT_PULLUP или поставь 10 kΩ между выходом и VCC |
| При приближении магнита ничего не происходит | Не тот полюс: A3144 реагирует только на южный полюс | Переверни магнит и держи его прямо напротив стороны с маркировкой |
| Датчик работает нестабильно на ESP32 или Pico | A3144 питается от 3,3 V | Питай датчик от 5 V, а подтяжку подключи к 3,3 V |
| На высокой скорости обороты занижены или скачут | Импульсы читаются в loop() и теряются | Используй прерывание через attachInterrupt() |
| 49E показывает значение без магнита | Нулевая точка не равна 2,5 V или уплыла | Измеряй нулевую точку при запуске и вычитай её |
| hallRead() на ESP32 не компилируется | Используется ядро Arduino ESP32 3.x | Возьми внешний датчик Холла или перейди на ядро 2.x |
Датчик Холла — самый гибкий способ обнаружить магнит без контакта, шума и износа: A3144 даёт быстрый и чистый сигнал «вкл/выкл», 49E — полюс и силу поля, а прерывания — надёжное измерение оборотов. Если помнить о подтягивающем резисторе, правильном полюсе и особенностях питания на платах с 3,3 V, всё заработает с первой попытки. В приложении BlueGrays есть проекты «Чтение геркона» и «Датчик двери на герконе», а также примеры с кнопкой и прерываниями, проекты «Сигнализация движения на ESP32» и «Антидребезг кнопки на Pico» — со схемами подключения и кодом, шаг за шагом.
Частые вопросы
Как работает датчик Холла?
Внутри датчика Холла есть тонкая полупроводниковая пластина, по которой течёт ток. Когда на пластину под прямым углом действует магнитное поле, заряды отклоняются к одному краю, и между краями появляется небольшое напряжение, пропорциональное полю. Усилитель внутри датчика усиливает это напряжение, а в цифровых моделях пороговая схема превращает его в выход «вкл/выкл».
Зачем A3144 подтягивающий резистор?
Выход A3144 — открытый коллектор: при магните он соединяет выход с GND, а без магнита ни с чем его не соединяет. Висящий пин из-за помех читает случайные значения, поэтому выход нужно подтянуть к питанию через резистор. На Arduino достаточно INPUT_PULLUP; при длинных проводах и высоких скоростях лучше внешний резистор 10 kΩ.
На какой полюс реагирует A3144?
A3144 — униполярный ключ: он переводит выход в LOW, только когда к стороне с маркировкой достаточно близко подходит южный полюс. Если поднести северный полюс, ничего не произойдёт. Если полюс магнита неизвестен, попробуй обе грани или проверь его линейным датчиком вроде 49E.
Чем KY-024 отличается от KY-003?
KY-003 — модуль с цифровым датчиком A3144, он сообщает только, есть магнит или нет. На KY-024 стоят линейный датчик 49E и компаратор LM393: пин AO выдаёт силу поля в виде аналогового значения, а пин DO — цифровой сигнал по порогу, который выставляется потенциометром.
С какого расстояния датчик Холла обнаруживает магнит?
Расстояние зависит от силы магнита и порога датчика. Маленький неодимовый магнит обычно вызывает срабатывание A3144 с 1–3 см; со слабым ферритовым магнитом это падает до нескольких миллиметров. Магнитное поле очень быстро ослабевает с расстоянием, поэтому самый действенный способ увеличить дальность — взять магнит побольше или посильнее.
Можно ли использовать встроенный датчик Холла ESP32?
В оригинальном ESP32 есть встроенный датчик Холла, и в ядре Arduino ESP32 2.x его можно читать через hallRead(). Но он сильно шумит, замечает только очень близкий и сильный магнит и занимает GPIO 36 и 39. На ESP32-S2, S3 и C3 его нет, а из ядра Arduino ESP32 3.x функцию hallRead() убрали; для серьёзных проектов используй внешний датчик.
Что собрать после прочтения
Все проекты
Управление светодиодом кнопкой (удержание)
Как дверной звонок: свет горит, пока ты нажимаешь, и гаснет, когда отпускаешь. Arduino всё время слушает кнопку; пока она нажата, светодиод горит, а как только ты убираешь палец, он гаснет. Эта просте

Управление светодиодом кнопкой на ESP32 (удержание)
Светодиод горит, когда кнопка нажата, и гаснет, когда её отпускают. Показывает, как используются цифровой входной пин ESP32 и встроенный подтягивающий резистор. Режим INPUT_PULLUP избавляет от внешнего резистора.

Чтение геркона
Интересно, что за магнитный выключатель стоит в сигнализации на дверях и окнах? Когда к модулю геркона подносят магнит, крошечный контакт внутри замыкается; Arduino читает его раз в секунду и выводит

Датчик двери на герконе
Узнай, открыта дверь или закрыта, просто взглянув на огонёк. Маленький магнит крепится на дверь, а чувствительный к магниту контакт — на раму; когда дверь закрыта, они рядом, и горит зелёный светодиод

Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)
Умная охранная сигнализация, которая при обнаружении движения PIR-датчиком включает зуммер и светодиод и одновременно сразу отправляет владельцу уведомление в Telegram. В ней есть 30-секундная пауза, ограничивающая частоту повторных тревог; этот механизм не проверяет срабатывания PIR и не устраняет ложные тревоги. Подходит для дома, гаража, склада или мастерской. С ESP32-CAM можно добавить уведомления с фото, а с обычной ESP32 DevKit V1 приходят текстовые.

Антидребезг кнопки на Pico: IRQ против программного опроса
Нажимаешь кнопку один раз, а код насчитывает 3–4? Это дребезг контактов — металлические контакты колеблются доли миллисекунды! Сравни в мониторе два способа подсчёта рядом: сырой опрос (ловит дребезг и считает лишнее) и IRQ + программный антидребезг (точно). Изучи физику дребезга, программный антидребезг (ticks_diff() > 50ms), регистрацию прерывания Pin.irq(), триггер IRQ_FALLING, обработчики ISR и безопасность global в ISR.

Детектор движения на датчике движения
Простой охранник, который сообщает, что кто-то вошёл в комнату. Датчик движения улавливает тепло человеческого тела, а Arduino держит светодиод включённым, пока есть движение, и гасит его, когда движе
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

