Компоненты · 10 мин чтения

Датчик Холла и 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 V2,7–6,5 V3,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-003KY-024 (с DO через LM393), KY-035В виде модуля встречается редко
Выводы (маркировкой к себе)VCC, GND, OUTVCC, GND, OUTVDD, 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 UnoESP32Raspberry Pi Pico
A3144 VCC5VVIN (5 V)VBUS (5 V)
A3144 OUTD2 + INPUT_PULLUP (или 10 kΩ → 5V)GPIO 27 + INPUT_PULLUP (или 10 kΩ → 3V3)GP15 + PULL_UP (или 10 kΩ → 3V3)
49E VCC5V3V33V3
49E OUTA0GPIO 34GP26 (ADC0)
GND (оба датчика)GNDGNDGND
Официальный диапазон питания A3144 — 4,5–24 V; от 3,3 V он часто вроде бы работает, но ненадёжно. На ESP32 и Pico питай датчик от 5 V, а подтяжку выхода подключай к 3,3 V. Осторожнее с готовыми модулями вроде KY-003: на них есть резистор и светодиод, которые подтягивают выход к VCC. Если питать такой модуль от 5 V, его выход тоже поднимается почти до 5 V и может повредить пин платы на 3,3 V; в этом случае поставь на выход делитель напряжения или используй датчик без модуля.

Обнаружение магнита с A3144

  1. Если держать A3144 маркировкой к себе, выводы слева направо — VCC, GND и OUT. Подключи VCC к 5V, GND к GND, а OUT к D2.
  2. Загрузи код ниже и открой монитор порта на скорости 9600 бод.
  3. Поднеси одну грань магнита к стороне датчика с маркировкой. Если встроенный светодиод платы не загорается, переверни магнит: A3144 реагирует только на южный полюс.
  4. Отметь расстояния, на которых светодиод включается и выключается; разница между ними — встроенный гистерезис датчика.
C++ (Arduino IDE)
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, который переключается, когда поле переходит порог, выставленный потенциометром. Код ниже при запуске измеряет нулевую точку, затем выводит поле в гауссах и миллитеслах и сообщает, какой это полюс.

C++ (Arduino IDE)
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.

C++ (Arduino IDE)
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.

C++ (Arduino IDE)
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().

MicroPython
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 или PicoA3144 питается от 3,3 VПитай датчик от 5 V, а подтяжку подключи к 3,3 V
На высокой скорости обороты занижены или скачутИмпульсы читаются в loop() и теряютсяИспользуй прерывание через attachInterrupt()
49E показывает значение без магнитаНулевая точка не равна 2,5 V или уплылаИзмеряй нулевую точку при запуске и вычитай её
hallRead() на ESP32 не компилируетсяИспользуется ядро Arduino ESP32 3.xВозьми внешний датчик Холла или перейди на ядро 2.x
Если под рукой магнит и непонятно, какая грань у него южная, сначала запусти код для 49E и по очереди поднеси к датчику каждую грань: та, что даёт положительные гауссы, — южный полюс. Отметь эту грань маркером; это сэкономит время в каждом проекте с A3144. Когда приклеиваешь магнит, совмещай с серединой маркированной стороны датчика не только полюс, но и центр магнита: сдвиг на несколько миллиметров может вдвое сократить расстояние срабатывания.

Датчик Холла — самый гибкий способ обнаружить магнит без контакта, шума и износа: 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() убрали; для серьёзных проектов используй внешний датчик.

Все проекты
Управление светодиодом кнопкой (удержание)
#9Новичок

Управление светодиодом кнопкой (удержание)

Как дверной звонок: свет горит, пока ты нажимаешь, и гаснет, когда отпускаешь. Arduino всё время слушает кнопку; пока она нажата, светодиод горит, а как только ты убираешь палец, он гаснет. Эта просте

4.8(113)
229
Управление светодиодом кнопкой на ESP32 (удержание)
#104Новичок

Управление светодиодом кнопкой на ESP32 (удержание)

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

4.6(36)
55
Чтение геркона
#37Новичок

Чтение геркона

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

4.4(21)
27
Датчик двери на герконе
#38Новичок
Premium

Датчик двери на герконе

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

4.7(34)
44
Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)
#145Продвинутый
Premium

Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)

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

0.0(0)
9
Антидребезг кнопки на Pico: IRQ против программного опроса
#159Средний
Premium

Антидребезг кнопки на Pico: IRQ против программного опроса

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

0.0(0)
12
Детектор движения на датчике движения
#24Новичок
Premium

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

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

4.6(47)
67