Tablet a PZEM004T

      Občas potřebuji v různých zařízeních současně měřit více parametrů při odběru v síti 230VAC a tak padla volba před výrobou přípravku na odzkoušení již dříve zakoupeného a zatím nevyužitého modulu PZEM-004T-80 – 230V AC – 100A AC a ovládání pomocí Arduino Nano, se zobrazováním hodnot na tabletu nebo chytrém telefonu v sériovém terminálu pro Android, nebo je možné využít i počítač PC a sériový terminál například z [1] s převodníkem USB/COM CH340.  Přenos dat mezi samotnou jednotkou a tabletem je řešený pomocí bluetooth JDY – 33, uuvedené zapojení může posloužit při podobných experimentech s uvedeným modulem PZEM-004T.

MODUL PZEM-004T-100A AC

     Uvedený modul měří současně napětí AC, proud AC, odběr W, celkovou spotřebu kwh, frekvenci sítě Hz a účiník (cos fí). Modul má na komunikačním rozhraní s řídícím mikrokontrolérem použity optočleny, napájení modulu je ze sítě 230V AC kdy je napětí sníženo klasickým zapojením rezistoru a kondenzátorem v sérii, modul komunikuje s Arduino Nano protokolem MODBUS  - RTU. Doporučené připojení měřícího transformátoru proudu k modulu je tak že červený vodič je vždy připojen do krajní svorky na modulu. Bližší popis modulu je podrobně popsán na internetu včetně programů pro jeho používání.

PZEM004T

NAPÁJENÍ A POPIS PŘÍPRAVKU

      Přípravek tedy pouze pro Arduino nano je napájen továrním zdrojem 230VAC/7VDC 1,0A kdy je napětí stabilizováno na desce Arduino Nano na hodnotu 5V, které napájí i modul bluetooth JDY – 33 a optočleny na modulu PZEM. Deska  Arduino Nano je osazena do rozšiřujícího IO sheildu který umožňuje využít desku Arduino Nano využívat i pro shieldy určené pro Arduino Uno. Do IO shieldu je připojen převodník pro bluettoth který je vyrobený na univerzální vrtané desce a tvoří jej odporový dělič pro vstup RXD bluetooth modulu na hodnotu vstuního napětí 3.3V. Komunikační signály RXD a TXD bluetooth modulu jsou připojeny na IO shieldu k signálům RXD a TXD, kdy signál bluetooth modulu TXD je připojen na IO shieldu na PIN „0“ RXD. Signál bluetooth modulu RXD je připojen na IO shieldu na PIN „1“ TXD, na schématu zapojení na Obr.č.01 je nakresleno připojení bluetooth modulu a modulu PZEM přímo k desce Arduino Nano. Komunikační signály RXD a TXD na modulu PZEM jsou se signály RXD a TXD na IO shieldu ARDUINO NANO připojeny tak že PIN 11 „RXD“ IO shieldu je připojen na signál TXD modulu, PIN 12 „TXD“ IO shieldu je připojen na signál RXD modulu. Kladné napájecí napětí +5V modulu je připojen na IO shieldu na kladný napájecí pin +5V, záporné napájecí napětí -5V modulu je připojeno na IO shieldu na záporný napájecí PIN.

Zapojení

PROGRAMY

     Programy jsou uloženy v tomto archivu ke stažení:
TABLET_A_PZEM-004T_100A_AC.zip
v daresáři ARDUINO a v podadresářích BLUETOOTH_PZEM a PZEM_BLUETOOTH, jde o moje upravené programy pro odzkoušení modulu PZEM z programu který je součástí knihovny. Program s názvem BLUETOOTH_PZEM umožňuje odečet až po odeslání číselné hodnoty „1“ ze spuštěného terminálu na tabletu, chytrého telefonu nebo spuštěného terminálu na PC, tak že vždy po odeslání hodnoty „1“ se zobrazí další načtené hodnoty z modulu PZEM. Progam PZEM_BLUETOOTH má pevně nastavenou hodnotu mezi odečty hodnot z PZEM na čas 10 vteřin, tuto hodnotu je možné před kompilací a nahrání programu do Arduina změnit. V uvedených podadresářích jsou i adresáře s naměřenými daty z tabletu. V adresáři ARDUINO je i adresář KNIHOVNA kde je knihovna pro programy a komunikaci s modulem PZEM-004T-80 – 230V AC – 100A AC.

BLUETOOTH_PZEM:

 // Program pro mereni s modulem PZEM-004T 100A

// zobrazovani hodnot je na LCD displeji tabletu
// odecet se provede po zadani a odeslani hodnoty "1" z terminalu v tabletu
// vagnervlastimil@seznam.cz

#include <PZEM004Tv30.h>
PZEM004Tv30 pzem(11,12);
int hodnota;

void setup() {
Serial.begin(9600);
hodnota = 0;
}

void loop() {
if (Serial.available() > 0){
hodnota=Serial.parseInt();
if (hodnota == 1){
Serial.println("ODECET HODNOT");
float voltage = pzem.voltage();
if(voltage != NAN){
Serial.print("Napeti: ");Serial.print(voltage);Serial.println(" V");
} else {
Serial.println("Chyba data napeti");
}
float current = pzem.current();
if(current != NAN){
Serial.print("Proud: ");Serial.print(current);Serial.println(" A");
} else {
Serial.println("Chyba data proud");
}
float power = pzem.power();
if(current != NAN){
Serial.print("Odber: ");Serial.print(power);Serial.println(" W");
} else {
Serial.println("Chyba data odber");
}
float energy = pzem.energy();
if(current != NAN){
Serial.print("Spotreba: ");Serial.print(energy,3);Serial.println(" kWh");
} else {
Serial.println("Chyba data spotreba");
}
float frequency = pzem.frequency();                      
if(current != NAN){
Serial.print("Frekvence: ");Serial.print(frequency, 1);Serial.println(" Hz");
} else {
Serial.println("Chyba data frekvence");
}
float pf = pzem.pf();
if(current != NAN){
Serial.print("Ucinik: ");Serial.println(pf);
} else {
Serial.println("Chyba data ucinik");
}
}
hodnota = 0;
Serial.println();
}
delay(1000);
}
 

PZEM_BLUETOOTH:

// Program pro mereni s modulem PZEM-004T 100A
// zobrazovani hodnot je na LCD displeji tabletu
// vagnervlastimil@seznam.cz

#include <PZEM004Tv30.h>
PZEM004Tv30 pzem(11,12);

void setup() {
Serial.begin(9600);
}

void loop() {
float voltage = pzem.voltage();
if(voltage != NAN){
Serial.print("Napeti: ");Serial.print(voltage);Serial.println(" V");
} else {
Serial.println("Chyba data napeti");
}
float current = pzem.current();
if(current != NAN){
Serial.print("Proud: ");Serial.print(current);Serial.println(" A");
} else {
Serial.println("Chyba data proud");
}
float power = pzem.power();
if(current != NAN){
Serial.print("Odber: ");Serial.print(power);Serial.println(" W");
} else {
Serial.println("Chyba data odber");
}
float energy = pzem.energy();
if(current != NAN){
Serial.print("Spotreba: ");Serial.print(energy,3);Serial.println(" kWh");
} else {
Serial.println("Chyba data spotreba");
}
float frequency = pzem.frequency();
if(current != NAN){
Serial.print("Frekvence: ");Serial.print(frequency, 1);Serial.println(" Hz");
} else {
Serial.println("Chyba data frekvence");
}
float pf = pzem.pf();
if(current != NAN){
Serial.print("Ucinik: ");Serial.println(pf);
} else {
Serial.println("Chyba data Ucinik");
}
Serial.println();
delay(10000);
}

[1] www.mojeelektronika.mzf.cz

Bližší informace :
vagnervlastimil@seznam.cz 

FB tw

Další podobné články