Jak používat rotační kodéry s Arduino

  • Kodéry jsou elektromechanická zařízení, která převádějí pohyb na digitální signály.
  • Od potenciometrů se liší tím, že umožňují neomezené otáčky a nenastavují odpor.
  • Jsou velmi užitečné v projektech, kde je potřeba přesné ovládání rotace a směru osy.
  • Implementace v Arduinu je jednoduchá a umožňuje měření polohy i směru otáčení.

kodér arduino

L rotační kodéry Jsou to elektronické součástky, které si získaly oblibu v DIY projektech a v ekosystému Arduino. Tato zařízení umožňují čtení pohyb osy, což se promítá do možnosti sledování rychlost a úhlová poloha různých systémů. Avšak i přes to, jak užitečné mohou být, jsou často zaměňovány s jinými zařízeními, jako je např potenciometry, což může vést k nedorozuměním ohledně jeho použití a funkčnosti.

V tomto článku podrobně vysvětlíme, co rotační kodéry, jak fungují a jak je můžete použít s Arduinem. Probereme také propojení, použití kódu a několik praktických příkladů, které vám pomohou jej efektivně integrovat do vašich projektů. Než se však pustíme do technických detailů, je důležité pochopit, co dělá toto zařízení jedním z oblíbených v projektech elektroniky.

Co je rotační kodér?

Schéma krokového motoru Nema 17 a Arduino

Un rotační kodér Je to elektromechanické zařízení, které převádí rotační pohyb hřídele na řadu signálů, obvykle digitálních. Tyto signály mohou být použity systémem jako Arduino k interpretaci informací souvisejících s rychlost otáčení, pozice osy a dokonce i směr otáčení. Na rozdíl od potenciometrů, které mají limit na počet otáček, se enkodéry mohou otáčet neomezeně dlouho.

Existují různé typy rotačních kodérů, ale lze je rozdělit do dvou velkých kategorií: absolutní e přírůstkové. Absolutní enkodéry poskytují přesné čtení polohy hřídele za všech okolností, bez ohledu na to, kolik otáček hřídel udělal. Na druhou stranu, inkrementální kodéry zaznamenávají pouze relativní pohyb z počáteční polohy, aniž by měl absolutní odkaz na úhel.

Nejběžnějším typem kodéru v projektech DIY nebo Arduino je inkrementální kodér. Jsou levné, lze je snadno najít a lze je použít pro širokou škálu aplikací, jako je mimo jiné ovládání hlasitosti, nastavení jasu LCD obrazovek. Mnoho z nich navíc obsahuje tlačítko, které pomáhá integrovat další ovládací akce do vašich projektů.

Jak funguje rotační kodér

Srdce rotačního kodéru je tvořeno řadou přerušení které se aktivují pokaždé, když se hřídel otočí. To generuje digitální signál, který lze přečíst elektronickým zařízením. Tento typ kodéru má obvykle dva hlavní výstupy, které generují signály v kvadraturní fázi. To znamená, že mezi oběma signály je posun o 90 stupňů, což umožňuje nejen počítat otáčky, ale také určit směr otáčení (ve směru nebo proti směru hodinových ručiček).

Zařízení poskytuje počet impulsů na otáčku, a podle počtu impulsů můžeme přesněji určit pohyb osy. Standardní kodér může mít kdekoli od 20 do více než 256 pulzů na otáčku, v závislosti na modelu. The počítají se pulzy pomocí kvadraturního systému, který také umožňuje určit, zda byla rotace ve směru hodinových ručiček (CW) nebo proti směru hodinových ručiček (CCW), což je velmi praktické pro rotační systémy. ovládání a navigace.

Kromě toho mohou tato zařízení obsahovat tlačítko, které působí při stlačení hřídele. Toto tlačítko umožňuje zaregistrovat akci, jako by to bylo tlačítko, což rozšiřuje možnosti použití. Stručně řečeno, kodér umožňuje nejen zaznamenávat rotaci osy, ale i její adresa y pozice v reálném čase.

Rozdíly mezi otočným enkodérem a potenciometrem

Je velmi běžné zaměňovat a rotační kodér s jedním potenciometr vzhledem k jejich podobnému vzhledu, ale existují zásadní rozdíly, které je oddělují. Potenciometr upravuje hodnotu odporu podle úhlu natočení a poskytuje analogový výstup. Naproti tomu rotační kodér generuje řadu digitálních impulsů, které představují rotaci hřídele. Dalším klíčovým rozdílem jsou kodéry může se donekonečna otáčet, zatímco potenciometry mají fyzický limit na počet otáček.

Z těchto důvodů jsou enkodéry ideální pro situace, kdy je vyžadována nepřetržitá a přesná kontrola otáčení, např. v systémech řízení motoru, zatímco potenciometry se běžně používají k úpravě statických parametrů, jako je hlasitost nebo jas.

Připojení kodéru k Arduinu

Připojte rotační kodér k a Arduino Je to poměrně jednoduché. V závislosti na modelu bude mít kodér tři hlavní výstupy: dva pro kanály A a B a jeden pro tlačítko. Tlačítko se připojuje k digitálnímu vstupu Arduino, zatímco kanály A a B se připojují ke dvěma dalším digitálním vstupům.

Pro získání přesného čtení pohybu kodéru je vhodné použít kolíky přerušení na Arduinu pro kanály A a B. To však není vždy nutné. Pokud potřebujete pouze jednoduchou nebo dvojitou přesnost, můžete získat hodnoty periodickým dotazováním těchto výstupů (polling), i když to ovlivní účinnost kódu.

Spojení pro typický projekt by bylo něco takového:

  • Kanál A připojený k D9
  • Kanál B připojený k D10
  • Tlačítko připojené k D11

Je důležité zajistit, aby piny vybrané pro přerušení byly správné, protože ne všechny piny na deskách Arduino podporují přerušení. Stručně řečeno, můžete připojit kodér bez přerušení, ale přesnost bude nižší.

Kód pro použití otočného kodéru s Arduinem

Arduino IDE, datové typy, programování

Kód pro čtení kodéru pomocí Arduina je jednoduchý. Níže vám ukážeme základní příklad pro čtení počtu pulzů generovaných v kanálu A, který také určuje směr otáčení s pomocí kanálu B. Jedná se o jednoduchou aproximaci pomocí metody Polling, ale pokud potřebujete větší přesnost, můžete upravit kód, se kterým budete pracovat přerušení.

const int channelPinA = 9; 
const int channelPinB = 10; 
int prevStateChannelA = 0;
int value = 0;
unsigned long currentTime = 0;
unsigned long prevTime = 0;
void setup() { 
 Serial.begin(9600); 
 pinMode(channelPinA, INPUT); 
 pinMode(channelPinB, INPUT); 
 prevStateChannelA = digitalRead(channelPinA); 
} 
void loop() { 
 currentTime = millis(); 
 int currentStateChannelA = digitalRead(channelPinA); 
 if (currentStateChannelA != prevStateChannelA) { 
 if (digitalRead(channelPinB) != currentStateChannelA) { 
 value++; 
 } else { 
 value--; 
 } 
 Serial.println(value); 
 prevStateChannelA = currentStateChannelA; 
 currentTime = millis(); 
 } 
}

Tento kód detekuje změnu stavu na kanálu A a vyhodnotí kanál B, aby určil směr, ve kterém byl kodér otočen. Při každé změně hodnoty kód aktualizuje počet zaznamenaných pulzů a vytiskne hodnotu na sériový monitor.

Příklady běžného použití

L rotační kodéry Používají se v široké škále profesionálních i domácích aplikací. V oblasti projektů Arduino je lze použít k úpravě parametrů v reálném čase, jako je ovládání směru mobilního robota, regulace hlasitosti reproduktoru nebo nastavení jasu LCD obrazovky. Jsou také široce používány v řídicích systémech pro krokové motory nebo serva, kde je vyžadováno přesné řízení polohy os.

Jednou z nejzajímavějších aplikací je vytváření rozhraní s vizuální nebo sluchovou zpětnou vazbou, kde kodér nejen upravuje parametr, ale také poskytuje uživateli fyzická zpětná vazba jeho otáčením, čehož nelze dosáhnout tradičními tlačítky.

Kromě toho jsou enkodéry mimořádně užitečné jako náhrady za potenciometry v systémech, které vyžadují vyšší stupeň odolnosti, protože nemají žádné omezení otáčení, což snižuje mechanické opotřebení.

El použití kodérů v programování robotů a autonomních systémů také roste. Mohou být připojeny přímo ke kolům robota a měřit přesný pohyb, a tak optimalizovat výpočty přemístění a řízení, zlepšit efektivitu a navigační schopnost robotů.

Rotační kodéry si také našly cestu do vývoje lékařských přístrojů a průmyslových ovládacích panelů, kde je vyžadována neustálá kontrola pohybu pro dosažení milimetrové přesnosti u strojů.

Celkově jsou kodéry všestrannou a ekonomickou možností pro projekty, kde je klíčové přesné měření rotace.

Pokud hledáte ekonomické a efektivní řešení pro své projekty Arduino, použití rotační kodéry vám může poskytnout vynikající alternativu k jiným analogovým způsobům ovládání, jako jsou potenciometry. Jejich schopnost poskytovat přesné ovládání v širokém rozsahu otáčení je činí ideálními pro širokou škálu aplikací.