Амперметр для ардуино своими руками

Содержание
  1. Амперметр для ардуино своими руками
  2. Исходный код
  3. Амперметр на ардуино для умного дома
  4. Digitrode
  5. цифровая электроника вычислительная техника встраиваемые системы
  6. Амперметр на Arduino своими руками
  7. Цифровой амперметр на основе Arduino Uno
  8. Основные положения закона Ома
  9. Необходимые компоненты
  10. Принципиальная схема и соединения
  11. Измерение тока
  12. Расчеты
  13. Исходный код программы
  14. Амперметр arduino: пример реализации устройства
  15. Вольт-ампер-energy-метр на Arduino. Часть 2. Амперметр
  16. Исходный код
  17. Ссылки
  18. Железо
  19. Вольт ампер метр на Arduino мини часть 1,2 | Пелинг Инфо солнечные батареи – ветрогенераторы DIY своими руками 2011 г-2018г
  20. Nano вольт – амперметр 2 канала
  21. Секретный вольтметр в Arduino — измерение напряжения батареи средствами микроконтроллера
  22. Мотивация
  23. Как это сделать
  24. Выводы (пины) arduino
  25. 1. Интерфейсы
  26. 2. Цифровые выводы с поддержкой ШИМ (PWM)
  27. 3. Выводы поддерживающие прерывания
  28. 4. Итог: Рекомендуемая последовательность
  29. Иллюстрация вышеописанного
  30. Полезная информация
  31. Аналоговые измерения с Arduino | РОБОТОША
  32. analogRead
  33. Используем прерывания АЦП
  34. Измерение постоянного тока с помощью AVR. Простой вольт-амперметр

Амперметр для ардуино своими руками

Итак к этому момент у нас есть вольтметр постоянного напряжения с пределом 0..20в (смотрите предыдущую часть). Теперь мы добавляем к нему амперметр 0..5а. Для этого немного модифицируем схему — она станет проходной, то есть имеет как вход так и выход.

Часть касающуюся отображения на LCD я убрал — она не будет меняться. Впринципе основной новый элемент — шунт Rx на 0.1 Ом. Цепочка R1-C1-VD1 служит для защиты аналогового входа. Такую же имеет смысл поставить и по входу A0. Поскольку мы предполагаем достаточно большие токи, есть требования к монтажу — силовые линии должны быть выполнены достаточно толстым проводом и соединяться с выводами шунта непосредственно (проще говоря, припаяны), иначе показания будут далеки от реальности. Есть так же замечание по току — впринципе опорное напряжение 1.1в позволяет регистрировать на шунте 0.1 Ом ток до 11 ампер с точностью немного хуже 0.01а, но при падении на Rх такого напряжения выделяемая мощность превысит 10 Вт, что совсем не весело. Для решения проблемы можно было бы использовать усилитель с коэффициентом усиления 11 на качественном ОУ и шунт на 10 мОм (0.01Ом). Но пока мы не будем усложнять себе жизнь и просто ограничимся в токе до 5а (при этом мощность Rx можно выбрать порядка 3-5 Вт).

На этом этапе меня ждал сюрприз — оказалось что АЦП контроллера имеет достаточно большое смешение нуля — около -3мВ. То есть АЦП просто не видит сигналы менее 3мВ, а сигналы чуть большего уровня видны с характерной неточностью -3мВ, что портит линейность в начале диапазона. Беглый поиск не дал явных ссылок на такую проблему (смещение нуля это нормально, но оно должно быть существенно меньше), поэтому вполне возможно это проблема конкретного экземпляра Atmega 328. Решение я выбрал двоякое — по напряжению — программную ступеньку в начале диапазона (отображение начинается с 0.06 вольт), по току — подтягивающий резистор на шину 5в. Резистор обозначен пунктиром.

Исходный код

Полную версию этого вольт-ампер-метра (в варианте с I2C) можно скачать по ссылке в конце статье. Далее я покажу изменения в исходном коде. Добавилось чтение аналогового входа A1 с таким же усреднением как и для вольтметра. По сути это тот же вольтметр, только без делителя, а амперы мы получаем по формуле Ома: I = U/Rx (например, если падение напряжения на Rx = 0.01 В, то ток равен 0.1А). Также я ввел константу усиления по току AmpMult — на будущее. Константу AmpRx с сопротивлением шунта вероятно придется подобрать — учесть неточность резистора шунта. Ну и раз уже это это вольт-ампер-метр и на дисплее 1602 еще осталось место, то осталось вывести текущую потребляемую мощность в ваттах, получив не сложный дополнительный функционал.

Источник

