Postavíme si jednoduchý obvod, který bude využívat destičku s čipem ESP8266, poté rozšiřující modul pro připojení napěťového transformátoru a nakonec proudový transformátor pomocí kterého budeme z měřeného obvodu bez přerušení či jakéhokoliv narušení zjišťovat aktuální odběr. Budeme tedy měřit odběr ze střídavé sítě klasických zásuvkových obvodu, tedy 220V a možnosti měřit proud do 30 A.
Pozor!
I když naše zapojení a veškerá elektronika, kterou zde budeme dnes stavět, bude napájena jak bezpečným napětím, tak měřící transformátor předpokládá manipulaci v blízkosti standartního jedno fázového zásuvkového napětí. Jedná se o napětí nebezpečné. Proto by zapojení měl vždy provádět odborník!.
Protože jsem úmyslně použil WeMos D1 Mini Pro V3.0 s rozšiřující
deskou, není nutné cokoliv pájet či zapojovat, ale stačí dvojici destiček
do sebe pouze zacvaknout. Napěťoví transformátor je totiž vybaven
klasickým konektorem jack 3,5 mm a v rozšiřujícím modulu je na to
připraven konektor. Přesto není od věci ukázat si alespoň schéma
zapojení, kdybyste z nějakého důvodu chtěli stavět vlastní zapojení
tohoto měřícího transformátoru. Jde vlastně jen o jediný kondenzátor,
čtveřici odporu a samotný konektor na připojení měřícího
transformátoru.
Jak vidíte nic to není, ale s modulem to je prostě mnohem pěknější. No pokud už máme zapojení, stačí nahrát jen kód do ESP a obvod je hotov.
/*
A simple library demo thatat reads an MLP191020 - 1-channel CT sesnor boards
Based On: EmonLib https://github.com/openenergymonitor/EmonLib
Auther: David Mottram
Updated: 22nd September 2021
*/
#include <ESP8266WiFi.h> // needed for EPS8266
#include <WiFiClient.h> // WiFi client
#include <ESP8266WebServer.h>
const char* ssid = "TajnaWifi";
const char* password = "SuperTajneHeslo";
ESP8266WebServer server(80);
String webString = "";
// I/O items
#define Network_LED 2
// library for the MLP191020 PCB
#define Cal_value 1500
// values for reporting
#define Voltage 230
#define CT_Cal 17.619
#define Min_Usable_Value 0.3
#define Reporting_Delay 500
// https://github.com/Mottramlabs/MQTT-Power-Sensor
#include <MLP191020.h>
// make an instance of MLP191020
MLP191020 My_PCB(Cal_value);
double Value = 0; // result
void handle_root() {
int analog = 0;
Serial.println("HTTP cteni ");
// display report
//Serial.print(" - Amps: "); Serial.print(Amps); Serial.print("A - Watts: "); Serial.print(); Serial.print("W");
// read A/D values and store in value
Value = My_PCB.power_sample();
// calc Amps, zero the value if below usable value
float Amps = Value / CT_Cal;
// if below min usable value then zero
if (Value < Min_Usable_Value) {
Amps = 0;
} // end if
int Watts = Amps * Voltage;
webString = "Amps :"+String(Amps)+"|Watts :"+String(Watts)+""; // Arduino has a hard time with float to string
server.send(200, "text/plain", webString); // send to someones browser when asked
delay(100);
}
void setup() {
// start the serial connection
Serial.begin(115200); Serial.println(""); Serial.println(""); Serial.println("Up and Clackin!");
Serial.println(__FILE__);
// setup I/O
pinMode(Network_LED, OUTPUT); digitalWrite(Network_LED, HIGH);
// nasstaveni wifi modu jen na clienta
// WiFi.mode(m): set mode to WIFI_AP, WIFI_STA, or WIFI_AP_STA.
// WiFi.mode(WIFI_STA);
WiFi.softAPdisconnect(true);
// Connect to WiFi network
WiFi.begin(ssid, password);
Serial.print("\n\r \n\rWorking to connect");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.on("/", handle_root);
server.begin();
Serial.println("HTTP server started");
} // end of setup
void loop() {
server.handleClient();
// read A/D values and store in value
Value = My_PCB.power_sample();
// calc Amps, zero the value if below usable value
float Amps = Value / CT_Cal;
// if below min usable value then zero
if (Value < Min_Usable_Value) {
Amps = 0;
} // end if
int Watts = Amps * Voltage;
// display report
Serial.print("Value: "); Serial.print(Value); Serial.print(" - Amps: "); Serial.print(Amps); Serial.print("A - Watts: "); Serial.print(Watts); Serial.print("W");
Serial.println("");
// flash the LED
digitalWrite(Network_LED, HIGH); delay(10); digitalWrite(Network_LED, LOW);
delay(Reporting_Delay);
} // end of loop
Jak si můžete všimnout v kódu, jsme úmyslně nechali jak výpis na konzoly, tak se informace zobrazují v podobě jednoduchého textového údaje. Také na webové stránce čidla, pokud je obvod úspěšně připojen k bezdrátové síti. Jde samozřejmě jen o vzorový příklad a kód by se dal velmi pěkně optimalizovat, nicméně jako ukázka to bohatě postačí.
Odkazy
WeMos D1 Mini Pro v3.0 NodeMcu ESP8233 (ALIRXPRESS)
Rozčířující deska pro připojení napětového transformáturu (EBAY)