Servo moteur et sensorData

bonjour à tous,

J’ai un projet de sculpture où un capteur sonore (KY-O37) déclenche un servomoteur qui tourne en rotation continue pendant 15sc et tourne en sens inverse le même temps. Jusqu’ici c’est parfait.
Le problème que je rencontre est le suivant : j’aimerais que le moteur s’arrête après l’aller-retour de 30 sc et ne se déclenche à nouveau uniquement lorsque le capteur sonore détecte un nouveau signal sonore. Pour l’heure, dès que le capteur détecte un son il actionne le servo moteur continuellement.
j’aimerais donc savoir comment l’encoder correctement.
voci mon code :
#include <Servo.h>
int soundSensor=2;
int pos = 1;
Servo myservo;
boolean servoStatus=false;

void setup() {
myservo.attach(9);
pinMode(soundSensor,INPUT);
}

void loop() {

int SensorData=digitalRead(soundSensor);

if(SensorData==1){
forward();
if(servoStatus==false)
servoStatus=true;
SensorData=0;}

else{
    servoStatus==false;
    SensorData=0;
    }

}

void forward(){
myservo.write(pos);
delay(100);
for(pos = 250; pos>=0; pos-=1)
{
myservo.write(pos);
delay(100);

}

myservo.write(pos);              
delay(100);

for(pos = 0; pos <= 140; pos +=1)
{
myservo.write(pos);
delay(100);
}

}

salut
Tu as dit;

Connectez-vous sur l'arduino la sortie analogique ou la sortie numérique du KY-037?

Ok, que considérez-vous comme la différence entre le bip et le son?

Après tout, les deux sont des sons.

PS: J'ai utilisé votre croquis ici en remplaçant le capteur par un bouton et cela a fonctionné correctement.

mineirin

bonjour ruilviana,
merci pour votre réponse si rapide.
je n'arrive pas à faire en sorte que le cycle ( qui se déclanche par le sensordata ) ne se face qu'une seul fois et qu'il ne se répète que lorsque le sensor capte un nouveau son/bruit.
ps je suis débutant je ne suis pas encore familiarisé avec le code.

Essayez de régler le potentiomètre pour régler la sensibilité du microphone.

mineirin

malheureusement le problème vient du code.
Je n'arrive pas à faire stopper le servo une fois que l'action est fini. et qu'il ne recommence qu'avec un nouveau signal sonore.

Pouvez-vous s'il vous plaît poster un schéma de la façon dont vous connectez le capteur à l'arduino?

RV mineirin

Utilisez este sketch pour voir les valeurs das saidas digitais e analogicas durante um determinado tempo.

N'oubliez pas de connecter la sortie analogique du capteur à la broche A5 de l'arduino

RV mineirin

int analog = A5;
int digital = 2;

int value_A0 = 0;
int value_D = 0;
//----------------------------------------------------------------------------
void setup()
{
  //Serial.begin(9600);
   Serial.begin(1152000);
  pinMode(analog, INPUT);
  pinMode(digital, INPUT);
}
//----------------------------------------------------------------------------
void loop()
{
  value_A0 = analogRead(analog);
  value_D = digitalRead(digital);
  Serial.print("Production A0: ");
  Serial.print(value_A0);
  Serial.print(" production D0: ");
  Serial.println(value_D);
  delay(200);
}

malheureusement ça ne marche toujours pas.
Mais pour faire peut être plus simple, connaissez vous un moyen de faire stopper le servomoteur une fois le l'aller retour fini. Voici mon code pour un aller retour de 30sc, soit 15 et 15.
#include <Servo.h>

Servo myservo;

int pos = 1;

void setup()
{
myservo.attach(9);

}

void loop() {
forward();
}

void forward()
{
for (pos = 250; pos > 0; pos -= 1)
{
myservo.write(pos);
delay(100);
}
for (pos = 0; pos < 140; pos += 1)
{
myservo.write(pos);
delay(100);
}
}

Regardes l'apparence du code dans le message précédent et dans le tien :

  1. il est indenté ( control T) dans l'IDE avant de copier.
  2. il est mis entre balise code icone </>.

Les messages épinglés de conseils ont été malmenés par le nouveau forum mais ils sont quand même exploitables.
Ne pas les respecter est la meilleure façon pour perdre des lecteurs et surtout leurs condeils.