สารบัญ:

Servodriver-Board พร้อม Python-GUI และ Arduino: 5 ขั้นตอน
Servodriver-Board พร้อม Python-GUI และ Arduino: 5 ขั้นตอน

วีดีโอ: Servodriver-Board พร้อม Python-GUI และ Arduino: 5 ขั้นตอน

วีดีโอ: Servodriver-Board พร้อม Python-GUI และ Arduino: 5 ขั้นตอน
วีดีโอ: Arduino GUI Part 2 Servo Motor 2024, พฤศจิกายน
Anonim
Servodriver-Board พร้อม Python-GUI และ Arduino
Servodriver-Board พร้อม Python-GUI และ Arduino

เมื่อทำการสร้างต้นแบบหรือสร้างเครื่องบินจำลอง คุณมักจะพบปัญหาที่คุณต้องตรวจสอบการเคลื่อนที่ของเซอร์โวหรือตั้งค่าเซอร์โวไว้ที่ตำแหน่งกึ่งกลาง

ในกรณีที่คุณไม่คุ้นเคยกับการสร้างระบบ RC หรือการทดสอบทั้งหมด คุณสามารถผลักเซอร์โวได้ไกลแค่ไหนหรือตำแหน่งกึ่งกลาง บอร์ดนี้เหมาะสำหรับคุณ! ช่วยให้คุณสามารถย้ายเซอร์โวไปยังตำแหน่งที่ระบุหรือเดินทางไปมา

มันใช้งานได้ดีอย่างน่าประหลาดใจ แม้จะมีเซอร์โว 6 ตัวที่แข่งจากตำแหน่งหนึ่งไปอีกตำแหน่งหนึ่งในลูป

นอกจากนี้ยังเป็นโครงการที่ดีในการเรียนรู้เกี่ยวกับการสื่อสารระหว่าง Python-GUI และ Arduino โดยใช้ Serial

ขั้นตอนที่ 1: สิ่งที่คุณต้องการ…

สำหรับโครงการนี้ คุณจะต้องมีสิ่งต่อไปนี้:

ฮาร์ดแวร์

  • Arduino นาโนพร้อมสายเคเบิล ฉันใช้โคลนและรหัส Python คาดหวังชิป CH340 ของโคลน
  • บอร์ดต้นแบบ. 7x5cm ก็พอ
  • ส่วนหัวและหมุด 2, 54 มม. บางตัว
  • 1-6 เซอร์โว
  • แหล่งจ่ายไฟสำหรับเซอร์โว (ฉันใช้แบตเตอรี่แพ็คที่มีแบตเตอรี่ 4 ก้อน)

ซอฟต์แวร์

  • หลาม 3:
  • ไดรเวอร์ USB สำหรับชิป CH340: เพียง google สำหรับไดรเวอร์สำหรับไดรเวอร์ CH340
  • Arduino IDE:

ขั้นตอนที่ 2: การบัดกรีบอร์ด

บัดกรีบอร์ด
บัดกรีบอร์ด

การบัดกรีนั้นตรงไปตรงมาตาม Fritzing ในภาพ เพียงตรวจสอบให้แน่ใจว่าคุณสามารถต่อเซอร์โวเข้ากับแถว 3 พินได้อย่างง่ายดาย

  • 3-pin-rows ต่อเข้ากับขาดิจิตอล 3, 5, 6, 9, 10 และ 11 ของ Arduino nano
  • สายสีแดงติดอยู่ที่ขา 5V ของ Arduino
  • สายสีดำเชื่อมต่อกับขา GND ของ Arduino
  • หมุดคู่ด้านล่างแถว 3 พินมีไว้เพื่อต่อแหล่งจ่ายไฟเครื่องรับ RC ทั่วไป คุณสามารถเพิ่มขั้วต่อได้ตามต้องการ เช่น ขั้วต่อแบบขันเกลียว ขั้วต่อ XT, JST หรือ… หรือ…

โดยส่วนตัวแล้วฉันชอบแถวส่วนหัวของเพศหญิงเพื่อใส่ Arduino แต่นั่นก็ขึ้นอยู่กับคุณ

โปรดทราบว่าส่วนหัวของตัวเมียแบบสั้นนั้นเป็นจัมเปอร์ ที่ให้คุณจัดหาเซอร์โวโดยใช้แหล่งจ่าย 5V ของ Arduino เพื่อวัตถุประสงค์ในการทดสอบ หากคุณเครียดมากเกินไป Arduino จะรีเซ็ตและปล่อยจังหวะที่เหมาะสม ต้องถอดออกก่อนที่จะต่อแหล่งจ่ายไฟอื่น

ขั้นตอนที่ 3: การตั้งค่า Arduino

ติดตั้ง Arduino IDE และแฟลช Arduino nano พร้อมภาพร่างที่แนบมา

ขั้นตอนที่ 4: การตั้งค่า Python

การตั้งค่า Python
การตั้งค่า Python

ติดตั้ง Python 3 หลังจากดาวน์โหลด ตรวจสอบให้แน่ใจว่าได้เลือกตัวเลือกเพื่อสร้างตัวแปร "เส้นทาง"

