Pages: [1]   Go Down
Author Topic: Mon 1er projet Arduino Uno R3 + ethernet shield + telecommande 433Mhz  (Read 523 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Voici mon 1er projet Arduino commande de prises electriques par Internet.
Le but est d'allumer ou d'éteindre plusieurs prises électriques (5 dans mon cas, mais on peut aller jusqu'à 8.) sur lesquelles sont branchées des lampes afin de simuler à distance la présence de personnes dans une maison. Ca peut servir aussi à la commande de radiateurs électriques ou autres !


Il se divise en 2 parties :

- une partie codage, envoi des signaux via la télécommande 433Mhz
- une partie interface Web, récupérer l'information à chaque appui d'un bouton sur une page html.

Partie Télécommande / codage :

J'ai utilisé le boitier emetteur que j'avais déjà..




La télécommande 433Mhz peut piloter 4x2 = 8 prises électriques 220V via un recepteur par prise.

Le circuit intégré dans le télécommande est un HS2262A-R4, il a fallu que je décode la doc technique en chinois pour savoir où récupérer les informations du codage pour l'émission 433Mhz.
(vous trouverez la doc sur le net)



Bref, ce qu'il nous faut c'est simuler l'appui sur un bouton ON et OFF pour chaque prises (ça fait 16 commandes différentes!)

En fait le CI fait ceci sur 4 bits A1, A2, A3 et A8

Telecommande CI = HS2262A-R4
Pin out du CI
pin2 = A1 = fil jaune
pin3 = A2 = fil blanc
pin4 = A3 = fil bleu
pin 10 = A8 = fil violet
pin 18 = VCC = fil orange
pin 9 = GND = fil noir
base transistor cde du VCC = fil vert

J'ai donc soudé des fils en direct sur le CI pour aller vers la carte UNO R3.






Ensuite, j'ai récupéré les infos binaires pour chaque appui sur les 16 combinaisons possibles.

J'en ai déduit un tableau et j'ai fait le programme en fonction de ça.

Partie Internet / Interface html :

j'ai pompé à droite à gauche des infos sur : comment afficher des boutons sur une page html et traiter l'information à chaque appui sur le bouton.

Voici la programme ARDUINO :

***************************************************************************

/* controle ON OFF de 5 boitiers receivers via internet, puis remote control 433Mhz ALL on ALL off
dans cet exemple, 5 recepteurs seront utilisés et seront tous allumés ou tous éteints en même temps

Telecommande CI = HS2262A-R4
Pin out du CI
pin2 = A1 = fil jaune
pin3 = A2 = fil blanc
pin4 = A3 = fil bleu
pin 10 = A8 = fil violet
pin 18 = VCC = fil orange
pin 9 = GND = fil noir
base transistor cde du VCC = fil vert
codage simple sur 4 bits (A1,A2,A3,A8)

*/

#include <Ethernet.h> // inclut la librairie Ethernet pour la carte Ethernet Shield
#include <SPI.h>

String inString = String(20); // Tampon de réception des caractères
byte etat1=1;

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x2E, 0x67 }; // Adresse MAC à adapter en fonction de votre shield
byte ip[] = { 192, 168, 0, xx }; // Adresse locale à adapter en fonction de votre réseau

EthernetServer server(yyyy); // choississez un port libre adresse 192.168.0.x:yyyy pour avoir accès à la page. attention il faut aussi parametrer la box afin de rediriger les ports,....

#define jaune 2 // fil jaune connecté à D2
#define blanc 3 // fil blanc connecté à D3
#define bleu  4 // fil bleu connecté à D4
#define violet 5 // fil violet connecté à D5
#define vert 6 // fil vert connecté à D6


void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  
  pinMode(jaune, OUTPUT); // le fil jaune (Digital 2) est déclaré en sortie
  pinMode(blanc, OUTPUT);
  pinMode(bleu, OUTPUT);
  pinMode(violet, OUTPUT);
  pinMode(vert, OUTPUT);
    
  digitalWrite(jaune, LOW);  // config de base toutes les entrées à 0
  digitalWrite(blanc, LOW);  
  digitalWrite(bleu, LOW);
  digitalWrite(violet, LOW);  
  digitalWrite(vert, HIGH);  // emetteur OFF, il faut mettre un niveau 1 pour mettre hors tension l'emetteur
}

void loop()
{

  EthernetClient client = server.available();
  
  if (client) {

    boolean current_line_is_blank = true;
    while (client.connected()) {
    
      if (client.available()) {
      
        char c = client.read();
        if (inString.length() < 20) {
            inString.concat(c);
         }
        if (c == '\n' && current_line_is_blank)
          {
           if(inString.indexOf("B1")>0){ // Le bouton 1 a été actionné, ne me demandez pas comment ça marche je ne connais pas
            
            allON(); //appelle la fonction "allON" : envoi de 5 codes pour allumer 5 recepteurs   (j'avais seulement 5 recepteurs mais on peut en mettre 8.)        
          }
            
           if(inString.indexOf("B2")>0){ // Le bouton 2 a été actionné, idem
            
            allOFF(); // appelle la fonction "allOFF" : envoi de 5 codes pour éteindre 5 recepteurs            
          }
        // Envoi d'un en-tête http standard
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          
        // Affichage de la page html

            client.println("<html><body><h1>Home Light Control by Internet Copyright Azebest</h1><font size= 4><form method=GET>"); // Titre et début méthode GET
  
            client.print("<br><input type=submit name=B1 value=Lights_ON>"); // Affiche le Bouton "Lights_ON"
            
                        
            client.print("<br><input type=submit name=B2 value=Lights_OFF>"); // Affiche le Bouton "Lights_OFF"
                      
                        
            client.println("</form></body></html>"); // Fin de la méthode GET
  
          break;
        }
        if (c == '\n') {
          // Debut d'une nouvelle ligne
          current_line_is_blank = true;
        } else if (c != '\r') {
          // Caractère reçu sur la ligne courante
          current_line_is_blank = false;
        }
      }
    }
    // Donne le temps au navigateur de traiter les données
    delay(1);
    inString = "";
    client.stop();
  }
}
void emetoff() //fonction emetoff permet de laisser un peu de temps (250ms) à l'emetteur d'emettre le signal et revient sur OFF
      {
        delay(250);
        digitalWrite(jaune, LOW);  
        digitalWrite(blanc, LOW);  
        digitalWrite(bleu, LOW);
        digitalWrite(violet, LOW);  
        digitalWrite(vert, HIGH);  // emetteur OFF
      }      

void allON() // chaque sequence envoi un code qui sera reçu par le recepteur en question
{
      // switch on receiver 1
      digitalWrite(jaune, HIGH);  
      digitalWrite(blanc, HIGH);  
      digitalWrite(bleu, HIGH);
      digitalWrite(violet, HIGH);  
      digitalWrite(vert, LOW);  // emetteur ON
        {
        emetoff();
        }
        // switch on receiver 2
      digitalWrite(jaune, LOW);  
      digitalWrite(blanc, HIGH);  
      digitalWrite(bleu, HIGH);
      digitalWrite(violet, HIGH);  
      digitalWrite(vert, LOW);  // emetteur ON
        {
        emetoff();
        }
        // switch on receiver 3
      digitalWrite(jaune, HIGH);  
      digitalWrite(blanc, LOW);  
      digitalWrite(bleu, HIGH);
      digitalWrite(violet, HIGH);  
      digitalWrite(vert, LOW);  // emetteur ON
        {
        emetoff();
        }
        // switch on receiver 4
      digitalWrite(jaune, LOW);  
      digitalWrite(blanc, LOW);  
      digitalWrite(bleu, HIGH);
      digitalWrite(violet, HIGH);  
      digitalWrite(vert, LOW);  // emetteur ON
        {
        emetoff();
        }
        // switch on receiver 5
      digitalWrite(jaune, HIGH);  
      digitalWrite(blanc, HIGH);  
      digitalWrite(bleu, LOW);
      digitalWrite(violet, HIGH);  
      digitalWrite(vert, LOW);  // emetteur ON
        {
        emetoff();
        }
}

void allOFF()
{
       // switch off receiver 1    
      digitalWrite(jaune, HIGH);  
      digitalWrite(blanc, HIGH);  
      digitalWrite(bleu, HIGH);
      digitalWrite(violet, LOW);  
      digitalWrite(vert, LOW);  // emetteur ON
        {
        emetoff();
        }
        // switch off receiver 2
      digitalWrite(jaune, LOW);  
      digitalWrite(blanc, HIGH);  
      digitalWrite(bleu, HIGH);
      digitalWrite(violet, LOW);  
      digitalWrite(vert, LOW);  // emetteur ON
        {
        emetoff();
        }
        // switch off receiver 3
      digitalWrite(jaune, HIGH);  
      digitalWrite(blanc, LOW);  
      digitalWrite(bleu, HIGH);
      digitalWrite(violet, LOW);  
      digitalWrite(vert, LOW);  // emetteur ON
        {
        emetoff();
        }
        // switch off receiver 4
      digitalWrite(jaune, LOW);  
      digitalWrite(blanc, LOW);  
      digitalWrite(bleu, HIGH);
      digitalWrite(violet, LOW);  
      digitalWrite(vert, LOW);  // emetteur ON
        {
        emetoff();
        }
        // switch off receiver 5
      digitalWrite(jaune, HIGH);  
      digitalWrite(blanc, HIGH);  
      digitalWrite(bleu, LOW);
      digitalWrite(violet, LOW);  
      digitalWrite(vert, LOW);  // emetteur ON
        {
        emetoff();
        }
        
}    
  
