Voici le programme que j'ai écrit ces derniers jours:
Code : Tout sélectionner
// Inclusion de la librairie OneWire
#include <OneWire.h>
//Définitons
// Pin pour le contrôle pwm
#define pin_pwm 9
// Adresse 1-Wire du DS18B20
#define DS18B20 0x28
// Pin pour les données
#define pin_data 16
OneWire ds(pin_data); // Création de l'objet OneWire ds
float getTemperature() { // Fonction récupérant la température depuis le DS18B20
byte data[9], addr[8]; // data : Données lues depuis le scratchpad, addr : adresse du module 1-Wire détecté
if (!ds.search(addr)) { // Recherche un module 1-Wire
ds.reset_search(); // Réinitialise la recherche de module
return 65535; // Si ce n'est pas le cas erreur
}
if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
return 65535; // Si ce n'est pas le cas erreur
if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
return 65535; // Si ce n'est pas le cas erreur
ds.reset(); // On reset OneWire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0x44, 1); // On lance une mesure
delay(1000); // Et on attend la fin de la mesure
ds.reset(); // On reset OneWire
ds.select(addr); // On sélectionne le DS18B20
ds.write(0xBE); // On envoie une demande de lecture du scratchpad
for (byte i = 0; i < 9; i++) // On lit le scratchpad
data[i] = ds.read(); // Et on stock les données reçues
float temp = ((data[1] << 8) | data[0]) * 0.0625; // Calcul de la température
return temp; // Pas d'erreur
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
analogWrite(pin_pwm,255);
pinMode(pin_pwm, OUTPUT);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
float temp = getTemperature();
if (temp == 65535) {
int bite = 1;
//code à exécuter si la température n'a pas pu être récupérée
}
else {
if(temp < 28) {
analogWrite(pin_pwm,0);
delay(100);
}
else if (temp > 32) {
analogWrite(pin_pwm,255); //vitesse du ventilo 100%
delay(100);
}
else {
switch((int) temp) {
case 28:
analogWrite(pin_pwm,51); //vitesse du ventilo 20%
delay(100);
break;
case 29:
analogWrite(pin_pwm,102); //vitesse du ventilo 40%
delay(100);
break;
case 30:
analogWrite(pin_pwm,153); //vitesse du ventilo 60%
delay(100);
break;
case 31:
analogWrite(pin_pwm,204); //vitesse du ventilo 80%
delay(100);
break;
}
}
}
delay(3000);
}
J'ai eu énormément de difficultés à le réaliser, c'est pourquoi j'ai demandé à un ami de m'aider. Il a apporté de légères modifications pour que ça fonctionne.
Au niveau du fonctionnement, avec la led, ça à l'air de fonctionner. Quand je met un foehn devant le capteur, la led se met en marche; et quand je refroidis le capteur, la led s’éteint.
Maintenant passons à la problématique. Je branche le ventilateur sur une alim externe 12v. Quand je branche le câble sur la même ligne que la cathode de la led, le ventilateur ne change presque pas d'intensité. On sens une très légère différence mais il devrait être arrêté, vu que la led est éteinte.
Pourtant j'ai bien branché le câble bleu du ventilateur (c'est le dernier du connecteur).
Auriez vous une idée pourquoi cela ne fonctionne pas?
Merci et bonne soirée