Индикатор углов поворота на ARDUINO UNO и датчиках P3020
Индикатор предназначен для измерения и индикации углов поворота двух механизмов. Например, его можно использовать как индикатор поворота двух антенн, либо антенны и флюгера, или для совсем каких-то других целей.
Для определения углов поворота используются два датчика типа Р3020. Эти датчики представляют собой законченные устройства, состоящие из датчиков Холла и электронной схемы. Внешне они напоминают переменный резистор, но его вал вращается без ограничений или мертвых точек.
Датчики измеряют угол поворота вала от 0° до 360°, при этом напряжение на их выходе плавно меняется от нуля до 5V. Соответственно, и питающее напряжение 5V.
Для того, чтобы «вольты» перевести в «градусы» нужно перед индикацией результата измерения, полученный результат в вольтах умножить на 72.
Индикатор было решено выполнить используя универсальный микроконтроллерный модуль ARDUINO UNO и двухстрочный ЖК-дисплей типа 1602А (на основе контроллера HD44780).
Можно легко сделать такой прибор. В одной строке он будет показывать значение угла с одного датчика, обозначим его «X», в другой - с другого датчика, обозначим его «У».
Но, прежде всего, хочу напомнить, что ARDUINO UNO это относительно недорогой готовый модуль, - небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания.
Принципиальная схема
Схема индикатора углов показана на рис. 1. Он представляет собой двойной цифровой вольтметр, представляющий результата измерения в градусах угла.
Рис. 1. Принципиальная схема индикатора углов поворота на ARDUINO UNO и датчиках P3020.
Как видно из схемы, к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А.
Детали и программа для МК
Питается ЖК-индикатор от стабилизатора напряжения 5V. имеющегося на плате стабилизатора напряжения 5V.
Рис. Программа для микроконтроллера.
Датчики угла поворота Р1 и Р2. Принят Р1 за датчик «X», а Р2 за датчик «У». Датчики питаются напряжением 5V от стабилизатора платы ARDUINO UNO, а выходные их напряжения поступают на два аналоговых входа А1 и А2.
Всего аналоговых входов шесть, - А0-А5, можно было выбрать любые два из них. В данном случае, выбраны А1 и А2.
Напряжение на аналоговых портах может быть только положительным и только в пределах от нуля до напряжения питания микроконтроллера, то есть, номинально, до 5V. Выход аналогового порта преобразуется АЦП микроконтроллера в цифровую форму. Для получения результата в единицах вольт, нужно его умножить на 5 (на опорное напряжение, то есть, на напряжение питания микроконтроллера) и разделить на 1024.
Для того чтобы получить значение в градусах, нужно результат измерения напряжения умножить на 72. Таким образом, получается формула:
X = Vout * 5,0 / 1024 * 72
Реальное напряжение на выходе 5-вольтового стабилизатора на плате ARDUINO UNO может отличаться от 5V,поэтому его предварительно нужно измерить. И тогда уже подставлять в выше указанную формулу конкретное напряжение цепи «5V» на плате.
Программа на языке C++ приведена выше.
Для управления ЖК-индикатором решено было использовать порты с D2 по D7 платы ARDUINO UNO. В принципе, можно и другие порты, но я вот так, решил использовать именно эти.
Для того чтобы индикатор взаимодействовал с ARDUINO UNO нужно в программу загрузить подпрограмму для его управления. Такие подпрограммы называются «библиотеками», и в программном комплекте для ARDUINO UNO есть много разных «библиотек». Для работы с ЖК-индикатором на основе HD44780 нужна библиотека LiquidCrystal. Поэтому программа (таблица 1) начинается с загрузки этой библиотеки:
#include
Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-индикатором. Я выбрал порты с D2 по D7.
Можно выбрать другие. Эти порты назначены строкой:
LiquidCrystal led(2, 3, 4, 5, 6, 7);
После чего, программа переходит собственно к работе индикатора углов.
Для измерения напряжения решено было использовать аналоговые входы А1 и А2. Эти входы заданы в строках:
int analoglnput=1;
int analoglnput1=2;
Для чтения данных с аналоговых портов используется функция analogRead
Чтение данных с аналоговых портов происходит в строках:
vout=analogRead(analoginput);
voutl=analogRead(analog!nput1);
Затем, производится вычисление фактического напряжения и вычисление из него значения угла в градусах :
volt=vout*5.0/1024.0*72;
volt1=vout1*5.0/1024.0*72;
В этих строках число 5.0 - это напряжение на выходе стабилизатора платы ARDUINO UNO. В идеале должно быть 5V, но для точной работы вольтметра это напряжение нужно предварительно измерить. Подключите источник питания и измерьте достаточно точным вольтметром напряжение +5V на разъеме POWER платы. Что будет, то и вводите в эти строки вместо 5.0, например, если будет 5,1V, строки будут выглядеть так:
volt=vout*5.1/1024.0*72;
volt1=vout1*5.1/1024.0*72;
Далее, происходит индикация полученных результатов. Устанавливается курсор на первую строку индикатора:
led.setCursor(0,0);
И в него записывается результат измерения угла на Р1 в форме «X = » :
led.print("X = ");
led.print(volt);
Затем курсор устанавливается на вторую строку, и в него записывается результат измерения угла с датчика Р2 в форме «У = » :
led.setCursor(0,1) ;
led.print("Y = "); lcd.print(voltl);
Затем устанавливается пауза в размере одной секунды :
delay(1000);
Величину паузы можно установить и другой, значение берется в миллисекундах, поэтому 1 секунда = 1000.
Таким образом, в текст программы нужно внести изменения соответственно фактическому напряжению на выходе 5-воль-тового стабилизатора платы ARDUINO UNO. После этого прибор будет работать точно и никакого налаживания или калибровки не потребует.
Каравкин В. РК-09-19.
Литература: 1. Каравкин В. - Двойной вольтметр на ARDUINO UNO, РК-01-2017.