SondeTemperature
20160213
GAFFE: range: 0-50° , précision 1°! c'est pas super!
existe au format
WeMos:
https://fr.aliexpress.com/store/product/DHT-Shield-for-WeMos-D1-mini-DHT11-Single-bus-digital-temperature-and-humidity-sensor-module-sensor/1948124_32702341661.html
lu le tuto: library:
http://playground.arduino.cc/Main/DHT11Lib
conso convenable pour être alimenté par une pin Dx
- en attente: moins de 0.2 mA
- mesure: moins de 2 mA.
essai se termine par erreur de compil
pb de lkibrairie ?
C:\Users\adminpo\Desktop\ARDUINO\arduino-1.6.7\examples\po\SondeThDht11BAD?
ok en suivant tuto sur youtube:
https://skyduino.wordpress.com/2013/04/27/tuto-capteur-temperature-humidite-dht11/
C:\Users\adminpo\Desktop\ARDUINO\arduino-1.6.7\examples\po\SondeThDht11?
20160312 test suir
ArduinoProMini (prcé&dent sur
ArduinoMega2560)
utilisé pin 11 (10 ext pe pwr de
TiniRtcV1?) et 12 comme pwr
câble: marron: - ;gris:out D11; blanc: D12
// selon https://skyduino.wordpress.com/2013/04/27/tuto-capteur-temperature-humidite-dht11/
// Ok, mega2560 ici pin 10
/** Broche "DATA" du DHT11 */
const byte DHT11_PIN = 9;
/** Code d'erreur de la fonction readDHT11() */
enum {
DHT11_SUCCESS, //!< Pas d'erreur
DHT11_TIMEOUT_ERROR, //!< Temps d'attente dépassé
DHT11_CHECKSUM_ERROR //!< Données reçues erronées
};
/** Fonction setup() */
void setup() {
/* Initialisation du port série */
Serial.begin(115200);
Serial.println(F("DHT11 DEMO"));
}
/** Fonction loop() */
void loop() {
/* Variables d'usage */
byte temperature, humidity;
/* Lecture de la température et de l'humidité + gestion des erreurs */
switch (readDHT11(DHT11_PIN, &temperature, &humidity)) {
case DHT11_SUCCESS:
/* Affichage de la température et du taux d'humidité */
Serial.print(F("Humidite (%): "));
Serial.println((int) humidity);
Serial.print(F("Temperature (^C): "));
Serial.println((int) temperature);
break;
case DHT11_TIMEOUT_ERROR:
Serial.println(F("Temps d'attente depasse !"));
break;
case DHT11_CHECKSUM_ERROR:
Serial.println(F("Erreur de checksum !"));
break;
}
/* Pas besoin de rafraichir l'affichage très souvent */
delay(2000);
}
/**
* Lit la température et le taux d'humidité capté par un capteur DHT11
*
* @param pin Broche sur laquelle est câblé le capteur
* @param temperature Pointeur vers la variable stockant la température
* @param humidity Pointeur vers la variable stockant le taux d'humidité
* @return DHT11_SUCCESS si aucune erreur, DHT11_TIMEOUT_ERROR en cas de timeout, ou DHT11_CHECKSUM_ERROR en cas d'erreur de checksum
*/
byte readDHT11(byte pin, byte* temperature, byte* humidity) {
/* data[] -> buffer contenant les données du cpateur
* counter -> compteur permettant de savoir quel bit est reçu (bitwise)
* index -> compteur permettant de savoir quel octet est reçu (bitwise)
* timeout -> compteur pour le timeout
*/
byte data[5] = { 0 }, counter = 7, index = 0;
unsigned int timeout;
/* Conversion du numéro de broche Arduino en ports/masque binaire "bas niveau" */
/* Utiliser les registres du microcontrôleur est bien plus rapide que digitalWrite() */
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *ddr = portModeRegister(port); // Registre MODE (INPUT / OUTPUT)
volatile uint8_t *out = portOutputRegister(port); // Registre OUT (écriture)
volatile uint8_t *in = portInputRegister(port); // Registre IN (lecture)
/* Réveil du capteur */
*ddr |= bit; // OUTPUT
*out &= ~bit; // LOW
delay(18); // Temps d'attente à LOW causant le réveil du capteur
*out |= bit; // HIGH
delayMicroseconds(40);
*ddr &= ~bit; // INPUT
/* Attente de la réponse du capteur */
timeout = 0;
while(!(*in & bit)) /* Attente d'un état LOW */
if (++timeout == 10000)
return DHT11_TIMEOUT_ERROR;
timeout = 0;
while(*in & bit) /* Attente d'un état HIGH */
if (++timeout == 10000)
return DHT11_TIMEOUT_ERROR;
/* Lecture des données du capteur (40 bits) */
for (byte i = 0; i < 40; ++i) {
/* Attente d'un état LOW */
timeout = 0;
while(!(*in & bit))
if (++timeout == 10000)
return DHT11_TIMEOUT_ERROR;
/* Mise en mémoire du temps courant */
unsigned long t = micros();
/* Attente d'un état HIGH */
timeout = 0;
while(*in & bit)
if (++timeout == 10000)
return DHT11_TIMEOUT_ERROR;
/* Si le delta Temps est supérieur à 40µS c'est un "1", sinon c'est un "0" */
if ((micros() - t) > 40)
data[index] |= (1 << counter); // "1"
// Le tableau data[] est initialisé à "0" par défaut <span class="wp-smiley wp-emoji wp-emoji-wink" title=";)">;)</span>
/* Si le compteur de bits atteint zéro */
if (counter-- == 0) {
counter = 7; /* On passe à l'octet suivant */
++index;
}
}
/* Format des données :
* [0] = humidité en %
* [1] = zéro
* [2] = température en degrés Celsius
* [3] = zéro
* [4] = checksum (humidité + température)
*/
*humidity = data[0];
*temperature = data[2];
/* Vérifie la checksum */
if (data[4] != (data[0] + data[2]))
return DHT11_CHECKSUM_ERROR; /* Erreur de checksum */
else
return DHT11_SUCCESS; /* Pas d'erreur */
}