Përmbajtje:

DS1803 Potenciometër i dyfishtë dixhital me Arduino: 5 hapa
DS1803 Potenciometër i dyfishtë dixhital me Arduino: 5 hapa

Video: DS1803 Potenciometër i dyfishtë dixhital me Arduino: 5 hapa

Video: DS1803 Potenciometër i dyfishtë dixhital me Arduino: 5 hapa
Video: Изучите Arduino за 30 минут: примеры и проекты 2024, Nëntor
Anonim
Potenciometër Digjital DS1803 Dual me Arduino
Potenciometër Digjital DS1803 Dual me Arduino

Më pëlqen të ndaj përdorimin e një potmetri dixhital DS1803 me një Arduino. Ky IC përmban dy potmetra dixhital të cilët mund të kontrollohen mbi një ndërfaqe me dy tela, për këtë unë përdor bibliotekën wire.h.

Ky IC mund të zëvendësojë një potmetër analog normal. Në këtë mënyrë ju jeni në gjendje të kontrolloni për shembull një përforcues ose furnizim me energji elektrike.

Në këtë udhëzues unë kontrolloj shkëlqimin e dy LED -ve për të treguar funksionimin.

Arduino numëron pulset e një koduesi rrotullues dhe vendos vlerën në tenxhere të ndryshueshme [0] dhe tenxhere [1]. Kur shtypni çelësin në kodues, mund të kaloni midis tenxhere [0] dhe tenxhere [1].

Vlera aktuale e tenxhereve lexohet nga DS1803 dhe vendoset në potValue të ndryshueshme [0] dhe potValue [1] dhe shfaqet në një LCD.

Hapi 1: Lidhjet e DS1803

Lidhjet e DS1803
Lidhjet e DS1803

Këtu mund të shihni lidhjet e DS1803. H është ana e lartë e potenciometrit, L ana e ulët dhe W fshirësi. SCL dhe SDA janë lidhjet e autobusit.

Me lidhjen A0, A1 dhe A2 ju mund t'i jepni adresës së vet DS1803, në këtë mënyrë ju mund të kontrolloni më shumë pajisje përmes një autobusi. Në shembullin tim kam dhënë adresën DS1803 0 duke i lidhur të gjitha kunjat me tokën.

Hapi 2: Komanda Byte

Komanda Byte
Komanda Byte

Mënyra se si funksionon DS1803 mund të përdoret në bajtin e komandës. Kur zgjidhni "shkruani potenciometër-0" të dy potenciometrat zgjidhen, kur dëshironi të rregulloni vetëm potenciometrin-0, ju duhet vetëm të dërgoni bajtin e parë të të dhënave. "Shkruani potenciometër-1" rregulloni vetëm potmetër-1. "Shkruaj në të dy potenciometrat" u jep të dy potenciometrave të njëjtën vlerë.

Hapi 3: Kontrolli i DS1803

Kontrolli i DS1803
Kontrolli i DS1803

Bajti i kontrollit (figura 3) ka një identifikues të pajisjes, ky qëndron gjithmonë i njëjtë. Në shembullin tim A0, A1 dhe A2 janë 0 sepse ne zgjedhim adresën duke i vendosur të gjitha kunjat A në tokë. Pjesa e fundit R/W do të vendoset në 0 ose 1 me komandën "Wire.beginTransmission" dhe "Wire.requestFrom" në Arduino. Në figurën 5 mund të shihni të gjithë telegramin. Telegrami i lexuar është treguar në figurën 4.

Hapi 4: Konfiguro

Ngritur
Ngritur

Ky qark tregon se si të lidhni gjithçka. Ekrani LCD i Nokia -s është i disponueshëm me lidhje të ndryshme, sigurohuni që ta lidhni tuajin siç duhet. Gjithashtu kodifikuesi rrotullues versionet e tij të ndryshme, disa kanë të përbashkëtin në kunjin e mesëm të tjerët jo. Unë kam vënë një rrjet të vogël filtri (rezistencë 470 Ohm me kapak 100nF) për të filtruar sinjalet dalëse A dhe B të koduesit. Kam nevojë për këtë filtër sepse dalja kishte shumë zhurmë. Unë gjithashtu vendosa një kohëmatës debounce në programin tim për të anuluar pak zhurmë. Për pjesën tjetër mendoj se qarku është i qartë. LCD -ja mund të porositet përmes Adafruit

Hapi 5: Programi

Për përdorimin e autobusit me 2 tela përfshij bibliotekën Wire.h. Për të përdorur LCD-në përfshij bibliotekën Adafruit të cilën mund ta shkarkoni nga https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library gjithashtu biblioteka Adafruit_GFX.h është në dispozicion këtu https:// github. com/adafruit/Adafruit-GFX-Library.

#përfshi

#përfshi

#përfshi

Shfaqja Adafruit_PCD8544 = Adafruit_PCD8544 (7, 6, 5, 4, 3);

Këtu mund të shihni të gjitha ndryshoret. Kontrolloni bajtin dhe komandoni bajtin siç përshkruhet më parë. DeBounceTime mund të rregullohet në varësi të zhurmës në koduesin tuaj.

tenxhere byte [2] = {1, 1}; byte controlByte = B0101000; // 7 bit, byte commandByte = B10101001; // 2 bitët e fundit është përzgjedhja e potmetrit. byte potVlera [2]; int i = 0; int deBounceTime = 10; // Rregulloni këtë vlerë në varësi të zhurmës const int encoder_A = 8; const int kodues_B = 9; const int buttonPin = 2; i panënshkruar i ri newDebounceTime = 0; i panënshkruar gjatë oldTime; boolean presion = 0; numërimi boolean = 1;

Në konfigurimin unë përcaktoj kunjat e duhur dhe vendos tekstin statik në LCD

void setup () {Wire.begin (); Serial.filloj (9600); pinMode (koduesi_A, INPUT); pinMode (koduesi_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = milis ();

shfaqje.filloj ();

display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (ZI); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();

}

Në lak unë së pari kontrolloj nëse intervali është më shumë se 500ms, nëse po LCD përditësohet. Nëse jo, butoni në kodues është kontrolluar. Nëse shtypet toggleBuffer telefononi. Pas kësaj, kodifikuesi kontrollohet. Nëse hyrja 0 është e ulët (zbulohet rrotullimi) unë kontrolloj hyrjen B, nëse hyrja B është 0 I tenxhere me rritje , të tjerat I zvogëloj. Pas kësaj vlera do t'i dërgohet DS1803 përmes telit.shkruaj.

lak void () {

interval ();

nëse (digitalRead (buttonPin) == 1 && (shtypur == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {shtypur = 0;}

if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; nëse (tenxhere > 25) {tenxhere = 25;}} tjetër {tenxhere -; nëse (tenxhere <1) {tenxhere = 1;}} numërim = 1; newDebounceTime = milis ();

Wire.beginTransmission (controlByte); // filloni transmetimin

Wire.write (commandByte); // përzgjedhja e potmetrave Wire.write (tenxhere [0] * 10); // dërgoni 1 bajtin e të dhënave të potmetrit Wire.write (tenxhere [1] * 10); // dërgoni bajtin e dytë të të dhënave të potmetrit Wire.endTransmission (); // ndalo transmetimin} tjetër nëse (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = milis (); }}

void toggleBuffer () {shtypur = 1; nëse (i == 0) {i = 1;} tjetër {i = 0;}}

Së pari pastroj zonën ku duhet të shkruaj ndryshoret. Unë e bëj këtë për të vizatuar një drejtkëndësh në këtë zonë. Pas kësaj unë shkruaj ndryshoret në ekran.

void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // lexoni potmetrin e parë të bajtit potValue [1] = Wire.read (); // lexoni ekranin e dytë të bajt potmeter.fillRect (40, 0, 40, 45, WHITE); // pastro ekranin e ndryshueshëm në ekranin LCD.setCursor (40, 10); display.print (potValue [0]); // shkruani vlerën e parë të potmetrit në ekranin LCD.setCursor (40, 22); display.print (potVlera [1]); // shkruani vlerën e dytë të potmetrit në ekranin LCD.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }

void interval () {// kohëmatësi i intervalit për të shkruar të dhëna në LCD nëse ((millis () - oldTime)> 500) {writeToLCD (); oldTime = milis (); }}

Recommended: