POP-X2 Rover บทที่ 8 การควบคุมไร้สายผ่าน Bluetooth

เพื่อควบคุมการเคลื่อนที่ของ POP-X2 Rover จะเลือกใช้การสื่อสารผ่านบลูทูธ
ซึ่งเลือกใช้ผ่านบอร์ด ZX-BlueStick และใช้สมาร์ทโฟนแอนดรอยด์โหลดแอปพลิเคชั่นสำหรับควบคุม

ZX-BlueStick

ZX-BlueStick เป็นโมดูลบลูทูธตัวลูกที่ใช้โปรไฟล์พอร์ตอนุกรม (Serial Port Profile :SPP) ในการติดต่อสื่อสาร จึงเหมาะที่ใช้สื่อสารอนุกรมกับอุปกรณ์ตัวแม่แบบไร้สายผ่านคลื่อนวิทยุ โดย ZX-BlueStick แปลงสัญญาณออกมาเป็นอนุกรมมีขา TxD สำหรับส่งข้อมูล ขา RxD สำหรับรับข้อมูล ระยะทำการประมาณ 10 เมตร ใช้ไฟเลี้ยงในย่าน 3.3V-5V

ขาต่อใช้งาน

มีขาต่อใช้งานจำเป็น 4 ขาประกอบด้วย

+Vcc สำหรับต่อไฟเลี้ยง+3.3 ถึง 5V

GND ต่อขาไฟลบหรือกราวด์

TxD เป็นขาส่งข้อมูล ถ้าต่อกับ POP-X2 จะต้องต่อเข้ากับขารับข้อมูล (RxD)

RxD เป็นขารับข้อมูล ถ้าต่อกับ POP-X2 จะต้องต่อเข้ากับขาส่งข้อมูล (TxD)

ADX-BTStick

กรณี POP-X2 Rover มีการขับเคลื่อน การต่อสายจะต้องแข็งแรง ไม่หลุดระหว่างการเคลื่อนที่ บอร์ด ADX-BTStick จะใช้สาย JST-3AA-4 ความยาวสี่นิ้วต่อเข้ากับบอร์ด POP-X2 ได้สะดวก พร้อมมีจุดยึด ยึดเข้ากับโครงสร้างของ POP-X2 Rover ได้เลย

การติดตั้ง ADX-BTStick และ ZX-BlueStick

1. นำบอร์ด ADX-BTStick ยึดเข้ากับแผ่นฐาน POP-X2 Rover ในตำแหน่งดังรูป ร้อยด้วยสกรู 3×10 มม. ขันยึดด้วยนอต 3 มม.

2. นำสาย JST3AA-4 เสียบจาก TxD ไปยัง RxD ของ POP-X2 และเสียบ RxD ไปยัง TxD ของ POP-X2 ดังรูป

3. เสียบ ZX-BlueStick ลงบนบอร์ด ADC-BTStick ให้ตำแหน่งขาทั้ง 4 ขาตรงกันด้วย

ติดตั้งแอปพลิเคชั่น BlueStick Control

BlueStick Control เป็นแอปพลิเคชันบนแอนดรอยด์ ทำหน้าที่เป็นรีโมตคอนโทรล ควบคุมผ่านสัญญาณบลูทูธโดยใช้รูปแบบ Serial Port Profile (SPP) ซึ่งทางบริษัทอินโนเวตีฟ เอ็กเพอริเมนต์ จำกัด : inex ได้ออกแบบและให้ดาวน์โหลดใช้งานได้ฟรีจาก Play Store

1. จาก Smart Phone เปิด Play Store ในช่องค้นหาพิมพ์ BlueStick Control จะพบแอปพลิเคชั่น หน้าตาดังรูป กด Install เพื่อติดตั้ง

2. เมื่อติดตั้งเสร็จให้กด Open เพื่อเปิดใช้งานแอป

3. หลังจากนี้ เลือกเปิดได้จาก Icon BlueStick Control


4. ทำการจับคู่ BlueStick ให้ SmartPhone ของเรารู้จักเสียก่อน โดยเลื่อนแถบเมนูด้านบนลงมา กดค้างไว้ที่ปุ่ม Icon Bluetooth เพื่อเปิดหน้าต่างตั้งค่า BLuetooth

5. ทำการค้นหาอุปกรณ์ใหม่ ใช้เวลาสักพัก จะพบอุปกรณ์ชื่อ BlueStickxxxx
(ค่าตัวเลขที่ตามมาจะไม่ซ้ำกัน) ให้คลิกเพื่อจับคู่

6. จะมีหน้าต่างให้ป้อน Pin 4 ตัว ให้ป้อน 1234 ลงไป จากนั้นคลิกที่ปุ่มจับคู่

7. จะพบ BlueStick มาอยู่ในรายการของอุปกรณ์ที่จับคู่

8. เปิดโปรแกรม BlueStick Control คลิกที่ปุ่ม Pair เพื่อจับคู่ในแอป

9. คลิกเลือกที่ BlueStickxxxx การเชื่อมต่อก็เสร็จสมบูรณ์

10. สังเกตว่า LED ที่บอร์ด ZX-BlueStick จะติดกะพริบช้าลง จากเดิมที่กะพริบอย่างต่อเนื่อง

การส่งค่าควบคุมจากหน้าจอ

    หน้าจอแอป จะมีปุ่มสำหรับควบคุมอยู่ 8 ปุ่ม แต่ละปุ่มจะเป็นการส่งค่าคีย์ขนาด 1 ไบต์ ที่สามารถเขียนโปรแกรมกำหนดเงื่อนไขตรวจสอบได้ง่ายๆ โดยจะมองเป็นรหัสแอสกี้หรือเลขฐานสิบหกก็ได้

 

ชุดคำสั่งที่ใช้สื่อสารข้อมูลฝั่ง POP-X2

คำสั่ง uart1()

สำหรับส่งข้อความออกไปยังการสื่อสารอนุกรม

คำสั่ง uart1_ready() ,uart1_available()

ตรวจสอบว่ามีข้อมูลถูกส่งเข้ามาหรือไม่ ถ้าถูกส่งจะให้ผลลัพธ์เป็นจริง ไม่เช่นนั้นจะเป็นเท็จ

คำสั่ง uart1_getkey()

สำหรับอ่านข้อมูลที่ถูกส่งเข้ามา เก็บไว้ในตัวแปร

 

ตัวอย่างที่ 33 อ่านข้อมูลนำมาแสดงผลที่ GLCD

เพื่อให้เห็นการรับข้อมูลจาก SmartPhone ว่าส่งข้อมูลอะไรมาบ้าง

 
 
#include <popx2.h> 
byte x; 
void setup(){   
  setTextSize(3); 
  glcdMode(3);
} 
void loop(){   
  if(uart1_ready()){     
    x=uart1_getkey();     
    glcd(1,0,"0x%h",x);
  } 
}


การทำงาน

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

ตัวอย่างที่ 34 การควบคุมการเคลื่อนที่เบื้องต้น

เมื่อรู้ค่าตัวเลขที่ต้องใช้แล้ว ก็นำค่าเหล่านั้นมาใช้เปรียบเทียบกับคำสั่ง if ได้ เพื่อควบคุมให้เคลื่อนที่เดินหน้า ถอยหลังเลี้ยวซ้ายและเลี้ยวขวา เมื่อไม่ตรงตามเงื่อนไขเหล่านั้นก็สั่งให้หยุด

 
 
#include <popx2.h>
byte x;
void setup() {
  setTextSize(2);
  setTextColor(GLCD_BLUE);
  glcdMode(3);
}
void loop() {
  if (uart1_ready()) {
    x = uart1_getkey();
    if (x == 0x38) {
      fd(50);
      glcd(1, 1, "Forward   ");
    }
    else if (x == 0x32) {
      bk(50);
      glcd(1, 1, "Backward  ");
    }
    else if (x == 0x34) {
      sl(50);
      glcd(1, 1, "Spin Left ");
    }
    else if (x == 0x36) {
      sr(50);
      glcd(1, 1, "Spin Right");
    }
    else {
      ao();
      glcd(1, 1, "Motor Stop");
    }
  }
}

ตัวอย่างที่ 35 เคลื่อนย้ายกระป๋องด้วยการควบคุมไร้สาย

ต้องทบทวนฟังก์ชั่นที่ใช้สำหรับยกกระป๋อง (ฟังก์ชั่น keep()) และวางกระป๋อง (ฟังก์ชั่น Place()) นำมาวางในโค้ด เรียกฟังก์ชั่น keep() ทำงานเมื่อปุ่ม Grab (0x41) ถูกกด
เรียกฟังก์ชั่น Place() ทำงานเมื่อปุ่ม Release (0x42) ถูกกด

 
 
#include <popx2.h>
byte x;
void setup() {
  setTextSize(2);
  setTextColor(GLCD_BLUE);
  glcdMode(3);
  servo(1, 25); delay(300);  // กาง
  servo(2, 10); delay(300);  // ยก
}
void loop() {
  if (uart1_ready()) {
    x = uart1_getkey();
    if (x == 0x38) {
      fd(50);
      glcd(1, 1, "Forward   ");
    }
    else if (x == 0x32) {
      bk(50);
      glcd(1, 1, "Backward  ");
    }
    else if (x == 0x34) {
      sl(50);
      glcd(1, 1, "Spin Left ");
    }
    else if (x == 0x36) {
      sr(50);
      glcd(1, 1, "Spin Right");
    }
    else if (x == 0x43) {
      Keep();
      glcd(1, 1, "CAN Keep  ");
    }
    else if (x == 0x44) {
      Place();
      glcd(1, 1, "CAN Place ");
    }
    else {
      ao();
      glcd(1, 1, "Motor Stop");
    }
  }
}
void Keep() {
  servo(2, 110); delay(300);  // วาง
  servo(1, 80); delay(300);   // คีบ
  servo(2, 10); delay(300);   // ยก
}
void Place() {
  servo(2, 110); delay(300);  // วาง
  servo(1, 25); delay(300);  // กาง
  servo(2, 10); delay(300);   // ยก
}

จากข้อมูลทั้ง 8 ตอนคงพอให้สามารถนำเอา POP-X2 Rover ไปใช้งานได้หลากหลายพอสมควรแล้วครับ ถ้าใครยังไม่ได้อ่านตอนก่อนหน้านี้ก็กดเข้าไปอ่านตามลิงก์ได้เลยครับ

Facebook Comments Box

Press Ctrl+C to copy the following code.
"