Arduino - monitoring FVE na displayi

Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Arduino - monitoring FVE na displayi

Příspěvek od mypower.cz »

Bastlim si bastlim a pri prilezitosti testovani a vyvoje jisteho projektu jsem si vybastlil stolni hodiny s monitoringem me FVE a teploty v mistnosti merene cidlem DS18B20.

Obrázek

Video: http://mypower.cz/docs/video/arduino-monitor.htm

Screeny jsou následující:

Kód: Vybrat vše

T 25.4       0W
22:34 25.1  24W
I. řádek: Teplota v pracovně na stole (25.4 st.), okamžitý celkový výkon ze všech větví FV panelů (0W - noc)
II. řádek: Čas HH:MM (22:34) aktualizovaný po bootu a pak jednou za hodinu pomocí NTP protokolu z time.nist.gov, napětí na bateriích (25.1), okamžitá spotřeba na 12V DC rozvodech (24W)

Kód: Vybrat vše

UFV  0.0  0.0
B 25.1 D 12.8
I. řádek: Aktuální napětí na FV1 (0.0), aktuální napětí na FV2 (0.0)
II. řádek: Napětí na bateriích (25.1), Napětí na 12V DC rozvodech (12.8)

Kód: Vybrat vše

Vyroba:  0W
Spotreba:28W
I. řádek: Aktuální celkový výkon z panelů do regulátorů (0W - noc)
II. řádek: Aktuální spotřeba na 12V DC rozvodech

Kód: Vybrat vše

0W/0W
IN/OUT: -24W
I. řádek: Aktuální výkon z panelů větve FV1 do regulátorů (0W - noc) / Aktuální výkon z panelů větve FV2 do regulátorů (0W - noc)
II. řádek: Rozdíl mezi výkonem z panelů do regulátorů (výrobou) a aktuální spotřebou na 12V DC rozvodech

Kód: Vybrat vše

RAM: 1121

I. řádek: Volná paměť ram za účelem diagnostiky memory-leaků a podobné havěti

Kód: Vybrat vše

 MyPower.CZ
Home Control
I. řádek: Jakýsi server
II. řádek: Pokus o název produktu :D

Tato monitorovací jednotka si tahá data přes TCPIP z arduina v rozvaděči, kde jsou proudová čidla a také přes HTTP z notebooku, kde jsou speciálně pro účely této monitorovací jednotky vystavena na HTTP data z posledního měření napětí z vellemana (4 kanálové měření napětí 0-30V -> USB). Na videu se v pravém dolním rohu displaye občas mihne + a x. + znamená "Live status", kdy probliknutí znamená, že je zařízení na živu a není tuhé. Zároven je bliknuto na jednom z digitálních pinů, kde je stavová leddioda. X znamená komunikaci po HTTP s notebookem nebo arduinem v rozvaděči, komunikaci přes NTP, komunikaci s teplotním čidlem, nebo čekání na spojení po síti. Refresh dat na displayi probíhá co 3 vteřiny, takže vidím celkem realtime stav celé FVE.

:repair: :arrow: :home: :arrow: :comp: :arrow: :idea:
vanous
Příspěvky: 116
Registrován: sob říj 15, 2011 7:28 pm
Reputace: 0
Kontaktovat uživatele:

Re: Arduino - monitoring FVE na displayi

Příspěvek od vanous »

Pěkné :-)
Uživatelský avatar
jarík
Příspěvky: 75
Registrován: úte zář 25, 2012 1:46 pm
Reputace: 1
Bydliště: SK

Re: Arduino - monitoring FVE na displayi

Příspěvek od jarík »

Tomuto sa hovorí peličky na torte :yes:

Potreboval by som poradiť, akým reťazcom príkazov sa prepínajú jednotlivé screeny pri tomto type display-a.
vanous
Příspěvky: 116
Registrován: sob říj 15, 2011 7:28 pm
Reputace: 0
Kontaktovat uživatele:

Re: Arduino - monitoring FVE na displayi

Příspěvek od vanous »

Cely screen se kreslí zvlášť, tzn. není to přepínání, ale prostě pošlete něco jiného...

http://www.google.com/search?q=arduino+lcd+interfacing
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Re: Arduino - monitoring FVE na displayi

Příspěvek od mypower.cz »

Presne jak pise vanous.

Mam na to tolik funkci, kolik je screenu. Kazda funkce kresli jeden screen.

V jine funkci si nastavuju promennou pageIndex, ktera urcuje, ktera z tech screenovych funkci se bude volat. Ostatni nekresli a kresli jen ta, ktera souvisi s aktualnim pageIndex.

Nasledujici kod je ilustracni - psany zde "from the scratch" a netestovan, je mozne ze obsahuje syntakticke chyby, ale i pres to popisuje princip.

Kód: Vybrat vše


unsigned long lastmillis=0;
byte pageIndex=1;
byte maxpageIndex=6;

void loop()
{ 
...
ProcessLCDButtons();
...
unsigned long xms=millis();
if (abs(xms-lastmillis)>3000)
  {
  RefreshLCD();
  lastmillis=xms;
  }
...
}

void ProcessLCDButtons()
{
if ( .... tlacitko zmacknuto ... )
  {
  pageIndex++;
  if (pageIndex>maxpageIndex)
    pageIndex=1;
  RefreshLCD();
  }
}

void RefreshLCD()
{
if (pageIndex==1) ShowScreen1();
else if (pageIndex==2) ShowScreen2();
else if (pageIndex==3) ShowScreen3();
...
else if (pageIndex==6) ShowScreen6();
else ShowScreen1();
}

void ShowScreen1()
{
... smazat display ...
... vykreslit to co chceme na strance 1 ....
}

...

void ShowScreen6()
{
... smazat display ...
... vykreslit to co chceme na strance 6 ....
}

Kod lze resit daleko elegantneji. Treba jako dynamicke pole funkci, if ve funkci RefreshLCD resit pomoci konstrukce switch - case, atd.
Uživatelský avatar
jarík
Příspěvky: 75
Registrován: úte zář 25, 2012 1:46 pm
Reputace: 1
Bydliště: SK

Re: Arduino - monitoring FVE na displayi

Příspěvek od jarík »

ďakujem za námety , dúfam že do jari niečo vybastlím :roll:

ešte by som sa chcel opýtať ohľadom knižnice k display-u , stiahol som ju tu http://www.dfrobot.com/forum/index.php? ... 0;attach=7
akým spôsobom by som si ju vedel otestovať či funguje správne ?
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am
Reputace: 521

Re: Arduino - monitoring FVE na displayi

Příspěvek od mypower.cz »

jarík píše:ďakujem za námety , dúfam že do jari niečo vybastlím :roll:

ešte by som sa chcel opýtať ohľadom knižnice k display-u , stiahol som ju tu http://www.dfrobot.com/forum/index.php? ... 0;attach=7
akým spôsobom by som si ju vedel otestovať či funguje správne ?
http://shop.mypower.cz/arduino-1602-lcd ... shield-138

V popisu produktu je jedno info ohledne pinů a take knihovna, kterou jsem pouzil i ja pro tenhle bastlik.
luge
Příspěvky: 750
Registrován: ned lis 13, 2011 5:52 pm
Reputace: 36
Bydliště: SK

Re: Arduino - monitoring FVE na displayi

Příspěvek od luge »

mypower.cz píše:Bastlim si bastlim a pri prilezitosti testovani a vyvoje jisteho projektu jsem si vybastlil stolni hodiny s monitoringem me FVE a teploty v mistnosti merene cidlem DS18B20.

Obrázek

Video: http://mypower.cz/docs/video/arduino-monitor.htm



