Vous êtes ici

Gestion de prises electriques par page Web ( Arduino )

Nous allons voir comment créer à partir d'une base arduino un systeme de gestion de prises electriques par le biais d'une page Web. Vous pourrez donc à partir d'une simple page Web, alimenter ou non, une ou plusieurs prises electriques de 220volts . Parfait pour de la domotique par exemple ( allumage/extinction de lumiere à distance, allumage d'arrosage, etc....)

- Nous allons avoir besoin de :

   - 1 Carte Arduino ( le programme est optimisé pour faire moins de 16ko, donc même une arduino nano suffit, cependant, si vous voulez gérer beaucoup de prise, pensez à prendre une carte ayant une plus grande capacité, aussi bien au niveau mémoire qu'en entrées/sorties )

   - 1 Carte Ethernet Shield

   - 1 Carte relais pour arduino ( soit fabriquer une carte relais avec transistors/diodes/relais , cependant nous trouvons sur internet de nombreuses cartes relais à trés bas prix )

- Une fois tout le materiel necessaire, assemblez la carte Arduino avec son Shield Ethernet. Reliez egalement les sorties définient à votre carte relais . Ici nous utiliserons les sorties Arduino 2,3 et 5, que nous definissons à cette partie du programme ( le programme est totalement dispo en bas de page ) :

int ledPin1 = 3; // LED pin
int ledPin2 = 2; // LED pin
int ledPin3 = 5; // LED pin

Vous pouvez bien sur en définir plus selon vos besoins

- Il vous faut aussi regler les parametres réseaux de la carte Ethernet :

byte mac[] = { xxxx, xxxx, xxxx, xxxx, xxxx, xxxx }; //Adresse MAC
byte ip[] = { 192, 168, X, XX }; // Adresse IP
EthernetServer server(80); //Port du serveur

l'adresse MAC est inscrite sur votre Ethernet Shield, l'adresse IP 192.168... est celle de votre choix disponible sur votre réseau, et le port, pareil, vous utilisez un port disponible , ici port 80, port commun au page web ( je déconseil cependant l'utilisation de ce port pour une utilisation de la carte depuis internet, effectivement ce port est régulierement intérrogé par des services web plus ou moins bien attentionnés qui perturbent le bon fonctionnement du programme ) .

- Selon le nombre de prise, il vous suffit de dupliquer certaines parties :

   - le nombre de sortie et leurs états de bases :

int ledPin1 = 3; // LED pin
int ledPin2 = 2; // LED pin
int ledPin3 = 5; // LED pin

boolean LEDON1 = false; //Pin status flag
boolean LEDON2 = false; //Pin status flag
boolean LEDON3 = false; //Pin status flag

pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);

   - la partie de commande des sorties :

if(readString.indexOf("L=1")>0) {
//Pin mise a ON
digitalWrite(ledPin1, LOW); // Mettre la Pin a ON
LEDON1 = true;
}else if(readString.indexOf("L=1")<0){
//Pin mise a OFF
digitalWrite(ledPin1, HIGH); /// Mettre la Pin a OFF
LEDON1 = false; }

   - La page Web :

client.println("<input type=CHECKBOX name=L1 value=2>Prise 2<br>");
client.println("<br />");

   - L'affichage web de l'état de la prise :

client.print("Prise1: ");
if (LEDON1)
client.println("ON<br>");
else
client.println("OFF<br>");
client.println("</body></html>");

- Maintenant que tout est prêt, connecté votre arduino à votre réseau ethernet, à son alimentation et vous pouvez piloter les relais depuis votre navigateur web ( aussi bien sur votre PC, tablette tactile et telephone portable) a cette adresse : http://Ip_de_votre_arduino:port_defini

Vous n'avez plus qu'a cocher la/les sorties que vous voulez activer et valider par Submit. Pour éteindre validez sans cocher les cases que vous voulez éteindre.

 

Le code complet :

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
/*
Gestion Carte 4 Relais
avec un serveur Web Arduino
Materiel:
* Arduino UNO
* Arduino Ethernet shield
* Carte 4 Relais
*/
byte mac[] = { xxxx, xxxx, xxxx, xxxx, xxxx, xxxx }; //Adresse MAC
byte ip[] = { 192, 168, x, xx }; // Adresse IP
EthernetServer server(xx); //Port du serveur
int ledPin1 = 3; // LED pin
int ledPin2 = 2; // LED pin
int ledPin3 = 5; // LED pin
String readString = String(30); //string for fetching data from address
boolean LEDON1 = false; //Pin status flag
boolean LEDON2 = false; //Pin status flag
boolean LEDON3 = false; //Pin status flag

void setup(){
//start Ethernet
Ethernet.begin(mac, ip);
//Configurer les 3 Pins de sorties
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
//Activer la liaison de données Serie
Serial.begin(9600); }

void loop(){
//Créer la connection Client
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 30) {
//store characters to string
readString += c; }
//output chars to serial port
Serial.print(c);
//if HTTP request has ended
if (c == '\n') {
//lets check if LED should be lighted
//Controle Prise 1
if(readString.indexOf("L=1")>0) {
//Pin mise a ON
digitalWrite(ledPin1, LOW); // Mettre la Pin a ON
LEDON1 = true;
}else if(readString.indexOf("L=1")<0){
//Pin mise a OFF
digitalWrite(ledPin1, HIGH); /// Mettre la Pin a OFF
LEDON1 = false; }
//Controle Prise 2
if(readString.indexOf("L1=2")>0) {
//Pin mise a ON
digitalWrite(ledPin2, LOW); // Mettre la Pin a ON
LEDON2 = true;
}else if(readString.indexOf("L1=2")<0){
//Pin mise a OFF
digitalWrite(ledPin2, HIGH); // Mettre la Pin a OFF
LEDON2 = false; }
//Controle Prise 3
if(readString.indexOf("L2=3")>0) {
//Pin mise a ON
digitalWrite(ledPin3, LOW); // Mettre la Pin a ON
LEDON3 = true;
}else if(readString.indexOf("L2=3")<0){
//Pin mise a OFF
digitalWrite(ledPin3, HIGH); // Mettre la Pin a OFF
LEDON3 = false; }
// now output HTML data starting with standart header
client.println("HTTP/1.0 200 OK");
client.println("Content-Type: text/html");
client.println();
//Controle Relais par checkbox
client.println("<h1>Gestion des prises</h1>");
client.println("<form method=get name=Prise><input type=CHECKBOX name=L value=1>Prise 1<br>");
client.println("<br />");
client.println("<input type=CHECKBOX name=L1 value=2>Prise 2<br>");
client.println("<br />");
client.println("<input type=CHECKBOX name=L2 value=3>Prise 3<br><input type=submit value=submit></form>");
client.println("<br />");
//Afficher statut prise 1
client.print("Prise1: ");
if (LEDON1)
client.println("ON<br>");
else
client.println("OFF<br>");
client.println("</body></html>");
//Afficher statut prise 2
client.print("Prise2: ");
if (LEDON2)
client.println("ON<br>");
else
client.println("OFF<br>");
client.println("</body></html>");
//Afficher statut prise 3
client.print("Prise3: ");
if (LEDON3)
client.println("ON<br>");
else
client.println("OFF<br>");
client.println("</body></html>");
//Effacer la chaine pour lecture suivante
readString="";
//Arreter le client
client.stop();
}}}}}

Mon montage terminé, j'ai utilisé un coffret électrique et des prises modulaires :

www.le-gas.fr : Le guide de l'admin Systeme