Table des matières:

Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback : 6 étapes (avec photos)
Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback : 6 étapes (avec photos)

Vidéo: Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback : 6 étapes (avec photos)

Vidéo: Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback : 6 étapes (avec photos)
Vidéo: REAL RACING 3 LEAD FOOT EDITION 2024, Novembre
Anonim
Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback
Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback
Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback
Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback
Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback
Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback
Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback
Jouez des chansons (MP3) avec Arduino en utilisant PWM sur le haut-parleur ou le transformateur Flyback

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

Schématique
Schématique

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

Convertir un fichier MP3 en fichier WAV à l'aide d'Audacity
Convertir un fichier MP3 en fichier WAV à l'aide d'Audacity
Convertir un fichier MP3 en fichier WAV à l'aide d'Audacity
Convertir un fichier MP3 en fichier WAV à l'aide d'Audacity
Convertir un fichier MP3 en fichier WAV à l'aide d'Audacity
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

WAV vers C-Code
WAV vers C-Code
WAV vers C-Code
WAV vers C-Code
WAV vers C-Code
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

Créez un fichier final et lancez votre Linux
Créez un fichier final et lancez votre Linux
Créez un fichier final et lancez votre Linux
Créez un fichier final et lancez votre Linux
Créez un fichier final et lancez votre Linux
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é: