Как подключить датчик Холла 49E к Arduino
В статье рассматривается подключение датчика Холла 49E к Arduino.
Нам понадобятся:
- Arduino UNO или иная совместимая плата (я буду использовать Arduino Nano);
- модуль 49E с датчиком Холла;
- соединительные провода (рекомендую вот такой набор);
- макетная плата (breadboard);
- персональный компьютер со средой разработки Arduino IDE.
1Описание датчика Холла 49E
Датчик Холла – это прибор, который регистрирует изменение напряжённости магнитного поля. В настоящее время датчики на основе эффекта Холла нашли широкое применение. Например:
- датчики скорости вращения – широко используются в автомобилестроении и везде, где требуется определить скорость вращения колеса или иного вращающегося объекта; сенсоры на основе эффекта Холла пришли на замену механическим герконам;
- датчики приближения; типичный пример – раскладной чехол на вашем смартфоне, который включает подсветку экрана при открытии;
- измерение угла поворота;
- измерение величины вибрации;
- измерение величины магнитного поля – магнитометры и цифровые компасы;
- измерение силы тока (переменного и постоянного);
- измерение воздушных зазоров, уровня жидкости, и многие другие.
Приобрести такой датчик можно здесь.
2Схема подключения модуля с датчиком Холла к Arduino
Модуль с датчиком Холла содержит следующие компоненты: подстроечный резистор, двухканальный компаратор, несколько согласующих резисторов, пару светодиодов и собственно, сам датчик Холла 49E.
Подстроечный резистор служит для настройки чувствительности датчика Холла. Первый светодиод сигнализирует о наличии напряжения питания на модуле, второй – о превышении магнитным полем установленного порога срабатывания.
Модуль с датчиком имеет 4 вывода. Назначение выводов приведено в таблице. В третьем столбце таблицы – соответствующий вывод платы Arduino, к которому будет подключаться модуль.
Вывод | Назначение | Вывод Arduino |
---|---|---|
G | Земля. | GND |
+ | Питание +2,3…10 В. | 5V |
AO | Аналоговый выход – значение напряжённости магнитного поля. | A0 |
DO | Цифровой выход – индикатор превышения напряжённости магнитного поля заданного порога. | 12 |
Вот как будет выглядеть модуль с датчиком Холла, подключённый к плате Arduino Nano:
2Скетч для считывания показаний датчика Холла 49E
Итак, давайте проверим наш датчик в действии. Напишем самый простой скетч, который только и делает, что выводит считанные значения в последовательный порт.
int analogPin = A0; // с аналогового выхода датчика Холла int digitalPin = 12; // с цифрового выхода датчика Холла void setup() { pinMode(digitalPin, INPUT); Serial.begin(9600); } void loop() { int analogValue = analogRead(analogPin); // считываем аналоговое значение int digitalValue = digitalRead(digitalPin); // считываем цифровое значение Serial.println((String)digitalValue + "\t" + (String)analogValue); delay(100); }
Загрузим скетч и посмотрим, что же выводится в порт:
Очень интересно. Вывод цифрового канала понятен: "0" – магнитное поле ниже заданного подстроечным резистором значения, "1" – выше (я поднёс магнит к датчику). А что же показывает аналоговый канал? Разберёмся с этим чуть позже.
3Скетч для определения скорости вращения диска
Для того чтобы определить скорость вращения, будем использовать сигнал с цифрового канала сенсора. Такая схема пригодится, например, для создания спидометра для велосипеда.
Для демонстрации соберём вот такую установку: разместим неподвижно датчик Холла (зажмём тисками), а на поверхности вращающегося диска закрепим постоянный магнит. В качестве вращающейся платформы у меня будет старый жёсткий диск, на котором скотчем (простите за неэстетичность) будет зафиксирован магнит.
Вспомним формулу угловой скорости: ω = φ / tгде ω – угловая скорость, φ – угол поворота, t – время, за которое диск повернулся на этот угол. В нашем случае угол (1 оборот) будет равен 360° или 2π радиан. Всё, что нам остаётся – это подсчитать время, за которое происходит один оборот диска.
В скетче мы будем отлавливать переход сигнала с датчика от HIGH к LOW и вычислять разницу между двумя последовательными переходами.
Для определения промежутка времени используем встроенную функцию millis(), которая возвращает количество миллисекунд, прошедших с момента включения платы Arduino.
int digitalPin = 12; // с цифрового выхода датчика Холла unsigned long runTime; // время с запуска платы Arduino, мс int prevValue = 0; // предыдущее считанное значение void setup() { pinMode(digitalPin, INPUT); Serial.begin(9600); runTime = millis(); // запоминаем время запуска программы } void loop() { int digitalValue = digitalRead(digitalPin); // значение с цифрового канала delay(50); // небольшая задержка чтобы исключить дребезг контактов if ((prevValue == HIGH) && (digitalValue == LOW)) { // ловим переход HIGH->LOW сигнала unsigned long timeSpan = millis() - runTime; // время одного оборота, мс runTime = millis(); // запомним текущее время Serial.println("Период оборота = " + (String)timeSpan + " мс"); double omega = 2 * PI / (timeSpan * 1.0E-3); Serial.println("Угловая скорость = " + (String)omega + " рад/с"); } prevValue = digitalValue; // запомним предыдущее значение датчика Холла }
Загрузим скетч, и начнём вращать наш диск с магнитом. Период оборота и угловая скорость выводятся в окно консоли:
Кстати, если на небольшом расстоянии друг за другом на диске разместить два магнита, то можно будет определить не только скорость вращения, но и направление. Естественно, скетч придётся немного усложнить.
Возвращаясь к идее спидометра для велосипеда, нужно вспомнить ещё одну формулу – связь угловой и линейной скоростей: v = ω r
Здесь v – линейная скорость, ω – угловая скорость, r – радиус колеса велосипеда. Теперь несложно дописать наш последний скетч с учётом этой формулы.
4Значения с аналогового каналадатчика Холла 49E
Теперь разберёмся, что же показывают аналоговые значения с датчика Холла.
Датчик выдаёт напряжение, которое изменяется в зависимости от величины магнитного поля. Вектор индукции магнитного поля измеряется в Гауссах (Гс, GS по-английски). Согласно техническому описанию на детектор Холла, пределы измерения датчика Холла 49E ±1500 Гс с линейным участком от −1200 до +1200 Гс., а чувствительность датчика примерно 2,9 мВ/Гс. Рассмотрим график зависимости напряжения на датчике Холла от величины магнитного поля:
Помните наш первый скетч? Показания, снятые с датчика, изменялись в районе 508..525 отчётов (левая шкала ординат на графике). Если перевести их в вольты, то это как раз около нуля шкалы отсчёта датчика, или 2,5 В (правая шкала). Если мы поднесём магнит одним полюсом к датчику Холла, показания будут меняться от нуля в одну сторону, если поднесём другим полюсом – в другую.
Таким образом, по показаниям аналогового канала датчика Холла можно судить о величине магнитного поля и о направлении магнитных силовых линий.
Download attachments:
- Скачать datasheet на SS49E (420 Downloads)
Поблагодарить автора:
Поделиться
Related items
2 comments
-
Михаил Четверг, 15 Сентябрь 2022 07:59 Ссылка на комментарий
Здравствуйте. Подскажите пожалуйста по этой строке timeSpan * 1.0E-3, в особенности интересует откуда взяли 1.0E-3?
-
aave613 Четверг, 15 Сентябрь 2022 17:39 Ссылка на комментарий
Михаил, это перевод из миллисекунд в секунды.