Unterschiede zwischen den Revisionen 15 und 16
Revision 15 vom 2017-01-07 18:04:22
Größe: 10645
Autor: anonym
Kommentar:
Revision 16 vom 2017-01-07 20:33:28
Größe: 10644
Autor: anonym
Kommentar:
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 17: Zeile 17:
== Spannung der Batterien ==

== Ladestrom ==
 * http://ruthner.at/wp/2012/02/strommessung-mit-hall-sensor/
 * https://blog.thesen.eu/genaue-strommessung-mit-dem-arduino-und-dem-acs712-hall-sensor-mittels-oversampling/
 * stromführende Leitungen mit Abstand am Hall Sensor vorbei führen, damit keine Messfehler entstehen
=== ACS714 am Arduino auslesen ===
 * http://playground.arduino.cc/Main/CurrentSensing
 * http://forum.arduino.cc/index.php?topic=108953.0

== Entladestrom ==
== Spannung ==
 * an den Batterien

== Strom ==
 * vom Generator zum Laderegler
 * zu & von der Batterie
 * zum Dump
Zeile 41: Zeile 37:
= Hardwaresetup =
== Aufbau ==
= Hardwaresetup für Messungen und Kommunikation =
== grundlegender Aufbau ==
Zeile 59: Zeile 55:
Entweder ein Arduino/Genuino (z.B. uno) oder:
 * atmega328 (mit bootloader)
 * ic halter für atmega328
 * 16mhz quarz
 * 2x18 bis 22 picofarad kondensatoren
 * 10k widerstand
 * led
 * mini breadboard, lochrasterplatine
 * rs323 usb ttl level wandler
 * 5v netzteil oder von akku mit spannungs- oder schaltregler (z.B. LM7805) auf 5V
 * Spannungsteiler für Sensoren am Arduino
  * http://www.elektronik-kompendium.de/sites/slt/1506141.htm
Entweder ein Arduino/Genuino (z.B. uno) oder etwas abgespeckter ein Atmel328p, daran die Sensoren...

=== Atmega328p auf Breadboard ===
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 für die serielle Konsole
 * benötigte Bauteile:
  * atmega328 (mit bootloader)
  * ic halter für atmega328 * 16mhz quarz
  * 2x18 bis 22 picofarad kondensatoren
  * 10k widerstand
  * led
  * mini breadboard, lochrasterplatine
  * rs323 usb ttl level wandler
  * 5v netzteil oder von akku mit spannungs- oder schaltregler (z.B. LM7805) auf 5V
  * Spannungsteiler für Sensoren am Arduino
   * http://www.elektronik-kompendium.de/sites/slt/1506141.htm
 * Atmega Breadboard Beschaltung:
  * https://www.arduino.cc/en/Main/Standalone
  * https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard
 * Atmega flashen, so geht's:
  * http://shelvin.de/atmega328p-pu-bootloader-laden-vom-arduino-uno-als-isp/
  * https://frag-duino.de/index.php/maker-faq/35-programmieren-eines-atmel-atmega-328p-mit-dem-arduino-uno-bootloader
  * http://www.arduino-tutorial.de/2010/08/ftdi-ft232rl/ - atmega168 mittels arduino flashen

== Strom messen mit dem ACS714 ==
Der Arduino hat einen 10Bit AD Wandler d.h. er unterscheidet analoge Spannungen zwischen 0 und 5 Volt in 1024 Schritten (von 0 bis 1023). In diesem Bereich werden die -30A bis +30A die der ACS714 messen kann abgebildet. Das sind 0,0586A pro Schritt (60/2^10 = 0,05859375). Kleinere Differenzen im Stromfluss sind unabhängig von allen anderen Einflüssen auf die Messung nicht darstellbar.

Laut Datenblatt hat der Sensor eine Genauigkeit von 66mV/A bei +-30A. Wer mit kleineren Strömen zu tun hat kann mit der +-5A Auslegung des Sensores mit einer Genauigkeit von 182mV/A messen.

 * http://forum.arduino.cc/index.php?topic=108953.0 -- "Looks like my assumption that 0-1023 matches -30 to 30A is wrong. With a sensitivity of 66 mV per A the optimized -30 to 30 range would be (Vcc/2)-1.98V to (Vcc/2)+1.98V (0.52V to 4.48V). That's something like .073982 A per step. 73,982 microamps per step. (long microAmps = (analogRead(pin) - 512) * 73982L;)"

Damit Messfehler klein bleiben sollten stromführende Leitungen mit ein wenig Abstand am Hall Sensor vorbei geführt werden. Die Analog Pins des Arduino bedanken für ein delay(1) mit genaueren Messwerten. Und es bietet sich an, über mehrere Messungen zu mitteln. {{{
a = 0;
for(int i = 0; i < 100; i++) {
  delay(1);
  a = a + analogRead(A0);
}
ampere = a / 100;
}}}

 * http://playground.arduino.cc/Main/CurrentSensing
 * http://forum.arduino.cc/index.php?topic=108953.0
 * https://www.hacktronics.com/Tutorials/arduino-current-sensor.html
 * http://www.sysrun.de/2012/11/stromsensoren-fur-die-motoren/#more-29
 * https://blog.thesen.eu/genaue-strommessung-mit-dem-arduino-und-dem-acs712-hall-sensor-mittels-oversampling/

=== bessere Analog/Digital Wandler ===
Wem das nicht fein genug auflöst, der/die nutzt nicht den internen 10 Bit A/D Wandler des Arduino sondern schaltet einen
12 bittigen davor (z.B. mcp3201 oder adc121c). Damit sind Amperemessungen in 0,0146A Schritten möglich (60/2^12 = 0,014648438).

 * http://playground.arduino.cc/Code/MCP3208 - 12bit Sensor am Arduino
 * http://arduino-projekte.de/index.php?n=43 - mcp320x Funktionen
 * https://www.raspiprojekt.de/machen/basics/schaltungen/26-analoge-signale-mit-dem-mcp3008-verarbeiten.html?showall=1

Der A/D Wandler lässt sich auch direkt an den Raspberry Pi anschließen:
 * http://erik-bartmann.de/component/attachments/download/21.html - Pi A/D Wandler mit mcp3008
 * https://www.raspberrypi.org/forums/viewtopic.php?f=32&t=134997# - Python A/D Wandler Treiber

=== Hall Sensor für Wechselstrommessungen ===
 * http://www.homautomation.org/2013/09/17/current-monitoring-with-non-invasive-sensor-and-arduino/ - AC monitoring with non-invasive sensor and arduino
Zeile 146: Zeile 192:
= Hardware =
== Atmel328p auf Breadboard =
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 für die serielle Konsole

 * Atmega Breadboard Beschaltung:
  * https://www.arduino.cc/en/Main/Standalone
  * https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard
 * Atmega flasehn, so geht's:
  * http://shelvin.de/atmega328p-pu-bootloader-laden-vom-arduino-uno-als-isp/
  * https://frag-duino.de/index.php/maker-faq/35-programmieren-eines-atmel-atmega-328p-mit-dem-arduino-uno-bootloader
  * http://www.arduino-tutorial.de/2010/08/ftdi-ft232rl/ - atmega168 mittels arduino flashen

== Strom messen mit dem ACS714 ==
Der Arduino hat einen 10Bit AD Wandler d.h. er unterscheidet analoge Spannungen zwischen 0 und 5 Volt in 1024 Schritten (von 0 bis 1023). In diesem Bereich werden die -30A bis +30A die der ACS714 messen kann abgebildet. Das sind 0,0586A pro Schritt (60/2^10 = 0,05859375). Kleinere Differenzen im Stromfluss sind unabhängig von allen anderen Einflüssen auf die Messung nicht darstellbar.

Laut Datenblatt hat der Sensor eine Genauigkeit von 66mV/A bei +-30A. Wer mit kleineren Strömen zu tun hat kann mit der +-5A Auslegung des Sensores mit einer Genauigkeit von 182mV/A messen.

 * http://forum.arduino.cc/index.php?topic=108953.0 -- "Looks like my assumption that 0-1023 matches -30 to 30A is wrong. With a sensitivity of 66 mV per A the optimized -30 to 30 range would be (Vcc/2)-1.98V to (Vcc/2)+1.98V (0.52V to 4.48V). That's something like .073982 A per step. 73,982 microamps per step. (long microAmps = (analogRead(pin) - 512) * 73982L;)"

Die Analog Pins des Arduino bedanken für ein delay(1) mit genaueren Messwerten. Und es bietet sich an, über mehrere Messungen zu mitteln. {{{
a = 0;
for(int i = 0; i < 100; i++) {
  delay(1);
  a = a + analogRead(A0);
}
ampere = a / 100;
}}}

 * https://www.hacktronics.com/Tutorials/arduino-current-sensor.html
 * http://www.sysrun.de/2012/11/stromsensoren-fur-die-motoren/#more-29
 * https://blog.thesen.eu/genaue-strommessung-mit-dem-arduino-und-dem-acs712-hall-sensor-mittels-oversampling/

== bessere AD Wandler =
Wem das nicht fein genug auflöst, der/die nutzt nicht den internen 10 Bit A/D Wandler des Arduino sondern schaltet einen
12 bittigen davor (z.B. mcp3201 oder adc121c). Damit sind Amperemessungen in 0,0146A Schritten möglich (60/2^12 = 0,014648438).

 * http://playground.arduino.cc/Code/MCP3208 - 12bit Sensor am Arduino
 * http://arduino-projekte.de/index.php?n=43 - mcp320x Funktionen
 * https://www.raspiprojekt.de/machen/basics/schaltungen/26-analoge-signale-mit-dem-mcp3008-verarbeiten.html?showall=1

Der A/D Wandler lässt sich auch direkt an den Raspberry Pi anschließen:
 * http://erik-bartmann.de/component/attachments/download/21.html - Pi A/D Wandler mit mcp3008
 * https://www.raspberrypi.org/forums/viewtopic.php?f=32&t=134997# - Python A/D Wandler Treiber

=== Hall Sensor für Wechselstrommessungen ===
 * http://www.homautomation.org/2013/09/17/current-monitoring-with-non-invasive-sensor-and-arduino/ - AC monitoring with non-invasive sensor and arduino

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

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

  • an den Batterien

Strom

  • vom Generator zum Laderegler
  • zu & von der Batterie

  • zum Dump

Zustände

  • Stand LVD Relay
  • Stand Laderegler Relay

Temperaturen

  • Luft
  • Batterien
  • Dump

Luftdruck


Hardwaresetup für Messungen und Kommunikation

grundlegender 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.

Aufbau Messschaltung

Entweder ein Arduino/Genuino (z.B. uno) oder etwas abgespeckter ein Atmel328p, daran die Sensoren...

Atmega328p auf Breadboard

Im alltäglichen Betrieb ist die Arduino Umgebung nicht notwendig, der geflashte Atmega Microcontroller reicht.

Strom messen mit dem ACS714

Der Arduino hat einen 10Bit AD Wandler d.h. er unterscheidet analoge Spannungen zwischen 0 und 5 Volt in 1024 Schritten (von 0 bis 1023). In diesem Bereich werden die -30A bis +30A die der ACS714 messen kann abgebildet. Das sind 0,0586A pro Schritt (60/2^10 = 0,05859375). Kleinere Differenzen im Stromfluss sind unabhängig von allen anderen Einflüssen auf die Messung nicht darstellbar.

Laut Datenblatt hat der Sensor eine Genauigkeit von 66mV/A bei +-30A. Wer mit kleineren Strömen zu tun hat kann mit der +-5A Auslegung des Sensores mit einer Genauigkeit von 182mV/A messen.

  • http://forum.arduino.cc/index.php?topic=108953.0 -- "Looks like my assumption that 0-1023 matches -30 to 30A is wrong. With a sensitivity of 66 mV per A the optimized -30 to 30 range would be (Vcc/2)-1.98V to (Vcc/2)+1.98V (0.52V to 4.48V). That's something like .073982 A per step. 73,982 microamps per step. (long microAmps = (analogRead(pin) - 512) * 73982L;)"

Damit Messfehler klein bleiben sollten stromführende Leitungen mit ein wenig Abstand am Hall Sensor vorbei geführt werden. Die Analog Pins des Arduino bedanken für ein delay(1) mit genaueren Messwerten. Und es bietet sich an, über mehrere Messungen zu mitteln.

a = 0;
for(int i = 0; i < 100; i++) {
  delay(1);
  a = a + analogRead(A0);
}
ampere = a / 100;

bessere Analog/Digital Wandler

Wem das nicht fein genug auflöst, der/die nutzt nicht den internen 10 Bit A/D Wandler des Arduino sondern schaltet einen 12 bittigen davor (z.B. mcp3201 oder adc121c). Damit sind Amperemessungen in 0,0146A Schritten möglich (60/2^12 = 0,014648438).

Der A/D Wandler lässt sich auch direkt an den Raspberry Pi anschließen:

Hall Sensor für Wechselstrommessungen


Software

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:

Zukünftig könnten die Messwerte auch direkt vom Pi am Arduino ausgelesen werden. Dafür gibt es z.B. die pyduino API.

Arduino Ausgabe

Der Arduino läuft in einer Dauerschleife, in der er die aktuellen Werte der Sensoren aufnimmt und ohne weitere Berechnungen ausgibt. 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 die Umrechnungen der Messwerte vornimmt.

arduino_hello_world.jpg

  • 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.

arduino_reset_via_pi-gpio.png

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

Eddy-2-Power/Messen (zuletzt geändert am 2017-03-06 20:30:36 durch anonym)


Creative Commons Lizenzvertrag
This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.