Sadržaj:
- Korak 1: Spajanje DS1803
- Korak 2: Naredbeni bajt
- Korak 3: Upravljanje DS1803
- Korak 4: Postavite
- Korak 5: Program
Video: DS1803 Dvostruki digitalni potenciometar s Arduinom: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Volim podijeliti korištenje DS1803 digitalnog mjerača udaljenosti s Arduinom. Ovaj IC sadrži dva digitalna potmetra koji se mogu kontrolirati putem dvožičnog sučelja, za to koristim knjižnicu wire.h.
Ovaj IC može zamijeniti uobičajeni analogni mjerač udaljenosti. Na taj način možete kontrolirati, na primjer, pojačalo ili napajanje.
U ovom uputstvu kontroliram svjetlinu dvije LED diode kako bih pokazao rad.
Arduino broji impulse rotacijskog davača i postavlja vrijednost u promjenjivi lonac [0] i lonac [1]. Kada pritisnete prekidač na davaču, možete se prebacivati između lonca [0] i lonca [1].
Stvarna vrijednost lonaca očitana je s DS1803 i stavljena u promjenjivu potValue [0] i potValue [1] te prikazana na LCD -u.
Korak 1: Spajanje DS1803
Ovdje možete vidjeti veze DS1803. H je visoka strana potenciometra, L niska strana i W brisač. SCL i SDA su autobusne veze.
S priključcima A0, A1 i A2 DS1803 možete dati vlastitu adresu, na taj način možete kontrolirati više uređaja putem jedne sabirnice. U svom primjeru dao sam DS1803 adres 0 povezivanjem svih pinova na tlo.
Korak 2: Naredbeni bajt
Način rada DS1803 može se koristiti u naredbenom bajtu. Kad odaberete "upiši potenciometar-0", odabrani su oba potenciometra, a samo želiš podesiti potenciometar-0, moraš poslati samo prvi bajt podataka. "Zapisivanje potenciometra-1" podesite samo mjerač-1. "Zapisi na oba potenciometra" daje oba potenciometra istu vrijednost.
Korak 3: Upravljanje DS1803
Kontrolni bajt (slika 3) ima identifikator uređaja, koji ostaje uvijek isti. U mom primjeru A0, A1 i A2 su 0 jer odabiremo adrese stavljajući sve A-pinove na zemlju. Zadnji bit R/W bit će postavljen na 0 ili 1 naredbom "Wire.beginTransmission" i "Wire.requestFrom" u Arduinu. Na slici 5 možete vidjeti cijeli brzojav. Pročitani telegram prikazan je na slici 4.
Korak 4: Postavite
Ovaj krug pokazuje kako spojiti sve. Nokijin LCD zaslon dostupan je s različitim priključcima, pazite da pravilno povežete svoj. Također rotacijski koder njegove različite inačice, neke imaju zajedničko na srednjem pinu, druge nemaju. Stavio sam malu mrežu filtera (otpornik od 470 Ohma sa 100nF kapom) za filtriranje izlaznih signala A i B davača. Trebam ovaj filter jer je izlaz imao mnogo buke. Također sam u svoj program stavio tajmer za debounce za poništavanje neke buke. U ostalom mislim da je sklop jasan. LCD se može naručiti putem Adafruit
Korak 5: Program
Za korištenje 2-žične sabirnice uključujem knjižnicu Wire.h. Za korištenje LCD-a uključujem biblioteku Adafruit koju možete preuzeti s https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library, a biblioteka Adafruit_GFX.h dostupna je ovdje https:// github. com/adafruit/Adafruit-GFX-Library.
#uključi
#uključi
#uključi
Adafruit_PCD8544 zaslon = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Ovdje možete vidjeti sve varijable. Kontrolni bajt i naredbeni bajt kako je prije opisano. Vrijeme deBounceTime može se prilagoditi ovisno o šumu na vašem koderu.
byte pot [2] = {1, 1}; byte controlByte = B0101000; // 7 bitova, naredba bajtaByte = B10101001; // posljednja 2 bita je odabir mjerača udaljenosti. byte potValue [2]; int i = 0; int deBounceTime = 10; // Podesite ovu vrijednost ovisno o šumu const int enkoder_A = 8; const int enkoder_B = 9; const int buttonPin = 2; unsigned long newDebounceTime = 0; nepotpisano dugo oldTime; logičko pritisnuto = 0; logički broj = 1;
U postavljanju definiram desne pinove i stavljam statički tekst na LCD
void setup () {Wire.begin (); Serial.begin (9600); pinMode (enkoder_A, ULAZ); pinMode (enkoder_B, ULAZ); pinMode (buttonPin, INPUT); newDebounceTime = millis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (CRNO); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
U petlji prvo provjeravam je li interval veći od 500 ms, ako da, LCD se ažurira. Ako nije, gumb na koderu je provjeren. Ako pritisnete toggleBuffer, pozovite. Nakon toga se koder provjerava. Ako je ulaz 0 nizak (otkrivena rotacija) provjeravam ulaz B, ako je ulaz B 0 povećavam pot , ostale smanjujem. Nakon toga vrijednost će se poslati na DS1803 putem wire.write.
void loop () {{100} {101}
interval();
if (digitalRead (buttonPin) == 1 && (pritisnuto == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {pritisnuto = 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); // započeti prijenos
Wire.write (commandByte); // odabir potmetara Wire.write (pot [0] * 10); // šalje 1. bajt podataka o metru Wire.write (pot [1] * 10); // šalje 2. bajt podataka o metru Wire.endTransmission (); // zaustavljanje prijenosa} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}
void toggleBuffer () {pritisnuto = 1; if (i == 0) {i = 1;} else {i = 0;}}
Prvo očistim područje u koje moram upisati varijable. Ovo radim da nacrtam pravokutnik u ovom području. Nakon toga zapisujem varijable na zaslon.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // čita prvi bajtmetar potmetValue [1] = Wire.read (); // čitanje drugog prikaza bajtmetra.fillRect (40, 0, 40, 45, BIJELO); // brisanje promjenjivog zaslona na LCD zaslonu.setCursor (40, 10); display.print (potValue [0]); // zapisujemo prvu vrijednost mjerača na LCD zaslon.setCursor (40, 22); display.print (potValue [1]); // zapisujemo drugu vrijednost mjerača na LCD zaslon.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// intervalni mjerač vremena za zapis podataka na LCD ako ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Preporučeni:
Vaš vlastiti (testera) dvostruki LED prigušivač: 4 koraka
Izrada vlastitog (testerastog) dvostrukog LED zatamnjivača: Danas ću vam pokazati kako napraviti dvostruki LED prigušivač sa samo 555timer čipovima zajedno sa uobičajenim komponentama. Slično jednom MOSFET-u/tranzistoru (bilo PNP, NPN, P-kanal, ili N-kanal) koji podešava svjetlinu LED-a, ovaj koristi dva MOS-a
DVOSTRUKI LED BLINER KORIŠĆENJEM 555 TIMERA IC: 5 koraka
DVOSTRUKI LED BLINER KORIŠTENJEM IC 555 TIMERA: nadam se da će vam ovo uputstvo pomoći da lajkujete i pretplatite se na moj kanal
Dvostruki zvučnici na drvu: 3 koraka
Dvostruki zvučnici na drvu: Ova uputa prikazuje vam što se događa kada stavite par zvučnika na komad drveta. Možete isprobati sami i vidjeti promjene u zvuku. Video prikazuje da se promjena zvuka ne primjećuje. Međutim, stavljanje zvučnika na drvo pr
MCP41HVX1 digitalni potenciometar za Arduino: 10 koraka (sa slikama)
MCP41HVX1 digitalni potenciometar za Arduino: MCP41HVX1 obitelj digitalnih potenciometara (poznatih i kao DigiPots) uređaji su koji oponašaju funkciju analognog potenciometra i kontroliraju se kroz SPI. Primjer aplikacije bila bi zamjena gumba za glasnoću na vašem stereo uređaju s DigiPotom koji je
Potenciometar i servo: kontrolirano kretanje s Arduinom: 4 koraka
Potenciometar i servo: Kontrolirano kretanje s Arduinom: Prvo morate prikupiti relevantne materijale za sastavljanje ovog kruga