En utilisant le module DS 3231 RTC et un module de mesure de température, je voudrais enregistrer l’heure à laquelle la température est comprise entre 20 et 30 ° c dans la journée.
Je ne sais pas comment faire pour prendre l’heure du module, des idées ?
As tu regardé les exemples fournis avec avec les différentes librairies pour le DS3231 ?
Avant de prendre l'heure, il faut la régler.
Comme tu ne précise pas ton niveau, tu peux voir un exemple donné par le simulateur wokwi
Si cela te parait trop compliqué, n'hésite pas à poser des questions.
la question manque de précisions :
quelle carte arduino ? quel module de temperature ?
enregistrer sur quel support ? eeprom interne, externe, sd,
ce sont LES heures:min:sec auxquelles la temp >20<30 que faire si temp est 19 puis repasse a 20 plusieurs fois par jour, et si temp est 31 ?
J'ai déjà installé et réglé la librairie " RTClib.h ".
J'utilise un arduino uno R3.
Module DHT11 pour la T° c.
J'enregistre les données sur un microSD card adapter.
Les T° que je vise en réalité sont entre 22 et 28 ° c, 20 ° c a 30 ° c c'est justement pour pallier au fluctuation de T° c .
C'est un projet que je me lance pour mieux appréhender et interagir avec les modules DS 3231 RTC et micro sd card adapter.
Tu n'a pas trouver dans les exemples de la librairie ou l'exemple wokwi que j'ai donné, qu'il fallait utiliser la fonction "now"?
Ou tu as un problème plus complexe ?
Pour le moment j'essai de faire la communication entre le dht 11 et le micro sd card mais je n'arrive pas à faire remonter la température.
Je vous copy le code :
#include <SPI.h> //for the SD card module, ok
#include <SD.h> // for the SD card, ok
#include <DHT.h>
#define Type DHT11
int sensePin =2;
DHT HT (sensePin,Type);
float humidity;
float tempC;
int dt = 5000;
const int chipSelect = 10; // pin de la carte SD pour enregistrer les infos
// Create a file to store the data, ok
File myFile;
int Vresistor = A0; // Potentiometer is connected with the Analog pin A0
int Vrdata; // A variable used to store the Potentiometer value
void setup() {
//initializing Serial monitor
Serial.begin(9600); // Baud rate
HT.begin ();
delay (dt);
// setup for the SD card, toujours ainsi
Serial.print("Initializing SD card...");
if(!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
//open file
myFile=SD.open("DATA.txt", FILE_WRITE);
// if the file opened ok, write to it:
if (myFile) {
Serial.println("File opened ok");
// print the headings for our data
myFile.println("Logging Variable sensePin Values");
}
myFile.close();
}
void LoggingsensePin() {
tempC = digitalRead(sensePin); // sensePin
Serial.println(tempC); // print it on the Serial monitor for debugging purposes. You can Commnent this line.
myFile = SD.open("DATA.txt", FILE_WRITE); // opens the fils DATA, which is the text file, for writing the Pot value.
if (myFile) {
myFile.print("Mesure température : ");
myFile.print(",");
myFile.print(tempC);
myFile.println();
}
myFile.close();
}
void loop() {
LoggingsensePin();
delay(dt);
humidity=HT.readHumidity();
tempC=HT.readTemperature();
Serial.print ("Humidity: ");
Serial.print (humidity);
Serial.print (" Temperature ");
Serial.print (tempC);
Serial.print (" C ");
delay (dt);
}
Il y a plusieurs "Logging Variable sensePin Values", est-tu sûre que le dernier correspond à la dernière exécution de ton programme ?
surtout que sur ton moniteur on voit uniquement deux affichages des données, alors qu'il y en a plein dans ton fichier.
Quel est la taille de ton fichier ?
Pourquoi dans ton fichier tu n'a pas systématiquement un retour chariot ?
Peut tu effacer ton fichier et faire un test avec deux prise de température ?
Ton programme écris très bien la température mesurée, sur la carte SD, tu lis un port digital, certainement "en l'air" et qui donne toujours 1, le coupable est ici tempC = digitalRead(sensePin); // sensePin
J'ai attribué une valeur bidon à tempC soit 34.12 et ça donne:
J'ai pourtant bien assigné le dht 11 (int sensePin) au port digital 2. J'ai aussi créer la variable tempC qui prendra la valeur lu par un digitalRead du sensePin.
Ensuite j'importe (myFile.print(tempC) la valeur lu par l'arduino sur le fichier "DATA" qui est au préalable ouvert par un "myFile=SD.open("DATA.txt", FILE_WRITE);"
ça me semble correct.
Je ne sais pas comment appliquer ce que tu m'a dit #jpbbricole
Voici mon erreur :
Je pensais pouvoir utiliser la variable "tempC" pour écrire la température dans le fichier DATA mais c'est faux. Cela marche uniquement pour le "Serial.print du moniteur série.
La valeur température se cache derrière HT.readTemperature() !
Donc avec myFile.print (HT.readTemperature()) ça fonctionne.
Non ce n'est pas faux, comme te l'a indiqué @jpbbricole si tu fait tempC = DigitalRead, tempC ne peut avoir que la valeur 0 ou 1.
si tu n'avait pas fait tempc = digitalRead, ta variable aurait eut la valeur que tu lui avait affecté avec "tempC=HT.readTemperature();"
Du coup je n'ai pas regardé en détaille ton programme, comment cela ce fait-il que dans le moniteur série tu ais que deux lignes de température, pour une trentaine de "Mesure température"?