Raspberry Pi Halloween Lights and Music Show
Intro: Raspberry Pi Halloween Lights and Music Show
This year my house was illuminated and animated by spooky music thanks to the Raspberry Pi. Back in 2009 I created what I called the x-mas box which housed 8 solid state industrial relays connected to an arduino. For this year I repurposed the box and used the Raspberry Pi instead. The lights and music where triggered by a PIR motion sensor.
The show was part of my SMS Magic Mirror with Automatic Candy Dispenser project (Instructable not ready yet, stay tuned).
The show was part of my SMS Magic Mirror with Automatic Candy Dispenser project (Instructable not ready yet, stay tuned).
STEP 1: Materials
- Raspberry PI
- USB Wifi dongle
- Adafruit Rapsberry PI prototyping board
- PIR Motion Sensor
- Solid State Relays
- 4 Flood lights
- 4 Flood lights sockets
- 1 Strobe light
- PVC pipe elbow fitting
- Speakers
- Cables
STEP 2: Hardware Setup
Check out instructions on how I build the x-mas box here.
For this project I decided to only use 4 of the 8 solid state relays. I connected them directly to the RPI GIO ports and ground. I used the PVC pipe elbow fitting to limit the radius the motion sensor had. This helped to reduce "false positive" triggers since the PIR motion sensor can be quite sensitive.
I used a long cable to let me place the motion sensor close to the ground (the ssr box was placed on the balcony).
Thats basically it. I used the RPI GPIO ports
I placed the 3 flood lights on the second floor deck pointing upwards to allow reflection on the walls. The strobe light was placed in the first floor and it was turned on during the whole song duration.
I connected a set of powerful speaker into the RPI mini-jack audio out.
For this project I decided to only use 4 of the 8 solid state relays. I connected them directly to the RPI GIO ports and ground. I used the PVC pipe elbow fitting to limit the radius the motion sensor had. This helped to reduce "false positive" triggers since the PIR motion sensor can be quite sensitive.
I used a long cable to let me place the motion sensor close to the ground (the ssr box was placed on the balcony).
Thats basically it. I used the RPI GPIO ports
- 17 strobe light
- 18,21,22 flood lights.
-
PIRmotion sensor
GPIO 23
3.3v
Ground
I placed the 3 flood lights on the second floor deck pointing upwards to allow reflection on the walls. The strobe light was placed in the first floor and it was turned on during the whole song duration.
I connected a set of powerful speaker into the RPI mini-jack audio out.
STEP 3: Software Setup
The program is made with Python and is pretty straight forward. I created functions defining each channel (on/off) and just loop the functions while the mp3 was playing. This was really nice since I used python's "subprocess.Popen" and allowed me to poll the process and know when to stop. The lights danced as long there was music!
I added 5 mp3 songs and they played on a random order.
I added 5 mp3 songs and they played on a random order.
#!/usr/bin/env python from time import sleep import os import RPi.GPIO as GPIO import time import subprocess from random import randint GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.IN) GPIO.setup(17, GPIO.OUT) GPIO.setup(18, GPIO.OUT) GPIO.setup(21, GPIO.OUT) GPIO.setup(22, GPIO.OUT) init = True def all(): GPIO.output(18, True) GPIO.output(21, True) GPIO.output(22, True) sleep(.3) GPIO.output(18, False) GPIO.output(21, False) GPIO.output(22, False) def one(): GPIO.output(18, True) sleep(.3) GPIO.output(18, False) def two(): GPIO.output(21, True) sleep(.3) GPIO.output(21, False) def three(): GPIO.output(22, True) sleep(.3) GPIO.output(22, False) while True: if ( GPIO.input(23) == True ): print "Motion Detected" if (init == True): print "Initializing for 10 seconds" init =False sleep(10) i = randint(1,5) song = "/home/pi/" + str (i) + ".mp3" reccmd = ["/usr/bin/mpg321", "-q", song] p = subprocess.Popen(reccmd, stdout=subprocess.PIPE) GPIO.output(17, True) while (p.poll() == None): all() one() two() three() all() three() two() one() all() one() two() three() all() three() two() one() one() two() three() one() two() three() one() two() three() one() two() three() GPIO.output(17, False) sleep(5); sleep(30);
3 Comments
KevinD2 9 years ago
Hi there,
I have been thinking about using Raspberry Pi for some time to do what much more expensive options do. Basically I've seen around the net these boards with pin wirings for like 8 inputs, 8 outputs, etc that cost > hundred bucks. I am wondering, with the python code, can you basically listen for 8 or so input triggers, and determine which trigger was tripped..and then run up to 8 or so outputs at once? Meaning.. assuming my Pi board is connected via USB to my laptop, can x number of inputs trigger multiple outputs at once? I know with the python code I can then run audio/video files if wanted, but just wondering if I can also turn on mulitple outputs on the board at once to say turn on a couple of lights in some sort of sequence, possibly two or three at once, etc.
phillsmit3 10 years ago
Hi I am a beginner.
I would like to make something that will do the following.
press a button - sound clips play. then after a set time interval the power to a socket powering a light switches off. then after a set time interval another socket powering a smoke machine switches on for a short period of time. Then finally the power to the original socket turns on bringing the lights back on.
What would be the best way to do this? would it be an arduino with relays? or pic controller?
If i then wanted to make the above into a 4d cinema so it powers up a projector and plays a video file would i be better using something like a raspberry pi that can play video files itself? I would want everything to operate with a press of a button though and do not want to load programs up manually etc.
Thanks for your help
noelportugal 9 years ago
Yes for what you describe I would recomend a Raspberry Pi!