สารบัญ:

Arduino ตาม Serial Servo Controller: 6 ขั้นตอน
Arduino ตาม Serial Servo Controller: 6 ขั้นตอน

วีดีโอ: Arduino ตาม Serial Servo Controller: 6 ขั้นตอน

วีดีโอ: Arduino ตาม Serial Servo Controller: 6 ขั้นตอน
วีดีโอ: 16 channel servo controller with Arduino | PCA9685 16 channel PWM servo motor driver tutorial 2024, กรกฎาคม
Anonim
Arduino ตาม Serial Servo Controller
Arduino ตาม Serial Servo Controller
Arduino ตาม Serial Servo Controller
Arduino ตาม Serial Servo Controller

นี่คือคอนโทรลเลอร์อนุกรมอย่างง่ายสำหรับเซอร์โวหลายตัวที่ใช้ Arduino (สั่งสอนครั้งแรกของฉันด้วย:))

งานส่วนใหญ่มาจากการให้ซอฟต์แวร์พูดคุยกับ Arduino และสร้างโปรโตคอลสำหรับส่งข้อมูล สำหรับด้านฮาร์ดแวร์ทั้งหมดที่ฉันใช้คือเซอร์โวสองตัว (เซอร์โวมาตรฐาน Parallax ที่นี่) Sparkfun Arduino ProtoShield และ Arduino Duemilanove ที่มี ATMEGA328 แต่ชิ้นส่วนเหล่านี้ส่วนใหญ่สามารถใช้แทนกันได้ ฉันคิดว่าโปรเจ็กต์นี้เป็นส่วนหนึ่งของระบบ RC แต่การตั้งค่าการสื่อสารใช้เวลานาน หากใครมีการปรับปรุงความคิดหรือข้อบกพร่องใด ๆ โปรดแสดงความคิดเห็น แก้ไข: ฉันเขียนสิ่งนี้เมื่อสักครู่นี้เพิ่งจะเผยแพร่เมื่อเร็ว ๆ นี้

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

สิ่งที่คุณอาจต้องการ…
สิ่งที่คุณอาจต้องการ…
สิ่งที่คุณอาจต้องการ…
สิ่งที่คุณอาจต้องการ…

บางสิ่งที่คุณจะต้องสร้างสิ่งนี้ 1. บอร์ด Arduino (คุณเลือก) 2. เซอร์โวสองตัว (หรือหนึ่งตัว) 3. สายจัมเปอร์ 4. Visual Studio 2008 Express - ลิงค์ (ตัวเลือก) 5. Arduino IDE - ลิงค์ ขออภัยแฟน ๆ Linux และ Apple โปรแกรมของฉันทำงานเท่านั้น windows ในตอนนี้ แต่คุณยังสามารถส่งคำสั่งซีเรียลไปยัง Arduino ได้ด้วยตนเองโดยไม่ต้องเปลี่ยนรหัส

ขั้นตอนที่ 2: เชื่อมต่อฮาร์ดแวร์

เชื่อมต่อฮาร์ดแวร์
เชื่อมต่อฮาร์ดแวร์

ขั้นตอนนี้ไม่มีอะไรซับซ้อนมาก แค่เชื่อมต่อเซอร์โวตัวหนึ่งกับพิน 9 และอีกอันเพื่อพิน 10

ขั้นตอนที่ 3: ตั้งโปรแกรม Arduino

โปรแกรม Arduino
โปรแกรม Arduino

ตอนนี้คุณสามารถอัปโหลดภาพร่างไปยัง Arduino

นี่คือการแจกแจงโค้ดอย่างง่าย: #include Servo myservo; // สร้างวัตถุเซอร์โวเพื่อควบคุมเซอร์โวเซอร์โว myservo1; int incomingByte = 0, datacount = 0, ตัวนับ = 0, พร้อม = 0; // สำหรับข้อมูลถ่านข้อมูลอนุกรมที่เข้ามา [10]; const ถ่านตรวจสอบ[8] = "ma11hew"; คำสั่งถ่าน[3]; การตั้งค่าเป็นโมฆะ () { myservo.attach (9); myservo1.attach(10); Serial.begin(38400); // เปิดพอร์ตอนุกรมกำหนดอัตราข้อมูล Serial.println ("สวัสดี Arduino ที่นี่!"); // เพิ่มเพื่อช่วยระบุพอร์ตอนุกรม นี่เป็นเพียงการตั้งค่าพอร์ตอนุกรมและเซอร์โว int ฉัน; สำหรับ(i = 0; i<180;i++) { myservo.write(i); ล่าช้า(15); } myservo.write(5); สำหรับ (i = 0; i<180;i++) { myservo1.write (i); ล่าช้า(15); } myservo1.write(5); } การเคลื่อนไหวแบบกวาดอย่างง่ายเพื่อตรวจสอบว่าเซอร์โวทำงานอย่างถูกต้อง วงเป็นโมฆะ () { พร้อม = 0; ตัวนับ = 0; ในขณะที่ (1==1) { ถ้า (Serial.read () != ตรวจสอบ [ตัวนับ]) { แตก; } ถ้า (ตัวนับ == 6) { ล่าช้า (20); คำสั่ง[0] = Serial.read(); คำสั่ง [1] = Serial.read(); //if (Serial.read() == ((คำสั่ง [1] * 12) % 8)) // { พร้อม = 1; //} Serial.println("คำสั่งที่บันทึกไว้"); } เคาน์เตอร์ ++; ล่าช้า(2); } สิ่งนี้จะตรวจสอบบัฟเฟอร์อนุกรมสำหรับสตริงการอนุญาตที่ถูกต้อง จากนั้นจึงคว้าสองไบต์สำหรับคำสั่ง แสดงความคิดเห็นหากคำสั่งอนุญาตให้มีการตรวจสอบชั่วคราว แต่จะทำให้การเชื่อมต่อแบบแมนนวลยากขึ้น สามารถตั้งค่า ready เป็น 0 เพื่อไม่ให้แยกวิเคราะห์คำสั่ง เช่น ในกรณีที่ข้อมูลเสียหาย // ค้นหาผ่านคำสั่ง if (ready == 1) { if (command[0] == 'T') { command[0] = 0; Serial.print("การควบคุมคันเร่งที่พิน 9 ถึง: "); Serial.println(map(command[1], 32, 126, 2, 180), DEC); myservo.write(map(command[1], 32, 126, 2, 180)); } if (คำสั่ง[0] == 'S') { คำสั่ง[0] = 0; Serial.print("การควบคุมคันเร่งที่พิน 10 ถึง: "); Serial.println(map(command[1], 32, 126, 2, 180), DEC); myservo1.write(map(command[1], 32, 126, 2, 180)); } } } โค้ดที่เหลือคือการค้นหา command สำหรับคำสั่งที่ถูกต้อง (T หรือ S.) หากตรงกัน จะใช้ไบต์ถัดไปและส่งไปยังเซอร์โว เพิ่มเติมบนแผนที่ (คำสั่ง[1], 32, 126, 2, 180) ในภายหลัง… โค้ดที่นี่ขยายได้สำหรับสิ่งอื่นๆ ที่คุณต้องการ (เช่น ไฟ มอเตอร์ IR ฯลฯ) รหัสนี้ควรใช้งานได้ดีโดยไม่มี การปรับเปลี่ยน

ขั้นตอนที่ 4: ติดตั้งซอฟต์แวร์

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

ฉันมีสองวิธีในการติดตั้งนี้… ตัวติดตั้ง nsis: ดาวน์โหลดตัวติดตั้งที่แยกตัวเองด้านล่างและเรียกใช้ คุณจะมีตัวเลือกในการติดตั้งแหล่งที่มาระหว่างการติดตั้ง แพ็คเกจไบนารีตัวติดตั้งจะติดตั้ง core c++ dll เพื่อให้สามารถรันบนคอมพิวเตอร์โดยไม่ต้องติดตั้ง visual c++ อยู่แล้ว เมื่อตัวติดตั้งเสร็จสิ้น คุณสามารถเรียกใช้ได้จากเดสก์ท็อปหรือเมนูเริ่ม zip way (ไม่ได้รับการยืนยัน): ดาวน์โหลดและเรียกใช้ควรใช้งานได้ อาจจะ. (ไฟล์ zip มีโครงสร้างโฟลเดอร์เดียวกับที่สร้างโดยโปรแกรมติดตั้ง โดยไม่มีแหล่งที่มา ฉันไม่มีเครื่องที่ไม่มี visual Studio เพื่อทดสอบ ดังนั้นมันอาจไม่ทำงาน)

ขั้นตอนที่ 5: ใช้โปรแกรมส่วนต่อประสาน

ใช้โปรแกรมอินเตอร์เฟส
ใช้โปรแกรมอินเตอร์เฟส
ใช้โปรแกรมอินเตอร์เฟส
ใช้โปรแกรมอินเตอร์เฟส

ในการใช้โปรแกรมก่อนอื่นให้เลือกอัตราบอดที่กำหนดไว้ในร่าง Arduino ร่างที่ไม่มีการแก้ไขมีค่าเริ่มต้นเป็น 38400 บอด แต่สามารถเปลี่ยนแปลงได้เพื่อให้เหมาะกับความต้องการของคุณ เช่น ลิงก์วิทยุที่ช้ากว่า หมายเหตุ: อัตราบอดที่สูงกว่า 38400 ยังไม่เสถียรนัก ฉันคิดว่าเป็นเพราะ uart เต็มก่อนจึงจะสามารถประมวลผลข้อมูลได้ จากนั้นเลือกพอร์ต COM ที่จะใช้ ค่าเริ่มต้นของโปรแกรมเป็น COM4 อย่าลืมเปลี่ยน มิฉะนั้นโปรแกรมจะขัดข้อง สุดท้าย คลิกเปิด หากทุกอย่างเป็นไปด้วยดี โปรแกรมจะเปิดพอร์ตอนุกรมที่เลือกที่อัตราบอดที่เลือก หากไม่เป็นเช่นนั้น โปรแกรมอาจจะหยุดทำงานโดยมีข้อยกเว้นที่ไม่สามารถจัดการได้ ตรวจสอบให้แน่ใจว่าพอร์ตถูกต้องแล้วลองอีกครั้ง ใช้กล่องข้อความเพื่อส่งคำสั่งโดยตรงไปยัง Arduino "map(command[1], 32, 126, 2, 180)" ปรับขนาดคำสั่งที่เป็นไปได้ทั้งหมด 94 คำสั่ง, *space* through ~, สามารถอ่านได้โดย Arduino ใน ASCII ถึง 2 ถึง 180 สำหรับเซอร์โว ไบต์ใดๆ ที่น้อยกว่า ASCII 32 (ช่องว่าง) หรือสูงกว่า 126 (~) ค่าเริ่มต้นเป็น 63 (?) แทร็กบาร์จัดเตรียมอินเทอร์เฟซ eaiser สำหรับคำสั่งโดยตรง แต่ละขั้นตอนจะส่งคำสั่งซีเรียลไปยัง Arduino แบบค่อยเป็นค่อยไป

ขั้นตอนที่ 6: สร้างสรรค์

สร้างสรรค์!
สร้างสรรค์!
สร้างสรรค์!
สร้างสรรค์!

ลองนึกถึงสิ่งดีๆ ที่จะทำกับสิ่งนี้ แนวคิดบางประการ: 1. เค้นระยะไกลสำหรับรถยนต์ 2. เมาท์กล้อง 3 มิติ 3. รถแลนด์โรเวอร์ใต้น้ำ ขอให้สนุก!!

แนะนำ: