3xPZEM-004T + LCD20x4 + relay

Rafaello
Posts: 108
Joined: Sun May 29, 2016 1:34 pm

Post

Witam,

pochwalę się tym co udało mi się zmajstrować przy mojej głównej rozdzielni, jako że licznik mam w granicy, do trzech PZEMów dodałem jeszcze LCD 20x4 który na bieżąco pokazuje moc czynną oraz pobraną energię dla każdej fazy oraz sumarycznie dla trzech. Dodatkowo jeszcze dorzuciłem jeden przekaźnik, dla sterowania oświetleniem elewacji.
You do not have the required permissions to view the files attached to this post.
Maniek913
Posts: 494
Joined: Thu Feb 22, 2018 9:46 pm

Post

BRAWO ,Fajnie ci to wyszło
User avatar
Robert Błaszczak
Posts: 4011
Joined: Sat Dec 22, 2018 8:55 pm
Location: Zielona Góra

Post

Również gratuluję. Całkiem zacnie to wygląda.
Pozdrawiam
Robert Błaszczak


Moja prywatna strona: www.blaszczak.pl
Maniek913
Posts: 494
Joined: Thu Feb 22, 2018 9:46 pm

Post

Możesz przedstawić jak dopisałeś obsługę wyświetlacza?
User avatar
lesny8
Posts: 2814
Joined: Mon Dec 11, 2017 9:43 pm

Post

Super, widzę że ogarnąłeś temat :)
Od siebie mam jeszcze taki pomysł do rozważenia, może dodaj sobie przycisk monostabilny fizyczny i zdefiniuj go w programie na jakimś wolnym GPIO, po uruchomieniu którego przez zadany czas będzie działał wyświetlacz i pokazywał pomiary. Podczas codziennego użytkowania przecież nie będziesz na niego patrzył, więc po co ma niepotrzebnie świecić i zżerać prąd ;)
Czekam na kolejne Supla Offline Party 👍
Rafaello
Posts: 108
Joined: Sun May 29, 2016 1:34 pm

Post

lesny8 wrote: Thu Apr 09, 2020 8:09 pm Super, widzę że ogarnąłeś temat :)
Od siebie mam jeszcze taki pomysł do rozważenia, może dodaj sobie przycisk monostabilny fizyczny i zdefiniuj go w programie na jakimś wolnym GPIO, po uruchomieniu którego przez zadany czas będzie działał wyświetlacz i pokazywał pomiary. Podczas codziennego użytkowania przecież nie będziesz na niego patrzył, więc po co ma niepotrzebnie świecić i zżerać prąd ;)
Myślałem o tym, w sumie mam wolne GPIO12 i 14,
może po świętach dorzucę faktycznie przycisk, jak nie poradzę sobie ze szkicem, poproszę was o pomoc.
Last edited by Rafaello on Thu Apr 09, 2020 9:03 pm, edited 1 time in total.
Rafaello
Posts: 108
Joined: Sun May 29, 2016 1:34 pm

Post

Maniek913 wrote: Thu Apr 09, 2020 7:27 pm Możesz przedstawić jak dopisałeś obsługę wyświetlacza?
Bardzo proszę, poniżej mój kod z obsługą wyświetlacza na bazie kodu od kolegi @klew. Zresztą bez wspomnianego kolegi w ogóle ten kod by nie powstał. @klew jeszcze raz dzięki

Code: Select all

#include <SPI.h>
#include <SuplaDevice.h>
#include <supla/sensor/three_phase_PzemV3.h>
#include <supla/control/relay.h>


// ESP8266 based board:
#include <supla/network/esp_wifi.h>
Supla::ESPWifi wifi("XXXXX", "XXXXXX");

// LCD
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd(0x27, 20, 4);

PZEM004Tv30 pzem1(3, 4);
PZEM004Tv30 pzem2(3, 5);
PZEM004Tv30 pzem3(3, 1);

unsigned long previousMillis = 0 ;
const long interval = 5000 ;

void setup() {

    Serial.begin(9600);

    // Replace the falowing GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid
    char GUID[SUPLA_GUID_SIZE] = {XXXXXXXXXXXXXX};

    // Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
    char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {XXXXXXXXXXXXXXXX};

wifi.enableSSL(false);

    new Supla::Sensor::ThreePhasePZEMv3(3, 4, 3, 5, 3, 1);
    new Supla::Control::Relay(13);
  
     SuplaDevice.begin(GUID, // Global Unique Identifier
            "xxxx.supla.org", // SUPLA server address
            "xxxxx@email.com", // Email address used to login to Supla Cloud
            AUTHKEY); // Authorization key
// LCD
 Wire.begin(0,2);
  lcd.begin(20,4);
    lcd.init();
    lcd.backlight();
    lcd.home();
    lcd.clear();
    
    lcd.setCursor(0, 0);
    lcd.print("Moc: ");
    lcd.setCursor(19, 0);
    lcd.print("W");
 
    lcd.setCursor(0, 1);
    lcd.print("Ene: ");
    lcd.setCursor(17, 1);
    lcd.print("kWh");

    lcd.setCursor(0, 2);
    lcd.print("Moc cal: ");
    lcd.setCursor(19, 2);
    lcd.print("W");
    
    lcd.setCursor(0, 3);
    lcd.print("Ene cal: ");
    lcd.setCursor(17, 3);
    lcd.print("kWh");
    
  }

void loop() {
    SuplaDevice.iterate();
    {   
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {

lcd.setCursor(5, 0);
lcd.print("             ");
lcd.setCursor(5, 1);
lcd.print("           ");
lcd.setCursor(9, 2);
lcd.print("        ");
lcd.setCursor(9, 3);
lcd.print("      ");

float moc1 = pzem1.power();
float moc2 = pzem2.power();
float moc3 = pzem3.power();
  lcd.setCursor(5, 0);
  lcd.print(moc1, 0); lcd.print(" "); lcd.print(moc2, 0); lcd.print(" "); lcd.print(moc3, 0);

float ener1 = pzem1.energy();
float ener2 = pzem2.energy();
float ener3 = pzem3.energy();
  lcd.setCursor(5, 1);
  lcd.print(ener1, 0); lcd.print(" "); lcd.print(ener2, 0); lcd.print(" "); lcd.print(ener3, 0);

float moc = pzem1.power() + pzem2.power() + pzem3.power();
  lcd.setCursor(9, 2);
  lcd.print(moc, 2);
 
float ener = pzem1.energy() + pzem2.energy() + pzem3.energy();
  lcd.setCursor(9, 3);
  lcd.print(ener, 2);

previousMillis = currentMillis ;
}
}  
}

Return to “Zrób to sam”