Pony Plot
Pony Plot | |
Das Leben ist ein Ponyhof. | |
Kurzbeschreibung | |
---|---|
Pony Plot ist ein Plotter für Arduino | |
Kategorien | |
Digitales Messen | |
Einordnung in den Lehrplan | |
Geeignet für: | alle |
Sonstiges | |
Durchführungsform | Demoexperiment, Schüler*innen-Experiment |
Anzahl Experimente in dieser Unterkategorie | 1 |
Anspruch des Aufbaus | leicht |
Informationen | |
Name: | Streicher, Boczianowski, Pyras |
Kontakt: | @ |
Uni: | Humboldt-Universität zu Berlin |
Pony Plot ist ein Plotter für Arduino von Ferdinand Streicher. Alleinstellungsmerkmal ist, dass die Konfiguaration des Graphen (Skalierung, Achsenbeschriftung, usw.) vom Arduino an den PC übergeben werden. Damit muss ausschließlich der Programmcode des Arduinos an die jeweilige Messung angepasst werden. Pony Plot bleibt unberührt. Dies vereinfacht die Handhabung z. B. für Schülerinnen und Schüler bei der Programmierung eines Experiments wesentlich. Außerdem ist es so möglich, unterschiedliche Arduino-Experimente vorzubereiten, die mit der Verbindung zum PC die Achsenbeschriftung etc. festlegt, wie man es von kommerziellen Systemen gewöhnt ist.
Inhaltsverzeichnis
Didaktischer Kommentar
Diagramme spielen im Physikunterricht eine große Rolle. Zwar existieren für Arduino und Co. Plotter in Hülle und Fülle, z. B. Arduino IDE. Diese genügen jedoch nicht den Ansprüchen des Physikunterrichts, weil insbesondere (gut lesbare) Achsenbeschriftungen mit physikalischen Einheiten häufig fehlen. Gerade für Demonstationsexperimente sind diese jedoch für die Kommunikation über die dargestellte Messung wichtig. Auch sind automatische Skalierungen der Achsen im Physikunterricht mitunter irritierend, wenngleich sie für andere Klientel hilfreich ist. Pony Plot ist auf die Bedürfnisse des Physikunterrichts zugeschnitten. Die Beschriftungen sind kontraststark und mit großer Schrift und Messpunkte farbig ausgeführt. So sind sie auch im hellen Klassenzimmer bei Beamer-Projektionen erkennbar.
Anleitung
Handhabung
Auf dem PC wird Pony Plot gestartet. Dies geschieht durch den Start der .exe-Datei. Java ist auf dem PC erforderlich.(https://www.java.com).
Alternative bzw. unter Linux und Mac OS X lässt Pony Plot in der Processing Umgebung ausführen (https://processing.org/download/).
Für Pony Plot müssen die Libraries gicentre von Wood und Slingsby und controlP5 von Schlegel installiert werden.
Zu finden unter Sketch:Library importieren:Lirary hinzufügen:Filter.
Unter Datei:Exportieren kann anschließend eine .exe-Datei erstellt werden, die auf dem gewählten System lauffähig ist.
Pony Plot sucht nach der zuletzt aufgetauchte serielle Schnittstelle auf dem PC und liest die vom Arduino übermittelten Konfigurationen für die grafische Darstellung ein. Die Messung startet je nach Programmierung des Arduino automatisch, über einen physikalischen Taster an einem Port des Arduinos oder auch über einen Klick in das Farbfeld der Legende des Graphen. Die Aufnahme mehrerer Messung in unterschiedlichen Farben ist so mit Pony Plot möglich. Siehe Abbildung 1.
Abb.1: Kennlinien unterschiedlicher elektronischer Bauteile dargestellt in Pony Plot: Glühlampe, rote LED, blaue LED, Widerstand
Konfiguration
Der Arduino übergibt beim Start (Reset bzw. Verbindungsaufbau an der seriellen Schnittstelle) die Konfiguration an Pony Plot über die serielle Schnittstelle. Festgelegt werden folgende Parameter (Version 0.4.7):
- Titel des Diagramms
- Untertitel
- Skalierung der Achsen (Minima und Maxima)
- Zahlenformat insb. Nachkommastellen
- Achsenbeschriftung
- Anzahl der übertagenen Messpunkte pro Messung
- Farbe des Graphen
- Legende mit Startbutton in unterschiedlichen Farben
Download
Der Programmcode Pony Plot ist Open Source (Autor: Ferdinand Streicher ) und verwendet die
Libraries gicentre von Wood und Slingsby und controlP5 von Schlegel (Lizenz: GNU Lesser GPL).
Pony Plot, Version 0.6.6, zur Ausführung in Processing: Datei:Ponyplot.zip
Pony Plot, Version 0.6.6, als ausführbare Datei für Windows (erfordert Java, 5MB) Datei:Ponyplot.windows64.zip
Pony Plot, Version 0.6.6, als ausführbare Datei für Windows (inklusive Java, 100MB) (in Kürze)
Code
void setup() { Serial.begin(9600); Serial.println(); Serial.println(F("start:")); //Serial.println(F("title:UI-Kennlinien")); //Serial.println(F("subtitle:Showing magic")); Serial.println(F("setMaxY:20")); Serial.println(F("setMinY:0")); Serial.println(F("setMinX:0")); Serial.println(F("setMaxX:5")); Serial.println(F("setYFormat:#.###")); Serial.println(F("setXFormat:#.#")); Serial.println(F("setXAxisLabel:Spannung in Volt")); Serial.println(F("setYAxisLabel:Strom in Milliampere")); Serial.println(F("setPointColor:0,50,255")); Serial.println(F("setXDataLength:256")); Serial.println(F("button:B:Blaue LED:0,0,255")); Serial.println(F("button:R:Rote LED:255,0,0")); Serial.println(F("button:L:Gluehlampe:34,127,48")); Serial.println(F("button:r:Widerstand:0,0,0")); pinMode(11,OUTPUT); // PWM out pinMode(3,OUTPUT); // PWM out pinMode(A0,INPUT); // analog input pinMode(A1,INPUT); // analog input TCCR2A = B10100011; //schnelle PWM an A and B TCCR2B = B00000001; //Keine Voreinstellung für Timer2 } float Rseries=100; void measure(byte val, byte nrep) { unsigned int v0=0; unsigned int v1=0; OCR2A=val; OCR2B=val; delay(30); for(byte i=0; i<nrep; i++){ v0+=analogRead(A0); v1+=analogRead(A1); delay(5); } float volt0 = 5.0 * v0 / 1024.0 /nrep; float volt1 = 5.0 * v1 / 1024.0 /nrep; float ampere = 1000.0*(volt0-volt1)/Rseries; if (ampere<=0) ampere = 0; Serial.print(volt1); Serial.print(" "); Serial.println(ampere); } char command=0; void loop() { if (command!=0) { switch (command) { case 'R' : // Rote LED Serial.println(F("activeGraph:0")); Serial.println(F("setPointColor:255,0,0")); Serial.println(F("setLineWidth:0")); break; case 'B' : // Blaue LED Serial.println(F("activeGraph:2")); Serial.println(F("setPointColor:0,0,255")); Serial.println(F("setLineWidth:0")); break; case 'L' : // Glühlampe Serial.println(F("activeGraph:5")); Serial.println(F("setPointColor:34,127,48")); Serial.println(F("setLineWidth:0")); break; case 'r' : // Widerstand Serial.println(F("activeGraph:6")); Serial.println(F("setPointColor:0,0,0")); Serial.println(F("setLineWidth:0")); break; } // starte eigentliche Messung 256 Messpunkte von 0...255 for (int i=0;i<256;i++) { measure(i,32); } command =0; } // Lese Kommando von der seriellen Schnittstelle if(Serial.available()){ command=Serial.read(); } }