Arduino Controlled Garage Door – Part 3

In my last 2 articles I put together a prototype for a garage door control that I could power on and off through a website I developed. I plugged everything in and let it sit on my desk connected to the network for about a week. Every once in a while I’d load up the webpage and click the buttons to make sure I heard the relays switch on then off.  I wanted to give it a chance to “burn in” and ensure it would work over a long period of time. Once I felt comfortable it was working as expected it was time to do the physical installation.

My hope is that this will be the first project in a series that will automate several functions in my house. Because of this concept I decided to place the Arduino in a centralized location in my house and run a cable to the garage that I could use for 5v power and I2C communication.


  • Power Supply
  • 1 Low voltage wall box
  • 1 Blank Wall Plate
  • 2 Buttons
  • Any cable with 4 or more wires (I used Cat5)
  • Pull up resistors
  • Heat shrink tubing


I wanted to keep the look of this project neat so instead of reusing the old buttons that controlled my garage doors I decided to build my own. I cut a hole in the wall and installed a low voltage wall box mounted sideways. I used 2 concave arcade style buttons from Sparkfun for the physical buttons. To tie it all together I got a blank plastic wall plate and drilled a hole for each button.

Garage Door Button Plate

I secured the module to the top of the buttons and secured it with zip ties. I wanted to make sure that even if the relay module or the Arduino were unusable that I would still be able to open the garage doors so I wired the buttons in as manual overrides. In this configuration either the buttons or the relay can complete the circuit. I used heat shrink tubing to cover all the exposed copper.

Garage Door Button Wiring

Once everything was wired up I put the whole module into the wall and screwed the cover on. You can’t see it in the picture but when the module is powered up you can see the green light from the LED shining through the white plate.

Finished Garage Button Plate

Last Minute Tweak

Once it was all finished I plugged the other end of the cable into my Arduino and loaded up the website and… nothing. I pressed both buttons, neither worked. I figured I must have mixed up the I2C wires for SDA and SCL so I swapped them and still nothing. I have worked pretty extensively with I2C and I remembered that many people recommend pull up resistors on the SDA and SCL lines but in my experience it was never needed because the Arduino has integrated pull up resistors for these pins. I decided to try it anyway and added a pair of 4.6k resistors to the Arduino side of the I2C circuit and tested the web buttons again. This time it worked. It seems that the pull up resistors in the Arduino are better suited for short runs.

Next Steps

The next step in this process is for the Arduino to detect or show the status of the garage doors. This also allows for future expansion of the system by adding other I2C devices. A temperature sensor would be an easy addition and may be a future project.

Leave a Reply