
I.PRÉSENTATION
Les pluies sont incontournables et benefiques pour notre ecosysteme et environnement;mais parfois elles deviennent tres devastatrices pour les investissements et menacent des economies locales.C est pourquoi il est neccessaire de se proteger contre ces intemperies a savoir les innondations,l exces d eau dans certaines surfaces agricoles ou encore la presence d eau dans un domicile ou bureau.Pour cela nous proposons un systeme de detection de pluies et innondations avec systeme alerte et envoi de sms aux concernes pour leurs eviter d etre dans ces situations illustres en image:
C systeme peut etre detourne et utilise pour:
Dans ce projet, nous allons realiser un systeme d alerte permettant d envoyer un sms ou un appel a un individu lui informant sur l etat de son domicile,ferme,plantation etcc... .Pour cela , il nous faudra:
II. MATERIEL UTILISE ET COUT
Cliquez sur les images pour avoir les prix a moindre cout dans notre boutique en ligne
III. LOGICIELS ET BIBLIOTHÈQUES UTILISÉES
1 . Logiciels
2. Bibliothèques
3. Extras
Une carte sim avec credit de communication (au minimal un forfait sms par mois ou par semaine)
IV. FONCTIONNEMENT
1. Principe
Le principe est le suivant :
la carte arduino ( microcontrolleur ) est utilisée pour piloter le systeme ,controler et envoyer en cas de neccessite des informations du capteur de pluie au client par sms (proprietaire ou personnel du domicile,ferme ou plantation ) via le module gsm embarque au montage electronique . Le récepteur et emetteur GSM est utilisé pour traiter les sms du client qui sont generalement des requetes sur l etat du systeme par exemple on peut avoir : " etat systeme " ," energie off ",'' energie on " ;et envoyer des notifications sms au client en cas de danger.
Le module gsm utilise est le modele A7 du fabricant AI Thinker.
C est un module trois en un : il integre le GPS , le GPRS et le GSM dans une seule puce;ce qui rend sa configuration au demarrage differente de celle des modules gsm standards . Au demarrage on doit choisir le mode dans lequel on souhaite fonctionner ( soit le mode gps ou le mode gprs/gsm).Pour valider le mode gsm on doit effectuer la commande at AT+CMGF=1
Nous avons des leds pour illustrer l etat du systeme:
-la led rouge indique que le module gsm est en marche
-la led verte ( clignote ) indiquant ainsi que le systeme en bon etat ( pas d alerte)
-la led jaune indique que le systeme est en etat critique ( innondation ou pluie detectee)
2. schémas
Les connexions de circuit de ce projet sont simples et illustrées dans l'image ci-dessous.
carte arduino uno | module GPS GSM A7 Ai thinker et autres |
11 | PWR_KEY |
GND | GND |
VCC | V_BAT |
4 | U_TXD |
5 | U_RXD |
10 | led_vert //mode normal |
9 | led_rouge // module en marche |
8 | led_jaune //etat critique |
7 | lampe test // remplacer par relais de 5v qui interumpt l energie |
12 | buzzer |
A0 | broche analogique du capteur de pluie |
6 | broche numerique du capteur de pluie |
3.Rappel sur le capteur de pluie
La plaque du detecteur est la partie qui doit être exposée à la pluie. Lorsque l'eau tombe sur la plaque du detecteur, les deux pistes entrent en cours jus. Ainsi, plus l'humidité et les goutelettes d'eau seront présentes sur la plaque, plus la resistance entre les bordes de celle-ci tombera.
La carte du comparateur s'occupe déjà d'alimenter la plaque et de filtrer le signal reçu a travers cette résistance. Il dispose d'une broche digitale (0 ou 1) et d'une broche analogique (0 a 1024) qui indique la quantité de conductivité (et donc d'eau reçue) sur la plaque du capteur. Cette carte expose aussi une entrée VCC (3 a 5V) et GND.
Certaines cartes de controle disposent d'un potentiométre pour régler la sensibilité de la sortir digitale. Mais ce qualibrage peut aussi être fait côté arduino avec la sortie analogique.
Ce capteur se comporte comme le ferai un simple potentiométre. En fonction de la grandeur que l'on veut mesurer, une resistance dans le capteur deviendra plus ou moins grande, et donc, peut être mesurée via n'importe quel pin analogique de l'arduino.
4.Schema
V. PROGRAMME
//#include #include #include #include SoftwareSerial GSMmodule(4, 5); #include #include #define DEBUG true const int POWER_ON=11; const int lampPin = 7; const int LED_A7_ON=9; //led red const int MODE_NORMAL=10; //led green const int MODE_CRITIQUE=8; // led yellow const int BUZZER_SIRENE=12; // buzzer const int capteur_D = 6; const int capteur_A = A0; int val_analogique; unsigned long previousMillis = 0; const long interval = 200; unsigned long t1,t2,t3; int ledState = LOW; //TinyGPSPlus gps; //double latitude, longitude; int count1=0; String textMessage; // Variable to store text message String lampState; // Create a variable to store LED state Neotimer mytimer = Neotimer(1000); Neotimer mytimer2=Neotimer(1000);//apres 1 sec void setup() { Timer1.initialize(100000); Timer1.attachInterrupt( timerIsr ); attachInterrupt(0,reset_t0, RISING); Serial.begin(9600); GSMmodule.begin(9600); delay(1000);//initialize communication pinMode(POWER_ON, OUTPUT); pinMode(LED_A7_ON, OUTPUT); pinMode(MODE_NORMAL, OUTPUT); pinMode(MODE_CRITIQUE, OUTPUT); pinMode(BUZZER_SIRENE, OUTPUT); pinMode(3,OUTPUT); pinMode(capteur_D, INPUT); pinMode(capteur_A, INPUT); digitalWrite(POWER_ON, 1); digitalWrite(LED_A7_ON, 0); digitalWrite(MODE_NORMAL, 0); digitalWrite(MODE_CRITIQUE, 0); digitalWrite(BUZZER_SIRENE, 0); digitalWrite(3, 0); Serial.println("Demarrage du module A7 AI Thinker en cours ..."); delay(3000); digitalWrite(POWER_ON, 0); digitalWrite(LED_A7_ON, 1); delay(1000); //delay(10000); //baudrate(); Serial.println("Demarrage du module A7 AI Thinker OK"); //sendData("AT+RST=1 ",1000,DEBUG); //delay(100); sendData("AT+CMGF=1\r",1000,DEBUG); // AT command to set GPSmodule to SMS mode delay(100); // Set delay for 100 ms sendData("AT+CNMI=2,2,0,0,0\r",1000,DEBUG);// Set module to send SMS data to serial out upon receipt delay(100); Serial.println(" module reset ok ..."); //Serial.println("Mode GPS OK"); } void loop() { if(mytimer.repeat(2)){ Serial.println("GSM mode start..."); //Print test in Serial Monitor sendData("AT+CMGF=1\r",1000,DEBUG); // AT command to set GPSmodule to SMS mode delay(100); // Set delay for 100 ms sendData("AT+CNMI=2,2,0,0,0\r",1000,DEBUG);// Set module to send SMS data to serial out upon receipt delay(100); Serial.println(count1); ++count1;} init_serial(); capteur(50); //apres 5 sec de pluies on envoi le sms GSM_WAIT_COMMAND(); //On_Off(MODE_CRITIQUE,100); //Serial.println(t1); } void capteur(long timex){ val_analogique = analogRead(capteur_A); //Serial.print("Analog value : "); //Serial.println(val_analogique); //Serial.println(""); //delay(500); if(digitalRead(capteur_D) == LOW) { //Serial.println("presence d eau"); //digitalWrite(MODE_CRITIQUE, 1); digitalWrite(MODE_NORMAL, 0); //On_Off(MODE_CRITIQUE, 100); On_Off(BUZZER_SIRENE, 100); // programme d interruption digitalWrite(3, 1);// qui remet t1 a zero a travers //3 connectee a la broche 2 d interruption digitalWrite(MODE_CRITIQUE, 1); // apres 10s on envoi le sms au client if(t1>timex){ if(mytimer2.repeat(1)){ sendSMS("etat critique : presence d eau ,niveau :"+ String(val_analogique));} } } else { //Serial.println("absence d eau"); digitalWrite(BUZZER_SIRENE, 0); On_Off(MODE_NORMAL, 300); digitalWrite(MODE_CRITIQUE, 0); digitalWrite(3, 0); mytimer2.repeatReset(); } } void init_serial() { if (Serial.available() > 0) GSMmodule.write(Serial.read()); if (GSMmodule.available() > 0) Serial.write(GSMmodule.read()); if (GSMmodule.available() > 0) { textMessage = GSMmodule.readString(); Serial.print(textMessage); delay(10);} } String sendData(String command, const int timeout, boolean debug) { String response = ""; GSMmodule.println(command); long int time = millis(); while( (time+timeout) > millis()) { while(GSMmodule.available()) { char c = GSMmodule.read(); response+=c; } } if(debug) { Serial.print(response); } return response; } void sendSMS(String message) { //mytimer2.repeatReset(); // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS - for example +237 is international code for Cameroon GSMmodule.print("AT+CMGS = \"+237680606206\"\r"); //GSMmodule.print("AT+CMGS = \"+237683039865\"\r"); delay(100); // Send the SMS GSMmodule.print(message); delay(100); Serial.println(message); // End AT command with a ^Z, ASCII code 26 GSMmodule.println((char)26); delay(100); GSMmodule.println(); // Give module time to send SMS delay(5000); } void On_Off(const int ledPinx,const long intervalx){ unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= intervalx) { previousMillis = currentMillis; if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } digitalWrite(ledPinx, ledState); } } void GSM_WAIT_COMMAND(){ if ((textMessage.indexOf("On") >= 0)||(textMessage.indexOf("disjoncteur on") >= 0)) { // Turn on relay and save current state digitalWrite(lampPin, HIGH); lampState = "ON";textMessage = ""; String message = "Votre disjoncteur est " + lampState; sendSMS(message); } if ((textMessage.indexOf("Off") >= 0)||(textMessage.indexOf("disjoncteur off") >= 0)) { // Turn off relay and save current state digitalWrite(lampPin, LOW); lampState = "OFF";textMessage = ""; String message = "Votre disjoncteur est " + lampState; sendSMS(message); } if ((textMessage.indexOf("etat systeme") >= 0 )||(textMessage.indexOf("state") >= 0)) { if (digitalRead(lampPin) == HIGH ) {lampState = " EN MARCHE ";} else {lampState = " EN ARRET ";}; String message = "Votre disjoncteur principal est " + lampState +" et le capteur de pluie indique : "+ String(val_analogique); sendSMS(message); textMessage = ""; } } void timerIsr() { t1=t1+1; t2=t2+1; t3=t3+1; } void reset_t0() { //a=1; t1=0; }
VI. LA CONCRÉTISATION
1.images de realisation
2.Videos de realisation