Devacron.com

Διαχειριση ηλεκτρονικων συσκευων μεσω web με το Arduino μας!

Να πω την αληθεια δεν ειχα ασχοληθει ποτε με αυτοματισμους για το σπιτι γιατι το θεωρουσα περιττο. Ομως ερχεται ο καιρος που κατι παρουσιαζεται και λες… “Μακαρι να μπορουσα να αναβα τη ταδε συσκευη απο κινητο…”. Οποτε ανακαλω! Αφου πλεον στην εποχη μας θελουμε να εχουμε την απολυτη διαχειρηση των παντων με το πατημα ενος κουμπιου γιατι οχι. Ενας καλος φιλος μου ζητησε αν γινοταν να αναβει ενα θερμαντικο σωμα απο την δουλεια, μεσω web, πριν επιστρεψει στο σπιτι. Ο λογος προφανως οικονομια αφου με ενα κλασικο timer μπορεις να ρυθμισεις την ωρα που μια συσκευη θα αναβει ή θα σβηνει αλλα οχι να παρεμβεις αν μια μερα πχ πρεπει να κατσεις 2 ωρες παραπανω στη δουλεια!

Επειτα απο μια μικρη ερευνα κατεληξα στο οτι το πιο οικονομικο που θα μπορουσα να κανω ηταν να συνδεσω με καποιο τροπο μια απο αυτες τις τηλεχειριζομενες πριζες οπως αυτην της φωτο παρακατω.

 

Η τεχνολογια που χρησιμοποιουν βασιζεται στο πρωτοκολλο επικοινωνιας RF και πιο συγκεκριμενα στη συχνοτητα 433mhzΟταν παταμε πχ. το on ενα κωδικοποιημενο μηνυμα στελνεται απο τον πομπο στον δεκτη που ενεργοποιει στη συγκεκριμενη περιπτωση ενα ρελε το οποιο με τη σειρα του αφηνει το ρευμα να περασει. Το σχεδιο λοιπον ειναι να διαβασω και να καταγραψω αυτο το μηνυμα και επειτα να το αποστειλελνω οποτε εγω θελω μεσω web. Για να το κανω αυτο χρησιμοποιησα τα παρακατω:

Arduino Uno

 

Arduino ethernet shield

RF 433mhz Receiver + Transmitter

Ενδεικτικα θα αναφερω τις τιμες μιας που τα περισσοτερα αγοραστηκαν απο ebay, οποτε αναλογως τι θα πετυχει ο καθενας. Το arduino στα 15ευρω, το ethernet shield στα 8 ευρω, ο RF πομποδεκτης  στα 5 ευρω, η τηλεχειριζομενη πριζα στα 7 ευρω και περιπου 5 ευρω σε καλωδια, κολλησεις, breadboard κλπ. Συνολο περιπου 40 ευρω. Αρκετα καλα νομιζω.

Το κυκλωμα ειναι πολυ απλο και βασιζεται στην παρακατω εικονα:

 

Αυτο που πρεπει να κανουμε επειτα ειναι ειτε μεσω παλμογραφου ειτε μεσω συνδεση του δεκτη με το linein μιας καρτας ηχου να καταγραψουμε το σημα και να αποκωδικοποιησουμε τα 0 και 1 που φευγουν οταν παταμε το κουμπι του τηλεχειριστηριου. Εγω δεν εκανα τιποτα απο τα δυο! Βρηκα στο διαδικτυο μια βιβλιοθηκη που μου ελυσε τα χερια. Μπορειτε να την βρειτε εδω. Στο zip αρχειο που θα βρειτε υπαρχει ενα arduino project με την ονομασια ReceiveDemo_Simple. Περαστε το στο arduino σας(αλλαξτε στον κωδικα πρωτα τα pin με αυτα που χρησιμοποιειτε) και ανοιξτε το Serial port monitor. Οταν πατησετε το on ή το off θα δειτε εκει το κωδικοποιημενο μηνυμα! Πιο ευκολο δεν γινεται! Καταγραψτε τον αριθμο (στην δικια μου περιπτωση ηταν το ON 010101000001010101010101 και το OFF 010101000001010101010100.

Επειτα συνδεουμε το arduino στο δικτυο μας.

 

Αυτο που θα κανουμε τωρα, εφοσον γνωριζουμε τον αριθμο που πρεπει να στειλουμε ειναι να κανουμε το Arduino μας webserver ο οποιος θα απανταει στα request με μια απλη σελιδα η οποια θα εχει δυο κουμπακια on και off μεσω των οποιων θα στελνουμε το αποκωδικοποιημενο μηνυμα. Εσεις βεβαια μπορειτε να το προχωρησετε οσο θελετε.  Ο δικος μου κωδικα ειναι αυτος:

#include <SPI.h>
#include <Ethernet.h>
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0, 200);

EthernetServer server(80);

void setup()
{
  mySwitch.enableTransmit(10);
  Serial.begin(9600);    
  pinMode(8, OUTPUT);    
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{

  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    String buffer = "";  
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.print(c);   
        buffer+=c;       
        if (c == '\n' && currentLineIsBlank) {          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.print("<FORM action=\"http://192.168.0.200/\" >");
          client.print("<input type=\"submit\" name=\"status\" value=\"On\" onclick=\"this.value=1;\"/>");
          client.print("<input type=\"submit\" name=\"status\" value=\"Off\" onclick=\"this.value=0;\"/>");
          client.print("</FORM>");            
          break;
        }
        if (c == '\n') {

          currentLineIsBlank = true;
          buffer="";       
        } else if (c == '\r') {            
          if(buffer.indexOf("GET /?status=1")>=0)
            mySwitch.send("010101000001010101010101");  

          if(buffer.indexOf("GET /?status=0")>=0)
            mySwitch.send("010101000001010101010100"); 
        }
        else {

          currentLineIsBlank = false;
        }
      }
    }

    delay(1);     
    client.stop();
  }
}

 

Οπως βλεπετε πανω πανω προσθεσα τη βιβλιοθηκη που κατεβασαμε πιο πριν και εδωσα στο arduino μου την ip διευθυνση 192.168.0.200 και πορτα την 80. Αλλαξτε το αναλογα το δικτυο σας. Επισης pin χρησιμοποιησα το 8. Εσεις αλλαξτε το σε αυτο που χρησιμοποιειτε. Ανοιξτε τον browser σας και πλητρολογηστε http://192.168.0.200. Αν ολα πηγαν καλα θα δειτε την σελιδα. Πατωντας το on ή το off θα ακουτε τον χαρακτηριστικο ηχο του rele. Συνδεστε μια συσκευη 220v και το δοκιμαστε. Επισης σημαντικο ειναι στο router σας να ανοιξετε την πορτα 80 και να χρησιμοποιησετε καποια υπηρεσια οπως το DynDNS για να εχετε προσβαση στο κυκλωμα και εκτος τοπικου δικτυου. Οι παραλλαγες που μπορουν να γινουν ειναι πολλες και αναλογα τις αναγκες του καθενος. Να σημειωσω οτι αναλογα την ποιοτητα και την κεραια του του πομπου μπορειτε να πετυχετε αρκετα μεγαλη εμβελεια. Ψαχνωντας βρηκα πομπο σε λογικη τιμη που μπορει να πετυχει εμβελεια χιλιομετρων!

Κλεινωντας δειτε ενα βιντεο απο το δικο μου κυκλωμα.

Exit mobile version