โปรเจกต์ ควบคุม robot ของคุณด้วย phone (joysticks app)
ใน project นี้ ฉันควบคุม robotic arm ด้วย phone โดยใช้ HC-05 bluetooth module และ Android app (mit app inventor)
ใน project นี้ ฉันควบคุม robotic arm ด้วย phone โดยใช้ HC-05 bluetooth module และ Android app (mit app inventor)
Project Supporter Team
โพสต์โดย
หากคุณต้องการควบคุม Robot ด้วยโทรศัพท์ของคุณ ส่วนประกอบหลักสำหรับการสื่อสารทั้งหมดระหว่าง Arduino และโทรศัพท์คือโมดูล Bluetooth HC-05 ในโปรเจกต์นี้ ผมจะใช้ Robotic Arm แบบ 2 Axis พร้อมกับ Robotic Claw Gripper และจะใช้ Joystick 2 อันสำหรับควบคุม Servo โดย Joystick สามารถเป็นแบบ:
กล่าวคือ ด้วย Joystick 2 อัน คุณสามารถควบคุม Servo ได้สูงสุด 4 ตัว (หรือ 5 ตัวหากใช้ Slider)
สำหรับการสร้าง Android App คุณสามารถใช้ Android Studio, MIT App Inventor หรือโปรแกรมอื่นที่ใกล้เคียงกัน ซึ่งผมสร้าง App ของผมด้วยตัวเลือกที่สอง
ในส่วน "designer" ส่วนที่สำคัญที่สุดคือ Joystick ในการสร้าง Joystick คุณจำเป็นต้องเพิ่ม Canvas (แผงสี่เหลี่ยมแบบสัมผัสสองมิติที่สามารถวาดภาพและเคลื่อนย้าย Sprite ได้) และใส่ Ball ลงไป 2 ลูก โดยพยายามวางไว้ที่กึ่งกลางของ Canvas ซึ่ง Canvas นี้มีความกว้าง 200px และสูง 200px Ball ลูกหนึ่งทำหน้าที่เป็นฐานของ Joystick และมี Radius 100px ส่วน Ball อีกลูกคือตัว Joystick ที่มี Radius 30px นอกจากนี้ผมยังได้เพิ่ม Slider สำหรับควบคุม Robotic Claw Gripper ด้วย
รายละเอียดอื่นๆ นั้นเป็นตัวเลือกเสริม ผมได้เพิ่มตัวแปร x-y (หรือแค่ y) ไว้ที่ด้านบนของ Joystick เพื่อดูว่า Joystick อยู่ในตำแหน่งใด

และอย่าลืมเพิ่ม BluetoothClient จากหมวด Connectivity ด้วย
ผมสร้าง Joystick 2 อัน (อันหนึ่งมี 2 Axis และอีกอันมีเพียง Axis เดียว) ซึ่งทำหน้าที่ควบคุม Servo ทั้ง 3 Axis หากคุณต้องการสร้าง App สำหรับ Robotic Arm แบบ 2 Axis เท่านั้น (โดยไม่มี Base Servo) คุณสามารถสร้าง Joystick 2 อันที่เคลื่อนที่เฉพาะบน Axis 'y' (ขึ้นและลง) ได้

ในส่วน Code (ในกรณีนี้คือ "Block") ของ App เนื่องจาก Joystick สามารถรับค่าได้ระหว่าง 0 ถึง 200 (โดย Radius ของ Base Joystick คือ 100) มันจะส่งค่าดังนี้:
Slider ที่ควบคุม Robotic Claw Gripper จะส่ง 2 ค่าเช่นกัน: ค่าแรกระบุคำสั่งที่ Arduino ต้องทำ และค่าที่สองคือตำแหน่งของ Thumb


เมื่อคุณปล่อยนิ้วออกจาก Joystick มันจะกลับไปที่จุดศูนย์กลางโดยอัตโนมัติและส่งค่า 100 ซึ่งหมายความว่า Servo จะหยุดเคลื่อนที่


ในส่วนของ Slider มันจะส่งเฉพาะค่าตำแหน่ง Thumb ทุกครั้งที่มีการเปลี่ยนแปลง

หลังจากที่เรากำหนดค่าที่ App จะส่งผ่าน Bluetooth แล้ว เราต้องทำการประสาน (Synchronize) ค่าที่ส่งไปกับค่าที่ Arduino คาดหวัง แต่มีปัญหาอย่างหนึ่งคือ Arduino จะคอยค้นหาค่าอยู่ตลอดเวลา หากเราใส่ Delay ในโปรแกรม มันจะทำให้การอ่านค่าล่าช้าไปด้วย และ Robot จะทำงานไม่สัมพันธ์กับ App ในโทรศัพท์ ดังนั้นเราจึงจะใช้ Photothreading ผมได้สร้าง 3 Thread ในโปรแกรม Thread แรกจะ อ่านค่าและประมวลผล ทุกๆ 10 Milliseconds Thread ที่สองคือ Timer ขนาด 5 Milliseconds จุดประสงค์คือเพื่อ ไม่ให้ มีการใช้ Delay ในโปรแกรมหลัก โดยมันจะทำงานใน If Statement และรีเซ็ตทุกครั้งที่มีค่ามากกว่า Delay ที่คำนวณได้จากค่าใน Thread แรก และ Thread สุดท้ายคือ Loop หลักซึ่งเป็นส่วนที่มี Code สำหรับ Joystick
ด้านล่างนี้คือ 2 โปรแกรมย่อยที่อธิบายการทำงานของ Joystick แบบหนึ่งสำหรับ 2 Axis Joystick และอีกแบบสำหรับ 1 Axis Joystick
2 Axes Joystick ช่วยให้คุณหมุน Servo 2 ตัวได้พร้อมกัน ด้วยเหตุนี้คุณจึงสามารถกำหนด Servo ใดก็ได้ เช่น คุณสามารถกำหนด Base Servo ร่วมกับ Axis Servo หรือ Servo ทั้งสอง Axis ก็ได้
//Code สำหรับ 2 axes joystick
void loop() {
if(v[1]==1) { //ค่าแรกที่ arduino ได้รับอยู่ระหว่าง 1 ถึง 3
Ok=0;
val1=v[2]; //นี่คือค่า x
val2=v[3]; //นี่คือค่า y
}
}
void joystick() {
if (Ok==0) {//ถ้า joystick กำลังเคลื่อนที่
timerThread.check();//timer เริ่มทำงาน
if(v[1]==1 && (v[2]==100 && v[3]==100)) {
Ok1=1;//ถ้า joystick กลับสู่ตำแหน่งเดิม (กึ่งกลาง) servo จะหยุด
}
if(val1>100 && pos1<180) {
/*Arduino รับค่าระหว่าง 0 ถึง 200 โดยมีกึ่งกลางที่ 100
ดังนั้น delay จะต้องมีค่าสูงสุดเมื่ออยู่ใกล้กึ่งกลาง และมีค่าต่ำสุดเมื่ออยู่ใกล้ขอบ
เราจะมี 2 สูตรในการคำนวณ delay: เมื่อค่า > 100 จะใช้ delaya และเมื่อค่า < 100 จะใช้ delayb
*/
delaya=((200-val1))+15;//สังเกตว่ามี +15 ที่ตอนท้าย; หากไม่มีค่านี้ delay ต่ำสุดจะเป็น 0 และจะทำให้ servo ทำงานผิดปกติ
delayb=val1+15;
if(timer1>=delayx1) {//เนื่องจากเราไม่สามารถใช้ delay ในโปรแกรมได้ เราจึงใช้ timer thread ร่วมกับ if function
pos1++;//ในกรณีนี้ joystick เลื่อนขึ้น servo จึงหมุนไปข้างหน้า
myservo1.write(pos1);
timer1=0;//รีเซ็ต timer
}
}
//ใน code ของ joystick x y เรามี 4 กรณี - 2 กรณีสำหรับแต่ละ axis
//val1<100 && pos1>0 โดยใช้ pos1-- และ delay1=val1+15;
//val2>100 && pos2>180 โดยใช้ pos2++ และ delay2=((200-val2))+15;
//val2<100 && pos2>0 โดยใช้ pos2-- และ delay2=val2+15;
}
}
สำหรับ 1 Axis Joystick คุณสามารถกำหนด Servo ได้เพียงตัวเดียวต่อหนึ่ง Joystick ซึ่งทำให้การเคลื่อนที่ง่ายขึ้น เพราะคุณสามารถควบคุม Joystick ทั้งสองอันได้พร้อมกัน
//Code สำหรับ 1 axis joystick
void loop() {
if(v[1]==1) {//ค่าแรกที่ arduino ได้รับอยู่ระหว่าง 1 ถึง 3
Ok=0;
val=v[2];//นี่คือค่า x/y
}
}
void joystick() {
if (Ok==0) {
timerThread.check();
if(v[1]==1 && v[2]==100) {//เราไม่มี axis x แล้ว ดังนั้นความสำคัญจึงอยู่ที่ตำแหน่ง y เท่านั้น
Ok=1;
}
//เราจะมีเพียง 2 กรณี เพราะเรามีเพียง axis เดียว
if(val>100 && pos>0) {
delay=((200-val))+15;
if(timer>=delay) {
pos--;
myservo.write(pos);
timer=0;
}
}
//+ กรณีที่ (val < 100 && pos < 180) โดยใช้ delay=val1+1 และ pos--;
}
}
นอกจากนี้ คุณควรคำนึงถึงว่าเมื่อคุณลาก Joystick ทั้งคู่ไปในทิศทางหนึ่ง (ขึ้นหรือลง) Robot ควรจะเคลื่อนที่ไปข้างหน้าและข้างหลัง

หากมันไม่ทำงาน เช่น Servo ตัวหนึ่งไปข้างหน้าแต่อีกตัวไปข้างหลัง คุณจะต้องแก้ไขส่วนหนึ่งของ Code ดังนี้:
if(val>100 && pos>0) {//เปลี่ยน pos>0 เป็น pos<180
delay=((200-val))+15;
if(timer>=delay) {
pos--;//เปลี่ยน pos-- เป็น pos++
myservo.write(pos);
timer=0;
}
}
คุณสามารถหา Android Project ได้ในส่วน Custom parts and enclosures ในการเปิดใช้งาน คุณต้องเปิด MIT App Inventor ใน Browser (http://ai2.appinventor.mit.edu/) สร้าง Project ใหม่ นำเข้า Project จากคอมพิวเตอร์ของคุณ แล้วคลิก Build สำหรับ Code จะอยู่ในส่วน Code และการออกแบบวงจรสามารถดูได้ในส่วน Schematics
นอกจากนี้ คุณยังสามารถเปลี่ยน Code และเพิ่ม Joystick xy 2 อันได้ หากคุณต้องการควบคุม Servo 5 ตัว
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้
ประเมิน Project
เอาฟอร์มยาวออกจากท้ายหน้า Project แล้ว เหลือเป็นปุ่มให้กดไปกรอกหน้าเดียว ตัวใหญ่ เว้นบรรทัดเยอะ อ่านง่ายกว่า
รีวิวจากคนใช้งานจริง
ถ้าเคยสั่งงาน เคยอ่านหน้านี้แล้วได้ประโยชน์ หรือมีข้อเสนอแนะ ฝากรีวิวไว้ได้เลย
ยังไม่มีรีวิวบนหน้านี้ ถ้าเคยใช้งานหรือมีข้อเสนอแนะ เขียนเป็นคนแรกได้เลย