Πίνακας περιεχομένων:

Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή τον μετασχηματιστή Flyback: 6 βήματα (με εικόνες)
Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή τον μετασχηματιστή Flyback: 6 βήματα (με εικόνες)

Βίντεο: Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή τον μετασχηματιστή Flyback: 6 βήματα (με εικόνες)

Βίντεο: Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή τον μετασχηματιστή Flyback: 6 βήματα (με εικόνες)
Βίντεο: Web4U - Αναπαραγωγή τραγουδιών 2024, Ιούλιος
Anonim
Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή το Flyback Transformer
Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή το Flyback Transformer
Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή το Flyback Transformer
Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή το Flyback Transformer
Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή το Flyback Transformer
Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή το Flyback Transformer
Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή το Flyback Transformer
Αναπαραγωγή τραγουδιών (MP3) με το Arduino χρησιμοποιώντας το PWM στο ηχείο ή το Flyback Transformer

Γεια σας παιδιά, Αυτό είναι το πρώτο μου διδακτικό, ελπίζω να σας αρέσει !!

Βασικά, σε αυτό το έργο χρησιμοποίησα τη σειριακή επικοινωνία μεταξύ του Arduino και του φορητού υπολογιστή μου, για τη μετάδοση μουσικών δεδομένων από το φορητό υπολογιστή μου στο Arduino. Και χρησιμοποιώντας το Arduino TIMERS για αναπαραγωγή των δεδομένων ως σήμα PWM.

Wantedθελα να αναφέρω ότι, αυτό το έργο δεν είναι για αρχάριους !!!.

Στην πραγματικότητα, αυτό το έργο ήταν ένα από τα μεγαλύτερα έργα, επειδή πρέπει να κάνουμε πολλά πράγματα για να λειτουργήσει.

ΠΡΟΣΟΧΗ

Έκανα το δεύτερο μέρος αυτού του διδακτικού, το οποίο είναι πολύ πιο εύκολο και χρειάζεται ελάχιστα προβλήματα για να λειτουργήσει

Σύνδεσμος προς το δεύτερο μέρος (το πιο εύκολο).

Βήμα 1: Πράγματα που χρειαζόμαστε για αυτό το έργο (Απαιτήσεις)

1. Arduino Board (μπορούμε να χρησιμοποιήσουμε οποιονδήποτε πίνακα (328, 2560) δηλ. Mega, Uno, Mini κ.λπ. αλλά με συγκεκριμένες διαφορετικές ακίδες)

2. Η / Υ ή Φορητός υπολογιστής με Linux (έχω χρησιμοποιήσει το Fedora 29) Live Live USB με Linux

3. Breadboard ή Perfboard

4. Σύνδεση καλωδίων

5. TC4420 (πρόγραμμα οδήγησης Mosfet ή κάτι τέτοιο)

6. Power Mosfet (κανάλι Ν ή Ρ, παρακαλώ σύρμα τότε αναλόγως) (έχω χρησιμοποιήσει κανάλι Ν)

7. Ηχείο ή Flyback Transformer (Ναι το διαβάσατε σωστά !!)

8. Κατάλληλο τροφοδοτικό (0-12V) (έχω χρησιμοποιήσει το δικό μου τροφοδοτικό ATX)

9. Heat Sink (έχω διασωθεί από τον παλιό υπολογιστή μου)

10. Υπολογιστής με Windows και μονάδα στυλό.

Για να μάθετε τη λεπτομερή λειτουργία κάθε στοιχείου και αυτού του έργου, διαβάστε το επόμενο βήμα.

Έκανα το δεύτερο μέρος αυτού του οδηγού, το οποίο είναι πολύ πιο εύκολο και χρειάζεται ελάχιστα προβλήματα για να λειτουργήσει. Συνδέστε το Δεύτερο Μέρος (το πιο εύκολο).

Βήμα 2: Κατανόηση της Αρχής Εργασίας

Αχχχ !! το μεγαλύτερο μέρος ενός διδάσκοντος, η ανάγνωση και η συγγραφή αυτής της ενότητας είναι και τα δύο βαρετή.

Πρώτα απ 'όλα, πρέπει να λάβουμε μια Επισκόπηση, πώς λειτουργεί πραγματικά αυτό το πράγμα.

