Arduino Einführung

By | 12. Februar 2017

Die Arduino Plattform

Die Programmierung von Microcontrollern und die Ansteuerung der verschiedenen Aktoren war selbst für ausgebildete Informatiker eine Herausforderung, so dass diese Aufgabe meist ausgewiesenen Experten mit einem Hang zur Hardware-nahen Programmierung vorbehalten blieb. Ohne wirklich komfortable Enticklungsumgebungen und nur mit intensivem Studium der meist sehr spezifischen Datenblätter war die Entwicklung von eingetteten System nur von Ingenieuren mit sehr großem spezial Wissen und viel Erfahrung durchführbar.

Um das Jahr 2005 herum gab es einen sehr interessanten Umschwung: Studierende des Interaction Design Institute im italienischen Ivrea suchten nach einer einfachen Möglichkeit, um ihre Ideen für neuartige Interaktion zwischen Mensch und Maschine sowie ihre Kunst- und Roboterprojekte in funktionsfähige Prototypen umzusetzen. Sie benötigten ein preiswertes, einfaches und überschaubares System, das den Leuten die Angst vor Elektronik nehmen konnte.

Professor Massimo Banzi entwickelte daraufhin mit einigen Helfern ein einfaches, günstiges Mikrocontrollerboard und auch gleich die passende, C-ähnliche Programmiersprache. Nachdem das Projekt wuchs, formierte sich das Gründer-Team aus Massimo Banzi (Italien), David Cuartielles (Spanien), Tom Igoe (USA), Gianluca Martino (Italien) und David Mellis (USA). Das Ganze nannte er “Arduino” nach einem lokalen König aus dem elften Jahrhundert.

Das kleine, mit einem Atmel-Prozessor bestückte Board trat schnell einen Siegeszug an, weil es sich an Designer oder Künstler und nicht so sehr an lötende Nerds richtete. Also Menschen, die vorher nur in extremen Ausnahmefällen Software entwickelt oder gar eigene Hardware gebaut hatten. Ein weiterer Vorteil: Board (Schaltung und Layout) sowie die Entwicklungsumgebung ist Open Source, also für jeden frei verfügbar und ebenso offen für Änderungen und Erweiterungen.

Wer nun denkt, dabei handelt es sich um eine Spielerei für den Hobbykeller der irrt. Mit den Boards der Arduino Familie lassen sich Semi-Professionelle Systeme steueren. Beispielsweise werden viele 3D-Drucker mit den Arduino-Boards gesteuert.

Arbeiten mit dem Arduino

Der Arduino bringt eine eigene integrierte Entwicklungsumgebung (IDE) mit. Dabei handelt es sich um eine plattformunabhängige Java-Anwendung. Die Arduino-IDE bringt einen Code-Editor mit und bindet gcc als Compiler ein. Zusätzlich werden die avr-gcc- Library und weitere Arduino-Librarys eingebunden, die die Programmierung in C und C++ stark vereinfachen. Für ein funktionstüchtiges Programm genügt es, zwei Methoden zu definieren: setup() wird beim Start des Programms (entweder nach dem Übertragen auf das Board oder nach Drücken des Reset-Tasters) einmalig aufgerufen, um z. B. Pins als Eingang oder Ausgang zu definieren. Und loop() diese wird durchgehend immer wieder durchlaufen, solange das Arduino-Board eingeschaltet ist. Die Arduino-Programmiersprache ist ein Subset von C mit einigen Objekteigenschaften. \\

Damit wird die Programmierung signifikant vereinfacht und ermöglicht auch weniger geübten Benutzern den Zugang zu dieser Plattform. Ein Webseite (Playground) wo jeder seine Arbeiten vorstellen kann und andere Events wie der Arduino Tag vervollständigt das attraktive Angebot der Arduino Welt.\\

Angesprochen wird Arduino also über die USB-Schnittstelle. Zum einen wird darüber das Programm in den Controller geladen, zum anderen kann das Board über eine virtuelle Seriellschnittstelle mit dem PC kommunizieren. Das kann über das im Entwicklungssystem eingebaute ASCII-Terminal genauso geschehen, wie über ein übliches Terminalprogramm.\\

Ein- und Ausgabe von Signalen

Für die Ein- und Ausgabe von Steuersignalen stellt der Arduino Kommunikationskanäle zur Verfü- gung. Über diese digitalen und analogen Schnittstellen können z.B. Sensoren abgefragt werden oder Lampen, Motoren und andere elektronische Systeme gesteuert werden. Der Arduino Uno besitzt dazu 14 digitale und 6 analoge Ports. Diese Ports sind Anschlusspins, die als Ein- oder Ausgang programmiert werden können.

Digitale Signale

Um digitale Daten ein- bzw. auszugeben stehen in der Arduino IDE die Funktionen digitalRead(pin) und digitalWrite(pin,value) zur Verfügung.

Analoge Signale

Um analoge Daten ein- bzw. auszugeben stehen in der Arduino IDE die Funktionen analogRead(pin) und analogWrite(pin,value) zur Verfügung.

Digitale Signale müssen vor der Verwendung entsprechend als Ein oder Ausgang definiert werden. Bei der analogen Signalverarbeitung ist dies nicht explizit erforderlich. Folgendes Beispiel zeigt wie das aussehen kann:

Ausgeben von digitalen Signalen

Die Funktion DigitalWrite gibt den Logik-Level HIGH oder LOW an einem festgelegten Pin aus. Möchte man beispielsweise eine LED an PIN 13 an schalten, so würde ein entsprechender Programmtext wie folgt aussehen:

Alle Pins können digitale Signale verarbeiten – auch jene, die mit “Analog0” bis “Analog5” beschriftet sind. Diese Pins können als Eingänge nämlich analoge oder digitale Signale verarbeiten und als digitale Ausgänge verwendet werden. Es gilt folgende Beziehung:

Analog 0 = Digital 14
Analog 1 = Digital 15
Analog 2 = Digital 16
Analog 3 = Digital 17
Analog 4 = Digital 18
Analog 5 = Digital 19

Man kann somit z. B. nach der Definition pinMode(19, OUTPUT) mit digitalWrite(19, HIGH) bzw. digitalWrite(19, LOW) Digitalwerte über den Analog-Port A5 ausgeben.

Ansteuern von LEDs

Eine LED kann nicht direkt an die Ausgangs-Pins des Arduino angeschlossen werden, da die Strom- und Spannungswerte über einen Vorwiderstand angepasst werden müssen. Die Pins des Arduino lie- fern 5 V. Gleichzeitig sollte die Spannung an der LED etwa bei 2 V liegen, so dass am Widerstand eine Spannungsdifferenz von 5 V abfallen sollte. Der maximale Strom den ein Pin des Arduino liefern kann liegt bei 40 mA. Da bei Überschreitung die Schaltung in Mitleidenschaft gezogen werden kann, darf dieser Wert nicht überschritten werden. Für ein deutliches Aufleuchten der LED genügt üblicherweise ein Strom von 10 − 30 mA, so dass wir über das Ohmsche Gesetz den Widerstand berechnen können:

Somit sind wir mit einem Widerstand mit 330 Ω auf der sichern Seite. Es können auch etwas kleinere und größere Widerstände verwendet werden, was sich dann natürlich auf die Helligkeit der LED auswirkt.

Einlesen von digitalen Signalen

Die Eingabe von digitalen Signalen kann beispielsweise über Schalter oder Taster erfolgen. Um einen Schalter abzufragen, kann dieser nicht direkt an einen Arduino-Eingang angeschlossen werden, da so kein definierter HIGH- oder LOW-Pegel sichergestellt werden kann. Auch hierzu benötigt man einen sogenannten Pull-Up oder Pull-down-Widerstand. Dieser hat in der Digitaltechnik üblicherweise einen Wert von 10 kΩ und die Funktion die Spannung auf Masse (Pull-down) oder auf +5V (Pull-Up) zu ziehen solange der Schalter nicht geschlossen ist.

SchalterEinlesen

Dadurch  hat der digitale Eingang bei offenem Schalter und geschlossenen Zustand einen definierten Pegel, der auch eindeutig softwaremässig erkannt werden kann. Nun benötigt man nur noch ein kurzes Programm um die Schaltstellung einzulesen. Eine Möglichkeit wie das zu machen ist, zeigt das nachfolgende Listing:

Schalten größerer Lasten

