Bonjour,
J'ai connecté entre autre un ventilateur 12V à une carte arduino(cf montage en pièce jointe).
Lorsque j'utilise le code suivant (le code gère plus de capteurs que présenté sur le montage mais ici je m'interesse uniquement à la partie capteur température + ventilateur) :
#include <dht.h>
#include <Wire.h>
#include "ds3231.h"
#include "rtc_ds3231.h"//**** Variables for DHT22 and Fan ****
#define DHT22_PIN 2
dht DHT;
unsigned long time2=3000;
#define VENTILO_PIN 13
#define PULSE_PIN 7
#define PULSE_TIMEOUT 1000000
unsigned long rpm;void setup()
{
Serial.begin(9600);
Wire.begin();
//DS3231_init(DS3231_INTCN);
memset(recv, 0, BUFF_MAX);
//Define output pin LED PWM
for(int i=0;i<3;i++) pinMode(myLED*.pinLED, OUTPUT);*
//Define output pin for Fan*
pinMode(13,OUTPUT);*
pinMode(PULSE_PIN, INPUT);*
digitalWrite(PULSE_PIN, HIGH);*
//Output pin for the CO2 sensor (MG811)*
pinMode(BOOL_PIN, INPUT); *
digitalWrite(BOOL_PIN, HIGH); *
}
void loop()
{char in;*
char buff[BUFF_MAX];*
unsigned long now = millis();*
struct ts t;*
float temperature; // temperature from DS3231*
int hours; //hours from DS3231*
int RPM;*
int a; // Variable to convert char variable into integer variable*
int b; // Variable to convert char variable into integer variable*
unsigned long time;*
time=millis();*
float Temp_max = 25.00; //maximum temperature*
int humidity_max = 95; //maximum humidity*
int CO2_max=1000; // maximum CO2 level*
int percentage;*
float volts;*
if((time-time2)>8000){*
_ Serial.println("************** Data from DHT22 *****************\n");_
_ Serial.print ("DHT22 \t");_int chk = DHT.read22 (DHT22_PIN); //read the dht22*
switch (chk) {*
case 0: *
_ Serial.print ("OK,\t");_break; // read OK*
case -1:*
_ Serial.print ("Checksum error,\t");_break; //error*
case -2:*
_ Serial.print ("Time out error,\t");_break; // error*
default:*
_ Serial.print ("Unknown error,\t");_break; //error*
}*
// DISPLAT DATA from DHT22*
_ Serial.print("Humidity : ");_
_ Serial.print (DHT.humidity,1);_
_ Serial.print(" %");_
_ Serial.print (",\t");_
_ Serial.print("Temperature : ");_
_ Serial.print (DHT.temperature,1);_
_ Serial.println(" C");_
_ Serial.print('\n');_time2=time;*
//If temperature is higher than maximum temperature*
//or If humidity is higher than maximum humidity*
//or CO2 is higher than maximum CO2 level allowed*
if(DHT.temperature > Temp_max || DHT.humidity > humidity_max){*
_ Serial.print("Fan ON");_
_ Serial.print('\t');_digitalWrite(13,HIGH); //fan ON*
rpm=pulseIn(PULSE_PIN, LOW, PULSE_TIMEOUT);*
//Serial.println(rpm);*
_ RPM=60/((4*rpm)/1000000.0);_
_ Serial.print("\tRPM : ");_
_ Serial.println(RPM,DEC);_
_ Serial.print('\n');_if(RPM == 0.0){ //fan is not rotating*
_ Serial.println("WARNING : FAN IS BLOCKED");_
_ Serial.print('\n');_}*
}*
else if (DHT.temperature < 24 && DHT.humidity < 80) {*
digitalWrite(13,LOW); //else fan OFF*
}*
// **** Data from MG811 ****
_ Serial.println("************** Data from MG811 *****************\n");_volts = MGRead(MG_PIN);*
_ Serial.print( "SEN-00007 : " );_
_ Serial.print(volts);_
_ Serial.print( " V " );_percentage = MGGetPercentage(volts,CO2Curve);*
_ Serial.print("CO2:");_if (percentage == -1) {*
_ Serial.print( "<400" );_} else {*
_ Serial.print(percentage);_}*
_ Serial.print( "ppm" ); _
_ Serial.println(); _}
[/quote]
Et bien lorsque la température dépasse 25°C le ventilateur se met en route. Seulement l'affichage de son RPM est de ... -19831 ! (voir deuxième image jointe)
Alors que la seconde valeur, prise quelque seconde plus tard, quand la température est toujours supérieure à 25°, est correcte (2658 sachant que mon ventilateur est un 3000 RPM).
Pouvez m'expliquer d'où vient le problème de la première valeur ? Je précise que parfois la première valeur est cohérente (environ 400-500, assez faible mais comme elle est mesurée juste après que le ventilateur s'enclenche c'est assez logique non ?).
Merci d'avance !

