Bonjour,
j'ai fabriqué une station météo à base de UNO R3, elle est relié à un PC win7 par la liaison série j'ai bricolé un programme (c'est ma première programmation) qui tourne mais qui de temps en temps coupe la transmission des données (obligé de restarter le PC et de recharger le sketch)
je me demande si ma programmation est bien faite dans les règles de l'art ?
#include <RTClib.h> // Librairie du module heure date
#include "DHT.h" // Librairie capteur température humidité
#include "Seeed_BMP280.h" // Librairie capteur baromètrique
#define DHTPIN A0 // Capteur temperature et humidité connecté à la pin A0
#define DHTTYPE DHT22 // definit le type du capteur de temperature et humidite dans la librairie
DHT dht(DHTPIN, DHTTYPE);
BMP280 bmp280; // capteur de pression connecté à I2C
RTC_DS1307 RTC;
int compteurfm = 0; // compteur de fronts montants
float nbrtour = 0; // variable du nombre de tour
float cumul = 0; // variable du cumul des vitesses du vent
float vitessemoy = 0; // variable vitesse moyenne du vent
int vitesseaffiche = 0; // variable juste pour avoir un nombre entier
unsigned long compte_temps; // variable contenant le temps
int increm_temps = 1; // variable compteur de temps
int jour; // variable du jour
int mois; // variable du mois
int an; // varible de l'annee
int heure; // variable de l'heure
int mn; // variable de minute
char data1[12];
char data2[12];
// --- temporisation ----
unsigned long lastConnectionTime = 0; //Derniere connection au serveur en ms
const unsigned long postingInterval = 3600000uL; //délai entre chaque connection en ms (1h)
int direction = A3; //girouette sur entrée analogique 3
void setup () {
Serial.begin(2400);
Serial.println("L'Arduino envoie des données sur le port de COM3");
RTC.begin();
RTC.adjust(DateTime(__DATE__, __TIME__)); //Met à l'heure et date de l'ordinateur le sketch compilé
pinMode (2, INPUT);
attachInterrupt (0, anemometre, FALLING); // capteur de fronts descendants
bmp280.init();
}
void loop () {
int h;
float t;
int pressure;
DateTime now = RTC.now();
jour=(now.day());
mois=(now.month());
an=(now.year());
heure=(now.hour());
mn=(now.minute());
sprintf(data1,"%04d/%02d/%02d",an,mois,jour);
delay(3600000);
if((millis() - lastConnectionTime > postingInterval)) {
// stockage de la derniere connexion au serveur
lastConnectionTime = millis();
cumul = (0.0004396*nbrtour)*11 ; // calcul du cumul de la distance totale parcourue en km
vitessemoy = cumul; // calcul de vitesse moy du vent en km/h
vitesseaffiche = vitessemoy; // c'est juste pour avoir un chiffre rond
Serial.print(data1);
delay(1000);
Serial.print(';');
delay(1000);
sprintf(data2," %02d:%02d",heure,mn);
Serial.print (data2);
delay(1000);
Serial.print ("; ");
delay(1000);
Serial.print(';');
delay(1000);
Serial.print(" Humid;");
delay(1000);
Serial.print (h = dht.readHumidity());
delay(1000);
Serial.print(";%");
delay(1000);
Serial.print("; Temp;");
delay(1000);
Serial.print(t = dht.readTemperature());
delay(1000);
Serial.print(";*C");
delay(1000);
Serial.print("; Vent moy;");
delay(1000);
Serial.print (vitesseaffiche); // envoie vitesse moy du vent
delay(1000);
Serial.print(";Km/h;");
delay(1000);
int sensorValue = analogRead(direction); // lit la valeur analogique de la girouette sur la broche A3
// et met le résultat dans la variable
if ((sensorValue>910) && (sensorValue<1010)) {
Serial.print("NO;");
}
if ((sensorValue>440) && (sensorValue<600)) {
Serial.print("E;");
}
if ((sensorValue>10) && (sensorValue<150)) {
Serial.print("SE;");
}
if ((sensorValue>150) && (sensorValue<270)) {
Serial.print("S;");
}
if ((sensorValue>270) && (sensorValue<440)) {
Serial.print("SO;");
}
if ((sensorValue>600) && (sensorValue<750)) {
Serial.print("O;");
}
if ((sensorValue>750) && (sensorValue<850)) {
Serial.print("NE;");
}
if ((sensorValue>850) && (sensorValue<910)) {
Serial.print("N;");
}
delay(1000);
Serial.print(" Pression;");
delay(1000);
Serial.print(pressure = bmp280.getPressure()/100+25);
delay(1000);
Serial.println(";hPa");
nbrtour = 0;
}
}
void anemometre(){
compteurfm++;
if (compteurfm >2){
compteurfm = 0;
}
if (compteurfm == 2){ // car 2 fronts descendants = 1 tour
nbrtour++;
}
}
Merci
Cordialement