Go Down

Topic: [conseil] projet de détéction d'obstacle, question de compréhension (Read 2 times) previous topic - next topic

patg_

Bonjour,
Moi j'aurais tendance à utiliser un timer soft pour piloter le buzzer mais si tu découvres la programmation tu peux utiliser un truc simple du genre:
tu mesures la distance, si < 2m et >1m tu fais un on-off du buzzer et tu fais un delay() inversement proportionnel à la distance mesurée
si distance <1m tu laisses le buzzer on.

Benoit1121

#6
May 17, 2012, 11:22 am Last Edit: May 17, 2012, 11:24 am by Benoit1121 Reason: 1
Bonjour,

@cutprod: Merci de me donner ton prog en exemple, le hic, c'est que j'ai un peu de mal a tout comprendre. Du coup je sais pas si ca correspond à mon cahier des charges. c'est à dire plus un obstacle s'approche, plus le buzzer sonne rapidement (entre 2m et 1 m).
Je sais pas comment écrire ça: (en gros) on concidere X la valeur donné par le sonar (1m = 100 et 2m=200) Donc, si X=200 le buzzer bip avec un delay de 1s et plus X diminue en direction de 100 et plus la valeur de delay diminue..
déja je dois utiliser un if (ca tombe bien je commence a maitriser) mais pour ce qui est du reste, je sais pas.
Ps: comment tu fais pour introduire ton code dans cette fenetre ?

@patg_: Tu sous entends quoi par "inversement proportionnel", je pense que ton idée pourrait marcher car si j'ai bien compris (ou pas ^^) la valeur de delay fluctura en fonction de la valeur comprise entre 2m et 1m.

Merci à vous deux pour vos réponses :)

Benoit

patg_

#7
May 17, 2012, 12:11 pm Last Edit: May 17, 2012, 06:32 pm by patg_ Reason: 1
exemple, tu as la distance * 100 dans la variable x:
à la fin de la boucle du sketch (qui mesure la distance et émet 1 beep si la distance est < 2m)  tu mets:

delay (x/200 * 1000);

pour une distance de 2m tu auras 1 beep toutes les secondes
pour une distance de 1m tu auras 1 beep toutes les 500ms

La période entre 2 beeps est donc inversement proportionnelle à la distance mesurée.
En diminuant le facteur 1000 tu augmente la fréquence des beeps (enfin des coups de buzzer).

Ce mécanisme simple fonctionne à condition que tu ne doives rien faire d'autre pendant le temps d'attente (l'AVR est bloqué).
On peut faire autrement si nécessaire (par un timer soft ou par un delay() un peu plus évolué).

Benoit1121

Ok merci,ça me parait clair maintenant. Je vais essayer, je vous tiens au courant si je rencontre d'autre difficulté.

Merci Patq_ :)

Benoit

Benoit1121

Comme promis, je mets mon exemple de captage d'objet entre 1m50 0m. Avec un buzzer et une LED.
Il est peut être basic mais il marche ;)



Code: [Select]
int analogPin = 3;     // Sonar branché sur la PIN analogique 3

int val = 0; // variable de type int pour stocker la valeur de la mesure

void setup() {
 
pinMode(12, OUTPUT); //Buzzer
pinMode(11, OUTPUT); // LED
Serial.begin(9600); 
}

void loop() {
 
   val = analogRead(analogPin);
   Serial.println(val); 
   

     if ( val < 100)
  {
     digitalWrite(12, HIGH);  // set the buzzer on
     digitalWrite(11, HIGH);  // set the LED on
   
   }
   else
   {
     if (val < 150)
     {
      digitalWrite(12, HIGH);   // set the buzzer on
    digitalWrite(11, HIGH);   // set the LED on
    delay (1000);
    digitalWrite(12, LOW);   // set the buzzer off
    digitalWrite(11, LOW);   // set the LED off
    delay (1000);
     }
     else
     {
     }
     
   } 
}

 


Cordialement

Benoit

Go Up