Raspberry Pi als intelligenter Wecker

© Rgbspace, Fotolia

RasPi Sunrise

Auch wenn sich die Sonne hinter den Wolken versteckt: Der Raspberry Pi springt als intelligenter Wecker ein, um Sie mit einem traumhaften Sonnenaufgang sanft aus den Träumen zu holen und auf den Tag vorzubereiten.

Warum sollte man sich nicht einen eigenen Wecker bauen? Klar, Wecker gibt es schon – aber ein richtiger Raspberry-Pi-Bastler lässt sich von solchen Details nicht abhalten. Obendrein kann der RasPi-Wecker deutlich mehr als eine 08/15-Alarmuhr: Unser RasPi holt uns sanft mit unserer Wunschmusik aus dem Schlaf, bietet ein Webfrontend und simuliert sogar über ein LED-Leuchtband einen Sonnenaufgang.

Diese Anleitung demonstriert den Aufbau des Weckers Schritt für Schritt. Den Anfang macht das über den PWM-Controller des Raspberry Pi angesteuerte LED-Band; anschließend geht es um die eigentliche Aufgabe, das Wecken. Da der PWM-Controller sich um das LED-Band kümmern muss, benötigen wir dafür eine zusätzliche Soundkarte. Zu guter Letzt steht dann das Einrichten der benötigten Dienste an, wie MySQL und Apache. Eine Reihe kleiner Skripte schnürt dann das Gesamtpaket intelligent zusammen.

LED-Band ansteuern

In Bastelläden und im Versandhandel finden sich diverse LED-Bänder im Angebot. Sie unterscheiden sich hauptsächlich durch die Anzahl der LEDs pro Meter und den jeweils verwendeten Controller. Die hier verbaute Variante verfügt über 60 LEDs pro Meter und nutzt den WS2812B [1] als Controller. Jedes der LED-Elemente lässt sich getrennt voneinander ansteuern und kann 16 Millionen Farbwerte annehmen. Dazu kombiniert jedes Element das Licht dreier integrierter LEDs in den Grundfarben Rot, Grün und Blau. Die notwendige Datenübertragung erfolgt seriell über ein spezielles Protokoll, bei dem es auf das richtige Timing ankommt. Die pfiffige Bibliothek Wiring Pi hilft beim Ansteuern via Software [2].

Hinweis

Theoretisch macht es keinen Unterschied, ob Sie den RasPi-Wecker auf Basis eines Raspberry Pi der ersten Generation oder auf einem neuen RasPi 2 aufbauen. In der Praxis jedoch funktioniert aktuell (Stand Mitte Mai 2015) aufgrund eines Bugs [4] die WS281X-Bibliothek [5] nicht mit dem Raspberry Pi 2.

Bezugsquelle

Am günstigsten bekommen Sie microcontrollergesteuerte LED-Bänder über Portale wie Ebay oder AliExpress direkt aus China. Möchten Sie nicht vier Wochen auf den Versand nach Deutschland warten, müssen Sie sich nach lokalen Lieferanten erst mal umsehen. Eine von Hardware-Bastlern gern genutzte Anlaufstelle ist beispielsweise der Electronic Experience Store eXs [6].

Das für diesen Artikel ausgewählte LED-Band misst in der Länge 5 Meter. Leuchtet jede LED mit maximaler Helligkeit, zieht es somit stattliche 18 Ampere Strom: 5 Meter x 60 LED-Module/Meter x 3 LEDs/Modul x 20 mA/LED. Der Hersteller gibt eine maximale Leistungsaufnahme von 90 Watt an, was 18 Ampere bei 5 Volt entspricht. Selbstredend überfordert ein derartiger Leistungshunger den GPIO-Port des Raspberry Pi, Sie benötigen also zwangsläufig ein externes Netzteil.

Bei ersten Tests mit einem Labornetzteil lag der Strombedarf mit dem Beispielprogramm strandtest.py aus der WS281X-Bibliothek zwar erheblich niedriger, trotzdem sollten Sie sich an die Vorgaben des Herstellers halten und ein entsprechend dimensioniertes Netzteil verwenden. Außerdem empfiehlt es sich, das LED-Band von beiden Seiten mit Spannung zu versorgen: Ansonsten leuchten die LEDs am Ende des Bandes erheblich dunkler. Das ist auch der Grund, warum der RasPi-Wecker später die LEDs nicht mit maximaler Intensität strahlen lässt.

Die Datenleitung schließen Sie für einen ersten Testaufbau (Abbildung 1) direkt an GPIO1 (Pin 12) des RasPi an, da nur dieser Ausgang echte PWM-Funktionen bietet. Abbildung 2 zeigt den Schaltplan dafür. Er enthält auch einen Schalter, der später zum Abschalten des Weckalarms dient. Der WS2812b kommt mit den 3,3 Volt hohen Pegeln des Raspberry Pi gut zurecht; bei den meisten anderen Controller-Bausteinen wäre eine zusätzliche Spannungspegelanpassung nötig.

Abbildung 1: Der erste Testaufbau gestaltet sich simpel.
Abbildung 2: Der Schaltplan bleibt bei diesem Projekt sehr übersichtlich.

Software einrichten

Steht einmal der erste Aufbau der Hardware, beginnen Sie mit der Installation der für das LED-Band benötigten Software (Listing 1). Grundsätzlich sollten Sie vor Bastelaktionen immer zuerst für ein aktuelles System sorgen (Zeile 1 und 2). Danach installieren Sie eine Reihe von Python-Werkzeugen sowie das Kommandozeilen-Frontend für Git (Zeile 3). Die Bibliothek für die Ansteuerung des WS2812b laden Sie im Quelltext herunter und bauen sie mit Scons [3] (Zeilen 6 bis 8). Danach erfolgt die Installation der entstandenen Wrapper für Python (Zeile 10).

Listing 1

 

$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install build-essential python-dev git scons swig git-core
$ sudo apt-get install vorbis-tools mpg123
$ mkdir alarm && cd alarm
$ git clone https://github.com/jgarff/rpi_ws281x.git
$ cd rpi_ws281x
$ scons
$ cd python
$ sudo python setup.py install

Nach Abschluss der Installation der wichtigsten Software-Komponenten testen Sie das lose verdrahtete LED-Band mit dem Python-Skript strandtest.py aus dem Verzeichnis ~/alarm/rpi_ws281x/python/examples. Damit alle LEDs in Aktion treten, passen Sie vorher noch den Wert LED_COUNT im Skript an die Anzahl der LEDs an – im vorliegenden Fall also auf 300. Anschließend rufen Sie das Skript mit Root-Rechten auf:

$ sudo python strandtest.py

Da das LED-Band nicht als Lauflicht dienen soll, sondern der Wecker einen Sonnenaufgang simuliert, benötigen Sie nun vier kleine C-Programme für die entsprechenden Funktionen:

  • all_on schaltet die LEDs mit 100 Prozent Weiß an (Listing 2).
  • all_off schaltet die LEDs ab (Listing 3).
  • soft_on bringt die LEDs innerhalb von 5 Minuten von 0 auf 100 Prozent (Listing 4).
  • soft_off bringt die LEDs innerhalb von 5 Minuten von 100 auf 0 Prozent (Listing 5).

Listing 2

 

// all_on
int main(int argc, char *argv[]) {
  int ret = 0;
  setup_handlers();
  if (ws2811_init(&ledstring)) {
    return -1;
  }
  int i;
  for (i = 0; i < LED_COUNT ; i++) {
    ledstring.channel[0].leds[i] = 0x999999;
  }
  if (ws2811_render(&ledstring)) {
    ret = -1;
  }
  return ret;
}

Listing 3

 

// all_off
int main(int argc, char *argv[]) {
  int ret = 0;
  setup_handlers();
  if (ws2811_init(&ledstring)) {
    return -1;
  }
  int i;
  for (i = 0; i < LED_COUNT ; i++) {
    ledstring.channel[0].leds[i] = 0x000000;
  }
  if (ws2811_render(&ledstring)) {
    ret = -1;
  }
  return ret;
}

Listing 4

 

// soft_on
int main(int argc, char *argv[]) {
  int ret = 0;
  setup_handlers();
  if (ws2811_init(&ledstring)) {
    return -1;
  }
  long b;
  for (b = 0; b < 99 ; b++) {
    int i;
    long x=(b*65536l)+(b*256l)+b;
    for (i = 0; i < LED_COUNT ; i++) {
      ledstring.channel[0].leds[i] = x;
    }
    if (ws2811_render(&ledstring)) {
      ret = -1;
    }
  sleep(2);
  }
  return ret;
}

Listing 5

 

// soft_off
int main(int argc, char *argv[]) {
  int ret = 0;
  setup_handlers();
  if (ws2811_init(&ledstring)) {
    return -1;
  }
  long b;
  for (b = 99; b > -1 ; b--) {
    int i;
    long x=(b*65536l)+(b*256l)+b;
    for (i = 0; i < LED_COUNT ; i++) {
      ledstring.channel[0].leds[i] = x;
    }
    if (ws2811_render(&ledstring)) {
      ret = -1;
    }
  sleep(2);
  }
  return ret;
}

Helligkeit

Das Programm all_on (Listing 2) schaltet alle LEDs auf etwas weniger als die Hälfte der maximalen Helligkeit an. Drehen Sie die LEDs weiter auf, so erzeugt das einen Spannungsabfall innerhalb des Bands und somit eine merkliche Verdunklung der von der Spannungsquelle weiter entfernten Lichter. Sollen die LEDs die maximale Helligkeit erreichen, bleibt Ihnen nichts anderes übrig, als das Band über zusätzliche Anschlüsse mit Spannung zu versorgen.

Die abgedruckten Listings zeigen jeweils nur die Main-Methode; die kompletten Listings finden Sie auf der Heft-DVD. Die Programme bauen Sie am besten direkt im Verzeichnis ~/alarm/rpi_ws281x, da dort bereits die Bibliothek libws2811.a zur Adressierung der LED-Leuchten liegt (Listing 6). Anschließend kopieren Sie die kompilierten Programme gleich in die Ordner, in denen die später aufgerufenen Skripte sie suchen (Listing 7). Achten Sie beim Starten der Programme darauf, dass die darunterliegende Bibliothek Root-Rechte benötigt und Sie somit auch die Alarmprogramme mit einem vorangestellten sudo aufrufen müssen.

Listing 6

 

$ cd ~/alarm/rpi_ws281x
$ cc all_on.c libws2811.a -o all_on
$ cc all_off.c libws2811.a -o all_off
$ cc soft_on.c libws2811.a -o soft_on
$ cc soft_off.c libws2811.a -o soft_off

Listing 7

 

$ mkdir /home/pi/alarm/sound
$ mkdir /home/pi/alarm/light
$ cp all_on /home/pi/alarm/light
$ cp all_off /home/pi/alarm/light
$ cp soft_on /home/pi/alarm/light
$ cp soft_off /home/pi/alarm/light

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 8 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

08/2019
Smarte Hacks

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Immer der Reihe nach

    Mit einer einfachen Schaltung testen Sie Bausteine, die über den SPI-Bus miteinander kommunizieren.

  • Einzigartig

    Eine MAC-Adresse ermöglicht die Kommunikation im Netzwerk. Der 24AA02E48 liefert sie für Setups, die aus grundlegenden Komponenten bestehen.

  • Steinkuchen

    Der Raspberry Pi hat viele Fans, doch nicht ohne Grund sehnen sich viele Anwender nach einem RasPi 4. Der Rock Pi 4 übertrumpft den RasPi 3 in Sachen Leistung um Längen und schlägt sich auch in der Praxis gut.

  • Kerngeschäft

    Der Einstieg in die Welt der Mikrocontroller fällt nicht ganz leicht. Mit dem Nucleo F401RE haben Sie jedoch ein Entwicklerboard samt abgestimmter Entwicklungsumgebung an der Hand.

  • Himbeer-Geräte

    Mit Maus und Tastatur im weiß-roten Raspberry-Look macht die Raspberry Pi Foundation das eigene Angebot an Peripheriegeräten für den Mini-Rechner komplett.

  • Unter Kontrolle

    PiCockpit ist eine speziell auf den RasPi zugeschnittene Online-Monitoring-Lösung. Wir werfen einen ersten Blick auf den brandneuen und in Ausbau befindlichen kostenlosen Dienst.

  • Ins rechte Licht gesetzt

    Selbst ohne eigenen Garten holen Sie sich Pflanzen mithilfe von LEDs in jeden Raum und sehen ihnen mit dem RasPi beim Wachsen zu.

  • Helligkeit nach Maß

    Wer bei wechselnden Lichtverhältnissen nicht ständig die Beleuchtung manuell nachregeln möchte, der spannt dafür einen PiXtend ein.

  • Geschrumpft

    Kleine Bildschirme gibt es zwar viele, aber der Support von Raspbian ist überraschend schlecht. Mit ein paar Tricks erzielen Sie trotzdem ein optimales Ergebnis.

  • Brüllwürfel

    Kompakt-Stereoanlagen mit CD-Spieler und Kassettendeck sind inzwischen oft ein Fall für den Recyclinghof – oder für die digitale Wiederbelebung mit einem RasPi und etwas Geschick.