piezo en capteur de choc

Salut tout le monde,

je suis nouveau dans le petit monde d'Arduino et du physical computing en général et j'aurai aimé savoir :
-pour monter un capteur piezo en capteur de choc,que doit je ajouter au montage?une résistance en parralléle ?Si oui,de combien? (je parle d'un piezo tout simple sans electronique type ça:
http://www.conrad.fr/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10001&storeId=10001&productId=224749&langId=-2&ItemHighLightId=224750&from_fh=1

Merci d'avance.

http://mosamosa.free.fr

Salut

http://todbot.com/blog/category/arduino/

Regarde le MIDI Drum Kit :wink:

a+

yep,en fait je suis justement tomber là dessus peu après avoir posté !!Merci! :slight_smile:

je déterre ce topic parce que je ne suis pas convaincu par cette méthode vis-a-vis de la réponse de vélocité
midi drum kit :
http://todbot.com/blog/2006/10/29/spooky-arduino-projects-4-and-musical-arduino/

// deal with first piezo, this is kind of a hack
  val = analogRead(piezoAPin);
  if( val >= PIEZOTHRESHOLD ) {
    t=0;
    while(analogRead(piezoAPin) >= PIEZOTHRESHOLD/2) {
      t++;
    }
    noteOn(drumchan,note_hihatopen, t*2);
    delay(t);
    noteOff(drumchan,note_hihatopen,0);
  }

là il s'agit d'estimer la force de frappe en fonction du temps (t) que met l'onde à redescendre

ce que je trouve peu logique car on aura plutôt une notion de la fréquence que de la vélocité
d'ailleurs dans mes tests c'est vraiment pas convainquant

du coup je reste pour l'instant sur le système :

sensorReading_0 = analogRead(piezo_0);
if(sensorReading_0 >= threshold) {
  Serial.print("/piezo_0/");
  Serial.println(sensorReading_0);
  delay(60);
}

mais je crois que mon problème vient surtout d'un manque de sensibilité

sur le duemilanove en ne branchant qu'un piezo avec sa résistance les chocs électriques que j'envoie oscillent généralement entre 1 et 20 (sur 1024) et ça fonctionne (c'est léger parce que je ne tape pas directement le buzzer mais la partie en bois sur laquelle il est collée)

mais sur le bluetooth j'ai du bruit et continuellement des valeurs entre 0 et 10 ce qui m'empêche de réduire le threshold en dessous de 10, du coup très peu de sensibilité

à mon avis arduino ne capte pas bien le signal alternatif envoyé par le piezo, pas suffisamment bien pour proposer une courbe de réponse correcte en fonction de la vélocité en tout cas

donc l'idée serait (dans l'ordre) d'amplifier, de redresser et de lisser ce signal électrique :

c'est dans le cadre de cette discussion
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1259955512
(je squatte ici parce que le sujet est plus évocateur par rapport à mon problème courant)

j'en ai aussi parlé là il y a un bout de temps

bref si quelqu'un a une idée de schéma simple je suis plus que preneur

merci :]

Un montage amplificateur avec un transistor, deux diodes de redressement de signal et un condensateur devrait faire l'affaire.

Pour t'inspirer (montage pour réception d'ultrasons) :

Tiré d'ici : Electronique - Realisations - Telecommande 001

merci batto

j'ai finalement réussi !

en partant de ce capteur de choc
http://www.sonelec-musique.com/electronique_realisations_detecteur_impulsion_mecanique_001.html
voila ce que ça donne :

avec le lm358 il reste un ampli libre pour un 2e piezo
ya surement d'autres puces avec un seul ampli

je suis en train de bosser sur le code
pour l'instant ça marche à peu près avec

const int piezo_0 = 0;
const int threshold = 5;
int sensorReading_0 = 0;
int newReading_0 = 0;
int previousReading_0 = 0;
void setup() {
   //Serial.begin(115200); // bluetooth
   Serial.begin(9600); // usb
}

void loop() {
   sensorReading_0 = analogRead(piezo_0);
   if(sensorReading_0 >= threshold && sensorReading_0 > previousReading_0 + 8) {
      //  vérifie que l'intensité electrique soit superieur au seuil et qu'elle ne soit pas en chute
      delayMicroseconds(200); // pic du signal 0.2 ms apres le déclenchement
      newReading_0 = analogRead(piezo_0);
      
      Serial.print("/piezo_0/"); 
      Serial.println(newReading_0);
      
      previousReading_0 = newReading_0;
   }
   else {
      previousReading_0 = sensorReading_0;
   }
}

j'ai encore des fois 2 hits au lieu d'un

mais ça manque encore un peu de sensibilité en ce qui me concerne...

(pour un drumkit je pense que ça va très bien)

comment je pourrais augmenter le coefficient d'amplification sur ce montage ?
j'ai essayé en modifiant des résistances un peu au pif mais je n'arrive à rien de concluant...

la seule solution serait p-e d'utiliser l'ampli resté libre sur lm358 ?

après une nuit d'essai j'arrive à une sensibilité maximale et un minimum de false trigger en changeant ces resistances :
R1 -> 5k
R2 -> 55k
R3 -> 3M

code utilisé :

const int piezo_0 = 0;
const int piezo_1 = 1;
const int position_2 = 2;
const int position_3 = 3;
const int position_4 = 4;

const int threshold = 80;

int triggerValue_0 = 0;
int previousValue_0 = 0;
int peakValue_0 = 0;
int delay_0 = 0;

int now = 0;

void setup() {
  //Serial.begin(115200); // bluetooth
  Serial.begin(9600); // usb
}
void loop() {
  now = millis();
  if (delay_0 < now - 60){
     triggerValue_0 = analogRead(piezo_0);
     if(triggerValue_0 >= threshold && triggerValue_0 > previousValue_0 + 2) {
         delayMicroseconds(230);
         peakValue_0 = analogRead(piezo_0);
         /*Serial.print("/previousValue/");
         Serial.print(previousValue_0);
         Serial.print(" /triggerValue/");
         Serial.print(triggerValue_0);
         Serial.print(" /peakValue/");
         Serial.println(peakValue_0);*/
         if(peakValue_0 >= threshold && peakValue_0 > previousValue_0 + 2){
            Serial.print("/piezo_0/");
            Serial.println(peakValue_0);
            delay_0 = millis();
            previousValue_0 = peakValue_0;
        }
        else {
            previousValue_0 = triggerValue_0;
        }
    }
    else {
        previousValue_0 = triggerValue_0;
    }
  }
}

le piezo collé sous la table ça marche très bien en tapotant légèrement du bout des doigts
la réponse en vélocité va de 80 à 640
on peut surement faire mieux mais vu le peu d'info à ce sujet je suis assez content
(à mon avis cette solution est vachement meilleure que le midi drumkit)

Tu peux te servir du deuxième ampli pour rajouter un étage d'amplification.