Projet avec capteur de vibration

Bonjour à tous,

Tout d'abord voici ce que je voudrais réaliser :

Une porte est verrouillé par une ventouse. En frappant (comme on frappe à une porte) une séquence précise sur cette porte, j'active un relay pour l'ouvrir.

J'ai réaliser mon code avec un bouton poussoir (qui remplace l'action de frapper à la porte) dans un premier temps et cela fonctionne parfaitement.

Tout ce complique quand je remplace mon bouton par un capteur de vibration.

J'ai essayé 2 modèles de capteur : le DollaTek et l'ARCELI SW-420 NC.

J'ai le même résultat avec les 2, le capteur reçoit la vibration quand je frappe, mais je n'arrive pas à trouver le bon réglage pour enregistrer une seule et unique frappe.

Pour être plus clair, si dans mon code, je demande à l'Arduino d'envoyer dans le moniteur série "1" quand je frappe, je vais voir s'afficher "1 1 1 1 1 1 1 1" ...

Voiçi le code de base que j'utilise pour traiter mes capteurs :

int ledPin = 6;
int piezo = A0;               
byte val = 0;
int onFrappe = 0 ;

void setup() {

 pinMode(ledPin, OUTPUT); 
 Serial.begin(9600);
 
}

void loop() {

  val = analogRead(piezo);     

    Serial.println (val); 
    
    if(val >= 200){
        onFrappe++ ;
        Serial.print("On à frappé ");
        Serial.print (onFrappe) ;
        Serial.println(" fois");
        digitalWrite(ledPin,HIGH);
      }
      else{
        digitalWrite(ledPin,LOW);
      }
}

Ma question est la suivante, comment puis-je récupérer l'information du capteur pour avoir une frappe net à chaque coup ?

Merci d'avance pour toutes aides que vous pourrez m'apporter.

Un capteur de vibration transmet une série de transitions. Il faut tenir compte de la première et ignorer les suivantes, pendant un certain temps.
On peut essayer de déterminer ce temps en ajoutant un delay(x) lorsque la première impulsion est reçue.

Merci pour la réponse.
J'avais effectivement pensé à cette solution, mais j'utilise la fonction millis dans mon code final... ajouter un delay aura pour conséquence de tuer le timing de ma séquence...

Bonjour,

Ben, au lieu d'utiliser delay() tu utilises millis().
Tu mémorises millis() lors de la première vibration et tu n'acceptes pas de nouvelle vibration avant un certain nombre de ms.

mais j'utilise la fonction millis dans mon code final... ajouter un delay aura pour conséquence de tuer le timing de ma séquence...

Peu importe delay() ou millis(), l'essentiel est de connaître le temps pendant lequel le capteur envoie le signal.

Comme on n'ouvre pas une porte toutes les 10 millisecondes, y'a qu'à mettre 5 secondes de delay() et roulez...

Effectivement, avec la fonction millis j'arrive à faire tourner mon projet correctement.
Merci pour l'aide à ce sujet là.
Néanmoins, les capteurs de vibration font un peu comme ils veulent j'ai l'impression et renvoie des données différentes dans la même situation...
Auriez vous une idée de ce par quoi je pourrais remplacer le capteur de vibration pour mon projet ?

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.