Table des matières:

Générateur de tonalités à microcontrôleur en code C : 8 étapes (avec images)
Générateur de tonalités à microcontrôleur en code C : 8 étapes (avec images)

Vidéo: Générateur de tonalités à microcontrôleur en code C : 8 étapes (avec images)

Vidéo: Générateur de tonalités à microcontrôleur en code C : 8 étapes (avec images)
Vidéo: 2 STE: Cours ATC. Microcontrôleur PIC16f877 2024, Novembre
Anonim
Microcontrôleur Fabric Tone Generator en code C
Microcontrôleur Fabric Tone Generator en code C

À la fin du mois d'octobre de l'année dernière, l'utilisateur d'instructables carmitsu m'a envoyé un message après avoir vu mon synthé lunchbox. Extrait de son message: J'enseigne la musique à l'école primaire. Nous jouons beaucoup de musique de flûte à bec. c'est-à-dire que les enfants jouent de petites flûtes… J'ai plusieurs enfants ayant des besoins spéciaux qui peuvent utiliser ces panneaux d'affichage noirs avec des cercles portant le nom de la note. Ces élèves poussent sur les cercles avec des noms de notes en même temps que les autres élèves jouent une chanson….. La plupart des enfants ayant des besoins spéciaux peuvent le faire assez bien et en rythme avec la musique. Ce que je cherche, c'est à construire un générateur de sons très simple pour que ces enfants puissent jouer le même ton que ceux joués par les étudiants sur leurs enregistreurs. Je ne serais que quelques emplacements. J'ai pensé que je pourrais attacher une sorte de petit bouton au bas de leurs cercles ronds afin que lorsqu'ils appuient dessus, le son sorte d'un petit haut-parleur, suffisamment fort pour qu'ils puissent entendre. Avoir une mère enseignante et avoir aimé l'école, comment résister ? A vrai dire, je ne pouvais pas. C'est à peu près une chronique du projet et des instructions sur la façon de construire le vôtre.

Étape 1: Le début ou pourquoi je ne pouvais pas m'en tenir à l'analogique

Le début ou pourquoi je ne pouvais pas m'en tenir à l'analogique
Le début ou pourquoi je ne pouvais pas m'en tenir à l'analogique

Les bonnes choses commencent à la page suivante. Si vous voulez savoir comment j'ai fini par utiliser les pièces que j'ai faites, lisez la suite. La véritable minuterie: Après avoir réfléchi au projet, j'ai immédiatement pensé au générateur de sons piézo de mon livre sur les amplis opérationnels Forest Mims III. Cela semblait être une bonne voie à suivre, c'est juste un piézo, un 741 IC et quelques composants passifs. Pas grave non ? Eh bien, il a 2 problèmes, 1) lorsque vous appuyez sur le commutateur, il est possible de changer la hauteur 2) c'est presque impossible à accorder. Le premier pourrait probablement être surmonté avec une technologie anti-rebond, bien que je ne sache pas comment le faire sans ajouter un autre compteur. Cela peut également être un problème avec l'utilisation d'un piézo. Le deuxième problème est devenu difficile à manier lorsque vous avez commencé à essayer d'atteindre une certaine hauteur. Et le 555 ? La fiche technique montre une fonction de temporisation basée sur des résistances et des condensateurs. Ce qui est génial jusqu'à ce que vous commenciez à taper les valeurs réelles des parties du monde réel, c'est à ce moment-là que vous constaterez qu'atteindre une hauteur de 440 Hz commence à devenir un peu difficile. Vous pouvez utiliser des potentiomètres pour le régler, mais avec le temps, ils ont tendance à bouger. Accorder constamment l'instrument, compilé en plus d'une augmentation rapide du coût et de la quantité de pièces, et ma femme faisant le changement de hauteur lorsqu'elle a appuyé sur le bouton a tué le 555 pour ce projet. Amplificateur opérationnel: aucun problème, les gens ont fabriqué des synthés avec amplis-op depuis avant ma naissance. À quel point cela pourrait-il être difficile d'en faire un vraiment simple, avec peu de parties et des notes spécifiques ? Plus dur que je ne le pensais. La plupart des conceptions sont très compliquées pour ce projet. Les concepteurs de synthés recherchent la forme d'onde/le ton parfait. Cela entre directement en conflit avec un projet qui est censé être assez bon marché pour les budgets des écoles ou des enseignants. Construire un clavier est assez simple, c'est juste un tas de résistances et de puissance ou un tas de diodes et de puissance. C'est le reste de la conception du circuit et le coût des circuits imprimés personnalisés qui commencent à devenir incontrôlables pour quelqu'un qui débute en électronique. Redéfinition du projet: le projet a donc été redéfini avant même que je ne me lance vraiment. J'avais besoin de quelque chose qui puisse basculer une broche de haut-parleur, à temps, en appuyant sur un bouton. Je ne voulais pas avoir à concevoir et acheter un PCB. Celui-ci devait utiliser le moins de composants possible et être assemblé comme un kit pour débutants. Cela me regardait en face tout le temps. Euh !! Microcontrôleur ! Microcontrôleur: Donc, après avoir acheté à la fois un kit Arduino Modern Devices Bare Bones et une carte cible simple Evil Mad Scientist et les avoir laissés s'asseoir sur mon bureau pendant des mois sans être utilisés, j'ai eu le projet d'introduction parfait. J'ai commencé à regarder le temps qu'il faut pour assembler les deux, la courbe d'apprentissage du code, le coût, les pièces supplémentaires nécessaires et le faire faire ce que je veux et je me suis installé sur la carte cible. Le coût était assez égal, 15 $ plus un câble FTDI de 20 $ pour l'Arduino, 12 $ plus un programmeur USBtinyISP de 22 $. Je connaissais déjà le C++ du petit collège que je pouvais supporter et j'ai pensé que C pour les microcontrôleurs ne serait pas si mal, alors qu'à part faire clignoter une lumière pour m'assurer que j'assemblais correctement mon kit, je n'avais aucune expérience Arduino. Les deux pourraient être montés. C'était à peu près un tirage au sort, alors j'ai choisi le moins de parties des deux, le tableau cible.

Étape 2: ce dont vous avez besoin Rev 1

Ce dont vous avez besoin Rev 1
Ce dont vous avez besoin Rev 1

Coût des piècesUSBtinyISP AVR Programmer Kit (USB SpokePOV Dongle)v2.0 22,00 $https://www.adafruit.com/index.php?main_page=product_info&cPath=16&products_id=46Evil Mad Scientist labs ATmegaXX8 Mini Kits de développement 12 $En-têtes, DIP 6 broches, 5-pk $2.75https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8-ohm Mini) $2.79https://www.radioshack.com/product/index.jsp?productId=2062406SPST Interrupteurs momentanés normalement ouverts (nous avons utilisé 5) 3,49 $ (4 pack) https://www.radioshack.com/product/index.jsp?productId=2062539 Support de pile "AAA" 1,79 $https://www.radioshack.com/product/index.jsp?productId=2102735SPST Interrupteur à glissière Submini (en option pour l'interrupteur d'alimentation) 2,69 $ (2-pack)https://www.radioshack.com/product/index.jsp?productId=2062490LED et résistance (en option, si vous voulez un voyant d'alimentation) $ devrait être gratuit s'ils traînent du fil $ devrait aussi traîner de la soudure à l'argent (si cela va n'importe où près des enfants, vous ne devriez probablement pas utiliser de plomb, les parents deviennent assez bizarres à propos de ce genre de chose;)) Alcool à friction (pour re move flux) Si vous voulez des endroits pour économiser de l'argent, vous n'avez pas besoin d'obtenir des pièces de RadioShack. Je l'ai fait parce qu'ils sont proches et prévisibles.

Étape 3: Assemblage Rev 1

Assemblage Rév 1
Assemblage Rév 1
Assemblage Rév 1
Assemblage Rév 1

Assemblez vos pièces comme indiqué. Assurez-vous d'utiliser de l'alcool à friction et une brosse à flux lorsque vous avez terminé pour vous débarrasser de tout flux de soudure. Le schéma est ci-dessous pour ceux qui le préfèrent. D1 et R1 peuvent être ce que vous voulez, c'est juste un voyant d'alimentation. C1 est juste pour aider à rendre la puissance un peu plus cohérente. J'ai utilisé un 10uF. Ce schéma est le même pour les versions ultérieures, il suffit de remplacer les boutons-poussoirs par des commutateurs en tissu. dans la dernière révision, j'ai ajouté des commutateurs à PC4 et PC5 ou aux broches 27 et 28.

Étape 4: Ce dont vous avez besoin Rev 2

Ce dont vous avez besoin Rev 2
Ce dont vous avez besoin Rev 2

