Table des matières:

Faire des chansons avec un Arduino et un moteur à courant continu : 6 étapes
Faire des chansons avec un Arduino et un moteur à courant continu : 6 étapes

Vidéo: Faire des chansons avec un Arduino et un moteur à courant continu : 6 étapes

Vidéo: Faire des chansons avec un Arduino et un moteur à courant continu : 6 étapes
Vidéo: Contrôler un moteur avec ARDUINO facilement 2024, Novembre
Anonim
Faire des chansons avec un Arduino et un moteur à courant continu
Faire des chansons avec un Arduino et un moteur à courant continu

L'autre jour, en parcourant des articles sur Arduino, j'ai repéré un projet intéressant qui utilisait des moteurs pas à pas contrôlés par Arduino pour créer de courtes mélodies. L'Arduino a utilisé une broche PWM (Pulse Width Modulation) pour faire fonctionner le moteur pas à pas à des fréquences spécifiques, correspondant à des notes de musique. En chronométrant les fréquences jouées à quel moment, une mélodie claire pouvait être entendue par le moteur pas à pas.

Cependant, lorsque je l'ai essayé moi-même, j'ai constaté que le moteur pas à pas que j'ai ne peut pas tourner assez vite pour créer un son. Au lieu de cela, j'ai utilisé un moteur à courant continu, qui est relativement simple à programmer et à connecter à un Arduino. Un circuit intégré L293D commun peut être utilisé pour piloter facilement le moteur à partir d'une broche Arduino PWM, et la fonction native tone() dans Arduino peut générer la fréquence nécessaire. À ma grande surprise, je n'ai trouvé aucun exemple ou projet utilisant un moteur à courant continu en ligne, et donc ce Instructables est ma réponse pour y remédier. Commençons!

P. S. Je suppose que vous avez déjà une certaine expérience avec l'Arduino et que vous connaissez son langage de programmation et son matériel. Vous devez savoir ce que sont les baies, ce qu'est le PWM et comment l'utiliser, et comment fonctionnent la tension et le courant, pour ne citer que quelques éléments. Si vous n'y êtes pas encore ou si vous venez de commencer Arduino, ne vous inquiétez pas: essayez cette page de démarrage du site Web officiel d'Arduino et revenez dès que vous êtes prêt.:)

Fournitures

  • Arduino (j'ai utilisé un UNO mais vous pouvez utiliser un autre Arduino si vous le souhaitez)
  • Moteur 5V DC standard, de préférence un pouvant avoir un ventilateur attaché (voir l'image dans "Assemblage du circuit"
  • CI L293D
  • Autant de boutons poussoirs que de notes dans la chanson que vous voulez jouer
  • Planche à pain
  • Fils de cavalier

Étape 1: Aperçu

Voici comment fonctionne le projet: l'Arduino générera une onde carrée à une fréquence donnée, qu'il transmettra au L293D. Le L293D est connecté à une alimentation externe qu'il utilise pour alimenter le moteur à la fréquence qui lui est donnée par l'Arduino. En empêchant l'arbre du moteur à courant continu de tourner, le moteur peut être entendu s'éteindre et s'allumer à la fréquence, ce qui produit un son ou une note. Nous pouvons programmer l'Arduino pour jouer des notes lorsque les boutons sont enfoncés, ou pour les jouer automatiquement.

Étape 2: Assemblage du circuit

Assemblage du circuit
Assemblage du circuit
Assemblage du circuit
Assemblage du circuit

Pour assembler le circuit, il suffit de suivre le schéma de Fritzing ci-dessus.

Astuce: La note du moteur est mieux entendue lorsque l'arbre ne tourne pas. J'ai mis un ventilateur sur l'arbre de mon moteur et j'ai utilisé du ruban adhésif pour maintenir le ventilateur immobile pendant que le moteur fonctionnait (voir photo). Cela empêchait l'arbre de tourner et produisait un son clair et audible. Vous devrez peut-être faire quelques ajustements pour obtenir un son propre de votre moteur.

Étape 3: Comment fonctionne le circuit

Comment fonctionne le circuit
Comment fonctionne le circuit

Le L293D est un circuit intégré utilisé pour piloter des dispositifs à haute tension et à courant élevé tels que des relais et des moteurs. L'Arduino est incapable de piloter la plupart des moteurs directement à partir de sa sortie (et l'EMF arrière du moteur peut endommager les circuits numériques sensibles de l'Arduino), donc un circuit intégré comme le L293D peut être utilisé avec une alimentation externe pour piloter facilement le moteur à courant continu. L'entrée d'un signal dans le L293D produira le même signal vers le moteur à courant continu sans risquer d'endommager l'Arduino.

Ci-dessus se trouve un schéma de brochage/fonctionnel du L293D à partir de sa fiche technique. Étant donné que nous ne conduisons qu'un seul moteur (le L293D peut en piloter 2), nous n'avons besoin que d'un côté du circuit intégré. La broche 8 est l'alimentation, les broches 4 et 5 sont GND, la broche 1 est la sortie PWM de l'Arduino et les broches 2 et 7 contrôlent la direction du moteur. Lorsque la broche 2 est HAUTE et la broche 7 est BAS, le moteur tourne dans un sens, et lorsque la broche 2 est BAS et la broche 7 est HAUT, le moteur tourne dans l'autre sens. Étant donné que nous ne nous soucions pas de la façon dont le moteur tourne, peu importe que les broches 2 et 7 soient LOW ou HIGH, tant qu'elles sont différentes l'une de l'autre. Les broches 3 et 6 se connectent au moteur. Vous pouvez tout connecter de l'autre côté (broches 9-16) si vous le souhaitez, mais sachez que les broches d'alimentation et PWM changent de place.

Remarque: si vous utilisez un Arduino qui n'a pas assez de broches pour chaque bouton, vous pouvez utiliser un réseau de résistances pour connecter tous les commutateurs à une broche analogique, comme dans ces instructables. La façon dont cela fonctionne n'entre pas dans le cadre de ce projet, mais si vous avez déjà utilisé un DAC R-2R, vous devriez le trouver familier. Notez que l'utilisation d'une broche analogique nécessitera la réécriture de grandes parties du code, car la bibliothèque de boutons ne peut pas être utilisée avec des broches analogiques.

Étape 4: Comment fonctionne le code

Pour faciliter la manipulation de tous les boutons, j'ai utilisé une bibliothèque appelée « Button » par madleech. J'ai inclus la bibliothèque en premier. Ensuite, aux lignes 8-22, j'ai défini les fréquences des notes nécessaires pour jouer Twinkle, Twinkle, Little Star (la chanson d'exemple), la broche que j'utiliserai pour piloter le L293D et les boutons.

Dans la fonction de configuration, j'ai initialisé le Serial, les boutons et mis la broche du pilote du L293D en mode de sortie.

Enfin, dans la boucle principale, j'ai vérifié si un bouton avait été enfoncé. Si c'est le cas, l'Arduino joue la note correspondante et imprime le nom de la note sur le moniteur série (utile pour savoir quelles notes sont lesquelles sur votre planche à pain). Si une note est relâchée, l'arduino arrête tout son avec noTone().

Malheureusement, en raison de la façon dont la bibliothèque est structurée, je n'ai pas pu trouver un moyen de vérifier si un bouton a été enfoncé ou relâché d'une manière moins détaillée que d'utiliser 2 conditions par note. Un autre défaut de ce code est que si vous deviez appuyer sur deux boutons simultanément puis relâcher l'un d'eux, les deux notes seraient arrêtées, car noTone() arrête la génération de toutes les notes, quelle que soit la note qui l'a déclenchée.

Étape 5: Programmation d'une chanson

Au lieu d'utiliser des boutons pour jouer des notes, vous pouvez également programmer l'Arduino pour qu'il joue automatiquement une mélodie pour vous. Voici une version modifiée du premier sketch qui joue Twinkle, Twinkle, Little Star sur le moteur. La première partie du croquis est la même - définissant les fréquences des notes et le tonePin. Nous arrivons à la nouvelle partie à bpm="100". J'ai défini les battements par minute (bpm), puis j'utilise des mathématiques pour déterminer le nombre de millisecondes par battement auquel le bpm équivaut. Pour ce faire, j'ai utilisé une technique appelée analyse dimensionnelle (ne vous inquiétez pas - ce n'est pas aussi difficile qu'il y paraît). Si vous avez déjà suivi un cours de chimie au lycée, vous avez certainement utilisé l'analyse dimensionnelle pour convertir entre les unités. Les floats() sont là pour s'assurer que rien dans l'équation n'est arrondi jusqu'à la fin pour plus de précision.

Après avoir obtenu le nombre de ms/temps, je l'ai divisé ou multiplié de manière appropriée pour trouver les valeurs en millisecondes des différentes durées de note trouvées dans la musique. Je fais ensuite un tableau de chaque note dans l'ordre chronologique, et un autre avec la durée de chaque note. Il est essentiel que l'index de chaque note corresponde à l'index de sa durée, sinon votre mélodie sonnera. J'ai mis les notes pour Twinkle, Twinkle, Little Star ici à titre d'exemple, mais vous pouvez essayer n'importe quelle chanson ou séquence de notes que vous souhaitez.

La vraie magie se produit dans la fonction de boucle. Pour chacune des notes, je joue le ton pendant un temps que j'ai spécifié dans le tableau beat_values. Au lieu d'utiliser un délai ici, ce qui empêcherait la lecture de la tonalité, j'ai enregistré le temps écoulé depuis le démarrage du programme avec la fonction millis () et je l'ai soustrait de l'heure actuelle. Lorsque le temps dépasse le temps que j'ai spécifié pour que la note dure dans le tableau beat_values, j'arrête la note. Le délai après la boucle for est là pour ajouter un espace entre les notes, garantissant que les notes suivantes avec la même fréquence ne se mélangeront pas.

Étape 6: Rétroaction

Voilà pour ce projet. S'il y a quelque chose que vous ne comprenez pas, ou si vous avez des suggestions, n'hésitez pas à me contacter. Comme il s'agit de mon premier Instructables, j'apprécierais grandement les commentaires et suggestions sur la façon d'améliorer ce contenu. À la prochaine!

Conseillé: