====== Solarladeregler V3 ====== * Anschluss für ein Solarpanel * Batteriemonitor * zwei schaltbare Lastausgänge * Eeprom zum Speichern von Messwerten * Serielle Schnittstelle * Anschluss Motor (12V) für Sonnennachführung der Solarzelle * alle freien oder mehrfach nutzbaren GPIO über Buchsenleisten erreichbar * über Aufsteckplatine Anschluss von zwei Stockwaagen Fest verwendete Pins für Laderegelung, Motortreiber und Eeprom: ^Bez.^Verwendung^ |A0| Messung der Spannung des Solarpanels| |A4|SDA Eeprom| |A5|SCL Eeprom| |4| Load1| |5|PWM Batterieladung| |6|I²C Batteriemonitor usw.| |7|Load2| |B6|Motortreiber Richtung| |B7|Motortreiber einschalten| Alle restlichen GPIO sind über Steckleisten zugänglich und können frei genutzt werden. Bei dieser Version ist Batteriemonitor, Arduino, EEPROM, 3V Spannungsregler und der Motortreiber für den Ausrichtmotor des [[:polykristallines_10w_solarmodul|Solarmoduls]] auf einem Board. Sind passende Anschlüsse aufgelötet, so kann das Board direkt auf die [[:12v_blei-silikon_akkumulator|Batterie]] aufgesteckt werden. Für die Verwendung in der [[bienen:bienenwaage|Bienenwaage]] wurde der Arduino Yun durch einen [[openwrt:gl-mt300n-v2|Mini-Router]] ersetzt. Über diesen kann auch drahtlos die Steuersoftware auf dem ATmega geschrieben werden. {{ :dsc_3913.jpg?400 |}} {{ :dsc_3914.jpg?400 |}} {{ :dsc_3907.jpg?400 |}} {{ :dsc_3909.jpg?400 |}} ===== Schaltung ===== SV5 ist für den Anschluss des Routers vorgesehen. Neben den Pins für GND, 3V, TX und RX enthält der Anschluss noch den RESET-Pin des ATmega und einen Pin, über den sich Load_1 unabhängig vom Atmega einschalten lässt. Dies ist notwendig, da bei beim Reset des ATmega sonst die Spannungsversorgung des Routers abgeschalten und somit der Flashvorgang durch AVRdude abgebrochen werden würde. Die Beschaltung der Anschlüsse für Reset und Stromversorgung ist vom verwendeten Gerät abhängig. Mit dem [[openwrt:gl-mt300n-v2|Mini-Router GL-MN300N-V2]] habe ich es nur mit der Benutzung von GPIO46 für den Reset des Atmega und dem Mißbrauch des Ausganges einer LED für die Spannungsversorgung stabil zum Laufen bekommen. Der Schaltplan zum Anschluss und Hinweise zur Konfiguration des Routers sind auf der Seite [[openwrt:gl-mt300n-v2|]]. {{ :solarregler_monopost_update.pdf |Bestückung Solarregler V3}} |C2, C3| 0,1µF| C-EUC1210K| 2|mt|geändert 0805, 25V| |C4| 1µF| C-EUC0805K| 1|sr|25V | |C5| 2.2µF| C-EUC0805K| 1|sr|25V| |C6| 4.7µF| C-EUC1210K| 1|sr|geändert 0805, 25V | |C7| 47µF| C-EUC1210K| 1|sr| 6V| |C8| 22pF| C-EUC1210K| 1|st|geändert 2µF, 6V| |C9, C11| 0,1µF| C-EUC0805K| 2|sr, bm|25V | |C10| 100µF| C-EUC1808| 1|mt|16V, probehalber ersetzt durch zwei 47µF| |D1|Schottky-Barriere-Gleichrichterdiode SK54 DO-214AA 40 V 5 A| SMC| 1| |161027 - 62| |D2|TVS-Diode Bidirektional| | 1| |P6KE36CA| |D3, D5|ES2D| ES2D| 2| | |F1-LOAD_EN, F2, F3| SHK20L| SHK20L| 3| | |L2-100| Bourns SRR1206-101YL Induktivität abgeschirmt SMD SRR1206 100 µH 220 mΩ| DR127| 1|sr|1056571| |Q2, Q3, Q4| Mosfet IRF7416 (Conrad 162476)| SO-08| 3| | |R1| 4,7kΩ| R-EU_M3216| 1| | |R3| 10kΩ|R-EU_M0805| 1| | |R4, R6, R8, R12, R13| 10kΩ| R-EU_M3216| 4| | |R5, R7, R9| 1kΩ| R-EU_M3216 | 3| | |R10| 0,2Ω| C-EUC0805| 1|mt| |R14| 100kΩ| R-EU_M0805| 1 |sr| |R15| 200kΩ| R-EU_M0805| 1|solar| |R16| 30kΩ| R-EU_M0805| 1|solar| |R17| 0Ω| R-EU_M0805| 1|solar| |R18| 100kΩ| R-EU_M0805| 1|bm| |R19| 0Ω| R-EU_M0805| 1|bm| |R20| 0,24Ω| R-US_0617/22| 1|bm| |R21| 20kΩ| R-EU_M0805| 1|bm| |R22| 20kΩ| R-EU_M0805| 1|bm| |T2, T3, T4| NPN MMBT3904 (Conrad 1112841)| SOT23-BEC|3| | |EEPROM|24LC512P| 24LC512P | 1| | |IC1|MEGA48/88/168-PU| MEGA48/88/168-PU | 1| | |IC2|DS2438Z| DS2438Z| 1|bm| |LTC3388-3|LTC3388-X| MSOP10-SINK| 1| | |MOTORTREIBER|DRV8800| DRV8800| 1|mt|1013556| |SV2|MA12-1| MA12-1| 1| | |SV3, SV4|MA04-1| MA04-1| 2| | |SV5|MA06-1| MA06-1| 1| | |X3|MKDSN1,5/3-5,08| MKDSN1,5/3-5,08| 1| |743678 | |12V_SENSOR, IN1|MKDSN1,5/2-5,08|MKDSN1,5/2-5,08|2| |743664 | R21 und R22 bilden einen Spannungsteiler. Da der DS2438 nur bis 10 Volt verarbeiten kann, die Spannung der Batterie aber bereits über 12 Volt ist und das Solarpanel bis um die 20 Volt liefern könnte muss die zu messende Spannung geteilt werden und diese Teilung beim Auslesen der Werte mit einberechnet werden. ===== Stromverbrauch des Solarreglers===== * Last ausgeschalten knapp unter 5mA * mit als Last laufendem [[openwrt:gl-mt300n-v2|Router (GL-MT300N-V2]] und Wlan ca. 100mA * mit am Router zusätzlich angeschlossenem UMTS-Stick ca. 135mA ==== Stromverbrauch angeschlossener 3V Sensoren ==== Der LTC3388-3 kann 50mA abgeben. ^Anzahl^Bezeichnung^Strom je Stk.^ |2x2|ADS1231 ADC für zwei Waagen, |10mA Dauer, bis 100mA kurz| |6-7| DS18b20 Temperatursensor| 1mA | |1x | 24LC512 EEPROM |max. 5mA beim schreiben| |1x | DRV8800 Motortreiber |1µA sleep, 6mA Betrieb| |1x |Batteriemonitor, |max 100µA (schreiben), 25µA| Da der Strom des LTC3388 für die benötigten Sensoren nicht mehr ausreicht wird für deren Spannungsversorgung ein extra Spannungswandler (LMS78_03-0.5R) verwendet. Dieser muss nur an den Ausgang Load1 angeschlossen werden. Dieser liefert zwar 3.3V als Ausgangsspannung, aber dies sollte nicht zu Problemen führen. Die anliegende Spannung des Solarpanels darf aber nur gemessen werden, wenn der 3,3V Spannungsregler ausgeschalten ist, da in der Berechnung von den im Normalfall anliegenden 3V ausgegangen wird. === 85°C Problem mit Dallas DS18B20 === An dem Regler sind jetzt zwei Stockwaagen mit je zwei DS18B20 angeschlossen. Seltsamerweise gab es ein Problem mit den Temperatursensoren, sobald mehr als drei Stück angeschlossen sind. Der vierte zeigt zeitweise 85°C an und dies kann sogar bei Folgemessungen die anderen Sensoren "anstecken". Die 85°C sind ein Standartwert des Sensors und werden von diesem ausgegeben wenn keine Messung durchgeführt wurde. Austausch Kabel und Sensor oder ein anderer Pullup brachte keine Änderung. Nach Erhöhung der Werte in DallasTemperature.cpp int16_t DallasTemperature::millisToWaitForConversion(uint8_t bitResolution) { switch (bitResolution) { case 9: return 110; case 10: return 210; case 11: return 420; default: return 900; } } und des Einstellens der der Auflösung der DS18B20 auf 11 Bit scheint es jetzt zu funktionieren. sensors.setResolution(address, 11); Ich könnte mir vorstellen, dass die Ursache des Übels die grenzwertige Spannungsversorgung mit (gemessenen) 2.98V ist. ===== Anwendung des Ladereglers in Stockwaage ===== Der Solarregler wird ab 2019 für die Datenerfassung der [[bienen:waegeplattform|Bienenwaagen]] verwendet. Das System besteht aus folgenden Komponenten: *Stromversorgung * Batterie * Solarmodul * Laderegler/Datenlogger * Router mit OpenWRT * Kamera * UMTS/LTE-Stick * 2 [[bienen:waegeplattform|Stockwaagen]] mit Temperatursensoren * 12V 6mm Antriebwelle DC Motor Gleichstrom Schneckengetriebemotor mit Encoder 20 RPM {{::hobby-metallurgie:20190613_005905.jpg?200 |}}Da das bisherige Gehäuse für [[:12v_blei-silikon_akkumulator|Batterie]] und [[:polykristallines_10w_solarmodul|Solarpanel]] nicht hoch genug ist wurde [[hobby-metallurgie:hobby-metallurgie|ein neuer Deckel dafür gegossen]]. Es bleibt nun genügend Platz um den Laderegler samt Erweiterungsplatine auf die Batterie aufzustecken. Der Antrieb zur Ausrichtung des [[:polykristallines_10w_solarmodul|Solarmodules]] zur optimalen Stromgewinnung wurde dabei auch überarbeitet. Die Aufnahmen für die Kugellager sind nun direkt im Deckel integriert und beim Abstellen des Deckels steht der Antrieb des Panels nicht mehr im Dreck. Die Bienenwaage ist dadurch entschieden wartungsfreundlicher geworden. {{ :bienen:solarausrichtung.jpg?400 |}} Deckel von unten mit eingespritzter Dichtung und Antrieb zur Ausrichtung des Solarmoduls. Das Kabel zum Solarmodul wird durch die Achse geführt. =====Zusammenarbeit Solarregler und Router===== Der Router wird eingeschalten wenn die Spannung über dem Mindestwert liegt und entweder am Taster eingeschalten wird oder ein Auftrag (Upload der Messwerte, Foto machen, Benachrichtigung bei schwärmenden Bienen) in der Warteschlange anliegt. Ausgeschalten wird er, wenn * kein Auftrag mehr vorliegt und der Router frei für einen neuen Befehl wäre ("OK/OK2") * ein Timer überschritten ist * die Batteriespannung unter Mindestwert fällt Ob OK oder OK2 gesendet wird hängt davon ab, ob der Router abgeschalten werden kann. OK2 wird z.B. gesendet, wenn ein anderer Computer gerade im Netzwerk angemeldet ist. ==== Kommunikation über serielle Schnittstelle ==== Datensätze, welche der Router empfängt und die keinem Befehl entsprechen, werden in eine Datei geschrieben und nicht quittiert. Mit einem = beginnende Daten werden in die Datei Kommentare.txt geschrieben, ansonsten in die Datei /tmp/orig.tmp. ===Befehle Richtung Ladereger:=== ^Befehl^Bedeutung^Reaktion^ |Wait|Router ist beschäftigt, nicht abschalten|Timer hochsetzen| |OK|Router ist frei für Befehl oder könnte ausgeschalten werden|nächsten Befehl senden oder Router abschalten| |OK2|Router ist frei für Befehl, sollte aber eingeschalten bleiben|Timer hochsetzen und nächsten Befehl senden| |STATUS|fordert Systemdaten des Solarreglers an |Systemdaten senden =| |ONEWIRE|Scannt nach den Adressen angeschlossener Geräte|Adressen senden =| |TURN|Richtet das Solarpanel aus|Panel richten, Timer hochsetzen| |EEPROM_D|Lösche den Speicher|Eeprom löschen| |10stellige Zahl|wird als Timestamp interpretiert|sendet "timeset" zurück| ===Befehle Richtung Router:=== ^Befehl^Bedeutung^Reaktion^ |upload|die temporäre Datei wird hochladen und anschließend gelöscht|WAIT, wenn erfolgreich EEPROM_D, OK/OK2| |schwarm|Router meldet dem Server Schwarmalarm|WAIT, OK/OK2| |pic|Macht ein Bild und lädt es hoch |WAIT, OK/OK2| |zeit|der Solarregler möchte den aktuellen Timestamp wissen|Timestamp senden| |bewegung|der Bewegungsmelder wurde ausgelöst|WAIT, OK/OK2| |timeset| die Systemzeit des Solarreglers wurde gesetzt|OK/OK2| |shutdown|der Router führt poweroff aus|keine| ==== Kosten ==== |Router|~22,- EUR| |UMTS/LTE Stick|70,- EUR| |Stockwaage/n|jeweils ~90 EUR| |Batterie|~35 EUR | |Solarmodul|~25 EUR | ==== Zusätzliche Sensoren ==== Bodenfeuchtesensor: I²C Sensor mit mehreren Funktionen: * Kapazitive Messung der Feuchtigkeit * Helligkeit * Temperatur (°C mit einer Kommastelle) Wenn, wie im verfügbaren Testprogramm, alle drei Werte fortlaufend ausgelesen werden scheint der Sensor von der Elektronik etwas aufgeheizt zu werden. Nach Inbetriebnahme steigt die Temperatur z.B. von 18°C innerhalb einer Minute auf 20,3°C. Wird nur Feuchte und Temperatur gemessen und zwischen den Messungen eine Pause eingelegt (2 Sekunden reichen) so scheint die Temperaturangabe korrekt zu sein. Verglichen mit einem Dallas ds18b20 gibt es bei ca. 20°C Lufttemperatur 0,1 Grad Abweichung. Einfach auf dem Tisch liegend schwankt der Messwert der Feuchtesensoren zwischen 192 und 193. Im Eiswasser gibt der Bodenfeuchtesensor zwischen 458 und 460 als Messwert aus. (bei 5V Betriebsspannung, diese scheint Einfluss auf den Wert zu haben, je niedriger die Spannung desto höher der Wert) Die Temperatur gibt er mit -0,3°C an, ein ebenfalls im Eiswasser befindlicher Dallas +0,25°C. Anschlussbelegung: ^Farbe^Funtion^ ^ |orange|VCC| | |braun|GND| | |orange/weiß|SDA (A4)|gelb | |braun/weiß|SCL (A5)|orange | Adressen: * 21 (Standard) oben, gün * 20 unten, braun * 0x28, 0x7E, 0x04, 0x97, 0x06, 0x00, 0x00, 0x3C Dallas in der Mitte [[https://www.tindie.com/products/miceuz/i2c-soil-moisture-sensor/#product-reviews|Bodenfeuchtigkeitssensor mit I²C]] Beim Anschluss an einen handelsüblichen Arduino UNO funktioniert die Abfrage ohne externe Pullups nur, so lange nur ein Sensor angeschlossen ist. Mit einem zweiten Sensor wurden zusätzliche Pullup-Widerstände (10k) notwendig. An der Platine des Solarreglers funktioniert es ohne diese zusätzlichen Widerstände. gnd 12V Load2 3V