Sledování zatížení elektromotorů a vizualizace dat

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
vertol
Příspěvky: 4
Registrován: 23 bře 2020, 09:36
Reputation: 0

Sledování zatížení elektromotorů a vizualizace dat

Příspěvek od vertol » 23 bře 2020, 11:56

Přátelé,
jsem začátečník a potřeboval bych pomoci se svým projektem na sledování zatížení elektromotorů a vizualizaci měřených dat.

Deska: Robotdyn Uno + Wifi R3 https://robotdyn.com/uno-wifi-r3-atmega ... o-usb.html
Měření: nepřímé měření pomocí měřicích transformátorů (CT), s využitím projektu https://learn.openenergymonitor.org/ele ... gy-monitor
Vizualizace: "semafor" na zařízení u stroje + vizualizace výkonu v Home assistant

Měřicí část + semaforová vizualizace je hotová a funkční, později sem přidám kód na ukázku a pokud bude zájem, tak i skutečné foto realizace.
Měří se zatížení 4 motorů, které je reprezentováno hodnotami proudu, který je cca sekundových intervalech ukládán do proměnných proud1, proud2,proud3, proud4.

Nyní bych potřeboval pomoci s přenosem dat do Home assistanta přes MQTT, toto je již přesahuje moje bastlířské schopnosti.
Oba kontrolery na desce mají propojeny RX/TX, takže není nutno žádných propojení (jen se tato funkce naswitchuje na přepínači na desce).

Dál mám jen teorii a hromadu neúspěšných pokusů podle návodů z netu. Mám několik úvah, jak přenos dat řešit:

1. Data z Atmegy se po seriové lince přenesou do ESP, kde bude běžet MQTT klient, který pošle data na Mosquitto broker v Home assistantovi.
2. Celý sketch vč. MQTT bude v ATMega, která bude ovládat ESP pomocí AT příkazů
3. Do ESP flashnu Tasmotu a ta si vytáhne data ze seriové linky a pošle je přes vestavěného MQTT klienta do HA.

Co jsem zkoušel:
ad 1: splácal jsem nějaké sketche i internetu, ale nerozchodil jsem seriovou komunikaci, jen jsem adaptoval jiné kódy, protože nerozumím syntaxi kódu pro přenos po seriové lince. Podařilo se mi nastavit MQTT klienta a poslat testovací zprávu do HA.
ad 2: nezkoušel jsem, nerozumím tomu, ale na fórech jsem našel, že je to patrně nejjednodušší řešení. Vyžaduje nahrát AT firmware do ESP.
ad 3: můj nápad, nikde jsme nenašel, že by to takto někdo řešil, samotný přenos dat mezi ATMega a Tasmotou funguje, jen se přenáší jako text a je potřeba v Tasmotě nakonfigurovat formát MQTT zprávy. Tasmota je fajn, protože vše lze nastavit přes webové rozhraní a s Home assistantem funguje perfektně.

Pomůže někdo? Moc děkuji.

vertol
Příspěvky: 4
Registrován: 23 bře 2020, 09:36
Reputation: 0

Re: Sledování zatížení elektromotorů a vizualizace dat

Příspěvek od vertol » 23 bře 2020, 16:49

Tady je měřicí sketch pro ATMegu:

Kód: Vybrat vše


#include "EmonLib.h"
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>

// display 

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0); 

// variables setup

float proud1;
float proud2;
float proud3;
float proud4;

// LED warning light parameters setting

float nocurrent = 0.1;    
float lowcurrent = 0.15;  
float highcurrent = 0.25;


// Include Emon Library
EnergyMonitor emon1;
EnergyMonitor emon2;
EnergyMonitor emon3;
EnergyMonitor emon4;

// Create an instance
#define RELE1_PIN 8
#define RELE2_PIN 9
#define RELE3_PIN 10
#define RELE4_PIN 11

void setup()
{
  Serial.begin(115200);     
    while (!Serial)   { ; }  
  
  u8g2.begin();
  
  pinMode(RELE1_PIN, OUTPUT);           // red
  pinMode(RELE2_PIN, OUTPUT);           //orange
  pinMode(RELE3_PIN, OUTPUT);           //green
  pinMode(RELE4_PIN, OUTPUT);           //buzzer
  emon1.current(A0,30);             // Current: input pin, calibration.
  emon2.current(A1,30);             // Current: input pin, calibration.
  emon3.current(A2,30);             // Current: input pin, calibration.
  emon4.current(A3,30);             // Current: input pin, calibration.
}

void loop()
{

// 
   
double Irms1 = emon1.calcIrms(1674);  // Calculate Irms only (1674... n/50*5580.. orig 1480)
double Irms2 = emon2.calcIrms(1674);  // Calculate Irms only (1674... n/50*5580.. orig 1480)
double Irms3 = emon3.calcIrms(1674);  // Calculate Irms only (1674... n/50*5580.. orig 1480)
double Irms4 = emon4.calcIrms(1674);  // Calculate Irms only (1674... n/50*5580.. orig 1480)

proud1 = Irms1;
proud2 = Irms2;
proud3 = Irms3;
proud4 = Irms4;

Serial.print("Motor 1:");
Serial.print(proud1);             // Irms1
Serial.println(" A"); 
Serial.print("Motor 2:");
Serial.print(proud2);             // Irms2
Serial.println(" A"); 
Serial.print("Motor 3:");
Serial.print(proud3);             // Irms3
Serial.println(" A"); 
Serial.print("Motor 4:");
Serial.print(proud4);           // Irms4
Serial.println(" A"); 
Serial.println("-----------------------------------"); 
  
// u8g2.clearBuffer();          // clear the internal memory
// u8g2.setFont(u8g2_font_logisoso28_tr);  // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
// u8g2.drawStr(8,29,"Irms=");  // write something to the internal memory
// u8g2.sendBuffer();         // transfer internal memory to the display
//delay(1000);

 u8g2.clearBuffer();          // clear the internal memory
 u8g2.setFont(u8g2_font_logisoso22_tr);  // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
 u8g2.setCursor(8, 29);
 u8g2.print("K1:");
 u8g2.print(proud1);
 u8g2.print(" A");
 u8g2.sendBuffer();
 delay (500);
 
 u8g2.clearBuffer();          // clear the internal memory
 u8g2.setFont(u8g2_font_logisoso22_tr);  // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
 u8g2.setCursor(8, 29);
 u8g2.print("K2:");
 u8g2.print(proud2);
 u8g2.print(" A");
 u8g2.sendBuffer();
 delay (500);

 u8g2.clearBuffer();          // clear the internal memory
 u8g2.setFont(u8g2_font_logisoso22_tr);  // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
 u8g2.setCursor(8, 29);
 u8g2.print("K3:");
 u8g2.print(proud3);
 u8g2.print(" A");
 u8g2.sendBuffer();
 delay (500);

 u8g2.clearBuffer();          // clear the internal memory
 u8g2.setFont(u8g2_font_logisoso22_tr);  // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
 u8g2.setCursor(8, 29);
 u8g2.print("K4:");
 u8g2.print(proud4);
 u8g2.print(" A");
 u8g2.sendBuffer();
 delay (500);

// LED warning light control 

 if ((proud1 < nocurrent) or (proud2 < nocurrent) or (proud3 < nocurrent) or (proud4 < nocurrent))
  {
    digitalWrite(RELE1_PIN, HIGH);
    digitalWrite(RELE2_PIN, LOW);
    digitalWrite(RELE3_PIN, LOW);
    digitalWrite(RELE4_PIN, LOW);
    Serial.println(" červená"); 
  } 
     if ((lowcurrent > proud1 < highcurrent) or (lowcurrent > proud2 < highcurrent) or (lowcurrent > proud3 < highcurrent) or (lowcurrent > proud4 < highcurrent))
  {
   digitalWrite(RELE1_PIN, LOW);
    digitalWrite(RELE2_PIN, HIGH);
    digitalWrite(RELE3_PIN, LOW);
    digitalWrite(RELE4_PIN, HIGH);
    Serial.println(" oranžová"); 
  }

 if ((proud1 > highcurrent) or (proud2 > highcurrent) or (proud3 > highcurrent) or (proud4 > highcurrent))
  {
   digitalWrite(RELE1_PIN, LOW);
    digitalWrite(RELE2_PIN, LOW);
    digitalWrite(RELE3_PIN, HIGH);
    digitalWrite(RELE4_PIN, LOW);
    Serial.println(" zelená"); 
  }
 
 
}
Asi by to šlo trošku zjednodušit, zatím je to psané jak mi to přišlo pod ruku :-)

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Sledování zatížení elektromotorů a vizualizace dat

Příspěvek od jankop » 23 bře 2020, 20:26

1. Data z Atmegy se po seriové lince přenesou do ESP, kde bude běžet MQTT klient, který pošle data na Mosquitto broker v Home assistantovi.
2. Celý sketch vč. MQTT bude v ATMega, která bude ovládat ESP pomocí AT příkazů
3. Do ESP flashnu Tasmotu a ta si vytáhne data ze seriové linky a pošle je přes vestavěného MQTT klienta do HA.
1. Klient MQTT bude v ESP
2. Klient MQTT bude v ATMega
3. Klient MQTT bude v ESP
Nač se vlastně ptáš, když jsi tak jasně a precizně formuloval své potřeby?

vertol
Příspěvky: 4
Registrován: 23 bře 2020, 09:36
Reputation: 0

Re: Sledování zatížení elektromotorů a vizualizace dat

Příspěvek od vertol » 23 bře 2020, 20:51

potřeby, nebo spíše úvahy jsem formuloval, to ano. Ale nejsem ani pro jednu sám schopen napsat program, v případě Tasmoty nastavit rules. Proto jsem žádal o radu zkušenější.

V první řadě bych rád doporučení, kterou cestou z 1-3 se vydat, má-li někdo praktické zkušenosti.
Následně pomoci se syntaxí sketche

Omlouvám se, pokud to z mého příspěvku nebylo zřejmé.

vertol
Příspěvky: 4
Registrován: 23 bře 2020, 09:36
Reputation: 0

Re: Sledování zatížení elektromotorů a vizualizace dat

Příspěvek od vertol » 24 bře 2020, 17:31

Poradí někdo?

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 16 hostů