Da kommen gleich mehrere Dinge auf einmal zusammen. Wenn du das geschafft hast, weißt du was ein Spannungsteiler ist, wie man den Strom indirekt misst, du lernst die Bussysteme SPI/I2C kennen, weißt was ein ADC macht und wie man die Berechnungen dazu durchführt. Ich kann jetzt in diesem Beitrag nicht mal eben Grundlagen Elektrotechnik vermitteln.
Der Raspberry Pi hat keine analogen Eingänge. Das ist aber nicht weiter tragisch, da es auf dem Markt eine große Auswahl an ICs gibt, die an den Raspberry PI über das Bussystem I2C oder SPI angebunden werden. Hierbei ist unbedingt zu beachten, dass der Signalpegel beim Raspberry Pi 3.3V ist. Schließt man Hardware mit einem 5V Signalpegel an, wird man danach sehr unglücklich sein. Von Adafruit gibt es diese Steckboards. Sowas kann hilfreich bei der Entwicklung sein, da man dann nicht sofort den Lötkolben auspacken muss.
Als nächstes müsstest du die Charakteristika der Solarzelle kennen. Die maximale Spannung und der maximale Strom müssen bekannt sein.
Ein bisschen Grundlagen Elektrotechnik gehört auch dazu.
Spannung messen:
http://www.elektronik-kompendium.de/sit ... 505041.htm
Strom messen:
http://www.elektronik-kompendium.de/sit ... 505051.htm
Spannungsteiler:
http://www.elektronik-kompendium.de/sit ... 201111.htm
Um die Spannung zu digitalisieren (ADC), kannst du z.B. den
MCP3008 verwenden. Wie man das IC an den Raspberry Pi anschließt, haben die hier beschrieben:
https://learn.adafruit.com/raspberry-pi ... rs/mcp3008
Du musst im Hinterkopf behalten, dass die Eingangsspannung niemals höher als die Referenzspannung sein darf. In dem Fall sind es die 3,3V. D.h. du musst die Spannung, die du messen willst, mit einem Spannungsteiler verringern. Hier kannst du die Werte eintragen und berechnen lassen:
http://www.raltron.com/cust/tools/voltage_divider.asp
Ein Beispiel
Input = 12V
R1 = 6800Ω
R2 = 2400Ω
Output = 3.13V
Der Strom, der durch den unbelasteten Spannungsteiler fließt, beträgt dann U/(R1+R2) = 1.30mA
Current Drain (Stromverbrauch) bei den Eingängen beträgt laut Datenblatt 150µA maximal.
Man könnte Theoretisch noch größere Widerstände wählen.
Am besten ist es, wenn du ein Multimeter nimmst und zuerst den Eingang misst, bevor du das an das IC anschließt.
Der Teil um den Strom zu messen, ist etwas komplizierter. Du könntest einen Hall-Sensor nutzen oder ganz klassisch mit einem Shunt. Ein Shunt ist ein sehr niederohmiger Widerstand. Beträgt der Shunt z.B. 2mΩ durch den ein Strom von 5A fließt, fällt dort eine Spannung von 2.5V ab. Diese Spannung kann man messen und darüber den Strom berechnen.
Du bist nicht der einzige, der auf diese Idee kommt Messungen vorzunehmen. Durch die vielen Elektrofahrzeuge haben wir das Glück, dass die Chiphersteller neue bezahlbare Produkte auf den Markt schmeißen. Einmal gibt es die Hall-Sensoren, mit denen man das Magnetfeld messen kann. Also Berührungslos. Alternativ gibt es ICs, die Spannung und Strom messen können. Eins davon:
http://www.ti.com/product/INA220/datash ... BOS4037859
Der Software-Part ist aber einfacher. Da muss man nur passend zum Chip die richtige Seqeunz über den Bus schicken, um dann die Werte auszulesen. Die Werte müssen dann wieder normalisiert werden. Da du zuvor z.B. die max Eingangsspannung von 12V auf 3.3V reduziert hast müsstest du das wieder zurück rechnen. Wenn der analoge Eingang eine Auflösung von 10 Bit hat, gibt es (2**10) 1024 Möglichkeiten 0V - 3.3V bzw. 0V - 12-V aufzulösen. Das wären dann eine Auflösung von 3.3V / 1024 = 3,2 mV bzw. 12V / 1024 = 11,7mV. Wenn du den analogen Eingang ausliest, bekommst du einen Integer zurück, der bei 10 Bit maximal 1023 betragen würde. Bekommst du z.B. 750 geliefert, dann multiplizierst du das mit der berechneten Spannung. In diesem Fall wäre es für die 12V 750 * 11.7mV bzw. für die 3.3V 750 * 3.2mV.
Den Strom wirst du auch umrechnen müssen. Auch hier misst der analog Eingang eine Spannung und liefert dir einen Integer zurück. Daraus musst du dann wieder zuerst die reale Spannung berechnen, wie zuvor schon beschrieben. Danach mit dem Widerstandswert des Shunts multiplizieren. Bekommen wir z.B. den Wert 750 zurück, würden wir den Strom folgendermaßen berechnen: U / R = I, (750 * 11,7mV) / 2mΩ.
Hier ein paar Funktionen, die ich zur Berechnung verwendet habe (hoffentlich ohne Fehler)
Code: Alles auswählen
def voltage_divider(in_voltage, out_voltage, current=1e-3):
r1 = in_voltage / current
r2 = out_voltage / current
return r1, r2
def normalise_voltage(value, max_voltage, resolution_bit=10):
resolution = (2 ** resolution_bit) - 1 # ='0b1111111111'
volt_per_step = max_voltage / resolution
return value * volt_per_step
def calc_current(voltage, shunt):
return voltage / shunt
Im Nachhinein fällt mir auf, dass ein IPython Notebook für diese Erklärung ganz gut gewesen wäre. Naja, auf jeden Fall wirst du viel lernen. Schau dir auch das Beispiel in dem Raspberry Pi Forum an. Der ACS712 scheint einer dieser Hall Sensoren zu sein, die den Strom über das Magnetfeld messen und die Messung ist nahezu verlustfrei. Dort schreiben sie auch, wie man den MCP3008 anspricht.