Mündəricat:

Arduino ilə Rotary Encoder Təlimatı: 6 Addım
Arduino ilə Rotary Encoder Təlimatı: 6 Addım

Video: Arduino ilə Rotary Encoder Təlimatı: 6 Addım

Video: Arduino ilə Rotary Encoder Təlimatı: 6 Addım
Video: Как построить ПЛК Arduino с модулем часов реального времени и поворотным энкодером 2024, Noyabr
Anonim
Arduino ilə Rotary Encoder Təlimatı
Arduino ilə Rotary Encoder Təlimatı

Rotary encoder, fırlanarkən hərəkəti və mövqeyi izləyə bilən elektron komponentdir. Rotary encoder, fırlanan enkoder fırlandıqda impuls yarada bilən optik sensorlar istifadə edir. Döner kodlayıcıdan ümumiyyətlə mexaniki və ya robotlu bir hərəkət monitoru olaraq istifadə etmək də ekranda menyu seçimi üçün istifadə edilə bilər. Dönər kodlayıcının mənfi (CW) və müsbət (CCW) fırlanmasını ayırd edə bilməsi üçün iki çıxışı var və eyni zamanda bir düyməyə malikdir.

Addım 1: Rotary Encoderin Pulse Flow

Rotary Encoderin Pulse Flow
Rotary Encoderin Pulse Flow

Aşağıdakı fırlanan kodlayıcı tərəfindən yaranan nəbz axını yuxarıdakı şəklə bənzəyir.

Addım 2: Rotary Encoder -in tapılması

Rotary Encoder pinout
Rotary Encoder pinout

İzahat:

  • GND GND
  • + 5V
  • Basıldıqda fırlanan kodlayıcının SW düyməsi
  • DT Məlumatları
  • CLK Məlumatı 2

DT və ya CLK pinlərindən biri Arduino Uno -nun kəsmə ayağına, ya da DT və CLK -nin hər ikisi də kəsmə pininə bağlanmalıdır.

Addım 3: Şematik

Sxematik
Sxematik
  • GND və GND Arduino Uno
  • + 5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK və PIN2 Arduino Uno

Addım 4: Kod

Kod
Kod

Növbəti dərsdə, Arduino Uno -nun PİN 2 -si, PİN 3 yalnız adi giriş kimi istifadə olunur.

#decine encoder0PinA 2 #encoder0PinB müəyyən #3 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. çap (btn); Serial.print (""); Serial. çap (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } əgər (valRotary {

Serial.print ("CCW");

} lastValRotary = valRotary; Serial.println (""); gecikmə (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } başqa {encoder0Pos--; } valRotary = encoder0Pos/2.5; }

Yuxarıdakı eskizin 10 -cu sətrində, pin 2 Arduino Uno -nun kəsilməsini təmin etmək üçün istifadə olunur. "DoEncoder" funksiyasında fırlanan kodlayıcıdan hesablanır. DT və CLK (Arduino Uno pin kəsmə) dəyəri eynidırsa, "encoder0Pos" dəyişəni artırılacaq / əlavə olunacaq, bu şərtə əlavə olaraq "encoder0Pos" dəyişəninin azalması baş verir.

Addım 5: İzahat

ValRotary dəyəri, işləyən addımların sayının dəyəridir. ValRotary dəyəri, 2.5 -ə bölünən fırlanan sensor kodlayıcı oxu dəyərindən əldə edilir. Testdən 2.5 dəyəri alınır, çünki fırlanan kodlayıcının bir addımı 1 -dən çox ola bilər, buna görə də dəyərə görə 2,5 -ə bölün və oxunan gecikmənin əlavə olunmasına görə.

19 - 25 -ci sətirdə, fırlanan dönər kodlayıcı CW və ya CCW olub olmadığını müəyyən etmək üçün bir proqramdır. 19 - 25 -ci sətirlərin izahı, indiki dönər kodlayıcının oxunuşunun CW olaraq ifadə olunan əvvəlki fırlanan məlumatlardan daha böyük olmasıdır. Halbuki, indiki oxunuş əvvəlki oxunuşdan kiçikdirsə, CCW olaraq göstərilir.

Addım 6: Çıxış

Çıxış
Çıxış

1 = dönmənin basılmadığı zaman başlanğıc düyməsinin dəyəri

Tövsiyə: