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("
Home Light Control by Internet Copyright Azebest
"); // Titre et début méthode GETclient.print("
"); // Affiche le Bouton "Lights_ON"
client.print("
"); // Affiche le Bouton "Lights_OFF"
client.println(""); // 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();
}
}