Мазмуну:

Rotary Encoder Arduino менен үйрөткүч: 6 кадам
Rotary Encoder Arduino менен үйрөткүч: 6 кадам

Video: Rotary Encoder Arduino менен үйрөткүч: 6 кадам

Video: Rotary Encoder Arduino менен үйрөткүч: 6 кадам
Video: BTT GTR v1 0 TMC5160 Pro with Sensor less Homing 2024, Ноябрь
Anonim
Rotary Encoder Arduino менен үйрөткүч
Rotary Encoder Arduino менен үйрөткүч

Ротари коддоочу - айлануу учурунда кыймылды жана абалды көзөмөлдөөгө жөндөмдүү электрондук компонент. Ротари коддоочу айлануучу кодер айланып турганда импульстарды пайда кыла турган оптикалык сенсорлорду колдонот. Айлануучу кодерди адатта механикалык же роботтук кыймыл монитору катары колдонуу дисплейдеги менюну тандоо үчүн да колдонулушу мүмкүн. Ротари кодердин терс (CW) жана оң (CCW) айланууну айырмалай алышы үчүн эки жолу бар, ошондой эле бир баскычы бар.

1 -кадам: Ротари коддогучтун импульс агымы

Ротари коддогучтун импульс агымы
Ротари коддогучтун импульс агымы

Төмөнкү айлануучу коддогучтун импульс агымы жогорудагы сүрөттө окшош.

2 -кадам: Ротари Encoder'дин Pinout

Rotary Encoder'дин Pinout
Rotary Encoder'дин Pinout

Түшүндүрмө:

  • GND GND
  • + + 5V
  • Басылганда айлануучу кодердин SW баскычы
  • DT маалыматтар
  • CLK маалыматтар 2

DT же CLK казыктарынын бири Arduino Uno үзүлүү бутуна туташтырылышы керек, же DT менен CLK экөө тең үзгүлтүк пинине туташкан.

3 -кадам: схемалык

Схемалык
Схемалык
  • GND à GND Arduino Uno
  • + à + 5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK à PIN2 Arduino Uno

4 -кадам: Код

Code
Code

Кийинки окуу куралында, үзгүлтүк катары колдонула турган PIN 2 Arduino Uno, ал эми PIN 3 кадимки киргизүү катары гана колдонулат.

#define encoder0PinA 2 #encoder0PinB аныктоо 3 #decine encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {

Serial.print ("CCW");

} lastValRotary = valRotary; Serial.println (""); кечигүү (250); } жараксыз doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = encoder0Pos/2.5; }

Жогорудагы эскиздин 10 -сабында 2 pin Arduino Uno үзүлүшүн иштетүү үчүн колдонулат. "DoEncoder" функциясында айлануучу коддогучтан эсептелет. Эгерде DT жана CLK мааниси (Arduino Uno пин үзүлүшү) бирдей болсо, анда "encoder0Pos" өзгөрмөсү көбөйтүлөт / кошулат, бул шартка кошумча "encoder0Pos" өзгөрмөсү азаят.

5 -кадам: түшүндүрмө

ValRotary мааниси - иштеп жаткан кадамдардын санынын мааниси. ValRotary мааниси 2,5ке бөлүнгөн айлануучу сенсор коддогучунун окуу маанисинен алынат. Сыноодон 2,5 мааниси алынат, анткени айлануучу коддогучтун бир кадамы 1ден ашышы мүмкүн, андыктан баскычка жана окуу кечигүүсүнө жараша анын мааниси үчүн 2,5ке бөлүңүз.

19 - 25 линиясында болгондо, CW же CCW айлануучу коддоочу экендигин аныктоочу программа. 19 - 25 -линиялардын түшүндүрмөсү, учурдагы айлануучу коддогучтун окулушу мурунку айлануучу маалыматтан чоң болгондо, CW катары берилет. Ал эми, эгерде учурдагы окуу мурунку окуудан кичине болсо, анда ал CCW деп айтылат.

6 -кадам: Чыгуу

Output
Output

1 = Ротари басылбай калганда баштоо баскычынын мааниси

Сунушталууда: