Table des matières:
- Étape 1: Choses dont nous avons besoin pour ce projet (Exigences)
- Étape 2: Comprendre le principe de fonctionnement
- Étape 3: Schéma
- Étape 4: Convertir un fichier MP3 en fichier WAV à l'aide d'Audacity
- Étape 5: WAV vers C-Code
- Étape 6: Créez un fichier final et lancez votre Linux
Vidéo: Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback : 6 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Bonjour gars, Il s'agit de mon premier instructable, j'espère que vous l'aimerez !!
Fondamentalement, dans ce projet, j'ai utilisé la communication série entre mon Arduino et mon ordinateur portable pour transmettre des données musicales de mon ordinateur portable à l'Arduino. Et en utilisant les MINUTEURS Arduino pour lire les données sous forme de signal PWM.
Je voulais mentionner que, ce projet n'est pas pour les débutants !!!.
En fait, ce projet a été l'un des projets les plus longs, car nous devons faire beaucoup de choses pour que cela fonctionne.
ATTENTION
J'ai fait la deuxième partie de cette instructable, ce qui est beaucoup plus facile et nécessite un minimum de problèmes pour fonctionner
Lien vers la deuxième partie (la plus simple).
Étape 1: Choses dont nous avons besoin pour ce projet (Exigences)
1. Carte Arduino (nous pouvons utiliser n'importe quelle carte (328, 2560) c'est-à-dire Mega, Uno, Mini, etc. mais avec des broches différentes spécifiques)
2. PC ou ordinateur portable avec Linux (j'ai utilisé Fedora 29) ou Live USB avec Linux
3. Planche à pain ou planche à découper
4. Fils de connexion
5. TC4420 (pilote Mosfet ou autre)
6. Power Mosfet (canal N ou P, veuillez câbler en conséquence) (j'ai utilisé le canal N)
7. Haut-parleur ou transformateur Flyback (Oui, vous avez bien lu !!)
8. Alimentation appropriée (0-12V) (j'ai utilisé ma propre alimentation ATX)
9. Dissipateur de chaleur (j'ai récupéré de mon ancien PC)
10. PC avec Windows et clé USB.
Pour connaître le fonctionnement détaillé de chaque composant et de ce projet, veuillez lire l'étape suivante.
J'ai fait la deuxième partie de cette instructable, ce qui est beaucoup plus facile et nécessite un minimum de problèmes pour fonctionner. Lien vers la deuxième partie (le plus simple).
Étape 2: Comprendre le principe de fonctionnement
Ahhh !! la partie la plus longue d'un instructable, lire et écrire cette section est à la fois ennuyeux.
Tout d'abord, nous devons avoir une vue d'ensemble, comment cette chose fonctionne réellement.
ce que nous faisons ici, c'est que nous convertissons d'abord notre chanson MP3 en un fichier WAV et ce fichier en un fichier d'en-tête C en utilisant le logiciel, qui se trouve dans le lien. Ce code C contient en fait des échantillons de données 8 bits (pourquoi 8 bits ?? lire plus loin) que nous devons jouer à l'aide de notre Arduino à un taux ou une vitesse fixe, qui est spécifié en fonction de notre taux d'échantillonnage.
Théorie d'un signal audio.
Pour ceux qui ne connaissent pas le taux d'échantillonnage ou le débit binaire:
Le taux d'échantillonnage est défini comme le nombre d'échantillons que nous jouons en une seconde (généralement mesuré en Hz ou KHz).
Pour en savoir plus en détail: - Cliquez ici
Les taux d'échantillonnage standard sont de 44100 Hz (meilleure qualité), 32000 Hz, 22050 Hz, etc.
ce qui signifie que 44100 échantillons sont utilisés en une seconde pour générer une onde en conséquence.
c'est-à-dire que chaque échantillon doit être joué à un intervalle fixe de 1/44100 = 22,67 uS.
Vient ensuite la profondeur de bits d'un signal audio, qui est généralement une mesure de la précision avec laquelle un son est représenté en audio numérique. Plus la profondeur de bits est élevée, plus le son numérique est précis.
Mais avec Arduino ou tout autre micro-contrôleur avec horloge 16Mhz nous permet de nous utiliser jusqu'à 8 bits uniquement. Je vais l'expliquer pourquoi.
Il y a une formule à la page n°102 dans la fiche technique de 328p:- Fiche technique
Je n'entrerai pas dans les détails, pourquoi j'utilise cette formule.
fréquence du signal = Signal d'horloge / N x (1+TOP)
Signal d'horloge = 16Mhz (carte Arduino)
N=prescaler (1 est la valeur pour notre projet)
TOP=valeur 0 à 2^16 (pour le compteur temporisé 16 bits) (255=2^8 (8 bits) pour notre projet)
on obtient la valeur de la fréquence de Signal = 62,5 kHz
Cela signifie que la fréquence de l'onde porteuse dépend de la profondeur de bits.
Supposons que si nous utilisons la valeur TOP = 2^16=65536 (c'est-à-dire une profondeur de bits de 16 bits)
alors nous obtenons la valeur de la fréquence de Signal = 244 Hz (que nous ne pouvons pas utiliser)
OKK… Donc cette théorie sur le fonctionnement des signaux audio est suffisante, alors revenons au projet.
Le code C généré pour un morceau peut être copié dans Arduino et peut être lu, mais nous sommes limités à une lecture audio de 3 secondes avec un taux d'échantillonnage de 8000 Hz. Parce que ce code C est un fichier texte et donc non compressé plutôt décompressé. Et cela prend trop de place. (par exemple, le fichier de code C avec un son de 43 secondes avec des échantillons de 44, 1 KHz prend de l'espace jusqu'à 23 Mo). Et notre Arduino Mega nous donne un espace d'environ 256 Ko.
Alors, comment allons-nous jouer des chansons en utilisant Arduino. Ce n'est pas possible. Ce Instructable est faux. Ne vous inquiétez pas lecteurs, C'est pourquoi nous devons utiliser une sorte de communication entre Arduino à des vitesses très élevées (jusqu'à 1 Mb/s) pour envoyer des données audio à Arduino.
Mais de quelle vitesse avons-nous exactement besoin pour faire cela ??
La réponse est 44 000 octets par seconde, ce qui signifie des vitesses supérieures à 44 000 * 8 = 325 000 bits/s.
Nous avons besoin d'un autre périphérique avec un grand stockage pour envoyer ces données à notre Arduino. Et ce sera notre PC avec Linux (pourquoi PC avec Linux ??? veuillez lire la suite pour en savoir plus.)
Ahaa… Cela signifie que nous pouvons utiliser la communication série… Mais attendez… la série est possible à des vitesses allant jusqu'à 115 200 bits/s, ce qui signifie (325 000/115 200 = 3) qu'elle est trois fois plus lente que nécessaire.
Non, mes amis, ce n'est pas le cas. Nous utiliserons une vitesse ou un débit en bauds de 500 000 bits/s avec un câble jusqu'à 20-30 cm max., ce qui est 1,5 fois plus rapide que nécessaire.
Pourquoi Linux, pas Windows ???
Nous devons donc envoyer des échantillons à un intervalle (également spécifié ci-dessus) de 1/44100 = 22,67 uS avec notre PC.
Alors, comment pouvons-nous le programmer pour le faire ??
Nous pouvons utiliser C++ pour envoyer un octet de données via Serial à un intervalle en utilisant une sorte de fonction de veille
comme nanosleep, Chrono, etc, etc….
for(int x=0;x
envoyerDonnées(x);
nanosommeil (22000); // 22uS
}
MAIS NON, ÇA NE FONCTIONNE PAS SUR WINDOWS n'a pas non plus fonctionné de cette manière sur Linux (mais j'ai trouvé un autre moyen que vous pouvez voir dans mon code ci-joint.)
Parce que nous ne pouvons pas atteindre une telle granularité en utilisant Windows. Vous avez besoin de Linux pour atteindre une telle granularité.
Problèmes que j'ai trouvés même avec Linux…
nous pouvons atteindre une telle granularité en utilisant Linux, mais je n'ai trouvé aucune fonction de ce type pour mettre mon programme en veille pendant 22uS.
Les fonctions telles que nanosleep, Chrono nanosleep, etc, etc. ne fonctionnent pas non plus, car elles ne fournissent un sommeil que de plus de 100 uS. Mais j'avais besoin d'exactement, précisément 22 uS. J'ai recherché chaque page sur Google et expérimenté toutes les fonctions possibles disponibles en C/C++ mais rien n'a fonctionné pour moi. Ensuite, j'ai créé ma propre fonction, qui a fonctionné pour moi comme un véritable charme.
Et mon code fournit maintenant un sommeil exact et précis de 1uS ou plus !!!
Nous avons donc couvert la partie difficile et le reste est facile…
Et nous voulons générer un signal PWM à l'aide d'Arduino avec une fréquence spécifique ainsi qu'une fréquence d'onde porteuse (62,5 KHz (comme calculé ci-dessus) pour une bonne immunité du signal).
Nous devons donc utiliser les soi-disant TIMERS d'Arduino pour créer PWM. D'ailleurs, je n'entrerai pas dans beaucoup de détails là-dessus, car vous trouverez de nombreux tutoriels sur le sujet des TIMERS, mais si vous n'en trouvez pas, alors commentez ci-dessous, j'en ferai un.
J'ai utilisé un pilote Mosfet TC4420 pour sauvegarder nos broches Arduino, car elles ne peuvent parfois pas fournir autant de courant pour piloter un MOSFET.
Donc, c'était presque la théorie de ce projet, nous pouvons voir maintenant le schéma du circuit.
ATTENTION ATTENTION ATTENTION
En fait, ce projet a été rendu très difficile intentionnellement (je vais dire pourquoi), il existe une autre méthode qui ne nécessite aucun PC, juste Arduino et un haut-parleur dans mon prochain instructable. Le lien est ici.
*Le but principal de ce projet est d'utiliser la communication série et de connaître sa puissance et d'apprendre comment nous pouvons programmer notre PC pour effectuer des tâches avec précision à des intervalles aussi fins.*
Étape 3: Schéma
Connectez tous les composants comme indiqué sur le schéma. Vous avez donc ici deux options:-
1. Connectez un haut-parleur (connecté avec 5V)
2. Connectez un transformateur Flyback (connecté avec 12V)
J'ai essayé les deux. Et les deux fonctionnent plutôt bien.
Clause de non-responsabilité:-
* Je recommande d'utiliser le transformateur Flyback avec précaution car il peut être dangereux car il produit des tensions élevées. Et je ne serai responsable d'aucun dommage.*
Étape 4: Convertir un fichier MP3 en fichier WAV à l'aide d'Audacity
Alors, tout d'abord, téléchargez le logiciel
1. Audacity, recherche et téléchargement depuis Google
2. Pour convertir le fichier WAV en C-Code, téléchargez une application de fenêtre, nommée WAVToCode
Vous pouvez apprendre à utiliser le logiciel WAVToCode à partir de ce lien et le télécharger à partir de ce lien.
Je vais également donner des étapes détaillées sur la façon d'utiliser les deux logiciels.
Veuillez voir les photos liées à cette instructable.
Dans cette étape, nous allons convertir MP3 en Wav. (Suivez les photos, le taux du projet doit être de 44100Hz)
Dans l'étape suivante, nous allons convertir un fichier wav en code C.
Étape 5: WAV vers C-Code
Suivez les photos.
Voir les deux dernières images, les changements doivent être exactement les mêmes, les majuscules doivent être en majuscules et les minuscules doivent être en minuscules, Ou vous obtiendrez une erreur de syntaxe lors de la compilation.
(Vous pouvez voir que la chanson de 1 min 41 s a pris 23 Mo d'espace.)
Changez le nom et la durée de la chanson avec le nom et la durée de votre chanson respectivement.
Et enregistrez le fichier de code C.
Faites cela pour tous les morceaux que vous voulez jouer avec Arduino
Étape 6: Créez un fichier final et lancez votre Linux
Ajoutez toutes vos chansons converties dans le fichier fourni dans ce lien.
Et suivez les images.
Téléchargez le code dans Arduino, que j'ai joint.
N'oubliez pas les noms de fichiers du code C (par exemple, lifestyle, dollar, weare), car nous devons mentionner exactement les mêmes noms dans notre code en respectant la casse.
À la fin, lancez votre Fedora Live USB ou autre et installez le compilateur gcc, puis en utilisant les instructions de compilation du dossier, compilez le programme et exécutez-le.
En fin de compte, vous pourrez écouter des chansons de Speaker ou Flyback.
Merci d'avoir lu cette instructable et s'il vous plaît commenter si vous l'aimez.
ATTENTIONJ'ai fait la deuxième partie de cette instructable, ce qui est beaucoup plus facile et nécessite un minimum de problèmes pour fonctionner. Lien vers la deuxième partie (la plus simple)
Conseillé:
Jouez à des jeux Nintendo sur l'Idevice avec une Wiimote gratuitement ! : 6 étapes
Jouez gratuitement à des jeux Nintendo sur l'appareil avec une Wiimote ! : Êtes-vous déjà allé sur l'App Store pour obtenir un jeu Super Nintendo, mais vous ne pouvez pas en trouver un pour jouer. Eh bien maintenant, vous pouvez jouer à ces jeux nintendo avec l'émulateur snes de cydia. Cet émulateur vous permet de jouer à des jeux Nintendo sur votre appareil, même avec
Jouez des chansons à l'aide d'un moteur pas à pas !! : 11 étapes (avec photos)
Jouer des chansons à l'aide d'un moteur pas à pas !! : Ce projet consiste à concevoir une interface dynamique simple, qui permettra d'interagir avec un moteur pas à pas de deux manières différentes. La première interface contrôlera la direction et la vitesse du moteur pas à pas grâce à l'utilisation d'un GUI simple, qui h
Simulateur de jeu SmartPhone - Jouez à des jeux Windows en utilisant l'IMU de contrôle gestuel, l'accéléromètre, le gyroscope, le magnétomètre : 5 étapes
Simulateur de jeu SmartPhone - Jouez à des jeux Windows à l'aide de l'IMU de contrôle gestuel, d'un accéléromètre, d'un gyroscope, d'un magnétomètre : soutenez ce projet : https://www.paypal.me/vslcreations en faisant un don aux codes open source & soutien au développement ultérieur
Instructions sur la réalisation de la maquette de la conception des glissières pour le levage/l'abaissement des repose-pieds montés au centre sur les fauteuils roulants électriques : 9 étapes (avec photos)
Instructions sur l'achèvement de la maquette de la conception de la glissière pour le levage/l'abaissement des repose-pieds montés au centre sur les fauteuils roulants électriques : les repose-pieds montés au centre se soulèvent pour être rangés sous le siège et s'abaissent pour être déployés. Un mécanisme de fonctionnement indépendant du rangement et du déploiement des repose-pieds n'est pas inclus dans les fauteuils roulants électriques du marché, et les utilisateurs de motomarines ont exprimé le besoin
Jouez des MP3 sur un tourne-disque de 70 ans - pas de modifications permanentes : 3 étapes
Jouez des MP3 sur un tourne-disque de 70 ans - pas de modifications permanentes : ce que j'ai fait, c'est de configurer une connexion mono entre la source MP3 ou multimédia de votre choix, votre ordinateur, votre cassette, votre talkie-walkie et le câbler directement à chaud. à l'enceinte via des pinces crocodiles. Comme toujours, tutoriel/vidéo de démonstration : S'IL VOUS PLAÎT si