กลับไปหน้ารวมไฟล์
making-the-drl-asuro-robot-work-with-the-arduino-ide-c7f4f1.md

ชื่อโปรเจกต์: การทำให้หุ่นยนต์ DRL ASURO ใช้งานได้กับ Arduino IDE

การปรับปรุงหุ่นยนต์คลาสสิก: นำหุ่นยนต์ ASURO เข้าสู่ยุค Arduino

หุ่นยนต์ ASURO (Autonomous System for University Robot Education) เป็นชุดหุ่นยนต์ระดับตำนาน แต่ระบบซอฟต์แวร์ดั้งเดิมของมัน—ซึ่งออกแบบมาสำหรับยุค Windows XP—นั้นขึ้นชื่อว่ารันได้ยากบนเครื่องสมัยใหม่ โปรเจกต์นี้เป็นการวิจัยและปรับแต่งฮาร์ดแวร์ที่ทุ่มเทเป็นเวลาสองสัปดาห์ เพื่อเชื่อมช่องว่างระหว่างหุ่นยนต์ Atmega8-based แบบเก่ากับ Arduino IDE สมัยใหม่ ทำให้คนรุ่นใหม่ที่รักงานอดิเรกสามารถตั้งโปรแกรมหุ่นยนต์ตีนตะขาบคลาสสิกตัวนี้ได้

การปรับแต่งฮาร์ดแวร์ที่สำคัญ

เพื่อให้ได้ประสิทธิภาพที่เสถียรด้วยไลบรารีสมัยใหม่ ต้องแก้ไขปัญหาฮาร์ดแวร์ "คลาสสิก" ของ ASURO หลายประการดังนี้:

  • ความน่าเชื่อถือของ Encoder (R18/R20): โดยการเปลี่ยนค่าตัวต้านทานเหล่านี้จาก 4k7 เป็น 6k9 ohms สัญญาณ LOW ของ motor encoders จะถูกดึงให้เข้าใกล้ ground มากขึ้น สิ่งนี้ทำให้เกิด digital pulse ที่สะอาดขึ้น ซึ่ง digitalRead() ของ Arduino สามารถตีความได้อย่างแม่นยำ ลด "Ghost Counts" ระหว่างการเคลื่อนที่ด้วยความเร็วสูง
  • การกรองสัญญาณ Switch (R24): การตัด trace ไปยัง R24 จะลบ interrupt input ที่คาดเดาไม่ได้สำหรับ collision switches สิ่งนี้จะป้องกันไม่ให้หุ่นยนต์ "คิดไปเอง" ว่าชนสิ่งกีดขวางเมื่อมอเตอร์เริ่มทำงาน ซึ่งเป็น bug ทั่วไปในการออกแบบดั้งเดิม
  • การเชื่อม Interrupt: สำหรับผู้ใช้ขั้นสูง การเชื่อม analog pins เข้ากับ interrupt pins ช่วยให้สามารถติดตามล้อด้วยความเร็วสูงได้ แม้ว่าสิ่งนี้จะต้องแลกกับการเสียฟังก์ชันสีแดงของ bi-color Status LED ไป

ซอฟต์แวร์สแต็คสมัยใหม่

เนื่องจากไลบรารี ASURO ดั้งเดิมมักจะไม่เข้ากันกับ GCC compilers สมัยใหม่ โปรเจกต์นี้จึงใช้วิธีการแบบ Function-Based ที่ปรับแต่งเองดังนี้:

  1. การแทนที่ HTerm: แทนที่ Hyperterminal แบบเก่าด้วย HTerm สำหรับ debugging การเชื่อมต่อ infrared serial link (2400 Baud)
  2. การ Export Binary: แทนที่จะใช้ Serial flashing โดยตรง (ซึ่งไม่น่าเชื่อถือผ่าน IR) โปรเจกต์นี้ใช้ฟีเจอร์ "Export Compiled Binary" ของ Arduino IDE
  3. ตัวเชื่อม Flash.exe: ไฟล์ .hex ที่ได้จะถูกอัปโหลดโดยใช้ ASURO Flash tool ที่ปรับปรุงประสิทธิภาพแล้ว ซึ่งจัดการ timing เฉพาะที่จำเป็นสำหรับ infrared receiver ของหุ่นยนต์

ไลบรารีฟังก์ชันที่ปรับปรุงประสิทธิภาพ

หัวใจสำคัญของงานนี้คือชุดของ high-level wrappers สำหรับ pins ที่กำหนดได้ยากของ ASURO:

  • motorSpeed() พร้อม Soft-Start: รวมถึงการส่ง high-torque สั้นๆ 50ms เพื่อเอาชนะ static friction ของเฟือง acrylic-on-metal ของ ASURO
  • getSwitches() พร้อม Digital Filtering: อัลกอริทึม multi-sample ที่ระบุว่า bumper switches ตัวใดจากทั้งหมด 6 ตัวถูกกด โดยอิงจาก analog values ที่ไม่เสถียรซึ่งส่งคืนโดย shared resistor ladder
  • Encoder Logic: ฟังก์ชันสำหรับอ่านทั้ง analog levels และ digital transitions ของ black/white disc markers

การฟื้นคืนตำนาน

ด้วยการลอกเลเยอร์ abstraction ของไลบรารี "Asurino" เก่าออก และใช้ direct hardware functions เหล่านี้ นักพัฒนาจะสามารถควบคุม motor pulse และ sensor reading ทุกอย่างได้อย่างแม่นยำ โปรเจกต์นี้พิสูจน์ให้เห็นว่าด้วยการเปลี่ยน resistor เพียงเล็กน้อยและ workflow การ flashing ที่ทันสมัย ASURO ยังคงเป็นหนึ่งในแพลตฟอร์มการศึกษาที่ดีที่สุดสำหรับการเรียนรู้ low-level embedded systems

บทนำ

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

โปรดทราบว่าก่อนที่ฉันจะเริ่มโปรเจกต์นี้ ฉันเป็นมือใหม่ด้าน Arduino และงานนี้ถูกสร้างขึ้นภายในเวลาเพียงสองสัปดาห์ ดังนั้นโปรดตระหนักว่าฉันอาจทำผิดพลาดหรือแก้ไขสิ่งต่างๆ ในทางที่ผิดไป บทความนี้ก็เช่นกัน มันเป็นเพียงการรวบรวมสิ่งที่ฉันได้เรียนรู้ทั้งหมด ไม่ใช่บทช่วยสอน นอกจากนี้ โปรดทราบว่าฉันเป็นคนเยอรมัน ดังนั้นภาษาอังกฤษของฉันอาจไม่สมบูรณ์แบบ ข้อเสนอแนะใดๆ จะได้รับการชื่นชมอย่างมาก

การปรับแต่งฮาร์ดแวร์

การปรับแต่งเหล่านี้ทำบน ASURO ที่ไม่มีการดัดแปลงอื่นใด ซึ่งใช้ Atmega8 โปรดอ่านเอกสารฉบับเต็ม รวมถึงโค้ด ก่อนทำการปรับเปลี่ยนใดๆ

- แนะนำ

การเปลี่ยน R18 และ R20 จาก 4k7 resistor เป็น 6k9 (4k7 + 2k2 แบบอนุกรม) จะให้เอาต์พุต motor encoder ที่สะอาดขึ้นสำหรับ `digitalRead` (ลดสัญญาณ LOW เพื่อให้ได้ค่าที่อ่านได้สะอาด)

การตัด R24 เพื่อลบ interrupt input สำหรับ switches ตัว resistor นี้ไม่จำเป็นและทำให้เกิด bugs

- ทางเลือก

การเพิ่ม bridge จาก analog pin A0 (23) ไปยัง interrupt pin 1 (5) และจาก analog pin A1 (24) ไปยัง interrupt pin 0 (4) จะทำให้การอ่าน motor encoder แม่นยำยิ่งขึ้น สำหรับการปรับแต่งนี้ interrupt pins ควรถูกงอขึ้นเพื่อไม่ให้สัมผัสกับ board อีกต่อไป แต่สัมผัสเฉพาะ bridge เท่านั้น คุณจะสูญเสียความสามารถในการเปลี่ยน Status LED เป็นสีแดงด้วยการปรับแต่งนี้ โปรดทราบว่าคุณจะต้องแก้ไขฟังก์ชันที่ให้มาตามคำแนะนำภายใต้ "Code Section | Failed Speed Test Code"

bridge ที่ฉันติดตั้งเข้ากับ interrupts นี่ไม่ใช่การปรับแต่งที่ทำได้ดี แต่ใช้งานได้สำหรับฉัน

ฉันยังได้แก้ไขสติกเกอร์สีดำและสีขาวสำหรับเฟืองให้เป็นครึ่งดำครึ่งขาว เพื่อลดจำนวนจุดต่อการหมุนที่โค้ดต้องติดตาม แต่ถึงแม้จะมีสิ่งนี้และการปรับแต่ง interrupt ฉันก็ยังไม่สามารถนับ motor rotations ได้อย่างถูกต้อง

ASURO Pinout

หากคุณต้องการควบคุม pins แต่ละตัวบน ASURO ด้วยตัวเอง นี่คือตารางแสดงว่าแต่ละ pin ทำหน้าที่อะไร:

Pins ที่ไม่จำเป็นสำหรับการตั้งโปรแกรมถูกละไว้ โปรดดู full circuit diagram สำหรับ pins เหล่านี้

Digital pins จะคืนค่า LOW ที่แรงดันไฟฟ้าสูงสุด 0.2*operating voltage และ HIGH ที่แรงดันไฟฟ้าต่ำสุด 0.6*operating voltage

Analog pins จะคืนค่าระหว่าง 0 ถึง 1024 ขึ้นอยู่กับ voltage ที่จ่ายให้

1 (RESET)  
2 (DP0) \t-\tInfrared IN
3 (DP1) \t-\tInfrared OUT
4 (DP2) \t-\tStatus LED red (ปิดใช้งานด้วย optional mod, interrupt pin)
5 (DP3) \t-\tSwitches interrupt (ปิดใช้งานด้วย recommended mod, interrupt pin)
6 (DP4) \t-\tLeft Motor Backward(pin นี้ + PWM(15) ทำให้เคลื่อนที่ถอยหลัง)
7 (VCC)
8 (GND)
9 (OSC1)
10 (OSC2)
11 (DP5)\t-\tLeft Motor Forward(pin นี้ + PWM(15) ทำให้เคลื่อนที่ไปข้างหน้า)
12 (DP6)\t-\tLinesensor LED
13 (DP7)\t-\tEncoder LEDs (เปิดใช้งาน หรือ encoders จะไม่ทำงาน)
14 (DP8)\t-\tStatus LED green
15 (DP9) \t-\tLeft Motor Speed Control(PWM, analogWrite( 9, [0-255] ); )
16 (DP10)\t-\tRight Motor Speed Control (PWM, analogWrite( 10, [0-255] ); )
17 (DP11)\t-\tเป็นส่วนหนึ่งของ Infrared Send Circuit
18 (DP12)\t-\tRight Motor Backward(pin นี้ + PWM(16) ทำให้เคลื่อนที่ถอยหลัง)
19 (DP13)\t-\tRight Motor Forward (pin นี้ + PWM(16) ทำให้เคลื่อนที่ไปข้างหน้า)
20 (AVCC)
21 (AREF)
22 (GND)
23 (A0) \t-\tRight Encoder Light Sensor
24 (A1) \t-\tLeft Encoder Light Sensor
25 (A2) \t-\tRight Line Sensor
26 (A3) \t-\tLeft Line Sensor
27 (A4) \t-\tAll Switches input (ค่าต่างกันขึ้นอยู่กับ switch(es) ที่กด)
28 (A5) \t-\tBattery Sensor
คู่มือ ASURO หน้า 73 (ASURO Circuit Diagram) โปรดดูคู่มือสำหรับเวอร์ชันคุณภาพสูงกว่า

การติดตั้งซอฟต์แวร์

จากประสบการณ์ของฉันใน Windows 10 ซอฟต์แวร์ที่มาพร้อมกับ ASURO นั้นล้าสมัยบางส่วนและบางส่วนก็ไม่ทำงานอย่างถูกต้องเลย ด้วยเหตุนี้ ฉันจึงพบว่าโปรแกรมที่กล่าวถึงใน required Software เป็นทางเลือกที่เหมาะสม F

ข้อมูล Frontmatter ดั้งเดิม

title: "Making the DRL ASURO Robot work with the Arduino IDE"
description: "After two weeks of work I am happy to present my findings how to make ASURO work with modern software."
author: "HB_Stratos"
category: ""
tags:
  - "asuro"
  - "robots"
views: 1487
likes: 1
price: 2450
difficulty: "Intermediate"
components:
  - "1x Asuro Robot Kit by Arexx"
tools: []
apps:
  - "1x Windows 10"
  - "1x Asuro Flash"
  - "1x ASURINO Libary"
  - "1x Arduino IDE"
  - "1x HTerm"
downloadableFiles: []
documentationLinks: []
passwordHash: "06cedcc4c628ed1526f96b90305137d9975bb1b7e73474e4e919ec47f955c5ad"
encryptedPayload: "U2FsdGVkX186gRuwIN/QXWI3iY/emFz+QDyqt/eOwY+K9hKeJFRW87AHGf+WyqrP22iYXLNsg0kwbrryMbCzLTD3g+FuB9LChlqwElvEXJiTbBTxq2ETjMdcZuQGa8ne+hdK8u2KjEQ53laqsK126q1HCmO0EGekBwEcIzFT5qvjjtgVXz8R3Oj5MfcNwdR6"
seoDescription: "Learn how to make the DRL ASURO Robot compatible with the modern Arduino IDE. A complete guide to updated software integration."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/making-the-drl-asuro-robot-work-with-the-arduino-ide-c7f4f1_cover.jpg"
lang: "th"