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

Χρονοδιακόπτες Arduino: 8 Έργα: 10 Βήματα (με εικόνες)
Χρονοδιακόπτες Arduino: 8 Έργα: 10 Βήματα (με εικόνες)

Βίντεο: Χρονοδιακόπτες Arduino: 8 Έργα: 10 Βήματα (με εικόνες)

Βίντεο: Χρονοδιακόπτες Arduino: 8 Έργα: 10 Βήματα (με εικόνες)
Βίντεο: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, Ιούνιος
Anonim
Χρονοδιακόπτες Arduino: 8 Έργα
Χρονοδιακόπτες Arduino: 8 Έργα

Το Arduino Uno ή το Nano μπορούν να παράγουν ακριβή ψηφιακά σήματα σε έξι ειδικούς ακροδέκτες χρησιμοποιώντας τους τρεις ενσωματωμένους χρονοδιακόπτες. Απαιτούν μόνο μερικές εντολές για τη ρύθμιση και χρήση κύκλων CPU για εκτέλεση!

Η χρήση των χρονομετρητών μπορεί να είναι εκφοβιστική αν ξεκινήσετε από το πλήρες φύλλο δεδομένων ATMEGA328, το οποίο έχει 90 σελίδες αφιερωμένες στην περιγραφή τους! Αρκετές ενσωματωμένες εντολές Arduino χρησιμοποιούν ήδη τα χρονόμετρα, για παράδειγμα millis (), delay (), tone (), AnalogWrite () και τη σερβο βιβλιοθήκη. Αλλά για να χρησιμοποιήσετε την πλήρη ισχύ τους, θα πρέπει να τα ρυθμίσετε μέσω των καταχωρητών. Μοιράζομαι εδώ μερικές μακροεντολές και λειτουργίες για να το κάνω πιο εύκολο και πιο διαφανές.

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

Βήμα 1: Απαιτούμενα εξαρτήματα

Απαιτούμενα εξαρτήματα
Απαιτούμενα εξαρτήματα

Για να κάνετε και τα 8 έργα θα χρειαστείτε:

  • Ένα Arduino Uno ή συμβατό
  • Μια πρωτότυπη ασπίδα με μίνι πρωτόπλακα
  • 6 καλώδια με μπλουζάκια
  • 6 κοντοί βραχυκυκλωτήρες (φτιάξτε τον εαυτό σας από σύρμα στερέωσης 10 εκατοστών από συμπαγές πυρήνα)
  • 2 κροκόδειλοι
  • 1 λευκό LED 5mm
  • μια αντίσταση 220 Ohm
  • μια αντίσταση 10kOhm
  • ένα ποτενσιόμετρο 10kOhm
  • 2 κεραμικοί πυκνωτές 1muF
  • 1 ηλεκτρολυτικός πυκνωτής 10muF
  • 2 δίοδοι, 1n4148 ή παρόμοια
  • 2 μικρο σερβοκινητήρες SG90
  • 1 ηχείο 8 Ωμ
  • 20m λεπτό (0,13mm) εμαγιέ σύρμα

Βήμα 2: Επισκόπηση των χρονιστών Arduino για δημιουργία σήματος

