วงจร

วิธีการสร้างหุ่นยนต์ - บทที่ 7: สร้างหุ่นยนต์ Arduino ที่ควบคุมด้วยบลูทู ธ : 14 ขั้นตอน

เวก้าผับ ฉบับพิเศษ

เวก้าผับ ฉบับพิเศษ

สารบัญ:

Anonim

เนื่องจากหุ่นยนต์ 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 ด้วยการปรับเปลี่ยนรหัส เป็นเรื่องที่น่าสนใจมากขึ้นเมื่อคุณสามารถควบคุมด้วยรหัสของคุณ ตอนนี้เริ่มมีความสนุกกับหุ่นยนต์ของคุณ !!!