Tato monitorovací jednotka si tahá data přes TCPIP z arduina v rozvaděči, kde jsou proudová čidla a také přes HTTP z notebooku, kde jsou speciálně pro účely této monitorovací jednotky vystavena na HTTP data z posledního měření napětí z vellemana (4 kanálové měření napětí 0-30V -> USB). Na videu se v pravém dolním rohu displaye občas mihne + a x. + znamená "Live status", kdy probliknutí znamená, že je zařízení na živu a není tuhé. Zároven je bliknuto na jednom z digitálních pinů, kde je stavová leddioda. X znamená komunikaci po HTTP s notebookem nebo arduinem v rozvaděči, komunikaci přes NTP, komunikaci s teplotním čidlem, nebo čekání na spojení po síti. Refresh dat na displayi probíhá co 3 vteřiny, takže vidím celkem realtime stav celé FVE.
Ahoj.
Môžem poprosiť o aktualny kod tohoto super bastlíku :yes: aj pre tých čo sa nevyznajú do programovania.
Ďakujem.
burda
Příspěvky: 209
Registrován: pát kvě 25, 2012 11:15 pm
Reputace: 4

Re: Arduino - monitoring FVE na displayi

Příspěvek od burda »

Jako by jsem tenhle projekt od někud znal;) Hezká recyklace kódu a znovuužití;)
svarcik
Příspěvky: 1
Registrován: sob lis 17, 2012 7:55 pm
Reputace: 0

Re: Arduino - monitoring FVE na displayi

Příspěvek od svarcik »

zdravím,

zajímavý projekt, také by mne zajímal source kod + náčrt zapojení jednotlivých pinů.

díky
jcerny *sun*
Uživatelský avatar
jarík
Příspěvky: 75
Registrován: úte zář 25, 2012 1:46 pm
Reputace: 1
Bydliště: SK

Re: Arduino - monitoring FVE na displayi

Příspěvek od jarík »

pri mojom hľadaní som natrafil na tento algoritmus na hodiny do Arduina ;)
určite pomôže tým ako som ja - menej znalým programovacích postupov :write:

http://www.kriwanek.de/arduino/baustein ... hield.html

veľa úspechov pri bastlení :handshake2:
rob.brno
Příspěvky: 957
Registrován: sob čer 09, 2012 9:14 am
Reputace: 20

Re: Arduino - monitoring FVE na displayi

Příspěvek od rob.brno »

Koupil jsem si LCD keypad shield s displayem 1602. Bolí mě z toho modrého podsvícení dost oči. Tu červenou(má taky dost agresivní světlo) power LED asi zruším odpájením(aspon klesne odběr proudu :-)

Je tam potenciometr, ale ten ovládá jen kontrast, nemá na podsvětlení vliv.
Vypadá to, že je to podsvětlované LED. Dá se to nějak ztlumit?
Uživatelský avatar
Frenky
Příspěvky: 815
Registrován: pon led 21, 2013 6:36 pm
Reputace: 131
Lokalita: Doubravička
Systémové napětí: 48V
Výkon panelů [Wp]: 8700
Kapacita baterie [kWh]: 25
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Doubravička

Re: Arduino - monitoring FVE na displayi

Příspěvek od Frenky »

Já řídím jas arduino displeje PWM výstupem a tlačítkem pak řídím jas dokolka. Na shildu je podsvětlovací LED řízena tranzistorem s jednoduvhým obvodem a vše je připojeno na pin 10. Posílám malou ukázku

Kód: Vybrat vše

#include <LiquidCrystal.h>

/*
zkouska displej desky s 6 tlacitky
zmena jasu displeje pomoci tlacitka >SELECT<
zmena jasu na PWM1 pomoci tlacitka >LEFT< (JARMIL-REKLAMA)
*/

const int backLitePin = 10;  // rizeni jasu displeje
const int PWMPin4 = 11;  // rizeni jasu displeje
int jas = 0;                  // promena stupen jasu displeje
int led1 = 0;                 // promena stupen jasu 1 LED

// inicializace LCD knihovny (cisla pinu)
LiquidCrystal lcd(8, 9 , 4, 5, 6, 7);

// definice hodnot promennych pro stisk tlacitka 
int lcd_key     = 0;
int adc_key_in  = 0;
// definice hodnot promennych pro stisk tlacitka (kdyz stisknu tlacitko tak lcd_key = "hodnota"
#define btnRIGHT  0 
#define btnUP     1 
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5 

