Instructables
Picture of Raspberry Pi Garage Door Opener
breadboard.jpg
psu.jpg
relay.jpg
wifi.jpg
Hello Everyone!

This instructable explains how I setup a Raspberry Pi to open my garage door using a smarthphone. While this has been done before, I thought I'd post my solution. This was my first hardware project and instructable ever and I'm sure I made some mistakes. So, when you find one let me know! 

Project Overview:
What we will be doing is turning the Raspberry Pi into a small web server. When you access the webserver from your browser of choice, you will have a big button that triggers the garage door via a relay. We will wire a very basic circuit to the Pi's GPIO pins and upload a website that triggers the circuit. When the relay is triggered, it closes the circuit hooked up to the garage motor and opens the garage.

Why would anyone want to do this?
Well, my garage door opener was broke and this was cheaper than replacing the other system. As an added plus though, you could wire up additional sensors and be able to make sure your garage is closed remotely if your were so inclined.

Shopping List:
I consider myself pretty cheap, and I tried to keep the costs minimal. All of the items are available on prime.

1.) Raspberry Pi - Model A - $32

2.) Wifi Adapter - $10

3.) PSU - $5

4.) 5v Relay - $6

Total: $53.00

You will also need an sdcard >= 2GB and some wires, but I had extra of each.




 
Remove these adsRemove these ads by Signing Up

Step 1: Install and Optimize Rasbian (for our purposes)

Picture of Install and Optimize Rasbian (for our purposes)
This first step is to install an operating system to your rpi. I'm a bit of a debian fanboy, and had an extra 2GB sdcard, so I went with a shrunk version of Wheezy. The image I used can be found here:

http://raspberry.mythic-beasts.com/raspberry/images/raspbian/

For full instructions on installing an OS to your PI and other images, visit http://www.raspberrypi.org/downloads.

On Ubuntu, I used gparted to format to fat32, and dd to write the img.

After you install the OS, plug in a usb keyboard and hook up the raspberry pi to a monitor. Assuming you are using Wheezy, on the first boot rasp-config will automatically run. You should use this tool to stretch the parition and enable ssh (under the advanced menu on newer versions I believe).

After I installed my img, I also removed the GUI to free up some space. (If you have a large SD, you can skip this.) To do this type these commands:

$ sudo apt-get remove --purge x11-common
$ sudo apt-get autoremove

This removes all packages that depend on X11 which is pretty much all of the GUI.

Step 2: Setup Wifi via the command line

The next step is to setup your wifi from the command line. This will allow us to control the pi remotely via ssh.

Here is a great guide for Wheezy:
http://www.howtogeek.com/167425/how-to-setup-wi-fi-on-your-raspberry-pi-via-the-command-line/

Since we are using the Model A with only one usb port, you will need to set up the configuration with your keyboard, shutdown the pi, insert the Wifi Dongle and then start it backup. This may take a little guess and check.

The command to shutdown the pi is: sudo shutdown -h 0

If all goes well, once you set it up and reboot, your pi will be given an IP address by your router. You can find this IP address by either hooking the pi up to an hdmi monitor and looking at the boot log, or logging in to your router and looking at the DHCP table.

Step 3: Install Software

Now that we have the wifi setup, we are going to download and install the necessary software to our pi. Since our usb port is now being used by the wifi dongle, we will do this via ssh.

