Датчик Холла KY-024 и Arduino: схема подключения, аналоговый и цифровой выход, скетч
KY-024 — линейный датчик Холла 49E на плате с компаратором LM393. У него два выхода сразу: аналоговый показывает, насколько сильное поле и какой полюс поднесли, цифровой срабатывает, когда поле переходит порог с подстроечника.
Плата у KY-024 типовая: на ней же собраны датчики звука, пламени и вибрации из тех же наборов. Подключение и скетч у всего семейства одинаковые — меняется только то, что стоит справа на плате.
Схема подключения
Распиновка
| Провод | Куда и зачем |
|---|---|
| AO | Аналоговый выход датчика 49E, на любой вывод A0–A5. |
| DO | Цифровой выход компаратора LM393. Порог задаётся подстроечником. |
| VCC (+) | Питание 3,3–5 В. |
| GND (G) | Земля. |
Характеристики
- Датчик
- 49E, линейный
- Компаратор
- LM393
- Питание
- 3,3–5 В
- Ток
- около 4 мА плюс светодиоды
- Выходы
- аналоговый и цифровой
- Размер платы
- 36 × 15,5 мм
Как настроить порог
Подключите модуль, откройте монитор порта и поднесите магнит на нужное расстояние. Крутите подстроечник, пока светодиод на плате не загорится ровно в том положении магнита, которое считаете «сработало». Компаратор сравнивает аналоговый сигнал с напряжением на подстроечнике, поэтому порог можно поставить на любой полюс и любую силу поля.
Если нужен только факт «магнит рядом», проще взять модуль KY-003: у него один цифровой выход и порог задан микросхемой, крутить нечего.
Библиотека
не нужна— Аналоговый выход читается analogRead, цифровой — digitalRead или прерыванием.
Готовый скетч
// Датчик Холла KY-024: аналог на A0, цифровой выход на выводе 2
const int HALL_ANALOG = A0;
const int HALL_DIGITAL = 2;
volatile unsigned long pulses = 0; // счётчик срабатываний из прерывания
void onField() {
pulses++;
}
void setup() {
Serial.begin(9600);
pinMode(HALL_DIGITAL, INPUT);
// цифровой выход падает в ноль, когда поле сильнее порога
attachInterrupt(digitalPinToInterrupt(HALL_DIGITAL), onField, FALLING);
}
void loop() {
int field = analogRead(HALL_ANALOG); // ~512 без магнита
Serial.print("Поле: ");
Serial.print(field);
Serial.print(" срабатываний: ");
Serial.println(pulses);
delay(200);
}Скетч собирается arduino-cli под Arduino UNO
Прерывание считает каждое появление магнита — так делают счётчик оборотов: магнит на колесе, датчик на раме.
Частые ошибки
Показания около 512 и не меняются
Магнит слишком слабый или далеко: датчик чувствует поле на расстоянии сантиметра-двух. Неодимовый магнит виден с трёх-четырёх сантиметров, магнит с холодильника — только вплотную.
Цифровой выход работает наоборот
Это норма: компаратор выдаёт ноль при срабатывании. В скетче ловите FALLING, а не RISING, либо просто инвертируйте условие.
Срабатывает по нескольку раз за проход магнита
Порог стоит слишком близко к значению покоя, и шум переключает компаратор туда-сюда. Отодвиньте порог подстроечником или добавьте в прерывании защиту по времени: не считать импульсы чаще, чем раз в несколько миллисекунд.
Значение зависит от полюса
Так и должно быть. Линейный датчик различает север и юг: один полюс даёт значения выше 512, другой — ниже. Если нужен только факт поля, берите модуль расстояния от 512 по модулю.
Что понадобится
- Модуль датчика Холла KY-024
- Неодимовый магнит
- Arduino UNO
- Провода «папа-мама»