El Thérémino

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 :