Bonjour
certains le savent je suis astronome amateur, je vais prochainement construire une station météo et je cherche à savoir si les différents capteurs arduino prennent l'eau s'il pleut ???
De plus je cherche à connaître tous les capteurs qui sont nécessaire
un dht11
un BMP 180
un capteur de pluie
et un accéléromètre GY521 pour le vent
tout ça connecté à l'ordinateur en temps réel avec module xbee
et enregistrement sur carte SD avec une horloge
tout ça serait confié à un arduino mega
des avis ???
Merci
cdt
Le DHT11 n'est pas le plus performant, autant choisir un DHT22. Le BMP180 fournit la pression mais aussi la température, le DHT22 serait donc réservé à l'humidité.
Pour le vent : pourquoi un accéléromètre ? Il faut plutôt une éolienne. Tu trouveras plein de projets d'éoliennes avec le moteur de recherche du forum.
lesept:
Le DHT11 n'est pas le plus performant, autant choisir un DHT22. Le BMP180 fournit la pression mais aussi la température, le DHT22 serait donc réservé à l'humidité.
Pour le vent : pourquoi un accéléromètre ? Il faut plutôt une éolienne. Tu trouveras plein de projets d'éoliennes avec le moteur de recherche du forum.
Ok
pour le vent on m’a conseillé un accéléromètre sur le forum d'astrosurf
donc une éolienne c'est mieux ???
J'ai oublié de dire que j'ai un livre d'apprentissage et que j'ai trouvé un projet où on peut faire des prévisions météo
donc je voulais aussi faire des prévisions météo car les pros nous annoncent que des salades >:(
cdt
cdt
je cherche à savoir si les différents capteurs arduino prennent l'eau s'il pleut
Voici un DHT11. Penses-tu que ce boîtier est étanche ?
Il y a deux conceptions de l'étanchéité :
- l'étanchéité totale --> impossible avec un capteur d'humidité
- étanchéité au ruissellement et là il faut définir le type du ruissellement.
Ok j'ai pris de dht 22 comme on me dit qu'ils sont mieux
mais le BMP 180 est pas étanche non plus si je comprends bien ???
cdt
Pour la température le ds18b20 est donné étanche : mesure de la température de l'eau dans une piscine à + d'1m de profondeur.
Pour les autres, je vois mal comment mesurer l'humidité ou la pression de l'air sous l'eau, donc étanchéité à oublier AMHA, c'est la boite qui les abritera qui,devra faire le boulot.
Bonjour,
Peut être une sonde de ce type pour l'humidité :
ou une AM2315 :
Merci
je vais voir ça
cdt
Voici les photos de la sonde AM2315.
Bouchon blanc (marque AOSONG, 33€ en France) "l'original" et bouchon doré (marque ASAIR, 11€ AliExpress) la "copie", AOSONG et ASAIR c'est la même entreprise... :
AOSONG / ASAIR
Ces sondes utilisent un capteur d'humidité capacitif, et pour la température un ds18b20 pour l'original, et un ?? peut-être TS-NTC-104 pour l'autre.
Pour les deux modèles, les capteurs d'humidité et de température sont connectés à un microcontrôleur, STMicroelectronics 8S103F3P6, situé dans le manche, qui délivre les mesures sur un bus I2C, c'est la même bibliothèque pour les deux.
J'utilise ces deux capteurs en intérieur, mis côte à côte en ce moment pas de grosses différences de mesures, 20,3°C / 20,3°C et 31%Rh /33%Rh.
Bonjour
j'ai commencé à coder, et le compilateur me met un message d'erreur
voici mon code
#include <SFE_BMP180.h>
#include <Wire.h>
#include <SD.h>
#include <RTClib.h>
const int dataPin = 8;
const byte CapteurBMP180 = (A4, A5);
const byte LEDEcriture = 9;
const byte CapteurDHT22 = 8;
const byte ChipSelect = 10;
SFE_BMP180 pressure;
#define ALTITUDE 1655.0
int temperature = -1;
int humidity = -1;
const unsigned long Rafraichissement = 5000;
DateTime DateHeure;
String ChaineDonnees;
RTC_DS1307 RTC;
File Fichier;
int ValeurCapteur0;
int ValeurCapteur1;
void setup()
{
Serial.begin(9600);
Serial.println("REBOOT");
Wire.begin();
RTC.begin();
Serial.println("Initialisation de la carte SD");
digitalWrite(LEDEcriture, LOW);
if (! RTC.isrunning())
{
RTC.adjust(DateTime(__DATE__, __TIME__));
}
if (!SD.begin(ChipSelect))
{
Serial.println("Carte invalide ou absente");
return;
}
Serial.println("Carte presente");
ChaineDonnees = "\nLecture des donnees du capteur et horodatage\n---------\n ";
Fichier = SD.open("Donnees.txt", FILE_WRITE); // Ouverture du fichier en écriture.
if (Fichier) // Si le fichier existe, on écrit les données à la suite
{
Fichier.println(ChaineDonnees);
Fichier.close();
Serial.println(ChaineDonnees); // Affichage des données sur le port série (facultatif)
}
else // Signale un éventuel problème d'ouverture de fichier
{
Serial.println("Erreur d'ouverture du fichier");
}
if (pressure.begin())
Serial.println("BMP180 init success");
else
{
Serial.println("BMP180 init fail\n\n");
while(1); // Pause forever.
}
}
int readDHT22() {
uint8_t recvBuffer[5]; // <1>
uint8_t cnt = 7;
uint8_t idx = 0;
for(int i = 0; i < 5; i++) recvBuffer[i] = 0; // <2>
// Start communications with LOW pulse
pinMode(dataPin, OUTPUT);
digitalWrite(dataPin, LOW);
delay(18);
digitalWrite(dataPin, HIGH);
delayMicroseconds(40); // <3>
pinMode(dataPin, INPUT);
pulseIn(dataPin, HIGH); // <4>
// Read data packet
unsigned int timeout = 10000; // loop iterations
for (int i=0; i<40; i++) // <5>
{
timeout = 10000;
while(digitalRead(dataPin) == LOW) {
if (timeout == 0) return -1;
timeout--;
}
unsigned long t = micros(); // <6>
timeout = 10000;
while(digitalRead(dataPin) == HIGH) { // <7>
if (timeout == 0) return -1;
timeout--;
}
if ((micros() - t) > 40) recvBuffer[idx] |= (1 << cnt); // <8>
if (cnt == 0) // next byte?
{
cnt = 7; // restart at MSB
idx++; // next byte!
}
else cnt--;
}
humidity = recvBuffer[0]; // % // <9>
temperature = recvBuffer[2]; // C
uint8_t sum = recvBuffer[0] + recvBuffer[2];
if(recvBuffer[4] != sum) return -2; // <10>
return 0;
}
void loop(){
DateHeure = RTC.now();
char status;
double T,P,p0,a;
Serial.println();
Serial.print("provided altitude: ");
Serial.print(ALTITUDE,0);
Serial.print(" meters, ");
Serial.print(ALTITUDE*3.28084,0);
Serial.println(" feet");
status = pressure.startTemperature();
if (status != 0)
{
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
Serial.print("temperature: ");
Serial.print(T,2);
Serial.print(" deg C, ");
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println(" deg F");
status = pressure.startPressure(3);
if (status != 0)
{
delay(status);
status = pressure.getPressure(P,T);
if (status != 0)
{
Serial.print("absolute pressure: ");
Serial.print(P,2);
Serial.print(" mb, ");
Serial.print(P*0.0295333727,2);
Serial.println(" inHg");
p0 = pressure.sealevel(P,ALTITUDE);
Serial.print("relative (sea-level) pressure: ");
Serial.print(p0,2);
Serial.print(" mb, ");
Serial.print(p0*0.0295333727,2);
Serial.println(" inHg");
a = pressure.altitude(P,p0);
Serial.print("computed altitude: ");
Serial.print(a,0);
Serial.print(" meters, ");
Serial.print(a*3.28084,0);
Serial.println(" feet");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
else Serial.println("error starting temperature measurement\n");
int ret = readDHT22();
if(ret != 0) Serial.println(ret);
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" C");
delay(Rafraichissement);
digitalWrite(LEDEcriture, HIGH);
ChaineDonnees=String(DateHeure.day(),DEC)+'/'+String(DateHeure.month(),DEC)+'/'+String(DateHeure.year(),DEC)
+' '+String(DateHeure.hour(),DEC)+':'+String(DateHeure.minute(),DEC)+':'+String(DateHeure.second(),DEC);
ValeurCapteur0 = analogRead(CapteurBMP180);
ChaineDonnees += String("\t Valeur capteur 0 = ");
ChaineDonnees += String(ValeurCapteur0);
ValeurCapteur1 = analogRead(CapteurDHT22);
ChaineDonnees += String("\t Valeur capteur 1 = ");
ChaineDonnees += String(ValeurCapteur1);
Fichier = SD.open("Donnees.txt", FILE_WRITE);
if (Fichier)
{
Fichier.println(ChaineDonnees);
Fichier.close();
Serial.println(ChaineDonnees); // Affichage des données sur le port série (facultatif)
}
else {
Serial.println("Erreur d'ouverture du fichier");
}
ChaineDonnees = 0;
digitalWrite(LEDEcriture, LOW);
delay(300000);
}
avez-vous une idée ????
Merci
cdt
j'ai mis un 1 devant le 0 et ça marche mais je veux quand même savoir si ça change la tâche ou pas
ChaineDonnees = 10;
digitalWrite(LEDEcriture, LOW);
delay(300000);
}
cdt
Les messages d'erreur en copie d'écran, c'est illisible surtout sur un smartphone.
L'IDE dispose d'un bouton qui permet de copier le message d'erreur (en entier, et pas juste ce qu'on voit dans la fenêtre, qui n'est que la partie visible de l'iceberg de tes erreurs...). Il reste ensuite à coller le message dans ta réponse.
Arduino : 1.8.13 (Windows 10), Carte : "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
C:\Users\Hadrien\Documents\Arduino\m_t_o_avec_GY_68\meteo_avec_GY68_et_DHT22.ino\meteo_avec_GY68_et_DHT22.ino.ino: In function 'void loop()':
meteo_avec_GY68_et_DHT22.ino:227:18: error: ambiguous overload for 'operator=' (operand types are 'String' and 'int')
ChaineDonnees =0;
^
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:232:0,
from sketch\meteo_avec_GY68_et_DHT22.ino.ino.cpp:1:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:86:11: note: candidate: String& String::operator=(const String&)
String & operator = (const String &rhs);
^~~~~~~~
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:87:11: note: candidate: String& String::operator=(const char*)
String & operator = (const char *cstr);
^~~~~~~~
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:88:11: note: candidate: String& String::operator=(const __FlashStringHelper*)
String & operator = (const __FlashStringHelper *str);
^~~~~~~~
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:90:11: note: candidate: String& String::operator=(String&&)
String & operator = (String &&rval);
^~~~~~~~
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:91:11: note: candidate: String& String::operator=(StringSumHelper&&)
String & operator = (StringSumHelper &&rval);
^~~~~~~~
Plusieurs bibliothèque trouvées pour "RTClib.h"
Utilisé : C:\Users\Hadrien\Documents\Arduino\libraries\RTClib
Non utilisé : C:\Users\Hadrien\Documents\Arduino\libraries\RTCLib_by_NeiroN
exit status 1
ambiguous overload for 'operator=' (operand types are 'String' and 'int')
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
voilà c'était ça
cdt
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.