🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


🧲 Проект: измеритель силы магнитного поля на аналоговом датчике Холла KY-035 с выводом на TM1637

В отличие от большинства датчиков Холла, которые просто сообщают "есть магнит/нет магнита", модуль KY-035 отдаёт на аналоговом выходе непрерывное напряжение, пропорциональное силе и даже полярности магнитного поля — Arduino читает это значение и выводит на дисплей TM1637 как относительный числовой показатель.

Как это работает

Датчик Холла — это полупроводниковый элемент, в котором магнитное поле отклоняет носители заряда внутри кристалла и создаёт поперечное напряжение (эффект Холла), пропорциональное силе поля. В KY-035 это напряжение усилено и выведено на аналоговый пин: без магнита рядом напряжение покоя примерно посередине диапазона (около 2.5V при питании 5V, то есть значение `analogRead()` около 512), приближение одного полюса магнита поднимает значение выше этой середины, приближение другого полюса — опускает ниже.

Так как датчик выдаёт именно непрерывное напряжение, а не включение/выключение, его можно использовать не только для обнаружения факта наличия магнита, но и примерно оценивать, насколько близко он расположен (поле слабеет с расстоянием нелинейно) или какой стороной магнит обращён к датчику. Точное значение в Гауссах/Теслах без заводской калибровки датчика по эталонному магниту получить нельзя — в этом проекте выводится именно относительное число, а не калиброванная единица измерения поля.

Пошаговая сборка

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

  1. KY-035: сигнальный аналоговый выход (S или OUT) → A0 Arduino, VCC → 5V, GND → GND.
  2. TM1637: CLK → D9, DIO → D10, VCC → 5V, GND → GND.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.

#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: Электронные модули.

← 💧 прецизионный термогигрометр на HTU21D с вы…🌀 защитное отключение привода при превышении… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 156 ₽ 140 ₽ (экономия 16 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA