Sisällysluettelo:
- Vaihe 1: Pyörivät enkooderit sisällä
- Vaihe 2: Kurjuus, joka aiheuttaa todellista kipua monille
- Vaihe 3: Finite State Machine (FSM) -ratkaisu
- Vaihe 4: Arduino -koodi
- Vaihe 5: Virheetön integrointi
Video: Täydellinen Arduino -pyörivä ratkaisu: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Pyörivät anturit ovat käännettäviä säätönuppeja elektronisiin projekteihin, joita käytetään usein Arduino -perheen mikro -ohjaimien kanssa. Niiden avulla voidaan hienosäätää parametreja, navigoida valikoissa, siirtää kohteita näytöllä, asettaa kaikenlaisia arvoja. Ne ovat yleisiä potentiometrien korvikkeita, koska niitä voidaan kiertää tarkemmin ja loputtomasti, ne lisäävät tai pienentävät yhtä erillistä arvoa kerrallaan ja usein integroituna työntävään valitsimeen. Niitä on kaikissa muodoissa ja kooissa, mutta alinta hintaluokkaa on vaikea yhdistää, kuten alla selitetään.
On olemassa lukemattomia artikkeleita Rotary -enkooderien työskentelytiedoista ja käyttötavoista sekä lukuisia näytekoodeja ja kirjastoja niiden käytöstä. Ainoa ongelma on, että yksikään niistä ei toimi 100% tarkasti alimman hintaluokan kiinalaisilla pyörivillä moduuleilla.
Vaihe 1: Pyörivät enkooderit sisällä
Anturin pyörivässä osassa on kolme nastaa (ja kaksi lisävarusteena saatavaa kytkinosaa varten). Yksi on yhteinen (musta GND), kaksi muuta on suunnan määrittämiseksi, kun nuppia käännetään (niitä kutsutaan usein siniseksi CLK: ksi ja punaiseksi DT: ksi). Molemmat on liitetty mikrokontrollerin PULLUP -tulotappiin, jolloin taso HIGH on oletusarvo. Kun nuppia käännetään eteenpäin (tai myötäpäivään), sininen CLK putoaa ensin LOW -tasolle ja sitten punainen DT. Kääntämällä edelleen, sininen CLK nousee takaisin HIGH: iin, ja kun yhteinen GND -laastari jättää molemmat liitäntätapit, punainen DT nousee myös takaisin HIGH: iin. Täytä yksi täysi rasti FWD (tai myötäpäivään). Sama pätee toiseen suuntaan BWD (tai vastapäivään), mutta nyt punainen putoaa ensin ja sininen nousee takaisin viimeisenä, kuten on esitetty kahden tason kuvissa.
Vaihe 2: Kurjuus, joka aiheuttaa todellista kipua monille
Yleinen ongelma Arduinon harrastajille, että halvat pyörivät anturimoduulit tuovat ylimääräisiä muutoksia lähtötasoihin aiheuttaen ylimääräisiä ja vääriä suunnan lukemia. Tämä estää virheettömän laskennan ja tekee mahdottomaksi integroida nämä moduulit tarkkoihin pyöriviin projekteihin. Nämä ylimääräiset pomppimukset johtuvat laastarien mekaanisista liikkeistä liitäntätappien päällä, eikä edes ylimääräisten kondensaattoreiden käyttö voi poistaa niitä kokonaan. Pudotukset voivat näkyä missä tahansa täyden rastijakson aikana, ja niitä havainnollistaa kuvien tosielämän skenaariot.
Vaihe 3: Finite State Machine (FSM) -ratkaisu
Kuvassa näkyvät kahden tilan kaikki mahdolliset tasomuutokset (sininen CLK ja punainen DT). Tämän tilakoneen perusteella voidaan ohjelmoida täydellinen ratkaisu, joka toimii aina 100% tarkasti. Koska suodatusviiveitä ei tarvita tässä ratkaisussa, se on myös nopein mahdollinen. Toinen etu nastojen tila -tilan erottamisesta työskentelytilasta on se, että voidaan käyttää sekä pollaus- että keskeytystiloja oman maun mukaan. Pollaus tai keskeytykset voivat havaita nastojen tasomuutokset, ja erillinen rutiini laskee uuden tilan nykyisen tilan ja tasomuutosten todellisten tapahtumien perusteella.
Vaihe 4: Arduino -koodi
Alla oleva koodi laskee sarjamonitorin FWD- ja BWD -punkit ja sisältää myös valinnaisen kytkintoiminnon.
// Peter Csurgay 10.4.2019
// Pyörivän nastat Arduinon portteihin
#define SW 21 #define CLK 22 #define DT 23
// Kiertosäätimellä viritetyn laskurin nykyinen ja edellinen arvo
int curVal = 0; int prevVal = 0;
// Seitsemän FSM -tilaa (äärellinen tilakone)
#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 () {
Sarja.alku (250000); Serial.println ("Aloita…"); // Taso HIGH on oletusarvo kaikille nastoille pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // Sekä CLK että DT laukaisevat keskeytykset kaikille tason muutoksille attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
void loop () {
// Joihinkin kiertokoodereihin integroidun valinnaisen kytkimen käsittely, jos (digitalRead (SW) == LOW) {Serial.println ("Pressed"); while (! digitalRead (SW)); } // Kaikki laskurin arvon muutokset näytetään Serial Monitorissa, jos (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// Tilakoneen siirtymät CLK -tason muutoksille
void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; else if (tila == SCLK_10) tila = SCLK_00; else if (tila == SDT_10) tila = SDT_00; } else {if (state == SCLK_01) state = IDLE_11; else if (tila == SCLK_00) tila = SCLK_10; else if (tila == SDT_00) tila = SDT_10; muuten jos (tila == SDT_01) {tila = IDLE_11; käyrä--; }}}
// Tilakoneen siirtymät DT -tason muutoksille
void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; else if (tila == SDT_01) tila = SDT_00; else if (tila == SCLK_01) tila = SCLK_00; } else {if (state == SDT_10) state = IDLE_11; else if (tila == SDT_00) tila = SDT_01; else if (tila == SCLK_00) tila = SCLK_01; muuten jos (tila == SCLK_10) {tila = IDLE_11; käyrä ++; }}}
Vaihe 5: Virheetön integrointi
Voit tarkistaa liitteenä olevalta videolta, että FSM -ratkaisu toimii tarkasti ja nopeasti myös pienen kantaman pyörivillä antureilla, joilla on erilaisia satunnaisia pomppivaikutuksia.
Suositeltava:
Reaaliaikainen Rubikin kuution silmät ratkaistu Ratkaisu Raspberry Pi: n ja OpenCV: n avulla: 4 vaihetta
Reaaliaikainen Rubikin kuution sokeat ratkaisija Raspberry Pi: n ja OpenCV: n avulla: Tämä on Rubikin kuutiotyökalun toinen versio, joka on suunniteltu ratkaisemaan silmät. Ensimmäinen versio on JavaScriptin kehittämä, näet projektin RubiksCubeBlindfolded1Toisin kuin edellinen, tämä versio käyttää OpenCV -kirjastoa värien ja e
IOT -ratkaisu jakopyörälle: 6 vaihetta
IOT -ratkaisu jakopyörälle: Jakopyörä on erittäin suosittu Kiinassa näinä päivinä. Markkinoilla on yli 10 merkkistä jakopyörää, ja “ mobike ” on tunnetuin, sillä on yli 100 miljoonaa rekisteröitynyttä käyttäjää ja se on levinnyt muihin kaupunkeihin
Nähtiin LoRa IoTea -ratkaisu: 5 vaihetta
Nähtiin LoRa IoTea -ratkaisu: Automaattinen tiedonkeruujärjestelmä, jota sovelletaan teen istutukseen. Se on osa älykästä maataloustiedon keräämistä
Nähtiin IoTea LoRa -ratkaisu (päivitys 1811): 5 vaihetta
Nähtiin IoTea LoRa -ratkaisu (päivitys 1811): Internet+ on suosittu käsite nyt. Tällä kertaa kokeilimme Internetiä ja maataloutta teepuutarhan kasvattamiseksi kasvaa Internet -teetä
Arduino -projekti: Testialueen LoRa -moduuli RF1276 GPS -seurantaan Ratkaisu: 9 vaihetta (kuvilla)
Arduino -projekti: Testialueen LoRa -moduuli RF1276 GPS -seurantaa varten Ratkaisu: Liitäntä: USB - sarjaTarve: Chrome -selaintarve: 1 X Arduino Mega -tarve: 1 X GPS -tarve: 1 X SD -kortin tarve: 2 X LoRa -modeemi RF1276 Toiminto: Arduino Lähetä GPS -arvo pääkannalle - Päätietokanta tallentaa dataa Dataino Server Lora -moduulissa: Erittäin pitkä kantama