Измерение напряженности магнитного поля с помощью Arduino

В этом проекте мы будем использовать датчик Холла и плату Arduino Uno для измерения напряженности магнитного поля. Мы будем использовать датчик Холла с наименованием UGN3503U, который измеряет величину напряженности магнитного поля и обеспечивает на своем выходе аналоговое напряжение пропорциональное напряженности магнитного поля, которое мы затем будем переводить с помощью аналогового-цифрового преобразования в Arduino в цифровой вид. Датчик измеряет напряженность магнитного поля (электромагнитную индукцию) в гауссах (GAUSS). Один гаусс равен одной десятитысячной Тесла (Тл).

Измерение напряженности магнитного поля с помощью Arduino: внешний вид конструкции

Величину напряженности магнитного поля, преобразованную в цифровую форму с помощью Arduino, мы затем будем показывать на ЖК дисплее 16х2.

Плата Arduino имеет 6 каналов АЦП (аналогового-цифрового преобразования). Любой из них можно использовать в качестве аналогового входа. АЦП Arduino Uno имеет разрешающую способность 10 бит, что соответствует значениям целых чисел в диапазоне 0-(2^10) 1023. Это означает что входное напряжение в диапазоне от до 5 Вольт преобразуется в целое число от 0 до 1023. То есть одному цифровому значению (шагу) соответствует шаг аналогового напряжения 5/1024= 4.9mV.

В нашем проекте мы будем подключать аналоговый выход датчика Холла к контакту ‘A0’ платы Arduino Uno.

Распиновка датчика Холла

Более подробно о датчике Холла можно прочитать в этой статье: подключение датчика Холла к микроконтроллеру AVR.

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

Плата Arduino Uno
Источник питания с напряжением 5 В
ЖК дисплей JHD_162ALCD (16×2)
Конденсатор 100 мкФ (2 шт.)
Датчик Холла UGn3503U

Работа схемы и программы

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

Схема измерителя напряженности магнитного поля на Arduino и датчике ХоллаЖидкокристаллический (ЖК) дисплей 16×2 использует 16 контактов для своей работы в случае если нужен черный цвет. Если черный цвет не нужен, то достаточно 14 контактов. В этом случае контакты черного цвета можно либо запитать, либо оставить их как есть. То есть из 14 контактов ЖК дисплея мы имеем 8 контактов для данных (7-14 или D0-D7), 2 контакта для подачи питания (1&2 или VSS&VDD или GND&+5v), 3-й контакт для управления контрастностью (VEE) – определяет насколько «толстыми» будут выглядеть символы на экране, и 3 управляющих контакта (RS&RW&E).

На представленной схеме мы использовали только 2 управляющих контактах ЖК дисплея – это позволяет лучше понять логику работы схемы начинающим. Контакт для управления контрастностью и READ/WRITE сравнительно редко используются и в нашем случае их можно замкнуть на землю. Это переводит ЖК дисплей в режим чтения и обеспечивает ему максимальную контрастность. Поэтому нам нужно только управлять состоянием контактов ENABLE и RS чтобы передавать символы и данные на ЖК дисплей.

В схеме необходимо сделать следующие соединения с ЖК дисплеем:
PIN1 или VSS – на землю
PIN2 или VDD или VCC – к источнику питания +5 В
PIN3 или VEE – на землю (обеспечивает наилучшую контрастность – лучше для начинающих)
PIN4 или RS (выбор регистра) – к контакту PIN8 ARDUINO UNO
PIN5 или RW (Read/Write) – на землю (переводит ЖК дисплей в режим чтения, что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable — доступность) к контакту PIN9 ARDUINO UNO
PIN11 или D4 – к контакту PIN10 ARDUINO UNO
PIN12 или D5 – к контакту PIN11 ARDUINO UNO
PIN13 или D6 – к контакту PIN12 ARDUINO UNO
PIN14 или D7 – к контакту PIN13 ARDUINO UNO

ARDUINO IDE позволяет пользователю использовать ЖК дисплей в 4 битном режиме. Этот режим позволяет уменьшить число используемых контактов ARDUINO. 4-битный режим взаимодействия с ЖК дисплеем предусмотрен для ARDUINO по умолчанию, поэтому нет необходимости предпринимать какие либо действия чтобы его включить. В представленной схеме можно увидеть, что мы использовали 4-битный режим (D4-D7). То есть у нас с ARDUINO соединено 6 контактов ЖК дисплея: 4 контакта для передачи данных и 2 контакта для управления.

Чтобы задействовать АЦП в Arduino Uno необходимо сделать следующие вещи:

1. analogRead(pin);
2. analogReference();
3. analogReadResolution(bits);

Плата Arduino Uno по умолчанию имеет опорное напряжение АЦП равное 5 В. То есть максимальное входное напряжение для АЦП будет равно 5 В. Но поскольку некоторые датчики обеспечивают на своем выходе напряжение в диапазоне 0-2.5 В, то в этом случае если мы будем использовать опорное напряжение АЦП 5 В, то мы потеряем в точности преобразования. Поэтому в Arduino предусмотрена специальная команда для изменения опорного напряжения АЦП (“analogReference();”.

Максимальная разрешающая способность (разрешение) АЦП платы Arduino составляет 10 бит, изменить его можно с помощью команды “analogReadResolution(bits);”. Эта функция может быть полезна в некоторых случаях, например, когда нужно увеличить скорость аналого-цифрового преобразования.

Теперь, если все установки работы с АЦП выполнены, мы можем непосредственно считать значение с выхода АЦП с помощью функции “analogRead(pin);”, где “pin” обозначает номер контакта, с которого мы будем считывать аналоговый сигнал. В нашем случае это будет контакт “A0”. Значение с выхода АЦП можно сразу присвоить переменной целого типа (integer) с помощью команды “int ADCVALUE = analogRead(A0);”.

Для взаимодействия с ЖК дисплеем прежде всего необходимо подключить библиотеку для работы с ним с помощью инструкции ‘#include <LiquidCrystal.h>’. Эта библиотека сразу по умолчанию включает 4-битный режим взаимодействия с ЖК дисплеем.

После этого необходимо сообщить Arduino тип подключаемого ЖК дисплея. ЖК дисплеи бывают различных типов, например 20×4, 16×2, 16×1 и т.д. В нашем случае мы будем подключать к Arduino ЖК дисплей 16×2, поэтому нам необходимо использовать инструкцию ‘lcd.begin(16, 2);’.

Далее плате Arduino необходимо сообщить, к каким ее контактам мы подключили ЖК дисплей. В соответствии с представленной схемой нам необходимо использовать команду LiquidCrystal lcd(8, 9, 10, 11, 12, 13), которая сообщит Arduino что ЖК дисплей подключен к ее контактам 8, 9, 10, 11, 12 и 13.

После выполнения всех этих действий можно приступать к передаче данных на ЖК дисплей.

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

Представленная программа должна делать следующие действия: как только вблизи датчика Холла появляется какой-нибудь магнит (магнитное поле) напряжение на его выходе изменяется, значение этого напряжения подается на АЦП платы Arduino, которая переводит его в цифровую форму (число от 0 до 1023). После этого значение напряженности магнитного поля высвечивается на ЖК дисплее.

#include <LiquidCrystal.h> // подключение библиотеки для работы с ЖК дисплеем
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); // контакты Arduino, к которым подключен ЖК дисплей
char ADCSHOW[5]; // инициализация символьного массива чтобы отображать результат АЦП

void setup()
{
  lcd.begin(16, 2); // устанавливаем число столбцов и строк ЖК дисплея
}

void loop()
{
  lcd.print(«FluxDensity»); // показываем строку «FluxDensity»
  lcd.setCursor(0, 1); // передвигаем курсор на вторую линию
  lcd.print(«(in Gauss):»); // показываем строку «(in Gauss): «
  String ADCVALUE = String((analogRead(A0)-515)/3.76);
/* поскольку у нас опорное напряжение АЦП 5 В и разрешение АЦП 10 бит, то получаем 5/1024 = 5mV инкремента на одно значение. Используемый нами датчик Холла обеспечивает изменение напряжения 1.3 В на изменение напряженности магнитного поля на 1 Гаусс
Поэтому нам чтобы получить значение напряженности поля в Гауссах мы должны разделить значение АЦП на 3.76. Но в самом начале мы должны отнять 2.5 В (515 в единицах АЦП) поскольку это соответствует нулю в Гауссах (так откалиброван датчик) */
  ADCVALUE.toCharArray(ADCSHOW, 5); // конвертируем значение АЦП в символьный массив
  lcd.print(ADCSHOW); // отображаем на экране ЖК дисплея значение напряженности магнитного поля
  lcd.print(«G «);
  lcd.setCursor(0, 0); // передвигаем курсор в 1-й столбец 1-й строки
}

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

(1 голосов, оценка: 5,00 из 5)
Загрузка...
709 просмотров

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

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