รถหุ่นยนต์ควบคุมด้วยโทรศัพท์มือถือโดยใช้ G-Sensor และ Arduino
ARDUINO
ในบทความนี้เราจะควบคุมรถหุ่นยนต์ผ่านเซ็นเซอร์ Gของโทรศัพท์มือถือของเราและคุณจะสามารถเคลื่อนหุ่นได้โดยการเอียงโทรศัพท์ เราจะใช้แอพพลิเคชัน Arduino และ RemoteXYสำหรับหุ่นยนต์ควบคุมด้วย G-Sensor นี้ แอป RemoteXY ถูกใช้ในการสร้างอินเทอร์เฟซในโทรศัพท์สมาร์ทเพื่อควบคุมหุ่นยนต์ เราจะเพิ่มจอยสติ๊กลงในอินเทอร์เฟซเพื่อให้หุ่นยนต์สามารถควบคุมด้วยจอยสติ๊กเช่นเดียวกับการเอียงโทรศัพท์
เซนเซอร์ G-Sensor หรือ Gravityเป็นAccelerometerในโทรศัพท์สมาร์ทซึ่งใช้ควบคุมทิศทางหน้าจอของโทรศัพท์ Accelerometer จะรับรู้ถึงทิศทาง X, Y, Z ของแรงโน้มถ่วงและหมุนหน้าจอตามการจัดตำแหน่งของโทรศัพท์ วันตอนนี้มีความละเอียดอ่อนมากขึ้นและถูกต้องโครงการหุ่นยนต์ที่นี่เซ็นเซอร์ Gyroscope ที่ในโทรศัพท์มือถือเพื่อตัดสินใจในการวางแนวของหน้าจอ ในโครงการของเรารถหุ่นยนต์จะเคลื่อนที่ไปตามทิศทางที่โทรศัพท์เอียงขึ้นเช่นเมื่อเราเอียงโทรศัพท์ไปข้างหน้ารถจะเดินหน้าไปเรื่อย ๆ และเอียงลงจากนั้นรถจะเคลื่อนที่ไปข้างหลัง นี่เหมือนกับเมื่อเราเล่นเกมรถใน Mobile พวกเขายังใช้เซ็นเซอร์ G เพื่อย้ายรถไปด้วย ตรวจสอบวิดีโอในตอนท้ายและตรวจสอบอีกด้วย
ส่วนประกอบที่จำเป็น:
- ตัวถังรถหุ่นยนต์สองล้อ
- Arduino UNO
- ตัวควบคุมมอเตอร์ L298N
- HC-06 โมดูลบลูทู ธ (HC-05 จะทำงานด้วย)
- แหล่งจ่ายไฟหรือเซลล์
- สายเชื่อมต่อ
การสร้างอินเทอร์เฟซสำหรับหุ่นยนต์โดยใช้ RemoteXY app:
สำหรับการสร้างอินเทอร์เฟซเพื่อควบคุมรถหุ่นยนต์โดยใช้ RemoteXY app คุณจะต้องไปที่ลิงก์ต่อไปนี้
http://remotexy.com/en/editor/หน้าเว็บจะมีลักษณะดังนี้
แล้วจากด้านซ้ายของหน้าจอ, รับปุ่มสวิทช์และจอยสติ๊กและวางไว้ในอินเตอร์เฟซมือถือ ปุ่มจะเปิดไฟที่ขา 13 ซึ่งเชื่อมต่ออยู่ภายใน Arduino และจอยสติ๊กจะย้ายรถหุ่นยนต์ เว็บเพจหลังจากวางสวิตช์และจอยสติ๊กจะมีลักษณะดังนี้
จากนั้นเราจะต้องเปิดใช้งานเซ็นเซอร์ G เปิด / ปิดการใช้งานปุ่มพร้อมกับจอยสติ๊กเพื่อให้เราสามารถเคลื่อนหุ่นยนต์ด้วยการเอียงโทรศัพท์ในทิศทางซ้ายขวาขึ้นและลง ใช้ปุ่มนี้เพื่อเปิดและปิดใช้งานเซ็นเซอร์ G เมื่อเซ็นเซอร์ G ถูกปิดใช้งานรถยนต์สามารถควบคุมได้โดยการเลื่อนจอยสติ๊ก เพื่อวาง G เซ็นเซอร์เปิด / ปิดปุ่มคลิกที่จอยสติ๊กที่คุณวางไว้ในอินเตอร์เฟซและด้านซ้ายจะมีคุณสมบัติส่วนจะมีตัวเลือกในที่สุดสำหรับการวางปุ่มเซ็นเซอร์ G ใกล้จอยสติ๊ก, เพื่อวางปุ่ม G sensor ไว้ที่ใดก็ได้ที่คุณต้องการ หน้าเว็บหลังจากนี้จะมีลักษณะเช่นนี้
หลังจากนั้นคลิกที่ปุ่ม“รหัสที่มาได้รับ” และบันทึกไว้บนคอมพิวเตอร์ของคุณ ดาวน์โหลดห้องสมุดจากที่นี่และบันทึกลงในโฟลเดอร์ห้องสมุด Arduino รวบรวมรหัสที่ดาวน์โหลดเพื่อตรวจสอบว่าไม่มีข้อผิดพลาด นี่ไม่ใช่รหัสที่จะเรียกใช้ Robot แต่จะช่วยในการใช้ App กับ Arduino ดาวน์โหลดแอพได้จากที่นี่หรือไปที่ Play สโตร์และดาวน์โหลดแอป RemoteXY จากแอนดรอยด์สมาร์ทโฟน
แผนผังวงจรและคำอธิบาย:
ก่อนอื่นเราจะติดต่อกับ L298N motor controller กับ Arduino ต่อขา ENA และ ENB ของตัวควบคุมมอเตอร์กับขา Arduino 12 และ 11 ตามลำดับ หมุดสองขานี้ใช้สำหรับการควบคุม PWM ของมอเตอร์ การใช้หมุดนี้เราสามารถเพิ่มหรือลดความเร็วของรถได้ จากนั้นต่อ IN1, IN2, IN3 และ IN4 เข้ากับหมุด Arduino 10, 9, 8 และ 7 ตามลำดับ หมุดเหล่านี้จะหมุนมอเตอร์ทั้งสองทิศทาง (ตามเข็มนาฬิกาและทวนเข็มนาฬิกา)
ในการขับเคลื่อนมอเตอร์ให้เชื่อมต่อประจุบวกและลบของแบตเตอรี่กับ 12V และพื้นของตัวควบคุมมอเตอร์ จากนั้นเชื่อมต่อ 5V และพื้นดินจากตัวควบคุมมอเตอร์ไปยัง Arduino Vin และพื้น
จากนั้นเราจะเชื่อมต่อโมดูลบลูทู ธ HC-06 กับ arduino ถ้าคุณมี HC-05 แล้วจะใช้งานได้เช่นกัน เชื่อมต่อ VCC กับพื้นของโมดูลบลูทู ธ ไปยัง 5V และพื้นของ Arduino จากนั้นต่อขา TX ของ Bluetooth Module กับขา 2 ของ Arduino และขา RX ไปที่ขา 3 ของ Arduino ตรวจสอบรถของเล่นควบคุมด้วยบลูทู ธ โดยใช้ Arduinoเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการใช้ Bluetooth กับ Arduino
คำอธิบายโค้ด:
รหัส Arduinoเต็มรูปแบบสำหรับรถหุ่นยนต์ควบคุมด้วยมือนี้ได้รับด้านล่างในส่วนโค้ดที่นี่เราจะเข้าใจวิธีการทำงานของรหัสนี้
ประการแรกเราได้รวมไลบรารีสำหรับซอฟต์แวร์ Serial และ RemoteXY แล้ว ไลบรารี RemoteXY จะช่วยเราในการตั้งค่าแอปด้วย Arduino ผ่านทางเราจะควบคุมรถหุ่นยนต์ หลังจากนั้นเราได้กำหนดหมุดสำหรับโมดูลบลูทู ธ TX จากโมดูลบลูทู ธ เชื่อมต่อกับขา 2 ของ Arduino ซึ่งเป็นขา RX ของ Arduino และ RX จากโมดูลบลูทู ธ จะเชื่อมต่อกับขา 3 ของ Arduino ซึ่ง คือขา TX ของ Arduino และตั้งค่าอัตรา baud ของโมดูลบลูทู ธ ที่ 9600
#define REMOTEXY_MODE__SOFTWARESERIAL #include <SoftwareSerial.h> // รวมไลบรารีไฟล์ซอฟต์แวร์ # include <RemoteXY.h> // รวมไลบรารีของรีโมต / * การตั้งค่าการเชื่อมต่อ RemoteXY * / #define REMOTEXY_SERIAL_RX 2 // กำหนดพิน 2 เป็นขา RX #define REMOTEXY_SERIAL_TX 3 // กำหนดพิน 3 เป็นขา TX #define REMOTEXY_SERIAL_SPEED 9600 // การตั้งค่าอัตราบิตที่ 9600
รหัสต่อไปนี้จะเพิ่มหรือลดความเร็วของมอเตอร์ เมื่อจอยสติ๊กอยู่ที่กึ่งกลางความเร็วจะเป็นศูนย์และเมื่อมันอยู่ในทิศทางไปข้างหน้าความเร็วจะเพิ่มขึ้นจากศูนย์ถึง 100 ความเร็วจะลดลงจาก 0 ถึง -100 เมื่อรถเคลื่อนเข้า ทิศทางย้อนกลับ รถยังสามารถเคลื่อนย้ายได้เฉพาะความเร็วซึ่งสามารถทำได้โดยให้สัญญาณ PWM สัญญาณ PWM จะถูกส่งไปยังมอเตอร์ตามการหมุนของจอยสติ๊ก
ถ้า (motor_speed> 100) motor_speed = 100; if (motor_speed <-100) motor_speed = -100; if (motor_speed> 0) { digitalWrite (ตัวชี้ [0], สูง); digitalWrite (ตัวชี้ [1], ต่ำ); analogWrite (ตัวชี้ [2], motor_speed * 2.55); } else if (motor_speed <0) { digitalWrite (ตัวชี้ [0], ต่ำ); digitalWrite (ตัวชี้ [1], สูง); analogWrite (ตัวชี้ [2], (-motor_speed) * 2.55); } อื่น { digitalWrite (ตัวชี้ [0], ต่ำ); digitalWrite (ตัวชี้ [1], ต่ำ); analogWrite (ตัวชี้ [2], 0); }
ในโค้ดต่อไปนี้เราได้กำหนดฟังก์ชันที่จะเรียกเมื่อใดก็ตามที่เราจะย้ายจอยสติ๊กในแอป เมื่อเราจะเปิดสวิทช์ใน app แล้วตรรกะ 1 จะได้รับไป pin 13 ของ Arduino ซึ่งจะเปิด Pin LED ขณะเคลื่อนที่หุ่นยนต์ไปข้างหน้าและถอยหลัง ฟังก์ชันSpeedจะถูกเรียก
void loop () { RemoteXY_Handler (); digitalWrite (ledpin, (RemoteXY.switch_1 == 0)? LOW: HIGH); ความเร็ว (first_motor, RemoteXY.joystick_1_y - RemoteXY.joystick_1_x); ความเร็ว (second_motor, RemoteXY.joystick_1_y + RemoteXY.joystick_1_x); }
วิธีเรียกใช้:
เพิ่มไลบรารีของ RemoteXY ลงในห้องสมุด Arduino และอัปโหลดโค้ดใน Arduino IDE จากนั้นดาวน์โหลดแอปพลิเคชันในโทรศัพท์มือถือของคุณแล้วเปิดบลูทู ธ อินเทอร์เฟซของแอปจะมีลักษณะดังนี้
จากนั้นไปที่บลูทู ธ และเปิดบลูธูทที่นั่น หลังจากเปิดเครื่องแล้วอุปกรณ์จะแสดงอุปกรณ์บลูทู ธ เลือกโมดูลบลูทู ธ HC-06 จากนั้นจะนำคุณไปสู่อินเทอร์เฟซจากที่คุณสามารถควบคุมหุ่นยนต์คาร์ได้
นี่คือวิธีที่เราสามารถใช้Gravity Sensor ภายในโทรศัพท์เคลื่อนที่ของเราเพื่อย้ายหุ่นยนต์ คุณสามารถทดลองเพิ่มเติมและค้นหาการใช้เซนเซอร์ G เพื่อควบคุมสิ่งต่างๆภายนอกโดยใช้ไมโครคอนโทรลเลอร์ในระหว่าง (เช่น Arduino)
รหัส
#define REMOTEXY_MODE__SOFTWARESERIAL
#include <SoftwareSerial.h> // รวมไลบรารี serial ซอฟต์แวร์
# include <RemoteXY.h> // รวมไลบรารีของรีโมต
#include <SoftwareSerial.h> // รวมไลบรารี serial ซอฟต์แวร์
# include <RemoteXY.h> // รวมไลบรารีของรีโมต
/ * การตั้งค่าการเชื่อมต่อ RemoteXY * /
#define REMOTEXY_SERIAL_RX 2 // กำหนด PIN 2 เป็น RX pin
# define REMOTEXY_SERIAL_TX 3 // กำหนด PIN 3 เป็น TX pin
# define REMOTEXY_SERIAL_SPEED 9600 // การตั้งค่า Baudrate ที่ 9600
#define REMOTEXY_SERIAL_RX 2 // กำหนด PIN 2 เป็น RX pin
# define REMOTEXY_SERIAL_TX 3 // กำหนด PIN 3 เป็น TX pin
# define REMOTEXY_SERIAL_SPEED 9600 // การตั้งค่า Baudrate ที่ 9600
unsigned char RemoteXY_CONF [] = // การกำหนดค่า
รีโมตคอนโทรล {3,0,23,0,1,5,5,15,41,11
, 43,43,1,2,0,6,5,27,11,5
, 79,78,0,79,70,70,0};
struct {/ / ฟังก์ชันสำหรับการประกาศตัวแปรที่
ลงนามใน joystick_1_x; / / จอยสติกแกน x
เซ็นจอยสติ๊กจอยสติ๊ก_1_y; / / จอยสติกแกน y แกน
unsigned char_1; // ตัวแปรสำหรับสวิตช์
unsigned char connect_flag;
รีโมตคอนโทรล {3,0,23,0,1,5,5,15,41,11
, 43,43,1,2,0,6,5,27,11,5
, 79,78,0,79,70,70,0};
struct {/ / ฟังก์ชันสำหรับการประกาศตัวแปรที่
ลงนามใน joystick_1_x; / / จอยสติกแกน x
เซ็นจอยสติ๊กจอยสติ๊ก_1_y; / / จอยสติกแกน y แกน
unsigned char_1; // ตัวแปรสำหรับสวิตช์
unsigned char connect_flag;
} RemoteXY;
// กำหนดหมุดสำหรับมอเตอร์แรกกำหนด
# IN1 10
# กำหนด IN2 9
# กำหนด ENA 12
# IN1 10
# กำหนด IN2 9
# กำหนด ENA 12
// กำหนดหมุดสำหรับมอเตอร์ที่สอง
# กำหนด IN3 8
# กำหนด IN4 7
# กำหนด ENB 11
# กำหนด IN3 8
# กำหนด IN4 7
# กำหนด ENB 11
/ กำหนดขา LED
# กำหนด ledpin 13
# กำหนด ledpin 13
unsigned char first_motor [3] =
{IN1, IN2, ENA};
unsigned char second_motor [3] =
{IN3, IN4, ENB};
{IN1, IN2, ENA};
unsigned char second_motor [3] =
{IN3, IN4, ENB};
ความเร็วโมฆะ (unsigned char * pointer, int motor_speed)
{
if (motor_speed> 100) motor_speed = 100;
if (motor_speed <-100) motor_speed = -100;
if (motor_speed> 0) {
digitalWrite (ตัวชี้ [0], สูง);
digitalWrite (ตัวชี้ [1], ต่ำ);
analogWrite (ตัวชี้ [2], motor_speed * 2.55);
}
else if (motor_speed <0) {
digitalWrite (ตัวชี้ [0], ต่ำ);
digitalWrite (ตัวชี้ [1], สูง);
analogWrite (ตัวชี้ [2], (-motor_speed) * 2.55);
}
else {
DigitalWrite (ตัวชี้ [0], LOW);
digitalWrite (ตัวชี้ [1], ต่ำ);
analogWrite (ตัวชี้ [2], 0);
}
}
{
if (motor_speed> 100) motor_speed = 100;
if (motor_speed <-100) motor_speed = -100;
if (motor_speed> 0) {
digitalWrite (ตัวชี้ [0], สูง);
digitalWrite (ตัวชี้ [1], ต่ำ);
analogWrite (ตัวชี้ [2], motor_speed * 2.55);
}
else if (motor_speed <0) {
digitalWrite (ตัวชี้ [0], ต่ำ);
digitalWrite (ตัวชี้ [1], สูง);
analogWrite (ตัวชี้ [2], (-motor_speed) * 2.55);
}
else {
DigitalWrite (ตัวชี้ [0], LOW);
digitalWrite (ตัวชี้ [1], ต่ำ);
analogWrite (ตัวชี้ [2], 0);
}
}
การตั้งค่าเป็นโมฆะ ()
{
// กำหนดพินมอเตอร์เป็น
PIN ขาออกขาออก(IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, เอาท์พุท);
pinMode (IN4, เอาท์พุท);
pinMode (ledpin, OUTPUT);
RemoteXY_Init ();
}
{
// กำหนดพินมอเตอร์เป็น
PIN ขาออกขาออก(IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, เอาท์พุท);
pinMode (IN4, เอาท์พุท);
pinMode (ledpin, OUTPUT);
RemoteXY_Init ();
}
void loop ()
{
RemoteXY_Handler ();
digitalWrite (ledpin, (RemoteXY.switch_1 == 0)? LOW: HIGH);
ความเร็ว (first_motor, RemoteXY.joystick_1_y - RemoteXY.joystick_1_x);
ความเร็ว (second_motor, RemoteXY.joystick_1_y + RemoteXY.joystick_1_x);
}
{
RemoteXY_Handler ();
digitalWrite (ledpin, (RemoteXY.switch_1 == 0)? LOW: HIGH);
ความเร็ว (first_motor, RemoteXY.joystick_1_y - RemoteXY.joystick_1_x);
ความเร็ว (second_motor, RemoteXY.joystick_1_y + RemoteXY.joystick_1_x);
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น