Ahh.. endelig har jeg fått knotet ferdig koden til garasjedør prosjektet mitt. Det er lagt til litt mer funksjonalitet enn bare åpne og lukke garasjeporten via appen. Jeg har også tenkt litt på sikkerhet ved at jeg har koblet en "buzzer" som gir et varselsignal i fem sekunder fra man trykker på knappen i appen til døren faktisk lukkes. Altså hvis døren er åpen.
Jeg skal også legge inn en temperatursensor, men denne er ikke kodet inn ennå, men akkurat denne blir grei skuring.
Hovedproblemet med koding og som samtidig gjør det litt artig er at mikrokontrolleren i seg selv er dum som et brød. Koden blir lest slavisk, så alt må være i rekkefølge samt settes opp skikkelig. Dette blir særlig utfordrende når flere ting skal skje på en gang. Det er da morroa starter :)
Men her er ett par bilder av enheten så langt, som forøvrig skal kapsles fint inn i en boks. Temperatursensor skal som sagt også legges til. Underst har jeg også lagt inn koden for den som liker sånt :)
1.JPG
2.JPG
Kode: Velg alt
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
int relay = 16;
int magnet = 4;
int buzzer = 5;
int magnetValue;
bool Flag_buttonPressed = false; // Sets the button state as false
//Put WiFi cridentials and token here----------------------------------
char auth[] = "*****";
char ssid[] = "*****";
char pass[] = "*****";
//---------------------------------------------------------------------
BlynkTimer timer; // For activating the Blynk Timer
#define DoorIsOpened 1
#define DoorIsClosed 0
#define SignalCloseDoor LOW
#define NoSignalCloseDoor HIGH
void setup() {
Blynk.begin(auth, ssid, pass); // Something that Blynk needs to connect to wifi
digitalWrite(relay, NoSignalCloseDoor); // Sets the relay HIGH (that means open circuit)
pinMode(relay, OUTPUT); // sets the relay as OUTPUT
pinMode(magnet, INPUT_PULLUP); // Sets the magnet sensor as an INPUT_PULLUP
pinMode(buzzer, OUTPUT); // Sets the buzzer as an output
timer.setInterval(1000L, magnetSensor); // Runs the "magnetSensor" function every second
}
void magnetSensor() { // Reads the state of the door (closed or open)
magnetValue = digitalRead(magnet);
if (magnetValue == DoorIsOpened) { // If the door is open...
Blynk.virtualWrite(V2, "GARASJEPORT ÅPEN"); // ...write "garage door is open" (translated to english) to the Blynk app
}
else { // If the door is closed...
Blynk.virtualWrite(V2, "GARASJEPORT STENGT"); // ...write "Garage door is closed" (translated to english) to the Blynk app
Flag_buttonPressed = false; // reset the flag because door is closed
}
}
void buzzerTone() { // Makes a warning sound before garage door closes after button in Blynk app is pushed
if (!Flag_buttonPressed && magnetValue == DoorIsOpened ) {
Flag_buttonPressed = true;
for (int i = 0; i < 5; i++) {
tone(buzzer, 600);
delay(500);
noTone(buzzer);
delay(500);
}
}
}
BLYNK_WRITE(V1) { //Blynk app button
int pinData = param.asInt(); // Some code for sync the Blynk app button
magnetValue = digitalRead(magnet);
if (pinData == 1 && magnetValue == DoorIsOpened) {
buzzerTone(); // Activate the warning sound
digitalWrite(relay, SignalCloseDoor); //... Close the garage door
timer.setTimeout(500L, RELAYoff); // Makes the signal to the door last for half second to ensure that it closes
}
if (pinData == 1 && magnetValue == DoorIsClosed) {
digitalWrite(relay, SignalCloseDoor);
timer.setTimeout(500L, RELAYoff); // Gives the garage opener half second of power to ensure that it closes
}
}
void RELAYoff() { // turns the signal to the garage opener off
digitalWrite(relay, NoSignalCloseDoor);
}
void loop() {
Blynk.run();
timer.run();
}
Du har ikke de nødvendige tillatelsene for å vise filene som er tilknyttet dette innlegget.