Sadržaj:

Cjelovito Arduino rotacijsko rješenje: 5 koraka
Cjelovito Arduino rotacijsko rješenje: 5 koraka

Video: Cjelovito Arduino rotacijsko rješenje: 5 koraka

Video: Cjelovito Arduino rotacijsko rješenje: 5 koraka
Video: Использование Melexis MLX90614 Инфракрасный термометр с Arduino 2024, Studeni
Anonim
Cjelovito Arduino rotacijsko rješenje
Cjelovito Arduino rotacijsko rješenje

Rotacijski davači su okretni upravljački gumbi za elektroničke projekte, koji se često koriste s mikrokontrolerima obitelji Arduino. Mogu se koristiti za fino podešavanje parametara, navigaciju po izbornicima, pomicanje objekata na zaslonu, postavljanje bilo koje vrste vrijednosti. Uobičajene su zamjene za potenciometre, jer se mogu točnije i beskonačno rotirati, povećavaju ili umanjuju jednu po jednu diskretnu vrijednost, a često su integrirane s prekidačem koji se može pritisnuti za funkcije odabira vrste. Dolaze u svim oblicima i veličinama, ali s najnižim cjenovnim razredom teško je sučeliti kako je objašnjeno u nastavku.

Postoji bezbroj članaka o radnim pojedinostima i načinima korištenja rotacijskih davača, te brojni uzorci kodova i knjižnica o tome kako ih koristiti. Jedini je problem što nitko od njih ne radi 100% točno s najnižim cjenovnim razredom kineskih rotacijskih modula.

Korak 1: Rotacijski davači iznutra

Rotacijski davači iznutra
Rotacijski davači iznutra
Rotacijski davači iznutra
Rotacijski davači iznutra
Rotacijski davači iznutra
Rotacijski davači iznutra

Okretni dio davača ima tri igle (i još dvije za dodatni dio sklopke). Jedan je zajednička osnova (crni GND), druga dva služe za određivanje smjera pri okretanju gumba (često se nazivaju plavi CLK i crveni DT). Oboje je spojeno na PULLUP ulazni pin mikrokontrolera, pa je razina HIGH njihovo zadano očitanje. Kad je gumb okrenut prema naprijed (ili u smjeru kazaljke na satu), prvo plavi CLK pada na razinu LOW, zatim slijedi crveni DT. Okrećući se dalje, plavi CLK raste natrag do HIGH -a, a kako uobičajena GND zakrpa napušta oba priključka, crveni DT se također podiže na HIGH. Time se dovršava jedan puni pogon naprijed (ili u smjeru kazaljke na satu). Isto vrijedi i za drugi smjer BWD-a (ili u smjeru suprotnom od kazaljke na satu), ali sada crvena pada prva, a plava se posljednja uzdiže nazad kao što je prikazano na slikama na dvije razine.

Korak 2: Bijeda koja mnogima nanosi pravu bol

Bijeda koja mnogima nanosi pravu bol
Bijeda koja mnogima nanosi pravu bol
Bijeda koja mnogima nanosi pravu bol
Bijeda koja mnogima nanosi pravu bol
Bijeda koja mnogima nanosi pravu bol
Bijeda koja mnogima nanosi pravu bol

Uobičajeni problem za ljubitelje Arduina je to što jeftini moduli rotacijskog kodera poništavaju dodatne promjene u izlaznim razinama, uzrokujući dodatna i pogrešna očitanja broja smjera. To sprječava besprijekorno brojanje i onemogućuje integraciju ovih modula u točne rotacijske projekte. Ta dodatna odbijanja uzrokovana su mehaničkim pokretima zakrpa preko priključnih pinova, pa čak i primjenom dodatnih kondenzatora ne možete ih u potpunosti ukloniti. Odbijanje se može pojaviti bilo gdje u cijelom ciklusu označavanja, a ilustrirano je stvarnim scenarijima na slikama.

Korak 3: Rješenje konačnih strojeva (FSM)

Rješenje konačnih strojeva (FSM)
Rješenje konačnih strojeva (FSM)

Slika prikazuje cijeli prostor stanja mogućih promjena razine za dva pina (plavi CLK i crveni DT), kako za ispravne tako i za lažne odboje. Na temelju ovog stroja za stanje može se programirati cjelovito rješenje koje uvijek radi 100% točno. Budući da u ovom rješenju nisu potrebna odgode filtriranja, ono je i najbrže moguće. Još jedna prednost odvajanja prostora stanja pinova od načina rada je ta što se prema vlastitim željama mogu primijeniti i načini prozivanja ili prekid. Anketiranje ili prekidi mogu otkriti promjene razine na pinovima, a zasebna rutina izračunat će novo stanje na temelju trenutnog stanja i stvarnih događaja promjena razine.

Korak 4: Arduino kod

Arduino kod
Arduino kod

Donji kod broji krpelje FWD i BWD na serijskom monitoru, a također integrira opcijsku funkciju prekidača.

// Peter Csurgay 2019-04-10

// Igle rotacijskog preslikavanja u Arduino portove

#define SW 21 #define CLK 22 #define DT 23

// Trenutna i prethodna vrijednost brojača podešena pomoću rotacije

int curVal = 0; int prevVal = 0;

// Sedam stanja FSM -a (stroj konačnih stanja)

#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int state = IDLE_11;

void setup () {

Serial.begin (250000); Serial.println ("Start …"); // Razina HIGH bit će zadana za sve pinove pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // I CLK i DT će pokrenuti prekide za sve promjene razine attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }

void loop () {{100} {101}

// Rukovanje opcijskim prekidačem integriranim u neke rotacijske davače if (digitalRead (SW) == LOW) {Serial.println ("Pressed"); while (! digitalRead (SW)); } // Svaka promjena vrijednosti brojača prikazuje se u Serijskom monitoru if (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}

// Prijelazi državnog stroja za promjene razine CLK

void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (stanje == IDLE_11) stanje = SCLK_01; else if (stanje == SCLK_10) stanje = SCLK_00; else if (stanje == SDT_10) stanje = SDT_00; } else {if (stanje == SCLK_01) stanje = IDLE_11; else if (stanje == SCLK_00) stanje = SCLK_10; else if (stanje == SDT_00) stanje = SDT_10; else if (stanje == SDT_01) {stanje = IDLE_11; curVal--; }}}

// Prijelazi državnog stroja za promjene razine DT

void rotaryDT () {if (digitalRead (DT) == LOW) {if (stanje == IDLE_11) stanje = SDT_10; else if (stanje == SDT_01) stanje = SDT_00; else if (stanje == SCLK_01) stanje = SCLK_00; } else {if (stanje == SDT_10) stanje = IDLE_11; else if (stanje == SDT_00) stanje = SDT_01; else if (stanje == SCLK_00) stanje = SCLK_01; else if (stanje == SCLK_10) {stanje = IDLE_11; curVal ++; }}}

Korak 5: Besprijekorna integracija

U priloženom videu možete provjeriti radi li FSM rješenje točno i brzo čak i u slučaju rotacijskih davača niskog dometa s različitim sporadičnim efektima odbijanja.

Preporučeni: