Arduino

Arduino

Mikrocontroller einsetzen und programmieren Das vorliegende Manuskript folgt keinem Unterrichtsgang; es dient als Nachschlagewerk für Arbeiten an Pro...

957KB Sizes 0 Downloads 3 Views

Recommend Documents

Arduino Programming Notebook - Arduino Playground
best used as a secondary source alongside other websites, books, ... The basic structure of the Arduino programming lang

Arduino Attiny Shield 1.13b - Arduino-Germany
Gartenbahn und Minipuppen. [email protected] Arduino Attiny Shield 1.13b. Attiny-Shield. Upload Arduino

Schematic - Arduino
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 1. 2. PB5(SCK). 17. PB7(XTAL2/TOSC2). 8. P

Arduino - Wikimedia Commons
Jul 28, 2017 - Massimo Banzi (http://twit.tv/show/triangulation/110/) interviewed on the TV show Triangulation on the. T

Arduino - Science Centre
Mar 17, 2014 - 23 Arduino – DIY Datalogging. Contents ... 36 Computer-aided design .... computers, cellphones, etc) th

intel intel intel - Arduino
Jan 25, 2016 - This Intel® Curie™ module design document is licensed by Intel under the terms of the Creative Commons

Arduino Einführung - MakerSpace
Analog-Wandler verfügt, bietet sich die sogenannte „Pulsweitenmodulation“ an. Ein normaler digitaler Ausgang wird d

Arduino Cookbook - RealTechSupport
1.5 Creating and Saving a Sketch. 13. 1.6 Using Arduino. 15. 2. Making the Sketch Do Your Bidding .... 6.17 Getting Inpu

Arduino verstehen und anwenden - ELV
01.01.2017 - gen, die sich im Halbschlaf ja besonders gut einprägen sollen. Außerdem verfügen kommerzielle Radiowecke

Near field communication mit Arduino
12 (NFC Forum, 2011), S.1; (Jovanovic & Muñoz Organero, 2011), S.3 .... Galaxy Nexus und Galaxy Nexus S von Samsung, Sa

Mikrocontroller einsetzen und programmieren

Das vorliegende Manuskript folgt keinem Unterrichtsgang; es dient als Nachschlagewerk für Arbeiten an Projekten, die Arduino-Mikrocontroller verwenden. Ausführlichere Hinweise findet man auch unter arduino.cc 1 Software Arduino........................................................................................... 2 1.1 Start .................................................................................................... 2 1.2 Dateisystem .......................................................................................... 3 1.3 Grundstruktur von Programmen ............................................................... 4 2 Hardware Arduino.......................................................................................... 6 2.1 Datenblatt Duemilanove (2009) und UNO (2010)........................................ 6 2.2 Datenblatt Nano..................................................................................... 7 3 Datenaustausch und Kommunikation ................................................................ 8 3.1 Datenanzeige am PC-Bildschirm ............................................................... 8 4 Aktoren und ihre Steuerung ............................................................................ 9 4.1 Software Ansteuerung ............................................................................ 9 4.2 Tonausgabe mit dem Lautsprecher ..........................................................10 4.3 Verstärkung des Ausgangssignals (MOSFET) .............................................10 4.4 Motorsteuerung (L293D) ........................................................................11 5 Sensoren und ihre Abfrage............................................................................ 12 5.1 Software Ansteuerung ...........................................................................12 5.2 Taster (digitaler Eingang) .......................................................................13 5.3 Passiv - Infrarot – Sensor PIR (digitaler Eingang) ......................................14 5.4 LDR und NTC (analoger Eingang) ............................................................15 5.5 Reflexoptokoppler CNY70 (analoger Eingang) ............................................16 5.6 Abstandssensoren PSD (analoger Eingang) ...............................................17 6 Abfragen und logische Strukturen .................................................................. 18 6.1 Verzweigungen .....................................................................................18 6.2 Schleifen..............................................................................................19 7 Unterprogramme ......................................................................................... 20 7.1 Ohne Datenübergabe.............................................................................20 7.2 Übergabe von Werten in die Funktion.......................................................20 7.3 Übergabe von Werten aus einer Funktion..................................................21 7.4 Übergabe von Werten in beide Richtungen ................................................21 8 Anhang ...................................................................................................... 22 8.1 Datentypen ..........................................................................................22 8.2 Operatoren ..........................................................................................22 8.3 Logische Bedingungen ...........................................................................23 8.4 Verknüpfungen zwischen Bedingungen .....................................................23 8.5 Programmbibliotheken ...........................................................................23 8.6 Kabel und ihre Farben............................................................................23

Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren

1 Software Arduino 1.1

Start

Download Die Software kann unter folgendem LINK herunter geladen werden: http://arduino.cc/en/Main/Software

Installation Die Dateien und Verzeichnisse werden nach c:\programme\arduino entpackt. Das Verzeichnis muss evtl. neu erstellt werden Beim erstmaligen Anschließen des Boards öffnet sich evtl. der Assistent zur Hardware. Die Installation erfolgt jedoch automatisch. Ab Arduino UNO sind keine Treiber mehr erforderlich. Falls dies nicht der Fall sein sollte: Im Explorer den Pfad mit dem Treiber „FT 232R USB UART“ identifizieren Bei der Installation folgendes auswählen: Windows Treiber: >> diesmal nicht verwenden Installieren von bekanntem Pfad >> Oben identifizierten Pfad anwählen: FT 232R USB UART >> Fertig stellen

Erfolgskontrolle Die grüne LED muss leuchten. Das Programm Arduino.exe kann gestartet werden.

Folgende Einstellungen vornehmen • Im Reiter Tools >> Board >> den Typ des Boards auswählen • Im Reiter Tools >> Serial port >>den Port auswählen (Ein Haken muss sichtbar sein; ggf in der Systemsteuerung >> System >> Hardware >> Gerätemanager unter Ports die Nummer des benutzten COM Ports suchen) Testprogramm auswählen: File >> Sketchbook >> examples >> digital >> blink Das Programm „blink“ wird auf das Board übertragen und startet sofort. Die SMD-LED auf dem Board blinkt.

Seite 2 / 23

Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren

1.2

Dateisystem

Hinweise zum Dateisystem Die Programme werden im „sketchbook“ standardmäßig im Unterordner „Eigene Dateien>> Arduino“ abgelegt. Beim Arbeiten im Schulnetz liegt es im persönlichen Homeverzeichnis. Für jedes Programm wird ein Unterverzeichnis mit demselben Namen angelegt. Wird das Programm „von Hand“ umbenannt, muss der Ordner gleich umbenannt werden. Die Dateinamen dürfen keine Umlaute, Sonderzeichen oder Leerzeichen enthalten. In diesem Ordner wird ein Unterordner „applets“ angelegt. Dieser enthält temporäre Dateien die zum Übertragen aufs Board benötigt werden. Dieser kann ohne Schaden gelöscht werden. Zur Weitergabe des Programmes an andere Rechner muss nur die pde – Datei kopiert werden

Neue Datei erstellen: oder eine Vorlage öffnen: (z.B. FSG_Vorlage) erstmaliges speichern; >> File >> save as

Compilieren Vor dem Übertragen des Programmes auf das Boards wird ein maschinenlesbarer Programmcode erzeugt. Um die Fehlersuche zu vereinfachen empfiehlt es sich in regelmäßigen Abständen die Datei auf Tipp- oder Syntaxfehler zu kontrollieren. Enthält der Text Fehler, so werden diese bunt unterlegt und im unteren Fenster Hinweise zur Behebung gegeben.

Übertragen Mit diesem Button wird das Programm compiliert und der maschinenlesbare Code aufs Board übertragen. Beim Start des Übertragungsvorgangs leuchtet die gelbe SMD-LED auf; während der Datenübertragung blinken die rote und die grüne SMD-LED am Board. Letzteres ist ein Kennzeichen dafür, dass über die Anschlüsse D0 und D1 Daten transportiert werden.

Version vom 11.11.2010

Seite 3 / 23

Mikrocontroller einsetzen und programmieren

1.3

Grundstruktur von Programmen

Nicht übersetzte Texte des Quelltextes (Kommentare oder Notizen des Programmierers) beginnen mit // einzeilige Kommentartexte längere Kommentarblöcke, die über mehrere Zeilen gehen, beginnen mit /* und werden in jeder neuen Zeile mit * weitergeführt. Der Kommentar endet mit */

Editor Der Editor “erkennt“ bekannte Worte und zeigt sie rotbraun an. Der Quelltext beginnt mit der Definition der verwendeten Variablen Großund Kleinschreibung beachten

Jedes Programm enthält einen Kopf, der den Namen, das Ziel oder den Zweck des Programms beschreibt und den Namen des Autors sowie das Bearbeitungsdatum enthält. Innerhalb des Programms werden Strukturen durch geschweifte Klammern verbunden. Dabei empfiehlt es sich die zu einander gehörigen Klammern exakt untereinander zu schreiben und die Texte entsprechend einzurücken. Jede Anweisung wird mit einem Strichpunkt beendet. Dahinter kann noch ein Kommentar folgen. Dieser wird wieder durch // abgetrennt. Seite 4 / 23

Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren

Definitionsbereich Hier müssen alle verwendeten Variablen definiert werden. Ihnen kann auch ein Wert zugewiesen werden. Die möglichen Datentypen sind in 6.1 dargestellt. Beispiele: int Katze; int rot; int gelb,blau; int Rot = 5;

erzeugt eine Variable, die Katze genannt wird. Dieser Variablen kann eine ganze Zahl zugewiesen werden. (keine Dezimalzahl! engl. integer für ganze Zahl) erzeugt die Variable rot und weist ihr den Typ „Ganzzahl“ zu. erzeugt die Variablen gelb und blau weist ihnen den Typ „Ganzzahl“ zu. erzeugt die Variable Rot, weist ihr den Typ „Ganzzahl“ zu und belegt sie dem 5. Hier wird eine neue Variable definiert die nicht mit rot verwechselt werden darf.

Initialisierung (Setup): Dieser Programmteil wird einmalig ausgeführt. Hier sollten alle Befehle stehen, die am Beginn einmal ausgeführt werden müssen. Hierzu gehören z.B. die Definition der Einoder Ausgänge, Übertragungsgeschwindigkeit zwischen Board und PC usw. void setup() { Anweisung 1; Anweisung 2; }

Unterprogramme können vom Hauptprogramm aufgerufen werden, ihre Eigenschaften werden in Kap 5 dargestellt.

Hauptprogramm wird nach Übertragen und Durchlaufen der Initialisierung immer wieder ausgeführt. Im Hauptprogramm können Unterprogramme aufgerufen werden. void loop() { Anweisung 1; Anweisung 2; }

Version vom 11.11.2010

Seite 5 / 23

Mikrocontroller einsetzen und programmieren

2 Hardware Arduino

D0 / RX

D1 /TX

D2

D3/ PWM

D4

