В этом проекте мы будем использовать датчик Холла и плату Arduino Uno для измерения напряженности магнитного поля. Мы будем использовать датчик Холла с наименованием UGN3503U, который измеряет величину напряженности магнитного поля и обеспечивает на своем выходе аналоговое напряжение пропорциональное напряженности магнитного поля, которое мы затем будем переводить с помощью аналогового-цифрового преобразования в Arduino в цифровой вид. Датчик измеряет напряженность магнитного поля (электромагнитную индукцию) в гауссах (GAUSS). Один гаусс равен одной десятитысячной Тесла (Тл).
Величину напряженности магнитного поля, преобразованную в цифровую форму с помощью 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 (купить на AliExpress).
- Датчик Холла UGn3503U.
- ЖК дисплей JHD_162ALCD (16x2) (купить на AliExpress).
- Конденсатор 100 мкФ (2 шт.) (купить на AliExpress).
- Источник питания с напряжением 5 В.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Работа схемы и программы
Схема устройства представлена на следующем рисунке.
Жидкокристаллический (ЖК) дисплей 16x2 использует 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 тип подключаемого ЖК дисплея. ЖК дисплеи бывают различных типов, например 20x4, 16x2, 16x1 и т.д. В нашем случае мы будем подключать к Arduino ЖК дисплей 16x2, поэтому нам необходимо использовать инструкцию ‘lcd.begin(16, 2);’.
Далее плате Arduino необходимо сообщить, к каким ее контактам мы подключили ЖК дисплей. В соответствии с представленной схемой нам необходимо использовать команду LiquidCrystal lcd(8, 9, 10, 11, 12, 13), которая сообщит Arduino что ЖК дисплей подключен к ее контактам 8, 9, 10, 11, 12 и 13.
После выполнения всех этих действий можно приступать к передаче данных на ЖК дисплей.
Исходный код программы
Представленная программа должна делать следующие действия: как только вблизи датчика Холла появляется какой-нибудь магнит (магнитное поле) напряжение на его выходе изменяется, значение этого напряжения подается на АЦП платы Arduino, которая переводит его в цифровую форму (число от 0 до 1023). После этого значение напряженности магнитного поля высвечивается на ЖК дисплее.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#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-й строки } |
С обратной стороны есть подстроечный резистор. Попробуйте нулевой плоской отверткой повращать его в обе стороны. Сначала появятся прямоугольники, потом данные от ардуино.
Если он не светится, то используйте другой код.
Если светится, но квадраты не появились, то просканируйте адрес дисплея сканером и измените на правильный в скетче. Или используйте стандартные 4 адреса для этого дисплея.
Так же у вас может быть не подходящая библиотека.
Или вы написали 1602 вместо 2004 или наоборот.
Поему у меня не работет єта Жк если я его недавно купил и все зделал по инструкции
Сочувствую что вам не повезло с ЖК дисплеем
Посмотрите мой ответ выше. И не обращайте внимание на ответ другого пользователя. Обычно надо чуть подумать и все заработает.
Да, спасибо за такой подробный ответ