- Matériaux nécessaires
- Fonctionnement du capteur sonore
- Mesure de la fréquence audio sur l'oscilloscope
- Schéma du circuit du détecteur de sifflet Arduino
- Mesure de la fréquence avec Arduino
- Programmer votre Arduino pour détecter Whistle
- Détecteur de sifflet Arduino fonctionnant
En tant qu'enfant, j'étais fasciné par une voiture de musique jouet qui se déclenche lorsque vous frappez dans vos mains, puis en grandissant, je me suis demandé si nous pouvions utiliser la même chose pour allumer les lumières et les ventilateurs dans notre maison. Ce serait cool d'allumer simplement mes ventilateurs et mes lumières en applaudissant simplement au lieu de marcher paresseusement vers le tableau de commutation. Mais souvent, il ne fonctionnerait pas correctement car ce circuit répondra à tout bruit fort dans l'environnement, comme une radio forte ou pour la tondeuse à gazon de mon voisin. Bien que la construction d'un interrupteur de clap soit également un projet amusant à faire.
C'est alors que je suis tombé sur cette méthode de détection de sifflet dans laquelle le circuit détectera le sifflet. Un sifflet, contrairement aux autres sons, aura une fréquence uniforme pendant une durée particulière et pourra donc être distingué de la parole ou de la musique. Donc, dans ce tutoriel, nous allons apprendre à détecter le son du sifflet en interfaçant le capteur de son avec Arduino et lorsqu'un sifflet est détecté, nous allons faire basculer une lampe CA à travers un relais. En cours de route, nous apprendrons également comment les signaux sonores sont reçus par le microphone et comment mesurer la fréquence à l'aide d'Arduino. Cela semble intéressant, alors commençons avec le projet domotique basé sur Arduino.
Matériaux nécessaires
- Arduino UNO
- Module de capteur de son
- Module de relais
- Lampe AC
- Connexion des fils
- Planche à pain
Fonctionnement du capteur sonore
Avant de plonger dans la connexion matérielle et le code de ce projet domotique, examinons le capteur de son. Le capteur de son utilisé dans ce module est illustré ci-dessous. Le principe de fonctionnement de la plupart des capteurs sonores disponibles sur le marché est similaire à celui-ci, bien que l'apparence puisse changer un peu.
Comme nous le savons, l'élément primitif d'un capteur de son est le microphone. Un microphone est un type de transducteur qui convertit les ondes sonores (énergie acoustique) en énergie électrique. Fondamentalement, le diaphragme à l'intérieur du microphone vibre aux ondes sonores dans l'atmosphère, ce qui produit un signal électrique sur sa broche de sortie. Mais ces signaux seront de très faible magnitude (mV) et ne pourront donc pas être traités directement par un microcontrôleur comme Arduino. De plus, par défaut, les signaux sonores sont de nature analogique, donc la sortie du microphone sera une onde sinusoïdale à fréquence variable, mais les microcontrôleurs sont des appareils numériques et fonctionnent donc mieux avec une onde carrée.
Pour amplifier ces ondes sinusoïdales à faible signal et les convertir en ondes carrées, le module utilise le module de comparaison LM393 intégré comme illustré ci-dessus. La sortie audio basse tension du microphone est fournie à une broche du comparateur via un transistor amplificateur tandis qu'une tension de référence est établie sur l'autre broche à l'aide d'un circuit diviseur de tension impliquant un potentiomètre. Lorsque la tension de sortie audio du microphone dépasse la tension préréglée, le comparateur devient haut avec 5V (tension de fonctionnement), sinon le comparateur reste bas à 0V. De cette façon, l'onde sinusoïdale à faible signal peut être convertie en onde carrée haute tension (5 V). La capture d'écran de l'oscilloscope ci-dessous montre la même chose où l'onde jaune est l'onde sinusoïdale de signal faible et le bleu allumé est l'onde carrée de sortie. lela sensibilité peut être contrôlée en faisant varier le potentiomètre sur le module.
Mesure de la fréquence audio sur l'oscilloscope
Ce module de capteur sonore convertira les ondes sonores de l'atmosphère en ondes carrées dont la fréquence sera égale à la fréquence des ondes sonores. Ainsi, en mesurant la fréquence de l'onde carrée, nous pouvons trouver la fréquence des signaux sonores dans l'atmosphère. Pour m'assurer que les choses fonctionnent comme prévu, j'ai connecté le capteur de son à mon oscilloscope pour sonder son signal de sortie comme indiqué dans la vidéo ci-dessous.
J'ai activé le mode de mesure sur mon oscilloscope pour mesurer la fréquence et utilisé une application Android (Frequency Sound Generator) du Play Store pour générer des signaux sonores de fréquence connue. Comme vous pouvez le voir dans le GID ci-dessus, l'oscilloscope a pu mesurer les signaux sonores avec une précision assez décente, la valeur de la fréquence affichée dans l'oscilloscope est très proche de celle affichée sur mon téléphone. Maintenant que nous savons que le module fonctionne, procédons à l' interfaçage du capteur de son avec Arduino.
Schéma du circuit du détecteur de sifflet Arduino
Le schéma de circuit complet du circuit du commutateur de détecteur de sifflet Arduino utilisant le capteur de son est présenté ci-dessous. Le circuit a été dessiné à l'aide du logiciel Fritzing.
Le capteur de son et le module de relais sont alimentés par la broche 5V de l'Arduino. La broche de sortie du capteur de son est connectée à la broche numérique 8 de l'Arduino, c'est à cause de la propriété de minuterie de cette broche et nous en discuterons plus à ce sujet dans la section de programmation. Le module de relais est déclenché par la broche 13 qui est également connectée à la LED intégrée sur la carte UNO.
Du côté de l'alimentation CA, le fil neutre est directement connecté à la broche commune (C) du module de relais tandis que la phase est connectée à la broche normalement ouverte (NO) du relais via la charge CA (ampoule). De cette façon, lorsque le relais est déclenché, la broche NO sera connectée à la broche C et ainsi l'ampoule s'allumera. Sinon, le blub restera éteint. Une fois les connexions établies, mon matériel ressemblait à quelque chose comme ça.
Avertissement: travailler avec un circuit CA peut devenir dangereux, soyez prudent lorsque vous manipulez des fils sous tension et évitez les courts-circuits. Un disjoncteur ou la surveillance d'un adulte est recommandé pour les personnes qui n'ont pas l'expérience de l'électronique. Tu étais prévenu!!
Mesure de la fréquence avec Arduino
Semblable à notre oscilloscope lisant la fréquence des ondes carrées entrantes, nous devons programmer Arduino pour calculer la fréquence. Nous avons déjà appris comment faire cela dans notre tutoriel sur le compteur de fréquence en utilisant l'impulsion en fonction. Mais dans ce tutoriel, nous utiliserons la bibliothèque Freqmeasure pour mesurer la fréquence afin d'obtenir des résultats précis. Cette bibliothèque utilise l'interruption de minuterie interne sur la broche 8 pour mesurer la durée pendant laquelle une impulsion reste activée. Une fois le temps mesuré, nous pouvons calculer la fréquence en utilisant les formules F = 1 / T. Cependant, puisque nous utilisons directement la bibliothèque, nous n'avons pas besoin d'entrer dans les détails du registre et les calculs de la façon dont la fréquence est mesurée. La bibliothèque peut être téléchargée à partir du lien ci-dessous:
- Bibliothèque de mesures de fréquence par pjrc
Le lien ci-dessus téléchargera un fichier zip, vous pouvez ensuite ajouter ce fichier zip à votre IDE Arduino en suivant le chemin Sketch -> Inclure la bibliothèque -> Ajouter une bibliothèque.ZIP.
Remarque: l' utilisation de la bibliothèque désactivera lafonctionnalité analogWrite sur les broches 9 et 10 sur UNO puisque le minuteur sera occupé par cette bibliothèque. De plus, ces broches changeront si d'autres cartes sont utilisées.
Programmer votre Arduino pour détecter Whistle
Le programme complet avec une vidéo de démonstration se trouve au bas de cette page. Dans cette rubrique, je vais expliquer le programme en le décomposant en petits extraits.
Comme toujours, nous commençons le programme en incluant les bibliothèques requises et en déclarant les variables requises. Assurez-vous que vous avez déjà ajouté la bibliothèque FreqMeasure.h comme expliqué dans l'en-tête ci-dessus. L'état variable représente l'état de la LED et les variables fréquence et continuité sont utilisées pour fournir respectivement la fréquence mesurée et sa continuité.
#comprendre
Dans la fonction de configuration vide , nous commençons le moniteur série à un débit de 9600 bauds pour le débogage. Utilisez ensuite la fonction FreqMeasure.begin () pour initialiser la broche 8 pour mesurer la fréquence. Nous déclarons également que la broche 13 (LED_BUILTIN) est sortie.
void setup () { Serial.begin (9600); FreqMeasure.begin (); // Mesure sur la broche 8 par défaut pinMode (LED_BUILTIN, OUTPUT); }
À l'intérieur de la boucle infinie, nous continuons à écouter sur la broche 8 en utilisant la fonction FreqMeasure.available (). S'il y a un signal entrant, nous mesurons la fréquence à l'aide de FreqMeasure.read (). Pour éviter les erreurs dues au bruit, nous mesurons 100 échantillons et en avons pris une moyenne. Le code pour faire de même est indiqué ci-dessous.
if (FreqMeasure.available ()) { // fait la moyenne de plusieurs lectures ensemble sum = sum + FreqMeasure.read (); compte = compte + 1; if (nombre> 100) { fréquence = FreqMeasure.countToFrequency (somme / nombre); Serial.println (fréquence); somme = 0; compte = 0; } }
Vous pouvez utiliser la fonction Serial.println () ici pour vérifier la valeur de la fréquence de votre sifflet. Dans mon cas, la valeur reçue était de 1800Hz à 2000Hz. La fréquence des sifflets de la plupart des gens tombera dans cette plage particulière. Mais même d'autres sons comme la musique ou la voix peuvent tomber sous cette fréquence afin de les distinguer, nous surveillerons la continuité. Si la fréquence est continue pendant 3 fois, nous confirmons qu'il s'agit d'un son de sifflet. Donc, si la fréquence est comprise entre 1800 et 2000, nous incrémentons la variable appelée continuité.
if (fréquence> 1800 && fréquence <2000) {continuité ++; Serial.print ("Continuité ->"); Serial.println (continuité); fréquence = 0;}
Si la valeur de continuité atteint ou dépasse trois, alors on change l'état de la LED en basculant la variable appelée state. Si l'état est déjà vrai, nous le changeons en faux et vice versa.
if (continuité> = 3 && état == faux) {état = vrai; continuité = 0; Serial.println ("Lumière allumée"); delay (1000);} if (continuité> = 3 && state == true) {state = false; continuité = 0; Serial.println ("Light Turned OFF"); retard (1000);}
Détecteur de sifflet Arduino fonctionnant
Une fois que le code et le matériel sont prêts, nous pouvons commencer à le tester. Assurez-vous que les connexions sont correctes et mettez le module sous tension. Ouvrez le moniteur série et commencez à siffler, vous pouvez remarquer que la valeur de continuité est incrémentée et enfin allumer ou éteindre la lampe. Un exemple de capture d'écran de mon moniteur série est illustré ci-dessous.
Lorsque le moniteur série indique que la lumière est allumée, la broche 13 sera rendue haute et le relais sera déclenché pour allumer la lampe. De même, la lampe sera éteinte lorsque le moniteur série dit que la lumière est éteinte . Une fois que vous avez testé le fonctionnement, vous pouvez alimenter l'installation à l'aide d'un adaptateur 12V et commencer à contrôler votre appareil électroménager AC à l'aide d'un sifflet.
Le fonctionnement complet de ce projet peut être trouvé dans la vidéo ci-dessous. J'espère que vous avez compris le didacticiel et que vous avez aimé apprendre quelque chose de nouveau. Si vous rencontrez des problèmes pour faire fonctionner les choses, laissez-les dans la section commentaires ou utilisez notre forum pour d'autres questions techniques.