If you are using Ubuntu, open up the terminal and type ssh pi@[Your Pi's Ip address]. If you are using Windows, you can download Putty. On OSX, you can also just ssh from the terminal. Again, the default password on Wheezy is raspberry.

Once your a logged in, download, compile, and install Wiring Pi. This software allows us to control the GPIO pins on the pi. Here is a step by step guide for that:
http://wiringpi.com/download-and-install/

Once Wiring Pi is installed, you will want to install Apache and PHP via these commands:

$ sudo apt-get update
$ sudo apt-get install apache2 php5 libapache2-mod-php5

Once this is done, you will have a working webserver! To verify that, just type in your pi's ip adress in a browser. You should see Apache's default website which says "It Works!".

Step 4: Upload the Garage Opener Website

Picture of Upload the Garage Opener Website
Now that we have a working webserver, we are going to upload a website to it. I've created a very basic one that will trigger the relay we will wire in the next step.

Here are two ways to do that:

Ubuntu
Dowload the GarageOpener.zip to your desktop. Open up your terminal, and type the following commands:
$ ssh pi@[YOUR PI'S IP ADDRESS]
$ sudo rm /var/www/index.html
$ sudo chown pi:root /var/www
$ exit
$ cd ~/Desktop
$ scp GarageOpener.zip pi@[YOUR PI'S IP ADDRESS]:/var/www
$ ssh pi@[YOUR PI'S IP ADDRESS]
$ cd /var/www
$ unzip GarageOpener.zip
$ rm GarageOpener.zip

Any OS
Download Filezilla. Using Putty or another ssh terminal:
$ ssh pi@[YOUR PI'S IP ADDRESS]
$ sudo chown -R pi:root /var/www

Start filezilla. Log into the raspberry pi with these credentials:
Host: sftp://[YOUR PI'S IP ADDRESS]
Username: pi
Password: raspberry

Then upload all of the files from GarageOpener.zip to /var/www. Also, delete the existing index.html.



Some Technical Notes (for those interested):
The website uses jQuery to post to itself (via AJAX) when a user clicks on the big button. I did this so that if you refresh the page it doesn't trigger your garage to open.

If your using an iPhone (or the latest dev version of Chrome on Android) and add this website to your home screen, it should work like an app without the browser chrome. (It will still only work when your on your home wifi though :-P )

Step 6: Create a Startup Service

Picture of Create a Startup Service
This step is important.
Most relays including the one I purchased, operate like this - when the signal is ON the circuit stays off. When the signal is OFF then the circuit is on. So what happens if your pi looses power? Well most relays have a safety mechanism that keeps the circuit OFF when there is no power at all. The problem that occurs happens between when the pi (and subsequently the relay) gets its power back but before the pi has finished booting to turn the signal ON which is need to keep the circuit off. You could wake up in the morning with your garage open and potentially a few new friends!

After some experimenting, I found a simply work around. I found out that my relay doesn't actually initialize until the GPIO pin mode is set via this command: gpio mode 7 out. Furthermore, I found out that it you set the GPIO pin to ON (gpio write 7 1) before you set the GPIO mode, the relay will stay off once initialized.

To make this initialization run at boot, I created a start-up script.

$ ssh pi@[Your Pi's IP]
$ sudo nano /etc/init.d/garagerelay

Then paste this script:
#! /bin/bash
# /etc/init.d/garagerelay


# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting Relay"
# Turn 7 on which keeps relay off
/usr/local/bin/gpio write 7 1
#Start Gpio
/usr/local/bin/gpio mode 7 out
;;
stop)
echo "Stopping gpio"
;;
*)
echo "Usage: /etc/init.d/garagerelay {start|stop}"
exit 1
;;
esac

exit 0

Make the file executable:
$ sudo chmod 777 /etc/init.d/garagerelay

Now tell your pi to run this script at boot:
$ sudo update-rc.d -f garagerelay start 4
(Note: You can safely ignore the "missing LSB tags" warning.)

Voila!

Step 7: Attach Raspberry Pi to the Garage

This part is very easy. Just follow the wires of the button attached to your garage motor and attach the relay the same way. Since the relay isolates the circuit, the direction doesn't even matter.

And you're done! Let me know it works for you.
1-40 of 75Next »
OsirisV10 days ago

Great tutorial. Quick question. Everything is working fine but it appears that the Genie series 3 openers don't activate by shorting out the wall opener pins. Has anyone seen this. Will I have to connect my relay to the PCB of the wall control?

Thanks

joeoz27 days ago

I have wired up my Raspberry Pi to the first module of my Songle relay board. When I click on the big button on the web page I can hear a clicking noise on the relay and see the red led light up. Unfortunately I am having a hard time figuring out how to wire up the relay to the PCB on my garage remote. I have figured out the switches on the remote which trigger the garage door open but I am struggling to find the solder points on the back of the PCB where I can solder my wires to.

Also can I use CAT 6 wires to wire the relay to the remote?

My garage door is Gliderol and I have attached pictures. Can some one please guide me on how to get this right. Many thanks in advance!

Remote_Front.JPGRemote_Back.JPGGarageDoor_Relay.jpg
al_carr1 month ago

Poop.

Great idea,, been looking for something practical to do with one of my Pi's. I cycle a lot and this will eliminate the need to carry an opener or park outside and run inside to close the door... all this after trying to call a head and not have my wife or daughter answer either their cell phones or the home phone.

Got it all setup but the webpage doesn't seem to want to trigger the relay.

Tested using cli, "gpio" command work to toggle GPIO7 up and i can hear the relay clicking.

Using the web page I get the big button but when i press it nothing happens. Monitoring GPIO7 it stays high when I click the big button.

Not sure how to troubleshoot this further. Any ideas of what I might have done to mess this up. :-)

thanks,

Al

al_carr al_carr1 month ago

I've implemented a work around by putting in a script that toggles GPIO 7 for 1 second and then put that script in my .bashrc. So all I have to do is open my SSH app on my phone and select my raspberry pi the door opens.

Still would like to know how to trouble shoot the original issue for the learning experience if anyone has ideas.

thanks,

Al

ErikF21 month ago

Don't know the specifics but the jquery.min.js in the zip file wouldn't work with my IOS 8.02. Hence I deleted that line and replaced with the google api of <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> worked like a charm after that.

AndrewD41 month ago

I followed the instructions almost to the T, and it worked awesome. When the door first opened I did the happy dance. I purchased some female to female breadboard jumpers for making the connection to the relay that worked great. Thanks for this instructable!

kpfeif1 month ago

Hi. Thanks for this great writeup...I hope somebody can solve a little problem I'm having.

I have the Model B, Rev 2 PI. I've added the script to init.d as indicated, but alas, the web interface will not trigger the relay. If I SSH into the PI and manually run /etc/init.d/garagerelay start 7 and then run the gpio write 7 1 (or 0), the relay switches just fine. There's got to be something either wrong with the startup script or the gpio commands within index.php. I've set the parms in both to 7, which does work when I issue commands directly.

Permissions problem, perhaps? I don't have to run gpio... from any specific directory, so I wouldn't think it's a path problem.

kpfeif kpfeif1 month ago

I answered my own question. The problem was with how I locked the web page down with .htpasswd and permissions. I didn't set up the user ID for pi in htpasswd. I simply added a new htpasswd for the user "pi" and it works just perfect. Now all I have to do is hook it up to the door tomorrow. I'm also going to add another webpage and gpio output to drive the second relay so I can close my second garage door.

flowin1192 months ago

alright so I am new to this as well and I have everything setup correctly but now I am unsure of how to actually make this open the garage door. Any assistance would help, thanks in advance and sorry for the noob question.

quartarian (author)  flowin1192 months ago

Most garage doors a triggered by shorting two terminal points. Once you find those terminal points on your garage door motor, you wire the relay to them.

doniel_72 months ago

I am new to instructables and cannot find the

GarageOpener.zip file download? Where can I get this file?

Idk if you found it yet @Doniel_7 but its at the bottom of step 4. There is a link that will download it.

I'm lost too, can't find the file.

thank you.

quartarian (author)  Fefetron2 months ago

As flowin mentioned, it is at the bottom of step 4. Here is a direct link though:

http://www.instructables.com/files/orig/FAO/O1ZT/HMMFCJE7/FAOO1ZTHMMFCJE7.zip

torvaga made it!3 months ago

Nice writeup, and easy to follow. I had to swap the GPIO from 7 to 4 and then it worked like a charm (Got a Rev B 512 Pi). Having an issue with my WiFi i assume, because it doesn't work each time. I'll try to wire connect with TP before I come naging around here again. Great work man! =)

2014-08-08 18.04.52.jpg
PeteK23 months ago

Worked great for me. I even ziptied like the picture. Two caveats:

1) I postponed step 6 at first because it seemed like it wasn't necessary to test basic functionality. However, the "gpio write 7 out" was crucial; nothing happened until then.

2) 'gpio reset' hangs/crashes the pi. Any ideas?

i90m00 made it!4 months ago

Great guide! This provided the basis for my implementation. Thanks for the easy read, nice diagrams, and handy reference links. The only real difference with mine is that I chose to use webiopi (https://code.google.com/p/webiopi/) to access my GPIO pins through a RESTful interface. Then, I wrote C# wrapper classes around the REST calls so that I could consume the garage door functionality through an ASP.NET MVC application. I'm planning on implementing Google OAuth2 for authentication, so people I choose can sign in to the door opener with their Google accounts. :) Will post again when I get that part finished. Lastly, I also implemented door status monitoring using this guide: http://www.richlynch.com/2013/07/27/pi_garage_aler... Works great! I drilled holes in the top of the project box for ventilation, but I will continue to monitor the inside temperature as the months get hotter. Right now the CPU hasn't gotten above 55ºC at an outside temperature of 85ºF, but I will post again if the temperature ever becomes a concern with this design; the maximum CPU temperature is supposedly around 70ºC. Thanks again for the guide!

-Daryl

IMG_20140618_214947.jpgIMG_20140618_215008.jpgIMG_20140619_000822.jpgIMG_20140619_000842.jpgIMG_20140619_000852.jpg
duboisvb4 months ago

hello,

i am new to linux and the Pi but I have followed your instructions thru step 4.and all seemed to work but when I go the the page I do not have button just a blank page which is titled "Garage Opener" . I am not sure what to try . Can you advise me?

duboisvb duboisvb4 months ago

sorry, I figured it out . on to step 5

koaster made it!4 months ago

Great write up! Very inspiring. I read it for the first time about a week ago and have since completed the project! I did make a couple changes. First, I'm a Java programmer, so I replaced Apache and Python with Tomcat and Java. I also made use of the pi4j library. I found that I did not need the startup service you described. I was able to initialize the pin to HIGH/ON from application code without the relay activating too soon. Finally, rather than a website, I opted to expose a web service that I could integrate into an existing home automation application.

One thing that worried me was the fact that my opener has a wall panel with 2 buttons. One for door up/down and one to control the light on the opener. There is also a lock switch that disables the car remotes. All of these controls use the same two wires. I wasn't sure what would happen when I connected the relay to the opener. To test it out before hand, I shorted out the terminals that connect to the wall panel. The door activated, so I knew the relay should work and turns out it works just fine.

IMG_20140610_180626.jpg
scott-w11 months ago
Hello,
Thank you for the how to. Had to change a little to get it work for me.
Needed to move wire going to ping 7 to ping 12 ( GPIO 18 ). Had to update/change
garagerelay and index.php with
gpio -g write 18 1
gpio -g mode 18 out

I have also added to website, click-able video feed use to open/close door.
( not to good of local network.
Further plans:
lights switch from raspberry
door senor
add video from raspberry with motion detector

can you provide link, or code for clickable video feed?

Change the background line in the sytel.css file to

background-image: url("http://admin:password@192.168.1.24:1520/videostream.cgi");

dhankins3 scott-w10 months ago
I also had to modify for GPIO 4:
exec('gpio -g mode 4 out');
usleep(1000000);
exec('gpio -g mode 4 in');

It worked great named as "index.php" in the root of www, but I am working on other apps as well, so I would like to move into a subfolder (ie "garageopener"). When I move the files/folders, the page will load, but the relay no longer works. I'm a newbie, so I'm sure I've missed something stupid. Any suggestions? Thanks!
quartarian (author)  dhankins310 months ago
(removed by author or community request)
quartarian (author)  quartarian10 months ago
When you changed the code, you had to also change the physical pin you wired the relay to right? (I just want to make I did't mess up the diagram.)

Also, to fix the issue with the index.php file not being in the root directory, change line #24 from:

href='/?trigger=1'
to
href='?trigger=1'

That should do the trick.
quartarian - That is correct, I changed the physical pin i wired to the relay. Thank you for the quick response. I want to clarify that I also tried to move the "index.php" to this subdirectory named "garageopener", in addition to the other files. Though I made the change you suggested:
href='/?trigger=1'
to
href='?trigger=1'
I'm not having any luck. Unless you have another suggestion, I may just leave this as is, and try moving my other projects to subfolders (or use other names instead of "index".php. Thanks! Also, great work - my son and I gained a lot of knowledge based upon your work.
quartarian (author)  dhankins38 months ago

Hey Dhankins,

Sorry to leave you hanging. First off, I think it is super cool that you worked on this with your son. I hope I can do that with my future child.

Now about the problem - it's just a problem with the paths. The way I wrote it, all of the paths assume you are in the root directory. I was wrong about only changing the index.php file though. You need to change the other files as well (which I forgot about.)

Here is a quick primary that should allow you to understand what you need to change:
http://www.coffeecup.com/help/articles/absolute-vs-relative-pathslinks/

quartarian (author)  scott-w11 months ago
Hello Scott,

I'm glad it worked for you! What code did you use for the clickable video feed?

-Matt
the720k made it!6 months ago

Excellent Instructable. I just finished setting up and installing my unit. We only have one remote garage door opener between the wife and I, and I have lost track the number of times I've had to drive back home at lunch to close the door I left open. Works perfectly, though I'm going to set up motion in a few days and point a webcam at the door so I can be sure it's closed.

Works perfectly on my Model B rev.1 board. I skipped the wifi adapter and just ran an Ethernet cable over to the DD-WRT router that I use as a repeater for the garage. GPIO 7 worked just fine, and this whole project went very smoothly. I had everything but the relay already on-hand, so this turned out much cheaper than buying a new opener, and a heck of a lot more convenient. Thanks again for a great how-to!

pi-garage-opener.jpg
the720k the720k6 months ago

Update: I've been using this thing daily for the past week, and it has been awesome. Super reliable and very handy. It's so nice to not have to go out to the car at night and close the garage door. One day last week, my wife called me at work and told me I had left it open. I have a point-to-point VPN between work and home, so I just pulled out the smartphone and closed it immediately. So nice. Still haven't gotten around to throwing the webcam into it, but I plan on doing that this afternoon.

jkaipa8 months ago

Relay to my garage unit doesn't seem to work. When I send signal to close the garage, I see the LED functioning on the relay unit, but no action.

Garage: Marantec 4500e

I tried with terminal 3 and 4 but no use. Nothing happens when you close the circuit. It seems the wall unit toggle button have some PIR functionality. Not sure how to handle. Please help.

wallstation__30092__92877.1372571955.1280.1280.jpg
quartarian (author)  jkaipa7 months ago

Hmmm, when the LED triggers, do you hear an audible click? When the relay triggers successfully it's actually pretty loud. If you see the LED light change but don't hear a click, either the relay is bad, it requires more than 5 volts, or your usb power adapter is'nt strong enough.

As a shot in the dark, I suspect it's the latter and you need a better charger.

jkaipa quartarian7 months ago
Thanks for your response Quartarian.

I did not hear any audio click. I am unsure if the 5 volts is being passed. Is there a specific recommendation on the input power voltage in my situation?

Thanks
quartarian (author)  jkaipa7 months ago

Well the power supply (aka cell phone charger) should probably be rated around 850mA or higher. If you have other ones for your cell phone I would try some gues and check.

jkaipa quartarian6 months ago

Thanks Quartarian. Your suggestion helped and its running great now.

appgaer8 months ago

Hi quartarian! This looks great!

Was wondering if you could help me :)

My garage door opener operates somewhat differently - it has 2 terminals which control both the door and the light. How can I set this up to work with it?

Here's the manual for it:

http://www.marantecamerica.com/pdfs/80400M4500eM47...

jkaipa appgaer8 months ago

Any luck with terminal 3 and 4?

appgaer jkaipa6 months ago

Yes! 3 and 4 did the trick!
Thanks guys!

jkaipa appgaer6 months ago

You are all really brilliants ---Thank you.

It worked.

1-40 of 75Next »