สารบัญ:

บทช่วยสอนของ Rotary Encoder ด้วย Arduino: 6 ขั้นตอน
บทช่วยสอนของ Rotary Encoder ด้วย Arduino: 6 ขั้นตอน

วีดีโอ: บทช่วยสอนของ Rotary Encoder ด้วย Arduino: 6 ขั้นตอน

วีดีโอ: บทช่วยสอนของ Rotary Encoder ด้วย Arduino: 6 ขั้นตอน
วีดีโอ: Lesson 9 - Servo and the Rotary Encoder 2024, พฤศจิกายน
Anonim
บทแนะนำตัวเข้ารหัสแบบหมุนด้วย Arduino
บทแนะนำตัวเข้ารหัสแบบหมุนด้วย Arduino

เครื่องเข้ารหัสแบบหมุนเป็นส่วนประกอบอิเล็กทรอนิกส์ที่สามารถตรวจสอบการเคลื่อนไหวและตำแหน่งเมื่อหมุน ตัวเข้ารหัสแบบหมุนใช้เซ็นเซอร์แบบออปติคัลที่สามารถสร้างพัลส์เมื่อตัวเข้ารหัสแบบหมุนหมุน การประยุกต์ใช้เครื่องเข้ารหัสแบบโรตารี่โดยปกติเป็นเครื่องติดตามการเคลื่อนไหวแบบกลไกหรือแบบหุ่นยนต์ยังสามารถใช้สำหรับการเลือกเมนูบนจอแสดงผลได้อีกด้วย ตัวเข้ารหัสแบบหมุนมีเอาต์พุตสองแบบเพื่อให้สามารถแยกความแตกต่างระหว่างการหมุนเชิงลบ (CW) และค่าบวก (CCW) และยังมีปุ่มเดียว

ขั้นตอนที่ 1: Pulse Flow ของ Rotary Encoder

การไหลของพัลส์ของตัวเข้ารหัสแบบหมุน
การไหลของพัลส์ของตัวเข้ารหัสแบบหมุน

การไหลของพัลส์ที่เกิดจากตัวเข้ารหัสแบบหมุนต่อไปนี้จะเหมือนกับภาพด้านบน

ขั้นตอนที่ 2: Pinout ของ Rotary Encoder

Pinout ของ Rotary Encoder
Pinout ของ Rotary Encoder

คำอธิบาย:

  • GND GND
  • + +5V
  • ปุ่ม SW ของตัวเข้ารหัสแบบหมุนเมื่อกด
  • DT Data
  • CLK Data 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: รหัส

รหัส
รหัส

ในบทช่วยสอนต่อไปนี้ซึ่งจะใช้เป็นการขัดจังหวะคือ PIN 2 ของ Arduino Uno ในขณะที่ PIN 3 ใช้เป็นอินพุตปกติเท่านั้น

#define encoder0PinA 2#define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); pinMode(ตัวเข้ารหัส0PinA, INPUT_PULLUP); pinMode(ตัวเข้ารหัส0PinB, INPUT_PULLUP); pinMode(ตัวเข้ารหัส0Btn, INPUT_PULLUP); แนบInterrupt(0, doEncoder, CHANGE); } int valRotary, LastValRotary; วงเป็นโมฆะ () { int btn = digitalRead (encoder0Btn); Serial.print(btn); Serial.print(" "); Serial.print(valRotary); ถ้า (valRotary>lastValRotary) { Serial.print (" CW"); } ถ้า (valRotary {

Serial.print("ทวนเข็มนาฬิกา");

} lastValRotary = valRotary; Serial.println(" "); ล่าช้า (250); } โมฆะ doEncoder () { if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) { encoder0Pos ++; } อื่น ๆ { encoder0Pos--; } valRotary = encoder0Pos/2.5; }

ในบรรทัดที่ 10 ของภาพร่างด้านบนใช้เพื่อเปิดใช้งานการขัดจังหวะของพิน 2 Arduino Uno ในฟังก์ชัน "doEncoder" จะคำนวณจากเครื่องเข้ารหัสแบบหมุน หากค่า DT และ CLK (พินอินเทอร์รัปต์ของ Arduino Uno) เท่ากัน ตัวแปร "encoder0Pos" จะเพิ่มขึ้น/เพิ่ม นอกเหนือจากเงื่อนไขนั้น ตัวแปร "encoder0Pos" จะลดลง

ขั้นตอนที่ 5: คำอธิบาย

ค่า ValRotary คือค่าของจำนวนขั้นตอนที่รันอยู่ ค่า ValRotary ได้มาจากค่าการอ่านตัวเข้ารหัสเซ็นเซอร์แบบโรตารี่หารด้วย 2.5 ได้ค่า 2.5 จากการทดสอบ เนื่องจากขั้นตอนหนึ่งของตัวเข้ารหัสแบบโรตารี่อาจเกิน 1 ดังนั้นให้หารด้วย 2.5 สำหรับค่าตาม perstep และการเพิ่มความล่าช้าในการอ่านด้วย

ขณะที่อยู่ในบรรทัดที่ 19 - 25 เป็นโปรแกรมเพื่อตรวจสอบว่าเครื่องเข้ารหัสแบบโรตารี่แบบหมุน CW หรือ CCW คำอธิบายของบรรทัดที่ 19 - 25 คือเมื่อค่าที่อ่านได้ของตัวเข้ารหัสแบบหมุนในปัจจุบันมากกว่าข้อมูลแบบหมุนก่อนหน้าแล้วแสดงเป็น CW ในขณะที่ถ้าการอ่านปัจจุบันมีขนาดเล็กกว่าการอ่านก่อนหน้านี้ก็ระบุเป็น CCW

ขั้นตอนที่ 6: เอาท์พุต

เอาท์พุต
เอาท์พุต

1 = ค่าปุ่มสตาร์ทของโรตารีเมื่อไม่ได้กด

แนะนำ: