Télémètre ultrason musical.

Bonjour à tous.

Je suis en train réaliser ou plutôt de tenter :confused: de réaliser un petit montage pour un institut d’aide au enfants handicapés.
Le principe est simple, il est basé sur le principe d’un télémètre à ultrason réalisé à partir d’un arduino nano et d’un HC-SR04. Mais au lieu d’indiquer une distance, il émet un son qui varie suivant la distance de la main de l’enfant vers ce capteur.
Il y a un coté ludique et un coté apprentissage psychomoteur, c’est à dire le mono émet un son et les enfants doivent le reproduire en plaçant les mains à la bonne hauteur.

Je me suis basé sur un code de télémètre qui affiche la distance et je tente de le modifier pour obtenir une sonorité.
Echec total, j’ai bien la distance qui s’affiche dans le moniteur série (la distance doit être comprise entre 5 et 40 cm) mais rien ne veut sortir de ce maudit buzzer.
Je n’arrive pas à transformer ma distance en fréquence.
Mon ou plutôt mes erreurs doivent venir de cette transformation ainsi que du “tone”.
Si vous aviez des piste pour que je m’en sorte, je vous en serais reconnaissant.
Et en tant que débutant, je vous demanderais de ne pas taper trop fort.

Cordialement.

// Télémétre ultra-son musical.
// Les enfants en bougeant les mains devant le capteur ultra-son va en faire varier la tonalité.
// Apprentissage coordination distance/son.

#define echoPin 7 // broche Echo 
#define trigPin 8 // broche Trigger 


int maximumRange = 40; // distance Maximale acceptée (en cm)
int minimumRange = 5;   // distance Minimale acceptée (en cm)
int buzzer = 2; // pin Buzzer ou Haut-parleur
long duration, distance; // Durée utilisé pour calculer la distance
float music;
void setup() {
 // Activer la communication série
 Serial.begin (9600);
 // Activer les broches
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(buzzer,OUTPUT);
 
}

// Partie du code continuellement exécuté
// Son but est d'effectuer un cycle de détection pour déterminer 
// la distance et de transformer cette distance en son.
//
void loop() {
 // Envoi une impulsion de 10 micro seconde sur la broche "trigger" 
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 

 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10); 
 
 digitalWrite(trigPin, LOW);

 // Attend que la broche Echo passe au niveau HAUT 
 // retourne la durée
 duration = pulseIn(echoPin, HIGH);
 
 //Calculer la distance (en cm, basé sur la vitesse du son).
 distance = duration/58.2;
 
 // Si la distance mesurée est HORS des valeurs acceptables
 if (distance >= maximumRange || distance <= minimumRange){
    //Envoyer une valeur négative sur la liaison série.
       Serial.println("-1");
   
 }
 else {
   //Envoyer la distance vers l'ordinateur via liaison série.
      
   Serial.println(distance);
 
   music = map (distance,0,1023, 50,1000);// Je convertie la distance en fréquence pour le buzzer
   tone (buzzer,music);

 }
 
 //Attendre 50ms avant d'effectuer la lecture suivante.
 delay(50);
}

Bonjour, Distance doit être en minimumRange et maximumRange soit dans ce cas entre 5 et 40

Alors pourquoi

music = map (distance,0,1023...

Autre chose comment est connecté le buzzer et d'ailleur, c'est un buzzer oui un Haut parleur?

Bonjour leptrop

Merci pour ta réponse.

J'aurai du mettre : music = map (distance,5,40, 50,1000); ?

Pour l'instant je mets un buzzer, c'est un buzzer dit "passif", il a trois pin une 5v, une GND et la troisième qui est "signal" qui est branché sur la pin 2. Suivant la qualité du son, je mettrais peut-être un HP.

Je ne suis plus à l'institut je corrigerais cela demain.

Merci infiniment pour ton aide, je te teindrais, bien sur au courant.

Cordialement.

Bonjour à tous.

Après avoir modifier la ligne d'instruction comme me l'a suggéré Leptro mon programme fonctionne à merveille. Il ne me reste plus qu'a peaufiner les distances et le son ainsi que la mise en boite pour qu'il soit parfait. Nous avons fait quelque petits tests avec les enfants, cela les amusent beaucoup et l'expérience au niveau psychomotricité est bénéfique.

Un très grand merci à Leptro pour son aide et sa gentillesse. ;)

Cordialement.

Bonjour, ça me fait plaisir que ça marche en plus c'est pour une noble cause.

Au delà du but final, quand les problématiques sont bien exposés, les éléments fournis (code, photo, doc etc), apporter de l'aide dans la limite de mes connaissances, est un réél plaisir..

Idems pour les autres bénévoles du forums, le nombre de fois qu'on demande les éléments pour pouvoir y répondre et apporter de l'aide , est hallucinant.

Et deux karmas..merci.