David Smyth
Published © GPL3+

Security + 2.0 MyQ Garage Door Opener

Interface newer garage door openers with more than a relay.

BeginnerFull instructions provided2 hours6,275
Security + 2.0 MyQ Garage Door Opener

Things used in this project

Hardware components

Photon
Particle Photon
×1
Wemos Relay Shield
×1
Liftmaster Garage Door Button
×1
Reed Switch
×1
micro usb Power Supply
Used an old bluetooth headset charging plug
×1

Software apps and online services

Particle Build Environment
IFTTT Particle
SmartThings Developer Environment

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Wire Strippers / crimpers (generic)
Wires (female to female pin connectors)

Story

Read more

Schematics

Wiring diagram

Reed switch and relay connected to the Particle Photon, door button connected to the relay

Code

Photon Garage

C/C++
Use build.particle.io to upload this to the Particle Photon of your choice (as long as it's the one connected to the garage door opener).
int openGarageDoor(String pin);
int closeGarageDoor(String pin);

int relayPin = D1;
int sensorPin = D4;
String state = "closed";

void setup() {
    // make functions visible to Particle
    Particle.function("openGarage", openGarageDoor);
    Particle.function("closeGarage", closeGarageDoor);
    // set pinModes
    pinMode(relayPin, OUTPUT);
    pinMode(sensorPin, INPUT_PULLUP);

}

void loop() {
  // tell Particle if the door opens
  if (state != "open") {
      if (digitalRead(sensorPin) == HIGH) {
          Particle.publish("Garage_Door_Status", "open");
          state = "open";
      }
  }
  // tell Particle if the door closes
  if (state != "closed") {
      if (digitalRead(sensorPin) == LOW) {
          Particle.publish("Garage_Door_Status", "closed");
          state = "closed";
      }
  }
}

int openGarageDoor(String pin) {
    if(state == "closed"){
        Particle.publish("Garage_Door_Status","opening");
        digitalWrite(relayPin, HIGH);
        delay(1000);
        digitalWrite(relayPin, LOW);
    }
return 0;
}

int closeGarageDoor(String pin) {
    if(state == "open"){
        Particle.publish("Garage_Door_Status","closing");
        digitalWrite(relayPin, HIGH);
        delay(1000);
        digitalWrite(relayPin, LOW);
    }
return 0;
}

Credits

David Smyth

David Smyth

1 project • 3 followers
Electrically inclined mechanical engineer. Addicted to projects.

Comments