Bluetooth-Steuerung für LED-Würfel

Arduino Uno

LED-Würfel sind lohnende Projekte zum Einstieg, die durchaus anspruchsvoll im Aufbau sind, viel Raum zum Ausprobieren bei der Programmierung lassen und schließlich auch eine nette Dekoration für einen Raum darstellen.

Da mir die Konstruktion eines Würfels ohne Hilfsmittel zu aufwändig war, hatte ich mich für einen Bausatz eines Würfels mit 4x4x4 RGB-LEDs entschieden, zu dem es auch gleich eine passende Mikrocontroller-Platine mit Ansteuerelektronik für die LEDs gab.

Nach dem Aufbau des Würfels und den ersten eigenen Programmen zur Ansteuerung der LEDs wuchs bei mir schnell der Wunsch, den Würfel per Bluetooth zu steuern oder gar zu programmieren (wobei ich letzteres noch nicht selbst umgesetzt habe). Entgegen kam mir bei dem Vorhaben, dass die Mikrocontroller-Platine bereits einen Sockel für ein XBee-Modul enthielt, womit – ein passendes Modul vorausgesetzt – eine Bluetooth-Anbindung sehr einfach möglich schien.

Die Hardware

Wie oben geschrieben, hatte ich mich beim Würfel für einen Bausatz entschieden, und zwar für das „Rainbox Cube Kit“ von Seeed Studio. Passend dazu gibt es von der gleichen Firma den sogenannten „Rainbowduino v3.0“, eine Arduino-kompatible Platine, die bereits LED Treiber enthält und auf die Leiterplatte des LED-Würfels aufgesteckt werden kann, sowie ein transparentes Plexiglas-Gehäuse.

LED Würfel Bild 2
LED Würfel im Gehäuse.

Für die Stromversorgung kommt wieder ein Universalnetzteil (6V) zum Einsatz. Schließlich verwende ich für die Bluetooth-Anbindung ein Sparkfun RN42-XV Modul. Dieses Modul kann man auf der Leiterplatte des Würfels auf dem dafür vorgesehen Platz für das XBee-Modul einstecken. Allerdings ist man damit leider noch nicht fertig.

Zum einen scheint sich das Platinen-Layout des Würfel-Bausatzes und des zugehörigen Rainbowduino-Moduls so entwickelt zu haben, dass die Leitungen nicht mehr vom XBee-Modul direkt zu den seriellen Eingängen des Rainbowduino geführt werden. Außerdem erfordert das Modul zur Steuerung des Datenflusses Zusatzleitungen, die ebenfalls nicht verdrahtet sind.

Das erste Problem lässt sich lösen, indem man die vorhandenen Ausgänge auf der Würfel-Platine über Drähte selbst mit den seriellen Eingängen des Rainbowduino verbindet (gelbe Pfeile im Bild: Eingang für den Rainbowduino, gelber Balken: Ausgänge auf der Platine des Würfels).

Rainbow Cube mit Bluetooth Modul
Anschlußpunkte für die seriellen Verbindungen und Lötpunkte für das Bluetooth-Modul

Für den zweiten Punkt ist etwas Löten auf dem Modul selbst notwendig. Indem die Leitungen für „Bereit zum Empfang“ („Clear To Send“/CTS) und „Bereit zum Senden“ („Ready To Send“) verbunden werden (Pin 12 und Pin 16, blaue Pfeile im Bild), blockiert das Modul das Senden und Empfangen nicht mehr.

Wer schließlich noch den Arduino mit diesem Modul programmieren will, muss noch DTR („Data Terminal Ready“) auf dem Modul mit dem Reset-Pin des Arduino verbinden (eventuell funktioniert auch der DTR Eingang des Rainbowduino). Dies war mir aber für den Moment doch zu viel Bastelei, so dass ich es bei einer reinen Bluetooth-Kommunikation belassen habe. Vielleicht gehe ich den Punkt später noch einmal an. Im Internet finden sich zumindest einige Anleitungen dafür.

Zu guter Letzt muss noch gesagt werden, dass zur Kommunikation des Bluetooth-Moduls der USB-Chip auf der Rainbowduino-Platine abgeschaltet werden muss. Dies gestaltet sich sehr einfach, da zum Umschalten USB<->Seriell ein Schiebeschalter vorhanden ist. Allerdings muss dieser für jedes Aufspielen neuer Software auf den Rainbowduino wieder auf „USB“ gesetzt werden und anschließend für die Bluetooth-Kommunikation auf „Seriell“.

Die Software

Die Kommunikation über das Bluetooth-Modul unterscheidet sich nicht von üblicher Kommunikation über serielle Schnittstellen, wie sie auch als „Serieller Monitor“ in der Ardunio-IDE verfügbar ist.

So empfiehlt es sich zunächst, ein simples Echo-Programm auf den Rainbowduino zu übertragen, damit die Kommunikation zu überprüfen und schließlich das Modul für eigene Ansprüche zu konfigurieren.

Wie immer finden sich sehr viele Beispiele für solch ein Programm im Internet, wobei häufig die Bibliothek „SoftwareSerial“ verwendet wird. Allerdings gab es auf diese Weise bei mir immer wieder kleine Probleme bei der Kommunikation zwischen Rainbowduino und Bluetooth-Modul, so dass ich den einfachen Weg über die serielle Standardschnittstelle gewählt habe:

/*
 * Use board: Duemilanove, processor: 328
 */
#include <Rainbowduino.h>

// how much serial data we expect before a newline
const unsigned int MAX_INPUT = 64;

static char input_line [MAX_INPUT];
int recvFlag;

void setup()
{
  Rb.init();
  Serial.begin(9600); // Start serial monitor at 9600bps
}

void loop()
{
  recvFlag = 0;
  if(Serial.available())  // If the bluetooth sent any characters, process it asap
  {
    unsigned int input_pos = 0;
    while(Serial.available()) {
      if (input_pos < (MAX_INPUT - 1))
        input_line [input_pos++] = Serial.read();
    }
    input_line [input_pos] = 0; // terminating null byte
    recvFlag = 1;
  }
  
  if(recvFlag == 1) {
    Serial.println("Input arrived:");
    Serial.println(input_line);
    }
  delay(1000);
}

Testen lässt sich die Verbindung dann auch mit einem Smartphone beispielsweise mit der Android-App „Bluetooth Terminal“.

Als soweit alles funktionierte, schrieb ich noch eine kleine Software, die verschiedene Muster auf dem Würfel erzeugt. Mittels Bluetooth-Kommandos kann man dann zwischen verschiedenen grafischen Abläufen wechseln.

Letztlich könnte man auch noch eine App für ein Smartphone entwickeln, die diesen Musterwechsel per Knopfdruck veranlasst. Ein Beispiel dafür findet sich ebenfalls auf der Seite von Seeed Studio.

LED Würfel Bild 1
Jede einzelne LED kann das gesamte Farbspektrum darstellen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.