Амперметр на ардуино для умного дома

Если вы очень переживаете за расход электро энергии и жуть как хочется вычислить виновника — это ваш день. Мы соберем датчик тока напишем простую логику для обработки входных значений для пересчета значений в киловаты/ч.

Для сборки я использовал плату Arduino nano (никто не мешаем вам использовать тот же код для ESP или STM плат), LCD экранный шилд, резистор на 56 Ом, резисторы 100 кОм, конденсатор 10 мКф, датчик тока CT — Talema AC103 (с номинальным измерением 30A и максимальным 75A).

Что такое датчик тока?

Датчик тока — это магнитопровод с зазором и обмоткой компенсации, а так же встроенный датчик Холла и плата управления. Датчик Холла размещается в зазоре магнитопровода и реагирует на создаваемое катушкой магнитное поле. Чем сильнее напряженность магнитного поля, тем сильнее датчик Холла подает сигнал, который усиливается платой управления.
Датчики тока бывают для измерения переменного тока и постоянного тока. Наш — CT-Talema AC103 — для переменного.

Соберем наше устройство согласно схеме:

LCD шилд уже имеет выводы для подключения наших аналоговых портов для измерения сигнала — и это удобно.
Через датчик тока нужно пропустить единственный вводной кабель фазы т.к. на нулевой провод зачастую приходит не все напряжение — часть может уходить через заземление.

Не забываем, что нам нужно выполнить калибровку нагрузочного резистора R3. Формула расчета R = V / I — R = 2,5 / 0,042 = 59,5 Ом где 2,5 — опорное напряжение на плате, а 42mA — потребление платы. По тому принимаем самый близкий резистор по номиналу — 56 Ом.
Для деление основного напряжения питания до опорного 5/2 вам потребуется поставить два одинаковых резистора R1 и R2.

Остается только загрузить пример кода в Arduino:

Завершающим шрихом нашей установки станет калибровка. Ее лучше выполнять при включенной эталонной нагрузке известной мощности. Для этого хорошо подходят мощные лампы накаливания. Возьмем лампу на 100 Ват. Включаем плату и высчитываем поправочный коэффициент:
Двойной RMSCurrent = ((maxCurrent — 516) * 0,707) /11,8337 где 11.8337 — подобранный коэффициент для компенсации расхождений в измерениях.

Источник

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Амперметр на Arduino своими руками

Амперметр представляет собой устройство, который способен измерять проходящий через него ток. Амперметры бывают как аналоговые (например, стрелочные), так и цифровые. На самом деле сделать самостоятельно цифровой амперметр не так уж и сложно. Тем более, когда имеется плата Arduino.

В данном материале показан проект, который может измерять неизвестное текущее значение постоянного тока. При этом величина зарегистрированного тока отображается на LCD-дисплее 16*2.

Здесь используется плата Arduino pro mini. Концепция проекта заключается в применении АЦП для считывания напряжение, которое в последствии делится на значение сопротивления резистора, через который проходит ток, чтобы получить искомую величину тока. Резистор в данном случае представляет собой шунт, поскольку включен в схему таким образом, чтобы через его основные терминалы протекал ток цепи, а измерительными терминалами он подключается параллельно плате Arduino для считывания напряжения. На каждом терминале, подключенном к определенной линии АЦП, присутствует напряжение в диапазоне от 0 до 5 В, и разность напряжений этих двух терминалов пропорциональна току, текущему через шунт. Схематично подключение шунта можно представить на изображении ниже.

Здесь I представляет собой ток, текущий через резистор-шунт, R является сопротивлением этого шунта, а V представляет собой разность потенциалов между двумя измерительными терминалами, то есть V = V2 – V1. Тогда по закону Ома ток находится очень легко: I = (V2 – V1) / R.

В данном проекте также нужно грамотно подойти к вопросу выбора сопротивления для резистора-шунта. Оно должно быть таким, чтобы не оказывать влияния на работу нагрузки, которая потребляет ток. Использование высокого значения сопротивления приведет к тому, что падение напряжения на резистивном пути будет слишком большим, что не обеспечит нагрузку достаточным током. Использование же слишком малого значения сопротивления не позволит АЦП правильно считать значение. Для выбора сопротивления можно применить следующее правило: R >Vр / I. Здесь Vр представляет собой напряжение разрешения АЦП, то есть минимальное напряжение, которое может зарегистрировать аналогово-цифровой преобразователь. В нашем случае оно составляет 4.88 мВ. Тогда, например, если минимальное требуемое значение тока для измерения составляет 0.5 мА, то получим: R > 4.88 мВ / 0.5 мА > 9.76. То есть можно взять сопротивление 10 Ом.

Ниже представлена схема амперметра на Arduino, и приведен код программы.

Источник

Цифровой амперметр на основе Arduino Uno

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

Основные положения закона Ома

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

Читайте также:  Вуаль для штор своими руками

V = IR

V — напряжение на проводнике в вольтах (В),
I — ток, проходящий через проводник в амперах (А),
R – сопротивление проводника в омах (Ω).

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

I = V / R

То есть для нахождения значения тока нам нужно знать всего 2 величины: напряжение и сопротивление.

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

Согласно приведенной схемы мы будем находить 2 значения напряжения. Разница между напряжениями (V1-V2) на двух концах резистора даст нам падение напряжения на резисторе (R), и когда мы разделим падение напряжения на сопротивление резистора, мы получим силу тока (I) через устройство.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. ЖК дисплей 16х2 (купить на AliExpress).
  3. Резистор 22 Ом (купить на AliExpress).
  4. Светодиод (купить на AliExpress).
  5. Потенциометр 10 кОм (купить на AliExpress).
  6. Мультиметр.
  7. Макетная плата.
  8. Соединительные провода.

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

Схема устройства представлена на следующем рисунке.

От платы Arduino Uno осуществляется питание всех остальных компонентов схемы. Выход датчика измерения силы тока подключен к одному из аналоговых контактов платы Arduino. ЖК дисплей подключен к цифровым контактам Arduino (7,8,9,10,11,12).

ЖК дисплей содержит 16 контактов, первые два контакта (VSS,VDD) и последние два контакта (анод и катод) подключены к земле и 5v. Контакты сброса (RS) и доступности (E) подключены к цифровым контактам Arduino 7 и 8. Контакты данных D4-D7 подключены к цифровым контактам Arduino (9,10,11,12). Контакт V0 подключен к средней точке потенциометра. Красный и черный провода – соответственно 5v и gnd (земля).

Измерение тока

Схема нашего амперметра содержит резистор и светодиод в качестве нагрузки. Резистор соединен последовательно со светодиодом, поэтому ток через него можно определить измеряя падение напряжения на резисторе. Точки V1, V2, в которых измеряется напряжение, подсоединены к аналоговым входам платы Arduino.

На этих аналоговых входах стоят АЦП (аналогово-цифровые преобразователи) с разрешением 10 бит, которые конвертируют входное напряжение в число от 0 до 1023. Параметры этого конвертирования мы можем изменить в программе. Также нам необходимо знать, какое минимальное напряжение способны обрабатывать АЦП на аналоговых входах платы Arduino – оно составляет 4.88mV. Таким образом, мы можем просто умножить значение с выхода АЦП на 4.88mV и получить, соответственно, значение напряжения на входе АЦП (на входе аналогового контакта платы). Более подробно про АЦП в Arduino можно прочитать в этой статье.

Расчеты

Итак, значение на выходах АЦП платы Arduino лежит в диапазоне 0-1023, а опорное напряжение – в диапазоне 0-5v.

Рассмотрим пример. Допустим, V1= 710, V2= 474 и R=22Ω, разница между напряжениями (точнее их конвертированными значениями на выходах АЦП) составляет 236. Умножив 236 на 0.00488 мы получим значение напряжения 1.15v – это и есть нужное нам значение падения напряжения. Разделив это значение напряжения на 22 (сопротивление) мы получим текущее значение тока 0.005A. Таким образом, с помощью платы Arduino мы можем достаточно просто измерять силу тока, проходящего через нагрузку.

Исходный код программы

Полный текст программы приведен в конце статьи, здесь же сначала рассмотрим его наиболее важные фрагменты.

Сначала в программе нам необходимо подключить все используемые библиотеки (в нашем случае мы будем использовать только одну библиотеку – для работы с ЖК дисплеем). Затем мы будем считывать значения напряжения в двух точках с помощью функции analogread .

Источник

Амперметр arduino: пример реализации устройства

Вольт-ампер-energy-метр на Arduino. Часть 2. Амперметр

Главная » Статьи » Мои статьи

Вольт-ампер-energy-метр на Arduino. Часть 2. Амперметр

