29 Avr2016
Jouer une mélodie avec son
Objectif :
- Interfacer Arduino avec des capteurs analogiques.
Énoncé :
Dans cet exercice on demande l'adapter pour que la luminosité mesurée par la photorésistance soit proportionelle à la fréquence jouée un buzzer branché sur la broche 8 : plus la luminosité reçue par la photorésistance est importante, plus la fréquence jouée par le buzzer sera élevée (et inversement, si on passe notre main devant le capteur de luminosité alors le son émis sera grave→fréquence basse).
Quelques indices
- Vous aurez besoin de la fonction
tone
qui prend deux paramètres : - la broche où le buzzer est branché
- la fréquence que l'on veut jouer avec le buzzer (exprimée en Hertz)
tone(8, 440); // la note La (440Hz) jouée sur un buzzer branché sur la broche 8
- Lorsque l'on reçoit beaucoup de lumière sur notre photo-résistance, la fréquence générée devra être proche de 30 000Hz et lorsque la lumière est faible, la fréquence devra être proche de 50Hz.
- Le buzzer doit avoir une patte connectée à la broche 8 et l'autre au GND
Montage électronique
Pour le réaliser, vous aurez besoin de :
- Un Arduino
- Un câble USB
- Deux résistances
- Des fils de prototypage
- Une platine de prototypage
- Une photo-résistance
- Un buzzer
Code Source
// Initialisation des constantes : const int analogInPin = A0; // Numéro de la broche à laquelle est connecté la photorésistance const int buzzerPin = 8; // Numéro de la broche à laquelle est connectée le buzzer int sensorValue = 0; // Valeur lue sur la photorésistance int outputValue = 0; // Valeur envoyée au buzzer void setup() { // Initialise la communication avec l'ordinateur Serial.begin(9600); // Indique que la broche buzzerPin est une sortie : pinMode(buzzerPin, OUTPUT); // Indique que la broche analogInPin est une entrée : pinMode(analogInPin, INPUT); } void loop() { // lit la valeur de la photorésistance et // stocke le résultat dans sensorValue : sensorValue = analogRead(analogInPin); // change sensorValue vers une intervalle de 50 à 30000 // et stocke le résultat dans outputValue : outputValue = map(sensorValue, 0, 1023, 50, 30000); // envoie de cette nouvelle valeur sur buzzerPin via la fonction tone tone(buzzerPin, outputValue); // envoie tout ça vers l'ordinateur Serial.print("sensor = " ); Serial.print(sensorValue); Serial.print("\t output = "); Serial.println(outputValue); }