Proximité, interrupteur optique avec effet sonore sur Arduino





Bonjour à tous!



Aujourd'hui, c'est un article sur un interrupteur de proximité avec un effet sonore, qui a été réalisé par moi il y a 9 ans, ou pour être précis, en janvier 2012.



Depuis, le switch travaille avec moi 24 heures sur 24 depuis 9 ans. Ce qui est le plus intéressant, pendant tout ce temps, il n'a pas échoué et n'a même jamais raccroché, et il n'a également jamais eu de faux positifs. En général, il a fait ses preuves et je peux vous le recommander en toute confiance pour l'auto-assemblage.

Si vous êtes intéressé par les détails, alors s'il vous plaît, sous cat.



J'ai 7 lampes montées dans le couloir.







Et pour obtenir un bel effet visuel, j'ai utilisé une commutation séquentielle des lampes, pour cela, je devais étirer un fil séparé de chaque point d'éclairage à la carte contrôleur.







J'ai caché la planche elle-même dans l'espace entre la cloison sèche et le plafond, car il y a plus qu'assez d'espace là-bas.







J'ai placé le récepteur IR et la LED dans la prise. Afin d'éviter les fausses alarmes, elles doivent être isolées les unes des autres, pour cela j'ai utilisé un cambric rétractable. Pour connecter ce capteur optique à la carte contrôleur, j'utilise les fils intégrés dans le mur.







Pour que la conception de l'interrupteur ne diffère pas des autres superpositions décoratives installées à l'intérieur, j'ai utilisé une prise de télévision de la même série, à partir de laquelle j'ai jeté tous les intérieurs et collé une fenêtre ronde découpée en acrylique violet dans le trou.







Tous les composants ont été placés sur une carte, qui a également des connecteurs à vis pour connecter les fils des lampes.







J'ai alimenté cette carte avec un chargeur de téléphone ordinaire.







La base de l'ensemble de l'appareil est le contrôleur arduino Nano V.3, mais vous pouvez également utiliser d'autres cartes avec le microcontrôleur Atmega328.







Une LED IR avec un phototransistor peut être prélevée sur le capteur d'obstacles, mais il n'est pas nécessaire de les souder, il suffit de couper les pistes supplémentaires et de leur souder 3 fils. Si vous avez déjà soudé ces pièces quelque part, avant de les utiliser, il est préférable de les vérifier d'abord pour leur fonctionnement. La LED infrarouge doit être connectée à une tension de 5 V, à travers une résistance de limitation de courant de 120 Ohm et la regarder à travers la caméra du téléphone, elle doit briller avec une lumière violette. Pour tester le phototransistor, vous aurez besoin de n'importe quel testeur avec une fonction de continuité de conducteur. Nous transférons le testeur en mode de numérotation et connectons les câbles du phototransistor aux sondes du testeur. Ensuite, vous devez apporter fermement toute télécommande d'appareils électroménagers et appuyer sur n'importe quel bouton. Un grincement intermittent sera entendu en réponse.







Il y a 9 ans, je ne trouvais pas de relais statiques appropriés et j'ai dû les assembler moi-même à partir de composants radio. Mais pour le moment, il est plus facile d'acheter un module de relais à semi-conducteurs à 8 canaux comme sur la photo que de perdre du temps à chercher ces composants.







L'interrupteur fonctionne comme suit



L'Arduino émet un signal PWM constant à partir de la sortie D5 avec une fréquence d'environ 977 Hz. Une LED qui émet un signal dans la plage infrarouge est connectée à cette sortie via une résistance de limitation de courant de 82 Ohm. Le phototransistor connecté à l'entrée D2 détecte le signal IR réfléchi par la main et vérifie sa plausibilité, et si un signal de 20 périodes consécutives ou plus correspond à une fréquence de 977 Hz, alors le contrôleur allume les 7 lampes à tour de rôle et commence à jouer un effet sonore via la sortie PWM D11. Tout de même se produit lorsque vous éteignez.







Jouer des sons



Pour reproduire les effets sonores, le format WAVE non compressé est utilisé, avec une fréquence de 16000 Hz et une profondeur de 8 bits, mais lorsque ce format est lu en PWM, un sifflement et un sifflement désagréables sont observés dans le chemin audio. Par conséquent, pour améliorer la qualité de lecture, j'ai utilisé une interpolation linéaire dans le code. Dans ce cas, l'échantillonnage des échantillons a lieu à une fréquence de 62,5 kHz et entre les échantillons originaux 3 échantillons supplémentaires sont insérés, calculés par la méthode d'interpolation linéaire. Ainsi, le bruit de quantification est réduit à la sortie, le sifflement disparaît, la qualité du son est améliorée et des filtres RC supplémentaires ne sont pas nécessaires pour la lecture.







Au lieu d'un haut-parleur, j'ai utilisé un vieux petit haut-parleur d'ordinateur sans amplificateur intégré.







Pour convertir des fichiers Wave en code C, vous pouvez utiliser un convertisseur en ligne .



Schème



Sur le schéma, j'ai marqué les relais à semi-conducteurs avec des rectangles gris, et pour ceux qui veulent être confus, ils peuvent assembler le circuit complètement, comme je l'ai fait dans un passé lointain.







Composants pour l'assemblage



1 - Arduino Nano V.3

2 - Capteur d'obstacles

3 - Module relais 8 canaux

4 - Résistances 82 Ohm et 1 kOhm

5 - Haut-parleur 0,5 - 3 W

6 - Tout transistor NPN avec un courant admissible d'au moins 500 mA



Code Arduino



Télécharger tous les fichiers dans une archive

Cette fois, j'ai décidé d'ajouter toutes les bibliothèques utilisées au dossier avec le croquis, et dans le croquis lui-même, j'ai enregistré leur utilisation locale. J'espère maintenant que les débutants auront moins de questions à me poser sur les erreurs qu'ils rencontrent lors de la compilation.



Le code contient plusieurs constantes qui peuvent être modifiées avant de clignoter.



La constante power_ir est responsable de la distance de fonctionnement du disjoncteur, elle peut prendre des valeurs d'un minimum de 20 à un maximum de 200. La valeur dont vous avez besoin peut être déterminée expérimentalement.



lamp_num - détermine le nombre de lampes que vous utilisez. Le nombre minimum de lampes ne peut pas être inférieur à 1 et le maximum ne dépasse pas 7. Si vous corrigez le code, vous pouvez l'augmenter à 15.

lamp_delay est le délai entre l'allumage consécutif des lampes, qui est exprimé en millisecondes et peut commencer de 0 à 4294967295 ms. Bien que je ne pense pas que des retards aussi énormes seront nécessaires à quiconque.



Vidéo



Pour visionner la vidéo, cliquez sur l'image.





Conclusion



En conclusion, je voudrais ajouter que je suis très surpris qu'un microcontrôleur sans WDT n'ait jamais raccroché depuis 9 ans. Pour la même raison, je n'ai pas modifié le code et n'y ai pas ajouté WDT, car Arduino avec l'ancien chargeur de démarrage ne peut pas fonctionner avec.



Merci d'avoir lu jusqu'au bout!



Si vous avez aimé mon article, soutenez-le avec un like et un abonnement.



Si vous avez des questions, vous pouvez les poser dans les commentaires.



All Articles