6
LEDs steuern Eingänge abfragen Spannungen messen Sensoren einlesen Motoren schalten Mikrofon anschließen Fernsehausgabe Töne erzeugen Grundlagen c Hardware & Software einfach erklärt ANFÄNGER- PROJEKTE Batterietester Lärmampel Temperaturanzeige Synthesizer ARDUINO SPECIAL Keine Vorkenntnisse erforderlich! www.make-magazin.de 2/2017 4. Auflage Ihr Weg zum Arduino-Profi

ARDUINO Grundlagen - download.e-bookshelf.de€¦ · ler Edison beispielsweise können Arduino-Programme die Rechenleistung von Atom-Prozessoren nutzen und sogar Funktionen wie WLAN

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

◗ LEDs steuern◗ Eingänge abfragen◗ Spannungen messen◗ Sensoren einlesen

◗ Motoren schalten◗ Mikrofon anschließen◗ Fernsehausgabe◗ Töne erzeugen

Grundlagen

c

Hardware&

Softwareeinfach erklärt

ANFÄNGER-PROJEKTEBatterietester • LärmampelTemperaturanzeige • Synthesizer

ARDUINOSPECIAL

Keine Vorkenntnisse erforderlich!

www.make-magazin.de

2/ 2017

4. Auflage

Ihr Weg zum

Arduino-Profi

2 | Make: Arduino special 2017

CHEAT SHEET | |

Übersicht wichtiger Befehle und Funktionen

Struktur & Programmfluss

Grundsätzliche Sketch-Strukturvoid setup() {

// läuft nur einmal beim Start}void loop() {

// wiederholt sich kontinuierlich}

Kontroll-Strukturenif (x < 5) { ... } else { ... }while (x < 5) { ... }for (int i = 0; i < 10; i++) { ... }break; // Schleife sofort beendencontinue; // weiter mit nächster Iterationswitch (var) {

case 1:...break;

case 2:...break;

default:...

}return x; // x ist der Rückgabewertreturn; // ohne Rückgabewert

Funktionen<ret. type> <name>(<params>) { ... }bspws. int double(int x) {return x*2;}

Operatoren

Allgemein= Zuweisung+ Addieren - Subtrahieren* Multiplizieren / Dividieren% Modulo== gleich != ungleich< kleiner als > größer als<= kleiner oder gleich>= größer oder gleich&& logisch UND || logisch ODER! NICHT

Kombinierte Operatoren++ Variable um 1 erhöhen-- erniedrigen+= wie a = a + b-= wie a = a - b*= wie a = a * b/= wie a = a / b&= wie a = a & b|= wie a = a | b

Bitoperatoren& bitweises UND | bitweises ODER^ bitweises ODER ~ bitweises NICHT<< um 1 Bit nach links schieben>> um 1 Bit nach rechts schieben

Pointer& Referenz: Adresse des Pointers* Dereferenzierer: Ziel des Pointers

Eingebaute Funktionen

Pin Input/OutputDigital I/O - Pins 0-13 A0-A5

pinMode(pin,[INPUT, OUTPUT, INPUT_PULLUP])

int digitalread(pin)digitalWrite(pin, [HIGH, LOW])

Analog In - pins A0-A5int analogRead(pin)analogReference(

[DEFAULT, INTERNAL, EXTERNAL])

PWM Out - pins 3 5 6 9 10 11analogWrite(pin, value)

Advanced I/Otone(pin, Freq_Hz)tone(pin, Freq_Hz, Dauer_ms)noTone(pin)shiftOut(dataPin, clockPin,

[MSBFIRST, LSBFIRST], WERT)unsigned long pulseIn(pin,

[HIGH, LOW])

Zeitunsigned long millis()

// läuft nach 50 Tagen überunsigned long micros()

// läuft nach 70 Minuten überdelay(msec)delayMicroseconds(usec)

Mathe-Funktionenmin(x, y) max(x, y) abs(x)sin(rad) cos(rad) tan(rad)sqrt(x) pow(Basis, Exponent)constrain(x, Minl, Maxl)map(val, fromL, fromH, toL, toH)

ZufallszahlenrandomSeed(seed) // long oder intlong random(max) // 0 bis max-1long random(min, max)

Bits und ByteslowByte(x) highByte(x)bitRead(x, bitn)bitWrite(x, bitn, bit)bitSet(x, bitn)bitClear(x, bitn)bit(bitn) // bitn: 0=LSB 7=MSB

Konvertierung von Datentypenchar(Wert) byte(Wert)int(Wert) word(Wert) long(Wert) float(Wert)//int(Fließkommazahl) wandelt bspws //Fließkommazahl in Integer-Wert um

Externe InterruptsattachInterrupt(interrupt, func,

[LOW, CHANGE, RISING, FALLING])detachInterrupt(interrupt)interrupts()noInterrupts()

Variablen, Arrays und Daten

Datentypenboolean true | falsechar -128 - 127, 'a' '$' etc.unsigned char 0 - 255byte 0 - 255int -32768 - 32767unsigned int 0 - 65535word 0 - 65535long -2147483648 - 2147483647unsigned long 0 - 4294967295float -3.4028e+38 - 3.4028e+38double wie floatvoid kein Rückgabewert/

unbestimmt

Stringschar str1[8] =

{'A','r','d','u','i','n','o','\0'};// manuelle \0 Null-Terminierung

char str2[8] ={'A','r','d','u','i','n','o'};// Compiler fügt Null-Terminierung hinzu

char str3[] = "Arduino";char str4[8] = "Arduino";

Numerische Konstanten123 dezimal0b01111011 binär0173 oktal (Basis 8)0x7B hexadezimal (Basis 16)123U erzwinge unsigned123L erzwinge long123UL erzwinge unsigned long123.0 erzwinge floating point1.23e6 1.23*10^6 = 1230000

Eigenschaften von Variablenstatic Variable bleibt über Aufrufe erhaltenvolatile Variable im RAM statt Register speichernconst Konstante, nur lesbarPROGMEM im Flash ablegen

Arraysint myPins[] = {2, 4, 8, 3, 6};int myInts[6]; // Array mit 6 intsmyInts[0] = 42; // Zuweisung der ersten StellemyInts[6] = 12; // Fehler, da 6. Variable // den 5. Platz belegt

Bibliotheken

Serial – serielle Kommunikation mit PC oder via RX/TX

begin(long Baudrate) // bis 115200end()int available() // Anzahl empfangener Bytesint read() // -1 wenn keine Datenint peek() // Lesen ohne den Puffer

zu löschenflush() // Puffer löschenprint(data) println(data)write(byte) write(char * string)write(byte * data, size)SerialEvent() // wenn Daten fertig

SoftwareSerial.h – serielle Kommunikationüber beliebige Pins

SoftwareSerial(rxPin, txPin)begin(long Baudrate) // bis 115200listen() // immer nur eine serielle isListening() // kann empfangenread, peek, print, println, write

EEPROM.h – Zugriff auf nicht flüchtigen Speicher

byte read(Addr)

write(addr, byte)EEPROM[index]

Servo.h – Servo-Motoren steuernattach(pin, [min_uS, max_uS])write(Winkel) // 0 bis 180writeMicroseconds(uS)

// 1000-2000; 1500 ist Mitteint read() // 0 bis 180bool attached()detach()

Wire.h – I2C-Kommunikationbegin()begin(Addr) // Slave ansprechenrequestFrom(Addr, count)beginTransmission(Addr) // Schritt 1send(byte) // Schritt 2send(char * string)send(byte * data, size)endTransmission() // Schritt 3int available() // verfügbare Bytesbyte receive() // nächstes Byte lesenonReceive(handler)onRequest(handler)

Weitere „Cheat Sheets“

finden Sie unter > overapi.com

Make: Arduino special 2017 | 3

Inhalt2 Befehlsreferenz3 Inhalt4 Arduino-Hardware8 Software

14 DER EINSTIEG15 Es blinkt16 Variables Blinken18 LEDs dimmen20 Blink-Kontrolle

22 FORTSCHRITT23 Analoge Eingänge26 Temperaturen messen29 Motoren steuern31 Großverbraucher

33 Tipps

34 ALLEINSTEHEND35 Lärmampel38 Kontrollstation42 Mäusekino46 Ohrenschmaus

49 Arduino-Varianten50 Ferngesteuert58 Impressum

14 Erste AnfängeBeispiele, die ohne Zusatzhardwaresofort funktionieren.

29 Motoren steuernMit Motoren kommt Bewegung ins Spiel, umetwas anzutreiben oder einen Zeiger zu bewegen.

42 MäusekinoMit einem kleinen Display lässt sich derArduino als mobiles Messgerät einsetzen.

Jeder hat ihn, aber nur wenige wissen es:Mikrocontroller stecken überall drin. Ob

im Auto, DSL-Router, Smartphone oder Tab-let: Mikro prozessoren helfen Dinge automa-tisiert zu schalten, zu steuern, zuregeln und zu kontrollieren. Auchim nicht kommerziellen Bereichlassen sich Mikrocontroller kreativund praktisch einsetzen, etwa umregelmäßig wiederkehrende Auf-gaben erledigen zu lassen, stati-schen Dingen Leben einzuhau-chen oder um etwa die Umweltmit Sensoren zu erfassen und dieDaten anzuzeigen – und das allesohne einen vergleichsweise teu-ren und klobigen PC.

Dank des großen und günsti-gen Angebots an elektronischenKomponenten kann der Privatmann leichtGeräte entwickeln, die es so bislang gar nichtam Markt gibt oder sie passgenau auf seineAnforderungen zuschneidern. Aquarienfut-

terautomat, Gartenbewässerungssteuerung,Luftgütemessgerät, Füllstandsüberwachung,Abstandswarner, Smartwatch, Drohnen, Ro -boter, Lichtsteuerung, Heimautomation:

Je nach Gustoübernimmt derMikrocontrollerverschiedeneAufgaben inHaus, Hof undHobby.

Mit dem Arduino und der auch für Nicht-Informatiker leicht verständlichen Software-entwicklungsumgebung findet der Anfängereinen schnellen Einstieg in die Programmie-rung von Mikrocontrollern. Und obwohl derArduino und seine Software ursprünglich füreher IT-ferne Anwender wie Künstler, Desig-ner und Medienwissenschaftler entwickeltwurde, nutzen ihn mittlerweile auch profes-sionelle Hardware-Entwickler für den Bau vonPrototypen. Durch sein Stecksystem lässt sichder Arduino nämlich ohne Löten spielendleicht und schnell mit weiterer Hardware –sogenannten Shields – erweitern.

Schnell, einfach und günstig statt lang-wierig, kompliziert und teuer: Durch diesesGrundprinzip hat sich eine große Internet-Community um den Arduino geschart, diesich gegenseitig inspiriert und unter dieArme greift. Arduino gilt derzeit als ersteWahl, wenn es um die Umsetzung eigener

Projekte geht. Deshalb bieten zahlreicheHersteller Zusatzprodukte an, die sowohlhardware- als auch softwarekompatibel sind,mitunter aber mehr Rechenleistung liefern.Mit Intels briefmarkengroßem Mikrocontrol-ler Edison beispielsweise können Arduino-Programme die Rechenleistung von Atom-Prozessoren nutzen und sogar Funktionenwie WLAN und Bluetooth nutzen, die der Ori-ginal-Arduino nur durch zusätzliche Shieldsbietet.

Mit diesem Make-Special „Arduino“ wol-len wir einen leichten, kurzweiligen, aberlangfristig fesselnden Einstieg in den Ardu -ino und seine Möglichkeiten bieten. Alles,was Sie für die ersten Schritte benötigen,sind ein USB-Kabel und ein Stück Draht – zurNot tut es auch eine auseinandergebogeneBüroklammer. Zur Programmierung steht diekostenlose Arduino-IDE unter arduino.cc imInternet bereit. Und nun viel Spaß!

Links und Forenmake-magazin.de/x82g

Mikrocontroller stecken hinter der Fassade vielerelektronischer Produkte. Mit dem Arduino kannman spielerisch Geräte nach eigenen Ideen bauen.

von Daniel Bachfeld

EINFÜHRUNG |

Wozu eigentlich?

4 | Make: Arduino special 2017

Retrospiel: Shootduino

Arduino steuert Märklin-Bahn

Tetris

Arducopter

Bestandteile eines Arduino UNO (Revision 3)

Atmel Mikrocontroller

Analog-EingängeSpannungs-versorgungspins

Spannungswandler

Quarzsorgt für einen Takt

von 16 MHz

SPI-/ICSP-Header

USB-UART-WandlerEin zweiter Controllerübernimmt die Umwand- lung von USB auf den seriellen Port.

USB-Anschluss

Reset-Taster

digitale Ein- und Ausgänge

Pin-13-LED

LEDsStatus der seriellen Schnitt-stelle. Beim Senden und Empfangen blinken die LEDs für Tx und Rx auf.

Anschluss für Netzteil

Make: Arduino special 2017 | 5

|

Sanduhr

Geocaching

Arduino-Smartwatch

6 | Make: Arduino special 2017

EINFÜHRUNG |

Der im Arduino eingesetzte Prozessor hatim Inneren viele Funktionen für digitale

Ein- und Ausgabe zu bieten, die er jedochnicht alle gleichzeitig über seine externenBeinchen (Pins) dem Anwender zu Verfü-gung stellen kann. Mit einer ausgefeiltenLogik kann man festlegen, welche interneFunktion mit der Außenwelt in Verbindungsteht. So kann ein Pin mal ein analoger Ein-gang oder Vergleicher, mal ein digitaler Aus-gang, mal ein Generator für Rechtecksignaleoder in Kombination mit weiteren Pins sogarein sogenannter Bus zum Datenaustauschmit anderen elektronischen Systemen sein.

Durch die Flexiblität des verwendetenAtmel-Prozessors lässt sich der Arduino fürverschiedene Aufgaben einsetzen. Es ge-nügt, die Verdrahtung der alten Komponen-ten abzunehmen, neue Komponenten anzu-schließen und einen neuen Sketch zu instal-leren. Hier erklären wir die Bedeutung derPins des Arduino, zuerst die mit Son-derfunktionen:

RX, TX: Das sind dieSende- und Empfangs-pins der seriellenSchnittstelle (UART,Universal Asynchro-nous Receiver Transmit-ter). Bevor der USB-Bus er-funden wurde, waren beispiels-weise Mäuse und Modems per seri-eller Schnittstelle mit dem PCverbunden. Die Übertragungsgeschwindig-keit liegt in der Regel zwischen 1200 und115ˇ200 Baud. Heute spielt der UART nurnoch im Entwicklerbereich eine Rolle.

SCL, SDA: Die zwei Pins gehören zum I2C-Bus (Inter IC Communication), über den derArduino Daten mit Sensoren und andererElektronik austauschen kann. Im Unterschiedzum UART gibt es nur eine Leitung für dieHin- und Rückrichtung (SDA, Serial Data),dank eines einheitlichen Protokolls undeines Taktsignals (SCL, Serial Clock) gibt esaber keine Konflikte auf dem Bus.

SPI: Das Serial Peripheral Interface ist einsynchroner serieller Bus, mit Hin-, Rück- undTaktleitung. Beim Arduino dient er dem Datenaustausch mit Sensoren und Steuer -modulen, aber auch der Programmierungseines Flash-Speichers mit einem speziellenGerät. Standardmäßig arbeitet der SPI aufdem Arduino mit 4 MHz.

Digital (PWM~): Die digitalen Pins lassensich jeweils als Ein- oder Ausgang program-mieren. Arbeiten sie als Eingang, kann mandem Arduino mit einer Spannung von 0 Veine logische 0 und mit 5 V eine logische 1von außen signalisieren, auf die er reagierenkann. Ist ein Pin als Ausgang konfiguriert,kann er per Programm seiner Umwelt oderweiterer Elektronik eine logische 1 oder einelogische 0 signalisieren.

Daneben kann man die Ausgangsspan-nung von 5ˇV auch direkt benutzen, um eineLeuchtdiode (LED) zum Leuchten zu bringenoder ein Relais zu schalten, das wiederum einanderes Gerät mit Batterieversorgung oder

gar mit Netzspannung anschaltet. Zu beach-ten ist, dass ein Ausgang als Dauerlast nureinen Strom von 20 Milliampere liefert, kurz-zeitig auch bis zu 40. Darüber droht ein dau-erhafter Schaden des Pins. Um das zu verhin-dern, muss man den Strom mit einem Wider-stand begrenzen. Wie man das macht, erfah-ren Sie im hinteren Teil des Hefts.

Alternativ können einige der digitalen Pins(zu erkennen an der Tilde ~ vor der Nummerauf dem Board) ein sogenanntes PWM-Signalausgeben. Neben der Leistungssteuerungvon LEDs benötigt man dieses Signal in erster

Linie zur Ansteuerung von Servo-Motoren,wie man sie im Modellbau einsetzt.

Analog In (A0–A5): Da die Welt ebennicht nur schwarz (5ˇV) und weiß (0ˇV) ist, be-nötigt man noch eine Möglichkeit, Spannun-gen irgendwo dazwischen zu messen. EinAnalog-Digital-Wander wandelt, wie beimMikrofon-Eingang am PC, analoge Signale indigitale Werte zwischen 0 und 1023 (10 Bit).Der UNO hat eigentlich nur einen einzigeninternen Wandler, mit einem eingebautenUmschalter kann er jedoch die einzelnen ex-ternen Eingänge auf den Eingang des A/D-Wandlers legen.

Grundsätzlich lassen sich auch alle Ana-log- und Bus-Pins als I/O-Pins festlegen, so-dass der Arduino UNO insgesamt 20 digitaleEin- und Ausgänge befehligen kann.

5ˇV/3,3ˇV: Die beiden Pins dienen derSpannungsversorgung von Erweiterungs-

shields oder anderen elektronischenKomponenten.

VIn: Hier liegt die Span-nung an, mit der der Ardu -ino bei Verwendung einesexternen Netzteils versorgtwird. Shields mit Motorenund anderen Verbrauchern

mit höherem Spannungsbe-darf benötigen diesen Pin.

GND: Das ist der gemeinsame Be-zugspunkt beim Zusammenschalten vonKomponenten mit dem Arduino. Man kannihn sich vereinfacht wie den Minuspol einerBatterie vorstellen.

AREF: Die analogen Eingänge nehmendie Digitalisierung in Bezug auf eine be-stimmte Spannung vor, standardmäßig 5ˇV.Man kann aber auch durch eine externeSpannungs referenz einen anderen Wert vor-geben. Liefert beispielsweise ein Sensor nureine maximale Spannung von 1ˇV, würdeman bei AREFˇ=ˇ5ˇV nur ein Fünftel des Wer-tebereichs (0–205) nutzen. Sinnvoller wäre,AREF mit einer Referenzspannung von 1ˇV zuspeisen.

IOREF: Damit signalisiert der Arduinoeinem Shield, mit welchem Spannungspegeler arbeitet. In der Regel spielt dieser Pinkeine Rolle.

Reset: Neben dem manuellen Druck aufden Resetkopf kann auch eine externeSchaltung einen Neustart des Arduino aus-lösen. —dab

Die PinsEine Übersicht über die Funktion der Arduino-Pins

Auf Prototypingshields lassen sich alle Pins des Arduino für eigene Elektronik anzapfen.