Итак к этому момент у нас есть вольтметр постоянного напряжения с пределом 0..20в (смотрите предыдущую часть). Теперь мы добавляем к нему амперметр 0..5а. Для этого немного модифицируем схему – она станет проходной, то есть имеет как вход так и выход.Часть касающуюся отображения на LCD я убрал – она не будет меняться. Впринципе основной новый элемент – шунт Rx на 0.1 Ом. Цепочка R1-C1-VD1 служит для защиты аналогового входа. Такую же имеет смысл поставить и по входу A0. Поскольку мы предполагаем достаточно большие токи, есть требования к монтажу – силовые линии должны быть выполнены достаточно толстым проводом и соединяться с выводами шунта непосредственно (проще говоря, припаяны), иначе показания будут далеки от реальности. Есть так же замечание по току – впринципе опорное напряжение 1.1в позволяет регистрировать на шунте 0.1 Ом ток до 11 ампер с точностью немного хуже 0.01а, но при падении на Rх такого напряжения выделяемая мощность превысит 10 Вт, что совсем не весело. Для решения проблемы можно было бы использовать усилитель с коэффициентом усиления 11 на качественном ОУ и шунт на 10 мОм (0.01Ом). Но пока мы не будем усложнять себе жизнь и просто ограничимся в токе до 5а (при этом мощность Rx можно выбрать порядка 3-5 Вт).На этом этапе меня ждал сюрприз – оказалось что АЦП контроллера имеет достаточно большое смешение нуля – около -3мВ. То есть АЦП просто не видит сигналы менее 3мВ, а сигналы чуть большего уровня видны с характерной неточностью -3мВ, что портит линейность в начале диапазона. Беглый поиск не дал явных ссылок на такую проблему (смещение нуля это нормально, но оно должно быть существенно меньше), поэтому вполне возможно это проблема конкретного экземпляра Atmega 328. Решение я выбрал двоякое – по напряжению – программную ступеньку в начале диапазона (отображение начинается с 0.06 вольт), по току – подтягивающий резистор на шину 5в. Резистор обозначен пунктиром.

Исходный код

Полную версию этого вольт-ампер-метра (в варианте с I2C) можно скачать по ссылке в конце статье. Далее я покажу изменения в исходном коде. Добавилось чтение аналогового входа A1 с таким же усреднением как и для вольтметра. По сути это тот же вольтметр, только без делителя, а амперы мы получаем по формуле Ома: I = U/Rx (например, если падение напряжения на Rx = 0.01 В, то ток равен 0.1А). Также я ввел константу усиления по току AmpMult – на будущее. Константу AmpRx с сопротивлением шунта вероятно придется подобрать – учесть неточность резистора шунта. Ну и раз уже это это вольт-ампер-метр и на дисплее 1602 еще осталось место, то осталось вывести текущую потребляемую мощность в ваттах, получив не сложный дополнительный функционал.

….
// Аналоговый вход
#define PIN_VOLT A0
#define PIN_AMP A1
// Внутреннее опорное напряжение (подобрать)
const float VRef = 1.10;
// Коэффициент входного резистивного делителя (Rh + Rl) / Rl. IN

Ссылки

Железо

Категория: Мои статьи | Добавил: alexeevd (07.02.2016)

Вольт ампер метр на Arduino мини часть 1,2 | Пелинг Инфо солнечные батареи – ветрогенераторы DIY своими руками 2011 г-2018г

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

И так первоисточник: http://rexpirando.blogspot.ru/2011/01/volt-amperimetro-com-arduino-parte-1.html

Дополнительная ссылка на схему принципиальную : http://rexpirando.blogspot.ru/2011/01/volt-amperimetro-com-arduino-parte.html

Что вам понадобится:

  • 1 — Arduino — любая;
  • Монтажная плата — у меня их ушло две.
  • 1 — Дисплей 1602A (16×2 с подсветкой);
  • 1 — зуммер — не обязательно;
  • 2 — переходники клемники двойной;
  • 3 — (кнопки);
  • 1 — Потенциометр 10k;
  • 6 — резисторы 10k;
  • 2 — резисторы 100k;
  • 1 — резистор 100R;
  • 1 — резистор 10R;
  • 1 — резистор 0.47R с 5W власти — я ставил на 10W -25W сопротивлением от 0.10 ом до 1 Ом — все работает — с обычными шунтами не получилось!

Скетч к сожалению нет возможности выложить на этом компьютере, так что придется выложить весь код :

Nano вольт – амперметр 2 канала

Arduino – бесспорно, одна из интересных платформ для новичков, которые хотят приобщится к миру электроники и микроконтроллеров, мне тоже по душе пользоваться готовыми платками и радиодеталями из серии arduino .

По сути, arduino, если с микроконтроллером , то это МК семейства AVR, с обвязкой и bootloader’ом, позволяющем заливать прошивку с помощью COM порта (или его USB эмулятора).

BootLoader это небольшая программка которая сидит в специальной области памяти микроконтроллера и слушает когда к ней будет «обращение», далее все работает как по-маслу, новая программа «заливается» в контролер очень быстро. Фишка удобная и применять можно часто…

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

Читайте также:  Бабочки сердце своими руками

Я так же решил использовать весьма распространенную готовую платку .

Заказал в Китае, эту платку Arduino Nano V3 , и использую тут удобство бутлоадера для заливки прошивки.
Для этого случая написал программу хорошенького показометра ВольтАмперметра с графическим экраном 128х64 (чип ST7920)

Схема Nano вольт-амперметра , с платкой arduino

и второй вариант этой же схемы, для отдельного взятого МК

Из интернета нашлось, что Arduino Nano можно прошивать любым .нех файлом , с помощью маленькой и удобной программы XLoader.

Программка имеет простейший интерфейс и работать с ней предельно просто:
— подключаем нашу платку Arduino через шнур в USB-порт (отдельного питания не нужно)
— выбираем Hex файл ВольтАмперметра
— выбираем тип Arduino Nano
— выбираем COM порт, который создался при подключении Arduino к USB
— жмем Upload

Прошивка за три секунды записывается в МК, по сравнению с моим USB «свистком» это очень – очень быстро.
И все! Ничего сложного.

Программа сразу по окончании записи начинает работать

Еще для общей информации, про Arduino Nano V3 , в интернете нашел рисунок с распиновкой платы.

Работу программы вольт амперметра, можно посмотреть также в протеусе

Прошивка и протеус “Nano вольт амперметра” в архиве.

Фьюзы для работы АТmega328 с загрузчиком.

Архив с прошивкой для загрузчика ATmega328.

Ну, вот кратко и все, теперь есть полезная программа для вольтметра – амперметра , и практическое понятие, как можно воспользоваться удобством загрузчика.

You have no rights to post comments.
Недостаточно прав для комментирования

Секретный вольтметр в Arduino — измерение напряжения батареи средствами микроконтроллера

В основном перевод статьи Secret Arduino Voltmeter – Measure Battery Voltage с некоторыми дополнениями.

Мало известная фишка Ардуино и многих других AVR чипов это возможность измерить внутренний источник опорного напряжения 1.1 В.

Эта функция может быть использована для повышения точности функции Arduino — analogRead () при использовании стандартного опорного напряжения 5 В (на платформах с напряжением питания 5 В) или 3.3 В (на платформах с напряжением питания 3.3 В).

Она также может быть использована для измерения Vcc, поданного на чип, обеспечивая средство контроля напряжения батареи без использования драгоценных аналоговый выводов.

Мотивация

Есть, по крайней мере, две причины для измерения напряжения, питающего наш Arduino (Vcc). Одним из них является наш проект, питающийся от батареи, если мы хотим следить за уровнем напряжения батареи.

Кроме того, когда питание от батареи (Vcc) не может быть 5,0 вольт(например питание от 3-х элементов 1.

5 В), а мы хотим сделать аналоговые измерения более точными — мы должны использовать либо внутренний источник опорного напряжения 1,1 В либо внешний источник опорного напряжения. Почему?

Обычно предполагают при использовании analogRead () то, что аналоговое напряжение питания контроллера составляет 5.0 вольт, когда в действительности это может быть совсем не так(например питание от 3-х элементов 1.5 В).

Официальная документация Arduino даже может привести нас к этому неправильному предположению. Дело в том, что питание не обязательно 5,0 вольт, независимо от текущего уровня это питание подано на Vcc чипа.

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

double Vcc = 5.0; // не обязательно правда int value = analogRead(0); / читаем показания с А0 double volt = (value / 1023.0) * Vcc; // верно только если Vcc = 5.0 вольт Для того чтобы измерить напряжение точно, необходимо точное опорное напряжение. Большинство чипов AVR обеспечивает три источника опорного напряжения:

  • внешний источник опорного наптяжения, на ардуинке подписан AREF. Выбор: analogReference(EXTERNAL);
  • Vcc — источник питания самого контроллера. Выбор: analogReference(DEFAULT).

В Arduino нельзя просто взять и подключить Vcc к аналоговому пину напрямую — по умолчанию AREF связан с Vcc и вы всегда будете получать максимальное значение 1023, от какого бы напряжения вы не питались. Спасает подключение к AREF источника напряжения с заранее известным, стабильным напряжением, но это — лишний элемент в схеме.

Еще можно соединить Vcc с AREF через диод: падение напряжение на диоде заранее известно, поэтому вычислить Vcc не составит труда. Однако, при такой схеме через диод постоянно протекает ток, сокращая жизнь батареи, что тоже не очень удачно.

Источник внешнего опорного напряжения является наиболее точным, но требует дополнительных аппаратных средств. Внутренний ИОН стабильным, но не точен + / — 10% отклонение. Vcc является абсолютно ненадежен в большинстве случаев.

Выбор внутреннего источника опорного напряжения является недорогим и стабильным, но большую часть времени, мы хотели бы измеряет большее напряжение чем 1.1 В, так что использование Vcc является наиболее практичным, но потенциально наименее точным.

В некоторых случаях оно может быть очень ненадежным!

Как это сделать

Многие чипы AVR включая серию ATmega и ATtiny обеспечивают средства для измерения внутреннего опорного напряжения. Зачем это нужно? Причина проста — путем измерения внутреннего напряжения, мы можем определить значение Vcc. Вот как:

  1. Установить источник опорного напряжения по умолчанию: analogReference(DEFAULT); . Используем как источник — Vcc.
  2. Снять показания АЦП для внутреннего источника 1.1 В.
  3. Расчитать значение Vcc основываясь на измерении 1.1 В по формуле:

Vcc * (Показания АЦП) / 1023 = 1.1 В

Из чего следует:

Vcc = 1,1 В * 1023 / (Показания АЦП)

Собираем все вместе и получаем код:

Выводы (пины) arduino

Опубликовано 28.10.2013 12:04:00

Казалось бы, вот стоит у нас задача поуправлять реле модулем, как известно он управляется цифровым выводом. Так в чем проблема? К примеру, на плате Arduino UNO у нас их аж целых 14, так лепи к какому хочешь. Ну вот и начнем по порядку. Пусть будет D0. С одной стороны верно, работать то будет.

Но вот одним вечером мы решаем, что теперь нам хочется управлять нашей релюшкой дистанционно, возьмем к примеру блютуз. Вот тут и возникает проблема, ведь он работает по интерфейсу UART, а это цифровые пины 0 и 1. Теперь придется переподключать.

Если собрано на беспаечной макетке, то особых проблем быть не может, но вот если мы уже что-то куда-то подпаяли, то начинается веселая жизнь)

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

В данной статье произведем разбор полетов для Arduino UNO. Она имеет на своем борту 14 цифровых входов/выходов и 6 аналоговых входов. Начнем наш рассказ, пожалуй, с пинов отвечающих за интерфейсы.

1. Интерфейсы

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

Раз уж заговорили про UNO, то и рассмотрим на примере контроллера который установлен в нем – ATmega328.

ATmega328 имеет 3 интерфейса:

UART

D0 – RX (Прием данных)

D1 – TX (Отправка данных)

SPI

D13 – CSK (Выход тактирования данных)

D12 – MISO (Вход данных для последовательного программирования)

D11 – MOSI (Выход данных для последовательного программирования)

I2C

A4 – SDA (последовательная линия данных)

A5 – SCL (последовательная линия тактирования)

Вот уже 5 цифровых из 14ти и 2 аналоговых из 6ти можно зарезервировать на самый крайний случай.

2. Цифровые выводы с поддержкой ШИМ (PWM)

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

Скажем вкратце, что с помощью ШИМ’а мы сможем регулировать яркость светодиодов, задавать скорости вращения двигателей, управлять сервоприводами с помощью стандартной библиотеки servo.

h (правда для управления сервами используется не совсем ШИМ).

Цифровые пины с поддержкой ШИМ Atmega328:

D3, D5, D6, D9, D10, D11 (D11 задействует интерфейс SPI).

Казалось бы все, да нет). Дам вам еще один совет.

Для рассмотрения в статье, я специально за пример взял контроллер Atmega328 в DIP корпусе. Как мы знаем, у меги 328ой имеются два младших брата, также поддерживаемых средой Arduino IDE – это Atmega168 и Atmega8.

ATmega168 не намного дешевле ATmega328 и отличается только количеством памяти. А вот ATmega8 намного дешевле 328, её и можно будет и вставлять в готовый проект (если конечно хватит памяти).

Однако расплатой за более низкую цену, помимо маленького объема памяти, является еще и урезанное количество цировых выводов с поддержкой ШИМ.

Цифровые пины с поддержкой ШИМ Atmega8:

D9, D10. D11 (D11 задействует интерфейс SPI).

3. Выводы поддерживающие прерывания

Важное дополнение было написано в комментариях.

twsdwf: “Я бы не стал называть “пустышками” выводы D2 и D3 на atmega328. На них можно вешать внешние аппаратные прерывания”.

Так что если вы собираетесь использовать в проекте прерывания, то выводы D2 и D3 также можно сразу кидать в резерв.

Читайте также:  Как почистить панель автомобиля своими руками

4. Итог: Рекомендуемая последовательность

Как мы видим, пустышками остается очень мало пинов.

Ну что, составим таблицу рекомендуемой последовательности:

Пустышки. Используем в первую очередь:

D4, D7, D8, A0, A1. A2. A3

ШИМ выводы, если в конечном проекте планируется переход на Atmega 8:

ШИМ выводы, если в конечном проекте планируется переход на Atmega 328:

Прерывания

Выводы интерфейсов. Пускаем в ход по крайней необходимости:

D0, D1, D11, D12, D13, A4, A5

Иллюстрация вышеописанного

Полезная информация

Кстати хочется упомянуть еще одну очень полезную штуку. Все аналоговые входы могут работать как цифровые выходы. Инициализация и работа абсолютно одинаковая с обычными цифровыми выводами. Необходимо просто в коде задавать порты A0…A5 как 14…19.

К примеру для того чтобы поморгать светодиодом c аналогового входа А0:

void setup() <
pinMode(14, OUTPUT); // инициализируем аналоговый вход как цифровой
>
void loop() <
digitalWrite(14, HIGH); // зажигаем светодиод
delay(1000); // ждем секунду
digitalWrite(14, LOW); // выключаем светодиод
delay(1000); // ждем секунду
>

В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.

Аналоговые измерения с Arduino | РОБОТОША

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

Сегодня я расскажу об использовании и проведу тест производительности аналого-цифрового преобразователя (АЦП) Arduino. Тест я буду производить, используя оригинальную плату Arduino Mega 2560, в основе которой лежит микроконтроллер ATMega2560, работающий на частоте 16 Мгц.

Микроконтроллер ATMega328, на котором основаны Arduino Uno и Arduino Nano, также работает на частоте 16 МГц, так что все вышеизложенное, скорее всего, справедливо и для этих и аналогичных плат.

analogRead

Давайте посмотрим сколько же времени занимает аналого-цифровое преобразование с использованием стандартной функции analogRead.

Для определения моментов начала и конца преобразования я буду использовать 12 вывод в качестве маркера. Для начала повторим эксперимент, который я описывал в статье Оптимизируем digitalWrite на Arduino. Будем изменять уровень напряжения на 12 цифровом пине между состояниями LOW и HIGH. Для чистоты эксперимента я помещу внутрь loop бесконечный цикл.

Скетч, реализующий простые переключения на 12 цифровом выводе выглядит следующим образом:

Воспользуемся осциллографом и посмотрим на временные параметры работы этой программы:

Отсюда видно, что время переключения состояния пина занимает у нас 62 нс (длительность положительного импульса).

Теперь немного изменим скетч и добавим между переключениями функцию чтения аналогового сигнала analogRead на 3 аналоговом пине:

123456789101112131415161718 int analogPin = 3; // входной аналоговый пинint analogValue = 0; // значение аналогового сигналаvoid setup()void loop()>

Осцилограмма сигнала на 12 цифровом пине теперь будет выглядеть следующим образом:

Длительность переключения в 62 нс и время циклического возврата к началу работы программы в 124 нс не превышают погрешность измерения на этом временном масштабе и мы можем пренебречь этими временными промежутками. Отсюда видно, что время, которое затрачивается на аналого-цифровое преобразование примерно равно 112 мкс, поэтому максимальная частота выборки при использовании функции analogRead не превышает 8.9 кГц.

Недостатком использования analogRead является еще и то, что Arduino не может выполнять другой код во время ожидания результата преобразования.

Используем прерывания АЦП

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

Такую выборку можно реализовать несколько более сложным способом, используя прерывания.

Так как нет встроенной функции для установки аналогового преобразования с прерываниями, то регистры, связанные с АЦП, должны быть обработаны вручную.

Разовая выборка

Разовая выборка — это на самом деле то, что Arduino делает при вызове функции analogRead. Мы не сможем получить значительных преимуществ, реализовав разовую выборку с помощью других средств. Поскольку перед запуском АЦП, в первую очередь проверяется флаг готовности АЦП, то это означает, что проверка флага в цикле ничем не отличается от того, что делает Arduino.

Непрерывная выборка

Хорошей идеей при непрерывной выборке сигнала является использование прерываний. Микроконтроллеры ATMega328 и ATMega2560 могут быть переведены в режим непрерывной выборки (free running mode).

В этом режиме АЦП запускается автоматически после завершения предыдущей обработки.

Каждый раз преобразование заканчивается генерированием прерывания, которое вызывает функцию обработки прерывания ISR (ADC_vect), в которой результат аналого-цифрового преобразования может быть считан и обработан.

