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

Добавил пользователь Alex
Обновлено: 05.10.2024

Код для Arduino

/*
Код мониторинга электропотребления и трансляции
данных на сервер majordomo
настроены коэфф под эту прошиву 5 июля 2012г


byte mac[] = < 0x00, 0x2A, 0xF6, 0x12, 0x69, 0xDU >; // MAC-адрес устройства
byte ip[] = < 192, 168, 8, 10 >; // ip-адрес устройства
byte server[] = < 192, 168, 8, 3 >; // IP компьютера на котором установлен сервер majordomo
byte gateway[] = < 192, 168, 8, 1 >;
byte subnet[] = < 255, 255, 255, 0 >;
char buf[80];
Client rclient(server, 80); // 80-порт

// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest()
//Serial.println(buf);
if (rclient.connect())
<
//Serial.println("OK");
rclient.println(buf);
rclient.println("Host: 192.168.8.3"); // IP компьютера на котором установлен сервер majordomo
rclient.println();
delay(2000);
rclient.stop();
>

int numberOfSamples = 3000;

//Установка датчиков тока и напряжения
int inPinV = 0;
int inPinI = 1;


// Коэффициенты для калибровки выводимых значений
// Подбираются опытным путем сверяясь с эталонным прибором
double VCAL = 27.00; // для напряжения
double ICAL = 2.21; // для тока
double PHASECAL = 2.3; // для мощности

double V_RATIO = 50.5 / 1024 * VCAL;
double I_RATIO = (long double) 15.15 * 5 / 1024 * ICAL;

//Образцы переменных
int lastSampleV,lastSampleI,sampleV,sampleI;

//Переменные для фильтров
double lastFilteredV, lastFilteredI, filteredV, filteredI;
double filterTemp;

//Сюда сохраняем калибровочное значение фазы мгновенного напряжения
double shiftedV;

//Расчет переменной для мощности
double sqI,sqV,instP,sumI,sumV,sumP;

//Полезные значения переменных
double realPower,
apparentPower,
apparentPower1,
powerFactor,
Vrms,
Irms;

// инициализация библиотеки с перечнем задействованных выводов
LiquidCrystal lcd (8, 7, 6, 5, 3, 2);

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

Счетчик электроэнергии на Arduino

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

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

Датчик тока CT-Talema AC103

Датчик тока - это магнитопровод с зазором и обмоткой компенсации, а так же встроенный датчик Холла и плата управления. Датчик Холла размещается в зазоре магнитопровода и реагирует на создаваемое катушкой магнитное поле. Чем сильнее напряженность магнитного поля, тем сильнее датчик Холла подает сигнал, который усиливается платой управления.
Датчики тока бывают для измерения переменного тока и постоянного тока. Наш - 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 - подобранный коэффициент для компенсации расхождений в измерениях.

Voltage sensor

Для Arduino максимальный потолок входного напряжения 5 Вольт. Но любительская радиоэлектроника работает и с напряжением до 25 Вольт. Модуль датчика напряжения (Voltage Sensor) позволяет без пайки измерять подобные устройства. На модуле реализован резистивный делитель напряжения с коэффициентом 1:5, то есть на входе модуля напряжение может изменяться от 0 до 25 В, а на выходе оно будет пропорционально распределено от 0 до 5 В. Но при этом немного страдает точность, ведь теперь по шкале значений 0-1024 единица результата считывания АЦП будет равна 0.02 В.

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

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

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

Скетч для работы с модулем. Будем измерять батарею "Крона" на 9В или любой другой подходящий компонент.

Всем привет сегодня я хотел бы показать, как превратить Arduino Uno в вольтметр.

Смотрите видео: Arduino в роли вольтметра. Вывод напряжения на LCD дисплей

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

вид схемы с деталями

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

Давайте приступим к написанию скетча, и далее рассмотрим, как это все сделать. Хочу показать вам принципиальную плату, потом будет на сайте изображена схема, она похожа на пример, который мы собирали в прошлый раз с LCD дисплеем.

вид принципиальной схемы

Обратите внимание, мы выводили текст на LCD экран, в принципе здесь отличие единственное это второе сопротивление. Здесь по подключению, я думаю вопросов не возникнет, мы используем 4, 6, 10, 11, 12, 13 разъемы, минус берём общий, он расходится по плате, минус на первый контакт, и на последний(16).

Он здесь обозначен на моей плате буквой К, на сколько я помню на разных схемах по-разному. На одних схемах A и K на других LED+ LED- . Давайте напишем скетч, поскольку мы использовали в ней контакты 4, 6, 10, 11, 12, 13 нам нужно будет их обозначить.

И поскольку мы опять работаем с LCD дисплеем, мы должны будем подключить библиотеку liquidcrystal , константу для нашего аналогового разъёма, объявим массив контактов, которые мы использовали.

Объявим переменную val, в которую мы будем считывать, преобразовывать, так сказать получать, исходя из значение A0.

В setup мы включим, в принципе это дело по пожеланию, для мониторинга последовательный порт, объявим LCD 16 символов по 2 строки и выведем текст не указывая конкретно на какой строке значение напряжения. Это будет первая строка. В цикле loop мы получим в переменную val значение с нашего разъема, которое у нас определяется как значение между плюс-минус и вот это выводится из A0 .

Далее мы его преобразовываем, поскольку мы знаем, что там 5 Вольт, у нас было как максимальное значение, предполагаемое максимальное значение, изменяется значение от 0 до 1024, мы выводим его методом пропорции, поэтому для замера напряжения пальчиковой батарейки в формуле будем умножать не на 5, а на 1,5. Далее выводим значение в последовательный порт и печатаем после него символ вольтажа, английскую букву V.

Теперь на первой строке, она по сути вторая строка, с 6 символа выводим значение нашей переменной val , символ вольтажа, английскую букву V и сделаем небольшую задержку в одну пятую секунды, или 200 миллисекунд. Сохраним наш скетч, в принципе, после этого плата Arduino может стать небольшим вольтметром, который можно проверить напряжение небольшой батарейки.

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

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

Измерение напряжения 220 вольт на Arduino


Измерения напряжения бытовой сети с помощью трансформатора и делителя напряжения на Arduino.

Что нам понадобиться:
1. Трансформатор у меня был в наличии 220/7 вольт.
2. 4 диода.
3. 2 резистора (т.к у меня выходное напряжение 7 вольт я использую 2 одинаковых резистора по 50 кОм).
4. Конденсатор электролитический (главное чтобы номинал был больше чем выходное напряжение трансформатора ).

Измерение напряжения 220 вольт на Arduino схема подключения

Делитель напряжения расчитывается таким образом чтобы при напряжении в сети 270 вольт наш делитель не выдавал более 5 вольт. Иначе мы спалим нашу Arduino.

Код:

Как видим при подключении сразу показывает правильное напряжение однако при отключении напряжение падает до 94 вольт и медленно снижается у меня это происходит около минуты. Это происходит из за конденсатора в нашей схеме и пока он полностью на разрядится будут показания напряжения.

Правила перепечатки

Понравилась статья?
Лучшей наградой для меня будет ваш комментарий !

Читайте также: