Photo by Nicholas Zambetti, www.arduino.cc Physical-Computing mit der Arduino Plattform /ch/open Marcel Bernet
Haftung Bei den Bauanleitungen bzw. irgendwelcher Software gibt es keine Haftung für irgendwelche Schäden oder Funktionsgarantie, bitte immer nur als Anregung auffassen. Ich hafte nicht für Schäden, die der Anwender oder Dritte durch die Verwendung der Software oder Hardware verursachen oder erleiden. In keinem Fall hafte ich für entgangenen Umsatz oder Gewinn oder sonstige Vermögensschäden die bei der Verwendung oder durch die Verwendung dieser Programme oder Anleitungen entstehen können. Und wer mit Strom umgeht, soll sich bitte bei höheren Spannung und Strömen der Gefahren bewusst sein. Modellbahn gehört VDE-technisch zur Kategorie Spielzeug, dementsprechend streng sind die Vorschriften. Siehe hierzu auch die Sicherheitshinweise des Fremo. Die Schaltungen und die Software werden als Anregung und Hilfe unter Modellbahnern veröffentlicht. Sie sind auf Grund von Beispielen aus dem Netz bzw. eigenen Ideen entstanden. Natürlich sind sinnvolle Anregungen, Fehlermeldungen und Verbesserungen zu den Schaltung immer willkommen. Allerdings möchte ich aus gegebenen Anlass darauf hinweisen, dass ich leider keine Zeit für langwierige Diskussionen des Typs "Ich habe die Schaltung nachgebaut, warum funktioniert sie bei mir nicht" habe. Auch die Frage "Ich habe noch diesen oder jenen Chip in der Schublade, kann ich den auch verwenden", möge sich bitte jeder selbst beantworten. Bitte bei Problemen möglichst exakt schildern, was wie schief geht, am besten mit logfiles bzw. exakter Fehlermeldung. Dazu stellt das Projekt ein Forum zur Verfügung.
1. Teil Agenda Einleitung (Hardware, Entwicklungsumgebungen) Einfache Anwendungen (Steuerung von Servos, Led's, Motoren) Reagieren auf Externen Feedback (Sensoren) 2. Teil Arduino und die Aussenwelt (USB, LAN, WLAN etc.) Aufbau einer modularen Steuerung am Beispiel des MicroSRCP Projektes Anwendungsbeispiele
Arduino - Übersicht www.arduino.cc Kostengünstig (ab 20$) Cross-Plattform (Windows, Linux, Mac) Schnell erlernbare Programmiersprache, basierend auf Wiring (http://wiring.org.co/) Offene und Erweiterbare Software- Libraries auf Basis C++ Offene und Erweiterbare Hardware. Basierend auf Atmel s ATMega328P/2560 Mikrocontrollern
Arduino - Aufbau Systemtaktgenerator USB (Slave) Anschluss Stromanschluss Erweiterungsbuchsen für Shields, I/O Lines Prozessor inkl. Flash, EEPROM, SRAM Die Arduino-Plattform ist eine aus Soft-und Hardware bestehende Physical- Computing-Plattform. Physical Computing bedeutet im weitesten Sinne, interaktive, physische Systeme durch die Verwendung von Hardware und Software zu erstellen. Diese Systeme reagieren auf Ereignisse in der realen, analogen Welt und/oder wirken auf sie ein. http://de.wikipedia.org/wiki/arduino-plattform
Shields (http://arduino.cc/en/main/products) Ethernet-Shield Motor-Shield IO Expansion Shield Mittels Erweiterungsboards, sogenannten Shields, kann die Funktionalität des Board erweitert werden. Diese werden einfach in die Buchsenleiste des Arduino Board gesteckt und mittels entsprechender Software angesteuert. Es existieren eine Vielzahl von Shields, u.a. für Netzwerkanbindung mittels RJ45 / Ethernet Ansteuerung von Motoren (Lokomotiven). Ein Shield zum Abspielen von Sounddateien (u.a. MP3) z.b. Für Bahnhofsdurchsagen Schalten von 220V Verbrauchern IO Expansion Shields für Anschluss von Servo, LED, Rückmelder, I2C, RS 485 etc.
Arduino - Einsatzgebiete In Kombination mit Wii Remote zur RC Steuerung Steuerung von CNC Fräsen und 3D Druckern Fahrtrichtungsanzeige für Radfahrer USB Host, zur Steuerung von USB Geräten
Arduino + Modelleisenbahn = Steuern Hardware Gestalten Sammeln
Entwicklungsumgebung Arduino Compilieren UpLoad Die Entwicklungsumgebung wird benötigt um die Steuerungssoftware, sogenannte Sketches, zu compilieren und in die Boards zu laden (= UpLoad) Die Installation ist Ausführlich unter den folgenden Links beschrieben: http://arduino.cc/en/main/software, http://www.freeduino.de/books.
Entwicklungsumgebung How-to 1. Beispiel vorhanden? (File - > Examples -> ) 2. Beschreibung zum Shield vorhanden? (http://arduino.cc/en/main/hardware oder Google fragen) 3. Arduino Referenz http://arduino.cc/en/reference/homepage 4. Import aus Library (Sketch - > Import Library, Source siehe Installationsverzeichnis/libraries oder Sketchbook- Ablage/libraries)
Arduino Programmiersprache Programm in AVR-GCC Programm mit Arduino Libraries Quelle: http://www.rn-wissen.de/index.php/avr-einstieg_leicht_gemacht Referenz: http://arduino.cc/en/reference/homepage
Übung 1 (Kennenlernen) Installiert die benötigte Software (Entwicklungsumgebung, Treiber) Schliesst das Arduino Board an den Computer an. Wählt unter File -> Examples -> Basic den Blink Sketch aus. Nach Compilieren und Upload, sollte das Led (auf jedem Board vorhanden) an Pin 13 Blinken.
1. Teil Agenda Einleitung (Hardware, Entwicklungsumgebungen) Einfache Anwendungen (Steuerung von Servos, Led's, Motoren) Reagieren auf Externen Feedback (Sensoren) 2. Teil Arduino und die Aussenwelt (USB, LAN, WLAN etc.) Aufbau einer modularen Steuerung am Beispiel des MicroSRCP Projektes Anwendungsbeispiele
Ansteuerung von LED s int rot = 4; // LED Lichtsignal int gruen = 5; // Die setup() Methode, wird einmal beim // Start des Sketches durchlaufen void setup() { // verwende die nachfolgenden Pins als Output: pinmode(rot, OUTPUT); pinmode(gruen, OUTPUT); } // Die loop() Methode wird immer und immer aufgerufen, // solange das Board am Strom angeschlossen ist. void loop() { digitalwrite(gruen, HIGH); // freie Fahrt digitalwrite(rot, LOW); delay(1000); // 1ne Sekunde warten digitalwrite(gruen, LOW); // Stop digitalwrite(rot, HIGH); delay(1000); // 1ne Sekunde warten }
Digital Input int sensorpin = A0; // Input Pin fuer Reed Kontakt int ledpin = 4; // LED void setup() { pinmode( sensorpin, INPUT_PULLUP ); // setzt den internen Widerstand pinmode(ledpin, OUTPUT); } void loop() { if ( digitalread( sensorpin ) == LOW ) { digitalwrite( ledpin, HIGH ); delay( 1000 ); digitalwrite( ledpin, LOW ); delay( 1000 ); } }
PWM - Pulsweitenmodulation // Analog Write int pos = 0; int ledpin = 6; // aktueller Dimmungswert // einer von den Pins mit PWM void setup() { pinmode( ledpin, OUTPUT ); } void loop() { // LED auf und abdimmen for(pos = 0; pos < 255; pos += 1) { analogwrite( ledpin, pos ); delay(15); // 15 Millissekunden warten } for(pos = 255; pos>=1; pos-=1) { analogwrite( ledpin, pos ); delay(15); } } Siehe: http://de.wikipedia.org/wiki/pulsweitenmodulation
Ansteuerung von Servo s // Sweep #include <Servo.h> Servo myservo; // Erstellt ein Servo Object zur Steuerung des Servos // Es können max. 8 Servo angeschlossen werden (Atmega128 = 48) int pos = 0; // Variable zur Speicherung der akt. Pos. des Servos void setup() { myservo.attach(4); // Servo dem Pin 3 zuweisen. } void loop() { for(pos = 0; pos < 180; pos += 1) // Servo vom linken zum rechten Anschlag { // in Schritten von 1 schalten myservo.write(pos); delay(15); // 15 Millissekunden warten } for(pos = 180; pos>=1; pos-=1) // Servo vom rechten zum linken Anschlag { // in Schritten von 1 schalten myservo.write(pos); delay(15); } } ACHTUNG: vorher Servo-Hebel ausstecken und richtigen Pin verwenden!
Ansteuerung von Motoren // Motor Shield test// mit MotoMama Shield // Test Ausgang 2 int dirpin1 = 12; // Fahrrichtung für Treiber 2, Pin 12 + 13 int dirpin2 = 13; int speedpin = 11; // Geschwindigkeit für Treiber 2, Pin 11 int speed = 200; void setup() { pinmode(dirpin1, OUTPUT); // Pin als Output setzen pinmode(dirpin2, OUTPUT); pinmode(speed, OUTPUT); } void loop() { digitalwrite(dirpin1,high); // Fahrrichtung vorwaerts digitalwrite(dirpin2,low); analogwrite(speedpin, speed); // Geschwindigkeit setzen delay( 500 ); analogwrite( speedpin, 0 ); delay( 1000 ); } digitalwrite(dirpin1,low); // Fahrrichtung rueckwaerts digitalwrite(dirpin2,high); analogwrite(speedpin, speed); // Geschwindigkeit setzen delay( 500 ); analogwrite( speedpin, 0 ); delay( 1000 );
Übung 2 (Standard-Beispiele) Sucht mindestens zwei der vorherigen Beispiele aus und probiert sie. Die detaillierten Beschreibungen und Lösungen zu den Beispielen sind unter folgenden Link zu finden: http://openfacts2.berlios.de/wikide/index.php/berli osproject:microsrcp_grundkomponenten
1. Teil Agenda Einleitung (Hardware, Entwicklungsumgebungen) Einfache Anwendungen (Steuerung von Servos, Led's, Motoren) Reagieren auf Externen Feedback (Sensoren) 2. Teil Arduino und die Aussenwelt (USB, LAN, WLAN etc.) Aufbau einer modularen Steuerung am Beispiel des MicroSRCP Projektes Anwendungsbeispiele
Sensoren Sensoren erlauben es auf externe Meldungen zu reagieren und ermöglichen so automatisierte Abläufe. Arduino kann Analoge, Digitale, Serielle (RS-232C) und I2C Meldungen auswerten. Beispiele für Sensoren sind: Temperator-Sensor 2/3 Axis Sensor (analog Smartphones), Tilt-Sensor Licht-Sensor (Infrarot) Taster, Potentiometer, Push-Button, Reed-Kontakt, Joystick Hall Sensor (Metall-Detektor)
Sensoren am Beispiel von Reed-Kontakten (1)
Vorgefertige Sensoren Arduino bietet mit den TinkerKit Komponenten ein Satz von vorgefertigen Sensoren, Hubs, Hubs für die einfache Verwendung von Sensoren ohne Löten. Mehr Informationen im Arduino Shop: http://store.arduino.cc/ww/index.php?ma in_page=index&cpath=16 Alternative: Electronic Brick Module, siehe http://shop.boxtec.ch/grove-baseshield-p-40483.html
Aufbau Übungsmodul Das Übungsmodel besteht aus einer Strecke mit einem Abstellgleis Die Strecke und das Abstellgleis bilden jeweils einen eigenen Stromkreis. Zwei (drei) Rückmelder (Sensoren) ermöglichen einen Pendelzugbetrieb Mittels einer Weiche mit Servo kann das Abstellgleis angesteuert werden. Ein Lichtsignal (mit 2 LED) erlaubt visuellen Feedback
Übung 3 (Pendelzug) Implementiert einen Pendelzugbetrieb (fahrt nach links, stopp, warten, fahrt nach rechts, stopp, warten) Dabei könnt Ihr wählen ob die Lokomotive nur auf der Hauptstrecke von links nach rechts fährt oder das Abstellgleis mit einbezogen wird. (ACHTUNG: Servo Library und Motor Shield Konkurenzieren sich gegenseitig, analogwrite auf Pin 3 für Servo Ansteuerung verwenden) Die detaillierten Beschreibungen und Lösungen zu den Beispielen sind unter folgenden Link zu finden: http://openfacts2.berlios.de/wikide/index.php/berliosp roject:microsrcp_grundkomponenten
1. Teil Agenda Einleitung (Hardware, Entwicklungsumgebungen) Einfache Anwendungen (Steuerung von Servos, Led's, Motoren) Reagieren auf Externen Feedback (Sensoren) 2. Teil Arduino und die Aussenwelt (USB, LAN, WLAN etc.) Aufbau einer modularen Steuerung am Beispiel des MicroSRCP Projektes Anwendungsbeispiele
Arduino - PC mittels USB Kabel (Seriell) Arduino Boards werden von PC als serielle Schnittstellen erkannt. Die Firmata Standard Library stellt eine fertige Lösung, für die Kommunikation Arduino - PC zur Verfügung. Weitere Informationen: http://arduino.cc/en/referen ce/firmata
Arduino als USB Host Controller Die Arduino Boards Arduino ADK Arduino DUE können als USB Host Controller verwendet werden. Für das ADK Board stellt Google ein SDK zur Verfügung: http://developer.android.com/guide/ topics/usb/adk.html http://labs.arduino.cc/adk/index
Arduino - LAN Mit dem Arduino Ethernet Shield oder dem neuen Arduino Ethernet steht eine stabile Variante für die Einbindung von Arduinos ins LAN zur Verfügung. Unterstützt werden diese durch eine eigene Ethernet Library: http://arduino.cc/en/reference/e thernet Ein Vielzahl von vorbereiteten Sketches runden das ganze ab: WebServer WebClient ChatServer TelnetClient
Arduino WLAN, ZigBee Der WLAN Shields erlaubt die Einbindung von Arduino in WLAN Netzwerke. Mittels XBee Modulen unterstützt Arduino auch den ZigBee Industriestandard für Funknetze von 10 100 Metern. http://de.wikipedia.org/wiki/zigbee
1. Teil Agenda Einleitung (Hardware, Entwicklungsumgebungen) Einfache Anwendungen (Steuerung von Servos, Led's, Motoren) Reagieren auf Externen Feedback (Sensoren) 2. Teil Arduino und die Aussenwelt (USB, LAN, WLAN etc.) Aufbau einer modularen Steuerung am Beispiel des MicroSRCP Projektes Anwendungsbeispiele
Das MicroSRCP Projekt MicroSRCP BiDiB Zentrale(n) PC Software RocRail Das MicroSRCP Projekt dient zum Steuern von Modelleisenbahnen. Es besteht aus mehreren Sketches welche aus dem Arduino eine BiDiB (www.bidib.org) Zentrale macht. In Verbindung mit RocRail (www.rocrail.net), welches auf Windows/Mac/Linux/RaspberryPI läuft, entsteht eine vollständige Modelleisenbahn Steuerung. Clients für Smartphones (z.b. androc) und Tablets ergänzen die Lösung.
Analoge Zentrale Der Standard microsrcp Sketch ist ausgelegt für eine Zentrale mit: 2 x Analoger Output zur Steuerung von 2 Lokomotiven (Pin 8 13) 2 x Servo (Pin 2 und 3) 1 x Arduino Empfohlene Shields: 1 x Side Shield, z.b. von www.renbotics.com 1 x Motorshield, MotoMama empfohlen 1 x IO Shield, z.b. von DF-Robot 2 x Lichtsignal mit je 2 LED (Pin 4-7, jeweils GND und Pin mit LED verbinden) 6 Rückmeldern (Pin A0 A5, jeweils GND und Pin mit Rückmelder verbinden) Je nach dem welcher MotorShield verwendet wird benötigt es einen SideShield um beide Shields nebeneinander anordnen zu können. ACHTUNG: bei Gleichzeitiger Verwendung der Servo Library kann nur der 2te Motortreiber (Pin 11 13) verwendet werden, der Mega hat diese Einschränkung nicht.
Zentrale mit RocRail verbinden Nachdem der microsrcp Sketch in den Arduino Upgeloadet wurde, kann RocRail gestartet werden und mit dem Arduino verbunden werden. Dazu ist einen neue bidib Zentrale, Serial ohne CTS einzurichten, siehe http://wiki.rocrail.net/doku.php?id=bidib-de
Steuern Im MicroSRCP unter microsrcp/rocrail/analog befindet sich einen rocrail.ini (Konfigurationsdatei RocRail) und eine plan.xml (obiger Plan) Datei. Nachdem die Zentrale verbunden wurde und plan.xml in das Arbeitsverzeichnis von RocRail kopiert, kann sofort mit dem Steuern der Anlage bekommen werden.
Übung 6 (microsrcp Analog) Ladet den microsrcp Sketch in die Zentrale und verbindet diese mit RocRail. Die detaillierten Beschreibungen zu den Beispielen findet Ihr unter http://openfacts2.berlios.de/wikide/index.php/ber liosproject:microsrcp
Digitale Modelleisenbahnsteuerung Auswahl von Lokdecodern Bei einer Digitalen Steuerung besitzt jede Lokomotive einen Decoder und ist so einzeln ansprechbar. Die Lokomotive mit ihrer Adresse wird in RocRail hinterlegt. Blöcke, Rückmelder und optional Fahrpläne ermöglichen einen automatischen Betrieb wie beim Vorbild. Mehr Informationen dazu: http://wiki.rocrail.net/doku.php?id=stepbystep-de
Digitale (DCC) Zentrale Alpha!!! 1 x Arduino mit 328P 1 x MotoMama Mittels microsrcpdcc Sketch wird der Arduino zur DCC Zentrale. Der MotoMama liefert dabei zwei DCC Signale mit jeweils 2A. Neben Arduino und Shield wird ein Netzteil mit 16 18V bei 4 A benötigt. Diese wird an den MotoMama angeschlossen. ACHTUNG: diese Lösung hat keine Kurzschlusssicherung weshalb diese extern zu lösen ist.
Übung 7 (microsrcp Digital) Ladet den microsrcpdcc Sketch in die Zentrale und verbindet diese mit RocRail. Die detaillierten Beschreibungen zu den Beispielen sind hier: http://openfacts2.berlios.de/wikide/index.php/ber liosproject:microsrcp
1. Teil Agenda Einleitung (Hardware, Entwicklungsumgebungen) Einfache Anwendungen (Steuerung von Servos, Led's, Motoren) Reagieren auf Externen Feedback (Sensoren) 2. Teil Arduino und die Aussenwelt (USB, LAN, WLAN etc.) Aufbau einer modularen Steuerung am Beispiel des MicroSRCP Projektes Anwendungsbeispiele
Hauszentrale androc auf Android Tablet Grundsätzlich kann RocRail alle Arten von Schaltern, Motoren ansteuern und beliebige Sensoren auswerten. Dank diesem Umstand kann es zu einer kleinen Hauszentrale umgebaut werden.
Ein Wort zum Schluss Es handelt sich hier um ein sehr junges Projekt, dass von einer Person (mir) erstellt wurde. Bitte nur Fragen zum microsrcp Projekt im Forum stellen, meine Zeit ist sehr begrenzt und die Antwort kann dauern! Für alle anderen Fragen rund um Arduino gibt ein ausgezeichnetes Mehrsprachiges Forum unter: http://arduino.cc/forum/