Avion avec tracker GPS et détecteur de feux intégré

Je reposte suite à une supression de mon ancien sujet…

Je cherche à assembler plusieurs parties de programme pour n’en faire qu’un, à partir d’exemples de constructeurs provenant de mes modules.
Mes modules sont:

Une caméra thermique AMG8833 de chez ADAFRUIT
Un module GPS/GSM TEL0097 de DfRobot
Une carte arduino UNO

Le but final est d’être capable à partir de la caméra thermique, de détecter un seuil de température correspondant à une température critique (celle d’un feux), une fois ce seuil dépassé je voudrais initialiser mon module TEL0097 pour qu’il capte ses coordonnées GPS, et me les renvoient par SMS à mon numéro.
Aujourd’hui, j’ai pu modifier le programme de “PIXEL_Test” proposé par ADAFRUIT en exemple, qui n’est ni plus ni moins qu’une simple lecture en boucle des pixels de la caméra thermique, et les associe à une température.
Voici donc mon code actuel que je met cette fois entre balises…

#include <Wire.h>
#include <Adafruit_AMG88xx.h>

Adafruit_AMG88xx amg;

float pixels[AMG88xx_PIXEL_ARRAY_SIZE];

void setup() {
    Serial.begin(9600);
    Serial.println(F("AMG88xx pixels"));

    bool status;
    
    // réglage par défault
    status = amg.begin();
    if (!status) {
        Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
        while (1);
    }
    
    Serial.println("-- Pixels Test --");

    Serial.println();

    delay(100); // démarrage de la caméra
}

void loop() { 
    // boucle infini : lecture simple des pixels
    amg.readPixels(pixels);
   
    Serial.print("[");
    for(int i=1; i<=AMG88xx_PIXEL_ARRAY_SIZE; i++){
      Serial.print(pixels[i-1]);
      Serial.print(", ");
      if( i%8 == 0 ) Serial.println();

       //définition de SHOWTEMP qui va permettre de tenir compte des données de température affichées
    
#define SHOW_TEMP_TEXT

    //Valeur maximale pour notre cas
    
#define TEMP 60

int colorTemp;
    if(pixels[i] <= TEMP) colorTemp = pixels[i];                 //si la température des pixels est inférieure à MAXTEMP (60°C), on continue à lire simplement
    else 
    {
    Serial.println("C'EST TRES CHAUD ATTENTION!");                //Sinon, renvoit une erreur
     delay(1000);
    }
    
    }
    Serial.println("]");
    Serial.println();

    // délai 
    delay(10);
}


// fin de boucle, on recommence

Voilà, cette partie est fonctionnelle, mais je voudrait maintenant au lieu d’afficher un message quand je dépasse mon seuil, être capable d’initialiser le GPS et d’envoyer les coordonnées par SMS, ou au pire des cas être capable d’envoyer un simple SMS au dépassement du seuil.

Je met ici les codes exemples pour :

Acquérir les données GPS :

 #include <DFRobot_sim808.h>

  DFRobot_SIM808 sim808(&Serial);

  void setup() {
    //mySerial.begin(9600);
    Serial.begin(9600);

    //******** Initialize sim808 module *************
    while(!sim808.init()) {
        delay(1000);
        Serial.print("Sim808 init error\r\n");
    }

    //************* Turn on the GPS power************
    if( sim808.attachGPS())
        Serial.println("Open the GPS power success");
    else
        Serial.println("Open the GPS power failure");

  }

  void loop() {
     //************** Get GPS data *******************
     if (sim808.getGPS()) {
      Serial.print(sim808.GPSdata.year);
      Serial.print("/");
      Serial.print(sim808.GPSdata.month);
      Serial.print("/");
      Serial.print(sim808.GPSdata.day);
      Serial.print(" ");
      Serial.print(sim808.GPSdata.hour);
      Serial.print(":");
      Serial.print(sim808.GPSdata.minute);
      Serial.print(":");
      Serial.print(sim808.GPSdata.second);
      Serial.print(":");
      Serial.println(sim808.GPSdata.centisecond);
      Serial.print("latitude :");
      Serial.println(sim808.GPSdata.lat);
      Serial.print("longitude :");
      Serial.println(sim808.GPSdata.lon);
      Serial.print("speed_kph :");
      Serial.println(sim808.GPSdata.speed_kph);
      Serial.print("heading :");
      Serial.println(sim808.GPSdata.heading);
      Serial.println();

      //************* Turn off the GPS power ************
      sim808.detachGPS();
    }

  }

Envoyer un SMS :

#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>

//Mobile phone number,need to change
#define PHONE_NUMBER "06*******"  

//The content of messages sent
#define MESSAGE  " Bonjour tout le monde ! "

//#define PIN_TX    10
//#define PIN_RX    11
//SoftwareSerial mySerial(PIN_TX,PIN_RX);
//DFRobot_SIM808 sim808(&mySerial);//Connect RX,TX,PWR,

DFRobot_SIM808 sim808(&Serial);

void setup() {
  //mySerial.begin(9600);
  Serial.begin(9600);
 
 //******** Initialize sim808 module *************
  while(!sim808.init()) {
      delay(1000);
      Serial.print("Sim808 init error\r\n");
  }  
  Serial.println("Sim808 init success");
  Serial.println("Start to send message ...");

  //******** define phone number and text **********
  sim808.sendSMS(PHONE_NUMBER,MESSAGE); 
}

void loop() {
  //nothing to do
}

Voilà je pense avoir tout dit…Merci de votre aide, elle me serait la bienvenue… :slight_smile:

Bonjour,

Le AMG8833 est capable de détecter une source de chaleur à une distance de 5 ~ 7 mètres.

As-tu connaissance de cette limitation ?

Bonjour, oui ce n’est pas le problème, comme je l’avais expliqué dans mon ancien poste, il s’agît d’un projet de terminale, même si à la fin ça ne fonctionne pas, le but c’est d’expliquer pourquoi ça ne fonctionne pas et de montrer ce qu’on a réussi à chercher et à faire :slight_smile:

Aujourd’hui j’ai réussi à allumer une led au passage d’une source chaude au dessus du capteur, le dossier final est à rendre pour demain donc ça suffira amplement !
Voici le code, juste une simple modification du précédent…

#include <Wire.h>
#include <Adafruit_AMG88xx.h>

Adafruit_AMG88xx amg;

float pixels[AMG88xx_PIXEL_ARRAY_SIZE];

void setup() {
    Serial.begin(9600);
    Serial.println(F("AMG88xx pixels"));

    bool status;
    
    // réglage par défault
    status = amg.begin();
    if (!status) {
        Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
        while (1);
    }
    
    Serial.println("-- Pixels Test --");

    Serial.println();

    delay(100); // démarrage de la caméra
}

void loop() { 
    // boucle infini : lecture simple des pixels
    amg.readPixels(pixels);
   
    Serial.print("[");
    for(int i=1; i<=AMG88xx_PIXEL_ARRAY_SIZE; i++){
      Serial.print(pixels[i-1]);
      Serial.print(", ");
      if( i%8 == 0 ) Serial.println();

       //définition de SHOWTEMP qui va permettre de tenir compte des données de température affichées
    
#define SHOW_TEMP_TEXT

    //Valeur maximale pour notre cas
    
#define TEMP 35

int colorTemp;
    if(pixels[i] <= TEMP) colorTemp = pixels[i];                 //si la température des pixels est inférieure à MAXTEMP (35°C), on continue à lire simplement
    else 
    {
   const int L1 = 2;
   pinMode(L1, OUTPUT);
   digitalWrite(L1, HIGH); //allumer L1
   delay (100);
   digitalWrite(L1, LOW); //éteindre L1
   delay(100);
    }
    
    }
    Serial.println("]");
    Serial.println();

    // délai 
    delay(10);
}


// fin de boucle, on recommence
      //définition de SHOWTEMP qui va permettre de tenir compte des données de température affichées
   
#define SHOW_TEMP_TEXT

    //Valeur maximale pour notre cas
   
#define TEMP 35

se mettent en tout début de code et non dans le loop.

Bonjour, oui ce n’est pas le problème, comme je l’avais expliqué dans mon ancien poste, il s’agît d’un projet de terminale, même si à la fin ça ne fonctionne pas, le but c’est d’expliquer pourquoi ça ne fonctionne pas et de montrer ce qu’on a réussi à chercher et à faire :slight_smile:

excellente réflexion

Chouette projet.

Merci bien, c’est fini, on ne peut plus rien faire tout est rendu…Mais en tout cas ça fonctionne assez bien pour pouvoir faire une présentation :slight_smile:
Merci à vous en tout cas, je reviendrais très bientôt pour un autre projet qui n’a rien avoir :wink: