Outils pour utilisateurs

Outils du site


wiki:projets:airpiano

Ceci est une ancienne révision du document !


Table des matières

AIR PIANO

Daphné Chamot-Rooke (contact : daphne.chamot-rooke@etu.upmc.fr)
Himany Seri (contact : himany.seri@etu.upmc.fr)

Objectif : créer un clavier virtuel qui fait de la musique sans touches

Matériel :

  • carte Arduino UNO
  • 1 sonar
  • 1 buzzer
  • un ruban de LEDs de couleurs adressable
  • fils de connexion + breadboard
  • de quoi souder
  • du contreplaqué en 3mm
  • 1 PC + une sortie son

Construction

Nous avons découpé une boîte de la taille du socle de l'arduino uno (100\*124*100 mm)

Ne pas oublier de prévoir des trous pour le sonar et pour l'alimentation de l'Arduino.

Code

#define trigPin 10  //Déclaration de variable globale
#define echoPin 8   // Déclaration de variable globale
//librairie Neopixel
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define NUMPIXELS 8 //Déclaration de variable pour le nombre de LEDs qui vont s'allumer sur le strip
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, 9, NEO_GRB + NEO_KHZ800);
const byte PIN_BUZZER = 13; // constante qui prend 0 bit ou 1 bit en valeur
long duration, distance; //la valeur est codée sur 32 bits
int frequence = 0; //Déclaration d'une variable fréquence qui va stocker la fréquence
int couleur = 0; //Déclaration d'une variable qui va permettre de changer la couleur des LEDs en fonction de la distance

void setup() {
  Serial.begin(9600); //fixe le débit d'information qui sera reçu par seconde
  //on prépare les pin 9, 12 , 13 et trig en mode sortie
  pinMode(9, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(trigPin, OUTPUT);
  //on prépare la pin echo en mode entrée
  pinMode(echoPin, INPUT);
  pixels.begin(); //la librairie NeoPixel est initialisée
  Serial.println("== Début du programme =="); //affiche "== Début du programme ==" dans le moniteur

}

void loop() {
  //Envoi de l'onde
  digitalWrite(trigPin, LOW);
  delayMicroseconds(200);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(200);
  digitalWrite(trigPin, LOW);
  delayMicroseconds(200);
  //Réception de l'écho
  duration = pulseIn(echoPin, HIGH);
  // Calcul de la distance
  distance = (duration / 2) / 29.1;
  //variable pour modifier la couleur des LEDs en fonction de la distance
  couleur = distance * 10;

  //si la distance est inférieure à 0 ou supérieure à 30 cm, on affiche "hors plage" sur le moniteur et rien ne se passe
  if (distance >= 30 || distance <= 0) {
    Serial.println("Hors plage");
    noTone(13); //on arrête la note
  }
  else {
    //si la distance est comprise entre 0 et 30 cm, on joue les notes et on allume les LEDs
    //on affiche la distance dans le moniteur en cm
    Serial.print("distance = ");
    Serial.print(distance);
    Serial.println(" cm");
    //For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
    for (int i = 0; i < NUMPIXELS; i++) {
      //pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
      pixels.setPixelColor(i, pixels.Color(couleur / 2, 4 * couleur, 2 * couleur)); //s'allume de différentes couleurs en fonction de la distance
      pixels.show(); // This sends the updated pixel color to the hardware.
      delay(50); //les LEDs s'allument 50 ms chacune
      
      //pour chaque intervalle de 3cm, on joue une note différente
      if (distance < 3) {
        tone(13, 523.25);
      }
      else if ((3 <= distance) && (distance < 6)) {
        tone(13, 554.37);
      }
      else if ((6 <= distance) && (distance < 9)) {
        tone(13, 587.33);
      }
      else if ((9 <= distance) && (distance < 12)) {
        tone(13, 622.25);
      }
      else if ((12 <= distance) && (distance < 15)) {
        tone(13, 659.26);
      }
      else if ((15 <= distance) && (distance < 18)) {
        tone(13, 698.46);
      }
      else if ((18 <= distance) && (distance < 21)) {
        tone(13, 739.99);
      }
      else if ((21 <= distance) && (distance < 24)) {
        tone(13, 783.99);
      }
      else if ((24 <= distance) && (distance < 27)) {
        tone(13, 830.61);
      }
      else if ((27 <= distance) && (distance < 30)) {
        tone(13, 880);
      }
      else if ((30 <= distance) && (distance < 33)) {
        tone(13, 932.33);
      }
      else if ((33 <= distance) && (distance < 36)) {
        tone(13, 987.77);
      }
      else if ((36 <= distance) && (distance < 39)) {
        tone(13, 1046.5);
      }
      else if ((39 <= distance) && (distance < 42)) {
        tone(13, 1108.7);
      }
      else if ((42 <= distance) && (distance < 45)) {
        tone(13, 1174.7);
      }
      else if ((45 <= distance) && (distance < 48)) {
        tone(13, 1244.5);
      }
      else if ((48 <= distance) && (distance < 51)) {
        tone(13, 1318.5);
      }
      else if ((51 <= distance) && (distance < 54)) {
        tone(13, 1396.9);
      }
      else if ((54 <= distance) && (distance < 57)) {
        tone(13, 1480);
      }
      else if ((57 <= distance) && (distance < 60)) {
        tone(13, 1568);
      }
    }
  }
  delay(100); //délai entre deux mesures
}
LDAP: couldn't connect to LDAP server
wiki/projets/airpiano.1544091245.txt.gz · Dernière modification: 2018/12/06 10:14 de daphne