ในบทความนี้เราจะควบคุมรถหุ่นยนต์ผ่านเซ็นเซอร์ 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/หน้าเว็บจะมีลักษณะดังนี้
G-Sensor ควบคุมหุ่นยนต์รถ-RemoteXY แอป

แล้วจากด้านซ้ายของหน้าจอ, รับปุ่มสวิทช์และจอยสติ๊กและวางไว้ในอินเตอร์เฟซมือถือ ปุ่มจะเปิดไฟที่ขา 13 ซึ่งเชื่อมต่ออยู่ภายใน Arduino และจอยสติ๊กจะย้ายรถหุ่นยนต์ เว็บเพจหลังจากวางสวิตช์และจอยสติ๊กจะมีลักษณะดังนี้
การสร้างอินเตอร์เฟซสำหรับ G-sensor หุ่นยนต์รถใช้-remotexy แอป
จากนั้นเราจะต้องเปิดใช้งานเซ็นเซอร์ G เปิด / ปิดการใช้งานปุ่มพร้อมกับจอยสติ๊กเพื่อให้เราสามารถเคลื่อนหุ่นยนต์ด้วยการเอียงโทรศัพท์ในทิศทางซ้ายขวาขึ้นและลง ใช้ปุ่มนี้เพื่อเปิดและปิดใช้งานเซ็นเซอร์ G เมื่อเซ็นเซอร์ G ถูกปิดใช้งานรถยนต์สามารถควบคุมได้โดยการเลื่อนจอยสติ๊ก เพื่อวาง G เซ็นเซอร์เปิด / ปิดปุ่มคลิกที่จอยสติ๊กที่คุณวางไว้ในอินเตอร์เฟซและด้านซ้ายจะมีคุณสมบัติส่วนจะมีตัวเลือกในที่สุดสำหรับการวางปุ่มเซ็นเซอร์ G ใกล้จอยสติ๊ก, เพื่อวางปุ่ม G sensor ไว้ที่ใดก็ได้ที่คุณต้องการ หน้าเว็บหลังจากนี้จะมีลักษณะเช่นนี้
การสร้างอินเตอร์เฟซสำหรับ 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 ตามลำดับ หมุดเหล่านี้จะหมุนมอเตอร์ทั้งสองทิศทาง (ตามเข็มนาฬิกาและทวนเข็มนาฬิกา)
L298N-DC มอเตอร์ไดรฟ์ควบคุม
ในการขับเคลื่อนมอเตอร์ให้เชื่อมต่อประจุบวกและลบของแบตเตอรี่กับ 12V และพื้นของตัวควบคุมมอเตอร์ จากนั้นเชื่อมต่อ 5V และพื้นดินจากตัวควบคุมมอเตอร์ไปยัง Arduino Vin และพื้น
จากนั้นเราจะเชื่อมต่อโมดูลบลูทู ธ HC-06 กับ arduino ถ้าคุณมี HC-05 แล้วจะใช้งานได้เช่นกัน เชื่อมต่อ VCC กับพื้นของโมดูลบลูทู ธ ไปยัง 5V และพื้นของ Arduino จากนั้นต่อขา TX ของ Bluetooth Module กับขา 2 ของ Arduino และขา RX ไปที่ขา 3 ของ Arduino ตรวจสอบรถของเล่นควบคุมด้วยบลูทู ธ โดยใช้ Arduinoเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการใช้ Bluetooth กับ Arduino
 G-Sensor ควบคุมหุ่นยนต์รถที่ใช้-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 จากนั้นดาวน์โหลดแอปพลิเคชันในโทรศัพท์มือถือของคุณแล้วเปิดบลูทู ธ อินเทอร์เฟซของแอปจะมีลักษณะดังนี้
G-Sensor ควบคุม-Arduino-หุ่นยนต์บลูทู ธ

จากนั้นไปที่บลูทู ธ และเปิดบลูธูทที่นั่น หลังจากเปิดเครื่องแล้วอุปกรณ์จะแสดงอุปกรณ์บลูทู ธ เลือกโมดูลบลูทู ธ HC-06 จากนั้นจะนำคุณไปสู่อินเทอร์เฟซจากที่คุณสามารถควบคุมหุ่นยนต์คาร์ได้
บลูทู ธ กำหนดค่าสำหรับ G-sensor หุ่นยนต์รถ

นี่คือวิธีที่เราสามารถใช้Gravity Sensor ภายในโทรศัพท์เคลื่อนที่ของเราเพื่อย้ายหุ่นยนต์ คุณสามารถทดลองเพิ่มเติมและค้นหาการใช้เซนเซอร์ G เพื่อควบคุมสิ่งต่างๆภายนอกโดยใช้ไมโครคอนโทรลเลอร์ในระหว่าง (เช่น Arduino)
รหัส
#define REMOTEXY_MODE__SOFTWARESERIAL   
#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
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; 
} RemoteXY;  
// กำหนดหมุดสำหรับมอเตอร์แรกกำหนด
# IN1 10  
# กำหนด IN2 9  
# กำหนด ENA 12 
// กำหนดหมุดสำหรับมอเตอร์ที่สอง
# กำหนด IN3 8  
# กำหนด IN4 7  
# กำหนด ENB 11 
/ กำหนดขา LED   
# กำหนด ledpin 13 
unsigned char first_motor [3] =   
  {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); 
  }  
การตั้งค่าเป็นโมฆะ ()  
{  
  // กำหนดพินมอเตอร์เป็น
  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);