Përmbajtje:
- Hapi 1: Kodifikuesit rrotullues brenda
- Hapi 2: Mjerimi që shkakton dhimbje të vërteta për shumë njerëz
- Hapi 3: Zgjidhja e makinës së gjendjes së fundme (FSM)
- Hapi 4: Kodi Arduino
- Hapi 5: Integrimi pa të meta
Video: Një zgjidhje e plotë rrotulluese Arduino: 5 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:20
Kodifikuesit rrotullues janë çelësa kontrolli të kthyeshëm për projekte elektronike, të përdorura shpesh me mikrokontrolluesit e familjes Arduino. Ato mund të përdoren për të rregulluar parametrat, për të lundruar në menutë, për të lëvizur objektet në ekran, për të vendosur vlerat e çdo lloji. Ato janë zëvendësime të zakonshme për potenciometrat, sepse ato mund të rrotullohen më saktë dhe pafundësisht, ato rrisin ose zvogëlojnë një vlerë diskrete në të njëjtën kohë, dhe shpesh integrohen me një ndërprerës të shtytshëm për funksionet e llojit të përzgjedhjes. Ato vijnë në të gjitha format dhe madhësitë, por vargu i çmimeve më të ulët është i vështirë për tu ndërlidhur siç shpjegohet më poshtë.
Ka artikuj të panumërt në lidhje me detajet e punës dhe mënyrat e përdorimit të koduesve Rotary, dhe kode të shumta mostre dhe biblioteka se si t'i përdorin ato. Problemi i vetëm është se asnjëri prej tyre nuk funksionon 100% i saktë me modulet rrotulluese kineze të çmimit më të ulët.
Hapi 1: Kodifikuesit rrotullues brenda
Pjesa rrotulluese e kodifikuesit ka tre kunja (dhe dy të tjerë për pjesën e ndërrimit opsional). Njëra është pika e përbashkët (GND e zezë), dy të tjerat janë për përcaktimin e drejtimit kur rrotullohet çelësi (ato shpesh quhen CLK blu dhe DT të kuqe). Të dyja këto janë bashkangjitur në një pin hyrës PULLUP të mikrokontrolluesit, duke e bërë nivelin HIGH leximin e tyre të paracaktuar. Kur çelësi kthehet përpara (ose në drejtim të akrepave të orës), së pari CLK blu bie në nivelin LOW, pastaj DT e kuqe ndjek. Duke u kthyer më tej, CLK blu kthehet në HIGH, atëherë ndërsa arna e zakonshme GND largohet nga të dy kunjat e lidhjes, DT e kuqe gjithashtu ngrihet përsëri në HIGH. Duke plotësuar kështu një shënim të plotë FWD (ose në drejtim të akrepave të orës). E njëjta gjë vlen edhe për drejtimin tjetër BWD (ose kundër akrepave të orës), por tani e kuqja bie e para, dhe bluja kthehet e fundit, siç tregohet në dy imazhet përkatësisht.
Hapi 2: Mjerimi që shkakton dhimbje të vërteta për shumë njerëz
Problem i zakonshëm për hobistët Arduino, se modulet e lirë të kodimit Rotary kërcejnë ndryshime shtesë në nivelet e prodhimit, duke shkaktuar lexime shtesë dhe të gabuara të numërimit të drejtimit. Kjo parandalon numërimin e përsosur dhe e bën të pamundur integrimin e këtyre moduleve në projekte të sakta rrotulluese. Këto kërcime shtesë shkaktohen nga lëvizjet mekanike të arnave mbi kunjat e lidhjes, madje edhe aplikimi i kondensatorëve shtesë nuk mund t'i eliminojë ato plotësisht. Kërcimet mund të shfaqen kudo në ciklet e plota të shënimit dhe ilustrohen me skenarë të jetës reale në imazhe.
Hapi 3: Zgjidhja e makinës së gjendjes së fundme (FSM)
Imazhi tregon hapësirën e plotë të gjendjes së ndryshimeve të mundshme të nivelit për dy kunjat (CLK blu dhe DT e kuqe), si për kërcimet e sakta ashtu edhe ato të rreme. Bazuar në këtë makinë shtetërore, mund të programohet një zgjidhje e plotë që funksionon gjithmonë 100% e saktë. Për shkak se asnjë vonesë filtrimi nuk është e nevojshme në këtë zgjidhje, është gjithashtu më e shpejta e mundshme. Një përfitim tjetër i ndarjes së hapësirës së gjendjes së kunjave nga mënyra e punës është se dikush mund të aplikojë mënyrat e votimit ose të ndërpresë sipas dëshirës së tij. Sondazhi ose ndërprerjet mund të zbulojnë ndryshimet e nivelit në kunjat dhe një rutinë e veçantë do të llogarisë gjendjen e re bazuar në gjendjen aktuale dhe ngjarjet aktuale të ndryshimeve të nivelit.
Hapi 4: Kodi Arduino
Kodi më poshtë numëron rriqrat FWD dhe BWD në monitorin serik dhe gjithashtu integron funksionin opsional të kalimit.
// Peter Csurgay 2019-04-10
// Kunjat e rrotullimit të hartuar në portet Arduino
#define SW 21 #define CLK 22 #define DT 23
// Vlera aktuale dhe e mëparshme e numëruesit të akorduar nga rrotulluesi
int curVal = 0; int prevVal = 0;
// Shtatë gjendje të FSM (makinë me gjendje të fundme)
#përcakto IDLE_11 0 #përcakto SCLK_01 1 #përcakto SCLK_00 2 #përcakto SCLK_10 3 #përcakto SDT_10 4 #përcakto SDT_00 5 #përcakto SDT_01 6 gjendje int = IDLE_11;
void setup () {
Serial.filloj (250000); Serial.println ("Fillo …"); // Niveli i Lartë do të jetë i paracaktuar për të gjitha kunjat pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // Si CLK ashtu edhe DT do të shkaktojnë ndërprerje për të gjitha ndryshimet e nivelit attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
lak void () {
// Trajtimi i ndërprerësit opsional i integruar në disa kodues rrotullues nëse (digitalRead (SW) == LOW) {Serial.println ("Presed"); ndërsa (! digitalRead (SW)); } // Çdo ndryshim në vlerën e kundërsulmit shfaqet në Serial Monitor nëse (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// Kalimet e Makinës Shtetërore për ndryshimet e nivelit CLK
void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (gjendja == IDLE_11) gjendja = SCLK_01; tjetër nëse (gjendja == SCLK_10) gjendja = SCLK_00; tjetër nëse (gjendja == SDT_10) gjendja = SDT_00; } else {if (gjendja == SCLK_01) gjendja = IDLE_11; tjetër nëse (gjendja == SCLK_00) gjendja = SCLK_10; tjetër nëse (gjendja == SDT_00) gjendja = SDT_10; tjetër nëse (gjendje == SDT_01) {gjendje = IDLE_11; curVal--; }}}
// Kalimet e Makinës Shtetërore për ndryshimet e nivelit DT
void rotaryDT () {if (digitalRead (DT) == LOW) {if (gjendja == IDLE_11) gjendja = SDT_10; tjetër nëse (gjendje == SDT_01) gjendje = SDT_00; tjetër nëse (gjendja == SCLK_01) gjendja = SCLK_00; } else {if (gjendja == SDT_10) gjendja = IDLE_11; tjetër nëse (gjendja == SDT_00) gjendja = SDT_01; tjetër nëse (gjendja == SCLK_00) gjendja = SCLK_01; tjetër nëse (gjendje == SCLK_10) {gjendje = IDLE_11; curVal ++; }}}
Hapi 5: Integrimi pa të meta
Ju mund të kontrolloni në videon e bashkangjitur që zgjidhja FSM funksionon me saktësi dhe shpejt edhe në rast të kodifikuesve rrotullues me rreze të ulët me efekte të ndryshme sporadike të kërcimit.
Recommended:
Një zgjidhje e përballueshme e vizionit me krahun robot bazuar në Arduino: 19 hapa (me fotografi)
Një zgjidhje e përballueshme e vizionit me krahun robot të bazuar në Arduino: Kur flasim për vizionin e makinerisë, gjithmonë ndjehet aq e paarritshme për ne. Ndërsa bëmë një demonstrim vizioni me burim të hapur, i cili do të ishte super i lehtë për t'u bërë për të gjithë. Në këtë video, me kamerën OpenMV, pavarësisht se ku është kubi i kuq, roboti arrin
SKY CAM një zgjidhje e kamerës ajrore: 10 hapa (me fotografi)
SKY CAM një zgjidhje për kamerën ajrore: Ky udhëzues do t'ju tregojë se si kam bërë një telekomandë (gjysmë autonome) të sistemit të kabllove të kabllove për Projektin tim të Produkteve Elektronike GCSE në shkollë dhe shpresoj t'ju mundësojë që të jeni në gjendje të krijoni sistemin tuaj! Ky është menduar si një udhëzues i përafërt
Një zgjidhje e thjeshtë për problemin e dorës famëkeqe të ndihmës: 9 hapa
Një zgjidhje e thjeshtë për problemin e dorës famëkeqe të ndihmës: Kohët e fundit, bleva një nga ato duart e lira ndihmuese dhe fillova të vërej se " duart " ishin të lodhur, kështu që unë u përpoqa të gjeja një zgjidhje të zgjuar (dhe sigurisht të lirë) për këtë problem të vogël Problemi është ky: Vida e vendosur ishte
Përdorimi i një HDD me madhësi të plotë në një laptop: 3 hapa
Përdorimi i një HDD të Madhësisë së Plotë në një Laptop: Shkurtimisht: Si të lidhni një hard disk të rregullt me madhësi të plotë deri në punë me laptopin tuaj. Kam pasur disa herë kur keni nevojë të përdorni një hard disk të krijuar për një Laptop në një sistemi desktop, të themi për formatimin, ose kopjimin e sasive masive të skedarit
Ndërfaqja e një thirrjeje rrotulluese të telefonit me një Arduino: 6 hapa (me fotografi)
Ndërfaqja e telefonit rrotullues Dial me një Arduino: Një telefon i vjetër rrotullues mund të përdoret për një numër qëllimesh në projektet tuaja Arduino - përdorni atë si një pajisje të re hyrëse ose përdorni Arduino për të ndërlidhur një telefon rrotullues me kompjuterin tuaj. Ky është një udhëzues shumë themelor që përshkruan se si të ndërlidhni numrin në një