zurück zum Artikel

Arduino-Projekt: Mini-Mac statt Grußkarte

Kai-Uwe Mrkor, Cornelia Schröder
Digitale Grußkarte: Ein weißer Mini-Mac aus dem 3D-Drucker mit Arduino-Innenleben und Display

Glückwunschkarten waren gestern. Stattdessen verschenken wir einen winzigen Mini-Computer, der Geburtstagsgrüße als Animation auf dem Bildschirm anzeigt. Vom 3D-gedruckten Gehäuse bis zum Arduino-Sketch ist alles selbst konzipiert.

Dank Arduino und 3D-Drucker lässt sich mit geringem Aufwand ein kleiner Grüßaugust sehr einfach realisieren. Bauteile sind lediglich ein Mikrocontrollermodul, ein grafikfähiges Display und die Stromversorgung (Akku, Charger + Booster) sowie Schalter und Kabel. Alle Komponenten sollten dabei so klein wie möglich sein. Immerhin muss die gesamte Elektronik in das selbstgedruckte Gehäuse passen. Das wiederum soll (für einen Computer) richtig klein, fast winzig, werden. Am liebsten nicht viel größer als ein Radiergummi.

Display, Arduino Pro Mini, Lithiumbatterie und Modul zur Spannungsversorgung

Nur wenige Bauelemente sind nötig

Als Grundlage für das Gehäuse dient ein freies Design, das wir auf der Plattform für CAD-Dateien Thingiverse gefunden haben: der Apple Macintosh 128k aus dem Jahre 1984 [1], also ein absoluter Klassiker der Computertechnik. Zur Anpassung an unsere Bedürfnisse sind nur wenige Veränderungen nötig. Für die Befestigung des Lademoduls brauchen wir zwei Führungsbolzen. Außerdem bauen wir eine Aussparung für den USB-Anschluss zum Laden des Akkus ein. Auch für den Einbau des An-/Aus-Schalter gibt es eine kleine Kerbe. Und damit auch die Anzeige richtig schick wird, bekommt das Display eine schwarze Frontblende, welche die Umrandung des verwendeten OLEDs (Organic Light Emitting Diode) formschön verdeckt.

Die Gehäuseteile aus dem 3D-Drucker

Das Gehäuse besteht lediglich aus drei Teilen.

Die Anforderungen an den Mikrocontroller, also das Herzstück unserer Schaltung, sind minimal. Hier geht es mehr um einen möglichst kleinen Formfaktor, als um maximale Rechenleistung. Daher fiel die Wahl auf den Arduino Pro Mini [2]. Seine Abmessungen sind mit 18 × 33 mm² fast als winzig zu bezeichnen. Trotzdem hat er genügend Pins zum Anschluss der verwendeten Peripherie. Seine inneren Werte sind für die gestellte Aufgabe völlig ausreichend. So verfügt der kleine 8-Bitter über 32 kB Flash, 2 kB RAM und in der 5V-Variante über eine Taktfrequenz von 16 MHz. Außerdem gibt es für ihn, immerhin trägt er Arduino [3] im Namen, viele Software-Bibliotheken. Man muss also die Welt nicht neu erfinden, sondern kann sich komfortabel auf vielfach eingesetzte und geprüfte Codeschnipsel verlassen.

Eine Kombination aus einem kleinen 3,7 V-LiPo-Akku und einem Lademodul mit integrierten Step-Up-Regler auf 5 Volt vom Elektronikanbieter SparkFun machen unseren kleinen Geburtstagscomputer unabhängig von einem Steckernetzteil. Statt des verwendeten Kombimoduls [4] ist auch der Einsatz von zwei separaten Modulen zum Laden des Akkus und für den Step-Up-Regler denkbar.

Als „Monitor“ kommt bei unserem Mini-Computer ein kleines OLED zum Einsatz. Es handelt sich um ein monochromes Grafik-Modul mit 128 × 64 Pixeln [5] und einer Bild-Diagonalen von 0,96-Zoll. Damit passt es genau in unser Gehäuse. Außerdem ist es ein Standardmodul, welches gut verfügbar und vor allem sehr preiswert ist. Sein Stromverbrauch ist gering und der Kontrast und die Ablesbarkeit von der Seite sind sehr gut.

Angesprochen wird das Display über I²C, ein serielles Protokoll mit zwei Leitungen: SDA (serial data, Pin A4) für die Daten und SCL (serial clock, Pin A5) für den Takt. Inklusive der Spannungsversorgung und einer Masseleitung sind somit lediglich vier Kabel zur Verbindung des Displays mit dem Arduino-Board nötig. Insgesamt ist der Verdrahtungsaufwand daher minimal.

Fritzing-Schema der Mac-Minigrußkarte

Der Verdrahtungsaufwand unseres Geburtstagscomputers hält sich in Grenzen.

Hier gibt es alle Dateien zum Download [6] .

Sind alle elektronischen Bauteile vorhanden, kann der Code erstellt und getestet werden. Voraussetzung ist die Arduino-Softwareumgebung [7].

Zur Ansteuerung des Displays gibt es mehrere Arduino-Bibliotheken. Wir nutzen zwei des Hardwareherstellers Adafruit: Adafruit_SSD1306 [8] (für den Controller SSD1306 des Displays) und das Grafikpaket Adafruit_GFX [9] . Nach der Installation der Bibliotheken [10] kann es direkt losgehen. Dreh- und Angelpunkt ist ein Display-Objekt, hier der Einfachheit halber display genannt, welches zum Programmstart angelegt werden muss:

