Bonjour à tous,
Je suis novice dans ce domaine et je n’ai encore jamais publié ici, excusez-moi si je dis des bêtises ou si je n’ai pas correctement utilisé le forum.
Dans le cadre d’un projet étudiant, je travaille sur la mise en place d’un système de mesure météo (température, humidité, …). Je travaille sur un Arduino Uno avec un shield sur lequel j’ai installé 2 capteurs SHT10, 1 capteur BME680 et 1 capteur SGP30. J’ai branché les capteurs BME680 et SGP30 en I2C. Les fils « data » et « clock » des deux sondes SHT10 sont branchés respectivement sur les broches 9 et 3 pour l’une et 5 et 6 pour l’autre. Tous les capteurs sont branchés sur 5 Vcc.
J’ai fait un premier programme qui me permet de visualiser les valeurs des 4 capteurs sur le moniteur série. Celui-ci fonctionne. J’ai ensuite essayé d’ajouter la date et l’heure avec la RTC PCF8523 du shield et d’enregistrer toutes ces données sur la carte SD du shield. J’arrive à faire afficher la date, l’heure et les données des capteurs sur le moniteur série sans les enregistrer sur la carte SD. J’arrive à enregistrer les données des capteurs sur la carte SD sans faire fonctionner la RTC. Mais je n’arrive pas à tout faire fonctionner correctement en même temps. Lorsque je lance le programme complet, le moniteur série affiche « error opening filename ».
J’ai tenté de nombreuses choses sur le programme mais je n’ai pas encore réussi à trouver une solution.
Quelqu’un aurait-il une idée de qui ne va pas, de ce que je n’ai pas correctement fait/ce qu’il faudrait que je rajoute ou modifie ? Je suis preneuse de tout conseil !
Merci d’avance pour votre aide !
Mon programme est le suivant :
[code]
#include <Wire.h>
#include "Adafruit_SGP30.h"
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
#include <Arduino.h>
#include <SHT1x.h>
#include <SD.h>
#include <RTClib.h>
Adafruit_SGP30 sgp;
int counter = 0;
uint32_t getAbsoluteHumidity(float temperature, float humidity) {
// approximation formula from Sensirion SGP30 Driver Integration chapter 3.15
const float absoluteHumidity = 216.7f * ((humidity / 100.0f) * 6.112f * exp((17.62f * temperature) / (243.12f + temperature)) / (273.15f + temperature)); // [g/m^3]
const uint32_t absoluteHumidityScaled = static_cast<uint32_t>(1000.0f * absoluteHumidity); // [mg/m^3]
return absoluteHumidityScaled; }
Adafruit_BME680 bme;
#define SEALEVELPRESSURE_HPA 1013.25
SHT1x sht1(9, 3); //(data pin, clock pin)
SHT1x sht2(5, 6); //(data pin, clock pin)
File dataFile;
const int sdCardPinChipSelect = 10;
RTC_PCF8523 RTC;
void setup() {
//SGP30
Serial.begin(9600);
while (!Serial);
Serial.println("SGP30 test");
if (! sgp.begin()){
Serial.println("SGP30 not found");
while (1);
}
//BME680
Serial.begin(9600);
while (!Serial);
Serial.println("BME680 test");
if (!bme.begin()) {
Serial.println("BME680 not found");
while (1);
}
//Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
//SHT10
Serial.begin(9600);
Serial.println("SHT10 test");
//SD
Serial.begin(9600);
while (!Serial);
Serial.print("Initializing SD card...");
if (!SD.begin(sdCardPinChipSelect)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
//RTC
Wire.begin();
if (!RTC.begin()) {
Serial.println("RTC failed");
}
}
void loop() {
DateTime now = RTC.now();
if (! sgp.IAQmeasure()) {
Serial.println("Measurement failed");
return;
}
if (! sgp.IAQmeasureRaw()) {
Serial.println("Raw Measurement failed");
return;
}
if (! bme.performReading()) {
Serial.println("Failed to perform reading");
return;
}
/*baseline SGP30
counter++;
if (counter == 30) {
counter = 0;
uint16_t TVOC_base, eCO2_base;
if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) {
Serial.println("Failed to get baseline readings");
return;
}
Serial.print("****Baseline values: eCO2: 0x"); Serial.print(eCO2_base, HEX);
Serial.print(" & TVOC: 0x"); Serial.println(TVOC_base, HEX);
}*/
dataFile = SD.open("filename.csv", FILE_WRITE); //change "filename" by the name of your file
if (dataFile) {
Serial.println("Writing to filename.csv"); //change "filename" by the name of your file
dataFile.print(now.day(), DEC);
dataFile.print('/');
dataFile.print(now.month(), DEC);
dataFile.print('/');
dataFile.print(now.year(), DEC);
dataFile.print(" ");
dataFile.print(now.hour(), DEC);
dataFile.print(':');
dataFile.print(now.minute(), DEC);
dataFile.print(':');
dataFile.print(now.second(), DEC);
dataFile.print(";");
dataFile.print(sgp.eCO2);
dataFile.print(";");
dataFile.print(sgp.TVOC);
dataFile.print(";");
dataFile.print(sgp.rawH2);
dataFile.print(";");
dataFile.print(sgp.rawEthanol);
dataFile.print(";");
dataFile.print(bme.temperature);
dataFile.print(";");
dataFile.print(bme.humidity);
dataFile.print(";");
dataFile.print(bme.pressure / 100.0);
dataFile.print(";");
dataFile.print(bme.gas_resistance / 1000.0);
dataFile.print(";");
dataFile.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
dataFile.print(";");
dataFile.print(sht1.readTemperatureC());
dataFile.print(";");
dataFile.print(sht1.readHumidity());
dataFile.print(";");
dataFile.print(sht2.readTemperatureC());
dataFile.print(";");
dataFile.println(sht2.readHumidity());
dataFile.close();
Serial.println("done.");
}
else {
Serial.println("error opening filename.csv"); //change "filename" by the name of your file
}
delay(10000);
}
[/code]