Sadržaj:
- Korak 1: Povezivanje DS1803
- Korak 2: Naredbeni bajt
- Korak 3: Kontrola DS1803
- Korak 4: Postavite
- Korak 5: Program
Video: DS1803 Dvostruki digitalni potenciometar sa Arduinom: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
Volim podijeliti upotrebu digitalnog mjerača udaljenosti DS1803 s Arduinom. Ovaj IC sadrži dva digitalna potmetra koji se mogu kontrolirati preko dvožilnog sučelja, za to koristim wire.h biblioteku.
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 pot [0] i pot [1]. Kada pritisnete prekidač na koderu, možete se prebacivati između pot [0] i pot [1].
Stvarna vrijednost posuda se očitava iz DS1803 i stavlja u promjenjive potValue [0] i potValue [1] i prikazuje na LCD -u.
Korak 1: Povezivanje DS1803
Ovdje možete vidjeti veze DS1803. H je gornja strana potenciometra, L donja strana i W brisač. SCL i SDA su sabirničke veze.
Sa priključcima A0, A1 i A2 možete dati DS1803 vlastitu adresu, na taj način možete kontrolirati više uređaja putem jedne sabirnice. U mom primjeru dao sam DS1803 adresu 0 povezivanjem svih pinova na uzemljenje.
Korak 2: Naredbeni bajt
Način rada DS1803 može se koristiti u komandnom bajtu. Kada odaberete "upiši potenciometar-0", odabrani su oba potenciometra, a samo želiš podesiti potenciometar-0, moraš poslati samo prvi bajt podataka. "Potenciometar za pisanje-1" podesite samo mjerač-1. "Zapisi na oba potenciometra" daje oba potenciometra istu vrijednost.
Korak 3: Kontrola DS1803
Kontrolni bajt (slika 3) ima identifikator uređaja, koji ostaje uvijek isti. U mom primjeru A0, A1 i A2 su 0 jer odabiremo adresu 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 telegram. Pročitani telegram prikazan je na slici 4.
Korak 4: Postavite
Ovo kolo pokazuje kako sve spojiti. Nokijin LCD zaslon dostupan je s različitim vezama, pazite da pravilno povežete svoj. Također rotacijski koder njegove različite verzije, 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đe sam u svoj program stavio tajmer debounce za poništavanje buke. Za ostalo mislim da je krug jasan. LCD se može naručiti putem Adafruit
Korak 5: Program
Za upotrebu 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.
#include
#include
#include
Adafruit_PCD8544 display = Adafruit_PCD8544 (7, 6, 5, 4, 3);
Ovdje možete vidjeti sve varijable. Kontrolni bajt i komandni bajt kao što je prethodno opisano. Vrijeme deBounceTime može se prilagoditi ovisno o šumu na vašem koderu.
bajt pot [2] = {1, 1}; bajt controlByte = B0101000; // 7 bitova, bajt commandByte = B10101001; // posljednja 2 bita su odabir mjerača. bajt 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; unsigned long oldTime; logičko pritisnuto = 0; logički broj = 1;
U postavkama 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 biti poslana 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;}} drugo {pot -; if (pot <1) {pot = 1;}} count = 1; newDebounceTime = millis ();
Wire.beginTransmission (controlByte); // započinjemo prijenos
Wire.write (commandByte); // izbor 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 ovoj oblasti. Nakon toga zapisujem varijable na ekran.
void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // čita prvi bajtmetar metra potValue [1] = Wire.read (); // čita drugi prikaz bajtmetra display.fillRect (40, 0, 40, 45, WHITE); // brisanje promjenjivog ekrana na LCD ekranu.setCursor (40, 10); display.print (potValue [0]); // upisuje prvu vrijednost merača na LCD zaslon.setCursor (40, 22); display.print (potValue [1]); // upisuje drugu vrijednost mjerača na LCD zaslon.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }
void interval () {// intervalni mjerač za pisanje podataka na LCD ako ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}
Preporučuje se:
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ŠĆENJEM 555 TIMERA IC: nadam se da će vam ovo uputstvo pomoći da lajkujete i pretplatite se na moj kanal
MCP41HVX1 digitalni potenciometar za Arduino: 10 koraka (sa slikama)
MCP41HVX1 digitalni potenciometar za Arduino: Porodica digitalnih potenciometara MCP41HVX1 (zvanih DigiPots) su uređaji koji oponašaju funkciju analognog potenciometra i kojima se upravlja putem SPI -ja. Primjer aplikacije bila bi zamjena dugmeta za jačinu zvuka na vašem stereo uređaju sa 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
RGB LED dioda kontrolira Bluetooth ili potenciometar: 5 koraka
RGB LED dioda kontrolirana Bluetooth -om ili potenciometrom: Zdravo! Danas sam htio podijeliti svoj Arduino projekt s vama. Učinio sam da RGB vodi Arduino. Ima 3 načina rada i 2 sučelja. Prvi način rada je ručno upravljanje, drugi hladna duga i treća brava u boji. Prvo kalibrirate potenciometar. Onda ti