Arduino
Einfhrung in die Mikrocontroller-Programmierung
Uwe Ziegenhagen
23. August 2013
Fukushima
I
11.03.2011: Erdbeben in
Fukushima, Kernschmelzen
ffentliche Daten ungenau,
Prozess sehr mhselig
Lsung: Arduino liest Werte
vom Geigerzhler, liest GPS
Koordinaten
alle 5 Sekunden auf SD Karte
geschrieben
Ergebnis: unabhngige
Strahlungsdaten in hoher
Dichte, ffentlich zugnglich
PBS Video bei Youtube
mehr zum Thema
berblick
Was ist Arduino?
Allgemeines
Hardware
Software
Mein erstes Programm
Mehr Spa mit LEDs
LC Displays anschlieen
DOGM-Displays
I2 C-Displays
Serielle Displays
Mehr Beispiele
Mehr Informationen
Alternativen?
ber mich
lebe und arbeite seit Oktober 2008 in Kln
habe BWL & Statistik studiert, beides mit IT-Fokus
Elektronik funktioniert mit Rauch!
Blog unter [Link], dort liegen auch die
(in LATEX erstellten) Folien zu diesem Vortrag
Was ist LATEX? Ein geniales Textsatzsystem, mit dem ihr
eure Bachelor-, Master- und sonstigen Arbeiten schreiben
wollt! Mehr am Stand von Dante e.V.!
Das Arduino Projekt
I
Arduino = Physical-Computing-Plattform
besteht aus Hard- und Software (beides Open Source)
Hardware = einfache I/O-Boards mit Mikrocontroller und
analogen/digitalen Ein- und Ausgngen
Entwicklungsumgebung beruht auf Processing
(Java-Dialekt) und Wiring (C-Dialekt)
Geschichte beginnt 2005 in Ivrea, Italien
I
Massimo Banzi & David Cuartielles vom Interaction Design
Institute Ivrea (IDII)
Projekt, um Studenten einfaches Prototyping mit
Mikrocontrollern zu ermglichen
Arduino = italienischer Knig, Name einer Bar
mehr dazu in [Link]
Arduino Hardware
Es gibt mittlerweile 19 Arten von Arduinos, unter anderem
I
Uno, der Standard-Arduino (vormals Duemilanove)
LilyPad, zum Auf- und Einnhen in Kleidung
Leonardo Maus/Tastatur
ArduinoBT, mit eingebautem Bluetooth-Stack
Mega/Mega 2560, mit mehr I/O Ports
Mini, Micro & Nano, kleinste Arduinos
dazu diverse Clone: Boarduino, Nano, Arduino Pro, etc.
Spin-Offs: Netduino, Gadgeteer Microsoft .Net
Wir konzentrieren uns auf den Arduino Uno!
Arduino Uno
IO-Ports
USB-Port
Atmega 16U2
ATMega 328
912V
IO-Ports
Abbildung : Arduino Uno Quelle: Wikipedia
Arduino Uno
ATmega328 Mikrocontroller
32 KB Flash (davon 0,5 KB fr Bootloader)
2 KB RAM, 1 KB EEPROM
16 MHz Takt
14 digitale I/O-Pins
davon 6 als PWM (Pulsweitenmodulation) nutzbar
6 analoge Eingnge (10 Bit)
On-Board USB-Schnittstelle (mit Atmega8U2 als
Seriell-Wandler)
5 V Betriebsspannung, Speisung ber USB oder
Spannungsregler (712V)
Arduino Shields
Shields = Erweiterungsplatinen, die direkt auf den
Arduino gesteckt werden knnen
bereichern Arduino um viele interessante Mglichkeiten
Liste der Shields sehr lang: [Link] listet1
291 Shields von 116 Herstellern auf
fr Einsteiger gut geeignet: Danger Shield, Proto Shield,
Ethernet Shield
Ich habe noch: WLAN Shield, GPRS Shield, LoL-Shield
Stand: 31.05.2013
Danger Shield
Abbildung : Das Danger Shield Quelle: [Link]
Proto Shield
Abbildung : Das Proto Shield Quelle: [Link]
Steckbretter (Breadboards)
Abbildung : Breadboard, Quelle: Wikipedia
Ethernet Shield
Abbildung : Das Ethernet Shield mit SD-Slot Quelle: [Link]
Arduino Software & Fritzing
erhltlich fr Windows, Linux, Mac
aktuell momentan Version 1.0.5
bentigt installierte JRE
Mac und Windows Version bringen Compiler mit
Linux bentigt GCC mit einigen AVR Bibliotheken
sudo apt-get install arduino
Am besten auch gleich Fritzing installieren
I
grafische Design-Umgebung
kann auch Schaltplan und Leiterplatte erzeugen
Projekt der FH Potsdam, auf Spenden angewiesen
Fritzing
Abbildung : Screenshot Fritzing
Mein erstes Programm
Aufgabe: LED blinken lassen
I
LEDs haben Kathode () und Anode (+, lngeres
Beinchen)
Merkregel: Krzeres Bein = Kathode
nicht direkt anschlieen2 , Vorwiderstand nutzen
Widerstandsrechner im Internet ([Link]
20 mA bei 5 V Betriebsspannung = 220
5 V 1.6 V
= 170
0.02 A
Nchster verfgbarer Wert 220
2
Erklrung dazu. . .
Verkabelung
Abbildung : Verkabelungsschema, exportiert aus Fritzing
Fritzing
Abbildung : Schaltplan, exportiert aus Fritzing
Programmcode
Siehe Examples Basic [Link]
/*
Blink
Turns on an LED on for one second, then off for one second,
repeatedly.
This example code is in the public domain.
*/
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
//
//
//
//
set the LED on
wait for a second
set the LED off
wait for a second
Mehr LEDs ansteuern mit Schieberegistern Grundlagen
ich nutze einen 74HC164 (28 Cent bei Reichelt Elektronik
aka E-Aldi)
logisches Schaltwerk bla, bla Wikipedia
Funktion:
I
I
I
I
nimm seriell eine 8-stellige Binrzahl seriell entgegen
schau an jeder Stelle, ob Ziffer 0 oder 1
schalte den entsprechenden Ausgang oder nicht...
Strom kann ein wenig zu viel sein fr den Arduino (nur
1620mA)
FETs empfehlenswert
Mehr LEDs ansteuern mit Schieberegistern Ansteuerung
Abbildung : Schieberegister, Quelle: Instructables3
3
[Link]
The-74HC164-Shift-Register-and-your-Arduino/step2/
Basic-wiring-and-operation/
Mehr LEDs ansteuern mit Schieberegistern Versuchsaufbau
Abbildung : Schieberegister Versuchsaufbau
Schieberegister Programmcode
#define data 2
#define clock 3
#define wait 200
byte
byte
byte
byte
zero
two
four
six
=
=
=
=
B00000001;byte
B00000111;byte
B00011111;byte
B01111111;byte
one
three
five
seven
=
=
=
=
B00000011;
B00001111;
B00111111;
B11111111;
void setup(){
pinMode(clock, OUTPUT); // make the clock pin an output
pinMode(data , OUTPUT); // make the data pin an output3
}
void loop(){
shiftOut(data,
shiftOut(data,
shiftOut(data,
shiftOut(data,
shiftOut(data,
shiftOut(data,
shiftOut(data,
shiftOut(data,
}
clock,
clock,
clock,
clock,
clock,
clock,
clock,
clock,
LSBFIRST,
LSBFIRST,
LSBFIRST,
LSBFIRST,
LSBFIRST,
LSBFIRST,
LSBFIRST,
LSBFIRST,
zero);
one);
two);
three);
four);
five);
six);
seven);
delay(wait);
delay(wait);
delay(wait);
delay(wait);
delay(wait);
delay(wait);
delay(wait);
delay(wait);
Das LoL-Shield
Abbildung : LoLshield, Quelle [Link]
I
9 14 LEDs im Raster, nutzt Charlieplexing
Charlieplexing: n Pins steuern n2 n LEDs
komplette Bibliothek zur einfachen Programmierung
Webseite [Link]
Das LoL-Shield Hilfstabelle
Abbildung : LoLshield Excel Mappe zur Erzeugung der Frames
Das LoL-Shield Lets fire it up! I
/*
FrOSCon 2011 Animation
Writen for the LoL Shield, designed by Jimmie Rodgers:
[Link]
This needs the Charliplexing library, which you can get at the
LoL Shield project page: [Link]
Created by Jimmie Rodgers on 12/30/2009.
Adapted from: [Link]
History:
August 20, 2011 - Animation created for FrOSCon 2011
December 30, 2009 - V1.0 first version written at 26C3/Berlin
This is free software; you can redistribute it and/or
modify it under the terms of the GNU Version 3 General Public
License as published by the Free Software Foundation;
or (at your option) any later version.
Das LoL-Shield Lets fire it up! II
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
MA 02110-1301 USA
*/
#include <avr/pgmspace.h> //AVR library for writing to ROM
#include <Charliplexing.h> //Imports the library, which needs to be
//Initialized in setup.
int blinkdelay = 1000;
//Sets the time each frame is shown
uint16_t BitMap[][9] PROGMEM = {
{1,6,4,8,5461,0,7,0,8192},
{1,0,0,0,0,0,0,0,8192},
{15017,2729,2729,2729,15017,2729,2729,2729,15343},
{2345,2429,2429,2429,2429,2429,2361,2321,1553},
{448,992,2032,2032,4088,2032,2032,992,448},
Das LoL-Shield Lets fire it up! III
{18000}
};
void setup() {
LedSign::Init();
}
void loop() {
DisplayBitMap();
}
//Initializes the screen
//Displays the bitmap
void DisplayBitMap()
{
boolean run=true;
byte frame = 0;
byte line = 0;
unsigned long data;
//While this is true, the screen updates
//Frame counter
//Row counter
//Temporary storage of the row data
while(run == true) {
for(line = 0; line < 9; line++) {
//Here we fetch data from program memory with a pointer.
data = pgm_read_word_near (&BitMap[frame][line]);
Das LoL-Shield Lets fire it up! IV
//Kills the loop if the kill number is found
if (data==18000){
run=false;
}
else for (byte led=0; led<14; ++led) {
if (data & (1<<led)) {
LedSign::Set(led, line, 1);
}
else {
LedSign::Set(led, line, 0);
}}} delay(blinkdelay);
frame++; }}
LC Displays
per LC-Display (Liquid Cristal Display) lassen sich einfach und
schnell Informationen ausgeben
I
ideal: Displays kompatibel mit HD44780 whlen,
Industrie-Standard
DOGM Displays fr knapp 11 Euro
Bibliothek: [Link]
[Link]
77826;PROVID=2402
Schaltplan
Abbildung : Schaltplan
DOGM Programmcode
/* basiert auf DogLcd Library - Hello World
We assume the following pins are connected:
* LCD SI pin to digital pin 2
* LCD CLK pin to digital pin 3
* LCD RS pin to digital pin 4
* LCD CSB pin to digital pin 5
[Link]
*/
#include <DogLcd.h>
DogLcd lcd(2, 3, 4, 5);
void setup() {
[Link](DOG_LCD_M081,0x20);
[Link]("Hallo!");
delay(500);
[Link](); [Link]();
}
void loop() {
[Link](0, 0);
[Link](millis()/1000);
}
Schaltplan
Abbildung : Beschaltung DOGM Display
I2 C-Displays
I2 C: Inter-Integrated Circuit, von Philips/NXP entwickelt
alternativer Name: TWI, Two-Wire-Interface
Besonderheit, mehrere Gerte (auch identische) knnen
am Bus hngen
Ich nutze das Monochrome 128x32 I2C OLED graphic
display von Adafruit, ca. 18 Euro bei Watterott
128x32 Pixel auf 0.91 Inch (2.31 cm)
Tutorial dazu unter [Link]
Monochrome 128x32 I2C OLED
Abbildung : Monochrome 128x32 I2C OLED
NTP-Server abfragen
I
I
NTP = Network Time Protocol
fertiger Client fr den Arduino und das
Ethernet-Shield im Arduino Playground
unsere Aufgabe: den NTP & Display-Code
miteinander verheiraten
Serielle Displays
Serielles Display, braucht nur eine Leitung (plus 5 V und
GND)
Ich nutze [Link] Kosten:
20 Euro
2 Zeilen mit jeweils 16 Zeichen
hat intern einen PIC16F88 Mikrocontroller, der die
Kommunikation abwickelt
spart wertvolle Pins! (Pins sind meistens Mangelware!)
Serielle Displays
Abbildung : Sparkfun-Display, Quelle: [Link]
Serielle Displays Beispielanwendung
NTP Zeit alle 15 Sekunden nicht fr jede Anwendung
wichtig
RTC (Real Time Clock) Modul von Sparkfun, ca. 17 Euro
enthlt einen DS1307 RTC Controller und Lithiumzelle
Ansteuerung per I2 C
Beispiel-Skript unter [Link]
[Link]/RTC1307_-_Real_Time_Clock
Display + RTC = Uhr
Serielle Displays
Abbildung : Sparkfun-Display mit Sparkfun RTC
Erdbebenwarner
Ein 14-jhriger Schler zeigt der Chilenischen
Regierung, wie man mit einfachsten Mitteln ein
funktionierendes Erdbeben-Warnsystem errichten
kann. Sebastian Alegria beschaffte sich einen
Erdbeben-Detektor fr Haushalte, tauschte dessen
integrierte Elektronik mit einem
Arduino-Mikrocontroller aus und verband das Ganz
mit seinem Webserver. Sekunden, bevor ein Erdbeben
droht, wird eine Warnung per Twitter verschickt.
Quelle: [Link]
Laundrino
Die AEG-Waschmaschine meldet ber eine LED, ob
die Wsche fertig gewaschen wurde. Wenn die
Maschine jedoch im Keller steht, ist das schwer zu
berwachen. Ein Bastler hat nun dieses Signal
abgegriffen und kann in seinem LAN nachsehen, ob
die Waschmaschine ihre Arbeit beendet hat.
Quelle: [Link]
Bluetooth Morse Code Keyboard
Das Bluetooth Morse Code Keyboard von
Zunkworks ist mit der freien Prototyping-Plattform
Arduino entwickelt worden. Es bermittelt per
Bluetooth die Tastenkommandos an den Rechner, an
den es gekoppelt ist. Vorher werden die eingegebenen
Morsesignale noch in normale Tastaturbefehle
zurckbersetzt, damit jeder Rechner, der ein
Bluetooth-HID-Interface untersttzt, damit
funktioniert.
Quelle: [Link]
Raumluftsensor
Die PLOTS-Forscher nutzen Teile, die regulr im
Handel erhltlich sind, wie die Teammitglieder Jae-Ok
Lee und Byeongwon Ha erklren. Der
Chemikaliensensor MQ 135 und eine farbige LED
werden von einem Arduino-Microcontroller-Board
gesteuert. All das hngt wiederum samt Akkusatz an
einem iRobot Roomba Staubsauger, den die
Wissenschaftler gebraucht fr 50 Dollar erwarben.
Quelle: [Link]
[Link]
WASP: Drohne zum Entern von WiFi und
GSM-Netzen
Die Flugzeugelektronik basiert auf dem Ardupilot,
einem auf einem Arduino Mega basierendem
Autopilotsystem. Eine HD-Kamera, die an der Drohne
befestigt ist, kann zudem Bilder vom berflogenen
Gebiet aufnehmen.
Quelle: [Link]
[Link]
Wie fngt man an?
Arduino
USB-Kabel
Breadboard
Kabelset fr das Breadboard
Widerstnde
LEDs
Multimeter
Ltstation
Literatur
und ganz wichtig: Zeit!
Bezugsquellen
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
Bcher
Arduino: Praxiseinstieg von Thomas Brhlmann
Praxisbuch Arduino - Mikrocontroller-Programmierung mit
Arduino und Freeduino von Ulli Sommer
Arduino - Physical Computing fr Bastler, Designer und
Geeks von Odendahl, Finn, Wenger
Getting Started with Arduino von Massimo Banzi
Practical Arduino: Cool Projects for Open Source
Hardware von Oxer und Blemings
Face2Face
I
I
Hackerspaces, Fablabs, etc.
Beispiel in Kln: Dingfabrik ([Link])
I
I
I
I
I
offene Werkstatt
komplett ausgerstete Holz/Metall-Werkstatt
3D-Drucker, Lasercutter
umfangreiche Elektronik-und -Werkzeuge
Freitagabends ab 19 Uhr: freies Basteln
Gibt es Alternativen zum Arduino?
Microsoft Gadgeteer, programmierbar in .NET
Netduino, baut ebenfalls auf .NET auf
BeagleBone Black, 1GHz Arm Cortex-A8, HDMI,
Ethernet, 2x6 Pins
Raspberry Pi
I
I
I
I
I
I
Mehr Power: 700 MHz ARM 11 auf dem Level eines
Pentium II
Linux onboard: Raspian, Debian, XBMC
Netzwerk onboard: Ethernet RJ45
Video onboard: HDMI Ausgang mit 1080p Support
Python-Support: Aus Python heraus Pins ansteuern
Coolnessfaktor4 ziemlich hoch. . .
mit Versand knapp 45 Euro
Im Nerd-Umfeld. . .