D5/ PWM

D6/ PWM

D7

D8

D9/ PWM

D10/ PWM

D11/ PWM

D12

D13/LED

GND

Datenblatt Duemilanove (2009) und UNO (2010)

AREF

2.1

USB

I2C - Bus

A5

A4

A3

A2

A1

A0

Vin

GND

GND

5V Vcc

3,3V

Reset

Power

Alle Eingänge sind nur auf Potenzialdifferenzen bzgl. GND empfindlich, können also insbesondere keine Ströme messen. D0 … D13 Digital Ein- und Ausgänge o Jeder Pin kann bis zu 40mA Strom fließen lassen. o Jeder Pin ist über einen internen „pull-up Widerstand“ von 20-50 kΩ mit GND und mit 5V verbunden. o D0 und D1 (RX und TX) werden auch zur Datenübertragung zum PC genutzt. Die Signale werden durch LED angezeigt. Während der Programmübertragung auf das Board sollten diese nicht beschaltet sein. Ihr Potenzial wird durch die rote bzw. SMD-LED angezeigt. o D3,D5,D6,D9,D10,D11 sind auch als analoge Ausgänge mit 8 bit nutzbar, also 0 … 255 o D13 ist mit der gelben SMD-LED verbunden. A0 … A5 analoge Eingänge mit 10bit also 0 … 1023 GND Potenzialnullpunkt Reset Wird der Reset-Pin geerdet, so erfolgt ein Neustart des Programms 5V Nutzung mit PC: Ausgang Betrieb ohne PC: Eingang 3,3V 3,3V Ausgang VIN Spannungsversorgung für die Energieversorgung der Ausgänge 6 bis 12V Aref Vergleichspotenzial für analoge Eingänge RESET Button zum Reset des Controllers I2C - Bus Die nach oben stehenden PINs sind für die Verbindung zu weiteren Boards mit einem Datenbus vorgesehen Power Externe Versorgung 6 - 12 V innen PLUS Seite 6 / 23 Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren 2.2

Datenblatt Nano I2C Bus

D1 /TX

VIN

D0 / RX

GND

Reset

Reset

GND

+5V Vcc

D2

A0 / D14

D3 / PWM

A1 / D15

D4

A2 / D15

D5 / PWM

A3 / D17

D6 / PWM

A4 / D18

D7

A5 / D19

D8

A6 / D20

D9 / PWM

A7 / D21

D10 / PWM

Aref

D11 / PWM

3,3V

D12

D13 / LED

Alle Eingänge sind nur auf Potenzialdifferenzen bzgl. GND empfindlich, können also insbesondere keine Ströme messen. D0 … D13 Digital Ein- und Ausgänge o Jeder Pin kann bis zu 40mA Strom fließen lassen. o Jeder Pin ist über einen internen „pull-up Widerstand“ von 20-50 kΩ mit GND und mit 5V verbunden. o D0 und D1 (RX und TX) werden auch zur Datenübertragung zum PC genutzt. Die Signale werden durch LED angezeigt. Während der Programmübertragung auf das Board sollten diese nicht beschaltet sein. Ihr Potenzial wird durch die rote bzw. SMD-LED angezeigt. o D3,D5,D6,D9,D10,D11 sind auch als analoge Ausgänge mit 8 bit nutzbar also 0 ... 255 o D13 ist mit der gelben SMD-LED verbunden. A0 … A7 analoge Eingänge mit 10 bit von 0 bis 1023 (sind auch als Digitalausgang 14-21 schaltbar) GND Potenzialnullpunkt Reset Wird der Reset-Pin geerdet, so erfolgt ein Neustart des Programms 5V Nutzung mit PC: Ausgang Betrieb ohne PC: Eingang 3,3V 3,3V Ausgang VIN Spannungsversorgung für die Energieversorgung der Ausgänge 7 bis 12V Aref Vergleichspotenzial für analoge Eingänge RESET Button zum Reset des Controllers I2C - Bus Die nach oben stehenden PINs sind für die Verbindung zu weiteren Boards mit einem Datenbus vorgesehen

Version vom 11.11.2010

Seite 7 / 23

Mikrocontroller einsetzen und programmieren

3 Datenaustausch und Kommunikation 3.1

Datenanzeige am PC-Bildschirm

Um die Daten auf dem Monitor sehen zu können, muss man das Icon für den seriellen Monitor (Serial Monitor) anklicken. Es öffnet sich ein neues Fenster unter der Bezeichnung des aktuellen Ports. In diesem werden die Daten angezeigt.

Initialisierung Serial.begin(9600); legt die Datenstromstärke in der Einheit baud fest. Definition: Bei der Datenstromstärke 1 baud wird 1 Symbol pro Sekunde übertragen. Im Falle einer USB-Verbindung, die nur die Werte HIGH (5V) und LOW (0V) kennt, stimmt die baud-Rate mit der Zahl der pro Sekunde übertragenen Informationen (bit pro Sekunde) überein. Typische Baudraten sind folgende Werte 9600, 14400, 19200, 28800, 38400, 57600 und 115200.

Aufruf Serial.print(„….“); Ausgabe ohne Zeilenumbruch Die Anführungszeichen in der Klammer umschließen den Text der ausgegeben werden soll. Für die Ausgabe einer Variablen sind sie nicht notwendig. Serial.println( „…..“);

Ausgabe mit Zeilenumbruch

Beispiel für einen Programmausschnitt /* Hallo Marbach! * dieser Text soll auf dem Bildschirm des PCs angezeigt werden */ void setup() //läuft einmal { Serial.begin(9600); // die Datenstromstärke betrage 9600baud Serial.println("Hallo Marbach!"); //“drucke“ Hallo Marbach! } void loop() { }

//mach nichts weiteres!

Noch nicht dargestellt sind die Anweisungen: read(); flush (); available();

Seite 8 / 23

Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren

4 Aktoren und ihre Steuerung 4.1

Software Ansteuerung

Das Board besitzt mehrere Ausgänge mit denen Aktoren betreiben werden können. Jedem dieser PINs muss die Eigenschaft Eingang oder Ausgang zugeordnet werden. Es empfiehlt sich den PINS Variablen zuzuorden: int Ausgang01;

weist der Variablen „Ausgang01“

den Typ Integer zu

int Ausgang02=7;

weist der Variablen „Ausgang02“ den Typ Integer zu und legt den Zahlenwert zusätzlich auf 7 fest.

Im Initialisierungsbereich muss festgelegt werden ob die Anschlüsse als Aus- oder Eingang funktionieren sollen. Ohne diese Festlegung sind sie standardmässig als Eingang festgelegt. Mit der Anweisung pinMode (Ausgang02, OUTPUT); wird der pin, der mit der Variablen Ausgang02 angesprochen als Ausgang geschaltet (In unserem Fall also der oben definierte pin 7).

Digitale Ausgänge Digitale Ausgänge können entweder auf Potenzial 5V (HIGH) oder 0V (LOW) geschaltet werden. Die entsprechenden Befehle lauten: digitalWrite (Ausgang01, HIGH); digitalWrite (Ausgang01, LOW);

Analoge Ausgänge Die Pins D3,D5,D6,D9,D10,D11 sind auch als analoge Ausgänge schaltbar. Sie werden mit dem Befehl analogWrite (Ausgang01, xx); angesprochen. Der Zahlenwert xx darf zwischen 0 und 255 liegen. Er wird mit der PWM (Pulsweitenmodulation) in einen Wert zwischen 0V und 5V übersetzt: Das Potential wechselt mit einer hohen Frequenz und unterschiedlichen Ein- und Ausschaltdauern zwischen 0V und 5V. Der Mittelwert (Das „Integral“) über die Zeit ergibt einen mittleren Leistungswert am Ausgang. Der Zahlenwert xx kann nicht linear in eine Spannung übersetzt werden – es liegt ein logarithmischer Zusammenhang vor.

Version vom 11.11.2010

Seite 9 / 23

Mikrocontroller einsetzen und programmieren

4.2

Tonausgabe mit dem Lautsprecher

Um Töne zu erzeugen wird der Lautsprecher periodisch ein- und wieder ausgeschaltet. Die Tonhöhe wird durch die Frequenz bestimmt: Ein Ton der Frequenz 500Hz wird also so erzeugt der Lautsprecher wird für 1 ms abwechselnd ein- und wieder ausgeschaltet: Definitionsbereich int LS=10; // Lautsprecher zwischen PIN 10 und GND anschliessen Setupbereich pinMode(LS, OUTPUT); Hauptprogramm digitalWrite(LS, HIGH); delay(1); digitalWrite(LS, LOW); delay(1); Für höhere Frequenzen wird die Anweisung delayMicroseconds (xx); chend im Microsekundentakt schaltet, verwendet.

4.3

die entspre-

Verstärkung des Ausgangssignals (MOSFET)

Der Ausgang (grün) wird ans Gate eines MOSFET gelegt. GND und der Minuspol der Fremdspannungsquelle (schwarz) werden mit Source verbunden. Der Aktor (blau / weiss) liegt zwischen Drain und dem Pluspol der Fremdspannungsquelle (orange). Die Leistung ist jetzt nur noch durch den minimalen Verlust im Transistor begrenzt. Durch Anschrauben eines Kühlbleches kann die Stromstärke bis auf 20A oder eine Leistung von 70W erhöht werden.

Seite 10 / 23

Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren 4.4

Motorsteuerung (L293D)

Zur Steuerung von Motoren werden zwei Informationen benötigt: Drehrichtung und Drehzahl. Diese Infos werden an einen IC (integrated circuit) vom Typ L293D weitergegeben. Dieser setzt die Informationen um bewirkt die Leistungsteuerung der Motoren. Dabei werden auch alle sicherheitsrelevanten Rückwirkung auf den Mikrocontroller unterbunden: die Spannungen und Ströme am Motor sind vom Mikrocontroller getrennt und Spannungsimpulse durch Induktionsvorgänge werden abgeblockt. Im IC sind mehrere Transistoren und Dioden verbaut. Datenblatt Enable 1 (PWM) 1 16 Selbstversorgung 5V Polung 1 2 15 Polung 2 Motor 1 3 14 Motor 2 GND 4 13 GND GND 5 12 GND Motor 1 6 11 Motor 2 Polung 1 7 10 Polung 2 Energie für Motoren 8 9 Enable 2 (PWM) Der Chip kann zwei Motoren unabhängig ansteuern. o Er benötigt eine eigene Energieversorgung (5V) an Pin 16. o Die Energieversorgung für beide Motoren wird an PIN 8 angelegt (4,5-36V). o Motorströme: Schaltstrom 1,2 A peak pro Kanal, Dauerstrom 600 mA pro Kanal, Integrierter Übertemperaturschutz o Alle vier GND Anschlüsse werden untereinander und mit dem Nullpotential verbunden – auch wenn nur ein Motor angeschlossen wird. Aktoren Motor1 wird an die Ausgänge Pin 3 und Pin 6 angeschlossen (Motor 2 an Pin 11 und Pin 14) Eingänge für Motor 1: Drehrichtung: Pin2 und Pin7 Für den „Rechtslauf“ muss Pin 2 HIGH und Pin 7 LOW sein, die umgekehrte Drehrichtung wird durch Pin 2 LOW und Pin 7 HIGH ausgelöst. Bei anderen Kombinationen liegt am Ausgang keine Spannung an. Drehzahlsteuerung: Pin 1 Die Drehzahl wird über eine Pulsweitenmodulation (PWM) eingestellt. Zeitverlauf bei dem zu 50% der Zeit HIGH ausgegeben wird.

Zeitverlauf bei dem zu 25% der Zeit HIGH ausgegeben wird.

Die mittlere Motorleistung beträgt 50% der Die mittlere Motorleistung beträgt 25% der Maximalleistung Maximalleistung Die mittlere Motorleistung bestimmt die Drehzahl des Motors. Mathematisch kann dies mit dem Begriff des Integrals beschrieben werden.

Version vom 11.11.2010

Seite 11 / 23

Mikrocontroller einsetzen und programmieren

5 Sensoren und ihre Abfrage 5.1

Software Ansteuerung

Das Board besitzt mehrere Eingänge an denen Sensoren angeschlossen werden können. Es empfiehlt sich den PINS Variablen zuzuordnen: int Sensor01;

weist der Variablen „Sensor01“

den Typ Integer zu

int Sensor02=7;

weist der Variablen „Sensor02“ den Typ Integer zu und legt den Zahlenwert zusätzlich auf 7 fest.

Digitale Eingänge Digitale Eingänge fragen das Potenzial ab und schalten wenn es höher als etwa 2 V ist auf HIGH („Ein“, „wahr“ ,1) sonst auf LOW („Aus“, „falsch“, 0). Wenn ein Anschluss nicht belegt ist schwankt der Wert beliebig zwischen den beiden Werten und bringt unbrauchbare Ergebnisse. Die folgende Anweisung fragt Sensor01 ab und lässt die eingebaute SMD LED aufleuchten, wenn das Signal auf HIGH steht: if (digitalRead(Sensor01)== true) digitalWrite(13,HIGH);

Analoge Eingänge AD Wandler Digitalsystem und Bandbreite Die Analogeingänge fragen das Potenzial ab und setzen es in in Zahlenwerte zwischen 0 und 1023 um. Man spricht hier von einer Bandbreite von 10bit, denn es liegen 1024 = 210 Möglichkeiten vor, die mit 10 Elementaren Informationen übermittelt werden können Die folgende Anweisung fragt Sensor02 ab und lässt die eingebaute SMD LED aufleuchten, wenn der übersetzte Wert unter 200 liegt. if (analogRead(Sensor02) < 200) digitalWrite(13,HIGH);

Seite 12 / 23

Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren

5.2

Taster (digitaler Eingang)

Technische Realisierung eines digitalen Eingangs: Durch einen Schalter wird der Eingang über einen Sicherungswiderstand (100Ω) zwischen HIGH und LOW umgeschaltet:

Rückgabewerte der Funktion digitalRead(Sensor): 5V TRUE GND FALSE Kein Anschluss schnell variierende und sinnlose Werte Programmzeilen für den Schalter, das gelbe Kabel ist mit D3 verbunden pinMode(13,OUTPUT); // (im Setupbereich) digitalWrite(13,digitalRead(3)); // (im Loopbereich) Die Information wird über die Anweisung digitalRead von Pin 3 eingelesen und über digitalWrite an Pin 13 ausgegeben. Immer wenn der Taster gedrückt ist, leuchtet die SMD Leuchtdiode auf dem Board

Version vom 11.11.2010

Seite 13 / 23

Mikrocontroller einsetzen und programmieren

5.3

Passiv - Infrarot – Sensor PIR (digitaler Eingang)

Passiv-Infrarot-Bewegungsmelder reagieren beim Eintritt einer Person in das Erfassungsfeld des Sensors. Auslöser ist die Änderung der Infrarotstrahlung. Zum Prinzip: Der Bereich der IRStrahlen im elektromagnetischen Spektrum liegt oberhalb des sichtbaren Licht ab 800nm. Die IR-Strahlung des Menschen hat ihr Maximum zwischen 9000nm und 10000nm. Die Wellenlänge der IR-Strahlung ist abhängig von der Temperatur des strahlenden Körpers. Die IR-Strahlung verhält sich ähnlich wie sichtbares Licht. Sie kann reflektiert und durch geeignete Linsen gebündelt werden. Basis eines PIR-Detektors sind Lithium-Tantalatkristalle. Diese Kristalle erzeugen bei Änderung der einfallenden Strahlung, die durch eine Temperaturänderung ausgelöst wird, eine elektrische Spannung. Die von den Kristallen abgegebene Spannung liegt im Bereich von einigen μV und ist von folgenden Bedingungen abhängig: • Intensität der Strahlungsquelle (Temperatur und Größe) • Umgebungsmedium (Temperatur, unterschiedliche Luftfeuchtigkeit) • Entfernung zwischen Strahlungsquelle und PIR-Sensor • Bewegungsgeschwindigkeit und Bewegungsrichtung der Strahlungsquelle • Empfindlichkeit des PIR-Elementes Zur Unterdrückung von Einflüssen aus der Umgebung, sind in jedem PIR-Sensor 2 Kristalle antiparallel geschaltet. Einer der Kristalle gibt bei Auftreffen von IR-Strahlung einen positiven, der andere einen negativen Spannungsimpuls ab. Änderungen der Strahlung, die gleichzeitig und mit gleicher Intensität auf beide Kristalle einwirken, lösen so keinen Erfassungsvorgang aus. Dadurch ist ein Auslösen bei Intensitätsänderungen der Strahlung durch die Umgebung weitgehend ausgeschlossen. Anders verhält es sich bei schnellen Bewegungen. Die Lithiumtantalat-Kristalle geben, entsprechend der Bewegung und der dadurch hervorgerufenen Strahlungsänderung im Erfassungsfeld, ihre Impulse zeitversetzt ab. Dieses elektrische Ausgangssignal wird verstärkt und führt zu einem Wechsel der Ausgangsspannung von 0V auf 5V. Wird ein PIR wird an einen digitalen Eingang angeschlossen, so wechselt bei schnellen räumlichen Änderungen der IR Strahlung wechselt das Signal von LOW auf HIGH. Daten des PIR Öffnungskegel

Seite 14 / 23

Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren 5.4

LDR und NTC (analoger Eingang)

Ein LDR ist ein leichtempfindliches Halbleiterbauteil. Bei Energiezufuhr durch Licht steigt die Zahl der frei beweglichen Ladungsträger und der Widerstand sinkt.

Ein NTC ist ein temperaturempfindliches Halbleiterbauteil. Bei Energiezufuhr durch Entropie steigt die Zahl der frei beweglichen Ladungsträger und der Widerstand sinkt.

unterschiedliche Bauformen

NTC je mit Aufdruck des Widerstandswerts bei 25°C Ein analoger Eingang kann durch einen Spannungsteiler aus Sensor mit veränderlichem Widerstand und Festwiderstand beschaltet werden. Der Mittelabgriff des Spannungsteilers wird mit dem Sensoreingang verbunden. Werden Sensor und Festwiderstand vertauscht, ändert sich nur die Laufrichtung der Ergebnisse bei Veränderung des Messparameters. Kann der Festwiderstand nicht berechnet werden, muss dieser durch ein POTI ersetzt werden. Beispiel für einen Programmausschnitt. Am PC-Bildschirm werden drei Rückgabewerte des Anschlusses an AnalogPin 0 pro Sekunde angezeigt: void setup() { Serial.begin(9600); } void loop() { Serial.println(analogRead(0)); delay(333); } Gleichläufige Steuerung: der Ausgabewert steigt mit zunehmender Helligkeit

Version vom 11.11.2010

Gegenläufige Steuerung: der Ausgabewert sinkt mit zunehmender Helligkeit

Seite 15 / 23

Mikrocontroller einsetzen und programmieren

5.5

Reflexoptokoppler CNY70 (analoger Eingang)

Reflexoptokoppler können die Helligkeit von Flächen detektieren. Sie werden z.B. als Liniensensor, Radencoder, Abgrunddetektor oder Lichtschranke eingesetzt. In einem Reflexoptokoppler sind eine IR LED als Lichtquelle und ein Fototransistor als Empfänger in einem gemeinsamen Gehäuse verbaut. Der Fototransistor empfängt die von der zu untersuchenden Oberfläche gestreute IR-Strahlung und gibt ein Signal an den Mikrocontroller. Im Betrieb sollte die Entfernung zur streuenden Fläche zwischen 1mm und 4mm betragen. Allerdings ist der Sensor empfindlich gegen Streulicht, da das Licht der IR-LED nicht moduliert ist. Der Strom durch den Fototransistor ist von der eingehenden Strahlungsintensität anhängig. Die Basis des Transistors wird durch den Einfall des IR-Lichtes besser leitend. Er reagiert also wie ein von der einfallenden IR-Strahlung abhängiger Widerstand. Im Originalbauteil sind beide Bauteile galvanisch getrennt. Für unsere Zwecke ist der CNY70 auf eine Miniplatine gelötet und die Komponenten bereits fertig verschaltet: Mit einem Festwiderstand wird er zu einem Spannungsteiler kombiniert. Der Mittelabgriff wird an den analogen Eingang des Mikrocontrollers geschaltet LINK http://www.strippenstrolch.de/downloads/cny_70.pdf. Kenndaten Infrarot-LED: Fototransistor:

maximaler Strom 50mA, maximale Sperrspannung 5V. maximaler Kollektorstrom 50mA, maximale Kollektor-EmitterSpannung 32V, maximale Emitter-Kollektor-Spannung 7V.

Beschaltung der Miniplatine

Mit der Datei CNY70.cxp kann sein Verhalten mit der Software Crocclips simuliert werden. Seite 16 / 23 Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren 5.6

Abstandssensoren PSD (analoger Eingang)

GP2 D120 (Messbereich 4 bis 30cm)

GP2 Y0A02 (Messbereich 20 bis 150cm)

Im Sensor ist ein IR-Sender und Empfänger sowie eine Signalverarbeitungseinheit eingebaut. Der Sender emittiert einen modulierten Infrarot-Strahl. Der von einem Hindernis reflektiert den Strahl trifft je nach Entfernung auf unterschiedliche Stellen des Empfängers (Position Sensitive Device, PSD). Eine Signalverarbeitungseinheit setzt den Auftreffpunkt in einen analogen Spannungswert um. Das Messergebnis ist nahezu unabhängig von der Farbe und Helligkeit des gemessenen Objektes. Der Sensorausgang kann direkt an einen analogen Eingang des Mikrocontrollers angeschlossen werden. Prinzipieller Aufbau

a S ( D)= + b D Die Konstanten a und b hängen vom Sensor ab und müssen messtechnisch ermittelt werden.

Version vom 11.11.2010

Analyse des Abstandsensors 700 600 500 Zahlenwert S

Die Spannung wird vom Mikrocontroller in einen Zahlenwert S zwischen 0 und 1023 umgewandelt. Als gute Näherung für die Berechnung dieses Ausgabewertes aus dem Abstand D eignet sich eine Funktion vom Typ

400 300 200 100 0 0

5

10

15

20

25

30

Abstand D in cm

Seite 17 / 23

Mikrocontroller einsetzen und programmieren

6 Abfragen und logische Strukturen Logische Strukturen lassen sich vorteilhaft mit Struktogrammen darstellen. Diese sind von der speziellen Programmiersprache unabhängig und ermöglichen eine grafische Darstellung des Programms.

6.1

Verzweigungen

If Struktogramm

if (Bedingung) Anweisung1;

Ja / Nein Frage Logische Bedingung Ja Nein Anweisungen Anweisungen Verzweigung Wenn Bedingung = true ist, dann wird Anweisung1 ausgeführt, andernfalls Anweisung2

else Anweisung2; Beispiel für einen Programmausschnitt, in dem „rot“ eingeschaltet wird, wenn der Wert der Variable Sensor true (wahr. 1, …) ist if (digitalRead(Sensor)==true) digitalWrite(rot,HIGH); else digitalWrite(rot,LOW);

Switch – Case Struktogramm Frage mit mehreren Antwortmöglichkeiten; diese werden durch den Wert einer Variablen dargestellt Wert1 Wert2 Wert3 … Alle anderen Fälle Anweisungen Anweisungen Anweisungen Anweisungen

switch (Variable) { case (Wert1): Anweisung1; break; case (Wert2): Anweisung2; break;

Mehrfache Verzweigung Verzweigung in Abhängigkeit vom Wert einer Variable: Wenn sie den Wert1 annimmt wird Anweisung1 ausgeführt (bis break) Wenn sie den Wert2 annimmt wird Anweisung2 ausgeführt (bis break) Andernfalls Anweisungx

default: Anweisungx; break; } Seite 18 / 23

Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren 6.2

Schleifen

For Struktogramm

Wiederhole Solange Zähler von… bis …. läuft

Anweisungen Anweisungen Anweisungen

Zählschleifen for (Startwert; Laufbedingung; Veränderung) Der Zähler wird vom Startwert so lange { erhöht, wie die Laufbedingung erfüllt Anweisung1; ist. Bei jedem Zählschritt wird der AnAnweisung2; weisungsteil ausgeführt. } Beispiel für einen Programmausschnitt, in dem die Anweisungen in der Klammer viermal wiederholt werden. for (a=1; a<5; a++) { digitalWrite(a,HIGH); delay(500); digitalWrite(a,LOW); delay(500); }

While Struktogramm

Abbruchbedingung

while (Bedingung) { Anweisung1; Anweisung2; } do { Anweisung1; Anweisung2; } while (Bedingung);

Version vom 11.11.2010

Wiederhole Anweisungen Anweisungen Anweisungen Ende

Wiederholungsschleifen Die Befehle innerhalb der geschweiften Klammer werden so lange ausgeführt wie Bedingung = true erfüllt ist. Die Abfrage wird geprüft, bevor die Anweisung ausgeführt wird. Die Befehle innerhalb der geschweiften Klammer werden so lange ausgeführt wie Bedingung = true erfüllt ist. Die Abfrage wird geprüft, nachdem die Anweisung ausgeführt wird.

Seite 19 / 23

Mikrocontroller einsetzen und programmieren

7 Unterprogramme In einer Funktion (Unterprogramm) können mehrfach genutzte Anweisungen zusammengefasst werden und mit einem Befehl aufgerufen werden. Die Definition der Funktion muss im Quelltext vor der ausführenden Stelle positioniert sein. Eine Funktion kann Werte aus dem Hauptprogramm übernehmen oder an es zurückgeben. Variablen, die nur innerhalb einer Funktion benötigt werden, können auch innerhalb der Funktion definiert werden, diese stehen außerhalb nicht zur Verfügung. Die Definition der Funktion wird mit der Angabe des Typs eingeleitet, der in das Hauptprogramm zurückgegeben wird; in der Klammer hinter dem Namen stehen Variablen, die in die Funktion übergeben werden.

7.1

Ohne Datenübergabe

Definition Der Typ

void

besagt, dass nichts zurückgegeben wird:

void Blitz() //Definition der Funktion Blitz { digitalWrite(pin;HIGH); //Anweisungen in der Funktion delay(2000); digitalWrite(pin;LOW); } übernimmt keine Werte von aussen und gibt keine zurück. Sie setzt nur den im Hauptprogramm definierten Pin für 2 Sekunden auf HIGH.

Aufruf pin=3; Blitz(); //An Pin3 wird das Potenzial für 2 Sek. hoch und sinkt dann.

7.2

Übergabe von Werten in die Funktion

Definition void Licht_an(int Zeit) { digitalWrite(pin;HIGH); delay(Zeit); digitalWrite(pin;LOW); delay(2 * Zeit); }

// übernimmt den Wert Zeit und gibt nichts zurück. // // // //

pin wird HIGH Zeit Millisekunden warten pin wird LOW 2 * Zeit Millisekunden warten

Aufruf pin=3; Licht_an (500); pin =4; Licht_an (200);

// pin 3 für 500 ms auf High und 1000 ms. auf Low // pin 4 für 200 ms auf High und 400ms auf Low

Pin 3 und Pin 4 mussten natürlich vorher als Ausgang definiert sein Seite 20 / 23

Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren 7.3

Übergabe von Werten aus einer Funktion

Definiton Durch den Typ der Funktion wird die auszugebende Variable definiert, im unten gezeigten Beispiel besitzt Variable Helligkeit den Typ Ganzzahl float Prozent() { float Ergebnis; // Definition ist nur innerhalb der Funktion gültig Ergebnis= analogRead(3) /1024 * 100; return Ergebnis; // Festlegung des Rückgabewertes }

Aufruf im Hauptprogramm a= Prozent(); ordnet der Variable a den Prozentwert des an Pin 3 ermittelten Wert zu. Die Variable Ergebnis ist nur innerhalb der Funktion Prozent bekannt. Sie sollte um Verwirrungen zu verhindern anderweitig nicht genutzt werden.

7.4

Übergabe von Werten in beide Richtungen

Definition float prozent (int x) { float Ergebnis; Ergebnis= analogRead(x) / 1014 *100; return Ergebnis; }

Aufruf pin=7; a= prozent(pin); der Variable a wird der Prozentwert des an Eingang 7 anliegenden Wertes zugewiesen.

Version vom 11.11.2010

Seite 21 / 23

Mikrocontroller einsetzen und programmieren

8 Anhang 8.1

Datentypen

Folgende Typen werden hierbei verwendet: Typ Erklärung

void boolean char int

Keine Zuordnung

long

ganzzahliger Wert zwischen -2147483648 und 2147483647

float

Dezimalzahl zwischen -3.40e38 und 3.4e38

double

Dezimalzahl zwischen -1.79e308 und 1.79e308

8.2 Operator = + * / %

Wahrheitswert (true oder false) einzelnes Zeichen ganzzahliger Wert zwischen -32768 und 32767

Operatoren Anweisung Zuweisung Addition Subtraktion Multiplikation Division Modulo

+= -= *= /=

Beispiel A=3; A= 3 + 4; A = 4-6; A = 3*9; A= 6/4 A = 6%4 A+=3; A-= 4; A=*5;

Veränderung der Ausgangsvariablen

A/=6;

%=

A%=9

++ --

++A; --A;

Seite 22 / 23

Beschreibung ordnet der Variablen A den Zahlenwert 3 zu ordnet der Variablen A den Zahlenwert 3+4=7 zu ordnet der Variablen A den Zahlenwert 4-6=-2 zu ordnet der Variablen A den Zahlenwert 27 zu ordnet der Variablen A den Zahlenwert 1,5 zu Die Division von 6 durch 4 ergibt 1 Rest 2. A erhält den Wert des Restes also hier 2 Erhöht den Wert von A um 3 Vermindert den Wert von A um 4 Multipliziert den Wert von A mit 5 und ordnet das Ergebnis wieder der Variable A zu. Dividiert den Wert von A durch 6 und ordnet das Ergebnis wieder der Variable A zu. Ordnet der Variablen A den Rest, der bei der Division durch 9 entsteht, zu. Erhöht den Wert von A um 1 Vermindert den Wert von A um 1

Version vom 11.11.2010

Mikrocontroller einsetzen und programmieren 8.3

Logische Bedingungen

Operator

Bedingung

Beispiel

== !=

Ist gleich? Ist ungleich?

A == 4 A != 4

< <=

Ist kleiner? Ist kleiner oder gleich? Ist größer? Ist größer oder gleich?

A<3 A <= 4

Beschreibung. Das Ergebnis ist TRUE, wenn … die Variable a den Wert 4 besitzt die Variable a einen von 4 verschiedenen Wert besitzt A kleiner als 3 ist A kleiner oder gleich 4 ist

A>5 A >= 6

A größer als 5 ist A größer oder gleich 6 ist

> >=

8.4

Verknüpfungen zwischen Bedingungen

Operator

Bezeichnung

Beispiel

&

und

|

oder

~

nicht

Bedingung1 Bedingung2 Bedingung1 Bedingung2 ~Bedingung

Weitere Quelle:

8.5

& |

Beschreibung Das Ergebnis ist TRUE, wenn … Beide Bedingungen wahr sind Mindestens eine der beiden Bedingungen wahr ist. Die Bedingung falsch ist

http://de.wikibooks.org/wiki/C-Programmierung:_Operatoren

Programmbibliotheken

Bereits existierende Programme / Funktionen (siehe Kapitel 5) sind in so genannten Programmbibliotheken (Software Libraries) abgelegt. Auf sie kann zugegriffen werden wenn am Anfang des Programms der Verweis auf diese Bibliothek hergestellt wird: // header muss durch den jeweiligen Bibliotheksnamen er#include ; setzt werden

Zum Beispiel enthält die Bibliothek math.h alle wichtigen Funktionen wie Sinus, Potenzen Wurzeln, Logarithmus, …. Die Bibliotheken werden im Arduinoprogrammverzeichnis …\hardware\libraries abgelegt.

8.6 sw

Kabel und ihre Farben schwarz

GND

alle Quellen

rt

rot

5V

Dauerplus

or

orange

Fremde (positive) Betriebsspannung

ge

gelb

Eingangssignal

gn

grün

Ausgangssignal

bl

blau

Leistungsausgang für Aktoren

ws

weiss

Leistungsausgang für Aktoren

Version vom 11.11.2010

Seite 23 / 23