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 ). 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,