Mein neustes Projekt ist eine Uhr aus einem 60er Neopixel Ring und einem Raspberry Pi.
Man nehme:
4x Neopixel Viertelkreise mit je 15 WS2812 RGB LEDs
Adafruit NeoPixel 1/4 60 Ring – WS2812 5050 RGB LED w/ Integrated Drivers oder 1 x http://www.ebay.de/itm/272023696005
Raspberry Pi (Modell B+ geht beispielweise)
Vilros Raspberry Pi 2 Model B (1GB) Ultimate Starter Kit Mit 15 Wesentlich Zubehör
1 x Diode 1N4001
1N4001 DO-41 Gleichrichterdioden, 50 V, 1 A, axial bedrahtet, 50 Stück
Verbindungskabel
Extra Netzteil 5V für den LED-Ring
Werkzeug:
Lötkolben, Lötzinn
Den Ring bzw. die 4 Viertelkreise habe ich beim Chinesen meines Vertrauens bestellt. Bei http://zackzack.de gab es zufälligerweise ein Raspberry Starterset für wenig Geld.
Das schwierigste war, die 4 Viertelreise gescheit aneinanderzulöten 😉
Es werden immer alle 3 Lötpunkte mit den Nachbarlötpunkten verbunden, bis auf den „Eingang“, da wird nur das Kabel für das Steuersignal angelötet.
Als Bibliothek zum Ansteuern habe ich verwendet:
Software
Update des Pis:
sudo apt-get update
Installieren von python und Kompilieren der Bibliothek:
sudo apt-get install build-essential python-dev git scons swig
git clone https://github.com/jgarff/rpi_ws281x.git cd rpi_ws281x scons
Damit werden die Werkzeuge und die Bibliothek runtergeladen und kompiliert.
cd python sudo python setup.py install
Nun schließen wir den Neopixel Ring an den Pi an. Dazu wird Pin 18 mit dem DATA IN Kabel verbunden, +5V des extra Netzteils via der Diode (Polung beachten!) an VCC des Rings, GND an GND des Rings und an GND des Pis:
Mein Programm (clock.py) für die Uhr lautet:
from datetime import datetime import time from neopixel import * # LED strip configuration: LED_COUNT = 60 # Number of LED pixels. LED_PIN = 18 # GPIO pin connected to the pixels (must support PWM!). LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz) LED_DMA = 5 # DMA channel to use for generating signal (try 5) LED_BRIGHTNESS = 8 # Set to 0 for darkest and 255 for brightest LED_INVERT = False # True to invert the signal (when using NPN transistor level shift) if __name__ == '__main__': # Create NeoPixel object with appropriate configuration. strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS) # Intialize the library (must be called once before other functions). strip.begin() sek=0 min=0 hour=0 old_sek=0 old_min=0 old_hour=0 while True: old_sek=sek old_min=min old_hour=hour strip.setPixelColorRGB(old_sek,0,0,0) strip.setPixelColorRGB(old_min,0,0,0) strip.setPixelColorRGB(old_hour,0,0,0) # weiße Punkte alle 5 Min strip.setPixelColorRGB(5,128,128,128) strip.setPixelColorRGB(10,128,128,128) strip.setPixelColorRGB(15,128,128,128) strip.setPixelColorRGB(20,128,128,128) strip.setPixelColorRGB(25,128,128,128) strip.setPixelColorRGB(30,128,128,128) strip.setPixelColorRGB(35,128,128,128) strip.setPixelColorRGB(40,128,128,128) strip.setPixelColorRGB(45,128,128,128) strip.setPixelColorRGB(50,128,128,128) strip.setPixelColorRGB(55,128,128,128) strip.setPixelColorRGB(0,128,64,64) print datetime.now().strftime('%I:%M:%S') sek=int(datetime.now().strftime('%S')) min=int(datetime.now().strftime('%M')) hour=int(datetime.now().strftime('%I'))*5+int(min/12) strip.setPixelColorRGB(sek,255,0,0) strip.setPixelColorRGB(min,0,255,0) strip.setPixelColorRGB(hour,0,0,255) strip.show() time.sleep(1)
gestartet wird das ganze per
sudo python rpi_ws281x-master/python/examples/clock.py
Nun wird mit weißen LEDs ein Zifferblatt dargestellt, rot ist der Sekundenzeiger, blau ist der „kleine“ Zeiger und grün der Minutenzeiger.
Aufgrund der Tatsache, dass immer nur 15 LEDs mit Helligkeit „8“ auf einmal leuchten ist es auch möglich, die 5V vom Raspberry Netzteil liefern zu lassen (das heißt nicht, dass man die 5V an den PINs abgreifen kann! Sondern dass man die Versorgungsspannung auf der Platine vor der Sicherung und dem Spannungsteiler auflötet/abgreift)
Um die Neopixels vor Spannungsspitzen beim Einschalten zu schützen empfiehlt sich das parallele Vorschalten von einem passenden Elko.
Ausblick:
– Es wird noch ein Lautsprecher an den Klinkeanschluß angeschlossen und dann kann man stündlich oder zumindest tagsüber ein „Kuckuck“-mp3 abspielen lassen 😉
– Es kann noch Wecker realisert werden. Dazu habe ich mir flic- Bluetooth Knöpfe bestellt, die dann den Wecker ein und Auschalten und den Sleep steuern…