Σε αυτό το έργο θα αναπτύξουμε μια γεννήτρια τόνων χρησιμοποιώντας το Arduino Uno. Θα έχουμε κουμπιά διασυνδεμένα με το UNO και καθένα από αυτά δημιουργεί διαφορετική ένταση τόνου. Η συχνότητα του τόνου που παράγεται από το UNO είναι ίδια σε κάθε εσωτερικό. Είναι η ένταση του ήχου που αλλάζει με κάθε πάτημα. Αυτός είναι ένας από τους ευκολότερους τρόπους για να φτιάξετε πιάνο με το Arduino Uno. Ελέγξτε επίσης αυτό το κύκλωμα πιάνου.
Οι ήχοι μπορούν να αυξηθούν έως και 20. Αυτό δίνει την καλύτερη παραλλαγή τόνου και πολύ πιο ομαλές αλλαγές. Η ένταση του τόνου αλλάζει από PWM (Pulse Width Modulation). Ένα παράδειγμα PWM φαίνεται στο παρακάτω γράφημα.
Στο PWM, η συχνότητα του σήματος ή η χρονική περίοδος του σήματος (Ton + Toff) είναι πάντα σταθερή. Αλλάζει μόνο ο λόγος TURN ON και TURN OFF. Για παράδειγμα, στο δεύτερο γράφημα στο παραπάνω σχήμα, ο χρόνος TURN ON είναι 80% και ο χρόνος TURN OFF είναι 20% της πλήρους διάρκειας.
Στο τρίτο γράφημα, ο χρόνος TURN ON είναι 50% και ο χρόνος TURN OFF είναι 50% της πλήρους διάρκειας. Έτσι, στην πρώτη περίπτωση έχουμε λόγο δασμού 80% και στη δεύτερη περίπτωση έχουμε λόγο δασμού 20%.
Με αυτήν την αλλαγή στην αναλογία λειτουργίας έχουμε μια αλλαγή σε Vrms (τιμή Root Mean Square of Voltage), όταν αυτή η τάση δίνεται στον βομβητή, κάνει διαφορετικό θόρυβο κάθε φορά που υπάρχει αλλαγή στην αναλογία λειτουργίας.
Θα προγραμματίσουμε το UNO για να παρέχουμε σήμα PWM διαφορετικής αναλογίας λειτουργίας για κάθε ένα από τα κουμπιά. Έχουμε λοιπόν μια γεννήτρια τόνων που δημιουργεί διαφορετικό τόνο με κάθε πάτημα του κουμπιού.
Απαιτούμενα στοιχεία
Υλικό: Arduino Uno, Τροφοδοσία (5v), 1000 uF πυκνωτής, 100 nF πυκνωτής, Buzzer, κουμπιά (8 τεμάχια).
Λογισμικό: AURDINO nightly ή Atmel studio 6.2
Διάγραμμα κυκλώματος και εξήγηση εργασίας
Το κύκλωμα για τη γεννήτρια τόνων φαίνεται στο παρακάτω διάγραμμα.
Για να φιλτράρετε τον θόρυβο από την τάση τροφοδοσίας οι πυκνωτές τοποθετούνται στους ακροδέκτες όπως φαίνεται στο διάγραμμα.
Το PWM του Arduino Uno μπορεί να επιτευχθεί σε οποιαδήποτε από τις καρφίτσες που συμβολίζονται ως «~» στον πίνακα PCB. Υπάρχουν έξι κανάλια PWM στο UNO. Ωστόσο, δεν μπορούμε να χρησιμοποιήσουμε τις καρφίτσες PWM που έχουν δημιουργηθεί πάνω από τους κωδικούς PIN 0-7, καθώς οι κωδικοί PIN προτιμώνται για τη διεπαφή κουμπιών.
Υπάρχει λόγος για την επιλογή PINS 0-7 ως εισόδους, επειδή οι PINS 0-7 αντιπροσωπεύουν το PORTD του μικροελεγκτή. Έτσι, στην τελευταία περίπτωση μπορούμε να πάρουμε το πλήρες BYTE του PORTD.
Τώρα για να λάβουμε διαφορετική αναλογία λειτουργίας PWM, θα χρησιμοποιήσουμε την ακόλουθη εντολή.
analogWrite (9, ΑΞΙΑ); |
Από την παραπάνω συνθήκη μπορούμε να πάρουμε απευθείας το σήμα PWM στον αντίστοιχο πείρο. Η πρώτη παράμετρος σε αγκύλες είναι για την επιλογή του αριθμού pin του σήματος PWM. Η δεύτερη παράμετρος είναι για το λόγο εργασίας γραφής.
Η τιμή PWM του Arduino Uno μπορεί να αλλάξει από 0 σε 255. Με το "0" ως το χαμηλότερο στο "255" ως το υψηλότερο. Με αναλογία 255 ως καθήκον, θα έχουμε 5V στο PIN9. Εάν ο λόγος λειτουργίας είναι 125, θα λάβουμε 2,5V στο PIN9. Θα διαιρέσουμε την αναλογία λειτουργίας 0-250 σε 8 κουμπιά που διασυνδέονται στο PORTD του UNO. Εδώ επιλέγω 25 προσαυξήσεις για κάθε κουμπί, αλλά είναι της επιλογής σας.
Με αυτό θα έχουμε ένα σήμα PWM του οποίου ο λόγος λειτουργίας αλλάζει με κάθε κουμπί. Αυτό δίνεται στον βομβητή, έχουμε τόνο γεννήτρια. Η εργασία αυτής της γεννήτριας τόνου με βάση το Arduino εξηγείται βήμα προς βήμα στον κώδικα C που δίνεται παρακάτω.