5637
Kommentar:
|
7085
|
Gelöschter Text ist auf diese Art markiert. | Hinzugefügter Text ist auf diese Art markiert. |
Zeile 52: | Zeile 52: |
* Ausgabe erfolgt sekündlich als csv Zeile (Komma separierte Werte) * weitere Interaktion ist bislang nicht geplant |
|
Zeile 75: | Zeile 77: |
== Kommunikation zw. Ardu & Raspi == | == Kommunikation zwischen Arduino & Raspi == |
Zeile 90: | Zeile 92: |
= Arduino via Raspi resetten = | == Arduino Sketch == Der Arduino läuft in einer Dauerschleife, in der er die aktuellen Werte der Sensoren aufnimmt. Diese Werte werden sekündlich als csv Zeile über den USB Port ausgegeben. Der Arduino gibt beim Start eine Zeile mit Bezeichnung der csv Werte aus. Damit ist es möglich die Ausgabe auf jedem beliebigem Rechner zu empfangen und auszuwerten. Auf dem angeschlossenen Pi läuft ein Script, das die Werte in eine SQlite Datenbank überträgt und weitere Berechnungen vornimmt. * Bsp. für Arduino Sensoren auslesen: {{{ const int ledPin1 = 13; const int ledPin2 = 12; const int APin1 = 4; // the number of the analog input pin int av1; int av2; void setup() { Serial.begin(115200); pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); Serial.println("=== start === "); Serial.println("csv head: "); Serial.println("av1 high, av2 low"); } void loop() { digitalWrite(ledPin2, HIGH); digitalWrite(ledPin1, LOW); delay(500); av1 = analogRead(APin1); Serial.print(av1); Serial.print(", "); digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, LOW); delay(500); // delay in between reads for stability av2 = analogRead(APin1); Serial.println(av2); } }}} = Tipps & Tricks = == Arduino via Raspi resetten == |
Zeile 109: | Zeile 147: |
= Arduino Optimierung = | == Arduino Optimierung == |
Zeile 116: | Zeile 154: |
---- = Wechselstrom messen = * https://openenergymonitor.org |
== Links == * https://openenergymonitor.org - Open Source Projekt zur Verbrauchsmessung von Haushaltsgeräten |
Inhaltsverzeichnis
Beim Eddy-2-Power Windrad verfolgen wir einen Niedrigtechnologie Ansatz. D.h. wir bevorzugen einfache robuste Mechanik und Technologien mit Materialien, die nicht nur in Industrieländern beschaffbar sind und bestenfalls recycelt wurden. Damit wir vergleichbare Messwerte erfassen können, verlassen wir den low tech Weg beim Messen.
Auch hier halten wir es so einfach und praktikabel wie möglich. Alle wichtigen Schritte, Knackpunkte und Fallstricke die uns begegnen werden dokumentiert. Allerdings ist hier etwas mehr Vorwissen und andere Hardware notwendig.
Messbereiche
Windgeschwindigkeit
- Später erfassen wir vlt. auch die Windrichtung, die ist bei Vertikalachsenanlagen aber nachrangig.
Geschwindigkeit des Windrads
- rpm mittels reed switch
- Das kann genauso wie beim [Eddy-2-Power/Windmessgerät]] realisiert werden.
- später rpm counter aka Kilometerzähler für den Rotor
Spannung der Batterien
Ladestrom
- stromführende Leitungen mit Abstand am Hall Sensor vorbei führen, damit keine Messfehler entstehen
ACS714 am Arduino auslesen
Entladestrom
Zustände
- Stand LVD Relay
Temperaturen
- Luft
- Batterien
- Dump
Luftdruck
Hardwaresetup
Aufbau
- WLAN Router - die Verbindung zur Außenwelt; zum "Ablesen" der Messwerte
- Raspberry Pi - Messwerte speichern, Berechnungen, Darstellung
- per Netzwerkkabel mit WLAN Router verbunden
- Anemometer
- Datenbank
- grafische Darstellung mit Munin
- Arduino - Messwerte der Sensoren erfassen
- Der Arduino wird quasi als billiger Analog/Digital Wandler für den Pi genutzt. Der AD Wandler übersetzt die analogen Werte zwischen 0 und 5 Volt in digitale zwischen 0 und 1023 (10Bit).
- Stromversorgung, Kommunikation und Firmwareflash via USB am Pi
- Sensoren - siehe oben
- Ausgabe erfolgt sekündlich als csv Zeile (Komma separierte Werte)
- weitere Interaktion ist bislang nicht geplant
- Stromversorgung - Alle Messgeräte werden unabhängig vom Windrad mit Strom versorgt. So können auch bei Umbau, Wartung, Fehlern etc. weiterhin Daten erfasst werden.
- Software - Die Programme zur Erfassung und Auswertung werden weitestgehend in Python/Micropython geschrieben, für den Mikrocontroller im Arduino C++ Dialekt. Die Datenbank wird zunächst SQLite. Munin dient zur Darstellung der Messwerte. Eine weitere softwaregestützte Auswertung ist vorerst nicht geplant. Die erfassten Daten werden wir zu Forschungszwecken veröffentlichen.
Vorbereitung
Vom Raspi aus kann der Arduino per USB geflasht werden. Entweder über die Arduino IDE oder über die Konsole mittels ino.
ino über pip installieren:
aptitude install python-pip screen pip install ino
- ino läuft nur mit python2
- screen wird zum Testen der seriellen Konsole genutzt
Arduinocode flashen
mkdir test cd test ino init vi src/sketch.ino ino list-models ino build -m mega2560 ino upload -m mega2560
Kommunikation zwischen Arduino & Raspi
Raspi und Arduino sprechen direkt über USB miteinander. Der Arduino bezieht somit auch seinen Strom aus dem USB Port des Raspis. Alternativ können beide per USB mit Strom versorgt werden und z.B. über I2C oder SPI Daten austauschen.
- screen /dev/ttyACM0 115200
- ino serial (verwendet picocom)
Hier werden Raspi und Arduino per USB verbinden. Letzteres bezieht dabei seinen Strom über den Raspi.
Es ginge auch separat (jeweils getrennt per USB mit Strom versorgen) und dann mittels I2C kommunizieren:
http://fritzing.org/projects/i2c-raspberrypi2-master-to-arduino-slave I2C Verbindung
https://blog.retep.org/2014/02/15/connecting-an-arduino-to-a-raspberry-pi-using-i2c/ Software
http://arduino-pi.blogspot.de/2014/03/speeding-up-i2c-bus-on-raspberry-pi-and.html I2C beschleunigen
Zukünftig könnten die Messwerte auch direkt vom Pi am Arduino ausgelesen werden. Dafür gibt es z.B. die pyduino API.
Arduino Sketch
Der Arduino läuft in einer Dauerschleife, in der er die aktuellen Werte der Sensoren aufnimmt. Diese Werte werden sekündlich als csv Zeile über den USB Port ausgegeben. Der Arduino gibt beim Start eine Zeile mit Bezeichnung der csv Werte aus. Damit ist es möglich die Ausgabe auf jedem beliebigem Rechner zu empfangen und auszuwerten. Auf dem angeschlossenen Pi läuft ein Script, das die Werte in eine SQlite Datenbank überträgt und weitere Berechnungen vornimmt.
Bsp. für Arduino Sensoren auslesen:
const int ledPin1 = 13; const int ledPin2 = 12; const int APin1 = 4; // the number of the analog input pin int av1; int av2; void setup() { Serial.begin(115200); pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); Serial.println("=== start === "); Serial.println("csv head: "); Serial.println("av1 high, av2 low"); } void loop() { digitalWrite(ledPin2, HIGH); digitalWrite(ledPin1, LOW); delay(500); av1 = analogRead(APin1); Serial.print(av1); Serial.print(", "); digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, LOW); delay(500); // delay in between reads for stability av2 = analogRead(APin1); Serial.println(av2); }
Tipps & Tricks
Arduino via Raspi resetten
Wenn Pi und Arduino an der selben Stromversorgung hängen kann ein Kabel direkt von einem GPIO Pin am Pi zum Arduino Reset Pin geführt werden. Achtung, bei unterschiedlichen Stromquellen sollte eine kleine Diodenschaltung den dann möglichen Stromfluss unterbinden, damit die gute Hardware nicht verbrutzelt wird.
Hier wird GPIO Pin 4 des Pis genutzt, mit dem Reset Pin am Ardunio verbunden und durch dieses Script (auf dem Pi) kurz auf HIGH gesetzt:
echo 4 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio26/direction echo "0" > /sys/class/gpio/gpio4/value; sleep 1; echo "1" > /sys/class/gpio/gpio4/value exit 0
- Es wird eine Sekunde gewartet, ein paar Millisekunden würden auch genügen.
als root ausführen
Arduino Optimierung
Im alltäglichen Betrieb ist die Arduino Umgebung nicht notwendig, der geflashte Atmega Microcontroller reicht.
- + preislich guenstiger
- + geringerer Stromverbrauch
- - braucht extra Hardware Umgebung zum flashen und fuer serielle console
Links
https://openenergymonitor.org - Open Source Projekt zur Verbrauchsmessung von Haushaltsgeräten