สารบัญ:
วีดีโอ: ตัวถอดรหัสโรตารี่อย่างง่าย: 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
คำแนะนำนี้อธิบายวิธีง่ายๆ ในการถอดรหัสตัวเข้ารหัสแบบโรตารี่ตามลำดับโดยใช้ Arduino Uno R3
รูทีนซอฟต์แวร์ขนาดกะทัดรัดใช้เพื่อนับจำนวนการเปลี่ยนภาพ กำจัดการตีกลับของหน้าสัมผัส และกำหนดทิศทางการหมุน ส่วนประกอบเพิ่มเติมและตารางการค้นหาไม่จำเป็น
มีโค้ดเวอร์ชันอินเตอร์รัปต์และแบบไม่อินเตอร์รัปต์ให้
โค้ดเวอร์ชันขัดจังหวะต้องการเพียงพินอินเทอร์รัปต์เดียวเท่านั้น
รูปภาพ:
- ภาพเปิดแสดงเครื่องเข้ารหัสที่ประกอบแล้ว
- ภาพหน้าจอแสดงรหัสสำหรับเวอร์ชันขัดจังหวะและจำนวนเมื่อหมุนเพลาตัวเข้ารหัสตามเข็มนาฬิกาและทวนเข็มนาฬิกา
- วิดีโอแสดงการนับระหว่างการหมุนอย่างรวดเร็ว
ขั้นตอนที่ 1: แผนภาพวงจร
แผนภาพการเดินสายเอ็นโค้ดเดอร์แสดงในรูปที่ 1
สายจัมเปอร์ถูกบัดกรีโดยตรงกับหมุดตัวเข้ารหัส
สลับสายสีน้ำเงินสองเส้นหากทิศทางการนับกลับด้าน
ขั้นตอนที่ 2: รายการชิ้นส่วน
ส่วนต่อไปนี้ได้มาจากhttps://www.aliexpress.com/
- 1 เท่านั้น Arduino UNO R3 พร้อมสาย USB
- 1 เครื่องเข้ารหัสแบบหมุนตามลำดับเท่านั้น (EC11 หรือเทียบเท่า) พร้อมสวิตช์
- 1 ลูกบิดเท่านั้นเพื่อให้เหมาะกับเพลา
- 3 สายจัมเปอร์ Arduino ตัวผู้ต่อตัวผู้เท่านั้น
ขั้นตอนที่ 3: ทฤษฎี
ตัวเข้ารหัสแบบหมุนตามลำดับสร้างคลื่นสี่เหลี่ยมสองคลื่นซึ่งแต่ละคลื่นเคลื่อนที่ 90 องศาดังแสดงในรูปที่ 1
รูปแบบลอจิกที่จุดสัมผัส A และจุดสัมผัส B จะแตกต่างกันเมื่อหมุนเพลาตามเข็มนาฬิกา (CW) และทวนเข็มนาฬิกา (CCW) ผ่านตำแหน่ง 1 ถึง 6
วิธีการทั่วไปในการกำหนดทิศทางการหมุน ได้แก่
- ฮาร์ดแวร์
- แฝดขัดจังหวะ
- ตารางค้นหาลวดลาย
โปรเจ็กต์นี้ใช้วิธีซอฟต์แวร์ที่ไม่ต้องการตารางค้นหา [1]
ทิศทาง
แทนที่จะดูรูปแบบเอาต์พุตจาก Contact A และ Contact B ให้เน้นที่ Contact A
หากเราสุ่มตัวอย่างผู้ติดต่อ B หลังจากการเปลี่ยนผู้ติดต่อ A เราจะสังเกตว่า:
- ผู้ติดต่อ A และผู้ติดต่อ B มีสถานะตรรกะที่ตรงกันข้ามเมื่อตัวเข้ารหัสถูกหมุนCW
- ผู้ติดต่อ A และผู้ติดต่อ B มีสถานะตรรกะเดียวกันเมื่อหมุนตัวเข้ารหัส CCW
รหัสจริง:
// ----- นับช่วงการเปลี่ยนภาพ
CurrentStateA = stateContactA(); ถ้า (CurrentStateA! = LastStateA) { CurrentStateB = digitalRead (ContactB); ถ้า (CurrentStateA == CurrentStateB) นับ ++; ถ้า (CurrentStateA != CurrentStateB) นับ--; LastStateA = CurrentStateA; }
วิธีนี้มีข้อดีดังต่อไปนี้:
- ไม่จำเป็นต้องใช้ตารางค้นหา
- ต้องการเพียงบรรทัดเดียวขัดจังหวะ
Debounce
เครื่องเข้ารหัสเชิงกลทั้งหมดได้รับผลกระทบจาก "การตีกลับ"
หากหน้าสัมผัสสวิตช์ไม่สร้าง/แตกหัก สถานะตรรกะจะสั่นอย่างรวดเร็วจากสูงเป็นต่ำจนกว่าหน้าสัมผัสสวิตช์จะตกลง ส่งผลให้นับเท็จ
วิธีหนึ่งในการระงับการตีกลับของหน้าสัมผัสคือการเพิ่มตัวเก็บประจุขนาดเล็กในแต่ละหน้าสัมผัสของสวิตช์ ตัวเก็บประจุและตัวต้านทานแบบดึงขึ้นที่เกี่ยวข้องก่อให้เกิดตัวรวมซึ่งลดความถี่สูงได้อย่างมีประสิทธิภาพและช่วยให้แรงดันสวิตช์เพิ่มขึ้น/ลดลงอย่างสง่างาม
ข้อเสียของแนวทางนี้คือ อาจพลาดการเปลี่ยนภาพหากเพลาตัวเข้ารหัสถูกหมุนอย่างรวดเร็ว
ซอฟต์แวร์เปิดตัว
วิธีนี้ใช้ตัวนับสองตัว (เปิด, ปิด) ที่ตั้งค่าเป็นศูนย์ [2]
เมื่อตรวจพบการเปลี่ยนแปลงในผู้ติดต่อ A:
- โพลอย่างต่อเนื่อง ติดต่อ A.
- เพิ่มตัวนับเปิด และรีเซ็ตตัวนับที่ปิด เมื่อใดก็ตามที่ Contact A มีค่าสูง
- เพิ่มตัวนับที่ปิด และรีเซ็ตตัวนับเปิด เมื่อใดก็ตามที่ผู้ติดต่อ A ต่ำ
- ออกจากลูปเมื่อตัวนับตัวใดตัวหนึ่งถึงจำนวนที่กำหนดไว้ เรากำลังมองหาช่วงเวลาคงที่หลังจากการตีกลับของผู้ติดต่ออย่างมีประสิทธิภาพ
รหัสจริง:
// ----- Debounce ติดต่อ A
ในขณะที่ (1) { ถ้า (digitalRead (ContactA)) { // ----- ContactA เปิดอยู่ ปิด = 0; // ตัวรวมตรงข้ามว่างเปล่า Open++; // รวมถ้า (เปิด > MaxCount) กลับสูง; } else { // ----- ContactA ถูกปิด Open = 0; // ว่างเปล่าตรงข้าม integrator Closed++; // Integrate ถ้า (ปิด > MaxCount) คืนค่า LOW; } }
ไม่จำเป็นต้องยกเลิก Contact B เนื่องจากการเปลี่ยน Contact A และ Contact B ไม่ตรงกัน
นับ
“การกักขัง” ทางกลจะเพิ่มการนับของคุณเป็นสองเท่าอย่างมีประสิทธิภาพเนื่องจากมีการลงทะเบียนการนับสองครั้งระหว่างการคลิก (ดูรูปที่ 1)
จำนวนของ “กักขัง” อาจถูกกำหนดโดยใช้เลขคณิตโมดูโล 2 ดังที่แสดงด้านล่าง
รหัสจริง:
// ----- นับ "กักขัง"
ถ้า (นับ % 2 == 0) { Serial.print ("จำนวน: "); Serial.println(จำนวน / 2); }
อ้างอิง
สามารถดูข้อมูลเพิ่มเติมได้ที่:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
ขั้นตอนที่ 4: ซอฟต์แวร์
โปรเจ็กต์นี้ต้องการ Ardino Uno R3 IDE เวอร์ชันล่าสุด (สภาพแวดล้อมการพัฒนาแบบรวม) ซึ่งหาได้จาก
ดาวน์โหลดสเก็ตช์ Arduino สองแบบต่อไปนี้ (แนบมาด้วย)
- rotary_encoder_1.ino (เวอร์ชั่นโพล)
- rotary_encoder_2.no (เวอร์ชันขัดจังหวะ)
ดับเบิลคลิกที่เวอร์ชันที่คุณต้องการและทำตามคำแนะนำบนหน้าจอ
สนุก …
คลิกที่นี่เพื่อดูคำแนะนำอื่น ๆ ของฉัน
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง