Пины (выводы) микроконтроллеров можно настроить так, чтобы они либо выдавали сигнал, либо его считывали, то есть работать либо как вход, либо как выход. Но сигналы бывают цифровыми и аналоговыми. Цифровой сигнал принимает два значения — единицу или ноль, ну или высокое (HIGH) и низкое (LOW). Но вот аналоговый сигнал плавно изменяется и может принимать любое значение.
Рассмотрим небольшую аналогию со светом. В простейшем вы говорите «светло» или «темно». Если перевести это в цифровой сигнал, то достаточно 1 бита, чтобы передать такой объём информации, например:
- — светло;
- — темно.
Если передать больше информации, то потребуется больше бит, например:
- 00 — кромешная тьма;
- 01 — сумерки;
- 10 — достаточно светло;
- 11 — слишком яркий свет.
Но если рассказать об этом подробнее, то ответ уже не будет столь однозначным. Появляются такие данные, как насколько конкретно светло или темно, какая цветовая температура у света (тёплый или холодный), направленный свет или рассеянный, с какой стороны он светит и так далее. Получается, что чем более полное описание чего-нибудь вы даёте, тем больше данных нужно передать. Ну а в мире микроконтроллеров и цифровых устройств потребуется больше бит, чтобы записать и передать эту информацию.
Закончим с аналогиями и вернемся к электронике, как уже отмечалось ранее, цифровой сигнал может принимать два значения — логической ноль или единицу, аналоговый же сигнал принимает бесконечное множество значений.
![сигналы](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-3.png)
![](https://lampaexpert.ru/wp-content/uploads/2018/06/image-2-75x75.jpg)
Чтобы преобразовать сигнал из аналогового в цифровой используют АЦП (аналогово-цифровые преобразователи). Они различаются по количеству бит, или простыми словами, по количеству единиц и нулей, в которых представляется тот или иной сигнал. Например, в ардуино АЦП 10-битный, то есть, что он может принимать 2 в 10-й степени значений, а именно 1024.
![аналоговый сигнал](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-1-1.png)
При этом аналоговый вход ардуины может принимать сигнал значение от 0 до 5 вольт, то есть вы можете считывать (измерять) напряжение от 0 до 5 вольт с точностью: 5/1024=0,005 вольта.
Для чего используется
Чтение аналоговых сигналов, как ни странно, применяется для чтения сигнала с аналоговых датчиков. Датчики, в свою очередь, также бывают с аналоговым и цифровым выходом. То есть либо выдаётся какая-то плавно изменяющаяся величина, либо набор из единиц и нулей, которые потом расшифровываются и обрабатываются программой микроконтроллера.
Например, аналоговые входы можно использовать:
- Для измерения температуры с помощью термопары или терморезистора;
- Для измерения освещенности фоторезисторами, фотодиодами и пр.;
- Плавно задавать какие-то величины с помощью потенциометров, поворотных и вращающихся джойстиков, что удобно использовать для управления различными механизмами, радиоуправляемыми моделями, регулировки оборотов двигателей или интенсивности свечения источников света.
- Измерения веса или давления с помощью тензодатчиков и так далее.
Некоторые из применений мы рассмотрим ниже.
Как работать с аналоговым входом?
С теорией разобрались, перейдем к практике. В любой программе ардуино есть две основных функции:
- void setup() – в ней настраивается режим работы микроконтроллера или его определенных узлов, а также назначаются его пины для работы в качестве входа или выхода.
- void loop() — это непосредственно программа, которая выполняется циклично строчка за строчкой.
Перед void setup() указываются библиотеки, которые будут использованы в программе, задаются какие-то переменные и прочее.
Для начала выберем аналоговый пин и настроим его для работы в качестве входа для этого пишем
void setup() {
pinMode(A0, input)
}
Здесь A0 – номер аналогового входа, input – режим работы в качестве входа.
Если вы не знаете какие пины и для чего могут использоваться – вам поможет карта пинов ардуино, вы можете найти её для каждой версии платы по запросу «adruino uno pinout», если плата Arduino UNO, если у вас другая модификация, например, nano, пишем соответственно «arduino nano pinout» и так далее для каждого случая.
![Урок по Arduino №2: для чего нужны аналоговые входы на Arduino и как их использовать?](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-2-1.png)
Здесь мы видим, что аналоговые выходы, они выделены зеленым цветом, кстати, цифровые номера пинов сохраняются и вы можете использовать вместо A0, например, просто цифру 14 — pinMode(14, input) — это аналогичное выражение в коде. В Arduino UNO аналоговых входов 6, в nano их уже 8 (несмотря на то что она построена на таком же микроконтроллере), а в Mega их аж 16.
Добавим к коду возможность чтения данных с последовательного порта. Это нужно для того, чтобы микроконтроллер передавал компьютеру какую-то информацию, и мы могли её прочитать. Для этого нужно использовать команду со следующим синтаксисом Serial.begin(9600) (размеры букв важны, нужно писать именно так), тогда код примет вид:
void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
}
На этом настройка микроконтроллера завершена.
Пока что оставим программирование. Мы рассмотрим, как изменяются данные с аналогового входа на примере потенциометра. Для этого подключим его крайние выводы к источнику питания, а средний вывод ко входу А0.
![Урок по Arduino №2: для чего нужны аналоговые входы на Arduino и как их использовать?](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-3-1.png)
Потенциометр подойдет на 1….10 кОм. Собираем элементарную схему и открываем Arduino IDE. Дальше будем использовать такой код:
int val=0;
void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
}
void loop() {
val = analogRead(A0);
Serial.println(val);
delay(1000);
}
Подключим по указанной схеме потенциометр, у меня оказался чуть меньше чем на 9.2 кОм.
И соберем схему, обратите внимание, если датчик питается от одного, а ардуино от другого источника питания, как у меня, то нужно соединить их минусы (gnd), иначе работать не будет.
![Ардуино в подключении](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-5.png)
Дальше включаем монитор порта в Arduino IDE и можем наблюдать какое значение у нас на аналоговом входе.
![Урок по Arduino №2: для чего нужны аналоговые входы на Arduino и как их использовать?](https://lampaexpert.ru/wp-content/uploads/2019/11/unnamed-2.png)
Я прокрутил ручку потенциометра от края до края и на экране значения изменились с 0 до 1023, соответственно напряжение на входе изменилось с 0 до 5 вольт. А дальше я плавно вращал ручку потенциометра и значения также изменялись, что вы можете видеть на иллюстрации ниже.
![Изменение сигнала](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-6-353x670.png)
Дальше я взял фоторезистор и подключил его по схеме делителя напряжения последовательно с резистором на 1 кОм, плюс питания подключил к фоторезистору, а минус к резистору, точку соединения резистора и фоторезистора подключил к аналоговому входу.
![фоторезистор](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-7.png)
Освещение на первых снимках слабое, ранее пасмурное утро, света с окна почти нет, свет в большинстве своем падает от монитора, я закрыл пальцем, чтобы увидеть, какой сигнал будет в максимально тёмном состоянии, а затем убрал его.
![Фоторезистор закрыт](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-8.png)
Дальше я включил настольную лампу, зафиксировал изменение сигнала, после чего поставил лампу прямо над фоторезистором максимально близко.
![Сигнал с фоторезистора](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-9.png)
Таким образом, определив значения сигналов при разной степени освещенности, вы можете использовать их для управления чем-либо, простейший пример — сделать фотореле, в котором можете тонко настроить пороги срабатывания в программе.
Ну и напоследок, мне попался датчик воды, который оказался скорее не датчиком уровня, а датчиком наличия воды, поскольку в сухом состоянии сигнал с него был 0, при частичном погружении порядка 250-260, и при полном погружении эта цифра не изменилась, ну стала больше на 10, но значение прыгало вверх-вниз. Подключается он просто — на плате датчика обозначены «+», «-» и «S» (сигнал), подал на плату питание, а S подключил к аналоговому входу, код никак не изменял, ниже вы видите, что из этого вышло.
![Сухой датчик](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-10.png)
![датчик в воде](https://lampaexpert.ru/wp-content/uploads/2019/11/pasted-image-0-11.png)
Заключение
В этой статье мы разобрались, как пользоваться аналоговым входом ардуино и выводить информацию от микроконтроллера через последовательный порт, кстати, так вы можете выводить любые значения и использовать это для взаимодействия с компьютером, например, если напишете программу, которая будет отображать какие-то параметры, полученные от датчика. Любители иногда используют это при построении домашних метеостанций, и просматривают данные о температурах и влажности на компьютере.
В следующей статье мы будем использовать полученные знания для регулировки электрических величин с помощью ШИМ. С потенциометра мы будем считывать значение (положение его рукояти), как было показано в этой статье, использовать их для установки скважности ШИМ. Также я расскажу, что такое ШИМ и как его можно использовать в управлении светодиодами и коллекторным двигателем (моторчиком от игрушек).
Предыдущая