Arduino Workshop Frank Zimmerli
Themen 2. Abend Anschluss an die weite Welt Ethernet Library Elektronik Grundlagen Anschluss von Sensoren und Aktoren Beispiele
Ethernet Library Ethernet.begin(mac:byte[],ip:byte []):void mac: Mac-Adresse (6 Bytes) ip: IP-Aresse (4 Bytes) Initialisiert Ethernet Library und Netzwerkeinstellungen Zusätzlich kann noch Gateway und Subnet- Maske angegeben werden.
Ethernet Library #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 10, 0, 0, 177 }; void setup() { Ethernet.begin(mac, ip); } void loop () {}
Ethernet Library Client sendet Client Server Server antwortet
Ethernet Library (Client) Client(ip:byte [],port:int):client Erzeugt einen Client, der sich mit Server auf IP-Adresse über entsprechenden Port verbinden kann. Client.connect():TRUE FALSE Macht Verbindungsaufbau mit Server.
Ethernet Library (Client) Client:connected():TRUE FALSE Liefert Zustand über Verbindung. Wenn noch ungelesene Daten vorhanden sind wird TRUE zurückgeliefert, obwohl die Verbindung schon unterbrochen sein kann. Client.available():int Liefert die Anzahl zu lesender Bytes zurück (Antwort des Servers).
Ethernet Library (Client) Client:write(data:byte char):void Schreibt Daten zum verbundenen Client. Client.print(data:any):void or Client.println(data:any, base):void Sendet Daten zum Server. Diese können sich in Array befinden. base gibt an in welchen Format Zahlen gedruckt werden (BIN, OCT oder HEX). Mit println(data) wird Zeilenumbruch hinzugefügt. println() kann auch alleine verwendet werden.
Ethernet Library (Client) Client:read():byte Liest Daten vom Server. Liefert -1 wenn keine Daten vorhanden sind. Client.flush():void Verwirft Daten welche an Client geschickt wurden, bisher aber noch nicht gelesen wurden.
Ethernet Library (Client) Client.stop():void Bricht Verbindung mit Server ab.
Ethernet Library (Server) Server(port:int):Server port: Portadresse auf welche Server hört Erzeugt einen Server Server.begin():void Startet den Server
Ethernet Library (Server) Server.available():Client Holt einen Client, welcher mit Server verbunden ist und Daten an den Server sendet. Client kann mit Client.stop() beendet werden. Server.write(data:byte):void Schickt Daten vom Server an Client
Ethernet Library (Server) Server.print(data:any):void Sendet Daten vom Client an Server. Server.println(data:any):void Sendet Daten vom Client an Server. Beinhaltet auch ein Newline am Ende.
Ethernet Library #include <Ethernet.h> // network configuration. gateway and subnet are optional. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 10, 0, 0, 177 }; byte gateway[] = { 10, 0, 0, 1 }; byte subnet[] = { 255, 255, 0, 0 }; // telnet defaults to port 23 Server server = Server(23); void setup() { // initialize the ethernet device Ethernet.begin(mac, ip, gateway, subnet); } // start listening for clients server.begin(); void loop() { Client client = server.available(); if (client) { server.write(client.read()); } }
Elektronik Grundlagen Ohm sches Gesetz Spannungsteiler Dioden Transistoren
Ohm sches Gesetz U=R*I U: Spannung [V], R: Widerstand [Ω], I: Widerstand [A] U R * I
Spannungsteiler U2 = R2 * (U1 / R1 + R2) Viele Sensoren variieren Widerstand. Mit 2. festem Widerstand kann damit ein Spannungsteiler realisiert werden um Werte zu messen, da Widerstand nicht direkt mit Arduino gemessen werden kann.
Diode Lässt Strom nur von Anode nach Kathode fliessen. (Ventil) Spannungsabfall 0.7 V Gibt es auch als leuchtende Variante: LED (rot: 1.8V, grün: 2.2V) Anode Kathode
Transistor (als Schalter) Ist ein Ventil welches durch die Basis gesteuert werden kann. Verstärkt Strom an Basis um ca. Faktor 200 Sperrspannung beträgt ca. 0.6 V zwischen Basis und Emitter I max berüchsichtigen (BC547, 100 ma) Basis Collector Emitter
Anschluss von Sensoren und Aktoren
LCD Display Benützung von Liquid Cristal Library. Beispiele sind vorhanden. Verwendung eines Displays mit HD4470- Kontroller (z.b. 4-Zeilen- LCD). 10kΩ Potentiometer für Helligkeitssteuerung.
LED Bei roten LED 330Ω Widerstand vorschalten. (5 V - 1.2 V) / 10 ma = 380 Ω Pro Pin max. 40 ma, d.h. 10 ma für LED ist kein Problem.
Taster Direkt an 5 V hängen oder bei eingeschaltetem Pullup-Widerstand gegen GND. Mech. Schalter prellen. Entprellen mit Kondensator oder Software (eigene Routine oder Library Bounce).
Relais Relais kann z.b. 220 V schalten. Galvanische Trennung Es können je nach Transistor grössere Relais angeschlossen werden. Freilaufdiode nicht vergessen.
Elektromotor Bei DC-Motoren mit nur einer Drehrichtung mit 1 Transistor und Widerstand. Ansteuerung mit PWM. Bei 0 Stillstand bei 255 max. Drehzahl. Für Drehrichtungsänderungen H-Brücke verwenden.
Servo #include <Servo.h> Direkt an Arduino anschliessbar. Benütze Servo Library. Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created int pos = 0; // variable to store the servo position void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } void loop() { for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees { // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } }
Schrittmotor Library vorhanden Treiber SN754410 (Viefache halbe H- Brücke) Beschaltung und Beispiel vorhanden.
Potentiometer (verst. Widerstand) Wird meist als veränderbarer Spannungsteiler benützt. Einlesen über analogen Input. Library für Abstraktion vorhanden.
LDR (Lichtabh. Widerstand) LDR bildet mit 10 kω Widerstand einen lichtabhängigen Spannungsteiler. Analoger Wert wird gewandelt und als PWM Signal auf LED ausgegeben.
Thermosensor TMP36 arbeitet als einfacher Spannungsteiler mit 10mV/ C. Beispiel hier.
Weitere Libraries EEPROM für internen Speicher Wire (I2C). Kann für Ansteuerung diverser Bausteine verwendet werden (EEPROM, RTC, Temperatursensor,...) Viele Ideen findet man unter Arduino playground Arduino reference Sparkfun Inventors Guide
Beispiele
Aufgabe Anzeigen von analogem Wert auf HTML Page. Wert wird alle 1 Sekunden aktualisiert. Benützung von Google Chart API Port A0 ist Eingang.
Beispiel Data Logger http://www.ladyada.net/learn/arduino/ ethfiles.html Schreibt Daten von 3 analogen Ports auf SD Karte.
One more thing...
Arduino Uno
Arduino Mega2560
Anhang
Widerstandstabelle E24-Reihe 1.0 1.1 1.2 1.3 1.5 1.6 1.8 2.0 2.2 2.4 2.7 3.0 3.3 3.6 3.9 4.3 4.7 5.1 5.6 6.2 6.8 7.5 8.2 9.1
CAD
CAD Eagle CAD Anleitung um mit Eagle Arduino Shield zu entwerfen
Tutorials http://www.ladyada.net/learn/arduino http://www.sparkfun.com/tutorial/aik/ ARDX-EG-SPAR-WEB.pdf
Links Arduino Homepage Datenblatt ATmega168 http://www.nkcelectronics.com http://www.seeedstudio.com/depot/ http://www.dshop.ch/osc/index.php? language=de http://www.sparkfun.com