Το χρονόμετρο0 και το χρονόμετρο2 είναι χρονοδιακόπτες 8-bit, που σημαίνει ότι μπορούν να μετρήσουν από 0 έως 255 το πολύ. Ο χρονοδιακόπτης είναι ένας χρονοδιακόπτης 16-bit, οπότε μπορεί να μετρήσει έως και 65535. Κάθε χρονόμετρο έχει δύο σχετικές ακίδες εξόδου: 6 και 5 για χρονοδιακόπτη0, 9 και 10 για χρονοδιακόπτη1, 11 και 3 για χρονοδιακόπτη2. Ο χρονοδιακόπτης αυξάνεται σε κάθε κύκλο ρολογιού Arduino, ή με ρυθμό που μειώνεται κατά έναν συντελεστή προεπιλογής, ο οποίος είναι είτε 8, 64, 256 είτε 1024 (32 και 128 επιτρέπονται επίσης για το χρονόμετρο2). Οι χρονομετρητές μετρούν από το 0 έως το 'TOP' και μετά ξανά (γρήγορο PWM) ή προς τα κάτω (σωστή φάση PWM). Η τιμή του «TOP» καθορίζει έτσι τη συχνότητα. Οι ακίδες εξόδου μπορούν να ορίσουν, να επαναφέρουν ή να αναστρέψουν την τιμή του Καταχωρητή σύγκρισης εξόδων, έτσι ώστε αυτές να καθορίζουν τον κύκλο λειτουργίας. Μόνο ο χρονοδιακόπτης1 έχει τη δυνατότητα να ορίζει ανεξάρτητα τη συχνότητα και τους κύκλους λειτουργίας και για τις δύο ακίδες εξόδου.

Βήμα 3: Αναβοσβήνει η λυχνία LED

Image
Image
Αναβοσβήνει LED
Αναβοσβήνει LED
Αναβοσβήνει LED
Αναβοσβήνει LED

Η χαμηλότερη συχνότητα που μπορεί να επιτευχθεί με τα χρονόμετρα 8-bit είναι 16MHz/(511*1024) = 30, 6Hz. Έτσι, για να αναβοσβήνει ένα LED με 1Hz, χρειαζόμαστε χρονόμετρο1, ο οποίος μπορεί να φτάσει σε συχνότητες 256 φορές μικρότερες, 0,12 Hz.

Συνδέστε ένα LED με την άνοδο (μακρύ πόδι) στο pin9 και συνδέστε την κάθοδό του με μια αντίσταση 220 Ohm στη γείωση. Ανεβάστε τον κωδικό. Η λυχνία LED θα αναβοσβήνει ακριβώς στο 1Hz με κύκλο λειτουργίας 50%. Η λειτουργία βρόχου () είναι κενή: ο χρονοδιακόπτης αρχικοποιείται κατά τη ρύθμιση () και δεν χρειάζεται περαιτέρω προσοχή.

Βήμα 4: LED Dimmer

Image
Image
Dimmer LED
Dimmer LED
Dimmer LED
Dimmer LED

Η διαμόρφωση πλάτους παλμού είναι ένας αποτελεσματικός τρόπος ρύθμισης της έντασης ενός LED. Με έναν κατάλληλο οδηγό, είναι επίσης η προτιμώμενη μέθοδος για τη ρύθμιση της ταχύτητας των ηλεκτροκινητήρων. Δεδομένου ότι το σήμα είναι είτε 100% ενεργοποιημένο είτε 100% απενεργοποιημένο, δεν σπαταλάται ενέργεια σε μια σειρά αντίστασης. Βασικά, είναι σαν να αναβοσβήνει το LED πιο γρήγορα από ό, τι μπορεί να ακολουθήσει το μάτι. Τα 50Hz είναι καταρχήν επαρκή, αλλά μπορεί να φαίνεται να τρεμοπαίζει λίγο και όταν το LED ή τα μάτια κινούνται, μπορεί να προκύψει ένα ενοχλητικό μη συνεχές «ίχνος». Χρησιμοποιώντας μια προεπιλογή 64 με χρονοδιακόπτη 8-bit, παίρνουμε 16MHz/(64*256) = 977Hz, που ταιριάζει στον σκοπό. Επιλέγουμε το χρονόμετρο2, έτσι ώστε το χρονόμετρο1 να παραμένει διαθέσιμο για άλλες λειτουργίες και δεν παρεμβαίνουμε στη συνάρτηση χρόνου () του Arduino, η οποία χρησιμοποιεί το χρονόμετρο0.

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

Βήμα 5: Μετατροπέας ψηφιακού σε αναλογικό (DAC)

Image
Image
Μετατροπέας ψηφιακού σε αναλογικό (DAC)
Μετατροπέας ψηφιακού σε αναλογικό (DAC)
Μετατροπέας ψηφιακού σε αναλογικό (DAC)
Μετατροπέας ψηφιακού σε αναλογικό (DAC)

Το Arduino δεν έχει πραγματική αναλογική έξοδο. Ορισμένες μονάδες λαμβάνουν αναλογική τάση για τη ρύθμιση μιας παραμέτρου (αντίθεση οθόνης, κατώφλι ανίχνευσης κ.λπ.). Με έναν μόνο πυκνωτή και αντίσταση, ο χρονοδιακόπτης1 μπορεί να χρησιμοποιηθεί για τη δημιουργία αναλογικής τάσης με ανάλυση 5mV ή καλύτερη.

Ένα φίλτρο χαμηλής διέλευσης μπορεί να «υπολογίσει» το σήμα PWM σε αναλογική τάση. Ένας πυκνωτής συνδέεται μέσω μιας αντίστασης σε έναν πείρο PWM. Τα χαρακτηριστικά καθορίζονται από τη συχνότητα PWM και τις τιμές της αντίστασης και του πυκνωτή. Η ανάλυση των χρονομετρητών 8-bit θα είναι 5V/256 = 20mV, οπότε επιλέγουμε το Timer1 να λάβει ανάλυση 10-bit. Το κύκλωμα RC είναι ένα φίλτρο χαμηλής διέλευσης πρώτης τάξης και θα έχει κάποιο κυματισμό. Η χρονική κλίμακα του κυκλώματος RC θα πρέπει να είναι πολύ μεγαλύτερη από την περίοδο του σήματος PWM για να μειωθεί ο κυματισμός. Η περίοδος που λαμβάνουμε για ακρίβεια 10-bit είναι 1024/16MHz = 64mus. Εάν χρησιμοποιούμε πυκνωτή 1muF και αντίσταση 10kOhm, RC = 10ms. Ο κυματισμός κορυφής-κορυφής είναι το πολύ 5V*0.5*T/(RC) = 16mV, που θεωρείται επαρκής εδώ.

Σημειώστε ότι αυτό το DAC έχει πολύ υψηλή σύνθετη αντίσταση εξόδου (10kOhm), οπότε η τάση θα μειωθεί σημαντικά εάν τραβήξει ρεύμα. Για να αποφευχθεί αυτό, μπορεί να ρυθμιστεί με ένα opamp ή μπορεί να επιλεγεί ένας άλλος συνδυασμός R και C, για παράδειγμα 1kOhm με 10muF.

Στο παράδειγμα, η έξοδος DAC κατευθύνεται με ποτενσιόμετρο. Ένα δεύτερο ανεξάρτητο κανάλι DAC μπορεί να εκτελεστεί με το χρονόμετρο1 στην ακίδα 10.

Βήμα 6: Μετρονόμος

Image
Image
Μετρονόμος
Μετρονόμος
Μετρονόμος
Μετρονόμος

Ένας μετρονόμος βοηθά στην παρακολούθηση του ρυθμού κατά την αναπαραγωγή μουσικής. Για πολύ σύντομους παλμούς, η έξοδος του χρονοδιακόπτη arduino μπορεί να τροφοδοτηθεί απευθείας σε ένα ηχείο, το οποίο θα παράγει καθαρά ηχητικά κλικ. Με ένα ποτενσιόμετρο, η συχνότητα του ρυθμού μπορεί να ρυθμιστεί από 40 έως 208 παλμούς ανά λεπτό, σε 39 βήματα. Ο χρονοδιακόπτης 1 απαιτείται για την απαιτούμενη ακρίβεια. Η τιμή του «TOP», που καθορίζει τη συχνότητα, τροποποιείται μέσα στη συνάρτηση βρόχου () και αυτό απαιτεί προσοχή! Βλέπετε εδώ ότι η λειτουργία WGM διαφέρει από τα άλλα παραδείγματα που έχουν σταθερή συχνότητα: αυτή η λειτουργία, με το TOP που έχει οριστεί από τον καταχωρητή OCR1A, έχει διπλή προσωρινή αποθήκευση και προστατεύει από το TOP που λείπει και το μεγάλο πρόβλημα. Ωστόσο, αυτό σημαίνει ότι μπορούμε να χρησιμοποιήσουμε μόνο 1 ακίδα εξόδου.

Βήμα 7: Φάσμα ήχου

Image
Image
Φάσμα ήχου
Φάσμα ήχου
Φάσμα ήχου
Φάσμα ήχου

Οι άνθρωποι μπορούν να ακούσουν πάνω από 3 τάξεις μεγέθους ηχητικών συχνοτήτων, από 20Hz έως 20kHz Αυτό το παράδειγμα δημιουργεί το πλήρες φάσμα με ένα ποτενσιόμετρο. Ένας πυκνωτής 10muF τοποθετείται μεταξύ του ηχείου και του Arduino για να μπλοκάρει το ρεύμα DC. Ο χρονοδιακόπτης1 παράγει ένα τετράγωνο κύμα. Η λειτουργία δημιουργίας κυματομορφής εδώ είναι το PWM που είναι σωστό για φάσεις. Σε αυτήν τη λειτουργία, ο μετρητής αρχίζει να μετρά αντίστροφα όταν φτάσει στην κορυφή, πράγμα που οδηγεί σε παλμούς που έχουν καθορίσει τη μέση τιμή τους, ακόμη και όταν ο κύκλος λειτουργίας ποικίλλει. Ωστόσο, καταλήγει επίσης σε μια περίοδο που είναι (σχεδόν) διπλή, και απλώς συμβαίνει ότι με την προεπιλογή 8, ο χρονοδιακόπτης καλύπτει όλο το ακουστικό φάσμα, χωρίς να χρειάζεται να αλλάξει η προεπιλογή. Επίσης εδώ, δεδομένου ότι η τιμή του TOP αλλάζει εν κινήσει, η χρήση του OCR1A ως κορυφαίου μειώνει τις δυσλειτουργίες.

Βήμα 8: Servo Motors

Image
Image
Servo Motors
Servo Motors
Servo Motors
Servo Motors

Υπάρχουν ισχυρές σερβο βιβλιοθήκες, αλλά αν έχετε μόνο δύο σερβο για οδήγηση, θα μπορούσατε κάλλιστα να το κάνετε απευθείας με το χρονόμετρο1, και έτσι να μειώσετε την CPU, τη χρήση μνήμης και να αποφύγετε διακοπές. Το δημοφιλές σερβο SG90 λαμβάνει σήμα 50Hz και το μήκος παλμού κωδικοποιεί τη θέση. Ιδανικό για χρονόμετρο 1. Η συχνότητα είναι σταθερή, οπότε και οι δύο έξοδοι στο pin9 και στον pin 10 μπορούν να χρησιμοποιηθούν για να κατευθύνουν τα servos ανεξάρτητα.

Βήμα 9: Διπλασιαστής τάσης και μετατροπέας

Διπλασιαστής τάσης και μετατροπέας
Διπλασιαστής τάσης και μετατροπέας
Διπλασιαστής τάσης και μετατροπέας
Διπλασιαστής τάσης και μετατροπέας
Διπλασιαστής τάσης και μετατροπέας
Διπλασιαστής τάσης και μετατροπέας

Μερικές φορές το έργο σας απαιτεί τάση μεγαλύτερη από 5V ή αρνητική τάση. Μπορεί να είναι η εκτέλεση ενός MOSFET, η εκτέλεση ενός πιεζοστοιχείου, η τροφοδοσία ενός opamp ή η επαναφορά ενός EEPROM. Εάν η τρέχουσα εκτόξευση είναι αρκετά μικρή, έως ~ 5mA, μια αντλία φόρτισης μπορεί να είναι η απλούστερη λύση: μόλις 2 δίοδοι και δύο πυκνωτές συνδεδεμένοι σε παλμικό σήμα από χρονοδιακόπτη επιτρέπουν τον διπλασιασμό του arduino 5V στα 10V. Στην πράξη, υπάρχουν 2 πτώσεις διόδου, οπότε θα μοιάζει περισσότερο με 8,6V στην πράξη για το διπλό, ή -3,6V για τον μετατροπέα.

Η συχνότητα του τετραγωνικού κύματος πρέπει να είναι επαρκής για να αντλεί αρκετό φορτίο μέσω των διόδων. Ένας πυκνωτής 1muF μετακινεί 5muC αλλαγής όταν η τάση αλλάζει μεταξύ 0 και 5V, οπότε για ρεύμα 10mA, η συχνότητα πρέπει να είναι τουλάχιστον 2kHz. Στην πράξη, μια υψηλότερη συχνότητα είναι καλύτερη, καθώς μειώνει τον κυματισμό. Με το χρονόμετρο2 να μετρά από 0 έως 255 χωρίς προεπιλογή, η συχνότητα είναι 62,5kHz, το οποίο λειτουργεί καλά.

Βήμα 10: Ασύρματη μεταφορά ισχύος

Image
Image
Ασύρματη μεταφορά ισχύος
Ασύρματη μεταφορά ισχύος
Ασύρματη μεταφορά ισχύος
Ασύρματη μεταφορά ισχύος

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

Προετοιμάστε πρώτα τα πηνία. Χρησιμοποίησα ένα ρολό χαρτιού διαμέτρου 8,5 εκατοστών και σμάλτο σύρμα διαμέτρου 0,13 χιλιοστών για να κάνω 2 πηνία: το πρωτεύον με 20 στροφές, το δεύτερο με 50 στροφές. Η αυτοεπαγωγή αυτού του τύπου πηνίου με περιελίξεις Ν και ακτίνα R είναι ~ 5muH * N^2 * R. Έτσι, για N = 20 και R = 0,0425 δίνει L = 85muH, το οποίο επιβεβαιώθηκε με τον ελεγκτή εξαρτήματος. Παράγουμε ένα σήμα με συχνότητα 516kHz, με αποτέλεσμα μια σύνθετη αντίσταση 2pi*f*L = 275Ohm. Αυτό είναι αρκετά υψηλό ώστε το Arduino να μην μπαίνει σε υπερρεύματα.

Για να λειτουργήσουμε το πηνίο πιο αποτελεσματικά, θα θέλαμε να χρησιμοποιήσουμε μια πραγματική πηγή AC. Υπάρχει ένα κόλπο που μπορεί να γίνει: οι δύο έξοδοι ενός χρονοδιακόπτη μπορούν να εκτελεστούν σε αντίθετη φάση, αντιστρέφοντας μία από τις εξόδους. Για να γίνει ακόμα πιο παρόμοιο με ημιτονοειδές κύμα, χρησιμοποιούμε το Phase-correct PWM. Με αυτόν τον τρόπο, μεταξύ των ακίδων 9 και 10, η τάση εναλλάσσεται μεταξύ των δύο 0V, ακίδων 9 +5V, αμφότερων των 0V, ακίδων 10 +5V. Το εφέ φαίνεται στην εικόνα από ένα ίχνος εμβέλειας (με προεπιλογή 1024, αυτό το εύρος παιχνιδιών δεν έχει πολύ εύρος ζώνης).

Συνδέστε το κύριο πηνίο στον πείρο 9 και 10. Συνδέστε ένα LED στο δευτερεύον πηνίο. Όταν το δευτερεύον πηνίο πλησιάσει το πρωτεύον, το LED ανάβει έντονα.

Συνιστάται: