Для данной реализации нам понадобится:
Датчик тока: http://ali.pub/1th4ly
Ардуино uno: http://ali.pub/1th4sk
Контактные провода: http://got.by/1th4xf
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
В видео я немного ошибся! пин “N” на датчике ненужно никуда подключать!!! из за этого у меня и были расхождения в потреблении
Схема подключения:
Схема в FLPROG:
Модуль TA12 для FLProg можно скачать отсюда: https://yadi.sk/d/VnZbLWjh3MjoZX
При создании данного блока был взят код за основу с этого сайта: http://henrysbench.capnfatz.com/henrys-bench/arduino-current-measurements/ta12-100-arduino-ac-current-sensor-tutorial/
Вот сам скетч получившийся в итоге:
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C _lcd1(0x27, 16, 2); int _dispTempLength1=0; boolean _isNeedClearDisp1; float wire_mA_197767732_1; float wire_A_197767732_1; int sensorTA12_197767732_1= 0; float nVPP_197767732_1; float nCurrThruResistorPP_197767732_1; float nCurrThruResistorRMS_197767732_1; float nCurrentThruWire_197767732_1; float result_197767732_1; int readValue_197767732_1; int maxValue_197767732_1; unsigned long start_time_197767732_1; int _disp1oldLength = 0; void setup() { Wire.begin(); _lcd1.init(); _lcd1.backlight(); pinMode(sensorTA12_197767732_1, INPUT); } void loop() {if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;} maxValue_197767732_1= 0; start_time_197767732_1 = millis(); while((millis()-start_time_197767732_1) < 1000) { readValue_197767732_1 = analogRead(sensorTA12_197767732_1); if (readValue_197767732_1 > maxValue_197767732_1) { maxValue_197767732_1 = readValue_197767732_1; } } result_197767732_1 = (maxValue_197767732_1 * 5.0)/1024.0; nCurrThruResistorPP_197767732_1 = (result_197767732_1 / 200.0) * 1000.0; nCurrThruResistorRMS_197767732_1 = nCurrThruResistorPP_197767732_1 * 0.707; nCurrentThruWire_197767732_1 = nCurrThruResistorRMS_197767732_1 * 1000; wire_mA_197767732_1=nCurrentThruWire_197767732_1; wire_A_197767732_1=nCurrentThruWire_197767732_1 / 1000; if (1) { _dispTempLength1 = ((( _floatToStringWitRaz(wire_A_197767732_1,2)))).length(); if (_disp1oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;} _disp1oldLength = _dispTempLength1; _lcd1.setCursor(int((16 - _dispTempLength1)/2), 0); _lcd1.print((( _floatToStringWitRaz(wire_A_197767732_1,2)))); } else { if (_disp1oldLength > 0) {_isNeedClearDisp1 = 1; _disp1oldLength = 0;} } } String _floatToStringWitRaz(float value, int raz) { return String(value,raz); }
Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.