Capteur température et ventilo 12V

Bonjour,

Je souhaite mettre en place, en plus d'un capteur DHT22, un ventilateur 12V (type ordinateur) comme celui-ci :

Ce ventilateur doit s'allumer quand la température dépasse 25°C et sinon rester éteint. Je n'utilise donc pas de sortie PWM.

J'ai écris un code pour cela mais en absence de matériels (toujours en cours de livraison) je ne peux pas tester. Cependant j'ai déjà quelques interrogations sur ce code. Je me suis inspiré pour cela du code exemple DHT22 de la librairie et de certain tutos sur le ventilateur 12V trouvés sur internet :
http://www.wikidebrouillard.org/images/0/05/CodeVentilateur.jpg et http://fr.openclassrooms.com/forum/sujet/arduino-controle-ventilateur-12v

#include <dht.h>

//Variables pour capteur DHT22
#define DHT22_PIN 2
float temperature=0;
float humidity=0;

//Variable pin ventilateur
#define VENTILO_PIN 13

void setup(){
Serial.begin(9600);
pinMode(13,OUTPUT); //ventilo en sortie
}

void loop(){
dht DHT;
float Temp_max = 25.00; //température max

//Si la température ou humidité est différente de celle relevée précédement alors l'écrire
if((DHT.humidity != humidity) || (DHT.temperature != temperature)){
Serial.print (DHT.humidity,2);
Serial.print (",\t");
Serial.println (DHT.temperature,2);
temperature=DHT.temperature;
humidity=DHT.humidity;
}

//Si la température est supérieure à 25° alors allumé le ventilo
if(DHT.temperature > Temp_max){
digitalWrite(13,HIGH);
}
else digitalWrite(13,LOW); //sinon l'éteindre

}

  • Je viens de me rendre compte que l'exemple DHT22 ne déclare pas la broche de sortie du capteur bizarre non ? IL n'y a pas de pinMode(DHT,2) par exemple ?

  • J'ai d'abord voulu déclarer la variable Temp_max en tant que byte mais je ne sais pas si après la comparaison aurait été possible avec DHT.temperature ?

  • Au niveau du ventilo, je trouve sur un des tutos que le niveau HIGH correspond à allumer et sur l'autre que c'est le niveau LOW qui permet de faire tourner le ventilo ?

  • Un des tutos indique l'utilisation d'un transistor mais pas l'autre. Y a t-il une erreur ?

  • Faut il alimenter l'arduino avec une alim extérieure pour un montage de ce type (est ce que la simple alimentation 5V suffira à gérer le capteur + le ventilateur + un autre capteur et un signal PWM pour des LED) ?

Merci !

La bibliothèque pour le DHT22 a été mise à jour --> voir playground version 1.7.
Il faut abandonner immédiatement les anciennes bibliothèques à base de digitalRead qui génère trop d'erreurs Timeout.

L'auteur utilise une solution très proche de la discussion qui a eu lieu ici il y a 2 ou 3 semaines.

Donc c'est normal qu'il y ait pas de déclaration de pin ?
J'ai pas de digitalread dans mon modèle moi.

Donc tu as la dernière version --> c'est bon.
Effectivement les pins sont déclarées "en dur" par un #define dans le programme. C'est "un peu beaucoup" limite que pour une bibliothèque en *.cpp on ne puisse pas choisir la pin et donc déclarer autant d'objet dht que l'on veut.

En fait ce n'est pas une bibliothèque mais une preuve de faisabilité.
C'est modifiable en ajoutant un constructeur à la classe où on passerait la pin et le type de DHT.

Ok merci pour la réponse !

Concernant mes autres questions quelqu'uns à une réponse/conseil à m'apporter ?

  • J'ai d'abord voulu déclarer la variable Temp_max en tant que byte mais je ne sais pas si après la comparaison aurait été possible avec DHT.temperature ?

  • Au niveau du ventilo, je trouve sur un des tutos que le niveau HIGH correspond à allumer et sur l'autre que c'est le niveau LOW qui permet de faire tourner le ventilo ?

  • Un des tutos indique l'utilisation d'un transistor mais pas l'autre. Y a t-il une erreur ?

  • Faut il alimenter l'arduino avec une alim extérieure pour un montage de ce type (est ce que la simple alimentation 5V suffira à gérer le capteur + le ventilateur + un autre capteur et un signal PWM pour des LED) ?

salut je m'excuse mais je n'utilise pas la meme librairie que vous donc il ce peut que je me plante !

  • Je viens de me rendre compte que l'exemple DHT22 ne déclare pas la broche de sortie du capteur bizarre non ? IL n'y a pas de pinMode(DHT,2) par exemple ?

normal vu la conception de la librairie cela permet de ne pas assigné de pin directement au DTH pandant la création de l'objet
, et surtout cela permet d'avoir plusieur dth et de simplement les intérogés grace a la definition en haute de programe
dans l'exemple

 #define DHT22_PIN 5

je pense que l'on peut alors cree plusieur def ou un tableau de valeur de pin pour intérogé plusieur capteur :
( biensur je n'ai pas tester mais je ne vois pas pourquoi ça ne fonctionerai pas)

int tab_pinDth[]={
  5,6,7,8};

for( byte i=0; i<sizeof(tab_pinDth) ,i++){
  if (DHT.read22(tab_pinDth[i])==DHTLIB_OK){
    Serial.print("DTH hum");
    Serial.print(i);
    Serial.print(" : ");
    Serial.println(DHT.read22(DHT.humidity));
    Serial.print("DTH Temp");
    Serial.print(i);
    Serial.print(" : ");
    Serial.println(DHT.read22(DHT.temperature));
  }
  else{
    Serial.print("DTH ");
    Serial.print(i);
    Serial.print(" erreur ");
  }
}
  • J'ai d'abord voulu déclarer la variable Temp_max en tant que byte mais je ne sais pas si après la comparaison aurait été possible avec DHT.temperature ?

dans la lib humidity et temperature sont defini par des double donc un chifre a virgule tu vas donc perdre en precision et le resultat sera tronqué

  • Au niveau du ventilo, je trouve sur un des tutos que le niveau HIGH correspond à allumer et sur l'autre que c'est le niveau LOW qui permet de faire tourner le ventilo ?

tout depand de la magniere dont et fait l'intarface de "comutation" la plupar du temps on s'arange pour que ce soit la mise a la masse donc LOW de la sortie pour faire la comutation "on" , sans etre sur cela evite d'avoir a tire quelque chose sur la sortie.

  • Un des tutos indique l'utilisation d'un transistor mais pas l'autre. Y a t-il une erreur ?

est ce que par hazard l'un des ventilo ne serai pas un quatre fil avec par exemple un fil pour une commande PWM ?

  • Faut il alimenter l'arduino avec une alim extérieure pour un montage de ce type (est ce que la simple alimentation 5V suffira à gérer le capteur + le ventilateur + un autre capteur et un signal PWM pour des LED) ?

tu devrai avoir la reponse asser facilement ,
-ton ventilo il fonctione sous quel tension ?

  • tes capteur consome combien?
  • si ton ventilo est en 5V (je serai surpris) combien consome t'il (A)?
    bref il y a de tres forte probabilité pour que ton arduino n'ai pas asser de jus sur un port usb et que ton montage neccesite plusieur tension differente et une intensité plus importante que ce que peut debité l'arduino.

Quote

  • Au niveau du ventilo, je trouve sur un des tutos que le niveau HIGH correspond à allumer et sur l'autre que c'est le niveau LOW qui permet de faire tourner le ventilo ?

tout depand de la magniere dont et fait l'intarface de "comutation" la plupar du temps on s'arange pour que ce soit la mise a la masse donc LOW de la sortie pour faire la comutation "on" , sans etre sur cela evite d'avoir a tire quelque chose sur la sortie.

Je ne comprend pas bien de quelle interface de commutation tu parles ?

  • Un des tutos indique l'utilisation d'un transistor mais pas l'autre. Y a t-il une erreur ?

est ce que par hazard l'un des ventilo ne serai pas un quatre fil avec par exemple un fil pour une commande PWM ?

Je n'ai pas l'impression ! en tout cas ce n'est pas précisé : http://www.wikidebrouillard.org/index.php/Ventilateur_avec_arduino
http://fr.openclassrooms.com/forum/sujet/arduino-controle-ventilateur-12v
Dans mon cas c'est uniquement 3 fils (noir jaune rouge) et je n'utiliserai pas de PWM.

  • Faut il alimenter l'arduino avec une alim extérieure pour un montage de ce type (est ce que la simple alimentation 5V suffira à gérer le capteur + le ventilateur + un autre capteur et un signal PWM pour des LED) ?

tu devrai avoir la reponse asser facilement ,
-ton ventilo il fonctione sous quel tension ?

  • tes capteur consome combien?
  • si ton ventilo est en 5V (je serai surpris) combien consome t'il (A)?

Mon ventilo est un 12 V, 0.6 A. Les capteurs sont le DHT22 https://www.adafruit.com/datasheets/DHT22.pdf et le MG811 MG-811 CO2 Sensor Module | Sandbox Electronics.

Quelle serait l'alimentation extérieure la plus adaptée (entre 7 et 12V) ? Cela influe t'il sur la durée de vie de la carte ?

En pj une datasheet du DHT22/AM2302 un peu moins "folklorique" que j'ai trouvé par hasard.
Le DHT22 est un bon produit mais avec une gestion 100% " à la chinoise".

AM2302.pdf (570 KB)

Je ne comprend pas bien de quelle interface de commutation tu parles ?

ce qui enclenche le ventilateur n'est pas directement la mise au niveau haut ou bas de la sortie de l'arduino , mais en générale la mise en conduction ou l'arret d'un transistor relier apres la sortie de l'arduino , et dans ce cas on peut, en fonction de la conception de ce systeme de comutation metre en marche soit par un niveau haut de la sortie de l'arduino( mais ça pompe sur la sortie ) soit par le niveau bas au quel cas la sortie est a la masse . c'est comme ça que fonctione les carte a 8 relais que l'on trouve sur ebay par exemple.

Je n'ai pas l'impression ! en tout cas ce n'est pas précisé : http://www.wikidebrouillard.org/index.php/Ventilateur_avec_arduino
http://fr.openclassrooms.com/forum/sujet/arduino-controle-ventilateur-12v
Dans mon cas c'est uniquement 3 fils (noir jaune rouge) et je n'utiliserai pas de PWM.

oui il faut utilisé un transistor pour faire la comutation, voir ma premiere réponse !

Mon ventilo est un 12 V, 0.6 A. Les capteurs sont le DHT22 https://www.adafruit.com/datasheets/DHT22.pdf et le MG811 MG-811 CO2 Sensor Module | Sandbox Electronics.

Quelle serait l'alimentation extérieure la plus adaptée (entre 7 et 12V) ? Cela influe t'il sur la durée de vie de la carte ?

donc pas le choix il te faut une alime externe de 12V pour le ventilateur
pour le DTH le 5V sur la carte arduino
pour le MG811 le 5V sur la carte arduino ( si c'est pour allimenter le circuit de mesure pas pas le systeme de chauffage du capteur)
pour le chauffage du capteur C02 , le 12V de l'alime
pour la carte arduino , le 12V de l'alime ( atention le regulateur de tension qui est sur la carte peut chaufait et planter le systeme en decendant a 9V il ne devrai pas trops faire des siene)

tien la miene semble encor plus chinoise ! :grin:

du coup je prend la tiene!

DHT22.pdf (897 KB)

Et pour le choix du transistor comment cela se fait-il ?

Niveau branchement du ventilateur sur la carte arduino ça donne quoi ? Le fil noir est-il tjs la masse ? Et le rouge et le jeune ?

Si j'ai une alim 12V (https://www.conrad.nl/nl/dehner-elektronik-sys-1381-1212-w2e-euro-stekkernetvoeding-vaste-spanning-12-vdc-1000-ma-512724.html) (pour alimenter un ampli op) est ce que je peux me servir de la même pour alimenter la carte ? Si oui comment (dédoublement fil ?) ? Y a t-il un risque?

si j'ai bien compris tu as des LED aussi l'alime que tu evoque ne fait que 1 ampere en sortie est ce que ça va sufire ?
regarde du coté des meanweel type industriel 12V, 25W ou 50W qui debite plus et sont de tres bonne alime a decoupage

sur le ventilateur Rouge =+, noir=Masse, Jaune = conptetoure( il me semble).

apres pour dedouble des fil faudra metre les main dans le cambouis , domino , waggo , épisure bref va faloir dedoublé , et tands que tu n'arrive pas a la limite que debite l'alimentation ( en A) pas de probléme , attention toutefois au probléme de mise en route l'ors de l'alumage du ventilateur.( ne pas prendre une alime trop faible ou alors lui ajouter un condo pour pas quel s'ecrase de trop.

J'ai du mal à appréhender comment choisir la bonne alim. Quel paramètre je dois regarder dans la datasheet des capteurs pour savoir ce qu'ils requièrent en A ?

Les LED sont réliées au secteur (220V) donc je pense que la carte doit simplement alimenter le signal PWM qui servira ensuite à régler l'intensité des LED non ?

en general les capteur sont pas de gros demandeur et passe largement sur l'alime 5V que fourni la carte arduino ,
pour bien choisir ton allime il faut que tu regarde la tension dons tes systemes on besoin, puis que tu regarde combien il consome de courrant en fonctionement ( sur le capteur c02 c'est le IH environs 200mA qui est le plus important) . apres pour tout les apareils qui contienne des bobines ( example moteur, relais ) il faut faire attention car il sont consomateur d'un plus fort courant au demarage ou a chaque enclanchement.
il te suffi ensuite de prendre un peut plus que la somme de tout ces apareil en fonctionement simultané!

pour les led ok je n'avais pas fait attention qu'il y avais un driver commandable par PWM! donc RAS coté LED

Merci ! Oui le capteur de CO2 à sa propre alimentation (similaire à celle que j'utilise pour l'ampli op mais en 9V).

Et concernant le choix du transistor pour le ventilateur comment je dois le choisir (fonctions de quels paramètres) ?

desacant:
Et concernant le choix du transistor pour le ventilateur comment je dois le choisir (fonctions de quels paramètres) ?

A priori je dirais (à la réserve près que je ne connais pas le ventilateur) :
Courant max = 2 à 3 fois celui du ventilateur --> les moteurs ont un appel de courant au démarage, une fois démarrés ils consomme moins.
Tension max entre le Collecteur/Drain et l'Emetteur/Source que peut supporter le transistor quand il est à l'état bloqué -> pas moins de 60 V, si 100V disponible ne pas hésiter: il faut toujours prendre des marges à cause des sur-tensions dans les bobinages des moteur quand il s'arrètent, même avec la diode de roue libre indispensable.
Paramètre VCE0 pour un bipolaire ou VDS0 pour un MosFet

Si c'est un bipolaire ne pas dépasser 10 mA dans la base au delà prendre un assemblage Darlington.
Si c'est un MossFet prendre un Vgs threshold de 2 V maximum sinon il ne sera pas saturé avec 5 V sur sa gate.

Bonjour,

C'est ce ventilateur : Startseite - Scythe EU GmbH : Scythe EU GmbH

Donc en 12V et 0.6 A.

Après je ne comprends pas les termes " Collecteur/Drain et l'Emetteur/Source" donc j'ai du mal à comprendre tes explications désolé si tu peux me donner plus de précision maintenant que tu connais le type de ventilateur cela me serait très utile ! Merci.

desacant:
Donc en 12V et 0.6 A.
Après je ne comprends pas les termes " Collecteur/Drain et l'Emetteur/Source"

C'est bien dommage car si tu veux te servir d'un transistor il va falloir faire un effort personnel de documentation.

En hyper réducteur dans ton cas tu va utiliser le transistor comme un interrupteur.
Le courant va passer par 2 pattes et le 3ème servira de commande.
Ces pattes ont un nom qui pour éviter les confusions dépend du type de transistor.

Toujours en hyper réducteur, mais suffisant pour ton application tu pourra utiliser deux type de transistors :

  • type bipolaire NPN il existe aussi en PNP --> ne sert à rien dans ton appli
  • type MosFet canal N il existe aussi en canal P --> ne sert à rien dans ton appli

Avec un bipolaire il faut mettre une résistance en série avec la commande --> voir les inombrables tuto pour la calculer.
Avec un MosFet en théorie il n'y a pas besoin de résistance, en pratique on met toujours une résistance d'environ 10kohms entre la commande et la masse.

Les noms :
Type Commande Accès - Accès +
Bipolaire Base Emetteur Collecteur
xFet Gate Source Drain

Courant que doit accepter le transistor:
Un ventillateur c'est un moteur.
Un moteur à deux valeurs de courant : au démarage et quand il tourne .
Seul le courant moteur tournant est donné, au démarrage le courant peut être beaucoup plus élevé.
Donc pour 0,6A tournant je prendrai un transistor qui supporte au minimum 2 à 5 A pour être tranquille.
Attention à ne pas oublier la diode en parallèle sur le moteur, dite diode de roue libre : si tu l'oublie tu peux dire adieu au transistor.

La mode est au MosFet. Le paramètre important est le "Vgd threshold". Ce terme te parait du charabia je le nommerai en français : "tension de pincement".
Imagine un tuyau arrosage complètement pincé --> l'eau ne coule plus.
Tire un peu sur les flancs pour ouvrir le tuyau et quelques gouttes vont commencer à couler --> c'est la tension de pincement.
Ouvre complètement le tuyau : l'eau coule à flot.

Tu imagine la suite : la tension de pincement correspond au déblocage du transistor le courant n'est que de quelques µA ou mA. Pour obtenir plusieurs centaines de mA ou plusieurs ampères il faut mettre une tension beaucoup plus élevée.
Comme tu ne dispose que de 5V en sortie du microcontroleur il faut choisir un MosFet avec un "Vgs threshold" au pire égal à 2V pour pouvoir saturer le transistor avec 5V.

Pour la référence tout dépend de tes sources d'approvisionnement.

Merci pour ces précisions !

J'ai fait une recherche sur Farnell avec ces paramétres : Mosfet : canal N, Courant de drain Id entre 2.5 et 5A, Tension de seuil Vgs au max 2V. Et j'obtiens 221 résultats ! A part le critère du prix, dois-je faire attention en particulier à un des autres paramètres proposés ?

Il y a notamment la tension Vds max, la tension mesure Rds et la résistance (surement pas importante si l'on ajoute une 10k entre la commande et la masse non?)

desacant:
Merci pour ces précisions !

J'ai fait une recherche sur Farnell avec ces paramétres : Mosfet : canal N, Courant de drain Id entre 2.5 et 5A, Tension de seuil Vgs au max 2V. Et j'obtiens 221 résultats ! A part le critère du prix, dois-je faire attention en particulier à un des autres paramètres proposés ?

Il y a notamment la tension Vds max, la tension mesure Rds et la résistance (surement pas importante si l'on ajoute une 10k entre la commande et la masse non?)

bonjour
Regarde du coté des mosfet N logic
privilegie un boitier T-220