Donc, fondamentalement, vous remplacez les boutons Radio Shack par des boutons en tissu fabriqués à la main. Vous avez besoin de: plusieurs couleurs de tissu, ou une couleur si vous voulez que chaque note soit de la même couleur. La section matelassage de votre magasin de tissus le plus proche est le meilleur endroit pour l'obtenir à moindre coût. Les quarts de matelassage coûtent 1,50 $ et vous pouvez obtenir une tonne d'interrupteurs à partir d'un seul. Tissu conducteur, je suggère le tissu Flectron de LessEMF c'est 20 $ pour une pièce de 12 "x 54" illets pour attacher le fil au tissu. Vous pouvez vous les procurer à bas prix dans la plupart des magasins de tissus. JoAnn a l'outil et 25 pour 2 $ Vous aurez besoin d'un marteau pour cela. Fil, j'ai utilisé 22 AWG, je suggère plus petit si vous l'avez. Fusion, pour que le tissu coloré et conducteur colle ensemble. Demandez au magasin et vous pouvez probablement l'acheter par cour. Cela fonctionnerait probablement bien, même si je vous suggère de demander à quelqu'un Batting, j'ai d'abord utilisé un truc vraiment lâche, puis je suis passé à quelque chose de plus serré. Je vous suggère d'en essayer quelques-uns différents jusqu'à ce que vous trouviez ce qui fonctionne le mieux. Les tubes thermorétractables, cela a rendu le tout beaucoup plus gérable. fils thermorétractables ensemble lorsqu'ils se croisent et ils resteront beaucoup mieux.

Étape 5: Assemblage Rev 2

Assemblage Rev 2
Assemblage Rev 2
Assemblage Rev 2
Assemblage Rev 2
Assemblage Rev 2
Assemblage Rev 2

Posez le tissu multicolore l'un sur l'autre et découpez un carré, il n'a pas besoin d'être parfait. Repassez le tissu pour éliminer les plis, superposez-les à nouveau et assurez-vous que les bords correspondent tous. Coupez les bords qui ne le font pas. Coupez le haut et le bas en rond, en laissant les côtés gauche et droit droits. Vous allez inverser l'interrupteur après la couture, alors ne rendez pas les côtés arrondis trop ronds et laissez suffisamment de hauteur sur les côtés plats pour pousser l'interrupteur facilement lorsque vous avez terminé. Arrondissez le côté plat du premier et du dernier interrupteur. Dirigez-vous vers votre machine à coudre et assemblez deux des tours de manière à ce que le bon côté se fasse face et cousez une couture sur les parties plates. Une fois les hauts des boutons sont cousu, découpez des carrés dans le tissu conducteur et fusionnez un côté. Coupez le fil à la longueur et dénudez une extrémité. souder le fil autour d'un des œillets. (la soudure ne collera probablement pas à l'œillet) Découpez une petite fente dans le tissu à un coin et martelez l'œillet pour attacher le tissu et le fil. retirez le support de la fusion et fusionnez le tissu conducteur au dos du tissu coloré. Répétez l'opération pour tous les commutateurs. Pour faciliter les choses, vous pouvez thermorétracter les fils ensemble chaque fois qu'un fil passe devant le fil pour le prochain interrupteur. Obtenez ou faites un morceau de tissu de la longueur de l'interrupteur et coupez une bande de tissu conducteur de la longueur de celui-ci. Contrairement aux interrupteurs colorés, il s'agit d'une longue pièce. Ce sera ce que les boutons touchent pour établir la connexion. Découpez une petite fente et attachez-y un fil avec un œillet, comme les dessus des interrupteurs colorés. Fusionnez-le à l'arrière du tissu du bas. Cousez le haut et le bas avec le tissu conducteur vers l'extérieur, utilisez un mètre pour inverser l'ensemble une fois cousu. Découpez quelques petits trous dans le molleton, j'ai utilisé une baguette pour obtenir un cercle puis il suffit de retirer la baguette et de faire la coupe. Coupez-les en forme et insérez-les dans les interrupteurs. C'est ce qui maintient le tissu conducteur à part. Il peut être plus facile d'insérer le bâton pendant que vous inversez les commutateurs plutôt qu'après. Les trucs que j'avais l'habitude de déchirer assez pendant que je l'insère et j'ai dû obtenir un bâton différent. Enfin, accrochez les fils à la carte cible et vous êtes prêt. La longue bande inférieure sera rectifiée.

Étape 6: Ce dont vous avez besoin Rev 3

Ce dont vous avez besoin Rev 3
Ce dont vous avez besoin Rev 3

Dans la Rev 3, j'ai rendu les commutateurs indépendants du câblage. Cela a sauvé une tonne de temps. J'aime aussi beaucoup plus l'apparence du résultat final. Alors, voici les nouvelles pièces dont vous avez besoin: Snaps, Je viens de les avoir chez JoAnn. Ils sont venus avec un outil d'installation pas trop mal pour 7 $. Je suggérerais plutôt l'un des outils de pince, car je devais démonter mon outil pour installer les boutons-pression au milieu. Les coutures seraient une bonne alternative, même si elles prennent plus de temps à adhérer. Fil conducteur, Spark Fun a des trucs qui peuvent aller dans votre machine à coudre. Je devais aller très lentement dans ma machine ou le fil se casserait. Votre kilométrage peut varier

Étape 7: Assemblage Rev 3

Assemblage Rév 3
Assemblage Rév 3
Assemblage Rév 3
Assemblage Rév 3
Assemblage Rév 3
Assemblage Rév 3
Assemblage Rév 3
Assemblage Rév 3

Cette révision était bien meilleure que la précédente en termes de temps jusqu'à la construction. De plus, le fait d'avoir des interrupteurs amovibles a sauvé ma santé mentale plus d'une fois. Commencez par faire la base. C'est juste un quart de quilting plié en deux. Mettez une couche de molleton sur le dessus et cousez en laissant un trou pour l'inverser. Poussez la chose à travers le trou et vous avez essentiellement une chose de type oreiller. Je l'ai matelassé pour qu'il soit plus facile à travailler. Utilisez du fil uni et devenez fou. J'ai fait des diamants sur celui-ci, mais peut-être que la prochaine fois je mettrai un dragon à l'arrière, ou quelque chose de cool. Maintenant, passons aux interrupteurs. J'aime cette conception parce que vous pouvez en faire une tonne à l'avance et utiliser simplement ce que vous voulez. commencez par utiliser un morceau de carton, de papier ou de tissu et découpez-en une forme de poire. Utilisez-le comme guide pour couper un haut et un bas pour chaque interrupteur. J'ai coupé une couleur pour chaque bas et une couleur différente pour les hauts, mais vous pouvez être créatif et faire ce que vous voulez. Réduisez votre guide en une forme de sucette qui s'adaptera facilement à l'intérieur de l'interrupteur. Allongez le « bâton » afin qu'il puisse s'enrouler sur le bord de la « poire ». Découpez la forme du tissu de fusion et conducteur et fusionnez un côté du tissu conducteur. Retirez le support du matériau de fusion et fusionnez-le sur le haut du tissu qui sera en bas et le bas du tissu qui sera sur le dessus. Enroulez le peu supplémentaire autour du haut. Dirigez-vous vers votre machine à coudre et placez un molleton avec des trous entre le tissu supérieur et inférieur. Cousez à l'extérieur du tissu conducteur et passez par-dessus la partie "bâton" de l'interrupteur. J'ai trouvé qu'il était possible de coudre le tissu conducteur du haut vers le bas en créant un short. Il est préférable de ne pas coudre à travers le tissu conducteur. Fixez les boutons-pression et le commutateur est terminé. J'ai trouvé plus facile d'utiliser le mousqueton mâle pour toutes les connexions bas/GND et le mousqueton femelle pour tous les sommets. Cela rend tous les commutateurs interchangeables. Le circuit: Le problème avec la coupe des ronds, c'est que vous avez beaucoup de bits supplémentaires. J'ai pris mes chutes, j'ai fusionné de gros morceaux de fusion avec de gros morceaux de tissu conducteur et je les ai utilisées pour découper les plus petits rectangles que j'ai utilisés comme tampons. Disposez grossièrement vos interrupteurs et fusionnez les coussinets à la base avec suffisamment d'espace pour y coudre une ligne et avoir un claquement. Le pied de la machine à coudre que j'ai utilisé n'a pas apprécié d'être très proche du snap, alors gardez cela à l'esprit et donnez-vous un peu d'espace. Depuis que j'ai du fil conducteur qui peut aller dans ma machine à coudre, je viens de coudre une ligne d'un tampon à l'autre et inversement. Je devais y aller lentement ou le fil se cassait, mais c'était beaucoup plus rapide que la couture à la main. De plus, avec du fil conducteur sur la canette et l'aiguille, j'ai obtenu une très bonne connexion solide. Le truc s'effiloche comme un fou, mais un peu de colle artisanale ou Elmers efface tout ça. Essayez de garder les lignes bien éloignées les unes des autres et vous ne devriez pas avoir de problèmes. Assemblage final: enclenchez tous vos commutateurs, connectez la carte, chargez le code et vous avez terminé. J'ai utilisé du fil pour aller de la planche au tampon, puis j'ai simplement cousu le fil à la base à la main. Pour la prochaine version, je monterai la planche dans une boîte en plastique avec des boutons-pression pour la fixer à la base afin que les doigts inactifs ne la séparent pas.

Étape 8: Coder

Code
Code

Si vous n'avez jamais programmé de puce auparavant, c'est une tâche quelque peu intimidante. Cela n'aide pas que les outils soient floconneux et la plupart du temps, vous devez effectuer la même opération plusieurs fois. Les deux meilleures ressources que j'ai trouvées pour comprendre ce qui se passe sont la page de l'USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ et le cours accéléré sur la programmation du jouet bruyant, http:/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Ceux-ci devraient pouvoir vous aider à démarrer.

Beaucoup de gens aiment Arduino pour ce codage et il n'y a rien de mal à l'utiliser, sauf que je pense que cela ajoute beaucoup de poids à un programme normalement simple. De plus, je connaissais C et ne connais pas Arduino. Peut-être un jour, s'il y a le temps.:) Code: {{{ #include //Utilisez une broche pour activer le SPK /// Typedefs ////////// typedef unsigned char u8; int main(void) { u8 btnState0; u8 btnState1; u8 btnState2; u8 btnState3; u8 btnState4; u8 btnState5; u8 btnState6; DDRB = (1 << DDB6); //Définir SPK pour la sortie PORTD =(1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); //Définir le bouton haut PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); //Configurer la minuterie while (1) { btnState0 = ~PINC & (1 << PC5); btnState1 = ~PINC & (1 << PC4); btnState2 = ~PIND & (1 << PD0); btnState3 = ~PIND & (1 << PD1); btnState4 = ~PIND & (1 << PD2); btnState5 = ~PIND & (1 << PD3); btnState6 = ~PIND & (1 << PD4); if (btnState0) { if (TCNT2 >= 190) { PORTB ^= (1 << PD6); //Retourner la broche SPK TCNT2 = 0; } } if (btnState1) { if (TCNT2 >= 179) { PORTB ^= (1 << PD6); //Retourner la broche SPK TCNT2 = 0; } } if (btnState2) { if (TCNT2 >= 159) { PORTB ^= (1 << PD6); //Retourner la broche SPK TCNT2 = 0; } } if (btnState3) { if (TCNT2 >= 142) { PORTB ^= (1 << PD6); //Retourner la broche SPK TCNT2 = 0; } } if (btnState4) { if (TCNT2 >= 126) { PORTB ^= (1 << PD6); //Retourner la broche SPK TCNT2 = 0; } } if (btnState5) { if (TCNT2 >= 119) { PORTB ^= (1 << PD6); //Retourner la broche SPK TCNT2 = 0; } } if (btnState6) { if (TCNT2 >= 106) { PORTB ^= (1 << PD6); //Retourner la broche SPK TCNT2 = 0; } } } } }}} D'où viennent les emplacements ? Un peu de maths s'imposait. La minuterie de l'atmega 168 tourne à 1MHz. C'est beaucoup trop rapide pour l'audio, nous devons donc utiliser le prescaler /8. Ensuite, puisque nous devons retourner la broche de sortie haut puis bas pour faire 1 cycle, nous devons diviser la réponse par 2 afin de trouver le bon pas. La formule ressemble à ceci, Pas à mettre dans le code = 1000000/8)/(Fréquence cible*2) Pour A(440), ce serait 125000/880=142,045 ou 142 pour nos besoins, puisque la valeur doit être un entier. Les fréquences cibles des notes peuvent être trouvées à peu près n'importe où en ligne et sont généralement toutes les mêmes. Je veux toujours ajouter une déclaration de cas au lieu d'utiliser un tas d'Ifs et utiliser PWM pour mieux contrôler le volume et la hauteur du haut-parleur, mais pour l'instant, cela fonctionne.

Conseillé: