Меню

Ардуино аналоговый вход ток

Ардуино для начинающих. Урок 8. Аналоговые входы

Сегодня мы поговорим об аналоговых входах Arduino. На разных платах ардуино имеется разное количество аналоговых входов. Так например, у Arduino Uno их 6, а у Arduino Nano их 8. Узнать сколько аналоговых входов на конкретной плате Ардуино вы можете, посмотрев описание плат в разделе «Платы».

Как мы уже знаем, цифровые пины могут быть как входом так и выходом и принимать/отдавать только 2 значения: HIGH и LOW. Аналоговые пины могут только принимать сигнал. И в отличии от цифровых входов аналоговые измеряют напряжение поступающего сигнала. В большинстве плат ардуино стоит 10 битный аналогово-цифровой преобразователь. Это значит что 0 считывается как 0 а 5 В считываются как значение 1023. То есть аналоговые входы измеряют, подаваемое на них напряжение, с точностью до 0,005 вольт. Благодаря этому мы можем подключать разнообразные датчики и резисторы (термо резисторы, фоторезисторы,).

В этом уроке используется:

Большая макетная плата на 1600 точек с 4 шинами питания: Купить
Arduino Uno: Купить
Arduino Nano: Купить
Фоторезисторы 20 штук: Купить
Инфракрасный дальномер: Купить
Высокоточный инфракрасный дальномер с I2C: Купить
Набор резисторов из 100 штук на все случаи: Купить
Соединительные провода 120 штук: Купить
Потенциометры с колпачками 5 штук: Купить

Подключение фоторезистора к Arduino

Подключение фоторезистора к Arduino

Подключение фоторезистора к Arduino

Как видите, схема очень проста. Обратите на стягивающий резистор на 10 кОм. Зачем он нужен и какой номинал лучше выбрать мы говорили на прошлом уроке. Теперь давайте напишем простой скетч, который будет выводить в COM порт значения с аналогово входа.

Как видите в скетче нет ничего сложного. Команда analogReferense() не обязательна. Я добавил ее просто для демонстрации.

Давайте сделаем что то более интересное. Например ночник с автоматическим включением, если яркость освещения падает ниже определенного уровня. Для этого нам необходимо добавить в нашу схему светодиод через резистор на 150 Ом. Его мы подключаем к контакту 9 на Ардуино. Теперь наша схема выглядит так:

схема ночника на ардуино

схема ночника на ардуино

Так же немного доработаем наш скетч.

Я убрал из скетча все лишнее. По комментариям в коде вы легко разберетесь что к чему. Если какая то конструкция вам не понятно вы можете посмотреть справочник языка программирования ардуино.

Теперь мы можем использовать ШИМ, что бы яркость свечения светодиода изменялась в зависимости от освещения. Для этого нем не надо менять схему. Мы внесем небольшие изменения в код и все будет работать.

Обратите внимание на значения 750 и 900. Эти значения в вашем случае могут быть другими. Это зависит от номинала стягивающего резистора, от сопротивления вашего фоторезистора и уровня освещения в помещении. Загрузите первый скетч из этого урока и посмотрите какие крайние значения выводятся на экране.

По такому же принципу вы можете подключать множество других элементов и датчиков. Чаще всего продаются уже готовые датчики, и вам не придется самостоятельно фильтровать и отсеивать значения, подключать резисторы и т.д. В видео уроке наверху есть пример с подключением инфракрасного датчика расстояния. Там все очень просто.

1 комментарий

Диод не той стороной подключен в схеме ночника

Источник

Статья 5. Ардуино – Работа с аналоговыми входами

Статья 5. Ардуино – Работа с аналоговыми входами.

Цифровые входы и выходы – это хорошо. Но подавляющее количество экспериментов по физике мы будем проводить с аналоговыми входами. Что такое аналоговый сигнал Вы наверняка знаете. Мы об этом говорили в предыдущей статье. Это непрерывно изменяющийся во времени сигнал, показывающий, как изменяется непрерывно та или иная величина. На наше счастье в «Arduino» целых 6 аналоговых входов.

Что такое аналоговый вход? Это контакт в микроЭВМ «Arduino», на который вместе с GND (земля, общий контакт) можно подавать напряжение от 0 до 5 Вольт. В десятиразрядном аналого-цифровом преобразователе, который имеется в «Arduino» это сигнал превращается в цифровой. Цена деления при этом равна 4.9 мВ, а точность при таком делении равна 0,1 %. Такой результат легко можно получить, прочитав специальную литературу по АЦП.

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

Но сначала вспомним электрические цепи и элементы электрических цепей.

1. Электрическая цепь.

В нашей жизни мы настолько привыкли к различным электрическим приборам, что порой не задумываемся – как они работают. А в принципе все они устроены одинаково – и карманный фонарик и мобильный телефон, и компьютер и т. д.

Каждое электрическое устройство состоит из источника электрического тока – батареи или аккумулятора, самого устройства и выключателя.

Начнем с источника тока. Первым в мире источником тока была батарея Алессандро Вольта, изобретенная им в 1800 году. Подсказал идею источника электрического тока его друг — биолог Луиджи Гальвани. С тех пор подобные источники тока называются гальваническими.

Элемент Вольта представлял сосуд с раствором серной кислоты, в который были опущены 2 электрода – цинковый и медный ( рис.1.).

Цинковый электрод растворялся в растворе кислоты, и положительные ионы цинка уходили в раствор. В цинке был избыток электронов, поэтому он заряжался отрицательно, а раствор положительно. Так как медь практически не растворялась в

Рис.1. растворе, то она тоже была заряжена также как раствор — положительно. Таким образом, на медном электроде был +, а на цинковом -.

Если на одном электроде был +, а на другом -, то говорят, что на этих электродах есть электрическое напряжение. Оно тем больше, чем сильнее заряжены электроды. Если электроды источника тока замкнуть проводником R, то по нему начнут двигаться электроны от цинкового электрода к медному. Такое движение называется электрическим током. Правда, исторически сложилось так, что электрический ток в электрической цепи течет от + к -.

На рисунке 2 Алессандро Вольта

Рис.2. демонстрирует свое устройство императору Франции Наполеону.

Напряжение на зажимах источника тока измеряют в Вольтах (В).

Источник тока, изобретенный А. Вольта назывался химическим. В настоящее время к химическим источникам тока относятся круглые ( рис.3) и плоские ( рис.4) батареи и аккумуляторы для мобильников, компьютеров, автомобилей и т. д.

Для измерения напряжения источника тока или напряжение на какой-нибудь нагрузке существуют приборы – вольтметры, милливольтметры, микровольтметры и киловольтметры.

Рис 5. Аналоговый вольтметр. Рис.6 Цифровой вольтметр.

Вольтметры могут быть стрелочными ( рис 5.) и цифровыми ( рис.6). Запомните! Вольтметр всегда подключается параллельно нагрузке ( Рис. 7). У каждого вольтметра есть плюс и минус.

Если Вы при подключении их к измеряемому прибору перепутаете, то вольтметр можно испортить. Круглые батарейки ( не зависимо от размеров?) дают напряжение U = 1,5 В, плоские – U = 4,5 В, батареи типа «Крона» — U = 9 В, а

Рис 7. круглые аккумуляторы типа АА – U = 1,2 В.

С источником тока мы разобрались. Теперь подключим к источнику тока проводник. Так как на одном конце проводника +, а на другом-, то по проводнику потечет ток от = к —.Так как электрический ток это поток движущихся электронов, то они при движении будут сталкиваться с ионами, находящимися в узлах кристаллической решетки. Вследствие этого движение электронов замедлится и ток уменьшится. Величину тока, или, как принято говорить, силу тока измеряют специальные приборы – амперметры ( миллиамперметры, микроамперметры и килоамперметры ). Единицами силы тока являются А ( Ампер), мА (миллиАмпер, мкА ( микроАмермер) и кА ( килоАмпер).

Читайте также:  Сила тока это сила движения зарядов через проводник

Рис 8. Аналоговый амперметр. Рис.9 Цифровой амперметр.

Амперметры могут быть стрелочными ( рис 8.) и цифровыми ( рис.9). Запомните! Амперметр подключается последовательно нагрузке ( Рис. 10). У каждого амперметра есть плюс и минус. Если Вы при подключении их к измеряемому прибору перепутаете, то амперметр можно испортить.

Прибор, в котором при движении электронов вследствие столкновения их с ионами кристаллической решетки, уменьшается электрический ток, называется резистором. Свойство уменьшать электрический ток в цепи называется сопротивлением. Обозначается резистор буквой R, а его сопротивление измеряется в Ом, кОм, Мом. На рисунке Рис.11.

Получить полный текст Подготовиться к ЕГЭ Найти работу Пройти курс Упражнения и тренировки для детей

он обозначается в виде прямоугольника с буквой R ( рис 11).

Резисторы имеют два параметра – величину сопротивления резистора и рассеиваемую мощность. Величина сопротивления определяется по формуле R = ρ L/S. В этой формуле L –длина проводника, S – площадь поперечного сечения, а ρ – удельное сопротивление проводника, зависящее от строения кристаллической решетки проводника.

На рис. 12 вы видите внутреннее устройство резисторов. Видно, что они сделаны из разных материалов, у них разные длины и площади поперечных сечений, следовательно, сопротивления у них разные. Кроме

Рис.12. того, у верхнего резистора размеры большие, следовательно, тепла в окружающую среду оно отдаст больше, поэтому у него больше тепловая мощность рассеивания.

Промышленность выпускает очень большое количество резисторов на различные размеры сопротивлений и мощность рассеивания ( см. рис 13.).

Красные и зеленые резисторы отечественные, остальные ( с цветными полосками) зарубежные.

На отечественных резисторах их сопротивление написано прямо на корпусе.

100 – 100 Ом, 0,51 к – 510 Ом, 1 к – 1000 Ом, 3к2 – 3,3 кОм, 1 М – 1 Мом, 2М4 – 2,4 МОм.

На зарубежных резисторах используется цветная маркировка значений сопротивлений ( рис.14).

В зависимости от мощности рассеяния

( рис.15). резисторы обозначаются количеством и ориентацией нарисованных полосок.

Резисторы можно соединять последовательно, параллельно и смешанно.

На рисунке 16 изображены законы последовательного и параллельного соединения резисторов.

Типов резисторов существует достаточно много. Постепенно мы рассмотрим многие из них.

Рис. 17. Рис 18.

Вот перед Вами знакомый школьный реостат. Слева его схема ( рис. 17) и внешний вид ( рис. 18).

Рис. 19. Рис. 20. Рис. 21.

А это – потенциометр. Слева его схема ( рис. 19), устройство ( рис.20) и внешний вид ( рис. 18).

При работе с «Arduino» мы будем использовать и реостаты и потенциометры, но начнем с потенциометра.

2. Аналоговый ввод – потенциометр.

Итак, немного воспоминаний. У «Arduino» есть цифровые и аналоговые входы. С цифровыми мы немного разобрались, теперь перейдем к аналоговым. Напоминаю, что аналоговые входы работают только на вход. На них можно подавать напряжение от 0 до 5 В. В АЦП «Arduino» это аналоговое напряжение превращается в цифровой сигнал и идет далее на обработку. У «Arduino» UNO – 6 аналоговых входов а у «Arduino» MEGA – 16 аналоговых входов.

Будем работать с аналоговым вводом А0. Для этого используем потенциометр R. Величина R может находиться в пределах 10k – 100k. Крайние выводы потенциометра подключаются к источнику тока, так как показано на рис. 22.

От среднего и нижнего выводов потенциометра напряжение будет подаваться на входы А0 и GND. В качестве источника тока удобнее всего пользоваться плоской

Рис. 22. батареей на 4,5 В.

Теперь напишем скетч ( программу) для аналогового входа А0. Скетч очень похожий для скетчей цифровых датчиков, поэтом трудностей у Вас не должно возникнуть.

Скетч potenziometr.

Сначала надо подключить аналоговый вход А0.

int potPin = 0; // подключим аналоговый порт 0, вход целочисленный — переменная int целочисленная

В цикле установки, также как и цифровых датчиков, надо установить последовательное соединение на скорости 9600 бит за секунду между вашим Arduino и ПК с помощью следующей команды: Serial. begin(9600);

Serial. begin(9600); // открываем Serial соединение, оно нужно для приема и передачи

В основном цикле кода вам нужно инициализировать переменную для хранения значения преобразования (значения будут изменятся от 0 до 1023, потому лучше всего выбрать тип данных int : int val = analogRead(A0), val — переменная, считываемая с аналогового порта Ардуино

int val = analogRead(potPin); // считываем 10 битное значение переменной val 4 значения измеряемой величины

Для вывода значений val на экран вам нужно воспользоваться функцией Serial. println():
Serial. println(val, ), как и у цифровых датчиков.

Serial. println(val); // передаем значение величины val на внешние устройства, в нашем случае на с Serial. println Serial. println ерийный монитор

Если убрать лишние комментарии, то получится простой следующий скетч :

int potPin = 0; // подключим аналоговый порт 0, вход целочисленный

Serial. begin(9600); // открываем Serial соединение, оно нужно для приема и передачи

int val = analogRead(potPin); // считываем 10 битное значение измеряемой величины

Serial. println(val); // выводим значение величины от 0 до 1023.

Получить полный текст Подготовиться к ЕГЭ Найти работу Пройти курс Упражнения и тренировки для детей

Этот скетч можно скопировать в буфер, вставить в программу «Arduino» и он будет работать. Как?

· В начале эксперимента к входам А0 и GND выход потенциометра не подключен

Введем скетч в Ардуино и запустим его. Чтобы посмотреть работу скетча надо включить Serial Monitor. В окне Serial Monitor будут бежать произвольные числа от 0 до 1023. Дело в то, что на вход аналогового порта А0 мы ничего не подали и поэтому на его входе появляются случайные значения.

· Соединим А0 с GND. В окне Serial Monitor появится 0 !. И это правильно, потому что напряжение на входе Р0 действительно 0 В.

· Подадим на вход А0 и GND напряжение с потенциометра. При вращении оси потенциометра показания в окне Serial Monitor будут изменяться от 0 до 1023. как уже говорилось ранее в Ардуино 10 разрядный АЦП и значении 0 соответствует 0 В, а значению 1023 – 5 В.

Но ведь мы с потенциометра подавали напряжение от 0 до 5 ( 4,5) В. Как же получить такие значения? Оказывается, все решается очень просто.

2. Компьютерный аналоговый вольтметр. Измерение напряжения.

Мы уже говорили о том, что на аналоговый вход можно подавать напряжение от 0 до 5 В. Таким образом, мы имеем практически готовый вольтметр для измерения напряжения от 0 до 5 В с точностью 4,9 мВ. А работа с потенциометром только подтвердила это. Схема такого вольтметра достаточно проста

( рис.23). Необходимо подключить к аналоговому входу А0 ( или А1 –А5) и к GND ( земле) напряжение от 0 до 5 В.

К аналоговому входу А0 подключается + напряжения, а к GND – минус напряжения обычной плоской батареи. Прошу не путать полярность напряжения!

Эту схему можно поместить в отдельную небольшую коробочку и с помощью специального разъема, подключать к плате «Arduino». Это и будет Ваш первый вольтметр на «Arduino».

Скетч Voltmetr 5 V;

Читайте также:  Контрольная работа по теме работа мощность электрического тока 8 класс вариант 1 часть а

Скетч для «Arduino» изменится совсем немного.

int potPin = 0; // подключим аналоговый порт 0

float vv; // новая строка вводим новую вещественную переменную vv, она нужна для того чтобы на серийный монитор выводить дробные значения напряжения

Serial. begin(9600); // открываем Serial соединение, оно нужно для приема и передачи

int val = map(analogRead(potPin), 0, 1023, 0, 300);

// map преобразует 10 битное значение в 8 битное vv=val; // преобразуем целочисленную переменную val в вещественную vv

Serial. println(vv/60); // чтобы вывести напряжение в пределах 0 — 5 В делим на 60

По сути дела мы с Вами сделали вольтметр, который измеряет напряжение от 0 до 5 В. Точность вывода напряжения, будет зависеть от формата вывода, но об этом позже.

Напряжение выводится 4,4 В.

Рис.24 Рис.25

На рис.24 представлена оболочка программы Ардуино с загруженным скетчем Voltmetr 5V. На рис.25 представлен скриншот серийного монитора при измерении напряжения от плоской батареи.

Но если Вы захотите сделать настоящий вольтметр для «Arduino» с различными пределами измерений, то нужна более серьезная схема.

Один из вариантов таких схем представлен на рис. 26. Данный вольтметр рассчитан для измерения постоянных напряжений от 0 до 30 В. Так как аналоговый вход «Arduino» рассчитан на максимальное напряжение до 5 В, то для измерения напряжения до 30 В необходимо поставить делитель напряжения. Делитель напряжения состоит из двух резисторов R1 и R3. Он уменьшает подаваемое напряжение. Но так как подобрать резисторы с точными значениями очень сложно, то параллельно резистору R3 включен подстроечный резистор R2, который позволяет подаваемое напряжение точно разделить на 6. Тогда при подаче на вход напряжения в 30 В, на выходе будет напряжение в 5 В.

Чтобы случайно не подать на вход «Arduino» напряжение более 5 В, к нему подключен стабилитрон на 5,1 В. Стабилитрон работает так : пока на нем напряжение будет меньше 5,1 В, то он пропускает это напряжение. Если напряжение, подаваемое на стабилитрон будет больше 5,1 В, то он открывается, через него

Рис. 26 начинает течь ток и увеличивается падения напряжения на R1, а на стабилитроне так и остается 5,1 В. Конденсатор С1 служит для сглаживания пульсаций измеряемого напряжения.

Изменяя сопротивление R2 мы точно делим напряжение, подаваемое на вход в 6 раз.

Скетч для данного вольтметра очень похож на предыдущий.

Скетч Voltmetr 30 V;

int potPin = 0; // подключим аналоговый порт 0

Serial. begin(9600); // открываем Serial соединение, оно нужно для приема и передачи

int val = map(analogRead(potPin), 0, 1023, 0, 60);

// map преобразует 10 битное значение в 8 битное

Прошу не забывать фигурные скобки в скетче, иначе он не будет работать.

Изменяя сопротивления в делителе напряжения можно получить вольтметр для любого пределе измерения от 5 В до 1000 В. Для каждого измерения можно сделать переключатель и тоже поместить в отдельную коробочку.

Теперь нам надо сделать настоящий вольтметр с выводом информации на экран компьютера или видеомонитора.

Сделать это можно с помощью любого языка программирования. На страницах Интернета очень хорошо описана связка языков программирования «Arduino» +

«Processing». Но мне кажется, что учителю физики гораздо ближе язык PascalABC NET, который изучается на уроках информатики в большинстве школ нашей страны. Поэтому рассказывать о выводе на экран измеряемых физических величин я буду, основываясь на языке PascalABC NET, .

В связи с этим к следующему занятию я прошу Вас скачать из Интернета две бесплатные программы : PascalABC NET и приложение к операционной системе Windows( ХP, 7, 8 ) Microsoft. NET 4 ( или 5). Введя эти программы и подключив к ним «Arduino», мы с Вами выведем на экран компьютера или на экран видеопроектора значения измеряемого напряжения.

Практическая работа № 1.

Потенциометр.

1. Оборудование : микроЭВМ «Arduino», потенциометр, провод USB, компьютер с установленным скетчем.

2. Собрать схему ( рис.27). Компилировать и загрузить скетч.

3. Включить Seral Monitor.

4. Изменяя положение движка потенциометра наблюдать за изменением информации на экране.

5. Подключите потенциометр к

другому пину (А1 –А16), и

изменив скетч, проделать пункты 2 – 4.

Практическая работа № 2.

Вольтметр 0 – 5 В.

1. Оборудование : микроЭВМ «Arduino», потенциометр, провод USB, компьютер с установленным скетчем.

2. Собрать схему. Компилировать и загрузить скетч.

3. Включить Seral Monitor.

4. Подключив к входу А0 измерить напряжение источника тока.

5. Проверить точность измерений с помощью вольтметра.

Источник

Arduino.ru

Аналоговые входы

Описание портов, работающих как аналоговые входы, платформы Arduino (Atmega8, Atmega168, Atmega328, или Atmega1280)

Аналого-цифровой преобразователь

Микроконтроллеры Atmega, используемые в Arduino, содержат шестиканальный аналого-цифровой преобразователь (АЦП). Разрешение преобразователя составляет 10 бит, что позволяет на выходе получать значения от 0 до 1023. Основным применением аналоговых входов большинства платформ Arduino является чтение аналоговых датчиком, но в тоже время они имеют функциональность вводов/выводов широкого применения (GPIO) (то же, что и цифровые порты ввода/вывода 0 — 13).

Таким образом, при необходимости применения дополнительных портов ввода/вывода имеется возможность сконфигурировать неиспользуемые аналоговые входы.

Цоколевка

Выводы Arduino, соответствующие аналоговым входам, имеют номера от 14 до 19. Это относится только к выводам Arduino, а не к физическим номерам выводов микроконтроллера Atmega. Аналоговые входы могут использоваться как цифровые выводы портов ввода/вывода. Например, код программы для установки вывода 0 аналогового входа на порт вывода со значением HIGH:

pinMode(14, OUTPUT);
digitalWrite(14, HIGH);

Подтягивающие резисторы

Выводы аналоговые входов имеют подтягивающие резисторы работающие как на цифровых выводах. Включение резисторов производится командой

digitalWrite(14, HIGH); // включить резистор на выводе аналогового входа 0

пока вывод работает как порт ввода.

Подключение резистора повлияет на величину сообщаемую функцией analogRead() при использовании некоторых датчиков. Большинство пользователей использует подтягивающий резистор при применении вывода аналогового входа в его цифровом режиме.

Подробности и предостережения

Для вывода, работавшего ранее как цифровой порт вывода, команда analogRead будет работать некорректно. В этом случае рекомендуется сконфигурировать его как аналоговый вход. Аналогично, если вывод работал как цифровой порт вывода со значением HIGH, то обратная установка на ввод подключит подтягивающий резистор.

Руководство на микроконтроллер Atmega не рекомендует производить быстрое переключение между аналоговыми входами для их чтения. Это может вызвать наложение сигналов и внести искажения в аналоговую систему. Однако после работы аналогового входа в цифровом режиме может потребоваться настроить паузу между чтением функцией analogRead() других входов.

Источник



Аналоговые входы Arduino

В прошлом уроке мы разобрали измерение и вывод цифрового сигнала с микроконтроллера, а в этом разберём аналоговый сигнал. Как мы уже не раз говорили ранее, у микроконтроллера есть аналоговые входы, т.е. входы, подключенные к АЦП – аналогово-цифровому преобразователю (ADC). На платах Ардуино это пины, маркированные буквой А. Я не просто так написал название в кавычках, потому что не все пины являются только аналоговыми: например на плате Nano пины A0-A5 являются также обычными цифровыми, и у них есть возможность измерять аналоговый сигнал как доп. функция. Пины A6 и A7 являются чисто аналоговыми.

Зачем нужно читать аналоговый сигнал? Микроконтроллер может выступать в роли вольтметра, измерять собственное напряжение питания, например от аккумулятора, может измерять ток через шунт (если вы знаете закон Ома), можно измерять сопротивление, а также работать с потенциометрами (крутильными, линейными, джойстиками), которые являются очень удобными органами управления.

Читайте также:  Как образуется электрический ток в полупроводниках

Чтение сигнала

“Аналоговые” пины могут принимать напряжение от 0 (GND) до опорного напряжения и преобразовывать его в цифровое значение, просто в какие-то условные единицы. АЦП у нас имеет разрядность в 10 бит, т.е. мы получаем измеренное напряжение в виде числа от 0 до 1023. Функция, которая оцифровывает напряжение, называется analogRead(pin) , данная функция принимает в качестве аргумента номер аналогового пина и возвращает полученное значение. Сам пин должен быть сконфигурирован как INPUT (вход), напомню, что по умолчанию все пины так и настроены. Пин кстати указывается “аналоговый”:

  • Просто номером А-пина (например, )
  • Номером с буквой А (например, А0)
  • Порядковым номером GPIO: А0 – 14 пин, A1 – 15 пин… А7 – 21

Вот пример, опрашивающий пин А0.

Хранить полученное значение разумно в переменной типа int, потому что значение варьируется от 0 до 1023.

Потенциометры

Аналоговые пины и АЦП в целом очень часто используются при работе с потенциометрами (он же переменный резистор или реостат). 10 бит АЦП позволяют дать возможность задавать в программу значения от 0 до 1023 (или кратные им), то есть влиять на ход работы программы, менять какие-то настройки и тому подобное. У потенциометра всегда три ноги: две крайние и одна центральная. Всё вместе это представляет собой делитель напряжения, который и позволяет менять напряжение в диапазоне 0-VCC:

К Arduino потенциометр подключается вот так, средний вывод на любые A-пины, крайние – на GND и питание. От порядка подключения GND и питания зависит направление изменения значения. Что касается сопротивления, то читай заметку по делителям напряжения ниже в этом уроке. Чаще всего для микроконтроллеров ставят потенциометры с сопротивлением 10 кОм, но диапазон в принципе очень широк: от 1 кОм до 100 кОм. Чем больше, тем более шумным будет приходить сигнал, а если брать меньше – пойдут потери тока в нагрев потенциометра, а это никому не нужно.

Опорное напряжение

Опорное напряжение играет главную роль в измерении аналогового сигнала, потому что именно от него зависит максимальное измеряемое напряжение и вообще возможность и точность перевода полученного значения 0-1023 в Вольты. Изучим следующую функцию – analogReference(mode) , где mode:

  • DEFAULT : опорное напряжение равно напряжению питания МК. Активно по умолчанию
  • INTERNAL : встроенный источник опорного на 1.1V для ATmega168 или ATmega328P и 2.56V на ATmega8
  • INTERNAL1V1 : встроенный источник опорного на 1.1V ( только для Arduino Mega )
  • INTERNAL2V56 : встроенный источник опорного на 2.56V ( только для Arduino Mega )
  • EXTERNAL : опорным будет считаться напряжение, поданное на пин AREF

После изменения источника опорного напряжения (вызова analogReference() ) первые несколько измерений могут быть нестабильными (сильно шумными).

Значение 1023 функции analogRead() будет соответствовать выбранному опорному напряжению или напряжению выше его, но не выше 5.5V, что спалит плату. То есть при режиме DEFAULT мы можем оцифровать напряжение от 0 до напряжения питания. Если напряжение питания 4.5 Вольта, и мы подаём 4.5 Вольт – получим оцифрованное значение 1023. Если подаём 5 Вольт – опять же получим 1023, т.к. выше опорного. Это правило работает и дальше, главное не превышать 5.5 Вольт. Как измерять более высокое напряжение (12 Вольт например) я расскажу в отдельном уроке.

Что касается точности: при питании от 5V и режиме DEFAULT мы получим точность измерения напряжения (5 / 1024)

4.9 милливольт. Поставив INTERNAL мы можем измерять напряжение от 0V до 1.1V с точностью (1.1 / 1024)

0.98 милливольт. Весьма неплохо, особенно если баловаться с делителем напряжения.

Что касается внешнего источника опорного напряжения. Нельзя использовать напряжение меньше 0V или выше 5.5V в качестве внешнего опорного в пин AREF. Также при использовании режима EXTERNAL нужно вызвать analogReference(EXTERNAL) до вызова функции analogRead() , иначе можно повредить микроконтроллер. Можно подключить опорное в пин AREF через резистор на

5 кОм, но так как вход AREF имеет собственное сопротивление в 32 кОм, реальное опорное будет например 2.5 * 32 / (32 + 5) =

Измерение напряжения

0-5 Вольт

Простой пример, как измерить напряжение на аналоговом пине и перевести его в Вольты. Плата питается от 5V.

Таким образом переменная voltage получает значение в Вольтах, от 0 до 5. Чуть позже мы поговорим о более точных измерениях при помощи некоторых хаков.

Почему мы делим на 1024, а не на 1023 , ведь максимальное значение измерения с АЦП составляет 1023? Ответ можно найти в даташите:

АЦП при преобразовании отнимает один бит, т.е. 5.0 Вольт он в принципе может измерить только как 4.995, что и получится по формуле выше: 1023 * 5 / 1024 == 4.995.. . Таким образом делить нужно на 1024, если кто-то у вас спросит почему – отправьте его читать даташит.

Сильно больше 5 Вольт

Для измерения постоянного напряжения больше 5 Вольт нужно использовать делитель напряжения на резисторах (Википедия). Схема подключения, при которой плата питается от 12V в пин Vin и может измерять напряжение источника (например, аккумулятора):

Код для перевода значения с analogRead в вольты с учётом делителя напряжения:

Как выбрать/рассчитать делитель напряжения?

  • Согласно даташиту на ATmega, сумма R1 + R2 не рекомендуется больше 10 кОм для достижения наибольшей точности измерения. В то же время через делитель на 10 кОм будет течь ощутимый ток, что критично для автономных устройств (читай ниже). Если девайс работает от сети или от аккумулятора, но МК не используется в режиме сна – ставим делитель 10 кОм и не задумываемся. Также рекомендуется поставить конденсатор между GND и аналоговым пином для уменьшения помех.
  • Если девайс работает от аккумулятора и микроконтроллер “спит”: пусть аккумулятор 12V, тогда через 10 кОм делитель пойдёт ток 1.2 мА, согласно закону Ома. Сам микроконтроллер в режиме сна потребляет

1 мкА, что в тысячу раз меньше! На самом деле можно взять делитель с гораздо бОльшим суммарным сопротивлением (но не больше 20 МОм, внутреннего сопротивления самого АЦП), но обязательно поставить конденсатор на

0.1 мкФ между аналоговым пином и GND (вот здесь проводили эксперимент). Таким образом например при при R1+R2 = 10 МОм (не забыть про конденсатор) ток через делитель будет 1.2 мкА, что уже гораздо лучше!
Коэффициент делителя равен (R1 + R2) / R2 . Коэффициент должен быть таким, чтобы при делении на него измеряемого напряжения не получилось больше 5 Вольт. У меня в примере (10 + 4.7) / 4.7

3.13 . Я хочу измерять литиевый аккумулятор с максимальным напряжением 12.8 Вольт. 12.8 / 3.13

4 Вольта – отлично. Например для измерения 36 Вольт я бы взял делитель с плечами 100к и 10к.

  • Можно воспользоваться онлайн-калькулятором.
  • Сильно меньше 5 Вольт

    Для более точных измерений маленького напряжения можно подключить пин AREF к источнику низкого опорного напряжения (об этом было выше), чтобы “сузить” диапазон работы АЦП. Источник может быть как внешний, так и внутренний, например изменив опорное на внутреннее 1.1V ( analogReference(INTERNAL) ) можно измерять напряжение от 0 до 1.1 Вольта с точностью 1.1/1024

    Видео

    Источник