// read the buttons 
int read_LCD_buttons()
{
 adc_key_in = analogRead(0);      // cte hodnoty napeti Analog0 

 if (adc_key_in > 1000) return btnNONE; // Kdyz je hodnota na Ad0 = hs since it will bodnota tak .....
 if (adc_key_in < 50)   return btnRIGHT;
 if (adc_key_in < 195)  return btnUP;
 if (adc_key_in < 380)  return btnDOWN;
 if (adc_key_in < 555)  return btnLEFT;
 if (adc_key_in < 790)  return btnSELECT;
 return btnNONE;  // kdyz neni nic stlaceno tak toto .......
}

void setup() {
// definice serioveho portu 
  Serial.begin(9600); // Start serioveho rozhrani pro ladeni
  
 lcd.begin(16, 2);              // start knihovny, definice kolik pismen/radku
 }

// regulace posviceni displeje
void LCD() {
    if (jas==0) {analogWrite(backLitePin, 255); } 
      else if (jas==1) {analogWrite(backLitePin, 128); }
      else if (jas==2) {analogWrite(backLitePin, 96);  }
      else if (jas==3) {analogWrite(backLitePin, 64);  }
      else if (jas==4) {analogWrite(backLitePin, 32);  }
      else if (jas==5) {analogWrite(backLitePin, 16);  }
      else if (jas==6) {analogWrite(backLitePin, 0);  }
  }

// regulace PWM1
void LED1() {
    if (led1==0) {analogWrite(PWMPin4, 255); } 
      else if (led1==1) {analogWrite(PWMPin4, 128); }
      else if (led1==2) {analogWrite(PWMPin4, 96);  }
      else if (led1==3) {analogWrite(PWMPin4, 64);  }
      else if (led1==4) {analogWrite(PWMPin4, 32);  }
      else if (led1==5) {analogWrite(PWMPin4, 16);  }
      else if (led1==6) {analogWrite(PWMPin4, 8);  }
      else if (led1==7) {analogWrite(PWMPin4, 4);  }
      else if (led1==8) {analogWrite(PWMPin4, 2);  }
      else if (led1==9) {analogWrite(PWMPin4, 0);  }
  }
  
// pocitani pro tlacitko na ovladani podsvetleni displeje
void Oneclick() {
   Serial.print("ONE click");
   Serial.println();
   jas=jas+1; if (jas==7) {jas=0; }
   lcd.setCursor(0,0);
   Serial.print("Jas displeje je: ");
   Serial.println(jas);
   
   lcd.setCursor(0,0);            // nastavi kurzor na 0 pismeno, 1 radek (1 radek je 0)
   lcd.print("Jas ");
   lcd.print(jas); 
   }
   
// pocitani pro tlacitko na ovladani podsvetleni displeje
void PWM1() {
   Serial.print("ONE PWM1");
   Serial.println();
   led1=led1+1; if (led1==10) {led1=0; }
   lcd.setCursor(0,0);
   Serial.print("PWM1: ");
   Serial.println(led1);
   
   lcd.setCursor(8,0);            // nastavi kurzor na 0 pismeno, 1 radek (1 radek je 0)
   lcd.print("PWM1 ");
   lcd.print(led1); 
   }   
 
void klavesnice(){
  lcd.setCursor(0,1);            // premistit kurzor na "0" pismeno 2 radku
  switch (lcd_key)               // kdyz stlacime tlacitko, tak se neco stane (vypise text v "")
  {
   case btnRIGHT:
     {
     lcd.print("PRAVE ");
     break;
     }
   case btnLEFT:
     {      lcd.print("LEVE  ");
     LED1(), PWM1();
     delay(200);
     break;
     }
   case btnUP:
     {
     lcd.print("NAHORU");
     break;
     }
   case btnDOWN:
     {
     lcd.print("DOLU  ");
     break;
     }
   case btnSELECT:
     {
     lcd.print("VYBER  ");  
     Oneclick(), LCD();
     delay(200);
     break;
     }
   case btnNONE:
     {
     lcd.print("NIC   ");
     break;
     
      }
    }
  }
  
void loop()
{
 lcd.setCursor(7,1);            // premistit kurzor na "12" pismeno 1 radku
 lcd_key = read_LCD_buttons();  // spusti podprogram cteni tlacitek
 klavesnice();                  // spusti podprogram klavesnice
}
 

24x Solární panel JINKO SOLAR 225 Pmpp=225W, 2x Regulátor STUDER VT-80, 2x Střídač Studer XTM 4000-48, BSP, RCC, 1x AKU 48V LFP200Ah 1x AKU 48 V LFP280Ah. Řizení a dohled, SDS, vlastní vyčítání arduinem DUE v krabičce (ARMOSY), export dat do RPi s databází a html stránkou.
http://95.85.214.80, viewtopic.php?t=4809
rob.brno
Příspěvky: 957
Registrován: sob čer 09, 2012 9:14 am
Reputace: 20

Re: Arduino - monitoring FVE na displayi

Příspěvek od rob.brno »

Frenky píše:Já řídím jas arduino displeje PWM výstupem a tlačítkem pak řídím jas dokolka. Na shildu je podsvětlovací LED řízena tranzistorem s jednoduvhým obvodem a vše je připojeno na pin 10. Posílám malou ukázku

Kód: Vybrat vše

#include <LiquidCrystal.h>

/*
zkouska displej desky s 6 tlacitky
zmena jasu displeje pomoci tlacitka >SELECT<
zmena jasu na PWM1 pomoci tlacitka >LEFT< (JARMIL-REKLAMA)
*/
[/quote]

Frenky díky za kod, vyzkouším.
Krom toho PWM mě napadlo ještě HW řešení - přidat do obvodu LED podsvěcení odpor, ale je to špatně přístupné.

Nebije se to s funkcí knihovny na LCD display(že by ten pin10 umravnovala zpět z PWM režimu)?
Uživatelský avatar
Frenky
Příspěvky: 815
Registrován: pon led 21, 2013 6:36 pm
Reputace: 131
Lokalita: Doubravička
Systémové napětí: 48V
Výkon panelů [Wp]: 8700
Kapacita baterie [kWh]: 25
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Doubravička

Re: Arduino - monitoring FVE na displayi

Příspěvek od Frenky »

Nebije displej pouziva pin: 8, 9 , 4, 5, 6, 7
Potiz nastane pokud pripojis eth shield, potom ETH karta potrebuje piny 10,11,12,13 (SD karta potrebuje pin 4).
Takze potom musis znasilnit nožičky od LCD shieldu aby pin 10 s LCD shieldu nesel do eth shieldu a do arduina, ale koukal ven (ohnout a nechat trcet), a potom externim kabelem pin 10 s LCD shieldu pripojit na libovolny volny vstup arduina, ktery je volny. Ja jsem v minulosti pouzival treba pin 2. Pak samozrejme musis v programu zmenit vstup z 10 na 2.

ne const int backLitePin = 10; // rizeni jasu displeje
ale const int backLitePin = 2; // rizeni jasu displeje
24x Solární panel JINKO SOLAR 225 Pmpp=225W, 2x Regulátor STUDER VT-80, 2x Střídač Studer XTM 4000-48, BSP, RCC, 1x AKU 48V LFP200Ah 1x AKU 48 V LFP280Ah. Řizení a dohled, SDS, vlastní vyčítání arduinem DUE v krabičce (ARMOSY), export dat do RPi s databází a html stránkou.
http://95.85.214.80, viewtopic.php?t=4809
rob.brno
Příspěvky: 957
Registrován: sob čer 09, 2012 9:14 am
Reputace: 20

Re: Arduino - monitoring FVE na displayi

Příspěvek od rob.brno »

Frenky:
Ovládání podsvětlení jsem vyzkoušel, viděl jsem, budu používat :-)
Naprosto elengantní a jednoduché řešení, pro mé oči vyhovuje hodnota PWM 4 (tedy 3proc. z původního).

Ještě se zeptám to PWM jede na jakém kmitočtu, z kterého signálu se odvozuje, zablokuje se pro to nějaký čítač Atmegy?

Na ten pin11 nemám zapojeno v displayi nic, takže mi to nic nedělá.
Uživatelský avatar
Frenky
Příspěvky: 815
Registrován: pon led 21, 2013 6:36 pm
Reputace: 131
Lokalita: Doubravička
Systémové napětí: 48V
Výkon panelů [Wp]: 8700
Kapacita baterie [kWh]: 25
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Doubravička

Re: Arduino - monitoring FVE na displayi

Příspěvek od Frenky »

Tak to se musíme zeptat Filipa (Admina) já jsem jenom poučený začátečník. Arduino pokouším cca od Vánoc :D

Na pinu 11, jsem zkoušel velkou světelnou reklamu složenou ze samých LED diod (asi 500 vysokosvítivých LEDEK). Následoval tam za pinem 11 jednoduchý obvod s tranzistorem FET RFP 50N05.
Potřeboval jsem to jenom vyzkoušet a poladit svítivost LEDEK v reklamě. (červené svítily pocitově jinak, modré a žluté také). Abych tam pak nemučil ARDUINO (napájení, teploty apod.) Tak jsem potom splodil jednoduchý obvod s NE555. No a program (JARMIL-REKLAMA) pak zůstal :yes:

pokud připojíš LED s odporem cca 330 ohmů na pin 11 proti gnd, tak budeš řídit svítivost (externí LED-ky) :o
24x Solární panel JINKO SOLAR 225 Pmpp=225W, 2x Regulátor STUDER VT-80, 2x Střídač Studer XTM 4000-48, BSP, RCC, 1x AKU 48V LFP200Ah 1x AKU 48 V LFP280Ah. Řizení a dohled, SDS, vlastní vyčítání arduinem DUE v krabičce (ARMOSY), export dat do RPi s databází a html stránkou.
http://95.85.214.80, viewtopic.php?t=4809
rob.brno
Příspěvky: 957
Registrován: sob čer 09, 2012 9:14 am
Reputace: 20

Re: Arduino - monitoring FVE na displayi

Příspěvek od rob.brno »

Frenky píše:Tak to se musíme zeptat Filipa (Admina) já jsem jenom poučený začátečník. Arduino pokouším cca od Vánoc :D
To je dobrý, at nezdržujem admina, najdu si to v manuálu k Atmega.

Ovládání podsvícení si plánuju udělat podle okolního osvětlení, na další analog pin se šupne fotoodpor s dalším odporem jako napětový dělič a podle napětí si bude Arduino řídit podsvětlení :-)
Uživatelský avatar
Frenky
Příspěvky: 815
Registrován: pon led 21, 2013 6:36 pm
Reputace: 131
Lokalita: Doubravička
Systémové napětí: 48V
Výkon panelů [Wp]: 8700
Kapacita baterie [kWh]: 25
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Doubravička

Re: Arduino - monitoring FVE na displayi

Příspěvek od Frenky »

Potřebuji poradit
Mam dvě arduina. jedno arduino (balancer) posílá data o balancování článků po seriové lince RS232.
Na druhém arduinu bych chtěl zase přes sériovou linku data přijímat.
Jak zachytávat textový řetězec na tom druhém arduinu ?
Mořím se s tím asi 5 hodin a nic mě nenapadá, poraďte :comp:
dík
24x Solární panel JINKO SOLAR 225 Pmpp=225W, 2x Regulátor STUDER VT-80, 2x Střídač Studer XTM 4000-48, BSP, RCC, 1x AKU 48V LFP200Ah 1x AKU 48 V LFP280Ah. Řizení a dohled, SDS, vlastní vyčítání arduinem DUE v krabičce (ARMOSY), export dat do RPi s databází a html stránkou.
http://95.85.214.80, viewtopic.php?t=4809

Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek