Sadržaj:
- Korak 1: Rotacijski davači iznutra
- Korak 2: Bijeda koja mnogima nanosi pravu bol
- Korak 3: Rješenje konačnih strojeva (FSM)
- Korak 4: Arduino kod
- Korak 5: Besprijekorna integracija
Video: Cjelovito Arduino rotacijsko rješenje: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
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
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
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)
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
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:
SASSIE: Sustav za neugodno rješenje tišine i pojačivač interakcije: 5 koraka
SASSIE: Sustav za neugodno rješenje tišine i pojačivač interakcije: SASSIE je odgovor na pitanje koje smo si svi postavili tijekom neugodne tišine u jednom trenutku svog života, "Govorim li sljedeće?" Pa sada ne morate brinuti jer je SASSIE posebno dizajniran za prepoznavanje neugodne tišine
KREQC: Kentuckyjevo rotacijsko emulirano kvantno računalo: 9 koraka
KREQC: Kentuckyjevo rotacijsko emulirano kvantno računalo: Zovemo ga " potok " - napisano KREQC: Kentuckyjevo rotacijsko emulirano kvantno računalo. Da, ovo uputstvo će vam pokazati kako napraviti vlastito radno kvantno računalo koje pouzdano radi na sobnoj temperaturi uz minimalno vrijeme ciklusa
IOT rješenje za dijeljenje bicikla: 6 koraka
IOT rješenje za dijeljenje bicikla: Bicikl za dijeljenje vrlo je popularan u Kini ovih dana. Na tržištu postoji više od 10 marki bicikala za dijeljenje, a “ mobike ” je najpoznatiji, ima više od 100 milijuna registriranih korisnika, a proširio se i na druge gradove
Rotacijsko ugađanje s Pi TV HAT: 3 koraka
Rotacijsko ugađanje s Pi TV HAT-om: U ovom Instructable-u pokazat ću vam kako unijeti analognu kontrolu u svoju digitalnu televiziju, pomoću rotacijskog prekidača za promjenu kanala na starinskom televizoru s napajanjem Raspberry Pi. Pribor za TV HAT nedavno je objavljen i s mojom ljubavlju prema konverziji
Arduino projekt: Testni raspon LoRa modul RF1276 za rješenje GPS praćenja: 9 koraka (sa slikama)
Arduino projekt: Testni raspon LoRa modul RF1276 za GPS praćenje Rješenje: Spajanje: USB - Serijski Potreban: Chrome preglednik Potreba: 1 X Arduino Mega potreba: 1 X GPS potreba: 1 X SD kartica Potreba: 2 X LoRa modem RF1276 Funkcija: Arduino Pošalji GPS vrijednost na glavnu bazu - Glavna baza pohranjuje podatke u Dataino poslužiteljski Lora modul: Ultra veliki domet