
Для данной реализации нам понадобится:
Датчик тока: 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);
}
Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.