3xPZEM-004T + LCD20x4 + relay

Rafaello
Posty: 108
Rejestracja: ndz maja 29, 2016 1:34 pm

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.
Załączniki
w całej okazałości
w całej okazałości
20200409_163144.jpg (555.24 KiB) Przejrzano 2839 razy
uzbrojone
uzbrojone
20200409_155641.jpg (1.33 MiB) Przejrzano 2839 razy
podczas uzbrajania
podczas uzbrajania
20200409_123805.jpg (1.43 MiB) Przejrzano 2839 razy
Maniek913
Posty: 491
Rejestracja: czw lut 22, 2018 9:46 pm

BRAWO ,Fajnie ci to wyszło
Awatar użytkownika
Robert Błaszczak
Posty: 3940
Rejestracja: sob gru 22, 2018 8:55 pm
Lokalizacja: Zielona Góra
Kontakt:

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


Moja prywatna strona: www.blaszczak.pl
Maniek913
Posty: 491
Rejestracja: czw lut 22, 2018 9:46 pm

Możesz przedstawić jak dopisałeś obsługę wyświetlacza?
Awatar użytkownika
lesny8
Posty: 2802
Rejestracja: pn gru 11, 2017 9:43 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 ;)
Czekam na kolejne Supla Offline Party 👍
Rafaello
Posty: 108
Rejestracja: ndz maja 29, 2016 1:34 pm

lesny8 pisze: czw kwie 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.
Ostatnio zmieniony czw kwie 09, 2020 9:03 pm przez Rafaello, łącznie zmieniany 1 raz.
Rafaello
Posty: 108
Rejestracja: ndz maja 29, 2016 1:34 pm

Maniek913 pisze: czw kwie 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

Kod: Zaznacz cały

#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 ;
}
}  
}
ODPOWIEDZ

Wróć do „Zrób to sam”