Cuprins:
- Pasul 1: Conexiuni ale DS1803
- Pasul 2: Byte de comandă
- Pasul 3: Controlul DS1803
- Pasul 4: Configurați
- Pasul 5: Programul
Video: DS1803 Potențiometru digital dual cu Arduino: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
Îmi place să împărtășesc utilizarea unui contor digital DS1803 cu un Arduino. Acest IC conține două potmetre digitale care pot fi controlate printr-o interfață cu două fire, pentru aceasta folosesc biblioteca wire.h.
Acest CI poate înlocui un potmetru analogic normal. În acest fel, puteți controla, de exemplu, un amplificator sau o sursă de alimentare.
În acest instructable controlez luminozitatea a două LED-uri pentru a arăta funcționarea.
Arduino numără impulsurile unui codificator rotativ și plasează valoarea în pot variabile [0] și pot [1]. Când apăsați comutatorul de pe codificator, puteți comuta între pot [0] și pot [1].
Valoarea reală a poturilor este citită din DS1803 și plasată în variabilă potValue [0] și potValue [1] și afișată pe un LCD.
Pasul 1: Conexiuni ale DS1803
Aici puteți vedea conexiunile DS1803. H este partea înaltă a potențiometrului, L partea inferioară și W ștergătorul. SCL și SDA sunt conexiunile de autobuz.
Cu conexiunile A0, A1 și A2 puteți oferi DS1803 propria adresă, în acest fel puteți controla mai multe dispozitive printr-o singură magistrală. În exemplul meu, am dat adresa DS1803 0 prin conectarea tuturor pinilor la sol.
Pasul 2: Byte de comandă
Modul în care funcționează DS1803 poate fi utilizat în octetul de comandă. Când selectați „scrie potențiometru-0” sunt selectate ambele potențiometre, când doriți doar să reglați potențiometrul-0, trebuie doar să trimiteți primul octet de date. „Scrieți potențiometrul-1” reglați numai potmetrul-1. „Scrie la ambele potențiometre” oferă ambelor potențiometre aceeași valoare.
Pasul 3: Controlul DS1803
Octetul de control (figura 3) are un identificator de dispozitiv, acesta rămâne întotdeauna același. În exemplul meu A0, A1 și A2 sunt 0 deoarece selectăm adresul punând toți pinii A la sol. Ultimul bit R / W va fi setat la 0 sau 1 prin comanda „Wire.beginTransmission” și „Wire.requestFrom” din Arduino. În figura 5 puteți vedea întreaga telegramă. Telegrama citită este prezentată în figura 4.
Pasul 4: Configurați
Acest circuit arată cum să conectați totul. Ecranul LCD Nokia este disponibil cu conexiuni diferite, asigurați-vă că vă conectați corect. De asemenea, codificatorul rotativ diferitele sale versiuni, unele au comun pe pinul din mijloc, altele nu. Am pus o mică rețea de filtrare (rezistor de 470 Ohm cu capac 100nF) pentru a filtra semnalele de ieșire A și B ale codificatorului. Am nevoie de acest filtru, deoarece ieșirea a avut mult zgomot. Am pus, de asemenea, un temporizator de retragere în programul meu pentru a anula ceva zgomot. În rest cred că circuitul este clar. Ecranul LCD poate fi comandat prin Adafruit
Pasul 5: Programul
Pentru utilizarea magistralei cu 2 fire includ biblioteca Wire.h. Pentru a utiliza ecranul LCD, includ biblioteca Adafruit pe care o puteți descărca de la https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library, de asemenea, biblioteca Adafruit_GFX.h este disponibilă aici https:// github. com / adafruit / Adafruit-GFX-Library.
#include
#include
#include
Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Aici puteți vedea toate variabilele. Octet de control și octet de comandă așa cum s-a descris mai înainte. DeBounceTime poate fi ajustat în funcție de zgomotul de pe codificator.
byte pot [2] = {1, 1}; octet controlByte = B0101000; // 7 biți, byte commandByte = B10101001; // ultimii 2 biți este selecția potmetrului. octet potValue [2]; int i = 0; int deBounceTime = 10; // Reglați această valoare în funcție de const zgomot int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; nesemnat lung newDebounceTime = 0; nesemnat mult timp vechi; boolean apăsat = 0; număr boolean = 1;
În setare definesc pinii potriviți și pun textul static pe ecranul LCD
void setup () {Wire.begin (); Serial.begin (9600); pinMode (encoder_A, INPUT); pinMode (codificator_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = millis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (NEGRU); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
În buclă verific mai întâi dacă intervalul este mai mare de 500 ms, dacă da LCD-ul se actualizează. Dacă nu, butonul de pe codificator este bifat. Dacă este apăsat butonul de comutare, sună apelat. După aceasta, codificatorul este verificat. Dacă intrarea 0 este mică (rotația detectată) verific intrarea B, dacă intrarea B este 0 I pot crește , altele le scad. După aceasta, valoarea va fi trimisă către DS1803 prin wire.write.
bucla nulă () {
interval();
if (digitalRead (buttonPin) == 1 && (apăsat == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {apăsat = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} else {pot -; if (pot <1) {pot = 1;}} count = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // începe să transmită
Wire.write (commandByte); // selecția potmetrelor Wire.write (pot [0] * 10); // trimite primul octet de date potmeter Wire.write (pot [1] * 10); // trimite al doilea octet de date potmeter Wire.endTransmission (); // opriți transmiterea} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {apăsat = 1; if (i == 0) {i = 1;} else {i = 0;}}
Mai întâi curăț zona în care trebuie să scriu varibilele. Fac asta pentru a desena un dreptunghi în această zonă. După aceea, scriu variabilele pe ecran.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // citește primul potmeter octet potValue [1] = Wire.read (); // citiți al doilea potmetru octet display.fillRect (40, 0, 40, 45, WHITE); // ștergeți ecranul variabil pe ecranul LCD.setCursor (40, 10); display.print (potValue [0]); // scrieți valoarea 1 a potmetrului pe ecranul LCD.setCursor (40, 22); display.print (potValue [1]); // scrieți a doua valoare a potmetrului pe ecranul LCD.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// interval timer pentru a scrie date pe LCD if ((milis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Recomandat:
Arduino Control Viteza și direcția motorului DC folosind un potențiometru, afișaj OLED și butoane: 6 pași
Arduino Control Viteza și direcția motorului DC utilizând un potențiometru, afișaj OLED și butoane: În acest tutorial vom învăța cum să folosiți un driver L298N DC MOTOR CONTROL și un potențiometru pentru a controla viteza și direcția unui motor DC cu două butoane și afișarea valorii potențiometrului pe ecranul OLED. Urmăriți un videoclip demonstrativ
Controlul luminozității LED-urilor cu potențiometru cu Arduino: 3 pași
Controlul luminozității LED-urilor cu potențiometru cu Arduino: În acest proiect, vom controla luminozitatea LED-urilor folosind rezistența variabilă furnizată de potențiometru. Acesta este un proiect foarte de bază pentru un începător, dar vă va învăța multe lucruri despre potențiometru și LED-uri care sunt necesare pentru a face adva
Potentiometru digital MCP41HVX1 pentru Arduino: 10 pași (cu imagini)
Potentiometru digital MCP41HVX1 pentru Arduino: Familia de potențiometre digitale MCP41HVX1 (alias DigiPots) sunt dispozitive care imită funcția unui potențiometru analogic și sunt controlate prin SPI. Un exemplu de aplicație ar fi înlocuirea butonului de volum de pe stereo cu un DigiPot care este
Potențiometru și servo: mișcare controlată cu Arduino: 4 pași
Potențiometru și servo: mișcare controlată cu Arduino: Mai întâi trebuie să strângeți materiale relevante pentru a pune împreună acest circuit
Controlul vitezei și direcției motorului Arduino DC folosind un potențiometru și butoane: 6 pași
Arduino Control Viteza și direcția motorului DC folosind un potențiometru și butoane: În acest tutorial vom învăța cum să folosiți un driver L298N DC MOTOR CONTROL și un potențiometru pentru a controla viteza și direcția unui motor DC cu ajutorul a două butoane