Arrosage automatique à distance

image principale Arrosage automatique à distance

Difficulté:

Pour que vos plantes survivent quand vous partez en vacances.



Dans ce tutoriel vous allez apprendre à:
-utiliser une shield moteur pour Arduino.
-Utiliser des fonctions de base Arduino.
ATTENTION: ce tutoriel va surtout traiter les parties théorie et électronique de ce système et moins la partie fabrication(dimension…);

Matériel :

Budget : Non défini

Etape 1 : Connéctique Module plante

Tout d’abord nous allons brancher tous les éléments ensemble(Carte arduino 1).
Récepteur radio :
GND —> GND
DATA —> D11
VCC—>5 v
Pompe à eau:
(Celle que j’ai utilisée n’a pas de polarité)
La brancher sur la borne M2 du motor shield
Ensuite placez le shield moteur sur la carte arduino
Enfin branchez le fil moins du convertisseur 220 v—>12v sur la prise – du shield et le + sur une des bornes de l’interrupteur puis branchez l’autre borne de l’interrupteur sur la borne M+ du motor shield.

Etape 2 : Connectique Module internet

Tout d’abord nous allons brancher tous les éléments ensemble(Carte arduino 2).
Emeteur radio :
GND —> GND
DATA —> D12
VCC—>5 v
N’oubliez pas de mettre une antenne ou au moins un fil pour avoir une distance d’émission de plus de 1m 😉
Ensuite placez le shield Ethernet sur la carte arduino
Puis branchez le fil moins du convertisseur 220 v—>12v sur la prise – de la carte arduino et le + sur la borne vin de la carte arduino.
Enfin reliez le shield Ethernet à votre box internet avec un câble Ethernet.

Etape 3 : Programation ethernet

Pour cette partie je vais essayer de vous expliquer le plus clairement possible afin que vous puissiez le modifier facilement.

#include //Extension pour module radio
#include //extension pour ethernet
#include //extension pour ethernet

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };//on définie une adresse mac
IPAddress ip(***, ***,***,***);
EthernetServer server(80);//port ethernet (s’il n’est pas indiqué lors de la recherche votre navigateur va automatiquement mettre 80)
boolean incoming = 0;//Variable qui va permettre de savoir quel type de message est reçu (voir suite)

const char *arroser = “a”;//Ces variables contiennent les messages radio
const char *eau1 = “b”;//
const char *eau2 = “c”;//
const char *eau3 = “d”;//
void setup(){

vw_setup(2000);//on “initialise le module radio ” sur 2000 bauds.Ne pas changer

Ethernet.begin(mac, ip);//On initialise le shield ethernet avec l’ip et l’adresse mac définies précedement
Serial.begin(9600);//on démarre le moniteur serie

Serial.println(Ethernet.localIP());//on affiche l’ip sur le moniteur serie
}
void loop()
{
EthernetClient client = server.available();//on copie le message reçu lorsqu’il y en a un.
if (client) {///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if(incoming && c == ‘ ‘){ ///////////////////////////Si le message commence par $ on regarde ce qui suit sinon on arrête
incoming = 0;
}
if(c == ‘$’){
incoming = 1;
}
if(incoming == 1){

if(c == ‘1’){///////////////////////////////////////////////En fonction de la suite on envoie le message radio qui correspond.
Serial.println(“1 “); // On signale le début de l’envoi
client.stop();////on arrête la communication
}
if(c == ‘2’){

client.stop();
}
if(c == ‘3’){
Serial.println(“3”); // On signale le début de l’envoi
vw_send((uint8_t *)arroser, strlen(arroser)); // On envoie le message
vw_wait_tx(); // On attend la fin de l’envoi

client.stop();////on arrête la communication
}
if(c == ‘4’){
Serial.println(“4”); // On signale le début de l’envoi
vw_send((uint8_t *)eau1, strlen(eau1)); // On envoie le message
vw_wait_tx(); // On attend la fin de l’envoi

client.stop();////on arrête la communication
}
if(c == ‘5’){
Serial.println(“5”); // On signale le début de l’envoi
vw_send((uint8_t *)eau2, strlen(eau2)); // On envoie le message
vw_wait_tx(); // On attend la fin de l’envoi
client.stop();////on arrête la communication
}
if(c == ‘6’){
Serial.println(“6”); // On signale le début de l’envoi
vw_send((uint8_t *)eau3, strlen(eau3)); // On envoie le message
vw_wait_tx(); // On attend la fin de l’envoi
client.stop();////on arrête la communication
}
if(c == ‘7’){
client.stop();////on arrête la communication
}
if(c == ‘8’){
client.stop();////on arrête la communication
}
if(c == ‘9’){
client.stop();////on arrête la communication
}
}
if (c == ‘n’) {
currentLineIsBlank = true;
}
else if (c != ‘r’) {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();////on arrête la communication
}
}

Vous pouvez télécharger le code ici:

Etape 4 : Programmation plante

Pour cette partie je vais vous expliquer le code ligne par ligne le plus clairement possible afin que vous puissiez le modifier facilement.

#include //on lance la librairie radio

#include //on lance la librairie motor

AF_DCMotor pompe(2);//on indique que la pompe est sur la borne 2 du shield
char msg;//variable qui va contenir les messages reçus par radio
int qt;//variable qui va définir la quantité d’eau par arrosage
void setup() {
vw_setup(2000); // initialisation de la librairie radio à 2000 bauds
vw_rx_start();//on démarre la réception
Serial.begin(9600);//on démarre la liaison serie
pompe.setSpeed(150);//on régle le débit d’eau de la pompe (à modifier en fonction de la longueur de tuyau, son épaisseur …

}
void loop() {
uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau
if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
{ Serial.println(“received”);//on informe par la voie série
if (vw_get_message(buf, &buflen)) // On copie le message, qu’il soit corrompu ou non
{

for (byte i = 0; i < buflen; i++) // S'il n'est pas corrompu on l'affiche via Serial

msg = buf[i];//on copie le message dans la variable msg

}
}
if (msg == 'a') {//si msg = "a" alors…
arroser();//…on appelle la fonction arroser()
}
if (msg == 'b') {//si msg = "b" alors…
qt = 1;//on régle le temps d'arrosage au minimum
arroser();//et on arrose
}
if (msg == 'c') {//si msg = "c" alors…
qt = 2;//on régle le le temps d'arrosage au milieu
arroser();//et on arrose
}
if (msg == 'd') {//si msg = "d" alors…
qt = 3;//on régle le temps d'arrosage au maximum
arroser();//et on arrose
}
msg = 86514513165135413641563454;//on change le message pour ne pas arroser en boucle
}

void arroser() {//si on appelle la fonction arroser…
if(qt = 1){//si qt = 1 alors…
pompe.run(FORWARD);//on active la pompe…
delay(5000);//…on attend 5 secondes…
pompe.run(RELEASE);//…puis on éteint.
}
if(qt = 2){
pompe.run(FORWARD);//on active la pompe…
delay(8000);//…on attend 8 secondes…
pompe.run(RELEASE);//…puis on éteint.
}
if(qt = 3){
pompe.run(FORWARD);//on active la pompe…
delay(15000);//…on attend 15 secondes…
pompe.run(RELEASE);//…puis on éteint.
}

}

Vous pouvez télécharger le code ici:

Etape 5 : Le site web

Si vous avez déjà un site web pour votre maison ou sur lequel vous souhaitez intégrer la possibilité de contrôler l’arrosage de votre plante vous avez juste à ajouter un lien vers votre adresse Ip interne: 80/$ et le numéro de la commande. Attention ceci ne fonctionne que si vous êtes sur le même réseau que le système ! Sinon veuillez voir l’étape n°5.
Si vous n’avez pas de site web vous pouvez utiliser jimdo qui vous permettra de créer une zone protégée par mot de passe .
Pour créer le site je laisse l’assistance de démarage jimbdo vous expliquer ….elle le fait très bien ;).

Etape 6 : Controler a distance(Ouverture des ports).

Je vais faire cet exemple en utilisant l’interface de bouygues-telecom mais cette manipulation est similaire chez tous les opérateurs.
Tout d’abord rendez-vous sur l’interface de votre box à l’adresse suivante:
Bouygues-Telcom: 192.168.1.254
Free: mafreebox.freebox.fr
Orange: 192.168.1.1
SFR: 192.168.1.1
Numericable: http://192.168.0.1
Pour tous les autres je vous laisse faire la recherche.
Ensuite aller sur la page redirection des ports
Puis dans NAT/PAT.
Créer une nouvelle règle :
non: comme vous voulez
Protocole: TOUS
Port externe: au choix
Équipement du réseau local: wiznet (s’il ne s’agit du même que moi vous devrait regarder en fonction de l’Ip) port interne: 80
Ne pas toucher au reste (sauf si vous savez ce que vos faites) et valider.
Voilà… Désormais votre (vos) plante(s)est connectée au monde. Vous n’aurez plus qu’à changer votre adresse Ip devant le/$… par celle que vous pouvez trouver sur monip com.suivi de :le port choisi en port externe

Etape 7 : Conclusion

Pour finir vous n’avez plus qu’à installer le tout sous la forme que vous souhaitez que ce soit un petit arroseur de plantes aromatiques dans votre cuisine ou,avec une pompe plus grosse, un arroseur pour votre pelouse relié a un réservoire d’eau de pluie (pensons à notre planète) c’est a vous de jouer et n’hesitez pas à me dire comment vous comptez l’installer. Vous pouvez aussi le sortir de l’arrosage en automatisant votre portail ou n’importe quoi d’autre.
En tout cas je vous laisse un modèle 3D qui représente la façon dont je l’ai installé avec en bleu le réservoire d’eau, en vert les plantes et en violet l’électronique.
https://tinkercad.com/things/loXMopoyzKI

Vous pouvez aussi rajouter des capteurs comme un capteur de luminosité, de température, humidité … qui seront actualisés sur votre site web.
Bonne chance à vous.
N’hesitez pas à me poser des questions en commentaire.

Ces tutoriels devraient vous plaire

vignette fabrication de circuits imprimés facile
fabrication de circuits imprimés facile
vignette Connecter un  écran LCD en I2C
Connecter un écran LCD en I2C
vignette Arduino Uno - Capteur d'humidité au sol.
Arduino Uno - Capteur d'humidité au sol.
avaatar eruam

eruam

Suivre

Vues: 8137
Mis en favoris: 2

Découvrez d'autres tutoriels de

eruam

Découvrez tous les tutoriels partagés sur Oui Are Makers

Powered by Oui Are Makers