Для включения режима непрерывной выборки необходимо установить три регистра: ADMUX, ADCSRA и ADCSRB. Детальное описание этих регистров можно найти в технических руководствах к микроконтроллерам.

Внутреннее опорное напряжение 1.1 В и входной аналоговый канал ADC3 выбираются при помощи ADMUX. Тактовая частота задается при помощи ADCSRA и в нашем примере установлена в виде делителя ÷16.

Одно аналоговое преобразование занимает 13 тактовых периодов. Частота дискретизации может быть вычислена, исходя из тактовой частоты микроконтроллера: 16 Мгц/(16*13) ≈ 77 кГц.

Установкой 6 бита регистра ADCSRA в состояние HIGH, запускается непрерывная выборка.

Результат аналого-цифрового преобразования считывается в функцию обработки прерывания ISR (ADC_vect). Поскольку, результат имеет длину 10 бит, то он делится на два регистра ADCL и ADCH, размером в один байт каждый. Для корректного чтения значения сначала нужно считать значение регистра ADCL, а затем — регистра ADCH.

Пример скетча, в котором результат, полученный из АЦП копируется в целочисленную переменную analogValue:

12345678910111213141516171819202122232425 int analogValue = 0; // значение аналогового сигналаvoid setup()void loop()<>/*** Процедура обработки прерывания АЦП ***/ISR(ADC_vect)

Измерение постоянного тока с помощью AVR. Простой вольт-амперметр

Дата публикации: 28 августа 2013.

Для измерения напряжения и тока потребуется 2 канала АЦП, используем каналы ADC0 и ADC1, к которым соответственно будут подходить сигналы измеряемых тока и напряжения.

Источник опорного напряжения внутренний на 2,56V, разрядность аналого-цифрового преобразователя 10 бит. Подопытный микроконтроллер Atmega8, тактируется от внутреннего генератора частотой 4MHz.

Схема устройства представлена ниже:

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

С измерением напряжения все понятно, я писал об этом на одном из прошлых занятий. Измеряемое напряжение подается на делитель напряжения, и уже с делителя сигнал подается на вход ADC1.

Номиналы сопротивления резисторов делителя 100 кОм и 10кОм, значит соотношение входного и выходного сигналов 10:1. Максимальное напряжение подаваемое на вход делителя равно 28,13 V.

Коэффициент пересчета в реальное значение напряжения будет равен 2,75(11/4).

Измерение тока

Измерение тока будем производить с помощью токового шунта, который включается в разрыв нагрузки. Падение напряжения на нем вычисляется при помощи закона Ома, эту величину будем измерять другим каналом АЦП(ADC0).

Чем меньше сопротивление шунта тем лучше, т.к. меньше энергии рассеивается на нем. Возьмем шунт сопротивлением 0,1 Ом, используем обычный мощный резистор.

Расчитаем падение напряжения на нем при силе тока 1 А по формуле:U = I * R

U = 1А * 0,1 Ом = 0,1 V

Для тока 2А падение напряжение на шунте будет 0,2V. Величина достаточно малая чтобы напрямую подавать ее на вход АЦП, но есть способ усилить ее с помощью операционного усилителя.

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

Коэффициент усиления ОУ расчитывается по формуле:

Этот коэффициент сделаем равным примерно 10, так чтобы измеряемый ток величиной 2 А соответствовал напряжению на выходе усилителя в 2 В. Так как ИОН на 2,56 V, больше этого значения на вход АЦП мы подать не можем, расчитаем разрядность измерителя тока:

2,56А / 1024 = 2,5 mA, что вполне достаточно.

На коэффициент 2,5(10/4) необходимо умножить измеренное значение АЦП, чтобы получить реальные показания тока на экране LCD.

Программа

Измерение напряжения и тока будем производить по прерыванию окончания преобразования АЦП.

Если был выбран канал ADC1(напряжение) то снимаем показания c АЦП, суммируем с прошлыми показаниями и помещаем в буфер, затем выбираем канал ADC0 и проделываем те же самые действия для измерения тока.

Этот цикл повторяется 400 раз, затем вычисляем средние значения измеренных величин напряжения и тока, умножаем на необходимые коэффициенты и выводим на экран. Исходный код нашей программы с подробными комментариями представлен ниже:

// Измерение постоянного тока с помощью AVR #include #include #include unsigned int voltage, current, adc_counter; volatile unsigned long voltage_value, current_value; // Функции работы с LCD #define RS PD0 #define EN PD2 // Функция передачи команды void lcd_com(unsigned char p) < PORTD &=

Источник

Оцените статью