Piano invisible avec arduino

De Wikidebrouillard.

Article incomplet en cours de rédaction
La vidéo "Piano invisible avec arduino"


Sommaire

Présentation de l'expérience

Un piano c'est sympa mais ça prend de la place alors pourquoi ne pas en créer un invisible ? Pour se faire on utilisera une carte arduino et un capteur, facile non ?

Matériel

  • 1 capteur à ultrason HC-SR04 (le code et le montage sont fait avec ce capteur mais il est possible d'en utiliser un autre)
  • 1 buzzer
  • 1 arduino uno (et son câble usb)
  • 1 ordinateur pour programmer la carte avec le logiciel arduino
  • des fils
  • 1 breadboard
  • 1 règle

Pour la variante :

  • 6 potentiomètres

L'expérience

Le montage

On relie :

  • Vcc du capteur à 5V
  • GND du capteur et le fil noir du buzzer au GND de la carte
  • le fil rouge du buzzer à la broche 12 de la carte arduino
  • Trig du capteur à la broche 8
  • Echo du capteur à la broche 7

Le code

int trig = 8; 
int echo = 7; 
long lecture_echo; 
long cm;
int sortie_son = 12;
int offset = 0;
void setup()  { 
  pinMode(trig, OUTPUT); 
  digitalWrite(trig, LOW); 
  pinMode(echo, INPUT); 
  pinMode(sortie_son,OUTPUT);
}
void loop()  { 
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10); 
  digitalWrite(trig, LOW); 
  lecture_echo = pulseIn(echo, HIGH); 
  cm = (lecture_echo / 58) + offset; 
  delay(200);
  if(cm<=5) {
    tone(sortie_son,150);
  }
  else if((cm>5)&&(cm<=10)) {
    tone(sortie_son,300);
  }
  else if((cm>10)&&(cm<=15)) {
    tone(sortie_son,500);
  }
  else if((cm>15)&&(cm<=20)) {
    tone(sortie_son,700);
  }
  else if((cm>20)&&(cm<=25)) {
    tone(sortie_son,900);
  }
  else if((cm>25)&&(cm<=30)) {
    tone(sortie_son,1100);
  }
  else {
    noTone(sortie_son);
  }
}

Que voit-on ?

On voit que si on met un obstacle devant le capteur, l'arduino envoie un son au buzzer : selon où on se met par rapport au capteur, le son change.

Explications

Le capteur utilisé est un capteur à ultrason : lorsqu'il détecte un obstacle il va renvoyer au programme la distance qui le sépare de l'obstacle. Selon la distance renvoyée, la carte va envoyer une fréquence au buzzer.

Pour modifier la fréquence ou la distance, il faut modifier les dernières lignes du programme :

  • if((cm>20)&&(cm<=25)) 
    signifie "si cm (la distance donc) est comprise entre 20 et 25"
  • tone(sortie_son,1100);
    signifie "envoyé un son à "sortie_son" de fréquence 1100"
  •  noTone(sortie_son);
    signifie "arrêter l'envoie de son à "sortie_son" "

Il peut arriver qu'il faille réaliser un calibrage du capteur, pour cela on va jouer sur l'offset (la marge d'erreur). Pour cela, on va utiliser la règle afin de voir si les distances correspondent. Dans le cas contraire, on ajoutera ou soustraira l'erreur :

 int offset = 0;

Il suffit de changer ici la valeur et le signe de :

 cm = (lecture_echo / 58) + offset; 

Variante

On restera sur le principe du piano invisible en ajoutant la possibilité de faire varier les fréquences à l'aide de potentiomètre.

Le montage

On ajoute au montage précédent les 6 potentiomètres relié sur :

  • une patte sur une des entrées analogiques (A0, A1, A2, ...) celle du milieu
  • une patte sur le 5V (celle de droite)
  • une patte sur le GND (celle de gauche)

Le code

int trig = 8; 
int echo = 7; 
long lecture_echo; 
long cm;
int sortie_son = 12;
int offset = 0;
void setup()  { 
  pinMode(trig, OUTPUT); 
  digitalWrite(trig, LOW); 
  pinMode(echo, INPUT); 
  pinMode(sortie_son,OUTPUT);
}
void loop()  { 
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10); 
  digitalWrite(trig, LOW); 
  lecture_echo = pulseIn(echo, HIGH); 
  cm = (lecture_echo / 58) + offset; 
  delay(200);
  if(cm<=5) {
    tone(sortie_son,analogRead(A0));
  }
  else if((cm>5)&&(cm<=10)) {
    tone(sortie_son,analogRead(A1));
  }
  else if((cm>10)&&(cm<=15)) {
    tone(sortie_son,analogRead(A2));
  }
  else if((cm>15)&&(cm<=20)) {
    tone(sortie_son,analogRead(A3));
  }
  else if((cm>20)&&(cm<=25)) {
    tone(sortie_son,analogRead(A4));
  }
  else if((cm>25)&&(cm<=30)) {
    tone(sortie_son,analogRead(A5));
  }
  else {
    noTone(sortie_son);
  }
}

Que voit-on ?

Si l'on tourne un des potentiomètre, la fréquence du son varie.

Explications

Un potentiomètre est une résistance variable : le courant va passer dedans et être atténué permettant de moduler le signal. On peut ainsi aller de 0 à 1023 en règle général. Ce chiffre est récupéré à l'aide la fonction "analogRead", il est ensuite substitué à la fréquence.

Questions sans réponses

On peut lire des sons MP3 sur arduino à l'aide d'un shield spécifique mais est-il possible d'obtenir des sons plus agréables sans ajout d'un shield ?

Expériences sur Wikidébrouillard

Autres expériences

Autres expériences avec le même concept, recherche sur internet (indiquer les liens). 

Applications : liens avec le quotidien

Les capteurs à ultrason sont utilisés dans de nombreux dispositifs, l'expérience peut servir d'introduction à la programmation de capteurs (en vu d'un robot par exemple) ou en finalité d'une séance sur la musique.

Lieux propices à sa réalisation

Plutôt dans un atelier avec des ordinateurs disposant du logiciel arduino.

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraitsAnnuaire
AC
AR

Piano invisible avec arduino

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique