Detecteur de pluie , innondations  avec

Detecteur de pluie , innondations avec alerte sms

Publish by : arielk The : 16/02/2021 at 09h 32min 55s
0

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:

  • le controle d arrosage a distance des pepinieres d une plantation par des ouvriers qui font souvent du n importe quoi,
  • le controle  d arrosage a distance  des plantations de culture marecheres.

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:

  1. une carte arduino uno,
  2. un module gsm ,
  3. des leds et resistances pour afficher l etat du systeme
  4. un buzzer pour alerter les personnels proches du site , 
  5. une plaque a essai ,
  6. les jumpers arduino pour le montage electronique.
  7. Capteur de pluie

II. MATERIEL UTILISE ET COUT 

materiel utilise

Cliquez sur les images pour avoir les prix  a moindre cout dans notre boutique en ligne

liste du materiel avec cout

Matériel

Image

prix

 carte arduino uno

8000

 Module GSM GPS A7 (AI THINKER)               

16000

 Plaque à essai

1500

 Leds

100

 cavaliers arduino (mâle mâle)

-----
 cavaliers arduino (mâle femelle) 500
resistances de 330 ohms 100
buzzer 500
Capteur de pluie 2500 
Batterie LIthium 3000 mah 3500
    32700 FCFA

 

III. LOGICIELS ET BIBLIOTHÈQUES UTILISÉES

1 . Logiciels

  • IDE Arduino

2. Bibliothèques

  • tiny gps ++ .h
  • timerOne .h
  • neotimer .h

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)

Detecteur de pluie avec alerte gsm

2. schémas

Les connexions de circuit de ce  projet sont simples et illustrées dans l'image ci-dessous.

connexion arduino uno et module a7 AI Thinker
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 

 

schema detecteur de pluie et alerte

detecteur de pluie et aletre


 

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

detecteur de pluie avec arduino et alerte sms

 

   

2.Videos de realisation