Turinys:
- 1 žingsnis: DS1803 prijungimas
- 2 veiksmas: komandų baitas
- 3 žingsnis: DS1803 valdymas
- 4 žingsnis: Nustatykite
- 5 žingsnis: programa
Video: DS1803 dvigubas skaitmeninis potenciometras su „Arduino“: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Man patinka pasidalinti DS1803 skaitmeninio potmetro naudojimu su „Arduino“. Šiame IC yra du skaitmeniniai potmetrai, kuriuos galima valdyti per dviejų laidų sąsają, todėl naudoju wire.h biblioteką.
Šis IC gali pakeisti įprastą analoginį potmetrą. Tokiu būdu galite valdyti, pavyzdžiui, stiprintuvą ar maitinimo šaltinį.
Šioje instrukcijoje aš kontroliuoju dviejų šviesos diodų ryškumą, kad parodytų veikimą.
Arduino suskaičiuoja sukamojo kodavimo įrenginio impulsus ir įdeda vertę į kintamąjį puodą [0] ir puodą [1]. Paspaudę kodavimo įrenginio jungiklį, galite perjungti puodą [0] ir puodą [1].
Tikroji puodų vertė nuskaitoma iš DS1803, sudedama į kintamuosius potValue [0] ir potValue [1] ir rodoma LCD ekrane.
1 žingsnis: DS1803 prijungimas
Čia galite pamatyti DS1803 jungtis. H yra aukštoji potenciometro pusė, L - apatinė, o W - valytuvas. SCL ir SDA yra magistralės jungtys.
Prijungę A0, A1 ir A2, galite suteikti DS1803 savo adresą, tokiu būdu galite valdyti daugiau įrenginių per vieną magistralę. Savo pavyzdyje turiu nurodyti DS1803 adresą 0, prijungdamas visus kaiščius prie žemės.
2 veiksmas: komandų baitas
DS1803 veikimo būdą galima naudoti komandiniame baite. Kai pasirenkate „rašyti potenciometrą-0“, pasirenkami abu potenciometrai, o kai norite reguliuoti tik potenciometrą-0, turite išsiųsti tik pirmąjį duomenų baitą. „Rašymo potenciometras-1“reguliuoja tik potmetrą-1. „Rašyti į abu potenciometrus“suteikia abiems potenciometrams tą pačią vertę.
3 žingsnis: DS1803 valdymas
Kontrolinis baitas (3 pav.) Turi įrenginio identifikatorių, kuris visada išlieka tas pats. Mano pavyzdyje A0, A1 ir A2 yra 0, nes mes pasirenkame adresą, sudėdami visus A kaiščius į žemę. Paskutinis bitas R/W bus nustatytas į 0 arba 1 pagal komandą „Wire.beginTransmission“ir „Wire.requestFrom“„Arduino“. 5 paveiksle galite pamatyti visą telegramą. Perskaityta telegrama parodyta 4 paveiksle.
4 žingsnis: Nustatykite
Ši grandinė parodo, kaip viską prijungti. „Nokia“skystųjų kristalų ekranas yra prieinamas įvairiais jungtimis, todėl įsitikinkite, kad tinkamai prijungėte. Taip pat skirtingų versijų rotacinis kodavimo įrenginys, kai kurie turi bendrą ant vidurinio kaiščio, kiti - ne. Aš įdėjau nedidelį filtrų tinklą (470 omų rezistorius su 100nF dangteliu), kad būtų galima filtruoti kodavimo įrenginio A ir B išvesties signalus. Man reikia šio filtro, nes išvestyje buvo daug triukšmo. Taip pat į savo programą įdėjau išjungimo laikmatį, kad pašalinčiau triukšmą. Likusiai daliai manau, kad grandinė yra aiški. LCD ekraną galima užsisakyti per „Adafruit“https://www.adafruit.com/product/338.
5 žingsnis: programa
Norėdami naudoti 2 laidų magistralę, įtraukiu „Wire.h“biblioteką. Norėdami naudotis LCD, įtraukiu „Adafruit“biblioteką, kurią galite atsisiųsti iš https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library, taip pat „Adafruit_GFX.h“biblioteką rasite čia https:// github. com/adafruit/Adafruit-GFX-Library.
#įtraukti
#įtraukti
#įtraukti
„Adafruit_PCD8544“ekranas = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Čia galite pamatyti visus kintamuosius. Valdykite baitus ir komandų baitus, kaip aprašyta anksčiau. „DeBounceTime“galima koreguoti, atsižvelgiant į jūsų kodavimo įrenginio triukšmą.
baitų indas [2] = {1, 1}; baitų valdymasByte = B0101000; // 7 bitai, baitų komandaByte = B10101001; // paskutiniai 2 bitai yra potmetro pasirinkimas. baitas potValue [2]; int i = 0; int deBounceTime = 10; // Sureguliuokite šią vertę, priklausomai nuo triukšmo konst int intoder_A = 8; const int koduotojas_B = 9; const int mygtukasPin = 2; nepasirašytas ilgas newDebounceTime = 0; unsigned long oldTime; loginis paspaudimas = 0; loginis skaičius = 1;
Sąrankoje aš apibrėžiu tinkamus kaiščius ir įdedu statinį tekstą į LCD
void setup () {Wire.begin (); Serial.begin (9600); pinMode (kodavimo priemonė_A, Įvestis); pinMode (kodavimo priemonė_B, Įvestis); pinMode (buttonPin, INPUT); newDebounceTime = milis ();
display.begin ();
display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (BLACK); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();
}
Cikle aš pirmiausia patikrinu, ar intervalas yra didesnis nei 500 ms, jei taip, LCD atnaujinamas. Jei ne, kodavimo mygtukas yra pažymėtas. Paspaudus „toggleBuffer“, bus iškviestas. Po to tikrinamas kodavimo įrenginys. Jei įvestis 0 yra maža (aptiktas sukimasis), aš tikrinu įvestį B, jei įvestis B yra 0 I didinimo indas , kiti - sumažina. Po to vertė bus siunčiama į DS1803 per wire.write.
void loop () {
intervalas ();
if (digitalRead (buttonPin) == 1 && (press == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {press = 0;}
if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; jei (puodas > 25) {puodas = 25;}} dar {puodas -; jei (puodas <1) {puodas = 1;}} skaičius = 1; newDebounceTime = milis ();
Wire.beginTransmission (controlByte); // pradėti perduoti
Wire.write (commandByte); // potmetrų pasirinkimas Wire.write (puodas [0] * 10); // siųsti 1 baitą potmetro duomenų Wire.write (puodas [1] * 10); // siųsti 2 baitą potmetro duomenų Wire.endTransmission (); // sustabdyti perdavimą} else if (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = milis (); }}
void toggleBuffer () {paspaustas = 1; jei (i == 0) {i = 1;} kitaip {i = 0;}}
Pirmiausia išvalau sritį, kurioje turiu rašyti kintamuosius. Aš tai darau, kad šioje srityje nupieščiau stačiakampį. Po to aš rašau kintamuosius į ekraną.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // skaityti pirmą potmetro baitą potValue [1] = Wire.read (); // skaityti antrojo potmetro baitų ekraną.fillRect (40, 0, 40, 45, WHITE); // išvalyti kintamą ekraną LCD ekrane.setCursor (40, 10); display.print (potValue [0]); // į LCD ekraną įrašykite 1 -ą potmetro reikšmę.setCursor (40, 22); display.print (potValue [1]); // į LCD ekraną įrašykite 2 -ąją potmetro reikšmę.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// intervalo laikmatis duomenims įrašyti į LCD, jei ((millis () - oldTime)> 500) {writeToLCD (); oldTime = milis (); }}
Rekomenduojamas:
Dvigubas šviesos diodų apšvietimo reguliatorius: 4 žingsniai
Dvigubas šviesos diodų pritemdymas (Seesaw): šiandien aš jums parodysiu, kaip padaryti dvigubą šviesos diodų pritemdiklį tik su 555 laikmačio lustais ir bendrais komponentais. Panašus į vieną MOSFET/tranzistorių (PNP, NPN, P kanalas, arba N-kanalas), kuris reguliuoja šviesos diodo ryškumą, šis naudoja dvi MOS
MCP41HVX1 skaitmeninis „Arduino“potenciometras: 10 žingsnių (su nuotraukomis)
MCP41HVX1 skaitmeninis „Arduino“potenciometras: „MCP41HVX1“skaitmeninių potenciometrų šeima (dar žinoma kaip „DigiPots“) yra prietaisai, imituojantys analoginio potenciometro funkciją ir valdomi per SPI. Pavyzdinė programa būtų pakeisti jūsų stereo garsumo rankenėlę „DigiPot“, kuri yra
Pigus dvigubas 30V/2A projekto maitinimo šaltinis: 7 žingsniai (su nuotraukomis)
Pigus dvigubas 30V/2A projekto maitinimo šaltinis: ieškodamas maitinimo modulių ir skystųjų kristalų ekranų, radau porą šių pigių LCD 35W maitinimo modulių, kurių įtampa yra 0,5–30 V @3A (50 W su radiatoriumi ir 4 A viršįtampio srove). Turi įtampos reguliavimą ir srovės ribotuvą. Taip pat yra
Potenciometras ir servo: valdomas judesys naudojant „Arduino“: 4 žingsniai
Potenciometras ir servo: valdomas judesys naudojant „Arduino“: pirmiausia turite surinkti atitinkamas medžiagas, kad sujungtumėte šią grandinę
„Tensegrity“arba dvigubas 5R lygiagretus robotas, 5 ašys (DOF) nebrangus, tvirtas, judesio valdymas: 3 žingsniai (su nuotraukomis)
„Tensegrity“arba dvigubas 5R lygiagretus robotas, 5 ašys (DOF) nebrangus, tvirtas, judesio valdymas: tikiuosi, kad manysite, kad tai yra DIDELĖ jūsų dienos idėja! Tai įrašas konkurse „Instructables Robotics“, kuris baigsis 2019 m. Gruodžio 2 d. Projektas pasiekė paskutinį teisėjų raundą, ir aš neturėjau laiko atlikti norimų atnaujinimų! Aš turiu