Bonjour,
Dans le cadre d'un projet, je souhaite piloter un ventilateur en fonction de la présence d'une personne sur une chaise. Si une personne est détectée, cela arrête le ventilateur sinon cela le laisse tourner. Un capteur de force se trouvera sur cette chaise. Ce capteur me renvoi la tension en fonction du poids détecté par le capteur. Aucun soucis jusque la. Cependant je souhaite que le capteur détecte la présence d'une personne pendant un temps minimum, dans mon cas, 5 secondes or lorsque je met mon code en pratique, dès qu'il détecte un nombre supérieur au seuil, il active le relai immédiatement et après la tempo est respectée mais il arrive qu'il y ait toujours des défaillances après.
Pour résumer, le capteur doit me renvoyer des valeurs supérieures à 4900 pendant 5s pour envoyer un LOW au relai sinon il ne fait rien.
Ci-joint mon code :
/* FSR simple testing sketch.
Connect one end of FSR to power, the other end to Analog 0.
Then connect one end of a 10K resistor from Analog 0 to ground
For more information see www.ladyada.net/learn/sensors/fsr.html */
int fsrPin = 0; // the FSR and 10K pulldown are connected to a0
int fsrReading; // the analog reading from the FSR resistor divider
int fsrVoltage;
unsigned long int millis_depart;
unsigned long int temps_presence;
const int pin_relai = 8;
void setup(void) {
// We'll send debugging information via the Serial monitor
Serial.begin(9600);
pinMode(pin_relai, OUTPUT);
millis_depart = millis();
}
void loop(void) {
fsrReading = analogRead(fsrPin);
Serial.print("Analog reading = ");
Serial.print(fsrReading); // the raw analog reading
fsrVoltage = map(fsrReading, 0, 1023, 0, 5000);
Serial.print("Voltage reading in mV = ");
Serial.println(fsrVoltage); //tension entre 0 et 5000 mV
if (fsrVoltage < 4900)
{
Serial.println("Il n'y a personne");
digitalWrite(pin_relai, HIGH); //on active le relai pour laisser le ventilo allumé
}
if (fsrVoltage >= 4900) //4900 mV = 10 kg
{
temps_presence = millis();
if (temps_presence - millis_depart >= 5000)
{
millis_depart = temps_presence; //on copie le temps actuel à la place du temps de départ
Serial.println("Il y a quelqu'un");
digitalWrite(pin_relai, LOW); //on désactive le relai pour éteindre le ventilo
}
}
delay(1000);
}
Merci de votre aide. Si jamais un point n'est pas clair, n'hésitez pas, cela sera un plaisir pour moi de vous éclaire.