Capteur de son pas assez sensible (ENIGME FINALE !!!)

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 ! :slight_smile:

Bonjour
ce genre de module dispose de 2 types de sorties
A0 et D0
A0 renvoie une valeur analogique
D0 un etat tout ou rien renvoyé par le comparateur et réglé par parle "potentiometre"

Tu aurais je pense plus interet a utiliser la sortie D0 avec une entrée digitale et à faire tes "actions" en lisant du digital et pas de l'analogique.

To module est équipé d'une led interne de detection ?

Je t'imagine en train de gueuler pendant les essais :smiley: !

Louer un megaphone?

Bonjour

BrUnO14200:
Je t'imagine en train de gueuler pendant les essais :smiley: !

:slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile:

au risque de passer pour un vieux schnok....
La facilité apporté par les petits modules extrêmement puissant pour un prix dérisoir comme l'arduino transforme l'électronique en un jeux de lego.
Et du coup, on en oublie l’essentiel.
Ce montage peut se faire juste avec quelques composants classique de base.

Mais puisque tu a la chance de connaitre l'utilisation de micro contrôleur, et que tu est intelligent et sympatrique et que tu me fait rire et que tu as déjà bien avancé sur ton montage fort amusant, je te propose de relier le monde du hard avec celui du soft.

L’idée serai plutôt d'utiliser un simple microphone omnidirectionnel à large pavillon (finalement, un haut parleur pourrait le faire, c'est dinge ce qu'on trouve en décheterie) mais en tout cas un micro le plus vieux possible car ils étaient de (souvent) bien meilleur qualité.

Puis tu exhume un ou deux LM 741 , un potard, et tu fait un montage avec un AO pour amplifier avec ton potard pour ajuster la sensibilité (le gain), un suiveur pour l'impédance , et tu es sauvé.

Je te renvoie sur ce lien qui donne les petites formules montage.Le site web auquel vous essayez d’accéder est suspendu

Dans ce type de montage à l’arrache et à la vas vite, le potard est ton amis.

De tête donc pas assuré, mais tu fait ça sur une platine de développement

puis tu branche ton oscilloscope pour regarder çe qui se passe, tu embauche un hurleur, et quand tu est satisfait, tu fait un suiveur avec un autre lm741 et tu peux.....hurler ta joie !

Fait nous une vidéo qu'on se marre un peu.

mais je ne suis pas un dieux et je peux me tromper

A-t-il un oscilloscope? Marche-t-il (suivant les lois de Murphy, c'est improbable)

je ne conçois pas l'électronique sans oscilloscope . On est aveugle sans cet appareil plus qu'indispensable.
Ceci dit : bonne question

Le cachou noir n'est pas un amplificateur opérationnel mais un comparateur.

Les deux ont le même brochage, ils sont très ressemblant dans le principe mais ne sont pas optimisés pour faire la même chose.
La sortie d'un ampli passe par tous les niveaux entre 0 et Vmax : il est analogique.
Un comparateur ne connaît que deux états : GND et Vcc : il est bistable (numérique à 2 états).
A quelques millivolts prés si l'entrée plus est inférieure à l'entrée moins la sortie est à 0V, toujours à quelques millivolts près si l'entrée plus est supérieure à l'entrée moins la sortie est à Vcc.

Sur le module le niveau de comparaison est fixé par le potentiomètre bleu.

pomme-poire:
je ne conçois pas l'électronique sans oscilloscope . On est aveugle sans cet appareil plus qu'indispensable.

C'est un plus indéniable mais qui a un coût qu'il faut justifier. Des générations d'amateurs ont réussi à faire ce qu'il souhaitaient en remplaçant le confort matériel par de la réflexion cérébrale, cela doit rester possible en 2019.

c'est pour ça que je propose un AO

Pour le scop, je laisse à chacun sa philosophie mais si je vais chez mon médecin et qu'il me dit qu'il n'a pas besoin de stréto car des générations de toubibs s'en sont passé car il étaient doué de réflexion cérébrale, je change de toubib.

Pour les oscilloscopes : le coût de petits bijoux tels que https://www.lextronic.fr/oscilloscopes-oem/19308-mini-oscilloscope-oem-xmega-xprotolab.html n'est pas un problème; le plus gros problème est de savoir s'en servir (pour des dépannages occasionnels, le temps de se souvenir du mode d'emploi peut être très long..., bien plus long que du temps de cerf veau.)

Je ne veux pas lancer une discussion interminable mais que peut-tu faire avec un matériel qui échantillonne à 2 MHz ?
2 méga échantillons par seconde c'est d'après le théorème de Shannon une bande passante max de 1 MHz.
MAIS à ce prix tu n'as que 2 points pour reconstituer la courbe !

Si on veux un minimum de 20 points par période la bande passante tombe à 50 kHz --> tout juste bon pour de l'audio.

Certes il existe des solutions avec des décalages de l'instant d'échantillonnage et reconstitution du signal dans une mémoire accumulatrice mais à ce prix je doute que ce système soit disponible.
De toute façon ce sera 1 MHz max. C'est à dire, compte tenu des série de Fourrier qui disent que pour voir carré un signal carré il faut au minimum transmettre (ou détecter) l'harmonique 7 à 10, qu'on revient à un signal utile de fréquence max 100 kHz.
Donc oui pour de l'audio.

+1
Il vaut mieux chercher un oscillo analogique d’occasion avec une bande passante de 20MHz. On en trouve pour 50 à 100€.

pour de l'audio -qui a un rapport avec le sujet du post- ça suffit...
pour des signaux mixtes (audio d'un côté, I2C/ bus de LCD/ ligne série) ce truc primitif, regardé avec mépris par les géants du "scop" est un vrai bijou... si on a une loupe.
Du point de vue du logiciel interne, qui pilote tout ça, il escrabouille bien évidemment tout oscillo analogique, même d'occasion.

kamill:
+1
Il vaut mieux chercher un oscillo analogique d’occasion avec une bande passante de 20MHz. On en trouve pour 50 à 100€.

j'ai récupéré d'une boite qui à coulé une dizaine de scope tektro de 2x100 à 4x300 mhz dont un à tiroir avec un tiroir analyseur logique et une brouette de tiroirs. Dire que j'ai bossé un mois quand j'était gamin pour me payer un 1x10 mhz ! Même à 50 € , je n'ai pas eu un seul appel. Je les ai proposé gratuitement au lycée technique ils m'ont dit que cela ne leurs servirait à rien.( j'ai vraiment eu le sentiment que ma visite était appréciée comme un chien dans un jeux de quilles) Aux bout de quelques années, quand j'ai déménagé, je les ai mis en déchetterie, avec quand même beaucoup de tristesse. J'étais écœuré pour être franc.

Pour revenir à nos moutons, je ne pense pas qu'il faille échantillonner un hurlement de 6 seconde pour juste envoyer une impulsion. Ce n'est pas de la reconnaissance vocal. Détecter un seuil de "vacarme" et regarder s'il dur 6 seconde devrait faire l'affaire . Mais pourquoi faire simple quand on peut faire compliqué ! :))

Je peux me tromper.

ce genre de module dispose de 2 types de sorties
A0 et D0
A0 renvoie une valeur analogique
D0 un etat tout ou rien renvoyé par le comparateur et réglé par parle "potentiometre"

Tu aurais je pense plus interet a utiliser la sortie D0 avec une entrée digitale et à faire tes "actions" en lisant du digital et pas de l'analogique.

To module est équipé d'une led interne de detection ?

Artouste => J'ai essayé les 2 méthodes, c'est exactement pareil en digital. Et oui il y a une led de détection.

Je t'imagine en train de gueuler pendant les essais :smiley: !

C'est beaucoup moins marrant en vrai. ^^

pomme-poire => Ta solution est peut-être la plus propre/efficace/simple mais je n'ai ni le temps, ni les connaissances (mes connaissances en électronique se limitent à ce que j'ai appris sur le tas en jouant avec l'Arduino, beaucoup par le biais de ce forum d'ailleurs), ni le matos pour la mettre en oeuvre. J'en prends note si jamais je veux faire évoluer mon mécanisme mais pour le moment il me faut un plan B TRES rapidement. J'ai ma première équipe de test demain soir...

ta led reste allumée tout du temps que tu gueule ?
si tu simule ton détecteur ça marche ?

je viens de penser: peut être tu le sature ton module . essaye de mettre un morceau de mousse devant pour diminuer sa sensibilité, ça fonctionne chez les humains.
De cette façon tu abaisse le facteur bruit et les phénomènes de saturation ou autres réaction indésirables.