ELECTRONICS

Датчик Холла KY-024 и Arduino: схема подключения, аналоговый и цифровой выход, скетч

Датчики Холла и магнитного поляСкетч проверен компиляцией

KY-024 — линейный датчик Холла 49E на плате с компаратором LM393. У него два выхода сразу: аналоговый показывает, насколько сильное поле и какой полюс поднесли, цифровой срабатывает, когда поле переходит порог с подстроечника.

Плата у KY-024 типовая: на ней же собраны датчики звука, пламени и вибрации из тех же наборов. Подключение и скетч у всего семейства одинаковые — меняется только то, что стоит справа на плате.

Схема подключения

104102W 104110 TLM393VJA SSMFK53 G4102151104103R6A0G+D0R5L2+L1+VR1FE-01HOYAR3R2R1+S+SG+G
Наведите на провод или нажмите на него — расскажу, зачем он нужен.

Распиновка

ПроводКуда и зачем
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 по модулю.

Что понадобится