Go Down

Topic: Station méteo GSM  (Read 4767 times) previous topic - next topic

paraseb

Bonjour à tous

j' ai comme projet la création d'une station météo basée sur arduino , elle serait destinée au vol libre .

Pour cela je souhaiterai mesurer la vitesse moyenne du vente , la direction moyenne du vent , ainsi que la température . Ces données seraient consultable par SMS ,  il suffirait d'envoyer un SMS  pour avoir en retour un SMS  indiquant les données . La station sera alimentée par un panneau solaire .

La prochaine évolution serait de la connecter à internet . mais cela ce fera dans un autre temps .

J ai passé beaucoup de temps sur le net a chercher des informations , mais la je n'y arrive plus , j ai besoin d'aide .

le but est d'avoir un topic avec l'ensemble des explications pour que cela soit accessible à tous sans ce faire un nœuds au cerveau 


Mon matériel  :

- un carte Arduino Uno
- un capteur DHT11  pour la température et l'hygrométrie
- un ensemble girouette et anémomètre SEN 08942
- un module GSM sim 900
- module RTC  I2C



sketch pour la mesure de la vitesse / direction du vent


Voici le schéma de câblage :



la résistance doit être de 10 000 ohm


sketch  permettant de lire la vitesse depuis le moniteur série


Code: [Select]
// Pin definitions pour la vitesse du vent
# define Hall sensor 2      // Receive the data from sensor

// Constants definitions
const float pi = 3.14159265;           // pi number
int period = 5000;              // Measurement period (miliseconds)
int delaytime = 0;             // Time between samples (miliseconds)
int radius = 69;    // Radius from vertical anemometer axis to a cup center (mm)

// Variable definitions
unsigned int Sample = 0; // Sample number
unsigned int counter = 0; // magnet counter for sensor
unsigned int RPM = 0;          // Revolutions per minute
float speedwind = 0;        // Wind speed (m/s)
float windspeed = 0;           // Wind speed (km/h)

int Direction ; // Wind direction

#define PotPin (A0)    // define the input pin for the wind vane potentiometer
int PotValue = 0;      // variable to store the value coming from the potentiometer
int DirCorr = 0;       // Correction on direction ( - 360  to + 360)

#define PIN_ANEMOMETER  2     // analogique 2

void setup() {
  // Set the pins
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);     //internall pull-up active
 
  Serial.begin(9600);
}

void loop() {
 
 
 
  Sample++;
 
 
  windvelocity();
 
 
  RPMcalc();
 
 
 
  Serial.print("vitesse  vent:");
 
 
//*****************************************************************
             
 
//*****************************************************************
//print km/h 
  SpeedWind();
  Serial.print(speedwind*1.538); // la vitesse de base avec le logiciel est de 1.56 km/h par tour , avec le capteur SEN-08942   c est 2.4 km/h par tour  donc je multiplie par 1.58
  Serial.print(" [km/h] "); 
  Serial.println();


  delay(delaytime);
 
   int sensorValue = analogRead(A0); // lit la valeur analogique sur la broche A0
  // et met le résultat dans la variable
 
  delay(0);
 

// Wind Direction
    Serial.print("Direction du vent: ");
   
   if ((sensorValue>880) && (sensorValue<900)) {
    Serial.println("Nord Ouest");
    }
   if ((sensorValue>85) && (sensorValue<100)) {
    Serial.println(" Est");
    }
   if ((sensorValue>180) && (sensorValue<190)) {
    Serial.println("Sud Est");
    }
   if ((sensorValue>200) && (sensorValue<300)) {
    Serial.println(" Sud");
    }
    if ((sensorValue>630) && (sensorValue<640)) {
    Serial.println("Sud Ouest");
    }
    if ((sensorValue>940) && (sensorValue<950)) {
    Serial.println(" Ouest");
    }
    if ((sensorValue>460) && (sensorValue<470)) {
    Serial.println("Nord Est");
    }
    if ((sensorValue>780) && (sensorValue<=800)) {
    Serial.println(" Nord");
    }
   

}

// Measure wind speed
void windvelocity(){
  speedwind = 0;
  windspeed = 0;
 
  counter = 0; 
  attachInterrupt(0, addcount, CHANGE);
  unsigned long millis();  
  long startTime = millis();
  while(millis() < startTime + period) {
  }
}



void RPMcalc(){
  RPM=((counter*2)*60)/(period/1000);  // calcul le nombre de tour par minute  (RPM)
}

void WindSpeed(){
  windspeed = ((2 * pi * radius * RPM)/60) / 1000;  // Calculate wind speed on m/s ( marche pas )
 
}

void SpeedWind(){
  speedwind = (((2 * pi * radius * RPM)/60) / 1000)*3.6;  // Calculate wind speed on km/h
 
}

void addcount(){
  counter++;
}



Lire la température et l'hygrométrie avec un capteur DHT 11

Schéma de câblage :




Le sketch pour le DHT 11 :

Code: [Select]
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2     // what pin we're connected to

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("DHT test");

  dht.begin();
}

void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
  }
}



Sketch pour la lecture de l'heure avec un module RTC  DS1307  , de type I2C


Schéma de câblage :



Le sketch pour lire l'heure avec le moniteur série :

Code: [Select]
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
// 2010-02-04 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php

#include <Wire.h>
#include <RTClib.h>

RTC_DS1307 RTC;

void setup () {
    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__));
}

void loop () {
    DateTime now = RTC.now();
   
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
   
    delay(1000);
}


Voila l'ensemble des données que j'ai réussie à regrouper .

pour commencer je voudrais mesurer la vitesse et la direction du vent sur une moyenne de 10 mn .

avez vous des idées .


Merci d'avance

Sébastien



infobarquee

bonjour,
deux choses
1/
pourquoi prendre un capteur dont les données sont des plus oneagainmorebistoufly :)
un dht22-23 serait nettement mieux, surtout pour du vol libre.

2/
pourquoi utliser un rtc?
tu peux avoir l'heure via le gsm

AUCUNE AIDE PAR MP

papybricol

Bonsoir,

Une piste pour simplifier énormément la prise en compte de la réception du SMS (demande des relevés) :

Utiliser la broche RI du SIM900 (accessible sur certains shields) pour déclencher une interruption sur l'Arduino

ça marche très bien et c'est simple (pas de lecture et parsing de SMS) !
...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

paraseb

Bonsoir

Oui en effet le DHT 11 n'est vraiment pas précis , mais bon j' ai acheté un kit avec pas mal de module , et je n'ai que ça pour le moment . Ce qui intéresse vraiment c est la température , l'hygrométrie c'est pour le fun .
Etant frigoriste , j'utilise très souvent des sonde de températures  PT100 qui sont très fiable dans le temps , je vais essayer de trouver un sketch  la dessus .

Pour le module RTC je souhaitais avoir l'heure , je ne savais pas que je pouvais l'avoir avec le module GSM .  

Voila une photo  de mon matériel :
]

Comment faire pour faire un moyenne de la vitesse et de la direction du vent sur une periode  de 10mn ?

merci


meteo59223

#4
Jan 29, 2016, 11:48 pm Last Edit: Jan 29, 2016, 11:55 pm by meteo59223
Bonsoir.

Au passage, étant passionné de météo, sympathique projet et bon amusement !

Cependant même la température sur le DHT11 ne reste qu'un entier. Pour avoir une précision à 0.1, vaut mieux, comme le dit infobarquee, s'orienter sur le DHT22. Sinon il y a aussi la sonde DS18B20, si l'humidité ne vous intéresse pas, qui en plus est étanche et flexible donc très pratique pour l'installation en exterieur (abri météo par exemple).

Au passage, si la pression atmosphérique vous tente pour vos applications, il existe un shield combo sonde de pression et température MPL3115A2 en i2c, aussi facile au cablage et à  programmer, mais plus onéreux que le DHT22 ...

Pour la vitesse du vent, à voir le datasheet, ils parlent de 2,4 km/h si un tour de l'hélice en 1 seconde (fermeture du contact). Il suffit de compter ces fermetures en un laps de temps puis de faire des conversions.

Bon courage pour la suite !

paraseb

Bonjour

je pense améliorer la station dans l'avenir , mais pour le moment je préfère aller sur le principale .

j ' ai besoin de faire la vitesse moyenne du vent sur une période de 10 mn , pareil pour la direction du vent .

il faut que je trouve une fonction pour la mise en mémoire temporaire des donnée , en faire la somme et la divisée par le nombre de mesure .

le top serai d'avoir un mesure toute les 20 seconde  sur 10 mn

Cette fonction devra ce répétée  mais aussi s'effacer pour éviter de remplir la mémoir .

avez vous des pistes .

merci

infobarquee

pour le vent, il suffit de compter et faire un tableau de X données.
par contre, a savoir si capteur anémo en ILS ou autre pour compter les impulsions.

mais 10mn parait long, je mettrais 1mn en glissant.
ca permet si on recoit un sms, de faire le calcul plus vite, surtout pour du vol libre.
ca peut changer énormément en 10mn avec un vent thermique par exemple.

après, est ce que tu veux conserver ou non les données pour faire un historique sur l'année par exemple?

si pas besoin, tu envoie le sms, le nono fait les mesures sur 1 mn, puis envoie les données en retour.

serais tu le seul a demander les données?
AUCUNE AIDE PAR MP

paraseb

Salut

je vais voir ce que cest le tableau de X données ,  après pour la vitesse du vent c'est pas mal  la moyenne de 5 mn , admettons une mesure toutes les 20 secondes sur 5 mn ,  soit 15 mesures .ca permet de moyenner la vitesse avec les passages thermiques ; généralement ont attend 2/3 mn entre deux passages  mais ça varie pas mal , sa dépend de la journée ;) .
Il serai bien aussi d'avoir la vitesse maxi sur la période d'enregistrement .

concernant les données pas besoin de faire d'historique ,  enfin pour le moment car c est déjà assez compliqué , mais dans l'avenir je souhaiterai pouvoir les envoyer sur le net . ( mais plus tard )

il faudrait que le mesure moyenne soit stockées temporairement  entre deux cycle de mesure , pour avoir une réponse rapide lors de l'envoie d'un SMS.

je souhaite que tout le monde puisse consulter la station , simplement en envoyant un sms .  le module GPRS  retournerai un sms  avec le numéro du sms d'appel .

J' aimerai avoir une réponse de ce type :

Site de vol libre de Marlens
Date : 30/01/2016 15h30
Température : 16 °c
Vitesse moyenne : 20 km/h
Vitesse max :30
Direction moyenne : Ouest




infobarquee

pour la moyenne, c'est pas compliqué
pour le max, non plus, tu prends une base de 0km/h en départ, si lecture > départ, on garde et départ vaut nouvelle valeur

moyenne vent, si en degrés, idem, on fait la moyenne et les degrés sont retournés en mot (ouest par exemple)
AUCUNE AIDE PAR MP

paraseb

en effet ça n'a pas l'air d'être trop compliqué pour toi , pourrais tu m'aider  en compilant le code de départ , après je ferais le reste .

merci

djoliba

Bonjour à tous,

J'ai lu attentivement, du moins je l'espère, tout ce qui a été dit dans ce post et peut être pourrez vous m'aider :

J'ai récupéré l'anémomètre et la girouette de tête de mât du bateau d'un ami. L'état mécanique de l'ensemble me paraît excellent. En approchant le moulinet d'une boussole, l'on observe une déviation. La girouette quant à elle, fait carrément tourner l'aiguille aimantée. L'ensemble provient d'un combiné NAVMAN Wind 3100. La sortie du câble blindée comprend quatre fils de couleur et la masse et (d'après la doc. p29, voir ci-dessous) celle-ci était reliée à un boitier de raccordement et l'afficheur etc... :

http://www.navmanmarine.net/upload/Marine/Internet_Manuals/3000/3100_wind_MN134_1951320B_fre_web.pdf

Je suppose et j'espère que les deux fonctionnent par effet Hall.

J'aimerai vous l'avez compris utiliser cet ensemble avec Arduino, et réaliser une station météo avec le complément indispensable.

Je pense que les signaux délivrés par l'anémo et la girouette peuvent être utilisé directement sur Arduino. Il me reste à déterminer quels sont les fils de couleur associés à l'anémo et à la girouette sans détruire quoique ce soit. Je pensais m'inspirer pour le branchement du sketch proposé par Paraseb. Auriez vous des suggestions à me faire?

Nota:  je débute en programmation sur Arduino ...

lnel34

 Bonjour
Vous je voudrais savoir si vous avez réussi a faire votre anémomètre car je suis intéressé pour en faire un identique

paraseb

Salut les amis

il faut vivre avec son temps ,   je vais remplacer le module GSM  par une carte Arduino MKR FOX 1200.

Je la reçoit dans dans 2 jours .



L'idée c est pas passer par le réseau sigfox pour envoyer les données .

Mais pour le moment il faut deja que j'arrive a faire marcher l'anémomètre . ça ne fonctionne pas .

Pour info je vais tour reprendre depuis le début

Seb

paraseb

Salut

j' ai reçu mon mon  MKR FOX1200 ,   mais les problèmes commence ;)


concerne la première config avec l'enregistrement du produit .


Dans l'IDE  -> EXEMPLES-> MKRFOX1200 -> Firstconfiguration

un problème survient lors de la vérification :

Code: [Select]
Arduino : 1.8.4 (Windows 7), Carte : "Arduino MKR FOX 1200"



C:\Users\seb\Documents\Arduino\libraries\ArduinoLowPower-master\src\samd\ArduinoLowPower.cpp:49:11: error: 'class RTCZero' has no member named 'isConfigured'

  if (!rtc.isConfigured()) {

           ^

C:\Users\seb\Documents\Arduino\libraries\ArduinoLowPower-master\src\samd\ArduinoLowPower.cpp:54:6: error: 'class RTCZero' has no member named 'setAlarmEpoch'

  rtc.setAlarmEpoch(now + millis/1000);

      ^

C:\Users\seb\Documents\Arduino\libraries\ArduinoLowPower-master\src\samd\ArduinoLowPower.cpp: In member function 'void ArduinoLowPowerClass::attachInterruptWakeup(uint32_t, voidFuncPtr, uint32_t)':

C:\Users\seb\Documents\Arduino\libraries\ArduinoLowPower-master\src\samd\ArduinoLowPower.cpp:65:20: error: no matching function for call to 'RTCZero::begin(bool)'

     rtc.begin(false);

                    ^

C:\Users\seb\Documents\Arduino\libraries\ArduinoLowPower-master\src\samd\ArduinoLowPower.cpp:65:20: note: candidate is:

In file included from C:\Users\seb\Documents\Arduino\libraries\ArduinoLowPower-master\src/ArduinoLowPower.h:11:0,

                 from C:\Users\seb\Documents\Arduino\libraries\ArduinoLowPower-master\src\samd\ArduinoLowPower.cpp:3:

C:\Users\seb\Documents\Arduino\libraries\RTCZero\src/RTCZero.h:42:8: note: void RTCZero::begin()

   void begin();

        ^

C:\Users\seb\Documents\Arduino\libraries\RTCZero\src/RTCZero.h:42:8: note:   candidate expects 0 arguments, 1 provided

Utilisation de la bibliothèque Arduino_SigFox_for_MKRFox1200 version 1.0.4 dans le dossier: C:\Users\seb\Documents\Arduino\libraries\Arduino_SigFox_for_MKRFox1200
Utilisation de la bibliothèque SPI version 1.0 dans le dossier: C:\Users\seb\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.17\libraries\SPI
Utilisation de la bibliothèque ArduinoLowPower-master version 1.2.0 dans le dossier: C:\Users\seb\Documents\Arduino\libraries\ArduinoLowPower-master
Utilisation de la bibliothèque RTCZero version 1.4.1 dans le dossier: C:\Users\seb\Documents\Arduino\libraries\RTCZero
exit status 1
Erreur de compilation pour la carte Arduino MKR FOX 1200


C est la misere je compte sur vous pour m'aider


J-M-L

#14
Feb 17, 2018, 01:23 pm Last Edit: Feb 17, 2018, 01:24 pm by J-M-L
Salut

j' ai reçu mon mon  MKR FOX1200 ,   mais les problèmes commencent ;)
concerne la première config avec l'enregistrement du produit .
...
C'est la misère je compte sur vous pour m'aider
j'ai posté un petit tuto pour détailler ce que j'avais fait quand j'ai reçu le mien. Jetez un oeil
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Go Up