เนื่องจากหุ่นยนต์ Arduino สามารถใช้งานฟังก์ชั่นพื้นฐานได้ตอนนี้เราจึงทำการอัพเกรดด้วยคุณสมบัติอีกหนึ่งอย่าง - การควบคุม romote ผ่านบลูทู ธ
เช่นเดียวกับบทช่วยสอน 'วิธีสร้างหุ่นยนต์' ชุดหุ่นยนต์ Arduino (โจรสลัด: ชุดหุ่นยนต์เคลื่อนที่ Arduino Arduino พร้อม Bluetooth 4.0) ที่ใช้เป็นตัวอย่าง นอกจากนี้เรายังต้องการความช่วยเหลือจาก GoBLE (ตัวควบคุม Generic BLE APP Controller) ที่ให้คุณเชื่อมต่อและควบคุมหุ่นยนต์แพลตฟอร์มมือถือโดรนหรือสิ่งอื่น ๆ เช่นยานพาหนะไร้คนขับ (uav) กับอุปกรณ์มือถือของคุณผ่านบลูทู ธ
เมนูบทเรียน:
บทที่ 1: บทนำ
บทที่ 2: สร้างหุ่นยนต์ Arduino พื้นฐาน
บทที่ 3: สร้างหุ่นยนต์ Arduino ติดตามสาย
บทที่ 4: สร้างหุ่นยนต์ Arduino ที่สามารถหลีกเลี่ยงอุปสรรค
บทที่ 5: สร้างหุ่นยนต์ Arduino ด้วยแสงและเสียงประกอบ
บทที่ 6: สร้างหุ่นยนต์ Arduino ที่สามารถตรวจสอบสภาพแวดล้อม
บทที่ 7: สร้างหุ่นยนต์ Arduino ที่ควบคุมบลูทู ธ
การจัดเตรียม
iPhone หรือ iPad × 1
แอป GoBLE × 1
วัสดุ:
ขั้นตอนที่ 1:
หมายเหตุ: ปัจจุบัน GoBLE สามารถใช้ได้เฉพาะบนอุปกรณ์ iOS และขอให้คุณติดตั้ง iOS 8.1 เป็นอย่างน้อย
สำหรับผู้ใช้ iOS: โปรดดาวน์โหลด GoBLE จาก App Store
ขั้นตอนที่ 2:
อัปโหลดรหัสการทดสอบ
กรุณาเชื่อมต่อ Romeo BLE กับคอมพิวเตอร์ สามารถดูรหัสการทดสอบ "GoBLE_Test.ino" ได้ในแพ็คเกจซอฟต์แวร์ ช่วยให้คุณสามารถตรวจสอบสัญญาณออกจากอุปกรณ์ของคุณ ดาวน์โหลด & ตรวจสอบมัน อย่าลืมโหลดห้องสมุด GoBLE ก่อนดาวน์โหลดรหัสทดสอบ
ขั้นตอนที่ 3:
ทดสอบบลูทู ธ
ทีนี้มาเริ่มการจับคู่บลูทู ธ กัน เปิดบลูทู ธ มือถือแล้วเปิดแอพ GoBLE หน้าจอของคุณจะเป็นแบบนี้!
ขั้นตอนที่ 4:
คลิกปุ่มค้นหาบลูทู ธ (ดูเหมือนแว่นขยายสีแดง) จากนั้นเลือกหนึ่งในอุปกรณ์บลูทู ธ ที่สอดคล้องกับชื่อ Romeo BLE คลิกที่ UUID และพวกมันจะเริ่มทำการจับคู่
ขั้นตอนที่ 5:
เมื่อเชื่อมต่อแล้วสีของปุ่มค้นหาบลูทู ธ จะเปลี่ยนจากสีแดงเป็นสีเขียว
ขั้นตอนที่ 6:
ในเวลาเดียวกันการเชื่อมโยงที่นำไปสู่บอร์ดจะเปิดขึ้นนั่นหมายความว่า iPhone ของคุณเชื่อมต่อกับ Romeo BLE (บอร์ดควบคุมหุ่นยนต์ Arduino พร้อม Bluetooth 4.0)
ขั้นตอนที่ 7:
ตอนนี้ให้ทดสอบว่าคอนโทรลเลอร์สามารถรับสัญญาณจาก iPhone ของคุณได้สำเร็จหรือไม่ กลับไปที่อินเทอร์เฟซ Arduino IDE และคลิกการตรวจสอบพอร์ตอนุกรมที่มุมบนขวา
ขั้นตอนที่ 8:
บทสนทนาตามที่ปรากฏในภาพด้านล่างจะปรากฏขึ้น ประการแรกอัตราการรับส่งข้อมูลของพอร์ตอนุกรมจะต้องตั้งค่าเป็น 115200 ตามที่ปรากฏในวงกลมสีแดงด้านล่าง
ขั้นตอนที่ 9:
ตอนนี้คุณสามารถนำ iPhone ของคุณออกมาแล้วกวาดจอยสติ๊กเสมือนจริงหรือคลิกปุ่มบนหน้าจอ หากไม่มีอะไรอื่นคุณจะเห็นค่าที่เกี่ยวข้องในการตรวจสอบแบบอนุกรม และค่าจอยสติ๊กในการตรวจสอบพอร์ตอนุกรมจะเปลี่ยนไปเมื่อคุณปัดจอยสติ๊กเสมือนจริงบนหน้าจอ คุณจะพบว่าการเพิ่มค่าเมื่อจอยสติกปัดขึ้นหรือค่าลดลงเมื่อจอยสติ๊กเลื่อนลง
ID ของปุ่มหมายถึงปุ่มที่คุณกำลังคลิก
ขั้นตอนที่ 10:
อัปโหลดรหัสสำหรับการควบคุมระยะไกล
หากทุกอย่างเรียบร้อยให้ดำเนินการต่อและอัปโหลดรหัสสำหรับการควบคุมระยะไกลไปยังบอร์ด Arduino มีประเด็นสำคัญมากที่ต้องจำไว้!
iPhone ของคุณเชื่อมต่อกับ Romeo BLE Board แล้วในขั้นตอนการทดสอบล่าสุด อย่างไรก็ตามคุณไม่สามารถอัปโหลดรหัสไปยังบอร์ด Romeo BLE เมื่อมีการสร้างบลูทู ธ ระหว่างโทรศัพท์ของคุณกับบอร์ด ดังนั้นคุณควรหยุดการจับคู่บลูทู ธ ก่อน นอกจากนี้คุณสามารถอัปโหลดรหัสอีกครั้งหากบอร์ดถูกตัดการเชื่อมต่อจากโทรศัพท์ สิ่งนี้สำคัญมาก!
มีสองวิธีในการขัดจังหวะการเชื่อมต่อ วิธีหนึ่งคือคุณสามารถปิดการใช้พลังงาน Remeo BLE และเปิดอีกครั้ง วิธีอื่นคือเพียงปิดบลูทู ธ ในโทรศัพท์ของคุณ
หลังจากยกเลิกการเชื่อมต่อคุณสามารถอัปโหลดโค้ดตัวอย่างอีกครั้ง รหัสนี้มีชื่อว่า GoBLE_APP.ino ในแพ็คเกจรหัส
ขั้นตอนที่ 11:
เมื่ออัปโหลดสำเร็จแล้วคุณสามารถติดตามลูกศรสีแดงในภาพด้านล่างและปัดจอยสติ๊กเพื่อควบคุมหุ่นยนต์ของคุณ นอกจากนี้คุณสามารถคลิกปุ่มสีแดงเพื่อเปิดหรือปิด LED บนกระดานซึ่งเชื่อมต่อกับ PIN13
ขั้นตอนที่ 12:
เรื่องย่อรหัส
หลังจากเล่นหุ่นยนต์มาเริ่มเรียนรู้วิธีใช้รหัส ไม่มีคำเพิ่มเติมสำหรับรหัสการทดสอบสำหรับการทดสอบ GoBLE จากนั้นเราก็เดินหน้าต่อไปยังแอป GoBLE
ไม่จำเป็นต้องพูดถึงรหัสพื้นฐาน - มาดูส่วนที่เกี่ยวข้องกับการควบคุม bluethooth หากคุณต้องการควบคุมหุ่นยนต์จากระยะไกลจะใช้สองไลบรารีชื่อ Metro และ GoBLE
#include "Metro.h"
#include "GoBLE.h"
int joystickX, joystickY;
int buttonState 6;
joystickX, joystickY และ buttonState 6, ตัวแปรสามตัวถูกกำหนดไว้สำหรับไลบรารี GoBLE พวกเขาจะใช้ในการจัดเก็บค่าสถานะสำหรับแกน X, แกน Y และค่าเหล่านั้นของหกปุ่ม
แผนที่ด้านล่างแสดงเค้าโครงของปุ่มทั้งหมด คุณอาจทราบความหมายของ + X, -X, + Y และ –Y หากคุณวิเคราะห์การเปลี่ยนแปลงของค่าสถานะ
X & Y เป็นทิศทางการเคลื่อนไหวของ Joystick” +, -“ แสดงแนวโน้มของมูลค่า “ +” หมายถึงมูลค่าของรัฐเพิ่มขึ้น และ“ -” หมายถึงค่าสถานะลดลง
ขั้นตอนที่ 13:
การตั้งค่าเริ่มต้นจะต้องเขียนในฟังก์ชั่นของการตั้งค่า ()
Goble.begin ();
บรรทัดนี้ใช้สำหรับเริ่มการตั้งค่าบลูทู ธ และไม่ควรพลาดเมื่อใดก็ตามที่คุณใช้รหัสบลูทู ธ บนบอร์ด
Serial.begin (115200);
ในความเป็นจริงสายนี้ถูกใช้ในขั้นตอนการทดสอบ มันถูกใช้เพื่อเริ่มต้นพอร์ตอนุกรม หากคุณต้องการอ่านค่าจากการตรวจสอบพอร์ตอนุกรมคุณต้องเขียนคำสั่งนี้ในฟังก์ชั่นการตั้งค่า และยังต้องตั้งค่าอัตรารับส่งข้อมูล
เนื่องจากอัตรารับส่งข้อมูลของบลูทู ธ เป็นพิเศษคุณต้องตั้งค่าเป็น 115200 ตรวจสอบให้แน่ใจว่าได้ตั้งค่าอัตรารับส่งข้อมูลไม่เช่นนั้นอาจทำให้เกิดปัญหาบางอย่าง
โปรดดูต่อไป บรรทัดถัดไปคือฟังก์ชั่นของ Goble.available ()
if (Goble.available ()) {ทำอะไรสักอย่าง; }
หมายความว่าการดำเนินการต่อไปคือเมื่อได้รับตัวเลขผ่านทางบลูทู ธ แล้ว
สิ่งที่เขียนไว้ในวงเล็บจะเป็นการกระทำต่อไปของเรา ก่อนอื่นเราต้องวิเคราะห์ตัวเลขที่ได้รับ สองข้อความต่อไปนี้คือการอ่านค่าบนแกน X และ Y
joystickX = Goble.readJoystickX ();
joystickY = Goble.readJoystickY ();
// Serial.print ("joystickX:");
// Serial.print (joystickX);
// Serial.print ("joystickY:");
// Serial.println (joystickX);
คาดเดาสิ่งที่ทั้งสี่คำสั่ง Serial.print () ด้านบนหมายถึง มันเกี่ยวข้องกับอนุกรม เป็นเรื่องของลำดับที่จะพิมพ์ข้อมูลที่ได้รับซึ่งสะดวกสำหรับการดีบั๊กและการเพิ่มประสิทธิภาพ
” //” หมายถึงคำอธิบายประกอบของเนื้อหาต่อไปนี้ ประโยคทั้งสี่นี้จะไม่ถูกรวมไว้เมื่อรวบรวมรหัส กล่าวคือจะไม่มีการส่งข้อมูลไปยังซีเรียลเมื่อเราใช้คำอธิบายประกอบสำหรับคำสั่งทั้งสี่นี้
โปรดดูหน้าอ้างอิงของเว็บไซต์ Arudino (www.arduino.cc) สำหรับข้อมูลเพิ่มเติม
buttonState SWITCH_UP = Goble.readSwitchUp ();
buttonState SWITCH_DOWN = Goble.readSwitchDown ();
buttonState SWITCH_LEFT = Goble.readSwitchLeft ();
buttonState SWITCH_RIGHT = Goble.readSwitchRight ();
buttonState SWITCH_SELECT = Goble.readSwitchSelect ();
buttonState SWITCH_START = Goble.readSwitchStart ();
เนื้อหาทั้งหมดข้างต้นใช้สำหรับโหลดข้อมูลเกี่ยวกับสถานะของปุ่ม
เค้าโครงของปุ่มมีดังนี้
SWITCH_UP - 1 SWITCH_RIGHT - 2
SWITCH_DOWN - 3
SWITCH_LEFT - 4
SWITCH_SELECT - 5
SWITCH_START - 6
ขั้นตอนที่ 14:
เราจำเป็นต้องประมวลผลข้อมูลทั้งหมดที่อ่านก่อนที่เราจะเริ่มใช้งาน
ค่าที่อ่านบนจอยสติ๊กจะถูกจับคู่กับความเร็วในการหมุนของล้อของหุ่นยนต์ของเรา ดังนั้นความเร็วในการหมุนของล้อจะอยู่ระหว่าง -255 ถึง 255
int SpeedX = 2 * joystickX-256;
int Speed y = 2 * joystickY-256;
Serial.print ("ความเร็ว:");
Serial.print (SpeedX);
Serial.print ("");
Serial.println (Speedy);
และอนุกรมจะพิมพ์ความเร็ว หากไม่จำเป็นคุณสามารถเพิ่ม” //” ที่จุดเริ่มต้นเพื่อลบ
ทีนี้มาควบคุมหุ่นยนต์แล้วทำให้มันเคลื่อนที่
หาก (เลื่อนก้านควบคุมขึ้นหรือ (||) ลง) {หุ่นยนต์เคลื่อนที่ไปข้างหน้าหรือข้างหลัง; }
ถ้า (เลื่อนก้านควบคุมไปทางขวาหรือ (||) ซ้าย) {หุ่นยนต์เลื่อนไปทางขวาหรือไปทางซ้าย}
หาก (แกน X ของ Joystick อยู่ตรงกลางและ (&&) แกน Y ของ Joystick อยู่ตรงกลาง) {หุ่นยนต์หยุด }
รหัสผู้สื่อข่าวมีดังนี้:
if (SpeedX> 200 || SpeedX <-200) {LeftWheelSpeed = SpeedX; RightWheelSpeed = SpeedX; หุ่นยนต์ความเร็ว (ซ้ายล้อความเร็วความเร็วขวาล้อความเร็ว); }
อื่นถ้า (SpeedY> 200 || SpeedY <-200) {LeftWheelSpeed = SpeedY-80; RightWheelSpeed = SpeedY-80; Robot.Speed (LeftWheelSpeed, RightWheelSpeed);}
อื่นถ้า (Speed X == 0 && SpeedY == 0) {Robot.Speed (0,0); }
รหัสล่าสุดใช้สำหรับควบคุม LED บนบอร์ดที่เชื่อมต่อกับ PIN13
int ledPin = 13;
ควรระบุรหัส 13 ที่จุดเริ่มต้นของรหัส
pinMode (ledPin, OUTPUT);
ตั้งค่าโหมดเอาต์พุตสำหรับ LED โดยการเขียนฟังก์ชั่นการตั้งค่า () โปรดดูคำแนะนำการใช้งานฟังก์ชั่นของ pinMode () บนเว็บไซต์ Arduino (www.arduino.cc)
นิพจน์ต่อไปนี้แสดงสถานะของปุ่มต่างๆ เมื่อกดปุ่มหมายเลข 1 แล้ว LED จะสว่างขึ้น หมายความว่าพิน LED ถูกตั้งค่าเป็นสูง
if (buttonState 1 == PRESSED) {digitalWrite (ledPin, HIGH); }
เมื่อปล่อยปุ่มหมายเลข 1 แล้ว LED จะถูกปิด ความหมายว่าหมุด LED ถูกตั้งค่าให้ต่ำ
if (buttonState 1 == RELEASED) {digitalWrite (ledPin, LOW); }
นั่นคือทั้งหมดสำหรับการเข้ารหัสวันนี้ มันไม่สนุกเหรอ? ดังนั้นมันเป็นไปไม่ได้ที่จะเขียนโค้ดให้คุณใช่ไหม คุณอาจลองเปลี่ยนปุ่มเพื่อควบคุมไฟ LED ด้วยการปรับเปลี่ยนรหัส เป็นเรื่องที่น่าสนใจมากขึ้นเมื่อคุณสามารถควบคุมด้วยรหัสของคุณ ตอนนี้เริ่มมีความสนุกกับหุ่นยนต์ของคุณ !!!