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.
Sledování zatížení elektromotorů a vizualizace dat
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.
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.
Re: Sledování zatížení elektromotorů a vizualizace dat
Tady je měřicí sketch pro ATMegu:
Asi by to šlo trošku zjednodušit, zatím je to psané jak mi to přišlo pod ruku
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á");
}
}
-
- 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
1. Klient MQTT bude v ESP1. 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.
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?
Re: Sledování zatížení elektromotorů a vizualizace dat
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é.
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é.
Re: Sledování zatížení elektromotorů a vizualizace dat
Poradí někdo?
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 19 hostů