Sadržaj:
- Korak 1: Rotacijski davači iznutra
- Korak 2: Bijeda koja mnogima izaziva pravu bol
- Korak 3: Rješenje konačnih državnih mašina (FSM)
- Korak 4: Arduino kod
- Korak 5: Besprijekorna integracija
Video: Potpuno Arduino rotacijsko rješenje: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
Rotacijski davači su okretni upravljački gumbi za elektroničke projekte, koji se često koriste s mikrokontrolerima porodice Arduino. Mogu se koristiti za fino podešavanje parametara, navigaciju kroz menije, pomicanje objekata na ekranu, postavljanje vrijednosti bilo koje vrste. To su uobičajene zamjene za potenciometre, jer se mogu rotirati preciznije i beskonačno, povećavaju ili smanjuju 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 rasponom cijena teško je spojiti kako je objašnjeno u nastavku.
Postoji bezbroj članaka o radnim detaljima i načinima korištenja rotacijskih davača, te brojni uzorci kodova i biblioteka o tome kako ih koristiti. Jedini problem je što nijedan od njih ne radi 100% precizno s najnižim cjenovnim razredom kineskih rotacijskih modula.
Korak 1: Rotacijski davači iznutra
Okretni dio davača ima tri pina (i još dva za opcionalni dio sklopke). Jedan je zajednička osnova (crni GND), druga dva služe za određivanje smjera pri okretanju dugmeta (često se nazivaju plavi CLK i crveni DT). Oboje je priključeno na PULLUP ulazni pin mikrokontrolera, pa nivo HIGH postaje njihovo zadano očitanje. Kada je gumb okrenut prema naprijed (ili u smjeru kazaljke na satu), prvo plavi CLK pada na nivo LOW, a 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 ide u drugom smjeru BWD (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 u dva nivoa.
Korak 2: Bijeda koja mnogima izaziva pravu bol
Uobičajeni problem za ljubitelje Arduina je to što jeftini moduli rotacijskog kodera odbijaju dodatne promjene u izlaznim nivoima, uzrokujući dodatna i pogrešna očitanja brojača smjerova. Ovo sprječava besprijekorno brojanje i onemogućava integraciju ovih modula u precizne rotacijske projekte. Ta dodatna odbijanja uzrokovana su mehaničkim pokretima zakrpa preko priključnih pinova, pa čak ni primjenom dodatnih kondenzatora ne možete ih u potpunosti ukloniti. Odbijanja se mogu pojaviti bilo gdje u cijelom ciklusu označavanja i ilustrirana su stvarnim scenarijima na slikama.
Korak 3: Rješenje konačnih državnih mašina (FSM)
Slika prikazuje cijeli prostor stanja mogućih promjena nivoa za dva pina (plavi CLK i crveni DT), kako za ispravne tako i za lažne odboje. Na osnovu ovog računara može se programirati potpuno rješenje koje uvijek radi 100% precizno. Budući da u ovom rješenju nisu potrebna odlaganja filtriranja, ono je i najbrže moguće. Još jedna prednost odvajanja prostora stanja pinova od radnog načina rada je ta što se po vlastitoj želji mogu primijeniti i načini prozivanja ili prekid. Anketiranje ili prekidi mogu otkriti promjene nivoa na pinovima, a zasebna rutina će izračunati novo stanje na osnovu trenutnog stanja i stvarnih događaja promjene nivoa.
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 na 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 (mašina 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 …"); // Nivo HIGH će biti zadani za sve pinove pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // I CLK i DT će pokretati prekide za sve promjene nivoa 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 stanja 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--; }}}
// Prelazi 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 precizno i brzo čak i u slučaju rotacijskih enkodera niskog dometa s različitim sporadičnim efektima odbijanja.
Preporučuje se:
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 miliona registriranih korisnika, a proširio se i na druge gradove
Vidjeli LoRa IoTea rješenje: 5 koraka
Vidjeli LoRa IoTea rješenje: Automatski sistem prikupljanja informacija primijenjen na plantaži čaja. To je dio inteligentnog prikupljanja poljoprivrednih informacija
Vidjeli IoTea LoRa rješenje (ažuriranje 1811): 5 koraka
Vidjeli IoTea LoRa rješenje (ažuriranje 1811): Internet+ je sada popularan koncept. Ovaj put smo pokušali putem Interneta i poljoprivrede napraviti vrt iz čaja iz interneta
Vidjeli IoTea LoRa rješenje (sa Azure, ažuriranje 1812): 5 koraka
Vidjeli IoTea LoRa rješenje (s Azureom, ažuriranje 1812): Microsoft Azure je usluga u oblaku koja pruža snažniju i stabilniju računalnu snagu. Ovaj put smo pokušali poslati svoje IoTea podatke
Arduino projekt: LoRa modul za testiranje RF1276 za rješenje za GPS praćenje: 9 koraka (sa slikama)
Arduino projekt: Testni domet LoRa modul RF1276 za GPS praćenje Rješenje: Povezivanje: USB - SerijskiPotrebno: Chrome preglednik Potreban: 1 X Arduino Mega potreba: 1 X GPS potreba: 1 X SD kartica Potreba: 2 X LoRa modem RF1276Funkcija: Arduino Pošalji GPS vrijednost na glavnu bazu - Glavna baza čuva podatke u Dataino Server Lora modulu: Ultra veliki domet