- Необходимые материалы
- Принципиальная электрическая схема
- Единица измерения
- Блок вычисления и отображения
- Программирование Arduino
- Как измерить с большей точностью?
- Работа и тестирование
Как инженеры-электронщики, мы всегда полагаемся на счетчики / приборы для измерения и анализа работы схемы. Начиная с простого мультиметра и заканчивая сложными анализаторами качества электроэнергии или DSO, все имеет свои уникальные применения. Большинство этих счетчиков легко доступны и могут быть куплены в зависимости от измеряемых параметров и их точности. Но иногда мы можем оказаться в ситуации, когда нам нужно построить свои собственные счетчики. Скажем, например, вы работаете над солнечным фотоэлектрическим проектом и хотите рассчитать энергопотребление вашей нагрузки. В таких сценариях мы можем создать наш собственный ваттметр, используя простую платформу микроконтроллера, такую как Arduino.
Создание собственных счетчиков не только снижает стоимость тестирования, но также дает нам возможность упростить процесс тестирования. Например, ваттметр, построенный с использованием Arduino, можно легко настроить для отслеживания результатов на последовательном мониторе и построения графика на последовательном плоттере или добавить SD-карту для автоматической регистрации значений напряжения, тока и мощности через заранее определенные интервалы. Звучит интересно !? Итак, приступим…
Необходимые материалы
- Ардуино Нано
- Операционный усилитель LM358
- 7805 Регулятор напряжения
- ЖК-дисплей 16 * 2
- Шунтирующий резистор 0,22 Ом 2 Вт
- Триммерный горшок 10k
- Резисторы 10k, 20k, 2.2k, 1k
- Конденсаторы 0,1 мкФ
- Тестовая нагрузка
- Перфорированная или макетная плата
- Комплект для пайки (опционально)
Принципиальная электрическая схема
Полная принципиальная схема проекта ваттметра Arduino приведена ниже.
Для простоты понимания схема ваттметра Arduino разделена на две части. Верхняя часть схемы является измерительным блоком, а нижняя часть схемы - блоком вычислений и отображения. Для людей, которые плохо знакомы с этим типом схем, следуйте этикеткам. Пример + 5V - это метка, что означает, что все контакты, к которым подключена метка, следует рассматривать, поскольку они подключены вместе. Ярлыки обычно используются, чтобы схема выглядела аккуратно.
Схема разработана для установки в системы, работающие в диапазоне 0-24 В с диапазоном тока 0-1 А, с учетом технических характеристик солнечных фотоэлектрических модулей. Но вы можете легко расширить диапазон, если поймете, как работает схема. Основным принципом схемы является измерение напряжения на нагрузке и тока через нее для расчета потребляемой мощности. Все измеренные значения будут отображаться на буквенно-цифровом ЖК-дисплее размером 16 * 2.
Ниже давайте разделим схему на небольшие сегменты, чтобы мы могли получить четкое представление о том, как схема работает с отступом.
Единица измерения
Измерительный блок состоит из делителя потенциала, который помогает нам измерять напряжение, и запирающего резистора с неинвертирующим операционным усилителем, который помогает нам измерять ток в цепи. Часть делителя потенциала из приведенной выше схемы показана ниже.
Здесь входное напряжение представлено как Vcc, как было сказано ранее, мы проектируем схему для диапазона напряжений от 0 до 24 В. Но такой микроконтроллер, как Arduino, не может измерять такие высокие значения напряжения; он может измерять напряжение только от 0-5 В. Итак, нам нужно отобразить (преобразовать) диапазон напряжения 0-24 В в 0-5 В. Это легко сделать, используя схему делителя потенциала, как показано ниже. Резисторы 10 кОм и 2,2 кОм вместе образуют цепь делителя потенциала. Выходное напряжение делителя потенциала можно рассчитать по формулам ниже. То же самое, что и для определения номинала ваших резисторов, вы можете использовать наш онлайн-калькулятор для расчета номинала резистора, если вы перепроектируете схему.
Vout = (Vin × R2) / (R1 + R2)
Отображенные 0-5 В можно получить из средней части, обозначенной как «Напряжение». Это отображаемое напряжение может быть позже подано на аналоговый вывод Arduino.
Затем нам нужно измерить ток через НАГРУЗКУ. Как мы знаем, микроконтроллеры могут считывать только аналоговое напряжение, поэтому нам нужно как-то преобразовать значение тока в напряжение. Это можно сделать, просто добавив резистор (шунтирующий резистор) на путь, который, согласно закону Ома, снизит напряжение на нем, пропорциональное току, протекающему через него. Значение этого падения напряжения будет очень меньше, поэтому мы используем операционный усилитель для его усиления. Схема для того же показана ниже
Здесь сопротивление шунтирующего резистора (SR1) составляет 0,22 Ом. Как было сказано ранее, мы проектируем схему для 0–1 А, поэтому на основе закона Ома мы можем рассчитать падение напряжения на этом резисторе, которое будет около 0,2 В, когда через нагрузку проходит максимальный ток 1 А. Это напряжение очень мало для считывания микроконтроллером, мы используем операционный усилитель в режиме неинвертирующего усилителя, чтобы увеличить напряжение с 0,2 В до более высокого уровня для считывания Arduino.
Операционный усилитель в неинвертирующем режиме показан выше. Усилитель разработан с коэффициентом усиления 21, так что 0,2 * 21 = 4,2 В. Формулы для расчета коэффициента усиления операционного усилителя приведены ниже. Вы также можете использовать этот онлайн-калькулятор усиления, чтобы получить значение вашего резистора, если вы перепроектируете схему.
Усиление = Vout / Vin = 1 + (Rf / Rin)
Здесь в нашем случае значение Rf составляет 20 кОм, а значение Rin равно 1 кОм, что дает нам gian значение 21. Затем усиленное напряжение от операционного усилителя подается на RC-фильтр с резистором 1 кОм и конденсатором 0,1 мкФ на фильтровать любой связанный шум. Наконец, напряжение подается на аналоговый вывод Arduino.
Последняя часть, которая осталась в измерительном блоке, - это часть регулятора напряжения. Поскольку мы дадим переменное входное напряжение, нам понадобится стабилизированное напряжение +5 В для работы Arduino и операционного усилителя. Это регулируемое напряжение будет обеспечиваться регулятором напряжения 7805. На выходе добавлен конденсатор для фильтрации шума.
Блок вычисления и отображения
В измерительном блоке мы разработали схему для преобразования параметров напряжения и тока в значения 0-5 В, которые можно подавать на аналоговые выводы Arduino. Теперь в этой части схемы мы подключим эти сигналы напряжения к Arduino, а также подключим буквенно-цифровой дисплей 16 × 2 к Arduino, чтобы мы могли просматривать результаты. Схема для того же показана ниже
Как вы можете видеть, вывод напряжения подключен к аналоговому выводу A3, а текущий вывод подключен к аналоговому выводу A4. ЖК-дисплей питается от + 5 В от 7805 и подключен к цифровым выводам Arduino для работы в 4-битном режиме. Мы также использовали потенциометр (10кОм), подключенный к контакту Con, для изменения контрастности ЖК-дисплея.
Программирование Arduino
Теперь, когда у нас есть хорошее представление об оборудовании, давайте откроем Arduino и начнем программировать. Целью кода является считывание аналогового напряжения на контактах A3 и A4, вычисление значений напряжения, тока и мощности и, наконец, отображение их на ЖК-экране. Полная программа, позволяющая сделать то же самое, приведена в конце страницы, которую можно использовать как таковую для оборудования, описанного выше. Далее код разбивается на небольшие фрагменты и объясняется.
Как и все программы, мы начинаем с определения контактов, которые мы использовали. В нашем проекте контакты A3 и A4 используются для измерения напряжения и тока соответственно, а цифровые контакты 3,4,8,9,10 и 11 используются для сопряжения ЖК-дисплея с Arduino.
int Read_Voltage = A3; int Read_Current = A4; const int rs = 3, en = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; // Указываем номер контакта для подключения ЖК-дисплея LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Мы также включили заголовочный файл, называемый жидким кристаллом, для взаимодействия ЖК-дисплея с Arduino. Затем внутри функции настройки мы инициализируем ЖК-дисплей и отображаем вводный текст как «Ваттметр Arduino» и ждем две секунды, прежде чем очистить его. Код для того же показан ниже.
void setup () { lcd.begin (16, 2); // Инициализируем ЖК-дисплей 16 * 2 lcd.print ("Ваттметр Arduino"); // Вступительное сообщение, строка 1 lcd.setCursor (0, 1); lcd.print ("- Обзор схемы"); // Вводное сообщение, строка 2, задержка (2000); lcd.clear (); }
Внутри функции основного цикла мы используем функцию аналогового чтения для считывания значения напряжения с контактов A3 и A4. Как мы знаем, выходное значение АЦП Arduino от 0 до 1203, поскольку он имеет 10-разрядный АЦП. Затем это значение необходимо преобразовать в 0-5 В, что можно сделать, умножив на (5/1023). Опять же, ранее в оборудовании мы сопоставили фактическое значение напряжения от 0-24 В до 0-5 В и фактическое значение тока от 0-1 А до 0-5 В. Итак, теперь мы должны использовать множитель, чтобы вернуть эти значения обратно к фактическим значениям. Это можно сделать, умножив его на значение множителя. Значение множителя можно рассчитать теоретически с использованием формул, приведенных в разделе оборудования, или, если у вас есть известный набор значений напряжения и тока, вы можете рассчитать его практически.Я выбрал второй вариант, потому что он более точен в реальном времени. Итак, здесь значения множителей составляют 6,46 и 0,239. Следовательно, код выглядит следующим образом
float Voltage_Value = analogRead (Read_Voltage); float Current_Value = analogRead (Read_Current); Voltage_Value = Voltage_Value * (5.0 / 1023.0) * 6.46; Текущее_значение = Текущее_значение * (5,0 / 1023,0) * 0,239;
Как измерить с большей точностью?
Вышеупомянутый способ расчета значений фактического напряжения и тока будет работать нормально. Но имеет один недостаток: зависимость между измеренным напряжением АЦП и фактическим напряжением не будет линейной, поэтому один умножитель не даст очень точных результатов, то же самое применимо и к току.
Таким образом, для повышения точности мы можем построить набор измеренных значений АЦП с фактическими значениями, используя известный набор значений, а затем использовать эти данные для построения графика и вывести уравнение множителя с помощью метода линейной регрессии. Вы можете обратиться к измерителю дБ Arduino, в котором я использовал аналогичный метод.
Наконец, как только мы рассчитали значение фактического напряжения и фактического тока через нагрузку, мы можем рассчитать мощность, используя формулы (P = V * I). Затем мы отображаем все три значения на ЖК-дисплее, используя приведенный ниже код.
lcd.setCursor (0, 0); lcd.print ("V ="); lcd.print (Voltage_Value); lcd.print (""); lcd.print ("I ="); lcd.print (Текущее_значение); float Power_Value = Voltage_Value * Current_Value; lcd.setCursor (0, 1); lcd.print ("Power ="); lcd.print (Power_Value);
Работа и тестирование
В качестве учебного пособия я использовал перфорированную плату для пайки всех компонентов, как показано на схеме. Я использовал винтовой зажим Phoenix для подключения нагрузки и обычный цилиндрический разъем постоянного тока для подключения источника питания. Плата Arduino Nano и ЖК-дисплей установлены на женском Bergstik, чтобы их можно было повторно использовать, если потребуется позже.
После подготовки оборудования загрузите код Arduino на свою плату Nano. Отрегулируйте ручку триммера, чтобы контролировать уровень контрастности ЖК-дисплея, пока не увидите четкий вступительный текст. Для тестирования платы подключите нагрузку к разъему с винтовыми зажимами, а источник - к разъему Barrel. Для работы этого проекта напряжение источника должно быть более 6 В, поскольку для работы Arduino требуется + 5 В. ЕСЛИ все работает нормально, вы должны увидеть значение напряжения на нагрузке и ток через нее, отображаемый в первой строке ЖК-дисплея, и расчетную мощность, отображаемую во второй строке ЖК-дисплея, как показано ниже.
Самое интересное в создании чего-либо заключается в его тестировании, чтобы проверить, насколько хорошо оно будет работать. Для этого я использовал автомобильные индикаторы на 12 В в качестве нагрузки и RPS в качестве источника. Поскольку сам RPS может измерять и отображать значения тока и напряжения, нам будет легко перепроверить точность и производительность нашей схемы. И да, я также использовал свой RPS для калибровки моего значения множителя, чтобы приблизиться к точному значению.
Полную версию работы можно найти в видео, приведенном в конце этой страницы. Надеюсь, вы поняли схему и программу и узнали что-то полезное. Если у вас возникли проблемы с тем, чтобы заставить это работать, опубликуйте их в разделе комментариев ниже или напишите на нашем форуме для получения дополнительной технической помощи.
В этом проекте Wattmeter на основе Arduino есть еще много обновлений, которые можно добавить для повышения производительности автоматической регистрации данных, построения графиков, уведомления о перенапряжении или перегрузках по току и т. Д. Так что оставайтесь любопытными и дайте мне знать, для чего вы бы это использовали.