คุณต้องติดตั้งอีกสองแพ็คเกจโดยใช้ pip หากต้องการทำเช่นนั้นให้กดปุ่ม "Windows" พิมพ์ "cmd" แล้วกด "Enter" ในพรอมต์คำสั่งพิมพ์คำสั่งต่อไปนี้:

  • pip ติดตั้งซีเรียล
  • piip ติดตั้ง pyserial
  • pip ติดตั้ง tkinter

อย่างที่คุณเห็น ฉันต้องการโมดูลซีเรียลและไพซีเรียล ซึ่งไม่น่าจะมีประสิทธิภาพมากที่สุด เนื่องจาก pyserial ควรแทนที่ซีเรียล อย่างไรก็ตามมันใช้งานได้และฉันเพิ่งเริ่มเรียนรู้;)

เปิด Python-Script ใน IDE แล้วเรียกใช้ หรือเรียกใช้จากเทอร์มินัลโดยตรง

ในเมนูแบบเลื่อนลง คุณสามารถเลือกระหว่างสองโหมด "ตรงไป" และ "ปิงปอง":

  • ตรงไป: ป้อนตำแหน่งเซอร์โวในหน่วยไมโครวินาทีในคอลัมน์แรก แล้วกด "เริ่ม" เพื่อให้เซอร์โวเคลื่อนที่ไปยังตำแหน่งที่ระบุ
  • ปิงปอง: ป้อนขอบเขตล่างและขอบเขตบนในคอลัมน์ที่สองและสาม นั่นคือตำแหน่งล่างและบน ระหว่างที่เซอร์โวจะกลับไปมา ในคอลัมน์ "เวลาปิงปอง" คุณสามารถระบุเวลาเป็นมิลลิวินาที ที่เซอร์โวจะรอเมื่อถึงตำแหน่งบนหรือล่าง กด "Start" และเซอร์โวจะเริ่มเคลื่อนที่ไปมา กด "หยุด" และเซอร์โวจะหยุด

ขั้นตอนที่ 5: ที่เวทมนตร์เกิดขึ้น

สุดท้ายแต่ไม่ท้ายสุด ฉันต้องการจะชี้ให้เห็นรายละเอียดบางอย่างในโค้ดสำหรับผู้ที่ต้องการเข้าถึงการสื่อสารแบบอนุกรมระหว่าง Python และ Arduino

ทีนี้ จะเกิดอะไรขึ้นในโปรแกรม Python

ก่อนอื่นโปรแกรมจะตรวจสอบสิ่งที่แนบกับพอร์ต COM ในบรรทัดนี้และบันทึกลงในรายการ:

self. COMPortsList = รายการ (serial.tools.list_ports.comports ())

จากนั้นจะวนซ้ำในรายการจนกว่าจะพบชิป CH340 ที่มีชื่อเสียง บันทึก และสร้างการเชื่อมต่อแบบอนุกรมหลังจาก for-loop โปรดทราบว่า for-loop จะขาดทันทีที่พบ CH340 ตัวแรก

สำหรับ p ใน self. COMPortsList: ถ้า "CH340" ใน p[1]: # กำลังมองหา Arduino Clone self. COMPort = p[0] อย่างอื่น: pass self. Ser = serial. Serial (self. COMPort, 57600)

การเชื่อมต่อแบบอนุกรมถูกสร้างขึ้นด้วยพอร์ต COM โดยมีบอดเรต 57600

และรหัส Arduino ทำอะไร? เนื่องจาก Arduino มีพอร์ต COM เพียงพอร์ตเดียว การเชื่อมต่อแบบอนุกรมจึงมีเพียงบรรทัดเดียว:

Serial.begin(57600);

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

Command = struct.pack('>B', self. Place) # ตัวแปร int "self. Place" ถูกเปลี่ยนเป็นไบต์

self. Ser.write(Command) # การเขียนไบต์บนคำสั่ง Serial-Port = int(self. ServoPos.get())//10 # กำลังอ่านอินพุตจากฟิลด์และเปลี่ยนคำสั่ง int = struct.pack(' >B', Command) # เปลี่ยน int เป็นไบต์ด้วยตนเอง Ser.write (Command) # การเขียนไบต์บน Serial-Port

นอกจากนี้ การแยกวิเคราะห์ข้อมูลต้องใช้เวลา (เช่น การตีความสี่ไบต์ "1", "2", "3" และ "0" เป็น int 1230 ไม่ใช่สี่ตัวอักษรที่แตกต่างกัน) และจะดีกว่าถ้าไม่ใช้ Arduino

ด้าน Arduino ข้อมูลที่ส่งจะถูกหยิบขึ้นมาดังนี้:

if(Serial.available()>1){ // หากมีข้อมูล serial ให้ทำการวนซ้ำ c = Serial.read(); // ไบต์แรก (จำนวนเซอร์โว) ถูกบันทึกลงในตัวแปร Micros = Serial.read(); // บันทึกตำแหน่งของเซอร์โวไว้ที่นี่ Micros = Micros * 10; }

แนะนำ: