Twitter garageport med GE val varningssystem & Arduino
1. projektet inhägnad för Arduino + Ethernet shield från amazon.
2. Arduino, i mitt fall den gamla Diecimila. Du alla känner och älskar arduino, hittade på nätet om 23$
3. Arduino Ethernet shield ~ 40$
4. GE val Alert wireless-control center
5. GE val-Alert trådlös garage dörr sensor
6. skruv Terminal
Steg 0: Synkronisera garage dörren bildskärmen till basstationen. Koppla ur allt sedan.
Steg 1:
Det första du kan göra är att skruva loss de två skruvarna på baksidan och en under batteriluckan. Då du kan bända ryggen bort (vara försiktig så att batteriets kontakter är reallyyyy sorta en smärta.
Steg 2:
Vänds och hitta lampan för zon 1 (märkt 1!). Sedan vända tillbaka till den PCB sidan och hitta kontakter. Jag lödde en tråd för där jag hittade marken var (grön) och en annan röd tråd för. Jag hittade som var som genom trial and error med min arduino.
Obs: Lödning finns sladdar är hårt, jag vet inte om det var min crappy lödkolv eller vad men det var svårt att värma upp metallen redan på PCB och få min kablar lödas till det på ett fast sätt. Om du är företagsam kan nog du löda två ledningar till varje zon alarm och har denna tweet du när säga någon identifieras av deras trådlös rörelsesensor eller dörr sensor går bort osv...
Steg 3. Jag använde en dremel kant ut några av plast på batteriluckan så kablarna kunde komma ut från PCB i området batteri. Det är där jag också bifogat en (ytliga kanske) styrelse att ansluta fler kablar till som i slutändan leda till skruvplintar kopplad till arduino. Idén om styrelsen var förvissa slack i systemet så att kablarna inte få slet ur känsliga lödning på LED stiften på PCB av larm basstationen.
Steg 4: Borra ut batterilocket. Detta är enkel drill jag använde och gjorde hålen så att trådarna kan pop ur det...
Steg 5: Mark där skruven terminalen bör gå i rutan project och borra hål, sedan på andra sidan löda i skruv terminalen med kablarna som kommer att gå till arduino/ethernet controller.
Steg 6: Slutligen satte i arduino och ethernet controller skölden i rutan project och Anslut kablarna till marken respektive och analoga 0. Stäng rutan.
Steg 7: Skruva de två kablarna från val alert basstationen till arduino och du är klar!
Så har jag koden för arduino. Det i princip ställer in Ethernet-styrenheter, den använder twitter biblioteket (en som passerar genom en proxytjänst) och den skickar sina tweets på så sätt. En sak jag var tvungen att sattes Ethernet till en bra intern adress... det var den enda verkliga hicka. Koden är sorta ful men tanken är det lyssnar på den analoga ingången om det går över viss tröskel, ställer ett tillstånd att vara i larmläge och om en viss mängd otf tiden går skickar en twitter med ett slumpmässigt värde bifogas (orsak twitter gillar inte tweets med samma text så här ändrar du det. Jag skulle av använda timer bibliotek och göra en tidsstämpel men detta gjordes som jul gåva för någon så jag hade inte tid att genomföra det). Så varje minut eller så att den skickar en tweet och kontrollerar alltid om dörren är gjort så att det slutar. Den skickar sin första tweet efter den första minuten också.
#if defined(ARDUINO) & & ARDUINO > 18 / / Arduino 0019 eller senare
#include
#endif
#include
#include behövs endast i Arduino 0022 eller tidigare
#include
byte [mac] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip [] = {192, 168, 0, 23};
Twitter twitter ("Läs om hur du anger här");
char msg [] = "Garage dörren är öppen";
char msgStartup [] = "Garage dörren monitor är online!";
Boolean misslyckades = false;
booleska blinkTime = false;
booleska doorOpen = false;
int alertcounter = 0;
int resetcounter = 0;
int diodePin = 0;
int val;
int randomValue;
void setup()
{
Delay(1000);
Ethernet.BEGIN (mac, ip);
Serial.BEGIN(9600);
pinMode (13, OUTPUT);
Serial.println ("ansluta...");
sendStartupTweet();
}
void sendStartupTweet()
{
om (twitter.post(msgStartup)) {
int status = twitter.wait();
om (status == 200) {
Serial.println("OK.");
} annat {
Serial.Print ("misslyckades: koden");
Serial.println(status);
misslyckades = sant;
}
} annat {
Serial.println ("Anslutning misslyckades. Startade");
misslyckades = sant;
}
}
void sendTweet(int ts)
{
konvertera ts till en sträng och lägga till MSG
char msg2 [] = msg + ts;
String theMsg = msg;
theMsg.concat ("time:" + ts);
char msg2[theMsg.length()];
theMsg.toCharArray (msg2, theMsg.length());
röding S [50]; Definiera twitter-meddelande som "S"
randomValue = random(HEX); Producera slumpmässiga värde
/**********
* SprintF stygn"" ihop en string(msg) och en variable(randomVariable) i
* en annan sträng, "S".
**********/
sprintf (S, "garageport är öppen (%i) tweets", randomValue); //
Serial.println (S);
om (twitter.post(S)) {
int status = twitter.wait();
om (status == 200) {
Serial.println("OK.");
} annat {
Serial.Print ("misslyckades: koden");
Serial.println(status);
misslyckades = sant;
}
} annat {
Serial.println ("Anslutning misslyckades.");
misslyckades = sant;
}
}
int millisRollover() {
få aktuella millis() värde för hur lång tid mikrokontroller har varit igång
//
För att undvika eventuella detta kunde saknas välta, använder vi en boolesk växla som blir vänt
av någon gång under första hälften av den totala millis perioden och
sen på under andra hälften av perioden totala millis.
Detta skulle fungera även om funktionen kördes endast var 4,5 timme, men vanligtvis
funktionen ska anropas så ofta som möjligt för att fånga själva ögonblicket av rollover.
Rollover räknaren är bra för över 35 år för runtime. --Rob Faludi http://rob.faludi.com
//
statisk int numRollovers = 0; variabel som permanent håller antalet rollovers sedan startades
statisk boolean readyToRoll = false; spårar om vi har gjort det halvvägs till rollover
osignerade långa nu = millis(); tiden just nu
osignerade långa halfwayMillis = 17179868; Detta är halvvägs till max millis värdet (17179868)
om (nu > halfwayMillis) {/ / så länge värdet är större än halvvägs till max
readyToRoll = sant; Du är redo att rulla över
}
om (readyToRoll == true & & nu < halfwayMillis) {
om vi har tidigare gjort det till halvvägs
och millis() är nu _less_ än halvvägs märket
sedan har vi rullade
numRollovers = numRollovers ++; Lägg till ett till räkningen av antalet överrullningar
readyToRoll = false; Vi är inte längre förbi halvvägs
}
återvända numRollovers;
}
void loop()
{
int rollovers = millisRollover(); få antalet rollovers så långt
Serial.println(rollovers,dec); //
checkDoor(rollovers);
Delay(100);
}
void checkDoor(int ts)
{
Val = analogRead(diodePin);
IF(Val>300)
{
doorOpen = sant;
alertcounter = 0;
resetcounter = 0;
}
IF(doorOpen==true)
{
alertcounter + = 1;
Serial.println(alertcounter);
IF(alertcounter>600)
{
alertcounter = 0;
Serial.println ("sändande dörren TWEET");
sendTweet(ts);
}
resetcounter + = 1;
IF(resetcounter>100)
{
resetcounter = 0;
IF(val<250)
{
doorOpen = false;
Serial.println ("dörren stängd");
}
}
}
}