« Last Edit: November 01, 2013, 06:37:00 am by azebest » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Notamment le bouquin Arduino Applications Avancées de DUNOD m'a bien aidé ! Merci !
Voici ce que j'obtiens sur ma page internet
il faut rentrer l'adresse dans la navigateur : 192.168.0.xx:yyyy (correspondant à votre adresse et port box)


Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pour avoir accès à votre box via internet depuis partout dans le monde il faut rentrer votre addresse IP fixe directement dans le navigateur suivi des 2 petits points et le port utilisé et autorisé par votre box ":yyyy"
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...
Le circuit intégré dans le télécommande est un HS2262A-R4, il a fallu que je décode la doc technique en chinois pour savoir où récupérer les informations du codage pour l'émission 433Mhz.
...  
  
bonjour
compte tenu du circuit
tu aurais pu, plus simplement  (moins de gestion de pins ) utiliser la lib Rcswitch en recuperant simplement l'emmeteur RF de ta telco.  smiley-mr-green

Mais le principal , c'est ta demarche de resolution de ton probleme , c'est que  tu a fais,   comme ça fonctionne bien et comme tu le souhaite
et tu a bien raison de partager ton plaisir.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui Artouste j y ai bien pensé mais je ne maîtrise pas encore la lib rcswitch et comment cabler pour attaquer l émetteur RF de ka télécommande
Mais si tu as des informations la dessus je suis preneur. ..
Merci
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui Artouste j y ai bien pensé mais je ne maîtrise pas encore la lib rcswitch et comment cabler pour attaquer l émetteur RF de ka télécommande
Mais si tu as des informations la dessus je suis preneur. ..
Merci
fait des photos recto/verso plus precises de cette zone


de toutes façons la mise en forme par le CI est issue de DOUT de ton CI (pin17)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui c po faux ! Mais je n ai pas de récepteur 433Mhz pour le connecter à la carte Uno pour ensuite récupérer les informations et les decoder
et pas eu le temps de me pencher sur le RC Switch mais oui je suis d'accord comme ça j utiliserai qu'une sortie !
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui c po faux ! Mais je n ai pas de récepteur 433Mhz pour le connecter à la carte Uno pour ensuite récupérer les informations et les decoder
et pas eu le temps de me pencher sur le RC Switch mais oui je suis d'accord comme ça j utiliserai qu'une sortie !
Mais si , mais si  smiley-mr-green
il y en a evidemment un dans chaque prise  smiley-cool
et parfaitement connectable sur arduino

bienvenu dans le monde de la bidouille (hack)  smiley-mr-green

mais savoure déjà ce que tu a fait par toi meme , tu verra plus tard si tu souhaite faire autrement.

un des avantages de ta solution est de ne pas se preoccuper en soft du code d'association E/R 
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

oui car j'ai envie de dire, ça marche à la perfection comme ça !!!!
c'est juste que j'utilise 5 sorties pour faire le codage, mais peu importe car je ne me sers pas des autres....  smiley-lol smiley-lol smiley-lol

par contre je voudrais faire la même chose avec la télécommande de mes volets roulants Bubendoorf : voici la télécommande en question.
elle est programmable pour un volet unique et également en restant appuyé dessus 2s sur les 2 boutons en même temps on peut piloter tous les volets.

si vous avez des infos sur ce genre de télécommande je suis preneur....




merci !
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

personne n'a jamais décodé cette télécommande ?
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

personne n'a jamais décodé cette télécommande ?
il semble que ce soit un protocole proprietaire (et sur du 868 pas du 433) et que personne ne soit attelé a le "comprendre".

C'est peut etre et meme surement possible de "trouver" , mais cela demande de l'envie, du temps et un peu de moyens technique.

sur ce forum , nous etions quelques un à s'etre attaqué au protocole blyss
pour te donner une idée de la methode et si tu a le courage
lis ça (attention 20 pages)
http://forum.arduino.cc/index.php/topic,109892.0.html

resumé sur le blog de skywodd
http://skyduino.wordpress.com/2012/07/17/hack-partie-1-reverse-engineering-des-interrupteurs-domotique-blyss/

et synthese sur le wiki de barbudor
https://barbudor.wiki.zoho.com/Syst%C3%A8me-domotique-Blyss-de-Castorama.html



autant en ce qui me concerne , cela ne m'a pas perturbé juste pour le fun d'investir qq 10zaines d'euro en materiel blyss,
mais il est sur que je n'irais pas acheter un volet roulant "juste pour voir"  smiley-mr-green
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok donc j'abandonne et je vais prendre une télécommande dont je vais simuler l'appui sur les boutons, ça sera plus simple...
Logged

Pages: [1]   Go Up
Jump to: