Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2014-02-11 09:33:09 satiotion meteo sans fil aide svp

poudoux
nouveau membre
Date d'inscription: 2013-11-08
Messages: 3

satiotion meteo sans fil aide svp



Bonjour,
Je suis en terminale Sti2D specialité sin et jai un projet de fin d'année(bien avancé) qui est une station meteo.Elle recoit des donné et grace a un programme(arduino) les transformes en variables. Je dois ensuite envoyer ces variables sur une seconde carte arduino grace a deux cartes xbee. Le programme des capteurs n'etant pas ma partie , jai du mal a le comprendre, surtout qu'ilo est assez complexe. le voici

citation :

#include "DHT.h"
#define uint  unsigned int
#define ulong unsigned long
#define DHTPIN 11              // Digital 6
#define PIN_ANEMOMETER  9     // Digital 2
#define PIN_RAINGAUGE  10      // Digital 3
#define PIN_VANE        5     // Analog 5
#define DHTTYPE DHT11   
DHT dht(DHTPIN, DHTTYPE);
// Combien de fois nous voulons calculer la vitesse ou la direction du vent
#define MSECS_CALC_WIND_SPEED 2000
#define MSECS_CALC_WIND_DIR   2000
#define MSECS_CALC_RAIN_FALL  2000
volatile int numRevsAnemometer = 0; // Incrémenté à l'interruption
volatile int numDropsRainGauge = 0; // Incrémenté à l'interruption
ulong nextCalcSpeed;  // Quand nous avons ensuite calculé la vitesse du vent             
ulong nextCalcDir;    // Quand nous avons ensuite calculé la direction             
ulong nextCalcRain;   // Quand nous avons ensuite calculé la chute de pluie               
ulong time;           // Millis () à chaque début de boucle ().             
#define NUMDIRS 8     // Lectures ADC:
ulong   adc[NUMDIRS] = {26, 45, 77, 118, 161, 196, 220, 256};
// Ces directions correspondent à 1-for-1 avec les valeurs dans adc, mais // devra être ajusté comme indiqué ci-dessus. Modifiez 'dirOffset' // auquel la direction est 'loin' (c'est l'Ouest ici).
char *strVals[NUMDIRS] = {"W","NW","N","SW","NE","S","SE","E"};
byte dirOffset=0;
int humidi;
int temper;


// innitialisation
void setup() {
   Serial.begin(9600);
   pinMode(PIN_ANEMOMETER, INPUT);
   digitalWrite(PIN_ANEMOMETER, HIGH);
   digitalWrite(PIN_RAINGAUGE, HIGH);
   attachInterrupt(0, countAnemometer, FALLING);
   attachInterrupt(1, countRainGauge, FALLING);
   nextCalcRain = millis() + MSECS_CALC_RAIN_FALL;
   nextCalcSpeed = millis() + MSECS_CALC_WIND_SPEED;
   nextCalcDir   = millis() + MSECS_CALC_WIND_DIR;
   dht.begin();
}
void loop() {
  // lire la température el l'humidité tout les 250 milliseconds!
   time = millis();
   float h = dht.readHumidity();
   float t = dht.readTemperature();
  // Vérifier si les rendements sont valables si elles sont NaN (not a number) puis quelque chose s'est mal passé!
   if (time >= nextCalcSpeed) {
      calcWindSpeed();
      nextCalcSpeed = time + MSECS_CALC_WIND_SPEED;
   }
   if (time >= nextCalcDir) {
      calcWindDir();
      nextCalcDir = time + MSECS_CALC_WIND_DIR;
   }
   if (time >= nextCalcRain) {
      calcRainFall();
      nextCalcRain = time + MSECS_CALC_RAIN_FALL;
   }
   if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } else {
    Serial.print("Humidite: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
   
   
   


    humidi = analogRead(h);
    Serial.print(h);
    delay(50);
    temper = analogRead(t);
    Serial.print(t);
    delay(50);
   
   
  }
}
// Interrompre l'entraîneur pour l'anémomètre. Appelé chaque fois le roseau(l'anche)
// Commuter(changer) de détentes (une révolution).

void countAnemometer() {
   numRevsAnemometer++;
}
// Interrompre l'entraîneur pour le pluviomètre. Appelé chaque fois le roseau(l'anche)
// Commuter(changer) de détentes (une baisse(goutte)).

void countRainGauge() {
   numDropsRainGauge++;
}
// Trouver la direction des ailettes.
void calcWindDir() {
   int val;
   byte x, reading;
   val = analogRead(PIN_VANE);
   val >>=2;                       
   reading = val;
   // Regard(apparence) la lecture en haut dans table de directions. Trouvez la première valeur
   // C'est > = à ce que nous sommes arrivés.
   for (x=0; x<NUMDIRS; x++) {
      if (adc[x] >= reading)
         break;}
   x = (x + dirOffset) % 8;   // Adjuster l’orientation
   Serial.print("  Direction: ");
   Serial.println(strVals[x]);
   
   
   Serial.print(x);
   delay(50);
   
   
   
}
// Calculer la vitesse de vent et montrer(afficher-le) (ou enregistrer-le, indépendamment de ).
// 1 rev/seconde = 1.492 kms/h = 2.40114125 kms/h
void calcWindSpeed() {
   int x, iSpeed;
     // Ceci produira le km/h * 10
   // (N'a pas fait calc de droit quand fait comme une déclaration)
   long speed = 24011;
   speed *= numRevsAnemometer;
   speed /= MSECS_CALC_WIND_SPEED;
   iSpeed = speed;         // Avoir-en besoin pour formater ci-dessous
   Serial.print("vitesse du vent: ");
   x = iSpeed / 10;
   Serial.print(x);
   Serial.print('.');
   x = iSpeed % 10;
   Serial.print(x);
   numRevsAnemometer = 0;        // compteur remis à zéro
   
   Serial.println(iSpeed);
   delay(50);
   
}
// Calculer la pluie et montrer(afficher-le) (ou enregistrer-le, indépendamment de ).
// 1 seau = 0.2794 mm
void calcRainFall() {
   int x, iVol;
   // Ceci produira le mm * 10000 // (n'a pas fait calc de droit quand fait comme une déclaration)
   long vol = 2794; // 0.2794 mm
   vol *= numDropsRainGauge;
   vol /= MSECS_CALC_RAIN_FALL;
   iVol = vol;         // Avoir-en besoin pour formater ci-dessous
   Serial.print("pluie: ");
   x = iVol / 10000;
   Serial.print(x);
   Serial.print('.');
   x = iVol % 10000;
   Serial.print(x);
   Serial.println();
   numDropsRainGauge = 0;        // compteur remis à zéro
   
   
   Serial.print(iVol);
   
}

Donc il affiche 5 varaibles( vitesse vent, direction,humidité temperature , et pluviometre) dans le moniteur serie de la premiere arduino.

comme sa :
http://imagesia.com/sans-titre_g3pv


Pouvez vous m'aidez  a mettre les "instructions" (lignes)pour pouvoir envoyer ces 5 variables tel quelle et les afficher sur le moniteur serie de la seconde arduino. Je sais envoyer une variable a partir d'un potentiometre mais la c'est pas du tout pareil.

J'ai aussi mon programme recepteur qui n'est peut etre pas juste :

citation :

int incomingByte = 0;   // for incoming serial data

void setup() {
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}

Donc si vous pouvez m'aidez pour l'emission des 5 variables , sa serait vraiment cool ! merci !!!!!!!!! et désolé si les programmes sont mal affichés.

Hors ligne

 

#2 2014-02-11 23:23:56 Re : satiotion meteo sans fil aide svp

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: satiotion meteo sans fil aide svp

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024