Рубрики
Схемы на Arduino

Подключение датчика Холла к Arduino

Датчики являются важной частью многих радиоэлектронных проектов. Они способны преобразовывать данные об окружающей среде в цифровые данные, которые затем могут быть обработаны с помощью электронных схем. Существует много различных датчиков, существенно отличающихся по принципу действия. В этой статье мы рассмотрим подключение датчика Холла к плате Arduino. Этот датчик способен обнаруживать присутствие магнита и определять его полюс.

Вы можете спросить для чего нужно обнаруживать присутствие магнита. На самом деле существует очень много разнообразных устройств, в которых применяются датчики Холла: в измерителях скорости транспортных средств или любых вращающихся механизмов, в бесщёточных электродвигателях постоянного тока для определения позиции ротора и переключения в соответствии с этим катушки статора и т.д. Число применений датчика Холла очень велико. На нашем сайте вы можете посмотреть следующие проекты, в которых был использован датчик Холла:

В данном проекте мы будем использовать прерывания для обнаружения магнита вблизи датчика Холла и на основании этого зажигать светодиод. Подход с использованием прерываний при работе с датчиком Холла является наиболее часто используемым в схемах с микроконтроллерами потому что в большинстве применений датчиков Холла требуется считывание данных незамедлительно и с высокой скоростью.

Необходимые компоненты

  1. Плата Arduino (любой версии) (купить на AliExpress).
  2. Датчик Холла (любой, но только цифровой) (купить на AliExpress).
  3. Резистор 1 кОм (купить на AliExpress).
  4. Резистор 10 кОм (купить на AliExpress).
  5. Светодиод (купить на AliExpress).
  6. Соединительные провода.

Что такое эффект Холла

Эффект Холла можно рассмотреть с точки зрения движения зарядов (заряженных частиц) в магнитном поле. Чтобы понять на практике как это происходит подсоединим батарею к проводнику как показано на рисунке ниже. Электрический ток (i) в этом случае начнет протекать по проводнику от положительного контакта батареи к ее отрицательному контакту.

Но поток электронов (e-) в этом случае будет направлен в противоположном направлении, то есть от отрицательного контакта батареи к ее положительному контакту. В этот момент времени если мы измерим напряжение (разность потенциалов) на концах проводника (поперек его) как показано на рисунке ниже, то оно будет равно нулю.

Теперь создадим магнитное поле над проводником как показано на следующем рисунке.

И если в этот момент времени мы измерим напряжение на концах проводника (поперечных прохождению тока), то оно будет отлично от нуля. Это напряжение и называется «напряжением Холла», а само это явление называется «эффектом Холла».

Работа схемы

Схема устройства представлена на следующем рисунке.

Как вы можете видеть, схема очень проста. Но, к сожалению начинающие радиолюбители иногда путают расположение контактов (распиновку) датчика Холла. Поместите датчик Холла перед собой таким образом, чтобы вы смотрели на ту его сторону, на которой есть буквы, тогда первый контакт слева будет Vcc (напряжение постоянного тока), затем будет контакт земли и затем сигнальный контакт.

Поскольку, как мы уже говорили, мы будем использовать прерывания при работе с датчиком Холла, поэтому в нашей схеме его сигнальный контакт подключен к контакту 2 платы Arduino, который может быть использован в качестве входа для внешнего прерывания INT0. Светодиод подключен к контакту 3 и будет зажигаться всякий раз при обнаружении датчиком Холла магнита. Собранное устройство на макетной плате будет выглядеть примерно следующим образом.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы рассмотрим его наиболее важные фрагменты.

Мы задействуем в плате Arduino один контакт для ввода данных (к нему подключен датчик Холла) и один для вывода данных (к нему подключен светодиод). На контакте, к которому подключен датчик Холла, мы будем использовать прерывание. Поэтому внутри функции setup нам необходимо инициализировать эти контакты и сконфигурировать контакт 2 таким образом, чтобы на нем можно было использовать прерывания.

При обработке прерывания могут использоваться много параметров: Toggle (переключение), Change (изменение), Rise (высокий уровень), Fall (низкий уровень) и т.д. Мы в нашем проекте будем использовать изменение сигнала на выходе сигнального контакта датчика Холла.

Поэтому внутри функции toggle мы будем использовать переменную “state” которое будет изменять свое состояние на 0 если ее текущее состояние 1, и на 1 если ее текущее состояние 0. В дальнейшем значение этой переменной можно, соответственно, использовать для включения и выключения светодиода.

Наконец, внутри функции loop нам необходимо просто управлять состоянием светодиода. Как мы уже обсудили, состояние переменной state будет изменяться каждый раз когда датчик Холла будет обнаруживать рядом с собой магнит, поэтому состояние этой переменной мы будем использовать для управления состоянием светодиода.

Работа проекта

Когда вся аппаратная часть проекта у вас готова, загрузите программу в плату Arduino. Мы использовали для питания платы Arduino батарейку на 9 В, но вы можете использовать любой другой способ подачи питания на плату Arduino. Теперь поднесите магнит близко к датчику Холла и светодиод зажгется, когда вы уберете магнит — светодиод погаснет.

Примечание: датчик Холла чувствителен к полюсу магнита – одна сторона датчика может обнаруживать северный или южный полюс магнита, но не оба полюса. То есть если вы поднесете южный полюс магнита к той части датчика, которая способна обнаруживать северный полюс, то светодиод не зажгется.

Когда мы будем подносить магнит близко к датчику датчик будет изменять свое состояние. Это изменение будет обнаруживаться контактом прерывания (контакт 2), при этом будет вызываться функция toggle, в которой состояние переменной “state” будет изменяться с 0 на 1. Поэтому светодиод будет зажигаться. Когда мы будем отдалять магнит от датчика Холла состояние сигнального контакта датчика также изменится. Это изменение также обнаружится контактом прерывания и, следовательно, состояние переменной “state” изменится с 1 на 0. Это приведет к выключения светодиода. Описанные процессы будут происходить всякий раз когда вы будете подносить магнит к датчику Холла и уносить его от датчика.

Исходный код программы

Код программы достаточно простой, надеюсь, он не вызовет у вас затруднений. Дополнительные пояснения к нему даны выше в статье.

Видео, демонстрирующее работу схемы

12 ответов к “Подключение датчика Холла к Arduino”

Скетч не работает, подключал точно по схеме, все как полагается, но светодиод отказывается гореть(
Делал обратное, без ардуинки, при подносе магнита к датчику, светодиод гаснет. Вот и не могу понять, что не так сделал

Ну самое простое в этом случае — использовать отладку с выводом сообщений в окно монитора последовательной связи. С помощью нее часто удается найти ошибки в программе. Умеете это делать?
Можно еще попробовать без использования прерываний, тогда скетч получится совсем простой. Но это только для теста потому что во всех практических схемах с использованием датчика Холла (спидометры, тахометры и т.д.) используется обработка его срабатываний именно с помощью использования прерываний.
И вы случайно не забыли заменить в первой строке скетча
const byte ledPin = 13;
на
const byte ledPin = 3;

Точно уже не помню, нужно даташит вспоминать, но он нужен для корректной работы датчика Холла. Посмотрите, в статье про спидометр на Ардуино вместе с датчиком Холла используется точно такой же резистор. Также посмотрите в статье про подключение датчика температуры DS18B20 к плате Ардуино — там тоже параллельно контактам датчика DS18B20 включается аналогичный резистор. Так что для некоторых датчиков это общепринятый прием. Конечно, я видел схемы, где датчик Холла включается и без данного резистора, но мне кажется что его все же лучше поставить

Код программы не от Этого примера. В программе мигает встроенный светодиод ибо прописан 13 пин а не 3.

Да просто опечатка небольшая, замените в первой строке
const byte ledPin = 13;
на
const byte ledPin = 3;
Электронщики и программисты ведь люди рассеянные ))

У нас на сайте несколько статей с использованием датчика Холла. Пока никто в комментариях к ним не жаловался на дребезг

Нет, не слышал про это. Дребезг есть точно у разных механических переключателей, например, кнопки

Вот и я про то)
Да и с ним можно бороться или простой ёмкостью или триггером Шмита. Ну уж совсем просто делаем, хотя это жуткое решение)

Ну что поделать, некоторые современные электронные компоненты несовершенны ))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *