Pages: [1]   Go Down
Author Topic: Comment stocker et émettre des données sur de longues périodes?  (Read 678 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Je suis apiculteur à mes heures perdues. Malheureusement, avec mon travail je trouve difficilement le temps de suivre mes ruches régulièrement.
J’ai donc décidé de mettre au point un module me permettant de suivre l’évolution de mes ruches à distance ce qui me permettrait d’éviter des interventions sur mes rucher pour rien. Et également d’intervenir s’il y a urgence ou un vol…

Pour ce projet j’ai commencé le montage avec :
-   Arduino UNO
-   Shield gprs sim900 v2.0
-   1 cellule photosensible
-   4 capteurs  LM35
-   1 capteur DHT11

Concernant le code:
Attention, je ne suis pas un champion. J’ai suivi le max de tuto sur internet et survoler pas mal codes disponibles sur le net avec plein d’informations utiles. Bref je suis débutant.
J’ai don écrit mon code moi-même (j’ai bien galéré au début). Si quelqu'un a de bon conseilles à me donner pour l’améliorer je suis preneur.

L’idée est de relever les températures à des intervalles réguliers et de les envoyées par SMS régulièrement (toute les 5 ou6 heures).
Le principal dilemme est de faire poireauter le module entre chaque série de mesures (j’utilise la fonction millis() que je confronte à mon temps de reference « unsigned long tempsref » dans le code.

Concernant la prise des mesures, le stockage des données et l’envoie par sms tout est OK.

Le souci est le suivant :
Lorsque que j’indique un temps d’intervalle (tempsref) d’1 minute (60000) tout fonctionne et je reçois bien mes séries de mesures par sms régulièrement (trop même…).
Mais lorsque je passe mon temps d’intervalle à 1 heure (3600000) … plus rien ne se passe.

J’ai besoin d’aide, je ne trouve pas le problème.
J’espère avoir donné suffisamment de précisions.
Je joins mon code ci-dessous.

Code:
#include <SoftwareSerial.h>   
SoftwareSerial mySerial(7, 8); // pin de communication du shield gprs
#include "DHT.h"     // biblio  capteur DHT
#define DHTPIN 2     // pin ou est connecté le capteur DHT11
#define DHTTYPE DHT11 // definition type DHT
DHT dht(DHTPIN, DHTTYPE);
//declare variables
int tempPin[] = {0,1,2,3}; //definition des broches de capteurs
int temp[4]; //definition des variables dediee aux temperatures
int photocellPin = 4; //definition broche cellule photosensible ( en pull down)
int photocellReading; //definition variable photosensible

const char colone = 7; //(constante indiquant le nombre de colone du tableau
const char ligne = 5;   // constante indiquant le nombre de ligne (du coup le nombre de prises de mesures)
int mesures [colone][ligne];  //tableau de stockage des prises de mesures (temperature et autres)

int i; // pour le decompte des boucles for
int j; // pour le decompte des prises de mesures
int t; // date estimée

unsigned long tempsref = 3600000; // 3600000
unsigned long tempsfin = tempsref; //variable pour confrontation millis

void setup() {
  Serial.begin(9600); //ouverture des ports serie et shield
mySerial.begin(19200);
dht.begin();

int j=1;
}

void loop() {

  // condition d'enregistrement des mesures en fonction du decompte du temps
if (millis() > tempsfin) {
       for (i = 0; i <4; i = i + 1)
        {
            analogRead (tempPin [i]);
            delay (10);
            temp[i] = (5.0 * (analogRead(tempPin[i]))* 100.0)/1024.0;;  //ajustement et mise en variables "temp[]" des mesures "tempPin[]"
          }

            photocellReading = analogRead(photocellPin); // mesure photosensible dans variable

             float h = dht.readHumidity();  // mesure d'humidité et temp du capteur DTHT
             float t = dht.readTemperature();
   
            // stockage des mesure ligne par lignes
            mesures [0][j] = photocellReading; mesures [1][j] = temp[0]; mesures [2][j] = temp[1]; mesures [3][j] = temp[2]; mesures [4][j] = temp[3]; // stockage des mesures dans la ligne 1 du tableau "mesures[][]"
            mesures [5][j] = t; mesures [6][j] = h;
         
       j=j++;   // incrementation du decompte de ligne pour les prochaines mesures
       tempsfin = tempsfin + tempsref; // remise a niveau du temps de referrence pour le decompte du temps
     }
 
 
  // condition d'envoie du sms
if (j == ligne) {   
   
 // activation du gprs par impulsion sur la pin 9 (pin dediée pour cette fonction sur le shield)
     delay (3000);
      pinMode(9, OUTPUT);
      digitalWrite(9,LOW);
      delay(1000);
      digitalWrite(9,HIGH);
      delay(2000);
      digitalWrite(9,LOW);
      delay(20000);

//ecriture et envoie du message
     mySerial.print("\r");   // Envoyer un retour à la ligne <CR>
      delay(1000);                    // Attendre une seconde pour que le modem soit ok
      mySerial.print("AT+CMGF=1\r");  // indication du type de sms :  SMS en mode texte
      delay(1000);      // Attendre une seconde pour que le modem soit ok

      mySerial.print("AT+CMGS=\"+262692054680\"\r");   // indication du numero d'envoie
        delay(1000);     // Attendre une seconde pour que le modem soit ok
   
   //contenue du message   
      mySerial.print("l/t1/t2/t3/t4/T/H\r");     
 
       for (j = 0; j <ligne; j = j + 1)
          {for (i = 0; i <colone; i = i + 1)
             {
                 mySerial.print (mesures [i][j]);
               if (i<colone-1) {mySerial.print("/");}
                        } 
                     
                    mySerial.println (); 
                  delay(1000);
                }
     
   
      mySerial.write(26);  // fin de texte du SMS

    delay (10000);
    mySerial.print ("AT+CPOWD=1\r"); //extinction du gprs par commande
    delay (1000);
   
    j=1; // remise du compteur de ligne au niveau initial
   }
}
   

J’évite un maximum d’utiliser la fonction delay car j’ai l’intention d’ajouter des interruptions par la suite.
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3612
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Moi je l'écrirais comme ça:
Code:
unsigned long tempsref = 3600000ul; // 3600000
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci karma, je teste  ca ce soir.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sa ne marche pas, le problème est toujours le même smiley-cry .
la modification améliore toute fois mon code, merci.
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

merci karma, je teste  ca ce soir.

On s'appelle tous comme ça  smiley-lol
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

lol, effectivement. ben au moins jsuis sur de ne pas me tromper  smiley-wink .
toutes mes escuses pour fdufnews.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sa coince toujours, personne n'a une petite idée?
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3735
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le mieux c'est de rester branché au PC et de debuger par le port série avec des Serial.println(). Par exemple en suivant l'évolution des variables clés comme tempsfin
Logged


Pages: [1]   Go Up
Jump to: