Greetings, fellow Raspberry Pi enthusiasts. We are about to create a multi-purpose gadget that is sure to impress! My primary reason for building this to to control my Christmas lights, but that is only one of many possible uses. Basically you can plug in up to 8 appliance and turn them on and off independantly from your smart phone! If you want to setup port-forwarding on your wireless router, you can control your appliances from anywhere in the world. (Although why you would want to turn on your blender from over-seas is a bit of a mystery.) Please leave me a comment letting me know how you use your Web Controlled Powerstrip!
Before we get started, I want to give credit where credit is due: TheFreeElectron wrote an excellent instructable on controlling the Raspberry Pi GPIO pins from a web-browser. In fact, in-order to complete this instructable, you will need to follow almost all of the steps from his instructable including using his awesome web application for controlling your power-strip.
Secondly a reminder that working with mains power can be extremely dangerous. Please be very careful. Those of us that have had the experience of touching a live 120 volt wire do not EVER want to repeat the experience.
Assuming you already have your raspberry pi with the adapter and SD card, you should be able to round up the rest of the ingredients with $40-$50 dollars.
Here's what you're gonna need for this project:
Step 1: A Faceplate to be Proud of
We'll start by modifying our project box to expose the face of our power receptacles. Take your time on this step, you want it to look nice since you're going to be impressing all of your friends with it.
We will use a spare wall plate as your template to draw the shapes you will be cutting out with the router.
Start by using a ruler and straight edge to draw a straight line centered across the long side.
Next locate the exact center of that line and make a center-mark.
Now lay your ruler along the line with the center-mark at the 10 cm point on your ruler. Carefully create a mark on the center line at positions 4, 8, 12, and 16 cm. We should end up with four center-points spaced 4 cm apart and centered along the line. These center-points will line up with the screw-hole of the wall plate and allow you to trace each of the large face-plate openings as shown. I also recommend drawing another reference line across the top or bottom to help make sure the wall-plate is parallel with the box edges when you trace the face holes.
Next use your router to carefully rout-out each of the 8 shapes to allow the receptacles to slide into place from the back. It may take a few tries to get them to fit nicely through the holes, but you'll get it.
Tips: Routing MDF is messy with lots of fine dust. You may want to have someone blowing compressed air on the lid while you're routing to keep the dust from obscuring the lines. Keep one of your receptacles near by so you can continue to check the fit and shave off the edges that are preventing the fit. Once all of the holes are cut and fit, clean up the whole mess with a damp cloth.
Step 2: Preparing the receptacles
Remove the long mounting screws from the ends of each of the receptacles.
Take a careful look at the receptacles. You'll notice that on one side you have two silver screws for the common (white) wire and on the other side you have two gold screws for the hot (black) wires. We will be removing ONLY the tab on the gold (hot) side. Do NOT remove the tabs on the silver side.
Using a pair of needle-nose pliers carefully remove the tabs on the gold side of each of the 4 receptacles. You'll need to grasp them securely and bend them back and forth until they break off. This step allows the top and bottom to operate independently. (you will be able to turn on one without turning on the other, thus we get 8 total channels rather than 4.)
Step 3: Wiring the receptacles
Now we will do a little wiring.
Step 4: Securing the receptacles and mounting the relay board
For this step, we will need to measure and cut two pieces of wood which will serve to secure the receptacles in place and will also be used to mount the relay board. These will be 2.5 x 2.5 x 18 cm.
Before mounting the blocks into the lid, we will use one of them to create a wire-bending jig. (I should have taken a picture of this, sorry) I found it really helped keep the wires nice and neat which is important in this project because there are so many wires in a small space. Here's how I did it. Make 8 marks along the block of wood to coincide exactly with the slots between the relays on the relay board. Then drill holes exactly 2 cm deep using a small bit about the same diameter as the 18 gauge wire. Now push the red wire into each hole and bend it square to make the shapes required for the wiring harness shown in the picture and cut them all off at the same location with the longest one roughly 16-18 cm from the bend. Before removing the wires from the jig, tie them together using wire ties (or tape or hot glue) That way when you remove the wiring harness each wire will line up with the relays.
Now strip off just the tip of each of the red wires about 5 mm. This will allow you to push them into the terminals on the relay boards without leaving exposed wire. Now secure them into the CENTER terminals on the relay board with the terminal set-screw as shown.
Next hold or clamp the blocks of wood in place in the box lid and then mark and drill (4) 1/8" holes into the top of the lid (and into the blocks of wood) about 2 to 2.5 cm from each edge (in the corners) to receive a screw. (I used 4 of the screws I removed from the receptacle tabs. I realize these are not technically wood screws, but since I pre-drilled the holes they did the trick.) These screws and wood blocks effectively clamp the receptacles into places so they can't move around.
Finally, using two small screws, mount the relay board to the top block using the two holes on the side opposite the terminals as shown. (The terminal side of the board will hang out suspended above the backs of the receptacles. Again please refer to the picture.)
Step 5: More wiring...
Next we will wire in each of the 8 black wires to the left-hand terminal for each relay. Carefully bend, cut and strip each of the black wires to fit exactly into the corresponding terminal on the relay board. You will want to connect them to the left hand hole of each terminal. (The right hand holes will not be used in this project) Remember to only strip about 5 mm of insulation so that all of the exposed wire will neatly fit into the terminal.
Safety note here! Make sure the power cord is not plugged in while you're working on it!
Now we'll wire in the power cord. I used an old computer cord for mine, mainly because I had a few laying around with nothing to do and because the cord was round which makes it easier to fit into a drilled hole (1/4" drill bit was a perfect fit). As an added bonus, the computer cord has color-coded wires inside so it is easy to tell which is the hot (black), the common (white) and the ground(green.) If the cord you're using does not have the nice color coding, don't worry, it's easy to tell with a multimeter.
(Refer to second picture for this step) Drill a hole in the bottom of the box and insert your power cord 20 cm or so. Very carefully remove the outside casing to expose the three insulated wires inside. Make sure that you knife did not remove any insulation on the individual wires. You may also want to wrap electrical tape several times around the cable just as it enters the box to prevent it from being pulled back out through the hole.
Now we'll connect the power cord to our relays.
The only hard part here is getting all of the red wires connected together. Since the red wiring nuts are too small to fit all of the wires, we will split the red wires up into two groups with a short section of 18AWG wire connecting the two together.
The goal here is to get the black wire from the power cord connected to all of the red wires. The trick to using a wire nut is to have all of the wires stripped the same amount and have them terminate together. (Except stranded wires such as those coming from the power cord can extend a little longer than the solid ones, that way the strands wrap around the solid wires binding them together inside of the nut.) Make sure to twist the wire-nuts good and tight, you don't want them popping out on you.
The white wire is straight forward, just wire it up to the extra white wire that you left hanging out the the last receptacle. (Use a smaller wire nut for this step if you have one.)
Also notice (in the 3rd picture) that I used 3 short pieces of green wire to chain together the ground screws and connect them to the green wire from the power cord. The ground connection is important for safety.
Step 6: Adding your raspberry pi
A quick note of explanation: Up until this point of the build, I was planning on having a second cord coming out of the box to power the raspberry pi. Then it occurred to me that I might be able to add a female plug inside the box to plug the raspberry pi's USB power cord into. That way I would only need one cord coming out of the box. I happened to have an old Christmas light set that was missing most of the lights so I just cut off the female end with enough wire to reach the wire nuts. It worked out nicely. Just wire one side into the wire-nut with the white wires and the other side into one of the wire-nut with the red and black wires.
For this step you will mount a small piece of plywood to the bottom of the box using double-stick tape for the raspberry pi to rest on (and mount to) Using 1/4" screws mount the raspberry pi to the piece of plywood. (Then realizing you forgot to put in the USB WiFi Adapter... you'll take it back off, put in the wifi adapter, and then mount it again.) Ah hem.
Actually, before mounting the raspberry pi, you will want to make sure it is configured to use the wireless USB adapter to automatically connect to your wireless router when powered up. There are plenty of tutorials on the web to show you how to do this. Try this one for example.
Almost there... let's hookup our rainbow wire.
Step 7: Adding the magical rainbow (wire)...
Obviously in this step the colors don't matter. It only matters that you create a connection between the correct pins. If you happen to have exactly the same rainbow-wire set that I have, start by peeling off a 10-wire harness that has the following colors (in-order) Black, White, Grey, Purple, Blue, Green, Yellow, Orange, Red, and Brown.
I recommend pushing all the wires onto the raspberry pi first using the chart from top to bottom. (i.e. pin 1, then 6, then 7 then 11). You'll notice that there are several pins that have no connection, so pay close attention to the pin numbers. If you hold the raspberry pi such that the SD card is on top and the header pins are on your right facing you, pin 1 will be on the top left, 2 is next to it on the top of the right-hand row, 3 is below 1 on the left row and so forth. All odd numbered pins are on the left and all even numbered pins are on the right. Hopefully that is enough info to identify the pins correctly.
Anyway, wire up the 10-wire ribbon as indicated in the pictures. If you have any questions, feel free to leave a comment and I'll do my best to answer.
Finally, you will need to remove the 2-pin shunt (jumper) that is on the relay board connecting the VCC to the JD-VCC pin. (Just pinch it with your fingers and slide it off) Then peel off one additional wire to connect pin-2 (5V) on the raspberry pi to the JD-VCC pin on the 3-pin header of the relay board. (I used brown in the picture.) This provides 5 volts to the coils to power the relay. (If you fail to do this, you only get 3.3 volts to the coils which isn't quite enough.)
Step 8: Safety Testing - (Before you plug it in!)
Call me paranoid, but I really like to check and double check all of my connections before plugging something like this into the wall. You really want to be sure you didn't accidentally wire hot directly to common or ground... bad things happen.
Don't worry, it's easy, just grab your multi-meter and dial it to continuity test. (If your multi-meter doen't have a continuity test, just put it on one of the resistance settings.)
Close up the box.
Connect one of the test probes to the ground post of your power cord using an alligator clip.
Using the other test probe, touch inside of each of the receptacles' ground holes (the round ones) making sure that you have a connection on each one. (Multi-meter should beep or, if you're using a resistance setting, the resistance should go to near zero.) Then check that you do NOT have a connection on either of the other two slots on each receptacle.)
Next check the common which is the longer of the two slots on the left (assuming the ground post-hold is oriented down) Again make sure that all of the common slots have connectivity to the appropriate blade on your power chord AND that you DO NOT have connectivity to either the ground or the hot side.)
With me so far?
Before continuing, make sure you have setup the web-interface for the GPIO pins by following TheFreeElectron's instructable.
The hot-slot (the shorter slot on the right) of the receptacles should not have connectivity (yet) to any of the three posts on your power chord. This doesn't happen until you activate the corresponding relay.
If you want to be really safe, you can continue the test by plugging in only the raspberry pi. (Unplug the adapter from the female socket and plug it into the wall.) Using the web-interface on a computer, tablet, or smart-phone, turn on each channel one at a time and listen for a distinctive click of the relay making the contact.) One thing you'll probably notice right away is that web-interface buttons are reversed. In other words, when it indicates ON, it will actually be OFF and vice-versa. This is because the relay board is "active-low" meaning that the relay is turned on by pulling the corresponding pin to ground and not to VCC. For now this is just a minor annoyance, there are several ways to fix that.
To test this, connect the alligator clip to the hot blade on your power cord and insert the other test probe of your multi-meter into the hot-slot of one of the receptacles. Use your handy web-interface to cycle the channel on and off and verify that the connectivity on your meter responds accordingly.
If all that works CONGRATULATIONS, you're ready to plug it in and give it the full test!