Commander un servo moteur suivant un détecteur infrarouge

Bonjour,

J'aimerai que quand mon détecteur infrarouge détecte quelque chose, il met a 10 degré le servo-moteur qui est a 100 degré dans son état initiale le seule problème c'est que la led qui est sur l'Arduino elle fait exactement ce que je veux mais pas le servo moteur alors je ne comprend pas trop pourquoi.
Ce qui ce passe si on fait passer le capteur a l'état de détection, un bruit de moteur mais aucun mouvement a la fin du temps d'attente, juste après que la led du arduino passe a l'état 0.
Voici mon code :

#include <Servo.h>
 
Servo myservo;      // création de l'objet myservo 
 
int val_M;            // Variable contenant la valeur courante du potentiomètre 
int servo_pin = 3;  // Pin auquel le servo est relié

//le temps que nous donnons au capteur pour calibrer (10-60 secondes selon la fiche technique)
int calibrationTime = 10;

int ledPin = 13;                // LED arduino pin 13
int inputPin = 2;               // Pin détecteur en OUT   / PS: Vcc sur pin 5V et GND sur GND
int pirState = LOW;             // nous commençons, en supposant qu'aucun mouvement n'a été détecté
int val = 0;                    // variable pour lire l'état des broches

void setup() {
  myservo.attach(servo_pin);
  pinMode(ledPin, OUTPUT);      // déclarer la LED comme sortie
  pinMode(inputPin, INPUT);     // déclarer le capteur comme entrée
  Serial.begin(9600);
  val_M = 100; //position ouverte
  Serial.print("Calibrage du détecteur ");
  for(int i = 0; i < calibrationTime; i++){
    Serial.print(".");
    delay(1000);
  }
  Serial.print("\n");
}

void loop(){
  myservo.write(val_M); //attribution l'angle du servo-moteur
  val = digitalRead(inputPin);  // lire la valeur d'entrée
  //Serial.println(val);
  if (val == HIGH) { // vérifier si l'entrée est haute
    digitalWrite(ledPin, LOW);  // éteindre la LED
     val_M = 100; //position ouverte 
    delay(150);

    if (pirState == LOW) {
      Serial.println("Aucune détection");
      //enregistrement de l'état
      pirState = HIGH;
    }
  } else {
    digitalWrite(ledPin, HIGH); // turn LED ON
     val_M = 10; //position fermer
    Serial.println("Alerte !!!");
    
    if (pirState == HIGH){ //remise a zero de l'état
      pirState = LOW;
    }
    delay(5000);
  }
}

Merci d'avance de votre réponse. :slight_smile:

votre PIR tombe à LOW quand il détecte quelque chose où l'inverse ?

Pourquoi demandez vous à chaque tour de loop au servo de prendre position... faites le uniquement au changement d'état...

Dans ton else, tu as un delay(5000) qui retarde de 5s le changement d'état de ton servo alors que la LED change d'état tout de suite.

Le exemple de la librairie servo fonctionne t’il avec ton servo?

Schéma de câblage?