Die Ansteuerung von LEDs und anderer Module ist mit dem Arduino Board sehr einfach zu realisie- ren. Dabei ist aber zu beachten, dass der maximal zulässige Ausgangsstrom von 40mA pro Ausgang nicht überschritten werden darf. Das reicht für kleine Signale aus. Will man aber z.B. mehrere LEDs, Motoren oder Elektromagneten schalten, ist das zu wenig. Hierfür benötigt man einen Transistor als Schaltverstärker. Ein Transistor ist nicht nur sehr kompakt und schaltet sehr schnell er kann je nach verwendetem Typ auch sehr große Lasten steuern.

Um eine größere Last zu schalten braucht es nur wenige Bauteile. Die meisten Bauteile finden sich in jeder Bastelschublade. Man benötigt im wesentlichen einen Schalttransistor. Der genaue Typ richtet sich nach der zu schaltenden Last.

Der Typ BD139 ist beispielsweise sehr universell einsetzbar und kann Lasten bis 1,5A schalten. Zur Ansteuerung benötigt man noch einen Vorwiderstand an der Ba- sis des Transistors. Ist unser Verbraucher eine induktive Last, stehen wir vor einem neuen Problem. Beim Abschalten von Induktivitäten entstehen hohe Spannungen. Der Strom fließt durch den Verbraucher (z.B. ein Elektromotor) und induziert ein Magnetfeld. Wird der Strom abgeschaltet, bricht das Magnetfeld schlagartig zusammen und induziert einen Strom. Dieser Strom würde den Transistor zerstören, daher muss zur Spannungsbegrenzung eine sogenannte Freilaufdiode (z.B. 1N4148 ) parallel zum Verbraucher geschaltet werden. Das wären im wesentlichen die erforderlichen Bauteile.

Schalttransistor

Der Transistor wird an seiner Basis vom Spannungspegel eines Digitalen Ausgangs des Arduinos gesteuert. Da Bipolartransistoren selbstsperrend sind, lässt er nur Strom auf der Kollektor-Emitter- Strecke durch, wenn ein kleiner Strom durch die Basis-Emitter Strecke fließt. Dies ist der Fall, wenn ein High-Pegel am Digitalen Ausgangs des Arduinos anliegt. Der Transistor schaltet so den Anschluss vom Verbraucher an Masse (GND) durch und der Verbraucher (z.B. ein Relais oder ein Motor) wer- den mit Strom versorgt.

Sollen Verbraucher mit höheren Spannungen betrieben werden als auf dem Arduino verfügbar, so benötigt man eine externe Spannungsversorgung an Vcc und eine zusätzliche Masse-Verbindung mit dem Arduino. So können problemlos beispielsweise 24V Lasten geschaltet werden.

Einsatz von MOS FETs zum schalten von Lasten

MOS FET Transistoren sind normalerweise so ausgelegt, dass Sie Ihre maximale Leistung bei mehr als den vom Arduino-Ausgang gelieferten 5V liefern. Dennoch macht ihr Einsatz dort Sinn, wo hohe Lasten bei zu schalten sind.

Allerdings gibt es bei den üblichen Transistoren deutliche Leistungsunterschiede wie die Tabelle in der Abbildung verdeutlichen soll. Die sehr populären Transistoren IRF 510 / 520 haben bei 5V SourceLevel Spannung gerade mal 1 A Schaltleistung bzw 3 A beim IRF520, obwohl sie mehr als das doppelte laut Datenblatt liefern könnten.

bildschirmfoto-2016-11-05-um-08-47-21

Der IRF530 liefert bei gleicher Ansteuerung bereits 4,5 A. Ebenfalls interessant wenn es um sehr hohe Lasten geht, ist der IRL 540. Das “L” in der Bezeichnung gibt an, dass es sich um einen Transistor speziell für das Logic-Level handelt. Somit also hervorragend für den Einsatz in Verbindung mit Microcontroller Schaltungen geeignet ist. Das Datenblatt weist dabei eine beachtliche Leistung von 28 A aus.

Wichtig ist zu beachten, dass es sich um zwei getrennte Spannungsversorgungen handeln muss. Der Leitungsteil kann somit mit deutlich höheren Spannungen (Vcc >5V) arbeiten. Um die Steuerung über den Arduino Ausgang sicherzustellen, ist eine Arduino-taugliche Spannungs-Versorgung und  eine gemeinsame Masse-Verbindung erforderlich.