Salut !
Je sais, je vous sollicite beaucoup en ce moment mais j'en suis à la dernière énigme pour mon escape room, promis, après je vous embête plus !
Mon énigme : il faut crier pendant 6 secondes pour ouvrir une boîte grâce à une gâche solénoïde. Quand on commence à crier, un bandeau LED commence à s'allumer en chenillard. Quand celui-ci est "rempli" (quand les 60 LEDS sont allumées donc), j'envois un ordre sur mon transistor pour déclencher la gâche.
Matériel : capteur de son : Big Sound Sensor
Arduino Uno
Ruban LED de chez Adafruit Neopixel 1m, 60 LEDS
Code :
#include <Adafruit_NeoPixel.h>
int son = 0;
int lock = A3;
const int capteur = A0;// pin connecté à la sortie digital du capteur
unsigned long chrono = millis();
unsigned long duree = 6000;
#define PIXEL_PIN 6 // On définit le pin où est connecté la patte DATA du bandeau
#define PIXEL_COUNT 60 // On définit le nombre de LED compris sur le Ruban de LED soit 150 pour le ruban de 5m50
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800); // Paramètre l'objet strip qui correspond à toute les LED du ruban
void setup() {
Serial.begin(9600);
pinMode(capteur, INPUT);
pinMode(lock, OUTPUT);
strip.begin(); // Lance la connection
strip.show(); // Initialise toute les led à 'off'
}
/* Définition des couleurs */
int RED[3] = {255, 0, 0}; // Couleur Rouge
int GREEN[3] = {0, 255, 0}; // Couleur Verte
int CYAN[3] = {0, 255, 255}; // Couleur Cyan
int YELLOW[3] = {255, 125, 0}; // Couleur Jaune
int ORANGE[3] = {255, 40, 0}; // Couleur Orange
int PURPLE[3] = {255, 0 , 255}; // Couleur Violette
int PINK[3] = {255, 0, 100}; // Couleur Rose
int BLUE[3] = {0, 0, 255}; // Couleur Bleu
int WHITE[3] = {255, 255, 255}; // Couleur Blanche
void loop() {
strip.setBrightness(0);
for(int i = 0 ; i < 60 ; i++)
{
strip.setPixelColor(i, 0, 0, 0);
}
strip.show();
son = analogRead(capteur);
Serial.print("L'état du capteur de son est :");
Serial.println(analogRead(capteur));
if(son >= 900){
chrono = millis();
chenillardUp(100, PINK);
}
}
void chenillardUp(int temps, int color[3])
{
strip.setBrightness(50);
for(int i = 0 ; i < 60 ; i++)
{
strip.setPixelColor(i, color[0], color[1], color[2]);
strip.show();
delay(temps);
son = analogRead(capteur);
if(son < 900){
break;
}
}
if (son >= 900 && millis() - chrono >= duree){
digitalWrite(lock, HIGH);
delay(500);
digitalWrite(lock, LOW);
}
}
Le code fonctionne exactement comme je le souhaite, aujourd'hui c'est plus un problème matériel que j'ai.
Le capteur de son est très "exigeant", même en le réglant sur la sensibilité max avec la vis et en fixant le seuil de détection (dans mon programme) sur 900 (pour un maximum à 1023), la variation produite par ma voix (même en criant très fort) est minime ce qui rend l'opération foireuse. Tel qu'il est réglé là par exemple, il me renvoie une valeur analogique de 894-895 (c'est relativement stable) dans un environnement silencieux. Quand je crie à 1 mètre du capteur, ça monte à peine à 905 puis il y a comme un effet rebond qui fait retomber la mesure à 875. A partir de là, ça fait le yoyo entre ces 2 valeurs puis, quand j’arrête de crier, ça se restabilise à 895. Impossible dans ces conditions de garder le seuil au dessus de 900 pour résoudre l'énigme.
Je précise que j'ai acheté ce capteur de son en 3 exemplaires (par erreur ^^') et que les 3 réagissent de la même manière. Ce n'est donc pas une défaillance.
Au moment d'acheter, j'avais hésité entre le Big Sound et le Small Sound. Le second aurait peut-être été plus adapté à mon projet ?
Sinon je me tate à acheter ça sur Amazon : https://www.amazon.fr/gp/product/B06WLHK6BY/ref=ox_sc_act_title_1?smid=AWLU8WJU8S0VS&psc=1
Ca peut arriver dès demain et comme je suis assez pressé... (on a déjà pris trop de retard sur l'ouverture prévue).
Ou alors, il y aurait un moyen d'ajouter un composant électronique pour "lisser" la mesure ou éviter le rebond ou amplifier le signal ou que sais-je encore ?
Ou piquer un micro sur un autre appareil ? J'ai essayé avec un casque audio pour PC équipé d'un micro, j'ai coupé le mini jack (celui avec le dessin de micro) et je l'ai branché sur ma pin analogique. Bah, ça marche pas du tout !
Je suis ouvert à toute proposition, du moment que ça peut se régler dans la journée voire demain.
Merci d' avance !