如何使用8051微控制器和蓝牙模块构建一个Android手机控制的机器人

发布时间:2024-01-03  

在这个项目中,我们将使用8051微控制器和蓝牙模块构建一个Android手机控制的机器人。该机器人是使用直流电机设计的,直流电机的方向将由从安卓应用程序收到的命令控制。机器人的状态被发送回安卓应用程序。该项目还将帮助HC-05蓝牙模块与8051微控制器的接口.


所需组件:

8051 微控制器 (AT89S52)

HC-05 蓝牙模块

L293D 电机驱动器

机器人底盘

直流电机 (2)

轮子 (2)

脚轮

跳线

蓝牙终端安卓应用

电路图:

poYBAGN3Q5GAAPYHAAGRKqdsCzU732.png

 

pYYBAGN3RDOAJ-LXAAAs5P1LLTs371.png

8051 微控制器:

8051微控制器是一种8位微控制器,具有128字节的片上RAM,4K字节的片上ROM,两个定时器,一个串行端口和四个8位端口。8052微控制器是8051微控制器的扩展。在这个项目中,我们使用AT89S52微控制器。下表显示了8051名家庭成员的比较。

 

特征 8051 8052
只读存储器(以字节为单位) 4K 8K
内存(字节) 128 256
定时器 2 3
I/O 引脚 32 32
串行端口 1 1
中断源 6 8

 

HC-05 蓝牙模块:

poYBAGN3RDqAF_qBAACRRzH8oH8234.jpg

HC-05 是一个串行蓝牙模块.可以使用 AT 命令对其进行配置。它可以在三种不同的配置(主、从、环回)下工作。在我们的项目中,我们将它用作从属。HC-05模块的特点包括:

典型灵敏度为-80dBm。

默认波特率:9600bps,8个数据位,1个停止位,无奇偶校验。

自动配对 PIN 码:“1234”默认 PIN 码

它有 6 个引脚。

Vcc 和 Gnd 引脚用于为 HC-05 供电。

Tx 和 Rx 引脚用于与微控制器通信。

用于激活 HC-05 模块的使能引脚。当它为低时,模块被禁用

状态引脚行为状态指示灯。当它未与任何其他蓝牙设备配对/连接时,LED 会持续闪烁。当它与任何其他蓝牙设备连接/配对时,LED 会以 2 秒的恒定延迟闪烁。

L293D 电机驱动器 IC:

L293D 是一款双 H 桥电机驱动器 IC。它充当电流放大器,L293D 的输出驱动直流电机。它包含两个内置的H桥电路。在共模运行模式下,它可以在两个方向上同时驱动两个直流电机。下表显示了L293D IC的引脚说明。

pYYBAGN3RDuAYDoOAAA5ddWmVlE020.jpg

 

poYBAGN3RDyAVmOdAAAvzE6sPKE354.png

引脚说明

 

引脚编号 名字 功能
1 启用 1,2 电机 1 的使能引脚
2 输入 1 输入 1 用于电机 1
3 产出 1 电机 1 的输出 1
4 格德 接地 (0V)
5 格德 接地 (0V)
6 产出 2 电机 2 的输出 1
7 输入 2 输入 2 用于电机 1
8 Vcc 2 电机电源电压(5V)
9 启用 3,4 电机 1 的使能引脚
10 输入 3 输入 1 用于电机 2
11 产出 4 电机 1 的输出 2
12 格德 接地 (0V)
13 格德 接地 (0V)
14 产出 4 电机 2 的输出 2
15 输入 4 输入 2 用于电机 2
16 Vcc 1 电源电压 (5V)

 

安卓手机控制机器人的工作:

在这个智能手机控制的机器人中,android应用程序的用户通过HC-05模块将数据发送到8051微控制器。在8051微控制器中比较接收到的数据,并做出相应的决定。下表显示了不同接收字符的电机方向和机器人状态。

 

接收的字符 电机 1 电机 2 机器人现状
f 向前 向前 向前迈进
b 向后 向后 向后移动
r 向前 向后 向右移动
l 向后 向前 向左移动
s 关闭 关闭 停止

 

pYYBAGN3REGAFWa9AADbmwVqvdk089.jpg

蓝牙终端应用程序允许我们模拟蓝牙终端。此应用程序支持双向通信,此应用程序与大多数设备兼容。

以下步骤显示了如何安装和使用此应用。

1.在您的安卓手机上下载并安装蓝牙终端应用程序。

2.安装应用程序后,打开应用程序并打开蓝牙。

3.选择设备,然后单击连接选项。连接成功后,我们可以开始向HC-05模块发送数据。

poYBAGN3REKAaxWAAAA7mYcWD8I897.png

pYYBAGN3RESAHQk6AABAlW8mSjc797.png

查看下面的代码说明,了解 8051 微控制器如何发送和接收字符以旋转所需的电机。

代码说明:
该项目的完整 C 程序和演示视频在本项目结束时给出。代码被分成有意义的小块,并在下面解释。

对于与 8051 微控制器的 L293D 接口,我们必须定义 L293D 连接到 8051 微控制器的引脚。电机1的In1引脚连接到P2.0,电机1的In2引脚连接到P2.1,电机2的In1引脚连接到P2.2,电机2的In2引脚连接到P2.3

sbit m1f=P2^0; // in1 pin of motor1
sbit m1b=P2^1; // in2 pin of motor1
sbit m2f=P2^2; // in1 pin of motor2
sbit m2b=P2^3; // in2 pin of motor2
接下来,我们必须定义一些在程序中使用的函数。延迟功能用于创建指定的时间延迟。Txdata功能用于通过串口传输数据。Rxdata功能用于从串口接收数据。

void delay(unsigned int) ; //function for creating delay
char rxdata(void); //function for receiving a character through serial port of 8051
void txdata(unsigned char); //function for sending a character through serial port of 8051

在代码的这一部分中,我们将配置8051微控制器进行串行通信。TMOD寄存器加载了定时器1模式2(自动重新加载)的0x20。SCON 寄存器加载了 8 个数据位、1 个停止位和接收启用的0x50。TH1寄存器加载了波特率为每秒9600位的0xfd。TR1=1 用于启动计时器。

TMOD=0x20; 
SCON=0x50; 
TH1=0xfd; 
TR1=1; 
在代码的这一部分中,rxdata 函数的返回字符存储在变量 's' 中以供进一步使用。
s=rxdata(); //receive serial data from hc-05 bluetooth module
在代码的这一部分中,我们必须将接收到的字符与不同方向的预分配字符进行比较。如果接收到的字符是“f”,则机器人必须向前移动。这是通过使 m1f、m2f 引脚高而 m1b、m2b 引脚低来实现的。完成此操作后,接下来我们必须将机器人的状态发送到Android应用程序。这是在 txdata 功能的帮助下完成的。对收到的不同字符重复相同的过程,并做出相应的决定。表1显示了机器人不同运动方向的m1f,m1b,m2f,m2b的不同值。

if(s=='f') //move both the motors in forward direction
{
m1f=1;
delay(1);
m1b=0;
delay(1);
m2f=1;
delay(1);
m2b=0;
delay(1);
for(i=0;msg1[i]!='';i++) //send status of robot to android app through bluetooth
{
txdata(msg1[i]);
}
}
 

 

M1F M1B M2F M2B 电机 1 旋转 电机 2 旋转 机器人现状
1 0 1 0 向前 向前 前进
0 1 0 1 反向 反向 向后移动
1 0 0 1 向前 反向 向右移动
0 1 1 0 反向 向前 向左移动
0 0 0 0 停止 停止 停止

 

这是您可以通过使用 8051 微控制器控制四个电机来向任何方向旋转机器人汽车。

/*this program is for controlling a robot using bluetooth and android app*/



#include



unsigned char ch1;

unsigned char s;



sbit m1f=P2^0; // in1 pin of motor1

sbit m1b=P2^1; // in2 pin of motor1

sbit m2f=P2^2; // in1 pin of motor2

sbit m2b=P2^3; // in2 pin of motor2



void delay(unsigned int) ; //function for creating delay

char rxdata(void); //function for receiving a character through serial port of 8051 

void txdata(unsigned char); //function for sending a character through serial port of 8051 



void main(void)

{

unsigned char i;

unsigned char msg1[]={"robot is moving forward"};

unsigned char msg2[]={"robot is moving backward"};

unsigned char msg3[]={"robot is moving right"};

unsigned char msg4[]={"robot is moving left"};

unsigned char msg5[]={"robot is stopped"};



TMOD=0x20; //timer 1 , mode 2 , auto reload

SCON=0x50; //8bit data , 1 stop bit , REN enabled

TH1=0xfd; //timer value for 9600 bits per second(bps)

TR1=1; 



while(1) //repeat forever

{

s=rxdata(); //receive serial data from hc-05 bluetooth module

if(s=='f') //move both the motors in forward direction

{

m1f=1;

delay(1);

m1b=0;

delay(1);

m2f=1;

delay(1);

m2b=0;

delay(1);

for(i=0;msg1[i]!='';i++)

{

txdata(msg1[i]);





}



else if(s=='b') 

{

m1f=0;

delay(1);

m1b=1;

delay(10);

m2f=0;

delay(10);

m2b=1;

delay(10);

for(i=0;msg2[i]!='';i++) 

{

txdata(msg2[i]);

}

}



else if(s=='r')

{

m1f=1;

delay(1);

m1b=0; 

delay(10);

m2f=0;

delay(10);

m2b=1;

delay(10);

for(i=0;msg3[i]!='';i++) 

{

txdata(msg3[i]);



}



else if(s=='l')

{

m1f=0;

delay(1);

m1b=1;

delay(1);

m2f=1;

delay(1);

m2b=0;

delay(1);

for(i=0;msg4[i]!='';i++)

{

txdata(msg4[i]);



}



else if(s=='s') 

{

m1f=0;

delay(1);

m1b=0;

delay(1);

m2f=0;

delay(1);

m2b=0;

delay(1);

for(i=0;msg5[i]!='';i++)

{

txdata(msg5[i]);

}

}

txdata('n'); 



}

}



char rxdata()

{

while(RI==0); //wait till RI becomes HIGH

RI=0; //make RI low

ch1=SBUF; //copy received data 

return ch1; //return the received data to main function.

}



void txdata(unsigned char x)

{

SBUF=x; //copy data to be transmitted to SBUF

while(TI==0); //wait till TI becomes high

TI=0; //mae TI low for next transmission

}



void delay(unsigned int z)

{

unsigned int p ,q;

for(p=0 ; p
{

for(q=0 ; q<1375 ; q++); //repeat for 1375 times

}

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    极海半导体推出GW3323智能蓝牙手环应用方案; 【导读】在健康观念深入人心及消费升级的双重影响下,智能可穿戴设备的市场需求持续增长,智能蓝牙手环便是其中热门方向之一。根据Canalys......
    棉”材质,据说“1元公测”预订用户轻松破百万,有硬件就得有软件,小米VR应用(玩具版)也正式上线,小米VR眼镜正式版售价199元,目前只支持小米5、小米5S、小米5S PLUS以及小米Note2四款手机......
    保密模式等,这个数据量小而且帧间间隔比较长,所以数据可以得到有效的存储和处理。而从BC5到主CPU的数据传输便比较复杂,因为涉及到蓝牙手机、BC5 和主CPU之间的三方通信,蓝牙手机到BC5可能......
    也可下载YouTube、Prime Video等应用观看视频、电影和电视节目。系统还支持蓝牙手柄连接,可畅玩《Asphalt Nitro 2》赛车游戏等。 新系统集成谷歌地图、谷歌语音助手,也可......
    电磁铁,打开磁力分解门,蓝牙超控模块在本实施例中起到类似于锁头的作用,用户通过蓝牙手机发送信号信息,打开锁、 蓝牙超控模块接收后进行解码,如果本实施例中的解码数据提供了二维码,用户可以通过蓝牙手机......
    API端的XBee模块(终端节点)、继电器和电动窗帘构成。当终端节点收到相应字符,Arduino控制器则输出5v。具体软件流程图如图4所示(以打开窗帘为例进行说明)。 图4下位机软件模块设计 5......
    会返回哪些发出的信息已被读取,而哪些尚未被读到。 留声机的制作:我们是这样完成它的制作的! 使用的材料有: Arduino UNO; ISD1820录音模块; SYN6658TTS语音模块; 蓝牙模块; WiFi模块; RGB......
    感器解决方案的需求和开发 在需要使用传感器同步监测多个变量的情况下,通过整合传感器和辅助的电子设备可以节省成本并简化安装。高度集成的传感器评估平台有助于开发可随时连接到物联网的多传感器智能产品。 Arduino 是旨......
    持 Matter、Thread、Zigbee 3.0 和蓝牙 5.3 LE 连接。 在第二阶段,Arduino 和 Silicon Labs 计划在 2024 年 3 月的 Arduino Day 上推......
    持 Matter、Thread、Zigbee 3.0 和蓝牙 5.3 LE 连接。 在第二阶段,Arduino 和 Silicon Labs 计划在 2024 年 3 月的 Arduino Day 上推......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>