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

06/2019
Home Improvement

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Extrem genau

    Mit einem A/D-Wandler messen Sie bei Bedarf Spannungen. Der MCP3424 macht dabei konstruktionsbedingt eine gute Figur.

  • Verbindungsaufnahme

  • Süßer Wecker

    Dem RasPi fehlen sowohl eine Echtzeituhr als auch ein BIOS, ein zeitgesteuertes Wecken erfordert also Zusatzkomponenten. Hier springt der Witty Pi Mini in die Bresche, ein µHAT von UUGear.

  • Windows to go

    Das Aufsetzen zuverlässiger und sicherer Remote-Desktop-Lösungen erfordert einiges Know-how. Die RasPi-basierte Pinbox von Pintexx reduziert den Konfigurationsaufwand auf ein Minimum.

  • Prima Klima

    In Museen ist es Pflicht, zu Hause nützlich: das permanente Prüfen und zentrale Erfassen der Feuchtigkeit und Temperatur in Räumen.

  • Auf einen Blick

    Ein maßgeschneiderter Infoscreen auf RasPi-Basis mit stromsparendem E-Ink-Display zeigt Termine, Bilder, Mitteilungen und Wetterinformationen an.

  • Sanft berührt

    Mit einem RasPi und dem Controllermodul PiXtend lassen sich mühelos Roboterarme ansteuern und deren Bewegung automatisieren.

  • Popcorn-Kino

    Mit Kodi 18.0 unterstützt LibreELEC 9.0 jetzt die von vielen Streaming-Diensten genutzte DRM-Verschlüsselung. Die Integration von Netflix, Amazon und Co. erfordert allerdings Handarbeit.

  • So nah und doch so fern

    Der RasPi kommt häufig als Server oder Steuerrechner für spezielle Zwecke zum Einsatz. Mit Anydesk erhalten Sie dazu eine Steuersoftware mit grafischer Oberfläche.

  • Eingebettet

    Funkmodule, Displays und Analysegeräte für den Raspberry Pi: Auf der Embedded World präsentieren sich zahlreiche Unternehmen interessierten Elektronikbastlern und Entwicklern.