Arduino делитель напряжения 12 вольт

Делитель напряжения

Последовательно подключённые резисторы делят поступающее на них напряжение в определённой пропорции.

Расчёт пропорции

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

По тому же закону Ома можно вычислить напряжение Vout, которое падает на резисторе R2:

Из полученной формулы видно, что чем больше R2 относительно R1, тем большее напряжение падает на нём.

Считывание резистивных сенсоров

Если вмето R2 использовать не постоянный резистор, а датчик, который меняет своё сопротивленивление, Vout будет зависеть от измеряемого значения.

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

Примеры резистивных датчиков

Термистор

Термистор изменяет своё сопротивление в зависимости от собственной температуры

Фоторезистор

Фоторезистор (англ. Light Dependent Resistor или сокращённо LDR) изменяет своё сопротивление в зависимости от силы света, попадающего на его керамическую «змейку»

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

Потенциометр ещё называют переменным резистором, триммером. Это делитель из двух резисторов в одном корпусе. Поэтому у него 3 ноги: питание, выход, земля.

Соотношение R1 и R2 меняется поворотом ручки. От 100% в пользу R1 до 100% в пользу R2.

Источник

Урок №5. Как использовать сенсоры с Arduino

К данным урокам для домашнего изучения можно заказать учебный набор.

Стоимость набора 3 200 руб.

Для занятия необходима установленная на компьютерах среда программирования miniBloq и драйвера для Arduino.

Макетные провода папа-папа

Контроллер Arduino UNO

Беспаечная макетная плата

Резистор 10 кОм

Резистор 220 Ом

Потенциометр 1 шт Фоторезистор или терморезистор 1 шт

Добрый день, ребята.

Ранее мы в вами познакомились с цифровыми пинами Arduino и знаем, что они могут принимать на вход только Да (True) или Нет (False).

Но часто вознкает необходимость обрабатывать сигналы, которые имеют больше чем два (включено и выключено) значения.

Для этого на Arduino Uno имеется 6 аналоговых входов, с помощью которых можно считывать входящее напряжение.

Эти входы объединены на плате в группу «Analog In» и пронумерованы от A0 до A5. Давайте их найдем.

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

Делитель напряжения — это простая схема, которая позволяет получить из высокого напряжения пониженное. (Рис.1)

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

Рис.1 Делитель напряжения

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

Расчет делителя напряжения предполагает, что нам известно, по крайней мере, три величины из приведенной выше схемы: входное напряжение и сопротивление обоих резисторов. Зная эти величины, мы можем рассчитать выходное напряжение.

Рис.2 Формула расчета выходного напряжения

Это же потенциометр!

Потенциометр, с которым, я думаю, вы знакомы это и есть делитель напряжения.

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

С внешней стороны, как правило, у потенциометра имеется три вывода: два контакта подсоединены к выводам резистора, в то время как третий (центральный) подключен к скользящему контакту. (Рис.3)

Рис.3 Схема потенциометра

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

Эксперимент с потенциометром и мультиметром

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

Подключение потенциометра к Arduino

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

Рис.4 Подключение потенциометра к Arduino Uno

Важно

Показания входного напряжения от 0 до 5 В на аналоговом входе преобразуются в программе miniBloq в значения от 0 до 100.

Увидеть значения, которые передает нам аналоговый вход, мы можем с помощью блока терминал. (Рис.5)

Рис.5 Блок терминал

Блок терминал отображает на экране компьютера передданные в него значения.

Давайте напишем следующую программу (Рис.6).

Эта программа раз в секунду отправляет данные с аналогового входа А2 (sensor2) в терминал.

Рис.6 Вывод показаний аналогового входа в терминал

Для того, чтобы увидеть значения, необходимо открыть окно терминала (Рис.7)

Рис.7 Окно терминала

Теперь попробуйте повертеть ручку потенциометра. Значения должны меняться.

Светильник с регулируемой яркостью

Теперь предлагаю вам направить ваши знания в полезное русло.

Сделаем светильник с регулируемой яркостью. Для этого модифицируем наше устройство, добавив светодиод.

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

Конечно, только к тем, которые поддерживают ШИМ. (3, 5, 6, 9, 10, 11). Я выберу пин №5 и не забуду про резистор на 220 ом (Рис.8)

Рис.8 Светильник с регулируемой яркостью

Добавим в нашу программу с потенциометром блок, который будет направлять значения потенциометра в пин №5 на светодиод. (Рис.9)

Рис.9 Программа устройства «Светильник с регулируемой яркостью»

Подключаем сенсор

Другое применение делителя напряжения — это снятие показаний с датчиков.

Существует множество компонентов, которые меняют своё сопротивление в зависимости от внешних условий.

Так, термисторы меняют сопротивление от нуля до определённого значения в зависимости от температуры, фоторезисторы меняют сопротивление в зависимости от интенсивности попадающего на них света и т.д.

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

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

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

Давайте соберем следующую схему. (Рис.10)

Рис.10 Замена потенциометра на резистивный делитель напряжения с фоторезистором.

Теперь ваша программа, которая выводит значения нашего датчика в терминал.

Законспектируйте показания датчика при:

Измените программу, добавив условный оператор так, чтобы она включала светодиод, если в комнате темно и выключала его, если в комнате светло. (Рис.11)

Рис. 11. Вариант программы устройства «Умный светильник»

Дополнительно

Заменив фоторезистор на термистор, мы получим пожарную сигнализацию.

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

Задание для самостоятельного исполнения

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

Источник

Измерение уровня заряда аккумулятора на Ардуино

Отслеживание уровня заряда аккумулятора или батареи является одной из основных задач при разработке автономных устройств. Особенно она актуальна для устройств, которые работают удалённо и сообщают о своём статусе, используя, например, GSM канал*. Даже когда устройство находится рядом с вами, индикация уровня заряда аккумулятора поможет сделать его использование более удобным. В данной статье мы рассмотрим простой способ отслеживания уровня заряда аккумулятора или батареи при помощи Ардуино.

*Знакомые с GSM модулями могут возразить, что в их составе уже присутствуют средства мониторинга заряда аккумулятора, и не нужно изобретать велосипед. Справедливое замечание. Но при условии, что для GSM модуля не используется стабилизация напряжения, скажем, от 12-вольтового аккумулятора. В этом случае модуль не сможет оценить уровень заряда аккумулятора. Таким образом, не стоит преуменьшать актуальность данной темы.

Теория

Предлагаемый способ отслеживания уровня заряда основан на измерении напряжения источника питания. Возьмем, к примеру, литий-ионный аккумулятор. В процессе разрядки его напряжение изменяется от 4.2 В до 3 В. Выполняя периодические замеры напряжения и сопоставляя полученный результат с приведённым диапазоном 4.2. 3 В, мы можем оценить уровень заряда. Но не всё так однозначно. Дело в том, что напряжение аккумулятора при разряде изменяется не линейно. Это видно из графика разряда литий-ионного аккумулятора, который легко найти в google по запросу li-ion discharge graph:

Данный график позаимствован с сайта batteryuniversity. На нём отражён процесс разряда аккумулятора Panasonic NCR18650B 3200мАч разными токами от 0.2C до 2C. Как видите, напряжение аккумулятора изменяется более-менее линейно лишь при разряде большими токами. Здесь можно вспомнить математику и посчитать процент оставшегося заряда по линейной формуле. Но это, скорее, частный случай. Пожалуй, более актуальны случаи, когда устройство потребляет незначительные токи, поэтому ориентироваться мы будем на красную и синюю кривые.

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

Следующий момент, который я беру во внимание – это то, что высокая детализация уровня заряда (в тех же процентах, которые дают нам 100 значений) бывает нужна крайне редко. В большинстве случаев достаточно понимания: когда уровень заряда находится в «зелёной зоне», когда в «жёлтой», а когда нужно быть готовым к отключению устройства из-за разряда аккумулятора. Поэтому наиболее рациональным представляется подход, когда мы выделяем 3-4 пороговых напряжения и относительно них определяем уровень заряда. Грубо говоря, если напряжение литий-ионного аккумулятора больше 4 В, то заряд высокий; если меньше 3.2 В – аккумулятор вот-вот разрядится, а между этими двумя значениями выделяем еще несколько зон. Если необходимо выразить заряд именно в процентах – пожалуйста: выделяем 10 зон и показываем результат десятками (10%, 20% и т.д.).

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

Реализация

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

  • измерять напряжение, используя АЦП Ардуино;
  • воспользоваться датчиком напряжения, например, INA219.

Первый вариант хорош тем, что для него ничего не требуется. Разве что пара резисторов. А датчик напряжения – это уже дополнительный компонент. Зато он позволит более точно измерять напряжение. Кроме того INA219 измеряет потребляемый ток и мощность, поэтому имеет потенциал для дальнейшего развития в плане мониторинга питания (с его помощью можно построить ту же кривую разряда аккумулятора, определить его ёмкость, спрогнозировать время работы устройства), но это уже отдельная тема.

Вариант 1. Измерение напряжения при помощи Ардуино.

Все платы Ардуино имеют в своём составе АЦП. У популярных плат (UNO, NANO, MEGA2560) разрядность АЦП составляет 10 бит, у более продвинутых (Due, Zero) – 12 бит. АЦП позволяет измерять напряжение в диапазоне от 0 В до опорного напряжения Vref. Значение Vref в общем случае соответствует напряжению питания платы – 5 В или 3.3 В, но может быть привязано к внутреннему стабилизатору. Для лучшего понимания принципов использования АЦП предлагаю рассмотреть следующий скетч.

Загрузите скетч в Ардуино, соедините A0 с выводом 5V и откройте монитор порта. Вы должны увидеть следующий результат:

Этот скетч измеряет напряжение на входе A0 и выводит результат в монитор порта. Разрешение АЦП используемой мной Ардуино УНО составляет 10 бит, а значит, результатом измерений будет число от 0 до 1023 (2^10 значений). При этом значение 0 будет говорить об отсутствии напряжения, а максимальное значение – 1023 – о его равенстве (а так же превышении, что мы не будем рассматривать) опорному напряжению Vref, каким бы оно ни было. У меня в монитор порта выводится как раз число 1023. Поскольку опорным напряжением АЦП по умолчанию является напряжение питания Ардуино – 5 вольт, выдаваемые USB портом компьютера (разумеется, это не точное значение), можно утверждать, что напряжение на входе A0 тоже составляет 5 вольт.

Попробуем отсоединить A0 от вывода 5V и подсоединить к 3v3. Теперь у меня в монитор порта выводится значение 687. Зная опорное напряжение, нетрудно вычислить напряжение на A0:

(5 В / 1024) * 687 = 3.35 В

Для получения более точного результата следует измерить напряжение, выдаваемое USB портом.

Если же вывод A0 соединить с «землёй», то в монитор порта будет выводиться значение 0.

Вернёмся к нашей задаче. Питание от аккумулятора не всегда предполагает наличие стабильного напряжения, которое может использоваться как опорное для АЦП. В таких случаях в качестве Vref следует использовать напряжение от внутреннего стабилизатора Ардуино. Для большинства плат, в том числе Ардуино УНО, это напряжение составляет 1.1 В. Это означает, что измеряемое напряжение необходимо понизить при помощи делителя, чтобы оно не превышало 1.1 В. Здесь нам помогут пара резисторов номиналом в несколько десятков-сотен кОм, включенные по следующей схеме:

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

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

Остаётся лишь подобрать номиналы резисторов таким образом, чтобы понизить напряжение аккумулятора до нужного нам уровня. Для измерения напряжения аккумулятора 18650 я выбрал номиналы 47k и 10k. Реальное сопротивление будет отличаться, поэтому их нужно обязательно измерить мультиметром. Выбранные мной номиналы дают коэффициент

0.175, что позволяет измерять напряжение до 1.1 В / 0.175 = 6,27 В. Ниже приведены схема, пример скетча, реализующий описанный функционал, и результат его работы. Предполагается, что Ардуино питается от аккумулятора, поэтому результаты выводятся на дисплей 1602, а не в Serial.

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

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

Опорное напряжение, выдаваемое внутренним стабилизатором, не обязательно будет 1.1 В, и может отличаться от одного микроконтроллера к другому. Даташит допускает разброс от 1.0 до 1.2 В. Поэтому для получения более точных измерений можно вычислить значение Vref и использовать его в скетче при расчетах. Его легко найти путём измерения заранее известного напряжения (обозначим его как V(A0)):

Vref = V(A0) * 1024 / analogRead(A0)

Вариант 2. Использование датчика напряжения INA219.

После шаманства со всеми этими делителями и внутренними источниками опорного напряжения преимущество датчиков напряжения на базе специализированных микросхем очевидно. Они позволяют измерять напряжение (а некоторые ещё и потребляемый устройством ток) в широком диапазоне и с высокой точностью. INA219 – хороший пример такого датчика. Он потребляет не более 1мА, а в спящем режиме менее 15мкА, что весьма ценно при создании автономных устройств, в условиях энергосбережения. Подробное описание датчика и используемой далее библиотеки для работы с ним вы найдёте здесь: https://compacttool.ru/datchik-napryazheniya-i-toka-na-chipe-ina219

Для отслеживания уровня заряда аккумулятора 18650 при помощи INA219 и вывода результата на дисплей я соединил компоненты в соответствии со схемой:

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

Заключение

Конечно, предложенный способ не претендует на высокую точность. Существуют специализированные микросхемы мониторинга питания, которые определяют оставшуюся ёмкость аккумулятора с учётом нагрузки и других параметров. Они находят применение в ноутбуках, телефонах и другой портативной технике. Но вряд ли вы найдёте что-то подобное в любительских проектах – не тот уровень. Таким образом, определение уровня заряда аккумулятора по напряжению – приемлемая альтернатива, не требующая серьёзных аппаратных или программных ресурсов.

Источник

Adblock
detector