Intro:
Wie bereits im Artikel Manuelle Verbrauchsgenerierung und -Messung dargestellt, möchte ich die Menge der Energie, welche die kleine Solarzelle liefert beziffern können.
Die manuelle Messung hat sich als nicht praktikabel erwiesen. So ist es z.B. Voraussetzung vor Ort zu sein. Scheint die Sonne also stark wenn ich im Urlaub bin, schaltet der Laderegler ab und weg ist er, der Ertrag. Auch ein Grund, warum ich im sonnigen Halbjahr soviel verschenkt habe. Die bisher gemessene Leistung habe ich auf der Seite 10 Kilowattstunden in 2012 zusammengefasst.
Ein paar Bilder vom ‚Messgerät‘ und dem Aufbau der Versuchsanlage:
Video:
Zielstellung:
- Die Batterie soll immer einen gewissen Ladezustand halten, der für Aktivitäten wie Rasen trimmen oder andere diverse Elektrogeräte in der Garage benötigt wird.
- Die Solarzellen sollen nicht leer laufen. Das heißt, dass alles was die Sonne bringt umgesetzt werden soll und wenn es auch erst einmal nur über die 26 Watt Glühlampe verbraucht wird.
- Die Lampe soll dementsprechend ein- oder ausgeschaltet werden, um die überschüssige Energie zu verbrauchen
- Die Anzahl der Minuten ( 10 Minutenintervalle), die die Lampe bereits eingeschaltet war soll via. Bluetooth auf dem Handy angezeigt werden.
Ablaufschema Der entsprechenden Logik:
Quellcode meines Assemblerprogramms:
;Pollin Board Stromverbrauchsgenerator und Messeinheit mit ATMega8 ;Ausgabe via UART .NOLIST .INCLUDE "m8def.inc" .LIST ; ; Henry Koch 5.8.2012 ; .def vierSekunden = r1 .def Ladewert = r2 .def IntervallCounter = r3 ;---------------------------- .def temp = r16 ; Register für kleinere Arbeiten .def zeichen = r17 ; in diesem Register wird das Zeichen an die ; Ausgabefunktion übergeben .def count = r18 .def temp1 = r19 .def temp2 = r20 .def sync1 = r21 .def sync2 = r22 ; ;.def messungen = r23 .equ Schwellwert = 212 ; 212 entspricht ca. 13,3 Volt bei meinem Spannungsteiler .equ F_CPU = 4000000 ; Systemtakt in Hz .equ BAUD = 9600 ; Baudrate ; ; Berechnungen .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; clever runden .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; Reale Baudrate .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; Fehler in Promille ; .if ((BAUD_ERROR>10) || (BAUD_ERROR Ende serout_string_wait: sbis UCSRA,UDRE ; Warten bis UDR für das nächste ; Byte bereit ist rjmp serout_string_wait out UDR, r0 adiw zl:zh,1 ; Zeiger erhöhen rjmp serout_string ; nächstes Zeichen bearbeiten serout_string_ende: ret ; zurück zum Hauptprogramm ; ; Umwandlung in Dezimalzahlen ;********************************************************************** ; ; Eine 8 Bit Zahl ohne Vorzeichen ausgeben ; ; Übergabe: Zahl im Register temp1 ; veränderte Register: keine ; lcd_number: push temp1 ; die Funktion verändert temp1 und temp2, push temp2 ; also sichern wir den Inhalt, um ihn am Ende ; wieder herstellen zu können mov temp2, temp1 ; das Register temp1 frei machen ; abzählen wieviele Hunderter ; in der Zahl enthalten sind ;** Hunderter ** ldi temp1, '0'-1 ; temp1 mit ASCII '0'-1 vorladen lcd_number_1: inc temp1 ; ASCII erhöhen (somit ist nach dem ersten ; Durchlauf eine '0' in temp1) subi temp2, 100 ; 100 abziehen brcc lcd_number_1 ; ist dadurch kein Unterlauf entstanden? ; nein, dann zurück zu lcd_number_1 subi temp2, -100 ; 100 wieder dazuzählen, da die ; vorherhgehende Schleife 100 zuviel ; abgezogen hat rcall lcd_data ; die Hunderterstelle ausgeben ;** Zehner ** ldi temp1, '0'-1 ; temp1 mit ASCII '0'-1 vorladen lcd_number_2: inc temp1 ; ASCII erhöhen (somit ist nach dem ersten ; Durchlauf eine '0' in temp1) subi temp2, 10 ; 10 abziehen brcc lcd_number_2 ; ist dadurch kein Unterlauf enstanden? ; nein, dann zurück zu lcd_number_2 subi temp2, -10 ; 10 wieder dazuzählen, da die ; vorherhgehende Schleife 10 zuviel ; abgezogen hat rcall lcd_data ; die Zehnerstelle ausgeben ;** Einer ** ldi temp1, '0' ; die Zahl in temp2 ist jetzt im Bereich add temp1, temp2 ; 0 bis 9. Einfach nur den ASCII Code für rcall lcd_data ; '0' dazu addieren und wir erhalten dierekt ; den ASCII Code für die Ziffer pop temp2 ; den gesicherten Inhalt von temp2 und temp1 pop temp1 ; wieder herstellen ret ; und zurück lcd_data: mov zeichen, temp1 loop1: rcall serout ; Unterprogramm aufrufen rcall sync brne loop1 ; solange die Null nicht erreicht ist springe zur loop ret my_Schwellwert: .db "ges. SchwellWert: ",0 my_Ladewert: .db "akt. Ladewert: ",0 my_Intervalle: .db "Anz. 10 Min. Int.: ",0 my_10MinIntervall: .db "**10 Min. Int. **",10,0
Schaltplan und technische Details:
Das Pollin Board ist an der Stelle des ATMega8 Prozessors mit einem 4 MHZ Quarz bestückt.
Das ist so, weil der Stromverbrauch des Prozessors so niedriger ist und die 16 MHZ für die Anwendung absolut nicht erforderlich sind.
Das hat den Haken, dass die Baud Rate für die Kommunikation via UART nicht riesig sein kann. Aber 9600 Baud sind vollkommen ok.
Die Relaiseinheit zum schalten der 26 Watt Glühbirne und die Bluetoothkarte ist von Ebay
Die 5V Stromversorgung für das Pollin Board und die Relais Steuereinheit wurde mit einem handelsüblichen KFZ – USB Adapter realisiert.
Wünsche an eine verbesserte Version:
- Stromzuführung für das Bluetooth Modul mit Taster des Pollin Boards steuern
- UART Kommunikation in der Programmlogik nur aktiv betreiben, wenn das Bluetooth Modul angeschaltet ist
- Es sollte ein Tageswechsel erkennbar sein, z.B. Start eines neuen Counters, mit jedem neuen Tag und Ausgabe einer Counterliste
- Die 10 Minuten AUS Intervalle sind ungünstig. Möglicherweise ist der Ladezustand schon während der 10 Minuten wieder erreicht, bzw. geht so hoch, dass der Laderegler abschaltet. Habe ich am 9.8.2012 beobachtet!
- normales Relais durch SSR tauschen und dementsprechend ansteuern
- bessere Stabilisierung der Spannung, so dass die Messwerte nicht so sehr schwanken
- den Spannungsteiler evtl. mit einer 10 Volt Zehnerdiode realisieren
2 Antworten auf „002 – automatisierte Verbrauchsgenerierung und Messung“
Hallo Henry,
Danke für diesen Meßtip. Ich neige zum Perfektionismus, will möglichst alle Daten in einem Logger speicher um sie später am PC sichtbar zu machen. Auf so eine Idee wie eben in diesem Video wäre ich nie gekommen. Ich habe mich über Jahre mit Amateufunk befasst, was mich seit einiger Zeit nicht mehr die Bohne reizt und da spinne ich daran herum, mir ebenfalls einen Scheibengenerator zu basteln und habe meine Frau schon langsam darauf vorbereitet, der dafür möglicher Weise unser
Heimtrainer dafür herhalten könnte.
Gruß
Hans-Joachim
Mit Arbeit und Kindern bleibt meist nicht die Zeit für die großen Projekte. Deshalb hatte ich mich erst mal für den kleinen Ansatz entschieden. Ich habe mich schon oft dabei ertappt ein Projekt solange zu planen, bis es sich dann von selbst erledigt hatte. Das sollte diesmal nicht so sein. Besser mit einer noch nicht so tollen Lösung starten und sich dann Stück für Stück steigern. Über einen Datenlogger habe ich selbstverständlich auch nachgedacht. Es ist sogar geplant alle 10 Minuten Daten ins Internet zu stellen und dort auszuwerten. ich habe mich ein wenig mit Android beschäftigt. Die Daten lese ich aktuell auch schon via. Handy und Bluetooth aus. Leider habe ich noch Probleme mit dem Sleep Mode des Handies. Es müsste aller 10 Minuten aufwachen, einen Call an den Mikrocontroller schicken, der schickt Daten zurück und diese gehen via. UMTS ins Netz. Ich habe mir zwischenzeitlich auch schon eine Raspberry PI gekauft. Die verbraucht aber durchgehend 5 Watt, was im Winter nicht optimal ist. Damit würde es aber auch gehen Daten abzuholen und zu übertragen. Der Vorteil hier wäre, dass ich mir das Thema Bluetooth sparen kann. Es gibt auch noch weniger Strom verbrauchende Linux Embedded Systeme wie, z.B. Gnublin mit 0,5 Watt Verbrauch. Ja Zeit müsste man haben. Da konzentriere ich mich gerade auf den Scheibengenerator.
Was den Hometrainer angeht. Es gab letztens bei Penny ein ‚Gestell‘ zum einspannen des Fahrrades, so das man das als Hometrainer verwenden kann. Das habe ich mir gezogen. Wird wahrscheinlich auch ein Scheibengenerator zum Einsatz kommen. Ende Letzten Jahres habe ich Quick and Dirty eine Halterung fürs Fahrrad gebaut und via Keilriemen eine Lichtmaschine vom Auto damit betrieben. Ohne Pulsweitenmodulation zum Steuern der Erregerspannung brechen die Beine ab beim Treten. Mit PWM (macht auch mein ATMEGA8) lässt es sich bequem regulieren wie schwer es sich treten lässt. Leider war es in der letzten Zeit zu kalt in der ‚Science‘ Garage, um stundenlang zu treten.
Danke für deinen Kommentar!