Cette expérimentation consiste à faire un petit thérémine fait maison à l’aide d’un arduino uno, d’un capteur de lumière, d’un capteur de distance ultrason et d’un buzzer.
Le capteur de lumière permet de faire varier la hauteur de la note, le capteur de distance fait varier le volume. Le son sort sur le buzzer
Ingrédients :
-1 Arduino Uno
-1 LDR
-1 Résistance pour la LDR
-1 capteur de distance HC-SR04
-plein de cables
Et la librairie « Volume » : https://www.arduino.cc/reference/en/libraries/volume/
On peut rajouter une led sur les branches du buzzer pour voir le volume varier.
Le code :
#include "Volume3.h"
#define echoPin 2 // attach pin D2 Arduino to pin Echo of HC-SR04
#define trigPin 3 //attach pin D3 Arduino to pin Trig of HC-SR04
const int analogOutPin = 9; // Buzzer
const int analogInPin1 = A0; // light sensor
int sensorValue1 = 0; // light sensor avant le map
int volume = 0;
int pitch = 0;
// defines variables
long duration; // variable for the duration of sound wave travel
int distance; // variable for the distance measurement
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an OUTPUT
pinMode(echoPin, INPUT); // Sets the echoPin as an INPUT
Serial.begin(9600); // Serial Communication is starting with 9600 of baudrate speed
}
void loop() {
//Pour faire fonctionner le capteur de distance
// Clears the trigPin condition
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin HIGH (ACTIVE) for 10 microseconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)
// Displays the distance on the Serial Monitor
//Le capteur comprend rien au delà de 8cm environ, donc pour que ce soit plus stable et éviter que le volume soit au maximum d'un coup
if (distance> 9) {
distance=1;
}
//affichage des valeurs
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm ");
Serial.print("sensor = ");
Serial.print(sensorValue1);
//remap du volume et de la note
sensorValue1 = analogRead(analogInPin1);
pitch = map(sensorValue1, 0, 1023, 5, 5000);
volume = map(distance, 0, 10, 0, 900);
vol.tone(analogOutPin,pitch,volume);
}
Extrait sonore :