Adafruit_SSD1306 display;

In diesem Objekt sind alle Methoden zum Zugriff auf das angeschlossene Display enthalten. Arduino-typisch gibt es zum Beispiel eine Methode namens begin() zur Initialisierung der Verbindung. Im ersten Parameter wird die Art der Stromversorgung konfiguriert und im zweiten Parameter die I²C-Adresse des Displays festgelegt:

void setup () {
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
}

Darüber hinaus stellt die SSD1306-Bibliothek all die graphischen Primitive (Setzen eines Punktes, Zeichnen von Linien, Kreisen, Rechtecken sowie Textausgabe) zur Verfügung, die zum Betrieb benötigt werden. Auch Funktionen zur Ausgabe von Bitmaps und Sprites sind da.

Da unser Display keine Graustufen darstellen kann, ist die Organisation der Pixel im Programmspeicher sehr speicherschonend. Das Bild wird Zeile für Zeile in einem Byte-Vektor abgelegt, wobei in jedem der Bytes acht aufeinander folgende Pixel liegen. Insgesamt sind deshalb für ein Bild mit 64 Zeilen bei jeweils 128 Pixeln gerade einmal 1024 Byte nötig. Das Übersetzen eines beliebigen Binärbildes in solch einen Byte-Vektor muss man nicht von Hand machen, dafür gibt es gute Tools wie zum Beispiel den LCD Assistant von Radosław Kwiecień [11].

Der weiße Mini-Mac aus dem 3D-Drucker

Der Mini-Mac grüßt

Im vorliegenden Beispielprogramm wurden die Ausgaben und Animationen in kleinen Unterprogrammen zusammengefasst, so dass sich unsere klassische Endlosschleife loop() sehr einfach lesen lässt (siehe Downloadlink am Ende der ersten Seite). Insgesamt vier verschiedene Animationen werden nacheinander ausgeführt und danach der gesamte Vorgang wiederholt. Natürlich gehört auch eine Textausgabe dazu. Damit diese nicht zu langweilig ausfällt, wird der Text mit kleinen Pausen zwischen den einzelnen Zeichen, ähnlich wie beim Tippen auf einer Schreibmaschine, ausgegeben:

void ausgabeText(String text, byte x, byte y, byte groesse) {
display.setTextSize(groesse);
display.setTextColor(WHITE);
display.setCursor(x,y);

for (int i=0; i<text.length(); i++) {
display.write(text[i]);
display.display();
delay(WAIT);
}

Neben diesen klassisch animierten Textausgaben und einer kleinen Blume stellt ein animierter Sternenhimmel den Höhepunkt eines jeden Durchgangs dar – frei nach dem Motto: „Für Dich soll es nicht nur heute Sterne regnen“. Hier sind die Möglichkeiten für die Umsetzung eigener Ideen grenzenlos.

Das Hochladen des Programms gestaltet sich beim Arduino Pro Mini etwas aufwändiger als beim Uno. Aufgrund seiner kleinen Bauform gibt es keinen USB-Anschluss. Hier ist deshalb ein externer USB-Seriell-Adapter mit TTL-Pegel nötig. Den haben die meisten Maker schon längst in ihrer Bastelkiste. Alternativ lässt sich auch ein Arduino Uno zum Programmer umfunktionieren [12].

Viel Spaß beim Basteln Ihres eigenen, individuellen Geschenks.

Ist der Code auf den Arduino geladen, kann der 3D-Drucker seine Arbeit beginnen. Anschließend werden die Teile ganz einfach zusammen gebaut.

Bauteile aus dem 3D-Drucker mit Stützstrukturen

Drucken der drei Gehäuseteile
Bauteile aus dem 3D-Drucker

Entfernen der Stützstruktur
Elektronikkomponenten der digitalen Grußkarte

Verdrahten der Elektronik
Display im 3D-gedruckten Rahmen und Elektronikkomponenten

Einkleben des Displays
Offener Mini-Grußkartenmac mit Blick ins Innere

Einsetzen der Elektronik
Blick auf den Mini-Mac

Verschließen des Gehäuses

[Update 30.5.18: Batteriebeschriftung in der Fritzing-Skizze angepasst.] (hch [13])


URL dieses Artikels:
https://www.heise.de/-4045740

Links in diesem Artikel:
[1] https://www.thingiverse.com/thing:1418965
[2] https://store.arduino.cc/arduino-pro-mini
[3] http://heise.de/thema/arduino
[4] https://www.sparkfun.com/products/retired/11231
[5] https://www.displaymodule.com/products/dm-oled096-624
[6] https://www.heise.de/downloads/18/2/4/2/3/4/3/2/Mac_Grusskarte_Dateien.zip
[7] https://www.heise.de/ratgeber/Arduino-Einstieg-Software-3226852.html
[8] https://github.com/adafruit/Adafruit_SSD1306
[9] https://github.com/adafruit/Adafruit-GFX-Library
[10] https://www.heise.de/ratgeber/OLED-Displays-Arduino-Bibliotheken-verwalten-und-anpassen-3643786.html
[11] http://en.radzio.dxp.pl/bitmap_converter/
[12] https://www.heise.de/hintergrund/Arduino-Uno-als-In-System-Programmer-2769246.html
[13] mailto:hch@make-magazin.de