Innehållsförteckning:
- Steg 1: Rotary Encoders inuti
- Steg 2: Elände som orsakar verklig smärta för många
- Steg 3: Finite State Machine (FSM) -lösning
- Steg 4: Arduino -kod
- Steg 5: Felfri integration
Video: En komplett Arduino roterande lösning: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Rotary encoders är vridbara kontrollknappar för elektroniska projekt, som ofta används med Arduino -familjens mikrokontroller. De kan användas för att finjustera parametrar, navigera i menyer, flytta objekt på skärmen, ange värden av något slag. De är vanliga ersättare för potentiometrar, eftersom de kan roteras mer exakt och oändligt, de ökar eller minskar ett diskret värde i taget och integreras ofta med en skjutbar omkopplare för urvalsfunktioner. De finns i alla former och storlekar, men den lägsta prisklassen är svår att ansluta till som förklaras nedan.
Det finns otaliga artiklar om arbetsdetaljer och användningslägen för Rotary encoders, och många exempelkoder och bibliotek om hur man använder dem. Det enda problemet är att ingen av dem fungerar 100% exakt med de lägsta prisklasserna kinesiska roterande moduler.
Steg 1: Rotary Encoders inuti
Den roterande delen av givaren har tre stift (och två till för den valfria omkopplingsdelen). Den ena är gemensam grund (svart GND), de andra två är för att bestämma riktning när ratten vrids (de kallas ofta blå CLK och röd DT). Båda dessa är anslutna till en PULLUP -ingångsstift på mikrokontrollen, vilket gör nivån HÖG till deras standardavläsning. När vredet vrids framåt (eller medurs) faller först den blå CLK till nivå LÅG, sedan följer den röda DT. När vi vänder oss ytterligare, stiger blå CLK tillbaka till HIGH, då den gemensamma GND -patchen lämnar båda anslutningstapparna stiger röda DT också tillbaka till HIGH. Sålunda avslutas en hel bock FWD (eller medurs). Samma sak går åt andra hållet BWD (eller moturs), men nu faller rött först och blått stiger tillbaka sist som visas i de två nivåbilderna.
Steg 2: Elände som orsakar verklig smärta för många
Vanligt problem för Arduino -hobbyister, att billiga Rotary encoder -moduler studsar extra förändringar i utgångsnivåer, vilket orsakar extra och fel riktningsräkning. Detta förhindrar felfri räkning och gör det omöjligt att integrera dessa moduler i exakta roterande projekt. Dessa extra studsar orsakas av de mekaniska rörelserna hos lapparna över anslutningstapparna, och även applicering av extra kondensatorer kan inte eliminera dem helt. Bounces kan visas var som helst i hela fästingcyklerna och illustreras av verkliga scenarier på bilderna.
Steg 3: Finite State Machine (FSM) -lösning
Bilden visar hela tillståndsutrymmet för de möjliga nivåändringarna för de två stiften (blå CLK och röd DT), både för korrekta och falska studsar. Baserat på denna tillståndsmaskin kan en komplett lösning programmeras som alltid fungerar 100% korrekt. Eftersom inga filtreringsfördröjningar är nödvändiga i denna lösning är det också snabbast möjligt. En annan fördel med att skilja pinnarnas tillståndsutrymme från arbetsläget är att man kan tillämpa både polling- eller avbrottslägen efter eget tycke. Polling eller avbrott kan upptäcka nivåförändringar på stift och en separat rutin kommer att beräkna det nya tillståndet baserat på nuvarande tillstånd och faktiska händelser med nivåändringar.
Steg 4: Arduino -kod
Koden nedan räknar FWD- och BWD -fästingarna på den seriella bildskärmen och integrerar också den valfria switchfunktionen.
// Peter Csurgay 2019-04-10
// Stift för roteraren mappas till Arduino -portar
#define SW 21 #define CLK 22 #define DT 23
// Aktuellt och tidigare värde för räknaren som ställts in av roteraren
int curVal = 0; int prevVal = 0;
// Sju tillstånd av FSM (finite state machine)
#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 …"); // Nivå HÖG kommer att vara standard för alla stift pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // Både CLK och DT utlöser avbrott för alla nivåändringar attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
void loop () {
// Hantering av den valfria omkopplaren integrerad i vissa roterande kodare om (digitalRead (SW) == LOW) {Serial.println ("Pressad"); medan (! digitalRead (SW)); } // Alla ändringar i räknarvärdet visas i Serial Monitor om (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// State Machine -övergångar för CLK -nivåändringar
void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; annars om (tillstånd == SCLK_10) tillstånd = SCLK_00; annars om (tillstånd == SDT_10) tillstånd = SDT_00; } annat {if (state == SCLK_01) state = IDLE_11; annars om (tillstånd == SCLK_00) tillstånd = SCLK_10; annars om (tillstånd == SDT_00) tillstånd = SDT_10; annars om (tillstånd == SDT_01) {tillstånd = IDLE_11; curVal--; }}}
// State Machine -övergångar för DT -nivåändringar
void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; annars om (tillstånd == SDT_01) tillstånd = SDT_00; annars om (tillstånd == SCLK_01) tillstånd = SCLK_00; } annat {if (state == SDT_10) state = IDLE_11; annars om (tillstånd == SDT_00) tillstånd = SDT_01; annars om (tillstånd == SCLK_00) tillstånd = SCLK_01; annars om (tillstånd == SCLK_10) {tillstånd = IDLE_11; curVal ++; }}}
Steg 5: Felfri integration
Du kan kontrollera i den bifogade videon att FSM -lösningen fungerar exakt och snabbt även vid roterande omkodare med låga avstånd med olika sporadiska studs -effekter.
Rekommenderad:
IOT -lösning för delcykeln: 6 steg
IOT -lösning för delcykeln: Delcykeln är mycket populär i Kina nuförtiden. Det finns mer än 10 märken för delningscykel på marknaden, och “ mobike ” är den mest kända, den har mer än 100 miljoner registrerade användare och har spridit sig till andra städer
Använda fingeravtryckssensor för tidsmängd i kombination med XAMP -lösning: 6 steg (med bilder)
Använda fingeravtryckssensor för tid närvaro i kombination med XAMP -lösning: För ett skolprojekt letade vi efter en lösning på hur vi kan spåra elevernas närvaro. Många av våra elever kommer sent. Det är ett tråkigt jobb att kontrollera deras närvaro. Å andra sidan är det mycket diskussion eftersom studenter ofta kommer att säga
Såg LoRa IoTea -lösning: 5 steg
Seeed LoRa IoTea Solution: Ett system för automatisk insamling av information som tillämpas på teplantage. Det är en del av intelligent jordbruksinformationsinsamling
Såg IoTea LoRa -lösning (uppdatering 1811): 5 steg
Seeed IoTea LoRa Solution (Update 1811): Internet+ är ett populärt koncept nu. Den här gången försökte vi Internet plus jordbruk för att få en te -trädgård att växa ut på Internet -teet
Såg IoTea LoRa -lösning (med Azure, uppdatering 1812): 5 steg
Seeed IoTea LoRa Solution (with Azure, Update 1812): Microsoft Azure är en molntjänst som ger mer kraftfull och stabil datorkraft. Den här gången försökte vi skicka vår IoTea -data till den