จุดประสงค์การเรียนรู้
- เพื่อให้ผู้เรียนสามารถเขียน Appinventor เพื่อควบคุมการทำงานสมองกลฝังตัวได้
ภาพหลักการทำงานการส่งข้อมูลด้วยสัญญาณบลูทูธจากSmartphoneควบคุมหุ่นยนต์
ลักษณะการทำงานโดยทั่วไปsmartphoneจะติดต่อกับบอร์ดหุ่นยนต์โดยใช้สัญญาณบลูทูธ
โดยส่งเป็นข้อความผ่านserialบลูทูธให้กับบอร์ดหุ่นยนต์ ตัวอย่างที่ใช่ส่งในLabนี้จะส่งข้อความเป็นอักษรในตาราง
อุปกรณ์ที่ใช้
1. Smartphone ระบบปฏิบัติการ android
2. หุ่นยนต์ที่ใช้บอร์ด Arduino ในที่นี้จะใช้หุ่นยนต์ ชุดหุ่นยนต์เพื่อการเรียนรู้LotusNanoBot
3. แบตเตอรี่ Lipo 7.4 Vdc 1500 mAh
4. โมดูลบลูทูธ HC-05 หรือ HC-06
การต่อโมดูลบลูทูธ HC-05,HC-06 เข้ากับบอร์ดอื่นๆ
บอร์ดอื่นๆ
Tx(D0)
Rx(D1)
Blultooth HC05,HC06
RXD
TXD
การต่อโมดูลบลูทูธ HC-05,HC-06 เข้ากับบอร์ด LotusNanoBot
- สามารถดาวโหลด App ใน playstore ที่มีชื่อว่า KLS Remote ในไปใช้งานควบคุมทิศทางการเคลื่อนที่ของหุ่นยนต์
ตัวอย่าง1.1 Code Arduino IDE แบบไม่ใช้ไลบรารี่ LotusNanoBot.h
Code Arduino IDE
#define DL1 7
#define DL2 8
#define PWML 6
#define DR1 9
#define DR2 4
#define PWMR 5
/////////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(9600); ///////// อ่านซีเรียลมอนิเตอร์ ที่ 9600
pinMode(DL1, OUTPUT);
pinMode(DL2, OUTPUT);
pinMode(PWML, OUTPUT);
pinMode(DR1, OUTPUT);
pinMode(DR2, OUTPUT);
pinMode(PWMR, OUTPUT);
}
/////////////////////////////////////////////////////////////////////////////////
void loop()
{
if(Serial.available()>0);
{ char x = Serial.read();
if (x == 'F') {run(100,100);} /// รับค่าคำสั่ง F เดินหน้า
if (x == 'B'){run(-100,-100);} /// รับค่าคำสั่ง B ถอยหลัง
if (x == 'R') {run(100,-100);} /// รับค่าคำสั่ง R เลี้ยวขวา
if (x == 'L') {run(-100,100);} /// รับค่าคำสั่ง L เลี้ยวซ้าย
if (x == 'S') {run(0,0);} /// รับค่าคำสั่ง S หยุด
}}
/////////////////////////////////////////////
void run(int spl,int spr)
{
if(spl>0)
{
digitalWrite(DL1, LOW);
digitalWrite(DL2, HIGH);
analogWrite(PWML, spl);
}
else if(spl<0)
{
digitalWrite(DL1, HIGH);
digitalWrite(DL2, LOW);
analogWrite(PWML, -spl);
}
else
{
digitalWrite(DL1, HIGH);
digitalWrite(DL2, HIGH);
analogWrite(PWMR, -255);
}
///////////////////
if(spr>0)
{
digitalWrite(DR1, LOW);
digitalWrite(DR2, HIGH);
analogWrite(PWMR, spr);
}
else if(spr<0)
{
digitalWrite(DR1, HIGH);
digitalWrite(DR2, LOW);
analogWrite(PWMR, -spr);
}
else
{
digitalWrite(DR1, HIGH);
digitalWrite(DR2, HIGH);
analogWrite(PWMR, -255);
}
}
ตัวอย่าง1.2 Code Arduino IDE แบบที่ใช้ไลบรารี่ LotusNanoBot.h
Arudino IDE LotusNanoBot
# include <LotusNanoBot.h>
void setup()
{
Serial.begin(9600); ///////// อ่านซีเรียลมอนิเตอร์ ที่ 9600
}
void loop()
{
if(Serial.available()>0);
{ char x = Serial.read();
if (x == 'F') {run(100,100);} /// รับค่าคำสั่ง F เดินหน้า
if (x == 'B'){run(-100,-100);} /// รับค่าคำสั่ง B ถอยหลัง
if (x == 'R') {run(100,-100);} /// รับค่าคำสั่ง R เลี้ยวขวา
if (x == 'L') {run(-100,100);} /// รับค่าคำสั่ง L เลี้ยวซ้าย
if (x == 'S') {run(0,0);} /// รับค่าคำสั่ง S หยุด
}}
การเขียน Appinventorแบบใช้งานเองประกอบตัวอย่างที่ 1 เข้าไปที่เว็บไซต์แล้วเขียนโค้ดตามตัวอย่าง :https://appinventor.mit.edu/
- หน้า Designer
การเขียน Blocks
วีดีโอสอนการเขียน Appinventor
code การเคลื่อนที่และใช้แขนกล 1 ข้าง / สามารถดาวโหลด App ใน playstore ที่มีชื่อว่า KTM RobotV1
ตัวอย่าง2.1 Code Arduino IDE แบบไม่ใช้ไลบรารี่ LotusNanoBot.h หุ่นยนต์เคลื่อนที่พร้อมแขนกลทำงาน
Code Arduino IDE
//////// ผนวกไลบรารี่ ////////////
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h>
Adafruit_SSD1306 OLED(-1);
///////////ตั้งค่าปุ่มกด///////////////////
int button = 2; /// กำหนดปุ่มกดสวิตซ์ขา 2
int ss1 = 10; // เปิดใช้งาน s1 ที่พอร์ต 10
int ss2 = 11; // เปิดใช้งาน s1 ที่พอร์ต 11
int ss3 = 12; // เปิดใช้งาน s1 ที่พอร์ต 12
Servo sv1; // ประกาศการใช้งาน sv1
Servo sv2; // ประกาศการใช้งาน sv2
Servo sv3; // ประกาศการใช้งาน sv3
//////////////////////////////////////////////
#define DL1 7
#define DL2 8
#define PWML 6
#define DR1 9
#define DR2 4
#define PWMR 5
/////////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(9600); ///////// อ่านซีเรียลมอนิเตอร์ ที่ 9600
pinMode(DL1, OUTPUT);
pinMode(DL2, OUTPUT);
pinMode(PWML, OUTPUT);
pinMode(DR1, OUTPUT);
pinMode(DR2, OUTPUT);
pinMode(PWMR, OUTPUT);
sv1.attach(ss1); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv1
sv2.attach(ss2); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv2
sv3.attach(ss3); // เรียกใช้งานเตรียมตอบสนองเซอร์โว sv3
}
/////////////////////////////////////////////////////////////////////////////////
void loop()
{
if(Serial.available()>0);
{ char x = Serial.read();
if (x == 'F') {run(100,100);} /// รับค่าคำสั่ง F เดินหน้า
if (x == 'B'){run(-100,-100);} /// รับค่าคำสั่ง B ถอยหลัง
if (x == 'R') {run(100,-100);} /// รับค่าคำสั่ง R เลี้ยวขวา
if (x == 'L') {run(-100,100);} /// รับค่าคำสั่ง L เลี้ยวซ้าย
if (x == 'S') {run(0,0);} /// รับค่าคำสั่ง S หยุด
if (x == 'U') {sv1.write(70);delay(200);}
if (x == 'D') {sv1.write(0);delay(200);}
}}
/////////////////////////////////////////////
void run(int spl,int spr)
{
if(spl>0)
{
digitalWrite(DL1, LOW);
digitalWrite(DL2, HIGH);
analogWrite(PWML, spl);
}
else if(spl<0)
{
digitalWrite(DL1, HIGH);
digitalWrite(DL2, LOW);
analogWrite(PWML, -spl);
}
else
{
digitalWrite(DL1, HIGH);
digitalWrite(DL2, HIGH);
analogWrite(PWMR, -255);
}
///////////////////
if(spr>0)
{
digitalWrite(DR1, LOW);
digitalWrite(DR2, HIGH);
analogWrite(PWMR, spr);
}
else if(spr<0)
{
digitalWrite(DR1, HIGH);
digitalWrite(DR2, LOW);
analogWrite(PWMR, -spr);
}
else
{
digitalWrite(DR1, HIGH);
digitalWrite(DR2, HIGH);
analogWrite(PWMR, -255);
}
}
ตัวอย่าง2.2 Code Arduino IDE แบบใช้ไลบรารี่ LotusNanoBot.h หุ่นยนต์เคลื่อนที่พร้อมแขนกลทำงาน
Arduino IDE Code LotusNanoBot.h
# include <LotusNanoBot.h>
void setup()
{
Serial.begin(9600); ///////// อ่านซีเรียลมอนิเตอร์ ที่ 9600
}
void loop()
{
if(Serial.available()>0);
{ char x = Serial.read();
if (x == 'F') {run(100,100);} /// รับค่าคำสั่ง F เดินหน้า
if (x == 'B'){run(-100,-100);} /// รับค่าคำสั่ง B ถอยหลัง
if (x == 'R') {run(100,-100);} /// รับค่าคำสั่ง R เลี้ยวขวา
if (x == 'L') {run(-100,100);} /// รับค่าคำสั่ง L เลี้ยวซ้าย
if (x == 'S') {run(0,0);} /// รับค่าคำสั่ง S หยุด
if (x == 'U') {servo(1,90);delay(200);}
if (x == 'D') {servo(1,0);delay(200);}
}}