Амперметр на ардуино для умного дома
Если вы очень переживаете за расход электро энергии и жуть как хочется вычислить виновника — это ваш день. Мы соберем датчик тока напишем простую логику для обработки входных значений для пересчета значений в киловаты/ч.
Для сборки я использовал плату 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 — подобранный коэффициент для компенсации расхождений в измерениях.
Источник
Датчик тока для Arduino
Из этой статьи мы узнаем, как сделать датчик тока совместимый с Arduino и большинством других широко популярных микроконтроллеров. Этот проект отличается компактной конструкцией и схемой, основанной на SMD-компонентах.
Этот датчик тока можно легко использовать для измерения до 15А и даже при пиковом токе около 20А.
Шаг первый: шунтирующий резистор
Основным компонентом в этой схеме является шунтирующий резистор. Именно с помощью этого резистора измеряется небольшое падение напряжения и затем усиливается до измеримых значений Arduino. Важно, чтобы номинал этого резистора был достаточно мал, чтобы не создавать значительного падения напряжения в цепи. Малое сопротивление в диапазоне миллиомов также гарантирует, что общая рассеиваемая мощность очень мала и, следовательно, сам резистор не нагревается. Падение напряжения довольно мало, чтобы микроконтроллер мог напрямую его измерить, поэтому и используется операционный усилитель.
Шунт, используемый в данной схеме, имеет маркировку — R005, что означает, что он имеет сопротивление 5 мОм.
Шаг третий: изготовление печатной платы
После завершения проектирования схемы и макета мастер распечатал его в таком масштабе, чтобы размер печати соответствовал фактическому размеру печатной платы. Печатать нужно в зеркальном изображении. По размерам схемы вырезал заготовку для платы.
Шаг шестой: кодирование и калибровка
Теперь нужно закодировать микроконтроллер и откалибровать значение датчика для получения точных показаний.
Мастер использовал Arduino Nano и среду Arduino IDE.
Код можно разбить на следующие шаги:
Инициализация библиотеки для OLED-дисплея (для этого он использовал библиотеку Adafruit)
Настройка аналогового вывода 0 как вход
Считывание аналоговое значение с выхода OP-Amp на аналоговом выводе 0
Умножение аналогового значения на коэффициент калибровки, чтобы получить правильное значение тока в амперах (или миллиамперах).
Отображение значения на OLED-дисплее
OP-Amp действует как неинвертирующий усилитель в данной схеме и вырабатывает напряжение, пропорциональное падению напряжения на шунте. Затем это напряжение измеряется с помощью АЦП Arduino, который выдает число от 0 до 1023 (10-битное разрешение АЦП в Arduino). Это число не равно фактическому текущему значению, поэтому нужно выполнить математические манипуляции в программном обеспечении, чтобы получить точное значение. В данном случае на помощь приходит мультиметр. Большинство мультиметров могут точно измерять ток до 10 А, поэтому его можно использовать в качестве эталона для определения калибровочного коэффициента.
Смысл заключается в том, чтобы использовать небольшую нагрузку вместе с источником питания с мильтиметром и токовым шунтом последовательно с нагрузкой.
Таким образом, здесь мультиметр может измерять фактический ток, потребляемый нагрузкой, и от нашего текущего модуля шунтирования мы можем получить соответствующее аналоговое значение через Arduino.
Источник
Arduino Pro Mini + токовый датчик GY-712 ведут контроль перегорания ламп
Всем привет. Хочу поделится одним из проектом созданным на базе Arduino.
Для меня работа с токовыми датчиками GY-712 была впервые. Перед созданием этого проекта создавался тестовый блок.
Если вам уже интересно, тогда продолжим.
Здесь я расскажу об одном модуле, так как описывать и зарисовывать 7 модулей не очень-то и легко.
Было тех задание:
1) Лампы(фонари) 50-65ВТ 220В переменка или 24В постоянка;
2) Индикация работы лампы (светодиод на панели);
3) Звуковая индикация перегоревшей лампы.
Решение было принято такое:
Используем токовый датчик GY-712 5А
По причинам:
1) Меряет переменный и постоянный ток;
2) Легко подключается к контроллеру;
3) Компактный;
4) Недорогой при заказе с Китая.
Давайте посмотрим на схему:
Как работает программа.
При старте он проверяется, включен ли тумблер, если включен ты выдается звуковой сигнал и световая индикация, что бы датчик можно было откалибровать без нагрузки. Если тумблер выключить то прога выдаст звук + индикация.
Далее идет калибровка. После калибровки – звуковой сигнал.
И стартует основная программа. Контроль тумблера, если включен то контроль тока нагрузки лампы, если ток выше заданного порога то включить индикацию если тока нет, то выключить индикацию и выдать звуковой сигнал.
Вот простая схема без контроля тумблера, просто световая индикация. Это на тот случай кому просто нужен будет световой индикатор нагрузки – но тогда можно просто намотать на ферритовое кольцо провода(сделать трансформатор тока) и подключить светодиодик.
float srab = 0.650;
const int currentPin1 = 0; // Аналоговый вход с датчика тока
const unsigned long sampleTime = 100000UL; // sample over 100ms, it is an exact number of cycles for both 50Hz and 60Hz mains
const unsigned long numSamples = 250UL; // choose the number of samples to divide sampleTime exactly, but low enough for the ADC to keep up
const unsigned long sampleInterval = sampleTime/numSamples; // the sampling interval, must be longer than then ADC conversion time
//const int adc_zero = 512; // relative digital zero of the arudino input from ACS712 (could make this a variable and auto-adjust it)
int adc_zero1; //Переменная автоматической калибровки
void setup()
<
pinMode(13, OUTPUT);// Пин индикатора
pinMode(12, OUTPUT); // пин звука
pinMode(2, INPUT); // пин входа реле (тумблер)
digitalWrite(13, LOW);
digitalWrite(12, LOW);
tone(12,1500,100); // Звук старта калибровки
delay(180);
tone(12,1500,100);
delay(180);
tone(12,1500,100);
//Serial.begin(9600);
adc_zero1 = determineVQ(currentPin1); //Quiscent output voltage — the average voltage ACS712 shows with no load (0 A)
digitalWrite(13, HIGH);
tone(12,1000,100);
delay(150);
digitalWrite(13, LOW);
void loop() <
// Serial.print(«ACS712@A2_1:»);Serial.print(readCurrent(currentPin1,adc_zero1),3);Serial.println(» mA»);
delay(300);
if(digitalRead(2)==0) < // Если включен тумблер то:
if (readCurrent(currentPin1,adc_zero1)> srab) // Если ток больше указанного порга сработки то:
<
digitalWrite(13, HIGH); // Включить индикатор
>
else // Иначе
<
if(digitalRead(2)==0) < //Если тумблер все еще включен то:
digitalWrite(13, LOW); // Погасить индикатор
tone(12,2000,500); > // и выдать звуковой сигнал
>
Источник
2 Схемы
Принципиальные электросхемы, подключение устройств и распиновка разъёмов
Датчик тока для Ардуино ACS712
При конструировании различных систем измерения и контроля может потребоваться измерить ток, протекающий по проводнику. Встроенными средствами аппаратной платформы Arduino низкое постоянное напряжение можно измерить без каких-либо проблем, а вот ток так просто измерить не получится. Одним из специальных датчиков, предназначенных решить данную проблему, является датчик тока ACS712, эти датчики бывают рассчитаны на различные максимальные значения измеряемого тока, в данном случае автор использовал датчик на 20А. Физически работа этого устройства основана на эффекте Холла. Данный эффект заключается в том, что носители электрического тока при движении вдоль проводника, помещенного в поперечное магнитное поле испытывают на себе действие силы Лоренца и отклоняются в сторону. Из за этого на боковых, по отношению к направлению тока, сторонах проводника возникает разность потенциалов, которую можно измерить 2. Датчик приобретен здесь всего за 100 рублей:
Устройство поставляется в антистатическом пакете
На печатной плате устройства хорошо видна клеммная колодка для подключения контролируемой цепи.
Габариты платы датчика 31 х 13 х 12 мм, масса 3,1 г.
Подключение датчика ACS712
На плате расположен 3-х контактный разъем.
- Vcc – контакт для подачи питающего напряжения +5В,
- OUT – контакт для снятия результатов измерения,
- GND – общий провод.
На плате датчика имеется красный светодиод – индикатор питания. Сопротивление токовой шины 1,2 мОм 4, напряжение питания 5 В, ток потребления составляет около 12 мА.
Тестирование токового датчика
Автор обзора приобрел версию датчика рассчитанную на ток до 20 А, и это в целом было ошибкой. В радиолюбительской практике все же довольно редко приходится иметь дело с подобными значениями силы тока, так что более рациональным было бы приобретение версии рассчитанной на 5 А, так как у нее разрешение 185 мВ/А, против 100 мВ/А у 20А версии. Тем не менее, и данную версию можно использовать, но точность у нее ниже при измерении токов порядка 1 А.
Для тестирования можно использовать программу AnalogInput2 [6], на ее основе не сложно написать код для измерения значения силы тока, протекающей через датчик и вывода этих данных в удобном виде в монитор последовательного порта. При отсутствии тока на выходе датчика присутствует напряжение примерно в половину от напряжения питания, так, что встроенный АЦП Arduino вернет значение около 512.
В опытах по тестированию данного модуля использован блок питания, дающий напряжение 5 В, который согласно маркировке рассчитан на максимальный ток 2 А. При подключении одного резистора сопротивлением 10 Ом, ток через датчик составляет примерно 0,47 А.
При этом АЦП возвращает значение около 504.
При подключении параллельно первому резистору второго резистора с аналогичным сопротивлением, общее сопротивление потребителя составит 5 Ом, при этом амперметр показывает значение силы тока около 0,9 А.
При этом АЦП возвращает значение около 496.
Как известно встроенный АЦП Arduino UNO является 10 разрядным, т.е. диапазону напряжений от 0 до 5 В ставится в соответствие двоичное число от 0 до 1023. Таким образом, разрешение АЦП составляет примерно 0,0049 В. Как следует из приведенных выше данных току в 0,47 А соответствует напряжение 2,46 В, а току 0,9 А – 2,42 В, т.е изменению тока на 0,43 А соответствует изменение напряжения на 40 мВ, что вполне соответствует заявленным продавцом 100 мВ/А.В целом рассмотренный датчик заданные функции выполняет вполне успешно, устройство своих денег стоит.
Ссылки по теме
- radioprog.ru/post/99
- elenergi.ru/effekt-xolla.html
- arduino.ru/forum/programmirovanie/datchik-toka-acs712
- www.drive2.ru/b/456815746333278890/
- 3d-diy.ru/wiki/arduino-datchiki/datchik-toka-acs712/
- robocraft.ru/blog/arduino/59.html
Файлы проекта тут. Обзор сделал специально для сайта «2 Схемы» — Denev.
Источник