Съдържание:

Урок за ротационен енкодер с Arduino: 6 стъпки
Урок за ротационен енкодер с Arduino: 6 стъпки

Видео: Урок за ротационен енкодер с Arduino: 6 стъпки

Видео: Урок за ротационен енкодер с Arduino: 6 стъпки
Видео: How to Build LDmicro Arduino PLC (Adding Real-Time Clock Module & Rotary Encoder) 2024, Юли
Anonim
Урок за ротационен енкодер с Arduino
Урок за ротационен енкодер с Arduino

Ротационният енкодер е електронен компонент, способен да следи движението и позицията при въртене. Ротационният енкодер използва оптични сензори, които могат да генерират импулси, когато ротационният енкодер се върти. Приложението на въртящия се енкодер обикновено като механичен или роботизиран монитор на движение може също да се използва за избор на меню на дисплея. Ротационният енкодер има два изхода, така че да може да прави разлика между отрицателно (CW) и положително (CCW) завъртане и също така има един бутон.

Стъпка 1: Импулсен поток на въртящ се енкодер

Импулсен поток на въртящ се енкодер
Импулсен поток на въртящ се енкодер

Импулсният поток, генериран от следния въртящ се енкодер, е като на снимката по -горе.

Стъпка 2: 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: Код

Код
Код

В следния урок, който ще се използва като прекъсване, е ПИН 2 на Arduino Uno, докато ПИН 3 се използва само като обикновен вход.

#define encoder0PinA 2 #define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (енкодер0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (енкодер0Btn, 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"); } ако (valRotary {

Serial.print ("CCW");

} lastValRotary = valRotary; Serial.println (""); забавяне (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = енкодер0Pos/2.5; }

В ред 10 на скицата по -горе се използва за разрешаване на прекъсването на пин 2 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: Изход

Изход
Изход

1 = стойността на бутона за стартиране на въртящото се устройство, когато не е натиснато

Препоръчано: