Arduino-Workshop

Aus /dev/tal
Wechseln zu: Navigation, Suche

Der Arduino-Workshop soll Menschen einen Einblick in Umgang und Programmierung mit Mikrocontrollern anhand des Beispieles des Arduinos geben. Dazu werden auch auf verschiedene spezielle Eigenschaften von Arduinos eingegangen.

Die Informationen auf dieser Seite können zur Wiederholung und selbstständigen Durchführung des Workshops, aber auch als Vorlage für kommende Wiederholungen des Workshops dienen.

1. Treffen

Für die Vorbereitung des ersten Treffens wird der Vortrag von Scirocco zum Thema Arduino empfohlen. Eine kleine Einführung in die Möglichkeiten, wie Arduinos genutzt werden können, kann darauf folgen. Das erste Treffen (28.03.2014) soll aber vor allem schon einsteigend einige praktische Anwendungen mit LEDs und kleinen Dotmatrixanzeigen zeigen.

Blinkende LED

Zunächst wurde eine blinkende LED realisiert, um die Basisfunktion eines Ausgabepins zu verdeutlichen. Die LED wird einfach an der Anode mit einem Vorwiderstand dazwischen an einen Ausgabepin gesteckt. Die Kathode geht dann an GND.

Das Programm[1], welches die LED blinken lässt sieht wiefolgt aus:

void setup() {
  pinMode(1, OUTPUT);
}
void loop() {
  digitalOutput(1, HIGH);
  delay(500);
  digitalOutput(1, LOW);
  delay(500);
}

LED-Dotmatrix

Danach wurde ein 5x7-Dotmatrix Display aus LEDs angesteuert. Im Endeffekt konnten verschiedene Zeichen mit verschiedenen Dauern angesteuert werden.

Die Spalten der Dotmatrix wurden mit Vorwiderständen und die Zeilen der Dotmatrix ohne Widerstände an digitale Pins des Arduinos angeschlossen. Die Pins der Zeilen und Spalten werden in zwei eindimensionalen Arrays gehalten und können daher vorerst beliebig sein.

Jedes anzuzeigende Zeichen wird der Einfachheit halber in eigenen zweidimensionalen int-Arrays mit Elementen bestehend aus Einsen und Nullen gehalten.

Eine Funktion wird implementiert, die ein einzelnes Zeichen mithilfe der Matrixansteuerung[2] an der Dotmatrix anzeigt. Dabei wird jedes Pixel der Dotmatrix in einer verschachtelten For-Schleife durchgegangen und mit einer if-Anweisung geprüft, ob das aktuelle Pixel im anzuzeigenden Zeichen an oder aus ist.

Damit dieses Zeichen eine gewisse Zeit lang angezeigt werden kann, wird eine weitere Funktion entwickelt, die das gewünschte Zeichen eine gegebene Dauer an der Dotmatrix anzeigt. Dazu kann die millis()-Funktion von Arduino genutzt werden.[3]

In der loop-Funktion steht eine Sequenz von Funktionsaufrufen mit verschiedenen Zeichen. Damit kann unter anderem einfach der eigene Name auf die Dotmatrix geschrieben werden.

2. Treffen

Das zweite Treffen (04.04.2014) besteht aus einer Erweiterung der LED-Dotmatrix (Scrollender Text oder sonstige Animationen) und aus einer Einführung in Schieberegister bzw. Peripherie im Allgemeinen anhand einer Schaltung mit 7-Segmentanzeigen, die über Schieberegister angesteuert werden. (TM1638)

Scrollende LED-Dotmatrix

Zunächst wurde der Code der LED-Dotmatrix dahingehend aufgeräumt, dass nun für die Spalten nicht mehr 7 einzelne int-Werte verwendet werden, sondern nur ein Byte pro Spalte (Bitweise kodiert) nötig sind. Damit wird nötige Speicher deutlich reduziert, was bei Mikroprozessoranwendungen wünschenswert ist.

Daraufhin wird ein Framebuffer implementiert. Dabei wird ein Array der Größe von 5 8-Bit Werten sowie ein paar Funktionen definiert. Darunter Funktionen zum leeren des Framebuffers, zum Ausgeben des Framebuffers mit millis()-delay (Ähnlich wie beim 1. Treffen) und zum setzen eines Zeichens an einer bestimmten horizontalen Position. Letztere Funktion beinhaltet eine if-Abfrage, sodass nur innerhalb des Framebuffers geschrieben werden kann. Dann wird ein Array aus den anzuzeigenden Glyphen gebildet und in der loop-Funktion eine For-Schleife zur aufeinanderfolgenden Anzeige derer geschrieben.

Im letzten Teil mit dieser Dotmatrix beschäftigen wir uns damit, den Text von rechts nach links durchzuscrollen. Dabei wird das Delay verringert und eine weitere For-Schleife für die Verschiebung des aktuellen und nächsten Zeichens eingebaut. Auf das letzte Zeichen folgt wieder das erste.

China-LED-Display

Nun probieren wir einmal ein anderes Modul anzusteuern. Das Modul mit einem TM1638-Controller[4] ist leider relativ schlecht Dokumentiert und auch der Controller hat ein grottiges Datenblatt. Daher mussten wir uns eine Library zur Ansteuerung anschauen, aus der wir einige Funktionen nachprogrammierten.

Zunächst sahen wir uns aber erst an, wie serielle Datenverbindungen und Schieberegister funktionieren. Dann versuchten wir mit der Arduino-ShiftOut-Funktion (Parameter BitOrder muss LSBFIRST sein) und einer selbstprogrammierten Routine, die LEDs auf der Platine anzusteuern. Da dies allerdings nicht wirklich wie gewünscht funktionierte, entschlossen wir uns jedoch dazu, doch die fertige Library auszuprobieren.

3. Treffen

Beim dritten Treffen (11.04.2014) wird die Schaltung anhand einer Library[5] für Arduino angesteuert, da die simplen Versuche des letzten Treffens nicht zufriedenstellend funktionierten. Dazu wird es auch erstmals näher um Buttons als Eingabemöglichkeit gehen.

Referenzen

  1. Siehe dazu auch: http://www.arduino.cc/en/Tutorial/BlinkingLED
  2. Wikipedia zur Matrixansteuerung: http://de.wikipedia.org/wiki/Matrixschaltung
  3. Siehe auch: http://arduino.cc/en/Tutorial/BlinkWithoutDelay
  4. Bezugsquelle: http://www.dx.com/p/8x-digital-tube-8x-key-8x-double-color-led-module-81873
  5. https://code.google.com/p/tm1638-library/