projekt timpris diagram

Berätta om dina pågående projekt.
persika
EF Sponsor
Inlägg: 1336
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

projekt timpris diagram

Inlägg 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.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: projekt timpris diagram

Inlägg 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:
Användarvisningsbild
Bonehead
Inlägg: 862
Blev medlem: 17 april 2008, 19:22:49
Ort: Staffanstorp
Kontakt:

Re: projekt timpris diagram

Inlägg av Bonehead »

Jäklar vilket jobb! :bravo:
Tack för att du delar med dig!
persika
EF Sponsor
Inlägg: 1336
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: projekt timpris diagram

Inlägg 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.
Användarvisningsbild
lgrfbs
Inlägg: 6971
Blev medlem: 28 januari 2005, 15:48:53
Ort: X-län
Kontakt:

Re: projekt timpris diagram

Inlägg av lgrfbs »

Snyggt schema, kommer koden som ska ligga i Arduinon att publiceras?
persika
EF Sponsor
Inlägg: 1336
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: projekt timpris diagram

Inlägg 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.
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: projekt timpris diagram

Inlägg 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.
Användarvisningsbild
Klickmans
EF Sponsor
Inlägg: 5142
Blev medlem: 1 november 2019, 18:45:08
Ort: Mellan T & Y i Skåne
Kontakt:

Re: projekt timpris diagram

Inlägg 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/
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
persika
EF Sponsor
Inlägg: 1336
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: projekt timpris diagram

Inlägg av persika »

Klickmans> "TS är värd en fin medalj"

Tack för medaljen! :D
persika
EF Sponsor
Inlägg: 1336
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: projekt timpris diagram

Inlägg 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(...))
  {
  ???
  }
persika
EF Sponsor
Inlägg: 1336
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: projekt timpris diagram

Inlägg 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.
  }

}
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: projekt timpris diagram

Inlägg 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
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
persika
EF Sponsor
Inlägg: 1336
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Re: projekt timpris diagram

Inlägg 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.
Skriv svar