Индикатор углов поворота на ARDUINO UNO и  датчиках P3020


Индикатор предназначен для измерения и индикации углов поворота двух механизмов. Например, его можно использовать как индикатор поворота двух антенн, либо антенны и флюгера, или для совсем каких-то других целей.

Для определения углов поворота используются два датчика типа Р3020. Эти датчики представляют собой законченные устройства, состоящие из датчиков Холла и электронной схемы. Внешне они напоминают переменный резистор, но его вал вращается без ограничений или мертвых точек.

Датчики измеряют угол поворота вала от 0° до 360°, при этом напряжение на их выходе плавно меняется от нуля до 5V. Соответственно, и питающее напряжение 5V.

Для того, чтобы «вольты» перевести в «градусы» нужно перед индикацией результата измерения, полученный результат в вольтах умножить на 72.

Индикатор было решено выполнить используя универсальный микроконтроллерный модуль ARDUINO UNO и двухстрочный ЖК-дисплей типа 1602А (на основе контроллера HD44780).

Можно легко сделать такой прибор. В одной строке он будет показывать значение угла с одного датчика, обозначим его «X», в другой - с другого датчика, обозначим его «У».

Но, прежде всего, хочу напомнить, что ARDUINO UNO это относительно недорогой готовый модуль, - небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания.

Принципиальная схема

Схема индикатора углов показана на рис. 1. Он представляет собой двойной цифровой вольтметр, представляющий результата измерения в градусах угла.

Принципиальная схема индикатора углов поворота на ARDUINO UNO и датчиках P3020

Рис. 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.


1 664 На микроконтроллерах
индикатор датчик наклона микроконтроллер avr микроконтроллер arduino
Оставить комментарий: