Πίνακας περιεχομένων:
- Βήμα 1: Συνδέσεις του DS1803
- Βήμα 2: Byte εντολών
- Βήμα 3: Έλεγχος του DS1803
- Βήμα 4: Ρύθμιση
- Βήμα 5: Το πρόγραμμα
Βίντεο: DS1803 Διπλό ψηφιακό ποτενσιόμετρο με Arduino: 5 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:38
Μου αρέσει να μοιράζομαι τη χρήση ενός ψηφιακού δοχείου μετρητή DS1803 με ένα Arduino. Αυτό το IC περιέχει δύο ψηφιακά δοχεία που μπορούν να ελεγχθούν μέσω διεπαφής δύο καλωδίων, για αυτό χρησιμοποιώ τη βιβλιοθήκη wire.h.
Αυτό το IC μπορεί να αντικαταστήσει ένα κανονικό αναλογικό μετρητή. Με αυτόν τον τρόπο μπορείτε να ελέγξετε για παράδειγμα έναν ενισχυτή ή ένα τροφοδοτικό.
Σε αυτό το οδηγό ελέγχω τη φωτεινότητα δύο LED για να δείξω τη λειτουργία.
Το arduino μετρά τους παλμούς ενός περιστροφικού κωδικοποιητή και τοποθετεί την τιμή σε μεταβλητό δοχείο [0] και δοχείο [1]. Όταν πιέζετε το διακόπτη στον κωδικοποιητή, μπορείτε να κάνετε εναλλαγή μεταξύ ποτ [0] και ποτ [1].
Η πραγματική τιμή των δοχείων διαβάζεται από το DS1803 και τοποθετείται σε μεταβλητό potValue [0] και potValue [1] και εμφανίζεται σε οθόνη LCD.
Βήμα 1: Συνδέσεις του DS1803
Εδώ μπορείτε να δείτε τις συνδέσεις του DS1803. H είναι η ψηλή πλευρά του ποτενσιόμετρου, L η χαμηλή πλευρά και W ο υαλοκαθαριστήρας. SCL και SDA είναι οι συνδέσεις διαύλου.
Με τη σύνδεση A0, A1 και A2 μπορείτε να δώσετε τη δική του διεύθυνση DS1803, με αυτόν τον τρόπο μπορείτε να ελέγχετε περισσότερες συσκευές μέσω ενός διαύλου. Στο παράδειγμά μου έχω δώσει τη διεύθυνση DS1803 0 συνδέοντας όλες τις ακίδες στη γείωση.
Βήμα 2: Byte εντολών
Ο τρόπος λειτουργίας του DS1803 μπορεί να χρησιμοποιηθεί στο byte εντολών. Όταν επιλέγετε "εγγραφή ποτενσιόμετρου-0" επιλέγονται και τα δύο ποτενσιόμετρα, όταν θέλετε μόνο να ρυθμίσετε το ποτενσιόμετρο-0, πρέπει να στείλετε μόνο το πρώτο byte δεδομένων. "Γράψτε ποτενσιόμετρο-1" ρυθμίστε μόνο το μετρητή-1. "Γράψτε και στα δύο ποτενσιόμετρα" δίνει στα δύο ποτενσιόμετρα την ίδια τιμή.
Βήμα 3: Έλεγχος του DS1803
Το byte ελέγχου (εικόνα 3) έχει ένα αναγνωριστικό συσκευής, αυτό παραμένει πάντα το ίδιο. Στο παράδειγμά μου A0, A1 και A2 είναι 0 επειδή επιλέγουμε διεύθυνση βάζοντας όλες τις ακίδες Α στη γείωση. Το τελευταίο bit R/W θα οριστεί σε 0 ή 1 με τις εντολές "Wire.beginTransmission" και "Wire.requestFrom" στο Arduino. Στο σχήμα 5 μπορείτε να δείτε ολόκληρο το τηλεγράφημα. Το τηλεγράφημα ανάγνωσης φαίνεται στο σχήμα 4.
Βήμα 4: Ρύθμιση
Αυτό το κύκλωμα δείχνει πώς να συνδέσετε τα πάντα. Το Nokia LCD διατίθεται με διαφορετικές συνδέσεις, βεβαιωθείτε ότι έχετε συνδέσει σωστά τη δική σας. Επίσης ο περιστροφικός κωδικοποιητής τις διαφορετικές εκδοχές του, άλλοι έχουν το κοινό στη μεσαία καρφίτσα άλλοι όχι. Έχω βάλει ένα μικρό δίκτυο φίλτρων (αντίσταση 470 Ohm με καπάκι 100nF) για να φιλτράρει τα σήματα εξόδου Α και Β του κωδικοποιητή. Χρειάζομαι αυτό το φίλτρο γιατί η έξοδος είχε πολύ θόρυβο. Έβαλα επίσης ένα χρονόμετρο αποκοπής στο πρόγραμμα μου για να ακυρώσω λίγο θόρυβο. Για τα υπόλοιπα νομίζω ότι το κύκλωμα είναι καθαρό. Η οθόνη LCD μπορεί να παραγγελθεί μέσω του Adafruit
Βήμα 5: Το πρόγραμμα
Για τη χρήση του διαύλου 2-καλωδίων συμπεριλαμβάνω τη βιβλιοθήκη Wire.h. Για τη χρήση της οθόνης LCD συμπεριλαμβάνω τη βιβλιοθήκη Adafruit την οποία μπορείτε να κατεβάσετε από τη διεύθυνση https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library επίσης η βιβλιοθήκη Adafruit_GFX.h είναι διαθέσιμη εδώ https:// github. com/adafruit/Adafruit-GFX-Library.
#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω
Adafruit_PCD8544 εμφάνιση = Adafruit_PCD8544 (7, 6, 5, 4, 3).
Εδώ μπορείτε να δείτε όλες τις μεταβλητές. Έλεγχος byte και εντολή byte όπως περιγράφηκε προηγουμένως. Το deBounceTime μπορεί να ρυθμιστεί ανάλογα με το θόρυβο στον κωδικοποιητή σας.
byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bits, byte commandByte = B10101001; // τα τελευταία 2 bits είναι επιλογή potmeter. byte potValue [2]; int i = 0; int deBounceTime = 10; // Προσαρμόστε αυτήν την τιμή ανάλογα με τον θόρυβο const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; ανυπόγραφο μακρύ newDebounceTime = 0; ανυπόγραφο πολύ oldTime? boolean pressed = 0; boolean count = 1;
Στη ρύθμιση ορίζω τους σωστούς πείρους και τοποθετώ το στατικό κείμενο στην οθόνη LCD
void setup () {Wire.begin (); Serial.begin (9600); pinMode (κωδικοποιητής_Α, ΕΙΣΟΔΟΣ); pinMode (κωδικοποιητής_Β, ΕΙΣΟΔΟΣ); pinMode (buttonPin, INPUT); newDebounceTime = millis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (ΜΑΥΡΟ); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
Στον βρόχο, πρώτα ελέγχω αν το διάστημα είναι μεγαλύτερο από 500ms, αν ναι, η οθόνη LCD ενημερώνεται. Εάν όχι, το κουμπί στον κωδικοποιητή είναι επιλεγμένο. Αν πατήσετε το κουμπί toggleBuffer καλέστε. Μετά από αυτό, ελέγχεται ο κωδικοποιητής. Εάν η είσοδος 0 είναι χαμηλή (ανιχνεύεται περιστροφή) ελέγχω την είσοδο Β, εάν η είσοδος Β είναι 0 I pot potment , άλλες μειώνω. Μετά από αυτό, η τιμή θα σταλεί στο DS1803 μέσω wire.write.
void loop () {
διάστημα();
if (digitalRead (buttonPin) == 1 && (pressed == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {pressed = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; εάν (δοχείο > 25) {pot = 25;}} else {pot -; αν (κατσαρόλα <1) {κατσαρόλα = 1;}} μετράει = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // ξεκινήστε τη μετάδοση
Wire.write (commandByte); // επιλογή potmeters Wire.write (δοχείο [0] * 10); // αποστολή 1ου byte δεδομένων potmeter Wire.write (δοχείο [1] * 10); // αποστολή 2ο byte δεδομένων potmeter Wire.endTransmission (); // σταματήστε τη μετάδοση} αλλιώς αν (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {pressed = 1; εάν (i == 0) {i = 1;} άλλο {i = 0;}}
Αρχικά καθαρίζω την περιοχή όπου πρέπει να γράψω τις μεταβλητές. Το κάνω για να σχεδιάσω ένα ορθογώνιο σε αυτήν την περιοχή. Μετά γράφω τις μεταβλητές στην οθόνη.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // διαβάστε το πρώτο potmeter byte potValue [1] = Wire.read (); // διαβάστε το δεύτερο byte μετρητή byte display.fillRect (40, 0, 40, 45, ΛΕΥΚΟ); // διαγραφή μεταβλητής οθόνης στην οθόνη LCD.setCursor (40, 10); display.print (potValue [0]); // γράψτε την πρώτη τιμή του μετρητή στην οθόνη LCD.setCursor (40, 22); display.print (potValue [1]); // γράψτε την τιμή 2ου μετρητή στην οθόνη LCD.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// interval timer για εγγραφή δεδομένων σε LCD εάν ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Συνιστάται:
Κάνοντας το δικό σας (πριόνι) Διπλό φωτιστικό LED: 4 βήματα
Κάνοντας το δικό σας (πριόνι) διπλό φωτιστικό LED: Σήμερα, θα σας δείξω πώς να φτιάξετε το Double LED Dimmer με μόνο 555timer chips μαζί με κοινά εξαρτήματα. Παρόμοιο με ένα ενιαίο MOSFET/Transistor (Είτε PNP, NPN, P-channel, είτε ή N-Channel) που ρυθμίζει τη φωτεινότητα ενός LED, αυτό χρησιμοποιεί δύο MOS
Διπλό εφέ καθυστέρησης: 10 βήματα (με εικόνες)
Double Delay Effect: SUPER απλό εφέ διπλής καθυστέρησης! Ο στόχος μου ήταν να χτίσω την πιο συμπαγή, πιο μεγάλη καθυστέρηση, χρησιμοποιώντας μόνο μια χούφτα εξαρτημάτων. Το αποτέλεσμα είναι μια μηχανή θορύβου χωρίς περιβλήματα, εύκολα τροποποιήσιμη με έναν εκπληκτικά τεράστιο ήχο. ΕΝΗΜΕΡΩΣΗ: Λεπτομέρειες
Φωτοευαίσθητο διπλό αναβοσβήσιμο LED: 13 βήματα
Light Sensitive Double LED Blinker: Γεια σου φίλε, σήμερα θα κάνω ένα κύκλωμα Light Sensitive Double LED Blinker. Αυτό σημαίνει ότι οι λυχνίες LED θα αναβοσβήνουν εναλλάξ όταν δεν πέφτει φως στο LDR και οι λυχνίες LED θα ανάβουν συνεχώς όταν το φως είναι αναμμένο LDR. Ας ξεκινήσουμε
Πώς να κάνετε διπλό κύκλωμα αναλαμπής LED σε PCB: 11 βήματα
Πώς να φτιάξετε διπλό κύκλωμα αναλαμπής LED σε PCB: Γεια σου φίλε, σήμερα θα κάνω ένα κύκλωμα έργου διπλού αναβοσβήματος LED. Αυτό το κύκλωμα κατασκευάζεται από το χρονόμετρο IC 555. Ας ξεκινήσουμε
Arduino IDE με διπλό πυρήνα: Τηλεχειριστήριο: 8 βήματα
Arduino IDE με διπλό πυρήνα: Τηλεχειριστήριο: Αυτό το βίντεο έχει να κάνει με το "multi". Έχουμε να κάνουμε με πολλαπλές εργασίες, πολλαπλούς πυρήνες και πολλαπλά στοιχεία. Πριν από λίγο καιρό, έφτιαξα ένα τηλεχειριστήριο με δύο ESP: έναν πελάτη και ένα σημείο πρόσβασης. Με βάση αυτό, σήμερα θα δημιουργήσουμε έναν διακομιστή πολλαπλών πελατών. Αυτό σημαίνει ότι