Table des matières:
- Étape 1: Pièces et outils
- Étape 2: préparer la cravate
- Étape 3: Fixation des NeoPixels
- Étape 4: Fixation du Circuit Playground Express
- Étape 5: Mise sous tension du CPX
- Étape 6: Configuration du Circuit Playground Express
- Étape 7: Codage du Circuit Playground Express
- Étape 8: boutonner la cravate
Vidéo: Le Holi-Tie : 8 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Par gwfongMonkey PatchingSuivez plus par l'auteur:
À propos de: Juste un gars qui cherche à faire des choses cool En savoir plus sur gwfong »
Voici la Holi-Tie, une cravate festive conçue pour être portée pendant les vacances. Librement basé sur l'Ampli-Tie de Becky Stern qui utilise une carte Flora, le Holi-Tie utilise un microcontrôleur Circuit Python Express (CPX) pour piloter les animations NeoPixel et la musique. Un bouton permet de basculer entre 2 animations NeoPixel différentes. Les pavés tactiles capacitifs modifient les couleurs NeoPixel et les vitesses d'animation. L'autre bouton bascule entre les animations LED et la musique. Le microphone embarqué est utilisé pour mesurer le bruit ambiant pour l'animation du VU-mètre. Et le haut-parleur CPX émet des morceaux de puces de vacances.
Tout est codé à l'aide du langage de programmation Python exécuté sur le système CircuitPython. Il est alimenté par une batterie LiPo de 3,7 V, 500 mAh qui a été modifiée pour avoir un interrupteur marche/arrêt.
Il y a deux clips vidéo qui montrent le Holi-Tie:
- Holi-Tie terminé
- À l'intérieur de la Holi-Tie
Étape 1: Pièces et outils
les pièces
- Circuit Aire de Jeux Express
- 15x Flora Neopixels
- Fil magnétique
- Bande auto-agrippante adhésive
- Batterie lipo 500mAH avec connecteur JST
- Cravate en sucre d'orge
- Mini interrupteur à glissière, SPDT
- Gaine thermorétractable
Lors de l'approvisionnement des pièces, il serait sage d'acheter des extras. J'avais un total de 20 NeoPixels, dont l'un était cassé depuis le début et l'autre que j'ai ruiné. La cravate Candy Cane était si bon marché que j'en ai acheté une deuxième juste au cas où je gâcherais la première.
Outils
- Pistolet à colle chaude
- Poste de soudure
- Pinces coupantes
- Petit couteau
- Multimètre
- Ordinateur
- Briquet ou pistolet thermique
- Fil et aiguille
Étape 2: préparer la cravate
L'objectif principal est d'accéder au noyau de l'attache interne et de délimiter des lignes indiquant où les LED doivent être positionnées.
Étape 1: Attachez la cravate en position
Il sera difficile de nouer la cravate lorsque l'électronique est en place. Alors attachez la cravate pour qu'elle soit belle et que le nœud soit assez ferme et ne se défait pas. Tirez ensuite délicatement sur le petit bout de l'attache pour ouvrir le trou et faire passer l'attache par-dessus la tête. C'est la position sur laquelle la cravate sera travaillée.
Il existe toutes sortes de nœuds de cravate différents. Je ne connais que celui que j'ai appris enfant, le Windsor. Peu importe le nœud utilisé.
Étape 2: Ouvrez le dos de la cravate
Déchirez les coutures d'un côté de la boucle de cravate et du logo, puis au centre de la cravate. Soyez prudent car il doit être recousu à la fin.
Étape 3: Tracez des lignes où les LED doivent être placées
Pour que les LED apparaissent dans les sections à rayures blanches de la cravate, il est plus facile de trouver la ligne médiane de chaque section à rayures blanches à l'arrière du noyau de la cravate, puis de la mapper à l'avant du noyau de la cravate. Vérifiez et revérifiez que la ligne médiane est 1) au centre et 2) parallèle à la rayure. Un réglage fin des positions des LED sera possible si elles sont un peu éteintes. Mais il est préférable de se rapprocher de l'exactitude maintenant plutôt que plus tard.
Testez le centrage des lignes en plaçant des LED sur les lignes et en posant le tissu à rayures sur le dessus. Ajustez si nécessaire.
Étape 3: Fixation des NeoPixels
Fondamentalement, nous fabriquons notre propre bande LED. Nous montons simplement les LED sur le noyau de liaison, puis les connectons les unes aux autres.
Étape 1: Collez les NeoPixels au noyau de la cravate
Placez une noisette de colle chaude au dos du NeoPixel, placez-le sur les lignes médianes. Pour les sections avec 3 NeoPixels, alignez verticalement le NeoPixel central et collez-les en premier. Cela facilitera le positionnement des NeoPixel gauche et droit par rapport au centre d'autant plus que la largeur de l'attache augmente de haut en bas.
Assurez-vous d'orienter tous les NeoPixels dans la même direction, en partant du bas à gauche vers le haut à droite. Si ce n'est pas correct, la bande ne fonctionnera pas.
Une note sur la colle chaude. Il suffira de terminer le projet. Quant à savoir si cela durera des années à venir, il suffit de voir.
Étape 3: soudez les NeoPixels les uns aux autres
Parce que j'ai décidé de souder les NeoPixels ensemble au lieu d'utiliser du fil conducteur, le trou dans les pastilles NeoPixel joue contre nous un peu. Il suffit de trouver un bon endroit sur le pad pour souder le fil. N'essayez pas de combler le trou avec de la soudure, mais si cela se produit, tout ira bien.
Le fil magnétique a une fine couche d'isolant autour d'un noyau de cuivre. Avec un couteau, grattez l'isolant juste aux extrémités où ils seront soudés. Il est préférable de racler toute la circonférence du fil.
Étape 4: Tester la connectivité
Utilisez un multimètre pour tester la connectivité de:
- Connexions positives. Il devrait y avoir une connectivité de la pointe à la queue. Assurez-vous de tester la connectivité sur les électrodes et non sur le fil.
- Connexions au sol. Effectuez le même test mais avec les plots de masse.
- Chaque ligne de données. D'un bloc de données à l'autre, vérifiez qu'il existe une connectivité.
Étape 4: Fixation du Circuit Playground Express
Le Circuit Playground Express (CPX) est le cœur du système. Adafruit propose de nombreux tutoriels pour ce contrôleur. Plus tard dans cette instructable, je mettrai en évidence quelques-unes des fonctionnalités MCU.
Étape 1: Soudez le CPX à la pointe inférieure NeoPixel
Coupez les longueurs appropriées du fil magnétique pour l'alimentation, la terre et les données. Poussez-les à travers le tissu de base de la cravate afin qu'ils touchent les blocs d'alimentation, de terre et de données NeoPixel. Soudez-les en vous assurant que les fils existants sur les pastilles offrent toujours une bonne connectivité.
Retournez ensuite le noyau d'attache et placez le CPX dans la position souhaitée. Faites passer le fil d'alimentation au plot VOUT, le fil de terre à n'importe quel plot de masse et le fil de données à n'importe quel plot d'E/S autre que A0. Le code que j'ai écrit utilise A3.
Testez la connectivité.
Étape 2: attacher le CPX
À l'aide d'un fil et d'une aiguille, choisissez quatre coussinets équidistants et cousez-les sur le noyau de la cravate.
Étape 5: Mise sous tension du CPX
Le CPX n'a pas d'interrupteur marche/arrêt. Cela signifie qu'au moment où la batterie est branchée, la cravate s'allumera. Cela signifie également que la seule façon de l'éteindre est de débrancher la batterie, ce qui est un problème majeur. Une solution simple consiste à mettre un interrupteur sur la batterie.
Étape 1: Coupez la 3e broche de l'interrupteur
L'une des broches non centrales n'est pas nécessaire. Coupez-le au ras du corps de l'interrupteur.
Étape 2: souder le commutateur en ligne avec un câble de batterie
Coupez le fil de terre de la batterie quelque part au milieu. Faites glisser un morceau de gaine thermorétractable sur chacun des fils de terre. Soudez un fil de terre à l'une des broches et l'autre fil de terre à l'autre broche. Assurez-vous qu'ils ne se touchent pas ou que la soudure touche le corps métallique.
Vérifiez qu'ils ne sont pas connectés à l'aide d'un multimètre. Faites glisser le tube sur les connexions soudées et rétrécissez-le. Ajoutez un peu de ruban isolant à toute pièce susceptible de tomber en panne en raison de la fatigue de flexion.
Étape 3: Vérifiez que la batterie fonctionne
À ce stade, la batterie peut être branchée sur le CPX. Si tout s'est bien passé, le commutateur devrait pouvoir allumer et éteindre le CPX.
Étape 4: Montez la batterie
Mettez un peu de ruban adhésif auto-agrippant à l'arrière de la batterie et sur le noyau de l'attache. Cela le maintiendra en place si la cravate n'est pas trop malmenée.
Étape 6: Configuration du Circuit Playground Express
Je n'entrerai pas dans les détails sur la configuration du CPX. Adafruit fait cela et puis certains. Je vais donner quelques conseils pour les problèmes que j'ai rencontrés assez souvent.
CPX se bloque
Probablement en raison de problèmes de mémoire d'exécution, le CPX se figeait assez souvent. La solution rapide consiste à effacer et à re-flasher. Recherchez "Old Way" dans ces instructions. Fondamentalement, il s'agit de quelques pressions sur les boutons, d'un glisser-déposer pour effacer, puis d'un glisser-déposer pour re-flasher.
Attention: cela efface tout. Tout le code sur le CPX sera perdu.
L'enregistrement des modifications dans CPX peut entraîner des problèmes
J'ai découvert que parfois, après avoir enregistré un fichier sur le CPX, le runtime python était dans un mauvais état. Le correctif consistait à redémarrer l'environnement d'exécution python en appuyant sur le bouton de réinitialisation. Appuyez dessus une seule fois. Appuyez deux fois dessus pour lancer le processus de re-flash.
Enregistrer directement sur CPX est risqué
En raison de la possibilité que le CPX doive être re-flashé, on court le risque de perdre tout son code. Après avoir perdu mon code deux fois, j'ai proposé un workflow simple. Je voudrais enregistrer mon code sur le disque dur local. Lorsqu'il était prêt à être testé sur le CPX, je le copiais simplement en exécutant un simple script de déploiement.
Étape 7: Codage du Circuit Playground Express
À ce stade, le CPX et les NeoPixels sont à peu près complets. Aucun autre travail mécanique ou électrique ne doit être fait avec eux. Le reste n'est que logiciel.
Le code est disponible sur mon compte github. Le code python de base devrait fonctionner sans aucun changement pour tous les systèmes d'exploitation. N'installez pas les bibliothèques externes Adafruit CircuitPython. Ils ne sont pas utilisés.
Voici un résumé de haut niveau de ce qui se passe dans le code.
Quelle entrée fait quoi ?
- Bouton A: fait défiler les animations LED
- Bouton B: fait défiler les chansons
- Pavé tactile capacitif A1: modifie les couleurs des animations LED
- Pavé tactile capacitif A6: Modifie la vitesse des animations LED
3 animations existent mais seulement 2 sont en vigueur
code.py
importer des pixels désactivés
#import vumeter import escaliers import twinkle … led_animations = [pixelsoff. PixelsOff(pixels), # vumeter. VuMeter(pixels, 100, 400) escaliers. Stairs(pixels), twinkle. Twinkle(pixels)]
J'ai porté le code de style du vumètre Ampli-Tie. Il utilise le microphone CPX pour capter le son et éclairer les NeoPixels en fonction de l'amplitude du son. Cependant, je voulais plus d'animations. En raison des contraintes de mémoire d'exécution, j'ai dû choisir les animations que je voulais. Ainsi, par défaut, les deux autres, Stairs et Twinkle, s'exécuteront sans avoir à modifier le code. Pour exécuter l'animation du VU-mètre, une ou les deux autres animations doivent être commentées et le VU-mètre décommenté.
Music Manager et encodage hors ligne
frosty_the_snowman.py
importer musical_notes en tant que mn
# Frosty le bonhomme de neige # Chanson de Walter E. Rollins = [(mn. G4, mn. HLF), (mn. E4, mn. DTQ), (mn. F4, mn. ETH), (mn. G4, mn. QTR), (mn. C5, mn. HLF), …
convert_to_binary.py
chansons = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] pour la chanson dans les chansons: data=song[0] file=song[1] avec open(file, "wb") comme fichier_bin: pour l'entrée dans les données: print("writing: " + str(entry)) note=entry[0] dur=entry[1] bin_file.write(struct.pack("<HH", note, dur))
Je voulais de la musique de vacances. Le CPX prend en charge à la fois le WAV et les tonalités. Les fichiers WAV se sont avérés trop volumineux en termes de taille de fichier et de mémoire d'exécution. L'utilisation de structures de données python pour conserver les tonalités et leur durée s'est également avérée utiliser trop de mémoire d'exécution. J'ai donc modifié le code Holi-Tie pour lire un fichier binaire compressé qui ne contenait que les données de chanson nécessaires dans un format binaire compressé. J'ai écrit un script qui lit une chanson contenue dans une structure de données python et l'écrit au format binaire. Avoir la chanson encodée sous forme de données binaires dans un fichier rend la chanson à la fois petite et dynamique. Une fois la chanson terminée, la mémoire est libérée.
Il est trivial d'ajouter plus de chansons. Pour plus de détails, consultez le fichier README.md dans les chansons.
Le bouton A anime NeoPixels, B joue de la musique, mais pas simultanément
code.py
def button_a_pressed():
if music.is_playing(): # Arrêter la musique si jouer music.stop() next_led_animation() def button_b_pressed(): if active_led_animation != 0: # Exécuter l'animation no-op next_led_animation(0) if music.is_playing(): # Basculer musique activée ou désactivée music.stop() sinon: music.play()
Même avec le système de gestion de musique plus efficace en mémoire, je n'étais pas en mesure de conserver 2 animations dans la mémoire d'exécution, tout en jouant l'une d'entre elles et en jouant une chanson en même temps. Parce que j'ai déjà choisi de ne pas avoir de VU-mètre dans la mémoire d'exécution, je ne voulais pas réduire le nombre d'animations à seulement 1. J'ai donc écrit le code pour que soit l'animation soit lue, soit la musique joue mais pas les deux. Une autre option consistait à réduire le nombre de NeoPixels, mais cela perdrait une partie de la fraîcheur de l'animation.
Funky du code Python
Bien que je sois un développeur de logiciels chevronné, je n'avais jamais écrit Python. Après avoir pris le coup et commencé à appliquer de bonnes pratiques de codage telles que l'encapsulation et la modularisation, j'ai rapidement découvert que j'utilisais trop de mémoire d'exécution. Il y a donc pas mal de code non DRY. J'ai également dû utiliser certaines techniques MicroPython telles que const() pour réduire davantage les problèmes de mémoire d'exécution.
Modules compilés
compiler
#!/bin/bash
compiler=~/development/circuitpython/mpy-cross-3.x-windows.exe chansons cd python3./convert_to_binary.py cd.. pour f dans *.py; do if
Au début du projet, j'ai suivi les conseils d'Adafruit et stocké toutes les bibliothèques Adafruit CircuitPython sur flash. Ceci, cependant, laissait peu de place à mon projet. Pour pouvoir obtenir mon code sur le CPX, j'ai commencé à compiler les modules et à les placer sur le MCU. Il s'avère que le Holi-Tie n'a besoin d'aucune des bibliothèques externes. Les bibliothèques existantes dans l'UF2 étaient suffisantes pour ce projet. L'exécution de fichiers *.mpy est un peu plus efficace, j'ai donc conservé le processus de déploiement des modules compilés.
Comme le montre le script de compilation ci-dessus, je travaille sur une machine Windows mais en utilisant des utilitaires Unix tels que bash et python3. J'utilise Cygwin pour accomplir cela. Ce script peut facilement être traduit en batch DOS et en une implémentation Python3 native de Windows.
Étape 8: boutonner la cravate
La dernière étape consiste à remettre le noyau de la cravate en place, à remonter la cravate et à la recoudre. Assurez-vous de pouvoir rendre le CPX accessible. Vous en aurez besoin pour remplacer la batterie ou apporter des modifications au code.
Conseillé:
Prenez de superbes photos avec un iPhone : 9 étapes (avec photos)
Prenez de superbes photos avec un iPhone : la plupart d'entre nous ont un smartphone partout avec nous ces jours-ci, il est donc important de savoir comment utiliser l'appareil photo de votre smartphone pour prendre de superbes photos ! Je n'ai un smartphone que depuis quelques années et j'aime avoir un appareil photo décent pour documenter les choses que je
Plateforme avec des niveaux infinis sur GameGo avec Makecode Arcade : 5 étapes (avec photos)
Plateforme avec des niveaux infinis sur GameGo avec Makecode Arcade : GameGo est une console portable de jeu rétro compatible Microsoft Makecode développée par TinkerGen STEM education. Il est basé sur la puce STM32F401RET6 ARM Cortex M4 et est destiné aux éducateurs STEM ou simplement aux personnes qui aiment s'amuser à créer un jeu vidéo rétro
Balance intelligente bricolage avec réveil (avec Wi-Fi, ESP8266, Arduino IDE et Adafruit.io): 10 étapes (avec photos)
Balance intelligente bricolage avec réveil (avec Wi-Fi, ESP8266, Arduino IDE et Adafruit.io): Dans mon projet précédent, j'ai développé une balance de salle de bain intelligente avec Wi-Fi. Il peut mesurer le poids de l'utilisateur, l'afficher localement et l'envoyer vers le cloud. Vous pouvez obtenir plus de détails à ce sujet sur le lien ci-dessous : https://www.instructables.com/id/Wi-Fi-Smart-Scale-wi
Tapis avec capteurs/communication RF avec Arduino Micro : 4 étapes (avec photos)
Tapis avec capteurs/communication RF avec Arduino Micro : J'ai récemment terminé l'installation Tout aussi diversifiée, qui est composée d'une série de lampes qui réagissent aux capteurs placés dans un tapis sous les lampes. Voici comment j'ai fait le tapis avec des capteurs de pression. J'espère que vous trouverez ça utile.:)
Lancez votre diaporama de photos de vacances avec une touche de magie ! : 9 étapes (avec photos)
Lancez votre diaporama de photos de vacances avec une touche de magie ! : Au fil des ans, j'ai pris l'habitude d'emporter une petite figurine avec moi en voyage : j'achète souvent un petit artoy vierge (comme celui sur la photo) et je peins il correspond au drapeau et au thème du pays que je visite (dans ce cas, la Sicile). T