Αυτό που κάνουμε εδώ είναι ότι πρώτα μετατρέπουμε το τραγούδι MP3 σε αρχείο WAV και αυτό το αρχείο σε αρχείο κεφαλίδας C χρησιμοποιώντας το λογισμικό, το οποίο βρίσκεται στο σύνδεσμο. Αυτός ο κωδικός C περιέχει στην πραγματικότητα δείγματα δεδομένων 8-bit (γιατί 8-bit; Διαβάστε περισσότερα) που πρέπει να παίξουμε χρησιμοποιώντας το Arduino μας με σταθερό ρυθμό ή ταχύτητα, η οποία καθορίζεται σύμφωνα με το ρυθμό δειγματοληψίας.

Θεωρία ηχητικού σήματος.

Για όσους δεν γνωρίζουν τι είναι ο ρυθμός δειγματοληψίας ή ο ρυθμός μετάδοσης bit:-

Ο ρυθμός δειγματοληψίας ορίζεται ως ο αριθμός των δειγμάτων, παίζουμε σε ένα δεύτερο (συνήθως μετράται σε Hz ή KHz).

Για να μάθετε περισσότερα στη Λεπτομέρεια: -Κάντε κλικ εδώ

Οι τυπικές τιμές δειγματοληψίας είναι 44100 Hz (καλύτερη ποιότητα), 32000 Hz, 22050 Hz, κ.λπ.

που σημαίνει ότι 44100 Δείγματα χρησιμοποιούνται σε ένα δευτερόλεπτο για να δημιουργήσουν ένα κύμα αναλόγως.

Δηλαδή Κάθε Δείγμα απαιτείται να παίζεται σε σταθερό διάστημα 1/44100 = 22,67 uS.

Έπειτα έρχεται το Bit Depth ενός ηχητικού σήματος, το οποίο είναι συνήθως ένα μέτρο για το πόσο ακριβώς αναπαρίσταται ένας ήχος στον ψηφιακό ήχο. Όσο μεγαλύτερο είναι το βάθος bit, τόσο πιο ακριβής είναι ο ψηφιακός ήχος.

Αλλά με το Arduino ή οποιοδήποτε άλλο μικροελεγκτή με ρολόι 16Mhz μας επιτρέπει να χρησιμοποιούμε μόνο έως 8-bit. Θα το εξηγήσω γιατί.

Υπάρχει ένας τύπος στη σελίδα αρ. 102 στο φύλλο δεδομένων του 328p:- Φύλλο δεδομένων

Δεν θα αναφερθώ σε λεπτομέρειες, γιατί χρησιμοποιώ αυτόν τον τύπο.

συχνότητα σήματος = Σήμα ρολογιού / N x (1+TOP)

Σήμα ρολογιού = 16Mhz (πίνακας Arduino)

N = prescaler (1 είναι αξία για το έργο μας)

TOP = τιμή 0 έως 2^16 (Για μετρητή χρονοδιακόπτη 16-bit) (255 = 2^8 (8-bit) για το έργο μας)

παίρνουμε την τιμή της συχνότητας του Σήματος = 62,5 kHz

Αυτό σημαίνει ότι η συχνότητα του κύματος φορέα εξαρτάται από το Βάθος Bit.

Ας υποθέσουμε ότι αν χρησιμοποιήσουμε τιμή TOP = 2^16 = 65536 (δηλαδή βάθος bit 16 bit)

τότε παίρνουμε την τιμή της συχνότητας του Σήματος = 244 Hz (που δεν μπορούμε να χρησιμοποιήσουμε)

Εντάξει… Αυτή η τόσο μεγάλη θεωρία για το πώς λειτουργούν τα ηχητικά σήματα είναι αρκετή, οπότε πίσω στο έργο.

Ο κωδικός C που δημιουργήθηκε για ένα τραγούδι θα μπορούσε να αντιγραφεί στο Arduino και μπορεί να αναπαραχθεί, αλλά έχουμε περιορισμένη αναπαραγωγή ήχου έως 3 δευτερόλεπτα με ρυθμό δειγματοληψίας 8000 Hz. Επειδή αυτός ο κωδικός C είναι ένα αρχείο κειμένου και ως εκ τούτου δεν συμπιέζεται μάλλον αποσυμπιέζεται. Και παίρνει πάρα πολύ χώρο. (π.χ. αρχείο κώδικα C με ήχο 43 δευτερολέπτων με δείγματα 44, 1 KHz καταλαμβάνει χώρο έως 23 MB). Και το Arduino Mega μας δίνει χώρο περίπου 256 Kb.

Λοιπόν, πώς θα παίξουμε τραγούδια χρησιμοποιώντας το Arduino. Δεν είναι δυνατό. Αυτό το Instructable είναι ψεύτικο. Μην ανησυχείτε αναγνώστες, Αυτός είναι ο λόγος για τον οποίο πρέπει να χρησιμοποιήσουμε κάποιο είδος επικοινωνίας μεταξύ του Arduino σε πολύ υψηλές ταχύτητες (έως 1 Mb/s) για να στείλουμε δεδομένα ήχου στο Arduino.

Αλλά Πόση ταχύτητα ακριβώς χρειαζόμαστε, για να το κάνουμε αυτό;;

Η απάντηση είναι 44000 byte ανά δευτερόλεπτο που σημαίνει ταχύτητες άνω των 44000*8 = 325, 000 Bits/s.

Χρειαζόμαστε ένα άλλο περιφερειακό με μεγάλο αποθηκευτικό χώρο για να στείλουμε αυτά τα δεδομένα στο Arduino μας. Και αυτός θα είναι ο υπολογιστής μας με Linux (γιατί ο υπολογιστής με το Linux ??? διαβάστε περισσότερα για να μάθετε περισσότερα σχετικά.)

Ahaa … Αυτό σημαίνει ότι μπορούμε να χρησιμοποιήσουμε τη Σειριακή Επικοινωνία … Αλλά περιμένετε … η σειρά είναι δυνατή με ταχύτητες μόλις 115200 Bits/s, που σημαίνει (325000/115200 = 3) ότι, είναι τρεις φορές πιο αργές από ό, τι απαιτείται.

Όχι, φίλοι μου, δεν είναι. Θα χρησιμοποιήσουμε ταχύτητα ή Baud Rate 500, 000 Bits/s speed με καλώδιο έως 20-30 cm max., Που είναι 1,5 φορές ταχύτερο από το απαιτούμενο.

Γιατί Linux, όχι Windows;;;

Έτσι, πρέπει να στείλουμε δείγματα σε ένα διάστημα (επίσης καθορισμένο παραπάνω) 1/44100 = 22,67 uS με τον υπολογιστή μας.

Πώς μπορούμε λοιπόν να το προγραμματίσουμε να το κάνει;;

Μπορούμε να χρησιμοποιήσουμε το C ++ για να στείλουμε ένα byte δεδομένων μέσω Serial σε ένα διάστημα χρησιμοποιώντας κάποιο είδος λειτουργίας ύπνου

όπως nanosleep, Chrono, κλπ, κλπ….

για (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

ΑΛΛΑ ΟΧΙ ΔΕΝ ΛΕΙΤΟΥΡΓΕΙ ΣΤΑ WINDOWS επίσης δεν λειτούργησε με αυτόν τον τρόπο στο Linux (αλλά βρήκα έναν άλλο τρόπο που μπορείτε να δείτε στον συνημμένο κώδικα).

Επειδή δεν μπορούμε να επιτύχουμε τέτοια λεπτομέρεια χρησιμοποιώντας παράθυρα. Χρειάζεστε Linux για να επιτύχετε τέτοιες λεπτομέρειες.

Προβλήματα που βρήκα ακόμη και με Linux…

μπορούμε να επιτύχουμε τέτοια ευκρίνεια χρησιμοποιώντας Linux, αλλά δεν βρήκα καμία τέτοια λειτουργία για να κοιμηθεί το πρόγραμμά μου για 22uS.

Λειτουργίες όπως nanosleep, Chrono nanosleep κ.λπ. Αλλά χρειαζόμουν ακριβώς, ακριβώς 22 uS. Έχω ερευνήσει κάθε σελίδα στο google και πειραματίστηκα με όλες τις πιθανές λειτουργίες που είναι διαθέσιμες σε C/C ++ αλλά τίποτα δεν λειτούργησε για μένα. Στη συνέχεια, κατέληξα στη δική μου λειτουργία, που λειτούργησε για μένα ως πραγματική γοητεία.

Και ο κωδικός μου παρέχει τώρα έναν ακριβή, ακριβή ύπνο 1uS ή παραπάνω !!!

Καλύψαμε λοιπόν το δύσκολο κομμάτι και τα υπόλοιπα είναι εύκολα…

Και θέλουμε να δημιουργήσουμε ένα σήμα PWM χρησιμοποιώντας το Arduino με συγκεκριμένη συχνότητα και συχνότητα μεταφοράς κύματος. (62,5KHz (όπως υπολογίστηκε παραπάνω) για καλή ασυλία σήματος).

Έτσι, πρέπει να χρησιμοποιήσουμε τα λεγόμενα TIMERS του Arduino για να δημιουργήσουμε PWM. Παρεμπιπτόντως, δεν θα αναφερθώ σε πολλές λεπτομέρειες σχετικά με αυτό, επειδή θα βρείτε πολλά σεμινάρια σχετικά με το θέμα TIMERS, αλλά αν δεν βρείτε μερικά, τότε σχολιάστε παρακάτω θα κάνω ένα.

Έχω χρησιμοποιήσει ένα πρόγραμμα οδήγησης TC4420 Mosfet, για να αποθηκεύσω τις καρφίτσες Arduino, επειδή δεν μπορούν να μεταφέρουν τόσο πολύ ρεύμα για να οδηγούν μερικές φορές ένα MOSFET.

Έτσι, αυτή ήταν η σχεδόν θεωρία αυτού του έργου, μπορούμε να δούμε τώρα το διάγραμμα κυκλώματος.

ΠΡΟΣΟΧΗ ΠΡΟΣΟΧΗ ΠΡΟΣΟΧΗ

Στην πραγματικότητα, αυτό το έργο έγινε πολύ δύσκολο σκόπιμα (θα πω γιατί), υπάρχει μια άλλη μέθοδος που απαιτεί noPC μόνο Arduino και ηχείο στο επόμενο instructableable. Ο σύνδεσμος είναι εδώ.

*Ο κύριος σκοπός αυτού του έργου είναι να χρησιμοποιήσει τη Σειριακή Επικοινωνία και να γνωρίσει τη δύναμή του και να μάθει πώς μπορούμε να προγραμματίσουμε τον υπολογιστή μας να εκτελεί εργασίες με ακρίβεια σε τόσο λεπτά διαστήματα.*

Βήμα 3: Σχηματικό

Σχηματικός
Σχηματικός

Συνδέστε όλα τα εξαρτήματα όπως φαίνεται στο σχηματικό σχήμα. Έχετε λοιπόν εδώ δύο επιλογές:-

1. Συνδέστε ένα ηχείο (συνδεδεμένο με 5V)

2. Συνδέστε έναν μετασχηματιστή Flyback (Συνδέεται με 12V)

Έχω δοκιμάσει και τα δύο. Και τα δύο λειτουργούν αρκετά καλά.

Αποποίηση ευθυνών:-

*Σας συνιστώ να χρησιμοποιείτε το Flyback Transformer με Προφύλαξη καθώς μπορεί να είναι επικίνδυνο επειδή παράγει Υψηλές Τάσεις. Και δεν θα είμαι υπεύθυνος για οποιαδήποτε ζημιά.*

Βήμα 4: Μετατρέψτε το αρχείο MP3 σε αρχείο WAV χρησιμοποιώντας το Audacity

Μετατρέψτε MP3 σε αρχείο WAV χρησιμοποιώντας το Audacity
Μετατρέψτε MP3 σε αρχείο WAV χρησιμοποιώντας το Audacity
Μετατρέψτε το αρχείο MP3 σε αρχείο WAV χρησιμοποιώντας το Audacity
Μετατρέψτε το αρχείο MP3 σε αρχείο WAV χρησιμοποιώντας το Audacity
Μετατρέψτε το αρχείο MP3 σε αρχείο WAV χρησιμοποιώντας το Audacity
Μετατρέψτε το αρχείο MP3 σε αρχείο WAV χρησιμοποιώντας το Audacity

Έτσι, πρώτα απ 'όλα, κατεβάστε το λογισμικό

1. Θράσος, αναζήτηση και λήψη από το Google

2. Για να μετατρέψετε το αρχείο WAV σε κωδικό C, κάντε λήψη μιας εφαρμογής παραθύρου, που ονομάζεται WAVToCode

Μπορείτε να μάθετε πώς να χρησιμοποιείτε το λογισμικό WAVToCode από αυτόν τον σύνδεσμο και να το κατεβάσετε από αυτόν τον σύνδεσμο.

Θα δώσω επίσης λεπτομερή βήματα για τον τρόπο χρήσης και των δύο λογισμικών.

Παρακαλούμε δείτε τις φωτογραφίες που συνδέονται με αυτό το διδακτικό.

Σε αυτό το βήμα, θα μετατρέψουμε το MP3 σε Wav. (Ακολουθήστε τις φωτογραφίες, ο ρυθμός έργου πρέπει να είναι 44100Hz)

Στο επόμενο βήμα, θα μετατρέψουμε ένα αρχείο wav σε C Code.

Βήμα 5: WAV σε C-Code

WAV σε C-Code
WAV σε C-Code
WAV σε C-Code
WAV σε C-Code
WAV σε C-Code
WAV σε C-Code

Ακολουθήστε τις φωτογραφίες.

Δείτε τις δύο τελευταίες εικόνες, οι αλλαγές πρέπει να είναι ακριβώς ίδιες, τα κεφαλαία γράμματα πρέπει να είναι κεφαλαία και τα πεζά πρέπει να είναι μικρά, Or θα λάβετε σφάλμα σύνταξης κατά τη μεταγλώττιση.

(Μπορείτε να δείτε ότι το τραγούδι 1 λεπτού 41s πήρε 23mb χώρο.)

Αλλάξτε το όνομα και τη διάρκεια του τραγουδιού με το όνομα και τη διάρκεια του τραγουδιού σας αντίστοιχα.

Και αποθηκεύστε το αρχείο C Code.

Κάντε το σε όλα τα τραγούδια που θέλετε να παίξετε με το Arduino

Βήμα 6: Δημιουργήστε ένα τελικό αρχείο και ενεργοποιήστε το Linux σας

Δημιουργήστε ένα τελικό αρχείο και ενεργοποιήστε το Linux σας
Δημιουργήστε ένα τελικό αρχείο και ενεργοποιήστε το Linux σας
Δημιουργήστε ένα τελικό αρχείο και ενεργοποιήστε το Linux σας
Δημιουργήστε ένα τελικό αρχείο και ενεργοποιήστε το Linux σας
Δημιουργήστε ένα τελικό αρχείο και ενεργοποιήστε το Linux σας
Δημιουργήστε ένα τελικό αρχείο και ενεργοποιήστε το Linux σας

Προσθέστε όλα τα τραγούδια που έχετε μετατρέψει σε Αρχείο που παρέχεται σε αυτόν τον σύνδεσμο.

Και ακολουθήστε τις εικόνες.

Ανεβάστε τον κώδικα στο Arduino, που έχω επισυνάψει.

Θυμηθείτε τα ονόματα των αρχείων C Code.

Στο τέλος ενεργοποιήστε το Fedora Live USB ή άλλο και εγκαταστήστε τον μεταγλωττιστή gcc και, στη συνέχεια, χρησιμοποιώντας τις οδηγίες μεταγλώττισης από το φάκελο, μεταγλωττίστε το πρόγραμμα και εκτελέστε το.

Στο τέλος, θα μπορείτε να ακούτε τραγούδια από το Speaker ή το Flyback.

Σας ευχαριστούμε που διαβάσατε αυτό το διδακτικό και σχολιάστε αν σας αρέσει.

ΠΡΟΣΟΧΗ Έχω κάνει το δεύτερο μέρος αυτού του διδακτικού, το οποίο είναι πολύ πιο εύκολο και χρειάζεται ελάχιστα προβλήματα για να λειτουργήσει. Σύνδεσμος προς το δεύτερο μέρος (το πιο εύκολο)

Συνιστάται: