Ich bastel derzeit an einer kaskadierenden Treppenstufenbeleuchtung.
WS2801, Raspberry 3 und Bewegungsmelder.
Das ist natürlich völlig übertrieben, dafür einen Rasp zu nehmen. Aber sonst lerne ich nie was in Python.
An sich funktioniert es auch, aber irgendwas in dem Code läßt das Script grobe 30 Sekunden warten, nach dem ein Event ausgelöst wurde.
Vielleicht hat hier ja ein Pythonkenner eine Idee:
import RPi.GPIO as GPIO
import time
import Adafruit_WS2801
import Adafruit_GPIO.SPI as SPI
SENSOR_PIN = 23
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN)
SENSOR_PIN2 = 24
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN2, GPIO.IN)
PIXEL_COUNT = 32
SPI_PORT = 0
SPI_DEVICE = 0
pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
def wheelw(pos):
if pos > 85:
return Adafruit_WS2801.RGB_to_color(255, 255, 255)
elif pos > 170:
pos += 85
return Adafruit_WS2801.RGB_to_color(255, 255, 255)
else:
pos += 170
return Adafruit_WS2801.RGB_to_color(255, 255, 255)
def rainbow_cycle_successive(pixels, wait=0.1):
for i in range(pixels.count()):
pixels.set_pixel(i, wheelw(((-i * -20 // pixels.count())) ) )
pixels.show()
if wait > 0:
time.sleep(0.05)
def rainbow_cycle_successiver(pixels, wait=0.1):
for i in reversed(range(pixels.count())):
pixels.set_pixel(i, wheelw(((-i * -20 // pixels.count())) ) )
pixels.show()
if wait > 0:
time.sleep(0.05)
def appear_from_back(pixels, color=(0, 0, 0), wait=0.1):
pos = 0
for i in range(pixels.count()):
for j in reversed(range(i, pixels.count())):
for k in range(i):
pixels.set_pixel(k, Adafruit_WS2801.RGB_to_color( color[0], color[1], color[2] ))
pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color( color[0], color[1], color[2] ))
pixels.show()
time.sleep(0.05)
def appear_from_backr(pixels, color=(0, 0, 0)):
pos = 0
for i in range(pixels.count()):
for j in range(i, pixels.count()):
for k in range(i):
pixels.set_pixel(k, Adafruit_WS2801.RGB_to_color( color[0], color[1], color[2] ))
pixels.set_pixel(j, Adafruit_WS2801.RGB_to_color( color[0], color[1], color[2] ))
pixels.show()
time.sleep(0.05)
def mein_callback(channel):
print('Es gab eine Bewegung! cb1')
pixels.clear()
rainbow_cycle_successiver(pixels)
time.sleep(3)
appear_from_back(pixels)
def mein_callback2(channel):
print('Es gab eine Bewegung! cb2')
rainbow_cycle_successive(pixels)
time.sleep(3)
appear_from_backr(pixels)
try:
GPIO.add_event_detect(SENSOR_PIN , GPIO.RISING, callback=mein_callback)
GPIO.add_event_detect(SENSOR_PIN2 , GPIO.RISING, callback=mein_callback2)
while True:
time.sleep(10)
except KeyboardInterrupt:
print "Beende..."
GPIO.cleanup()
Alles anzeigen
Die Funktion ist gegeben. Schalter 1 wird ausgelöst und das Licht geht von unten nach oben an und danach (3 Sekunden) von oben nach unten aus.
Aber der nächste Schaltvorgang kann dann erst nach etwa 30 Sekunden starten. Egal was ich ausgeben lassen will.
Der 2. Schaltvorgang funktioniert dann auch. Aber eben immer mit der Wartezeit dazwischen.
Vielleicht hat ja @BJ1 eine Idee
Bilder vom Testaufbau kommen noch. (Ich schreibe das hier alles direkt am Rasp.)
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Verwendete Hardware:
Das Netzteil pfeift ganz leicht, wenn es keine Last hat. Das kann man umgehen, in dem man den Rasp einfach mit anschließt.
Da sind 5 in einer Tüte. Lieferung aus China.
Auch für Ambilight geeignet.
Dazu dann ein Raspberry nach Wahl und Verkabelung.
Für den fliegenden Aufbau sind ein Steckbrett [Anzeige] und Jumper-Kabel [Anzeige] hilfreich.
Bei den Kabeln in alle Richtungen denken. Also Male-Female und Male-Male.
Läßt sich aber auch alles ohne bewerkstelligen.
Für den Netzanschluss habe ich ein altes Kaltgerätekabel (PC-Stromkabel) verwendet. Das hat alle drei Adern und meist liegt sowas ja noch in einer Kiste.
Blau=N (wie "neutral" und blau wie "kalt"), Braun=L (wie "lebensgefährlich) und Grün=Erde.
Das Netzteil ist feinjustierbar. Sollte man auch mit einem Voltmeter machen. Bei mir war es auf 5,5V eingestellt. Das dürfte zwar noch in der Toleranz liegen, aber sicher ist sicher.
Die Bewegungsmelder sind auch 5V. Die habe ich auch mit angeschlossen. Also alle vier Verbraucher mit an der 5V10A Leitung des Netzteils.
Wenn es irgendwann mal verbaut wird, dann wird der Raspberry3 gegen eine Zero getauscht.