Connexion d'un ventilateur 5V sur arduino Uno R3 avec Base Shield grove

Bonjour,
Dans le cadre d'un système de culture automatisée de champignons, j'ai besoin de relier un ventilateur pour changer l'air de la serre de culture de manière régulière.

Matériel :
J'ai une carte Arduino Uno R3 agrémentée du Base Shield Seed Studio v2.1 (car il y a aussi d'autres capteurs et relay connectés) et j'ai donc acheté un ventilateur 5V pour ordinateur qui a la bonne taille et le bon débit pour le volume de ma serre (le Noctua NF-A20 5V 200x30 mm). J'ai voulu connecter directement le ventilateur sur le shield mais le câble du ventilateur n'avait pas la bonne connectique. J'ai donc réalisé une soudure entre le câble du ventilateur et un câble grove de connexion pour le shield (rouge avec rouge, noir avec noir, jaune avec jaune et blanc avec rien car le ventilateur n'a que 3 fils dans son câble :wink: ). Pleine de confiance dans mon installation, j'ai fait un programme simple pour allumer le ventilateur selon la température détectée par le capteur de température (ainsi que les autres relays du système de culture, mais peut importe, puisqu'eux sont fonctionnels).

En l'occurrence, le code :

#include <DHT.h>

// définition capteur DHT et pin
#define DHTTYPE DHT22
#define DHTPIN 2

// Initialisation capteur
DHT dht(DHTPIN, DHTTYPE);

//définition pins des relais 
int heatPin = 4;
int humidityPin = 8;
int windPin=6;

//définition de la temperature cible
float tempCible=30;
float humidityCible=47;
float ventiloCible=30;

void setup() {
  pinMode(heatPin, OUTPUT);
  pinMode(humidityPin, OUTPUT);
  pinMode(windPin, OUTPUT);
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  
  // gestion erreur de lecture
  if(isnan(humidity) || isnan(temperature)){
    Serial.println("Erreur de lecture du capteur DHT");
    return;
  }

  Serial.print("Temp:");
  Serial.println(temperature);

  Serial.print("Hum:");
  Serial.println(humidity);

  if(temperature > tempCible){
    digitalWrite(heatPin, LOW);
    digitalWrite(windPin, HIGH);
    Serial.println("Il fait trop chaud");
    Serial.println("Ventilateur en marche");
    Serial.println("Coussin à l'arret");
  } else {
    digitalWrite(heatPin, HIGH);
    digitalWrite(windPin, LOW);
    Serial.println("Il fait trop froid");
    Serial.println("Ventilateur à l'arrêt");
    Serial.println("Coussin en marche");
  }

  if(humidity < humidityCible){
      digitalWrite(humidityPin, HIGH);
      Serial.println("Pas assez humide, on lance la vapeur");
    } else {
      Serial.println("Trop humide, on arrete la vapeur");
      digitalWrite(humidityPin, LOW);
    }

  delay(30000);
}

Problème : quelle que soit la température, le ventilateur tourne en continu et ne s’arrête pas (sauf si je déconnecte l'alimentation de la carte Arduino)

J'ai pensé que cela venait du programme, d'où les print de console pour confirmer que mes if/else sont bons. Et sur la console, en fonction de la température, les bonnes phrases s'affichent. Donc je présume que le programme n'est pas en cause.

J'ai pensé que peut être le shield avait un probleme de connexion, j'ai changé la prise du ventilateur (ainsi que dans le programme) mais résultat identique.

J'ai même testé de brancher le ventilateur sur une prise du shield non concernée par le programme, qui devrait donc être théoriquement en LOW (non?) . Ben il s'allume quand même et tourne en continu.

Le fait qu'il tourne me fait penser que ma soudure n'est pas en cause non plus, car sinon, le courant ne passerait pas, (non ?)

De mes lectures de recherche, j'ai cru comprendre qu'un ventilateur ne peut pas être connecté directement sur la carte, mais pourtant, c'est du 5V comme les spécifications données par arduino... Qui plus est, si le ventilateur nécessite plus de puissance, il devrait ne pas tourner du tout, non ?

En l'absence de compréhension de ma part, j'ai tenté de reproduire le système du ventilateur connecté à un relay que j'ai vu sur les articles en question. Mais je ne comprends pas comment fournir de l’électricité au ventilateur pour le coup. Il faut des piles ? une batterie ? Comment on calcule ça et comment on le relie au ventilateur ?

Là, mon ignorance de l’électronique et de l’électricité me limite dans la compréhension des posts/articles que je lis. Et je ne trouve pas de personnes qui utilisent un shield, ce qui fait que j'ai du mal à transposer les schémas que je trouve...

J'espère avoir donné suffisamment d'informations pour que mon problème soit clair et complet.
Merci par avance à celles et ceux qui auront la patience de lire et de me dire où est mon erreur.
Bonne journée à tous,

Bonjour arsenicdirty

Excellent reflex :wink:

La commande de ventilateur en fonction de la température fonctionne très bien.
Pourrais tu donner un lien sur ton ventilateur?

A+
Cordialement
jpbbricole

D'après la datasheet le courant typique est de 0,13 Ampère. Il te faut forcément un transistor de commande. Une sortie d'Arduino est tout juste capable de fournir 20mA.

Bonjour,

Misére, ne fait pas cela STP,
Ro=+5V
No=0V
Donc il tourne...toujours

Et
Ja=PWM coté ventilateur et In ou Out côté Arduino

Non, ce n'est pas bon du tout.

Est-ce que tu sais ce que c'est que le PWM, est-ce que tu en veut?

Ton Arduino n'est pas assez puissant pour faire tourner longtemps to ventilo.

Il faut reprendre les bases, tu es au bon endroit, c'est déjà ça.

Merci déjà pour la réponse rapide, je ne m'y attendais pas. Un grand merci !

Cela confirme mes recherches, il ne fallait pas le connecter en direct sur la carte. Je me mélange un peu entre les volts et les ampères, je vais devoir réviser ce sujet. (et oui, je sais que ça fait partie des bases)

Je suis désolé si ma question est stupide, mais un transistor de commande, c'est la même chose qu'un relay comme ça : Relay ?

Vos articles de blog sont d'un niveau de compréhension un peu supérieur à mes connaissances actuelles. J'ai essayé de bien lire, mais auriez vous la gentillesse de confirmer si j'ai bien compris les conclusions de votre article appliqué à ma situation : je pense que je suis donc en possession d'un ventilateur à 3 broches (car la prise de sortie à 3 "trous"). Et que je peux donc faire abstraction de l'usage du fil jaune (tachymètre ?) puisque j'ai seulement besoin que le ventilateur tourne ou pas. C'est bien ça ?

Si le transistor est bien ce que j'appelle un relay, je peux donc m'appuyer sur le schema proposé dans cet article Tutoduino pour la connexion. C'est à dire placer le fil rouge du ventilateur dans le relay (lui même connecté avec le cable grove à la carte arduino). Par contre, d'où vient le courant qui alimente le ventilateur en lui meme ? Cette partie est floue pour moi.

Schéma de principe:

1 Like

Oui.

Oui tu peux très bien piloter le ventilateur à l'aide d'un relais, si le PWM n'est pas utile.
Comme apparemment tu as plusieurs relais dans ton système, je suppose que tu as prévu une alimentation 5V ?
Sinon, dans un premier temps, tu peux alimenter par l'USB. Un relais activé consomme 70mA. Tu ne pourras pas activer plus de 500mA / 70mA = 7 relais. Plutôt 6 relais, car il faut bien un peu de courant pour faire fonctionner l'ARDUiNO.

Oui, effectivement je n'avais pas percuté.
Si tu branches le fil rouge sur le rouge du Groove et le fil noir sur le noir, le ventilo tourne en permanence. Le fil jaune n'est pas la commande PWM, c'est le tachymètre.

Sur le petit schéma de l'auteur tu verras qu'il alimente le relais à l'aide de la broche 5V de l'ARDUINO, sans pile, ni batterie :


Il manque simplement la connexion du ventilateur :

  • +5V ARDUINO -> C du relais
  • 0V ARDUINO -> fil noir ventilateur
  • NO du relais -> fil rouge ventilateur

Et ajoute une petite diode en inverse sur le ventilateur, comme sur le schéma modifié de jef59. post #7. Cette diode absorbe les surtensions à la coupure, et augmente la durée de vie du relais.

En n'oubliant pas que ventilateur + relais = 130mA + 70 mA, donc déjà 200mA, alors que tu as droit à 500mA au total sur l'USB.

Quand on débute sur Arduino, ce n'est pas franchement évident de comprendre comment il se dépatouille pour s'alimenter correctement.

Si tu l'alimente par la prise USB, il puisse son énergie et son VCC que l'on retrouve sur le grove à partir du 5V de ton USB (PC ou autre).

Si tu l'alimente par la prise jack avec une tension entre 7 et 12V, il transforme cette tension en 5V régulé, et le VCC de ton grove provient de ce 5V interne à Arduino.

Le fabricant des cartes Arduino ne dit rien sur le maxi que peut fournir ce régulateur.
Celui ci est autoprotegé contre le surchauffement et les surintensités.

Une 3éme possibilité, que personnellement je ne conseille pas sans savoir ce qu'elle implique sur un UNO.
Cette possibilité est d'alimenter ton Arduino directement en 5V régulé connecté sur le +5V Arduino, c'est à dire la broche VCC de ton grove.

Et d'alimenter ton ventilateur avec cette même alim 5V, via le relais.

Un petit schéma s'impose, à suivre.

La précaution à prendre pour la 3éme solution:

NE PAS ALIMENTER EN MEME TEMPS PAR USB ET VCC

Ah désolé, je ne retenterai pas l’expérience, j'espère que vos yeux n'ont pas trop saignés sur mes bêtises... :rofl: :joy: :face_with_hand_over_mouth:
Je ne sais pas ce qu'est le PWM, je viens donc de chercher. Et je n'ai pas besoin de varier la vitesse de rotation du ventilateur. J'ai juste besoin qu'il tourne à la vitesse prévue et qu'il s’arrête.

Et j'ai bien conscience que mes bases sont fort fragiles, pour ne pas dire inexistantes... :woozy_face: Mais bon, c'est en forgeant qu'on devient forgeron parait il !! :wink:

Moi même je ne suis pas le forgeron idéal. :crazy_face:

1 Like

Merci pour vos lumières, je crois que je commence à mieux saisir ce qu'il faut que je fasse. Le fil jaune de mon ventilateur est donc un tachymètre, dont je n'ai pas plus l'usage que le PWM. Mais c'est toujours mieux de savoir à quoi sert mon materiel ! Il me semble que j'ai compris comment alimenter l'arduino et le ventilateur, en l'occurrence, je vais le faire par des sources différentes.

Cette phrase m'a fait réaliser que je n'avais pas pris en compte du tout le nombre maximal de "périphériques" reliés à l'arduino :

Je me permet de joindre un schéma qui reprend mon projet, mais c'est la diode roue libre que je ne vois pas comment ajouter, n'ayant pas de breadboard. J’espère que vous excuserez la qualité douteuse du schéma... j'ai fait de mon mieux avec ma souris.

Voyez vous la dedans des éléments qui vont poser probleme ? Ou ai-je bien compris le montage que je dois réaliser ?

Encore merci pour vos réponses si complètes et rapides !

Je serai bien mal avisée de me moquer !!! :rofl: :rofl: :rofl:

Il faut battre le fer pendant qu'il est chaud.

Et profitons que les grands pro adeptes du schéma électrique rigoureux tracé à la régle ont le dos tourné pour parler schéma.

Pour les câbles grove, je n'ai rien à dire parce que justement je ne vois rien, bref, je laisse de côté ces câbles sans doute que le vieil élec que je suis est depassé je ne suis pas dans Grove.

Par exemple, pour piloter le relais ventilateur, pour moi petit forgeron, il faut 3 fils, Ro=+5V, No=GND et Blanc OU Jaune la commande du relais.
L'un ou l'autre mais pas les 2.

Je crois voir 4 fils à chaque fois, donc il y a un bug ou je suis marteau, à voir🥴

Passons à ce qui m'a choqué, l'enclume du schéma:

L'alimentation 5V pour la prise jack de l'Arduino.

Il faut "plus lourd", entre 7 et 12V pour que ça marche par là.
Si si c'est sérieux, sinon nada, le régulateur 5V de l'Arduino ne saurra pas faire son boulot.

En standard, il existe 9V, il faut que se soit 9V régulé bien sérieux.

Est ce que c'est possible d'avoir les ref des relais pour avoir une idée de leurs pouvoir de coupure?

Pour la diode de roue libre, en fait, peut être qu'elle est déja dans le ventilo.

C'est un petit ventilo, il est alimenté via un relais, sûrement que le contact du relais va survivre s'il n'y a pas de diode.

Bon, mais si je veux être exemplaire, je dirais que pour que l'alimentation du relais ne subisse pas des surtensions à chaque fois qu'on arrête le relais, je ferais comme ça;

Dans les grandes lignes, c'est ça.

Bon, en principe il faut ajouter:
Attention aux dangers du 230V pour le câblage de la partie 230V.
Il faut que se soit bien fixé (les relais et les câbles) pour que les connections ne s'arrachent pas suite à une fausse manœuvre, et que le forgeron s'électrocute.

Afin de limiter l'usage de des quelques mA qu'offre Arduino, je contrôlerais les relais par autant de transistors 2N222 ... arduino donnerait le signal au transistor, lui-même activerait le relais qui est alimenté en 5V séparément du circuit. J'ai un peu changé ton schéma afin de montrer.
TonSchema

Le signal de l'arduino va à la patte centrale du transistor. Lorsque ce dernier est activé par le signal, il laisse passer un 5V brut dans le relais. Il est généralement plus avisé de contrôler a sortie du relais afin de gérer moins de courant, mais bon ... ça donne une idée.

Bonjour,

Autant j'ais écris sur le ton de la plaisanterie qu'il fallait être tollérant sur la qualité des schéma, autant là je dis que si on va plus loin, il faut être moins tolérant sur cette qualité.

Non pas pour "l'esthétique technique", mais pour le "sens".

Ce schéma


N'a pas de sens redesinez le proprement, vous verrez, il ne marche pas je crois.

De plus, si "Grove Arduino" existe, c'est pour faciliter la vie des petits forgerons


Un "beau" schéma rigoureux d'un Grove relais.
Il y a déjà le transistor sur ce module.

Ici sûrement
Screenshot_20240828-073415~2 (1)

Édition:

Votre proposition de rajout

Pour faire le bilan de puissance il faudrait revoir les chiffres à la hausse. Si on suis le lien donné par @arsenicdirty au #6 le courant consommé par les relais Grove est de 100mA

Non, les cables Grove sont comme ça.

  • GND
  • +5V
  • Data
  • Data

Bonjour,

On est OK, mais ce sont à chaque fois 2 datas différentes par connecteur, il ne faut en prendre que une pour le ventilateur.
Base Shield v2_SCH.pdf (44,5 Ko)