[HELP] Arduino contrôle modules peltiers

Salut à tous !
Voilà, allons direct au vif du sujet:
J'ai besoin de contrôler en temps réel la température d'une plaque en verre afin que sa surface soit en permanence au point de roséehttp://fr.wikipedia.org/wiki/Point_de_ros%C3%A9e
Pour cela je pensais utiliser plusieurs modules peltier Thermoélectricité — Wikipédia et un arduino accompagné d'un capteur de température et d'humidité (dht11 DHT11 - Capteur de temperature et humidite digital - Boutique Semageek) pour prendre les mesures de l'air ambiant, et des thermistances pour prendre la température de la plaque de verre
Ça fait un moment que j'attends d'avoir un projet pour tâter du arduino, là c'est l'occasion, mais je débute complet.

Dans l'idée la boucle du programme serait:
{
Arduino interroge le capteur de temp/hum (air);
Recherche dans la courbe de point de rosée la température à atteindre à la surface de la vitre;
Interroge la température à la surface de la vitre (moyenne des 4 thermistances);
Si température supérieure:
Mise en tension des peltiers jusqu’à obtention de la température souhaitée;
Sinon laisse les peltiers éteints
}

Après de nombreux essais en mode "je fais tout tout seul depuis le départ", et de nombreux échecs, j'ai décidé de faire plus simple pour commencer et de juste récupérer un code pour juste communiquer avec le capteur dht11.
Voilà là où j'ai trouvé le code, mon montage est exactement le même http://letmeknow.fr/blog/tuto-utiliser-un-capteur-temperature-humidite/

Problème, le capteur m'envoie aucune info, le seul retour que j'ai est "Temps d'attente dépassé !",
Voilà le code, si quelqu'un saurait me dire où ça coince ce serait avec grand plaisir :slight_smile:

/** Broche "DATA" du DHT11 */
const byte DHT11_PIN = 5;
 
/** 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 emoji 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 */
}

Avant de regarder le code peux-tu nous dire comment tu as cablé et quoi?

1 Like

Salut John, oui bien sûr:
5v arduino > 5v du dht11
ground arduino > ground du dht11
data du dht11 > pin5 de l'arduino
avec une résistance 10k entre le pin data et le pin 5v du dht11, comme indiqué dans le montage où j'ai pris le code.

Merci beaucoup pour ton coup de main, ca fait plaisir :slight_smile:

Bonjour,
Il y a aussi un article de notre ami Skywodd sur le sujet :

@+

Salut Icare :slight_smile: merci pour le lien, j'étais déjà tombé dessus mais à force d'en trouver plein d'autres je m'y perd un peu, je m'y repenche de ce pas :grin:

J'en déduit si tu as mis une résistance que tu n'as pas un module mais juste le capteur seul?

Tu as mis la résistance mais as tu pensé à mettre le condensateur?

Skyduino - Le DIY à la française: Image
Ne pas oublier le condensateur de 100nF entre VCC et GND (il n’est pas sur le schéma mais il est nécessaire)

Skywodd préconise plutot une résistance de 5K aussi.
:wink:

Déjà ca fait vraiment trop plaisir d'avoir autant de réponses si vite, j'aurais du venir vous voir direct au lieu de perdre du temps sur d'autres forums, encore merci ! :slight_smile:
John, la différence entre module et capteur seul? j'ai exactement> DHT11 - Capteur de temperature et humidite digital - Boutique Semageek, c'est lui que tu appelle module? j'ai bien vu sur des topics que la plupart n'ont que le capteur, sans la petite board....

Et non, j'ai pas mis de condensateur, au moment où j'ai commandé tout mon matos j'ai bien demandé des avis sur les composants qu'il allait me faloir en plus et j'avais soumis l'idée d'un jeu de condo, mais sans réponses, et comme dans l'example que j'ai choisi de suivre l'auteur n'y fait pas mention...je suis passé outre...Donc je m'en procure au plus vite?
J'espère qu'avec ces quelques fails, j'ai pas abimé mon dth11...

Bon comme tu sais pas trop ou tu vas lis l'article de Skywodd dans le détail.
Tu verras la diifférence entre module et pas module, les explications sur le code, sur le condensateur etc...

D'ailleurs c'est bizarre, ton code est exactement le même que celui de Skywodd :grin:

Si tu as exactement DHT11 - Capteur de temperature et humidite digital - Boutique Semageek

alors inutile de rajouter quoi que ce soit, tout est déjà sur le module (résistance et condo). Tu as juste à cabler comme tu as mis plus haut sans rien ajouter.

:grin: Ca marche je m'y penche posément et je reviens vers vous quand je serais un peu plus au point sur le sujet, merci John.

Quelques remarques:
Le DHT11 est très imprécis, il peut convenir pour la mise au point mais pour le montage définitif un DHT22 est préférable.
Comparaison rapide
Humidité
Précision Résolution Répétabilité Gamme de mesure
DHT11 +/- 5% 1% 1% entre 20% et 90%
DHT22 +/- 2% 0,1% 1% entre 0% et 100%

Température
Précision Gamme de mesure
DHT11 +/- 2 C 0C / +50C
DHT22 +/- 0,5C -40C / +80C

Plus de détails en comparant les deux datasheets.

Choix du peltier:
Un paramètre a ne pas perdre de vue est la différence maximale de température qu'un module peltier peut imposer entre sa face froide et sa face chaude. Ce paramètre n'a rien à voir avec sa puissance.
La valeur de ce paramètre ne dépend que de la constitution mécanico/thermique du module.
Généralement on trouve une valeur voisine de 30 Celsius Pour aller au delà il faut souvent passer par des assemblages à plusieurs étages.

68tjs:
Quelques remarques:
Le DHT11 est très imprécis, il peut convenir pour la mise au point mais pour le montage définitif un DHT22 est préférable.

Salut 68tjs, oui je me suis rendu-compte de ça en cherchant des avis sur ce capteur, je vais déjà essayer de terminer le montage avec le dht11, et si trop d'imprécisions perturbent l'équilibre constant au point de rosée, je me procurerait le dht12

Choix du peltier:
Un paramètre a ne pas perdre de vue est la différence maximale de température qu'un module peltier peut imposer entre sa face froide et sa face chaude. Ce paramètre n'a rien à voir avec sa puissance.
La valeur de ce paramètre ne dépend que de la constitution mécanico/thermique du module.
Généralement on trouve une valeur voisine de 30 Celsius Pour aller au delà il faut souvent passer par des assemblages à plusieurs étages.

Oui tu as tout a fait raison, sur ce point là je pense être au point, voilà mes 6 petits peltiers (pas encore reçus)>
http://www.priceminister.com/offer/buy/283451140/module-refroidisseur-tec1-12706-a-effet-peltier-91-2w.html
et je me suis aussi procuré des dissipateurs thermiques Socket 7/370 CPU Cooler Fan w/ Heatsink - Computer Fans & Coolers | Computer Parts | StarTech.com, histoire d'évacuer au mieux la chaleur produite par les peltiers et optimiser la production de froid.

En tout cas pour l'instant, c'est bon premier cap passé, l'affichage de la température et de l'humidité fonctionne !
Prochaine étape, le calcul du point de rosée (dewpoint), pareil je vois ce que je peut faire tout seul mais je viendrais très certainement, bloqué, vous poser des questions, donc si d'emblée vous avez des conseils ou des choses qui pourraient m'être utiles et dont je risque de passer à côté...hésitez surtout pas.

Et ensuite je me pencherait sur la prise de température à la surface de la vitre, pour ca on m'a conseillé "une ctn 10K devrai être suffisante, elle demandera un peu de codage comme son comportement n'est pas linéaire. Mais en faisant un calibrage par mesure, ce type de sonde est plus stable que les TMP36."
Je me suis donc procuré 4 ctn 10k > http://fr.farnell.com/jsp/search/productdetail.jsp?sku=3876585 (datasheet http://www.farnell.com/datasheets/1694632.pdf)
Je pensais pour plus de précision, en diposer 4 à la surface de la vitre et en faire la moyenne, bonne ou mauvaise idée?

Voilà, à très vite je pense, et encore merci pour le coup de main ! :smiley:

EDIT: Petite question en passant, enfin question importante quand même, très souvent quand je test un code, que ce soit un essai de mes petits doigts ou bien un code chopé sur le net, la vérification des erreurs me pond:
"

sketch_apr29b:62: error: 'dht11' does not name a type
sketch_apr29b.ino: In function 'void setup()':
sketch_apr29b:71: error: 'DHT11LIB_VERSION' was not declared in this scope
sketch_apr29b.ino: In function 'void loop()':
sketch_apr29b:79: error: 'DHT11' was not declared in this scope
sketch_apr29b:84: error: 'DHTLIB_OK' was not declared in this scope
sketch_apr29b:87: error: 'DHTLIB_ERROR_CHECKSUM' was not declared in this scope
sketch_apr29b:90: error: 'DHTLIB_ERROR_TIMEOUT' was not declared in this scope

Voilà un exemple de code ou ca me sort ca >

#include <dht11.h>

dht11 DHT11;

#define DHT11PIN 2

void setup()
{
  Serial.begin(115200);
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
}

void loop()
{
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case DHTLIB_OK: 
		Serial.println("OK"); 
		break;
    case DHTLIB_ERROR_CHECKSUM: 
		Serial.println("Checksum error"); 
		break;
    case DHTLIB_ERROR_TIMEOUT: 
		Serial.println("Time out error"); 
		break;
    default: 
		Serial.println("Unknown error"); 
		break;
  }

  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Temperature (°C): ");
  Serial.println((float)DHT11.temperature, 2);

  Serial.print("Temperature (°F): ");
  Serial.println(Fahrenheit(DHT11.temperature), 2);

  Serial.print("Temperature (°K): ");
  Serial.println(Kelvin(DHT11.temperature), 2);

  Serial.print("Dew Point (°C): ");
  Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));

  Serial.print("Dew PointFast (°C): ");
  Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));

  delay(2000);
}
//
// END OF FILE
//

Je me doute bien que ce doit être une erreur courante, pourtant j'arrive pas à trouver la solution...ou au moins à comprendre où ça coinçe...

L'IDE ne trouve pas la librairie correspondant au DHT 11.

Salut,

Normal, ces constantes ne sont pas définies. Sur ton premier code il y avait :

/** Code d'erreur de la fonction readDHT11() */
enum {
  DHT11_SUCCESS,
  DHT11_TIMEOUT_ERROR, 
  DHT11_CHECKSUM_ERROR 
};

C'était pas pour décorer :wink:

oreo18000:
Je me doute bien que ce doit être une erreur courante, pourtant j'arrive pas à trouver la solution...ou au moins à comprendre où ça coinçe...

Sans doute la librairie mal intallée

oreo18000:

68tjs:
Quelques remarques:
Le DHT11 est très imprécis, il peut convenir pour la mise au point mais pour le montage définitif un DHT22 est préférable.

Salut 68tjs, oui je me suis rendu-compte de ça en cherchant des avis sur ce capteur, je vais déjà essayer de terminer le montage avec le dht11, et si trop d'imprécisions perturbent l'équilibre constant au point de rosée, je me procurerait le dht12

Choix du peltier:
Un paramètre a ne pas perdre de vue est la différence maximale de température qu'un module peltier peut imposer entre sa face froide et sa face chaude. Ce paramètre n'a rien à voir avec sa puissance.
La valeur de ce paramètre ne dépend que de la constitution mécanico/thermique du module.
Généralement on trouve une valeur voisine de 30 Celsius Pour aller au delà il faut souvent passer par des assemblages à plusieurs étages.

Oui tu as tout a fait raison, sur ce point là je pense être au point, voilà mes 6 petits peltiers (pas encore reçus)>
http://www.priceminister.com/offer/buy/283451140/module-refroidisseur-tec1-12706-a-effet-peltier-91-2w.html
et je me suis aussi procuré des dissipateurs thermiques Socket 7/370 CPU Cooler Fan w/ Heatsink - Computer Fans & Coolers | Computer Parts | StarTech.com, histoire d'évacuer au mieux la chaleur produite par les peltiers et optimiser la production de froid.

bonjour
Attention avec ce genre de petits modules peltier
Si il sont tres facile d'utilisation, il faut bien avoir à l'esprit qu'il ne faut jamais les alimenter sans prealablement avoir déjà "installé" les conditions "mecaniques" de dissipation coté chaud et froid.

Sinon c'est decollage/fonte de soudure assuré des fils d'alim sur le module en moins de 10" :grin:
il faut aussi toujours avoir à l'oeil l'intensité effectivement debitée pour alimenter le module et la reguler eventuellement.

edit : retrouvé "un cas" pour illustration
http://cjoint.com/14av/DDDpjPSbUHf_peltier041.jpg

Etrange comme projet ! 8)

les meilleurs capteurs d'humidité sont les capteurs à point de rosée ! tu refroidis ta vitre avec un peltier, tu détectes l'appartition de la rosée avec un emetteur/repecteur lumineux qui se réfléchit sur la vitre, tu mesures la température de la vitre quand la rosée apparait et tu as la température de rosée de l'air (et tu peux en déduire l'humidité relative par exemple) ... en faisant ces cycles chauffages / refroidissement (inversion du courant dans le peltier avec un pont en H par exemple) tu arrives à cerner le point de rosée (assez simple sur le principe, un peu plus futé à réaliser ... surtout pour la mersure de la surface ou apparaît la rosée ...)

si tu fais 2 montages identiques, l'un te sert de capteur pour asservire l'autre

Salut vous tous, pleins de réponses, ça fait toujours autant plaisir, merci pour votre interêt et pour le coup de main encore une fois :slight_smile:

Bon première chose, la librairie qui coinçe:

fdufnews:

oreo18000:
Je me doute bien que ce doit être une erreur courante, pourtant j'arrive pas à trouver la solution...ou au moins à comprendre où ça coinçe...

Sans doute la librairie mal intallée

B@tto:
Salut,

Normal, ces constantes ne sont pas définies. Sur ton premier code il y avait :

/** Code d'erreur de la fonction readDHT11() */

enum {
  DHT11_SUCCESS,
  DHT11_TIMEOUT_ERROR,
  DHT11_CHECKSUM_ERROR
};




C'était pas pour décorer ;)

john_lenfr:
L'IDE ne trouve pas la librairie correspondant au DHT 11.

J'ai bien essayé de la désintaller, re-télécharger, re-installer > idem
Copier coller les codes du .h et du .cpp en créant dans la librairie les fichiers correspondants > idem
Mais pour ça, vous pouvez pas trop m'aider, soit je m'y prend mal, soit j'ai un souci de version...ca doit être un truc bâteau...

B83s:
Etrange comme projet ! 8)

les meilleurs capteurs d'humidité sont les capteurs à point de rosée ! tu refroidis ta vitre avec un peltier, tu détectes l'appartition de la rosée avec un emetteur/repecteur lumineux qui se réfléchit sur la vitre, tu mesures la température de la vitre quand la rosée apparait et tu as la température de rosée de l'air (et tu peux en déduire l'humidité relative par exemple) ... en faisant ces cycles chauffages / refroidissement (inversion du courant dans le peltier avec un pont en H par exemple) tu arrives à cerner le point de rosée (assez simple sur le principe, un peu plus futé à réaliser ... surtout pour la mersure de la surface ou apparaît la rosée ...)

si tu fais 2 montages identiques, l'un te sert de capteur pour asservire l'autre

Salut B83s :), pas con comme montage, mais quand-même bien plus compliqué que ce que j'espère arriver à faire pour le moment, et vu qu'apparement le dth11 et le dth12 permettent le calcul du point de rosée...

sketch_apr29b:62: error: 'dht11' does not name a type

Ce message est la conséquence d'une librairie absente (ou non reconnue). Pas d'un problème de version de librairie.
Lorsque tu ouvres l'IDE tu n'as pas de message qui t'indique une erreur sur la librairie en question?
Est-ce que la librairie apparaît dans le menu Croquis/Importer bibliothèque ... ?

oreo18000:
J'ai bien essayé de la désintaller, re-télécharger, re-installer > idem
Copier coller les codes du .h et du .cpp en créant dans la librairie les fichiers correspondants > idem
Mais pour ça, vous pouvez pas trop m'aider, soit je m'y prend mal, soit j'ai un souci de version...ca doit être un truc bâteau...

La librairie doit être placée dans le sous-répertoire librairies du répertoire sketchbook.
Le nom du répertoire de la librairie doit correspondre au nom de .cpp principal de la librairie.

Hey :slight_smile:

fdufnews:

sketch_apr29b:62: error: 'dht11' does not name a type

Ce message est la conséquence d'une librairie absente (ou non reconnue). Pas d'un problème de version de librairie.
Lorsque tu ouvres l'IDE tu n'as pas de message qui t'indique une erreur sur la librairie en question?
Est-ce que la librairie apparaît dans le menu Croquis/Importer bibliothèque ... ?

Non, aucun message d'erreur, et oui, que ce soit celle que j'enregistre dans le dossier "mes documents/Arduino/librairies", où celle que je crée moi-même en copiant-collant le code dans un fichier .ino en remplaçant respectivement par .h et .cpp

oreo18000:
J'ai bien essayé de la désintaller, re-télécharger, re-installer > idem
Copier coller les codes du .h et du .cpp en créant dans la librairie les fichiers correspondants > idem
Mais pour ça, vous pouvez pas trop m'aider, soit je m'y prend mal, soit j'ai un souci de version...ca doit être un truc bâteau...

La librairie doit être placée dans le sous-répertoire librairies du répertoire sketchbook.
Le nom du répertoire de la librairie doit correspondre au nom de .cpp principal de la librairie.

C'est à dire dht11 ?

Salut vous tous :hello:
Bon ça fait un petit moment que j'ai tout reçu et que je me suis penché sur le code, j'ai commencé en essayant de le faire moi-même petit à petit mais après d'innombrables échecs j'essaye de me simplifier la vie en récupérant et en ageançant des morceaux de code déjà faits.
Petit rappel du déroulement souhaité>

{
Arduino interroge le capteur de temp/hum (air);
Recherche dans la courbe de point de rosée la température à atteindre à la surface de la vitre;
Interroge la température à la surface de la vitre (moyenne des 4 thermistances);
Si température supérieure:
Mise en tension des peltiers jusqu’à obtention de la température souhaitée;
Sinon laisse les peltiers éteints
}

Pour la première partie c'est bon, j'arrive à mesurer la température et l'humidité de l'air ambiant>

/** Broche "DATA" du DHT11 */
const byte DHT11_PIN = 5;
 
/** 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 emoji 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 */
}

Pour la suite par contre ça coince, il faut que j'y intègre le calcul du point de rosée, et j'arrive pas à savoir comment m'y prendre...Du coup si un d'entre vous se sent de me filer un coup de main ce sera avec un immense plaisir et une joie non mesurée :smiley: