Arduino Daten Ein- und Ausgabe

By | 16. Januar 2017

Einlesen der Arduino Input Ports

Die digitalen Ports vom Arduino können je nach Bedarf zur Ausgabe oder Eingabe von Werten verwendet werden. Dazu steht der Befehl DigitalRead zur Verfügung. Im folgenden vorgestellt werden, wie  8 bit = 1 Byte Daten eingelesen werden können.

Alle digitalen Arduino Pins sind standardmäßig als Eingänge verschaltet, daher müssen sie nicht extra als Eingänge über den Befehl ‘pinMode()’ festgelegt werden. Ich mache das aber auch aus Gründen der Lesbarkeit des Programmtextes.

Der Befehl ‘digitalRead(pin)’liest den Wert von einem festgelegten digitalen Pin aus, der kann entweder als Variable oder Konstante festgelegt werden (0-13). Die Werte können nur HIGH oder LOW annehmen. Um 8-bit einzulesen kann man im einfachsten Fall folgenden Code verwenden:

Das Programm liest die digitalen Werte der Pins 2 bis 9 ein und gibt diese am Monitor aus. Hierzu werden im Setup in einer Schleife zuerst die Pins 2 bis 9 als INPUT deklariert. Im Loop Teil werden dann zyklisch diese Pins abgefragt und über den Monitor ausgegeben.

PortIn

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:

 

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:

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.

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

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.