[Conseil] data loger SD Card + PIR

Bonjour et bravo tout d abord pour votre site plein de beau projet à explorer

je vous expose mon cas d’école,qui est en fait une solution pour un ami qui se lance dans une nouvelle activité.
Alors qu’on lui propose une solution technologique à plus de 1000 euros(une sorte de tapis sensor), il m a demande si je pouvais lui faire cela avec un arduino UNO, etant plutot oriente systeme et reseau et non un programmeur chevronné je me heurte à quelques problèmes.
j aimerais pouvoir inscrire sur une sd card le nombre de personne détecté toutes les heures grace a un PIR sensor et pouvoir interroger à distance grâce à un module gsm/3g cette sdcard ou envoyer un sms sur un telephone portable journalierement.
je pense que technologiquement cela doit etre faisable mais etant novice dans ce language j avoue que pour l instant tous mes essais sont infructueux,

le materiel utilise est un arduino UNO
1 data logger avec lecteur de carte sd et une pile pour RTC
1 PIR sensor (detecteur de proximité)

je vous mets mon code qui fonctionne actuellement pour la detection de personne

/*programme permettant de compter le nombre de personnes qui passent en inscrivant
la date et l heure sur une SDcard. les données devront etre consultable à distance*/

#include <Wire.h>
#include <RTClib.h>
#include <SD.h>
RTC_DS1307 RTC;

//temps de calibration du PIR à l'environnement
int calibrationTime = 10;

int ledPin = 13;                // definition du pin pour la led
int inputPin = 2;               // choix dela pin d entree pour le PIR
int pirState = LOW;             // au demarrage nous nous assurons que rien n est detecte
int val = 0;                    // variable pour lire le status de la pin




void setup() {
pinMode(ledPin, OUTPUT);      // declare la led comme sortie
pinMode(inputPin, INPUT);     // declare le pir comme entree
Serial.begin(9600);
Wire.begin();
RTC.begin();

  
  


  // following line sets the RTC to the date & time this sketch was compiled
  //RTC.adjust(DateTime(__DATE__, __TIME__));

Serial.print("calibration du PIR en cours ");
for(int i = 0; i < calibrationTime; i++){
  Serial.print(".");
  delay(1000);
}

}

void loop(){
val = digitalRead(inputPin);  // lire la valeur d entree
Serial.println(val);
if (val == HIGH) { // regarde si la valeur d entree est HIGH
  digitalWrite(ledPin, HIGH);  // on allume la led

if (pirState == LOW) {
    DateTime now = RTC.now();
  Serial.print("Une personne detecte ! ");
  Serial.print("A ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.print(" Le ");
  Serial.print(now.day(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.year(), DEC);
  Serial.println("");


  Serial.println();
  pirState = HIGH;
  }
} else {
  digitalWrite(ledPin, LOW); // on eteind la led
  if (pirState == HIGH){
    // on eteind
    Serial.println("Fin de la detection!");
    // on veut juste le changement de sortie pas d etat
    pirState = LOW;
  }
}    
  delay(3000);
}

Mon probleme maintenant c est qu apres de nombreux essais je n arrive pas a inscrire le nombre de personnes qui passent dans la sdcard avec la commande logfile.println

le but etant que l arduino envoit un message sous forme de sms ou de mail journalier avec le nombre de personnes comptés

j espere avoir avoir etait assez clair, si ce n est pas le cas je m excuse car je ne suis pas tres a l aise avec les forums

Merci de m’avoir lu

Bonjour, Il faut mettre ton code entre balises. Voir ICI

Désolé c est rectifié Merci

Bonjour argouel,

J'étais curieux et j'ai gogglé la fameuse fonction logfile.println et j'ai trouvé ce lien qui donne un exemple utilisant "logfile". Ce n'est probablement pas l'exemple que vous avez utilisé, mais je vais me servir de lui dans mon explication.

En fait logfile.println c'est la commande d'inscription dans une variable de type fichier nommé "logfile". Cette variable et ce fichier il faut les déclarer avant de les utiliser et vérifier d'abord que le fichier existe sur la carte. En utilisant "Serial.println" comme dans le script que vous donné, le texte est inscrit sur le moniteur série et affichable à l'écran.

Votre script ne fait aucunement mention de l'utilisation de carte SD, j'imagine qu'il reste des modifications à faire. Pour alléger le code je vous suggère d'insérer d'abord le texte à inscrire dans une variable de type "String" et ainsi par la suite vous pourrez l'utiliser pour l'inscrire au moniteur série et sur la carte SD sans avoir à dupliquer plusieurs ligne de code. Par exemple, pour une variable appelé "maString" :

Serial.println(maString); // Affichage au moniteur série logfile.println(maString); // Affichage sur la carde SD

Dans le lien voir le déclaration de la variable de type Fichier : "File logFile;" Amorçage de la carte SD : "SD.begin(pin#);" Voir cette documentation. Vérification de l'existance du fichier : "if (!SD.exists(filename)){ ..." Le nom du fichier "filename" étant déclaré préalablement. Ouverture du fichier pour inscription : "logFile = SD.open(filename, FILE_WRITE);" Fermeture du fichier en utilisant SD.close();

Bien sur, les noms de variables et de fichiers peuvent être changé pour quelque chose de plus "francophone".

En espérant que cela aura pu vous être utile.

Bonne chance et bonne continuité,

ST

bonjour, il manque des infos dans ton code. tu as dans l'ide, un exemple SD datalogger

après, tu peux initialiser plusieurs compteurs journalier semaine mois

une personne passe, ca incrémente les compteurs et inscrit dans le fichier les nouvelles infos au passage par exemple de 24h00 à 0h00:01, tu remets le compteur journalier à zéro après avoir envoyé les compteurs par sms. tu créé un nouveau fichier avec la date du rtc sur la SD et mêmes opérations pour le nouveau jour. etc...

après tu peux interroger le gsm via un code, DATE 17/06/16 qui va te renvoyer les données du fichier concerné. par contre, le laps de temps pour traiter le sms, lire le fichier et renvoyer les données, peut faire perdre des détections de passages.

Merci de vos réponses

effectivement le code n est pas complet...

@Supertesla je vais explorer votre piste, c est un peu plus clair la par rapport a la declaration des variables

@infoembarque effectivement je viens de découvrir les exemples dans l IDE cela va grandement m aider

je vous tiens au courant de la suite

Merci pour votre soutient