
Интернет-магазин «Неглупый Дом»
В отличие от большинства датчиков Холла, которые просто сообщают "есть магнит/нет магнита", модуль KY-035 отдаёт на аналоговом выходе непрерывное напряжение, пропорциональное силе и даже полярности магнитного поля — Arduino читает это значение и выводит на дисплей TM1637 как относительный числовой показатель.
Датчик Холла — это полупроводниковый элемент, в котором магнитное поле отклоняет носители заряда внутри кристалла и создаёт поперечное напряжение (эффект Холла), пропорциональное силе поля. В KY-035 это напряжение усилено и выведено на аналоговый пин: без магнита рядом напряжение покоя примерно посередине диапазона (около 2.5V при питании 5V, то есть значение `analogRead()` около 512), приближение одного полюса магнита поднимает значение выше этой середины, приближение другого полюса — опускает ниже.
Так как датчик выдаёт именно непрерывное напряжение, а не включение/выключение, его можно использовать не только для обнаружения факта наличия магнита, но и примерно оценивать, насколько близко он расположен (поле слабеет с расстоянием нелинейно) или какой стороной магнит обращён к датчику. Точное значение в Гауссах/Теслах без заводской калибровки датчика по эталонному магниту получить нельзя — в этом проекте выводится именно относительное число, а не калиброванная единица измерения поля.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <TM1637Display.h>
TM1637Display display(9, 10); // CLK, DIO
const int SENSOR_PIN = A0;
int restValue = 512; // значение покоя без магнита, уточните калибровкой в setup()
void setup() {
Serial.begin(9600);
display.setBrightness(5);
// калибровка покоя: усредняем несколько чтений при отсутствии магнита рядом
long sum = 0;
for (int i = 0; i < 20; i++) {
sum += analogRead(SENSOR_PIN);
delay(10);
}
restValue = sum / 20;
Serial.print("Калибровка покоя: ");
Serial.println(restValue);
}
void loop() {
int raw = analogRead(SENSOR_PIN);
int delta = raw - restValue; // отклонение от покоя: плюс — один полюс, минус — другой
Serial.print("Поле (отн.): ");
Serial.println(delta);
display.showNumberDecEx(abs(delta), delta < 0 ? 0b01000000 : 0, false); // минус приблизительно показан точкой на старшем разряде
}
Библиотека TM1637Display ставится через Менеджер библиотек Arduino IDE. На момент включения датчик должен находиться без магнита рядом — калибровка в `setup()` запоминает именно текущее напряжение покоя, при смещении датчика после калибровки показания будут немного смещены.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 156 ₽ 140 ₽ (экономия 16 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.