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

Δημιουργία τραγουδιών με Arduino και DC Motor: 6 βήματα
Δημιουργία τραγουδιών με Arduino και DC Motor: 6 βήματα

Βίντεο: Δημιουργία τραγουδιών με Arduino και DC Motor: 6 βήματα

Βίντεο: Δημιουργία τραγουδιών με Arduino και DC Motor: 6 βήματα
Βίντεο: 1o Φεστιβάλ Εκπαιδευτικής Ρομποτικής Τρικάλων 2024, Σεπτέμβριος
Anonim
Δημιουργία τραγουδιών με Arduino και DC Motor
Δημιουργία τραγουδιών με Arduino και DC Motor

Τις προάλλες, κάνοντας αναζήτηση σε κάποια άρθρα για το Arduino, εντόπισα ένα ενδιαφέρον έργο που χρησιμοποίησε βηματικά μοτέρ που ελέγχονταν από το Arduino για να δημιουργήσει μικρές μελωδίες. Το Arduino χρησιμοποίησε έναν πείρο PWM (Pulse Width Modulation) για να τρέξει το βηματικό μοτέρ σε συγκεκριμένες συχνότητες, που αντιστοιχούν σε μουσικές νότες. Με το χρονοδιάγραμμα των συχνοτήτων που έπαιζαν πότε, ακούστηκε μια καθαρή μελωδία από το βηματικό μοτέρ.

Ωστόσο, όταν το δοκίμασα μόνος μου, διαπίστωσα ότι ο βηματικός κινητήρας που έχω δεν μπορεί να περιστραφεί αρκετά γρήγορα για να δημιουργήσει έναν τόνο. Αντ 'αυτού, χρησιμοποίησα έναν κινητήρα DC, ο οποίος είναι σχετικά απλός στον προγραμματισμό και τη σύνδεση σε ένα Arduino. Ένα κοινό L293D IC μπορεί να χρησιμοποιηθεί για την εύκολη οδήγηση του κινητήρα από έναν πείρο Arduino PWM και η λειτουργία εγγενών τόνων () στο Arduino μπορεί να δημιουργήσει την απαραίτητη συχνότητα. Προς έκπληξή μου, δεν βρήκα παραδείγματα ή έργα που χρησιμοποιούν έναν κινητήρα DC στο διαδίκτυο, και έτσι αυτό το Instructables είναι η απάντησή μου για να το διορθώσω. Ας αρχίσουμε!

ΥΣΤΕΡΟΓΡΑΦΟ. Υποθέτω ότι έχετε ήδη κάποια εμπειρία με το Arduino και είστε εξοικειωμένοι με τη γλώσσα προγραμματισμού και το υλικό του. Θα πρέπει να γνωρίζετε τι είναι οι πίνακες, τι είναι το PWM και πώς να το χρησιμοποιήσετε και πώς λειτουργεί η τάση και το ρεύμα, για να αναφέρουμε μερικά πράγματα. Εάν δεν είστε ακόμα εκεί ή μόλις ξεκινήσατε το Arduino, μην ανησυχείτε: δοκιμάστε αυτήν τη σελίδα έναρξης από τον επίσημο ιστότοπο Arduino και επιστρέψτε όποτε είστε έτοιμοι.:)

Προμήθειες

  • Arduino (χρησιμοποίησα UNO αλλά μπορείτε να χρησιμοποιήσετε διαφορετικό Arduino αν θέλετε)
  • Τυπικός κινητήρας 5V DC, κατά προτίμηση ένας με δυνατότητα τοποθέτησης ανεμιστήρα (δείτε την εικόνα στην ενότητα "Συναρμολόγηση του κυκλώματος"
  • L293D IC
  • Τόσα πλήκτρα όσες σημειώσεις στο τραγούδι που θέλετε να παίξετε
  • Breadboard
  • Jumper Wires

Βήμα 1: Επισκόπηση

Δείτε πώς λειτουργεί το έργο: το Arduino θα δημιουργήσει ένα τετράγωνο κύμα σε μια δεδομένη συχνότητα, το οποίο θα εξάγει στο L293D. Το L293D είναι συνδεδεμένο με μια εξωτερική τροφοδοσία που χρησιμοποιεί για να τροφοδοτεί τον κινητήρα με τη συχνότητα που δίνει το Arduino. Αποτρέποντας τον άξονα του κινητήρα DC να περιστρέφεται, ο κινητήρας ακούγεται να σβήνει και να ενεργοποιείται στη συχνότητα, η οποία παράγει έναν τόνο ή νότα. Μπορούμε να προγραμματίσουμε το Arduino να παίζει σημειώσεις όταν πατάτε τα κουμπιά ή να τα παίζει αυτόματα.

Βήμα 2: Συναρμολόγηση του κυκλώματος

Συναρμολόγηση του Κυκλώματος
Συναρμολόγηση του Κυκλώματος
Συναρμολόγηση του Κυκλώματος
Συναρμολόγηση του Κυκλώματος

Για να συναρμολογήσετε το κύκλωμα, απλώς ακολουθήστε το παραπάνω διάγραμμα Fritzing.

Συμβουλή: Η σημείωση από τον κινητήρα ακούγεται καλύτερα όταν ο άξονας δεν περιστρέφεται. Έβαλα έναν ανεμιστήρα στον άξονα του κινητήρα μου και χρησιμοποίησα κάποια κολλητική ταινία για να κρατήσω τον ανεμιστήρα ακίνητο ενώ ο κινητήρας λειτουργούσε (δείτε την εικόνα). Αυτό απέτρεψε την περιστροφή του άξονα και παρήγαγε έναν καθαρό, ηχητικό τόνο. Σως χρειαστεί να κάνετε κάποιες τροποποιήσεις για να πάρετε έναν καθαρό τόνο από τον κινητήρα σας.

Βήμα 3: Πώς λειτουργεί το κύκλωμα

Πώς λειτουργεί το κύκλωμα
Πώς λειτουργεί το κύκλωμα

Το L293D είναι ένα IC που χρησιμοποιείται για την οδήγηση συσκευών σχετικά υψηλής τάσης, υψηλού ρεύματος, όπως ρελέ και κινητήρες. Το Arduino δεν μπορεί να οδηγήσει τους περισσότερους κινητήρες απευθείας από την έξοδό του (και το πίσω EMF από τον κινητήρα μπορεί να βλάψει το ευαίσθητο ψηφιακό κύκλωμα του Arduino), οπότε ένα IC όπως το L293D μπορεί να χρησιμοποιηθεί με εξωτερική τροφοδοσία για εύκολη οδήγηση του κινητήρα DC. Η εισαγωγή σήματος στο L293D θα εξάγει το ίδιο σήμα στον κινητήρα DC χωρίς κίνδυνο ζημιάς στο Arduino.

Πάνω είναι ένα pinout/λειτουργικό σχήμα του L293D από το φύλλο δεδομένων του. Δεδομένου ότι οδηγούμε μόνο 1 κινητήρα (το L293D μπορεί να οδηγήσει 2), χρειαζόμαστε μόνο τη μία πλευρά του IC. Ο πείρος 8 είναι ισχύς, οι ακίδες 4 και 5 είναι GND, ο ακροδέκτης 1 είναι η έξοδος PWM από το Arduino και οι ακίδες 2 και 7 ελέγχουν την κατεύθυνση του κινητήρα. Όταν ο πείρος 2 είναι Υ HIGHΟΣ και ο πείρος 7 είναι ΧΑΜΗΛΟΣ, ο κινητήρας περιστρέφεται προς τη μία κατεύθυνση και όταν ο πείρος 2 είναι ΧΑΜΗΛΟΣ και ο πείρος 7 είναι Υ HIGHΟΣ, ο κινητήρας περιστρέφεται από την άλλη πλευρά. Δεδομένου ότι δεν μας ενδιαφέρει με ποιον τρόπο περιστρέφεται ο κινητήρας, δεν έχει σημασία αν οι ακίδες 2 και 7 είναι χαμηλές ή υψηλές, αρκεί να διαφέρουν μεταξύ τους. Οι ακίδες 3 και 6 συνδέονται με τον κινητήρα. Μπορείτε να συνδέσετε τα πάντα στην άλλη πλευρά (καρφίτσες 9-16) αν θέλετε, αλλά να γνωρίζετε ότι οι ακίδες τροφοδοσίας και PWM αλλάζουν θέσεις.

Σημείωση: Εάν χρησιμοποιείτε ένα Arduino που δεν διαθέτει αρκετές ακίδες για κάθε κουμπί, μπορείτε να χρησιμοποιήσετε ένα δίκτυο αντιστάσεων για να συνδέσετε όλους τους διακόπτες σε έναν αναλογικό πείρο, όπως σε αυτά τα εγχειρίδια. Το πώς λειτουργεί αυτό είναι εκτός του πεδίου αυτού του έργου, αλλά αν έχετε χρησιμοποιήσει ποτέ ένα R-2R DAC θα πρέπει να το βρείτε οικείο. Λάβετε υπόψη ότι η χρήση ενός αναλογικού πείρου θα απαιτήσει την επανεγγραφή μεγάλων τμημάτων του κώδικα, καθώς η βιβλιοθήκη κουμπιών δεν μπορεί να χρησιμοποιηθεί με αναλογικές ακίδες.

Βήμα 4: Πώς λειτουργεί ο κώδικας

Για να διευκολύνω τον χειρισμό όλων των κουμπιών, χρησιμοποίησα μια βιβλιοθήκη που ονομάζεται "Button" του madleech. Πρώτα απ 'όλα συμπεριέλαβα τη βιβλιοθήκη. Στη συνέχεια, στις γραμμές 8-22, καθόρισα τις συχνότητες για τις νότες που απαιτούνται για την αναπαραγωγή Twinkle, Twinkle, Little Star (το παράδειγμα του τραγουδιού), την καρφίτσα που θα χρησιμοποιήσω για την οδήγηση του L293D και τα κουμπιά.

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

Τέλος, στον κύριο βρόχο έλεγξα αν έχει πατηθεί κάποιο κουμπί. Εάν έχει, το Arduino αναπαράγει την αντίστοιχη νότα και εκτυπώνει το όνομα της σημείωσης στο Serial Monitor (χρήσιμο για να γνωρίζετε ποιες σημειώσεις είναι ποιες στο ψωμί σας). Εάν κυκλοφορήσει μια νότα, το arduino σταματά κάθε ήχο με noTone ().

Δυστυχώς, λόγω του τρόπου δομής της βιβλιοθήκης, δεν μπόρεσα να βρω έναν τρόπο να ελέγξω εάν ένα κουμπί έχει πατηθεί ή απελευθερωθεί με λιγότερο ρητό τρόπο από ό, τι η χρήση 2 όρων ανά νότα. Ένα άλλο ελάττωμα με αυτόν τον κώδικα είναι ότι αν πατήσετε δύο κουμπιά ταυτόχρονα και στη συνέχεια αφήσετε ένα από αυτά, και οι δύο σημειώσεις θα σταματήσουν, επειδή το noTone () σταματά να δημιουργούνται σημειώσεις ανεξάρτητα από τη σημείωση που την ενεργοποίησε.

Βήμα 5: Προγραμματισμός τραγουδιού

Αντί να χρησιμοποιείτε κουμπιά για αναπαραγωγή σημειώσεων, μπορείτε επίσης να προγραμματίσετε το Arduino να παίζει αυτόματα μια μελωδία για εσάς. Εδώ είναι μια τροποποιημένη έκδοση του πρώτου σκίτσου που παίζει Twinkle, Twinkle, Little Star στον κινητήρα. Το πρώτο μέρος του σκίτσου είναι το ίδιο - καθορίζοντας τις συχνότητες των σημειώσεων και το tonePin. Φτάνουμε στο νέο μέρος στο bpm = "100". Ρυθμίζω τους ρυθμούς ανά λεπτό (bpm) και στη συνέχεια χρησιμοποιώ κάποια μαθηματικά για να υπολογίσω τον αριθμό των χιλιοστών του δευτερολέπτου ανά ρυθμό που ισοδυναμεί το bpm. Για να το κάνω αυτό, χρησιμοποίησα μια τεχνική που ονομάζεται ανάλυση διαστάσεων (μην ανησυχείτε - δεν είναι τόσο δύσκολο όσο ακούγεται). Εάν έχετε παρακολουθήσει ποτέ ένα μάθημα χημείας γυμνασίου, σίγουρα χρησιμοποιήσατε ανάλυση διαστάσεων για να κάνετε μετατροπή μεταξύ μονάδων. Οι πλωτήρες () είναι εκεί για να διασφαλιστεί ότι τίποτα στην εξίσωση δεν στρογγυλοποιείται μέχρι το τέλος για ακρίβεια.

Αφού έχουμε τον αριθμό των ms/beat, τον διαιρούσα ή τον πολλαπλασιάζω κατάλληλα για να βρω τις τιμές χιλιοστών του δευτερολέπτου των διαφορετικών διάρκειας των νότες που βρίσκονται στη μουσική. Στη συνέχεια, δημιουργώ μια σειρά από κάθε νότα με χρονολογική σειρά και μια άλλη με τη διάρκεια κάθε νότας. Είναι σημαντικό το ευρετήριο κάθε νότας να ταιριάζει με το δείκτη της διάρκειάς του, διαφορετικά, η μελωδία σας θα ηχήσει. Έβαλα τις σημειώσεις για Twinkle, Twinkle, Little Star εδώ ως παράδειγμα, αλλά μπορείτε να δοκιμάσετε οποιοδήποτε τραγούδι ή ακολουθία νότες θέλετε.

Η πραγματική μαγεία συμβαίνει στη λειτουργία βρόχου. Για κάθε μια από τις νότες, παίζω τον τόνο για ένα χρονικό διάστημα που καθορίστηκα στον πίνακα beat_values. Αντί να χρησιμοποιήσω καθυστέρηση εδώ, που θα είχε ως αποτέλεσμα να μην αναπαράγεται ο τόνος, κατέγραψα την ώρα από την έναρξη του προγράμματος με τη συνάρτηση millis () και τον αφαιρώ από την τρέχουσα ώρα. Όταν ο χρόνος υπερβεί τον χρόνο που προσδιόρισα τη σημείωση για να διαρκέσει στον πίνακα beat_values, σταματάω τη σημείωση. Η καθυστέρηση μετά τον βρόχο for υπάρχει για να προσθέσει ένα κενό μεταξύ των σημειώσεων, διασφαλίζοντας ότι οι επόμενες σημειώσεις με την ίδια συχνότητα δεν θα αναμειχθούν μεταξύ τους.

Βήμα 6: Ανατροφοδότηση

Αυτά για αυτό το έργο. Εάν υπάρχει κάτι που δεν καταλαβαίνετε ή εάν έχετε οποιεσδήποτε προτάσεις, μη διστάσετε να επικοινωνήσετε μαζί μου. Δεδομένου ότι αυτό είναι το πρώτο μου Instructables, θα εκτιμούσα πολύ τα σχόλια και τις προτάσεις σχετικά με τον τρόπο βελτίωσης αυτού του περιεχομένου. Θα σε δω την επόμενη φορά!

Συνιστάται: