Sida 1 av 1

projekt timpris diagram

Postat: 9 september 2022, 13:48:52
av persika
Jag gör en ny tråd här, eftersom det blivit ett projekt, en fortsättning på:

viewtopic.php?t=105630&hilit=persika



Har byggt en apparat som räknar impulserna från lysdioden på elmätaren.
Fördelen med denna är att man kan se förbrukningen för varje minut, då kan man lättare se vilka
förbrukare som varit igång, annars kan man se i Eon's app varje timme.
Har använt fotocell från en Eon-100koll, som jag köpt på loppmarknad.

En Arduino ProMini räknar impulserna.
Visar: Aktuell effekt, Antal Wh totalt, idag, igår, i förrgår, denna månad, förra månaden.
Det finns även "tripp-mätare", som likt i bilen man kan nollställa och avläsa nåt man speciellt man är
intresserad av.

För varje minut sparas antal impulser i en text-fil på SD-minneskort.
För varja rad i text-filen sparas datum och tid och antal impulser.
Man kan lägga till en kommentar som då sparas sist på raden.
Textfilen kan sen tas in i excel och man kan göra diagram av.

Några kuriosa:
*Det går att skriva hela alfatbetet med de 16 tangenterna, ungefär som man gjord på "stenåldern" när
man skrev sms. Fast här håller man nere tangenten till lcd-displayens markör har hoppat till önskad
bokstav, se bild, och då släpper man tangenten.

*Programmet i Arduinon består i huvudsak av en slinga, som det händer olika saker längs.
Tidsintervallet 0,1sek till slingan fås med hjälp av funktionen millis().
Det funkar bra, men efter c:a 50 dagar slår millis om till noll, 32 bits integer.
Det problemet löste jag med att efter c:a 45 dagar resettar jag Arduinon genom att anropa:
void(*resetFunc) (void) = 0;//declare reset function at address 0

*Två strängar skrives i displayen, en fast med ex. talet "1234Wh", och en sträng som rullar från höger
till vänster i resterande utrymme, ex "Aktuell effekt", det gör att man inte behöver tänka på att
strängen ska få plats, den förklarande texten går lika bra att läsa rullande.

Gick i fällan att använda classen String i Arduinon.
Det ska man vara försiktig med, bättre att använda strängar enligt C, ex. char s[10]
Då får man tänka mer och använda funktioner som strcpy strcat m.m. ist.
Det är enkelt och bekvämt med String, man kan bara skriva ex. a = a + b , när man vill lägga ihop två
strängar.
Det gick att få programmet stabilt med hjälp av string.reserve(antal byte), och att undvika långa
summeringar av strängar, istället skriva ut delsträngar efterhand.

Ska bygga in mojängen i en låda också, så den är lite skyddad.

Re: projekt timpris diagram

Postat: 9 september 2022, 14:28:29
av JimmyAndersson
Snacka om att jag missförstod rubriken…
Trodde du ville ha hjälp att rita ett schema och undrade över lämpligt timpris för det. :lol:

Kul projekt. :tumupp:
Trippmätar-funktionen var smart!

Edit: Och nu ser jag att du knappast behöver hjälp med schemat. Riktigt snyggt ritat! :shock:

Re: projekt timpris diagram

Postat: 9 september 2022, 21:41:54
av Bonehead
Jäklar vilket jobb! :bravo:
Tack för att du delar med dig!

Re: projekt timpris diagram

Postat: 10 september 2022, 07:12:52
av persika
Tack för ni uppskattar det.

Fortsättning följer, kommer att bygga in den i en låda också.


Syftet med den är att se elförbrukningen, hur den är fördelad på dygnet och om det ev. skulle vara nån idé med timpris-el.

Re: projekt timpris diagram

Postat: 10 september 2022, 11:00:33
av lgrfbs
Snyggt schema, kommer koden som ska ligga i Arduinon att publiceras?

Re: projekt timpris diagram

Postat: 10 september 2022, 12:34:07
av persika
Skulle behöva städa o kommentera koden. Skulle också vilja skriva om den med strängar i C-stil.
Jag kan pm’a den till dig, så som den är just nu.

Re: projekt timpris diagram

Postat: 10 september 2022, 14:48:52
av Klas-Kenny
Trevligt projekt, och det kan ju vara motivation nog ibland. :)
Men genuint intresserad; fanns det inget färdigt för småpengar som gör i princip samma sak? Känns som en sån där sak som det borde finnas massor av på marknanden, läsa elmätare och rapportera över internet till någonstans.

Lite konstruktivt;
persika skrev: 9 september 2022, 13:48:52 *Programmet i Arduinon består i huvudsak av en slinga, som det händer olika saker längs.
Tidsintervallet 0,1sek till slingan fås med hjälp av funktionen millis().
Det funkar bra, men efter c:a 50 dagar slår millis om till noll, 32 bits integer.
Det problemet löste jag med att efter c:a 45 dagar resettar jag Arduinon genom att anropa:
void(*resetFunc) (void) = 0;//declare reset function at address 0
Nu framgår det förvisso inte exakt vad du använder det till, men för det mesta går det utmärkt att hantera "rollover" hos en timer utan att det påverkar någonting.
Används det för att kolla om en tid har passerat är det bara till att kontrollera tiden med typ:

Kod: Markera allt

bool timeHasPassed(uint32_t time, uint32_t since) {
   if((millis()-since) > time)
      return true;
      
   return false;
}
Funktionen ovan fungerar även när räknaren slår om.

Re: projekt timpris diagram

Postat: 10 september 2022, 16:55:27
av Klickmans
@Klas-kenny

Det finns, och kostar 9 kr/månad om man har avtal hos Storuman.
Smart apparat, men TS är värd en fin medalj för sin egen lösning.
Länkar till Storuman, kanske kan ge TS lite tips på låda och sånt.

https://www.storumanenergi.se/blog/2013 ... mmer-eliq/

Re: projekt timpris diagram

Postat: 12 september 2022, 20:35:42
av persika
Klickmans> "TS är värd en fin medalj"

Tack för medaljen! :D

Re: projekt timpris diagram

Postat: 12 september 2022, 20:47:44
av persika
Klas-Kenny skrev: 10 september 2022, 14:48:52 Trevligt projekt, och det kan ju vara motivation nog ibland. :)
Men genuint intresserad; fanns det inget färdigt för småpengar som gör i princip samma sak? Känns som en sån där sak som det borde finnas massor av på marknanden, läsa elmätare och rapportera över internet till någonstans.

Lite konstruktivt;
persika skrev: 9 september 2022, 13:48:52 *Programmet i Arduinon består i huvudsak av en slinga, som det händer olika saker längs.
Tidsintervallet 0,1sek till slingan fås med hjälp av funktionen millis().
Det funkar bra, men efter c:a 50 dagar slår millis om till noll, 32 bits integer.
Det problemet löste jag med att efter c:a 45 dagar resettar jag Arduinon genom att anropa:
void(*resetFunc) (void) = 0;//declare reset function at address 0
Nu framgår det förvisso inte exakt vad du använder det till, men för det mesta går det utmärkt att hantera "rollover" hos en timer utan att det påverkar någonting.
Används det för att kolla om en tid har passerat är det bara till att kontrollera tiden med typ:

Kod: Markera allt

bool timeHasPassed(uint32_t time, uint32_t since) {
   if((millis()-since) > time)
      return true;
      
   return false;
}
Funktionen ovan fungerar även när räknaren slår om.
Det funkar säkert det du säger, men bara att jag behöver greppa det själv.


Vad ska man göra om:

Kod: Markera allt

if (timeHasPassed(...))
  {
  ???
  }

Re: projekt timpris diagram

Postat: 12 september 2022, 20:49:40
av persika
Så här ser inledning till slingan i programmet ut:

Kod: Markera allt

void loop()
{

// vänta så ett slingvarv tar 100ms
while (millis() < NaestaMillisSlinga)
  ;
NaestaMillisSlinga += 100; 

//    Räkna upp slingräknare, 
SlingRaeknare300ms++;
if (SlingRaeknare300ms==3)
  SlingRaeknare300ms = 0;

// 100ms slingvarv används för att avläsa tgb, 
// för att inte få märkbara fördröjningar.

Här utförs kod med 100ms intervall.

if (!SlingRaeknare300ms)  // SlingRaeknare300ms==0
  {
  // Var 0,3s för uppdatering av lcd med rulltext

  Här utförs kod med 300ms intervall.
  }

}

Re: projekt timpris diagram

Postat: 12 september 2022, 22:16:09
av Klas-Kenny
Du skulle kunna byta ut

Kod: Markera allt

while (millis() < NaestaMillisSlinga)
  ;
NaestaMillisSlinga += 100; 
Till tex.

Kod: Markera allt

while(!timeHasPassed(100, ForraMillisSlinga))
	;
ForraMillisSlinga = millis();
Eller om man inte vill använda en separat funktion som den jag postade;

Kod: Markera allt

while((millis()-ForraMillisSlinga) <= 100)
	;
ForraMillisSlinga = millis();


"Tricket" ligger alltså i att man alltid subtraherar föregående tid ifrån nuvarande och kollar differensen.
När man gör på det viset så blir det rätt även när räknaren slår runt.
Till exempel kan man kontrollräkna i kalkylatorn att
0x05 - 0xFFFFFFFB = 0x0A = 10, när man begränsar sig till 32 bitar.
Där 0x05 alltså är vad räknaren befinner sig 10 ms efter att den befann sig på 0xFFFFFFFB.
Skärmbild 2022-09-12 222229.png

Re: projekt timpris diagram

Postat: 13 september 2022, 09:40:10
av persika
Klas-Kenny, Tack för en bra förklaring.

Ibland kan det vara bra att göra tvärtom, som i detta fall.
Lätt att snöa in på sin egen lösning.