使用重力感应传感器和Arduino的手机控制机器人车

原文地址:https://circuitdigest.com/microcontroller-projects/g-sensor-controlled-robot-car-arduino

使用G传感器和Arduino的手机控制机器人车

ARDUINO的

经过**穆罕默德·阿奇布(Muhammad Aqib)** 2017年1月1日20
在这里插入图片描述
在本文中,我们将通过手机的G传感器控制机器人小车,您只需倾斜手机即可移动机器人。我们还将针对此G传感器控制的机器人使用Arduino和RemoteXY应用程序。RemoteXY应用程序用于在智能手机中创建用于控制机器人的界面。我们将在界面中添加操纵杆,以便可以通过操纵杆以及倾斜手机来控制机器人。

G传感器或重力传感器基本上是智能手机中的加速度计,用于控制手机的屏幕方向。加速度计感应重力的X,Y,Z方向,并根据手机的对齐方式旋转屏幕。如今,手机中使用了更加灵敏,准确的陀螺仪传感器来确定屏幕的方向。在我们的项目中,机器人汽车将根据手机倾斜的方向移动,例如当我们向前倾斜手机时,汽车将向前移动,而我们将其向下倾斜,然后汽车将向后移动。这就像我们在Mobile中玩一些汽车游戏时一样,它们也使用G传感器相应地移动汽车。最后检查视频,也检查我们的其他视频 这里的机器人项目

所需组件:

  • 两轮机器人小车底盘
  • Arduino UNO
  • L298N电机控制器
  • HC-06蓝牙模块(HC-05也会工作)
  • 电源或电池
  • 连接线

使用RemoteXY应用程序为机器人创建界面:

要创建使用RemoteXY应用程序控制机器人汽车的界面,您将必须转到以下链接

http://remotexy.com/en/editor/该网页将如下所示
在这里插入图片描述
然后从屏幕左侧,拿起开关按钮和操纵杆,然后将其放置在移动界面中。该按钮将打开内部连接在Arduino上的插针13处的灯,操纵杆将移动机器人汽车。放置开关和操纵杆后的网页将如下所示。
在这里插入图片描述

然后,我们必须将启用G传感器启用/禁用按钮与操纵杆一起放置,以便我们可以通过左右左右倾斜手机来移动机器人汽车。使用该按钮,我们可以启用和禁用G传感器,如果禁用了G传感器,则可以通过移动操纵杆来控制汽车。因此,要放置G传感器启用/禁用按钮,请单击您在界面中放置的操纵杆,在左侧将出现一个“属性”部分,最后会有一个选项用于将G传感器按钮放置在操纵杆附近,因此,请将G传感器按钮放在您想要的任何位置。之后的网页将如下所示。
在这里插入图片描述

之后,单击**“获取源代码”按钮并将其保存到您的计算机上**。从此处下载库,并将其保存到Arduino库文件夹中。编译下载的代码以检查是否没有错误。这不是将运行机器人的代码,但将有助于在Arduino中使用该应用程序。从此处下载该应用程序,或转到Play商店,然后从此处为您的Android智能手机下载RemoteXY应用程序。

电路图和说明:

首先,我们将L298N电机控制器与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引脚连接到Arduino的引脚2,将RX引脚连接到Arduino的引脚3。还要检查使用Arduino的蓝牙控制玩具车,以了解有关将蓝牙与Arduino结合使用的更多信息。
在这里插入图片描述

代码说明:

下面的“代码”部分给出了此移动控制机器人车的完整Arduino代码,在这里我们将了解该代码的工作方式。

首先,我们包含了用于软件Serial和RemoteXY的库。RemoteXY库将帮助我们使用Arduino设置应用程序,从而控制机器人车。之后,我们定义了蓝牙模块的引脚,蓝牙模块的TX连接到Arduino的RX引脚的Arduino的引脚2,蓝牙模块的RX连接到Arduino的引脚3的引脚。是Arduino的TX引脚,并将蓝牙模块的波特率设置为9600。

#define REMOTEXY_MODE__SOFTWARESERIAL  
#include <SoftwareSerial.h> //包含软件序列库
#include <RemoteXY.h> //包含remotexy库

/ * 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信号将根据操纵杆的旋转提供给电动机。

  if (motor_speed>100) motor_speed=100; 
  if (motor_speed<-100) motor_speed=-100; 
  if (motor_speed>0) { 
    digitalWrite(pointer[0], HIGH); 
    digitalWrite(pointer[1], LOW); 
    analogWrite(pointer[2], motor_speed*2.55); 
  } 
  else if (motor_speed<0) { 
    digitalWrite(pointer[0], LOW); 
    digitalWrite(pointer[1], HIGH); 
    analogWrite(pointer[2], (-motor_speed)*2.55); 
  } 
  else { 
    digitalWrite(pointer[0], LOW); 
    digitalWrite(pointer[1], LOW); 
    analogWrite(pointer[2], 0); 
  } 

在下面的代码中,我们定义了每当在应用程序中移动操纵杆时都会调用的函数。当我们打开应用程序中的开关时,逻辑1将分配给Arduino的引脚13,从而打开LED引脚。在向前和向后移动机器人汽车时, 将调用“*速度”*功能。

void loop() 
{ 
  RemoteXY_Handler (); 
  digitalWrite (ledpin, (RemoteXY.switch_1==0)?LOW:HIGH);  
  Speed (first_motor, RemoteXY.joystick_1_y - RemoteXY.joystick_1_x); 
  Speed (second_motor, RemoteXY.joystick_1_y + RemoteXY.joystick_1_x); 
} 

如何运行:

将RemoteXY的库添加到Arduino库,并在Arduino IDE中上传代码。然后在手机中下载该应用程序,然后打开蓝牙。该应用程序的界面将如下所示
在这里插入图片描述
然后转到蓝牙并在那里打开蓝牙。开启后,它会向您显示蓝牙设备。从那里选择您的HC-06蓝牙模块,它将带您到可以控制机器人车的界面。

用于g传感器机器人车的蓝牙配置

这就是我们可以使用手机内重力传感器移动机器人的方式。您可以通过在它们之间连接一个Microcontorller(例如Arduino)来进行进一步的实验,并发现使用G传感器来控制外界事物的更多有趣用途。

代码

#define REMOTEXY_MODE__SOFTWARESERIAL  
#include <SoftwareSerial.h>             //Including the software serial library
#include <RemoteXY.h>                   //Including the remotexy library

/* RemoteXY connection settings */ 
#define REMOTEXY_SERIAL_RX 2            //defining the pin 2 as RX pin
#define REMOTEXY_SERIAL_TX 3            //defining the pin 3 as TX pin
#define REMOTEXY_SERIAL_SPEED 9600      //setting baudrate at 9600

unsigned char RemoteXY_CONF[] =       //remotexy configuration
  { 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 {                            //Function for declaring the variables
  signed char joystick_1_x;         //joystick x-axis 
  signed char joystick_1_y;         //joystick y-axis
  unsigned char switch_1;           //variables for switch
  unsigned char connect_flag; 

} RemoteXY;  

//defining the pins for first motor
#define IN1 10 
#define IN2 9 
#define ENA 12 

//defining the pins for second motor
#define IN3 8 
#define IN4 7 
#define ENB 11 

//defining the LED pin  
#define ledpin 13 

unsigned char first_motor[3] =  
  {IN1, IN2, ENA}; 
unsigned char second_motor[3] =  
  {IN3, IN4, ENB}; 

void Speed (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(pointer[0], HIGH); 
    digitalWrite(pointer[1], LOW); 
    analogWrite(pointer[2], motor_speed*2.55); 
  } 
  else if (motor_speed<0) { 
    digitalWrite(pointer[0], LOW); 
    digitalWrite(pointer[1], HIGH); 
    analogWrite(pointer[2], (-motor_speed)*2.55); 
  } 
  else { 
    digitalWrite(pointer[0], LOW); 
    digitalWrite(pointer[1], LOW); 
    analogWrite(pointer[2], 0); 
  } 
} 

void setup() 
{ 
  //defining the motor pins as the output pins
  pinMode (IN1, OUTPUT); 
  pinMode (IN2, OUTPUT); 
  pinMode (IN3, OUTPUT); 
  pinMode (IN4, OUTPUT); 
  pinMode (ledpin, OUTPUT); 
  RemoteXY_Init (); 
} 

void loop() 
{ 
  RemoteXY_Handler (); 
  digitalWrite (ledpin, (RemoteXY.switch_1==0)?LOW:HIGH);  
  Speed (first_motor, RemoteXY.joystick_1_y - RemoteXY.joystick_1_x); 
  Speed (second_motor, RemoteXY.joystick_1_y + RemoteXY.joystick_1_x); 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值