Interaction par le biais du son
Pour faire parler notre plante nous utilisons quatres éléments clés:
-
Un capteur à ultrasons (HC-SR04)
-
Un module MicroSD pour Arduino (ADAFRUIT MICROSD)
-
Une petite enceinte (MAKERHAWK 8 OHM)
Le capteur à ultrason est à proximité de la plante, c'est lui qui indique à notre amie la distance entre elle et son interlocuteur, c'est à dire une personne où notre Druid20.
Ensuite la voix de notre plante est un petit haut-parleur, qui émet un son différent en fonction de la distance captée.
Ces sons sont faits maison avec le logiciel FL STUDIO 20 et sont enregistrés dans une bibliothèque de sons se trouvant dans le module MicroSD, directement connecté à la petite enceinte.
C'est donc en fonction de la position de son interlocuteur que notre amie réagit.
Mise en place
Le capteur à ultrasons
Le code
const byte = TRIGGER_PIN=2 //on indique les pins correspondante
const byte = ECHO_PIN=3
const unsigned long MEASURE_TIMEOUT = 25000UL ;
const float SOUND_SPEED = 340,0 / 1000 ; //on détermine la vitesse des signaux
void setup() {
Serial.begin(9600) ;
pinMode(TRIGGER_PIN, OUTPUT) ; //on met en place le capteur à ultrasons
digitalWrite(TRIGGER_PIN, LOW) ;
pinMode(ECHO_PIN, INPUT) ;
void loop() {
digitalWrite(TRIGGER_PIN, HIGH) ; //on indique au capteur d’envoyer le signal avec un délai de 10 microsecondes entre chaque envoi
delayMicroseconds(10) ;
digitalWrite(TRIGGER_PIN, LOW) ;
long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT) ;
float distance_mm = measure / 2.0 * SOUND_SPEED ;
Serial.print(F("Distance: ")); //on affiche les distances calculées
Serial.print(distance_mm);
Serial.print(F("mm ("));
Serial.print(distance_mm / 10.0, 2);
Serial.print(F("cm, "));
Serial.print(distance_mm / 1000.0, 2);
Serial.println(F("m)"));
delay(200); //le délai entre chaque distance calculée
Le module microSD
Le code
Le module microSD
Le code
/!\ IL FAUT INSTALLER LES LIBRAIRIES SD.h ET SPI.h /!\
Elles permettent à l'arduino de lire le module microSD.
#include "SD.h" //on appelle les librairies
#include "SPI.h"
#define SD_ChipSelectPin 10 //on définit la pin du module microSD
const byte =TRIGGER_PIN=2
const byte = ECHO_PIN=3
const unsigned long MEASURE_TIMEOUT = 25000UL ;
const float SOUND_SPEED = 340,0 / 1000 ;
void setup() {
if(!SD.begin(SD_ChipSelectPin)) //on initialise la carte SD
Serial.begin(9600) ;
pinMode(TRIGGER_PIN, OUTPUT) ;
digitalWrite(TRIGGER_PIN, LOW) ;
pinMode(ECHO_PIN, INPUT) ;
void loop() {
digitalWrite(TRIGGER_PIN, HIGH) ;
delayMicroseconds(10) ;
digitalWrite(TRIGGER_PIN, LOW) ;
long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT) ;
float distance_mm = measure / 2.0 * SOUND_SPEED ;
Serial.print(F("Distance: "));
Serial.print(distance_mm);
Serial.print(F("mm ("));
Serial.print(distance_mm / 10.0, 2);
Serial.print(F("cm, "));
Serial.print(distance_mm / 1000.0, 2);
Serial.println(F("m)"));
delay(200);
L'enceinte
Le code
/!\ IL FAUT INSTALLER LA LIBRAIRIE TMRpcm.h /!\
C'est elle qui permet l'intéraction entre carte SD et enceinte.
#include "SD.h" //on appelle les librairies
#include "SPI.h"
#include "TMRpcm.h"
#define SD_ChipSelectPin 10
const byte = TRIGGER_PIN=2
const byte = ECHO_PIN=3
const unsigned long MEASURE_TIMEOUT = 25000UL ;
const float SOUND_SPEED = 340,0 / 1000 ;
TMRpcm tmrpcm; //on actionne la librairie
void setup() {
tmrpcm.speakerPin=9; //on définit la pin du speaker
if(!SD.begin(SD_ChipSelectPin))
tmrpcm.quality(1); //qualité du son
tmrpcm.setVolume(5); //volume du son
if(!SD.begin(SD_ChipSelectPin))
Serial.begin(9600) ;
pinMode(TRIGGER_PIN, OUTPUT) ;
digitalWrite(TRIGGER_PIN, LOW) ;
pinMode(ECHO_PIN, INPUT) ;
void loop() {
digitalWrite(TRIGGER_PIN, HIGH) ;
delayMicroseconds(10) ;
digitalWrite(TRIGGER_PIN, LOW) ;
long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT) ;
float distance_mm = measure / 2.0 * SOUND_SPEED ;
Serial.print(F("Distance: "));
Serial.print(distance_mm);
Serial.print(F("mm ("));
Serial.print(distance_mm / 10.0, 2);
Serial.print(F("cm, "));
Serial.print(distance_mm / 1000.0, 2);
Serial.println(F("m)"));
delay(200);
if(distance_mm>2000 && distance_mm<2200){ //en fonction de la distance on joue un son à telle seconde de la composition
tmrpcm.play("project.wav", 0);
}
//et ainsi de suite...
if(distance_mm<100{ //ici on augmente la durée du son
tmrpcm.play("song.wav");
else{
delay(3000);
}
}