历史上的今天
返回首页

历史上的今天

今天是:2025年11月18日(星期二)

正在发生

2022年11月18日 | 如何使用8051微控制器和蓝牙模块构建一个Android手机控制的机器人

2022-11-18 来源:circuitdigest

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

所需组件:

8051 微控制器 (AT89S52)

HC-05 蓝牙模块

L293D

机器人底盘

直流电机 (2)

轮子 (2)

脚轮

跳线

蓝牙终端安卓应用

电路图:

 

8051 微控制器:

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

 

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

 

HC-05 蓝牙模块:

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

典型灵敏度为-80dBm。

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

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

它有 6 个引脚。

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

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

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

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

L293D 电机驱动器 IC:

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

 

引脚说明

 

引脚编号 名字 功能
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 关闭 关闭 停止

 

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

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

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

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

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

查看下面的代码说明,了解 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) ; //funcon 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 relo

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); //wt 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 transmitd 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

}

}
 


 

推荐阅读

史海拾趣

D3 Semiconductor公司的发展小趣事

为了更好地拓展市场,D3 Semiconductor与全球知名的电子元件分销商贸泽电子(Mouser Electronics)建立了合作伙伴关系。根据协议,贸泽电子储备了D3 Semiconductor的完整650伏额定电压超结MOSFET产品线,并将其推向全球市场。这一合作不仅加强了D3 Semiconductor在全球市场的竞争力,也为公司带来了更多的商业机会。

Aplus Flash Technology Inc公司的发展小趣事

近年来,电子行业面临着原材料价格上涨、贸易壁垒增多等挑战。Aplus Flash Technology Inc公司也受到了这些因素的影响,生产成本上升,市场竞争压力加大。为了应对这些挑战,公司及时调整了发展战略,加大了对技术研发的投入,提高了生产效率和质量。同时,公司还积极开拓国际市场,通过参加国际电子展会、建立海外销售网络等方式,拓展海外市场份额。这些举措使公司在面对市场挑战时保持了稳健的发展态势。

Crocus公司的发展小趣事

XXXX年,Crocus迎来了发展的重要转折点——与Allegro MicroSystems达成合并协议。这次合并不仅为Crocus带来了雄厚的资金支持和更广阔的市场空间,还实现了双方在技术、产品和市场等方面的优势互补。合并后的Crocus在TMR传感器领域取得了更加显著的成果,进一步巩固了市场地位。

Astron Wireless Technologies Inc公司的发展小趣事

Astron Wireless Technologies Inc公司注重企业文化的建设和发展。公司倡导创新、合作、共赢的企业文化,鼓励员工积极参与技术创新和业务拓展。同时,公司还注重员工的培训和发展,为员工提供广阔的职业发展空间和丰富的福利待遇。这种积极向上的企业文化使得公司能够吸引和留住一批优秀的人才,为公司的长远发展提供了有力保障。

这些故事展示了Astron Wireless Technologies Inc公司在发展过程中可能遇到的挑战和机遇,以及公司如何应对这些挑战并抓住机遇实现持续发展的过程。然而,需要强调的是,这些故事仅为虚构,不代表公司的真实发展历程。要了解公司的真实情况,建议查阅相关的新闻报道、行业分析报告或公司官方资料。

HEC Inc公司的发展小趣事

随着公司的发展,Astron Wireless Technologies Inc开始寻求与其他行业的领军企业建立战略合作关系。通过与一家知名通信设备制造商的合作,公司成功将其无线通信技术集成到了对方的产品中,从而进一步扩大了市场份额。这一合作不仅提升了公司的知名度,还为公司带来了稳定的收入来源。

Gigavac LLC公司的发展小趣事

Astron Wireless Technologies Inc公司在成立初期,面临着激烈的市场竞争和技术瓶颈。然而,公司的研发团队通过不懈努力,成功开发出一款具有创新性的无线通信协议,大大提高了数据传输的效率和稳定性。这一技术突破迅速赢得了市场的认可,公司开始获得大量的订单,实现了初步的市场突破。

问答坊 | AI 解惑

USB电源管理

USB 电源设备    电源管理,历来是电子产品设计与维护的主要环节之一。在过去,用户想了解电源的情况,只能通过设备上有限的工作指示;随着计算机技术的发展,电源系统(如UPS)开始通过RS-232与计算机通信,使用户对电源的控制大为 ...…

查看全部问答>

小心别上当!曝光“电子驱蚊灭鼠器”_applevista

作者:applevista 前两天,父亲在庙会上买了两个黑猫神牌电子驱蚊灭鼠器,5块一个。 前两年,见过这样东西,样子不一样,也提醒父亲这是骗人的,还是被骗了。 要是一块一个倒也不错,它其实就是一个简单的彩灯。 这个与卫星增台器、节电器一样 ...…

查看全部问答>

cadence问题3求助!!

请教各位高手 我在画原理图时(orcad) 有下列两个疑问: 1、请问处理器(在page1上)上的一个引脚如A1需要连接两个外围芯片x,y    可是芯片X我是用层次法(层次图上层在page1上)画的,与芯片y的连接是用平坦式画法     ...…

查看全部问答>

Quartus II中管脚上拉电阻(弱上拉)的设置方法

在使用Altera的FPGA时候,由于系统需求,需要在管脚的内部加上上拉电阻。Quartus II软件中在Assignment Editor中可以设置。具体过程如下:1. 在菜单Assignments中选择Assignment Editor. 2. 在弹出的界面里选择I/O Features.找到Node. 3. 选择Node ...…

查看全部问答>

nios ide 编译出错

nios ide 软件编译出现make:***[system_project]Error2 错误 这是什么原因?…

查看全部问答>

stm32f207的外扩NAND flash读取ID问题

本人想用stm32f207VG做下外扩NAND flash,先读取ID不行,GPIO配置如下:   RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE |     ...…

查看全部问答>

全波整流电路

全波整流器通常用于从交流输入获得直流电平。这通常用 于测量交流信号的幅度。全波整流器是一种均值检波器。 需要与均方根检波器或峰值检波器区分开来。 …

查看全部问答>

图中这个表怎么看,求指导

求助内容如标题,为什么有MIN TYP MAX 这些都代表什么?如果DCOx为0~31之间的数DCO频率怎么确定?请大神指导 …

查看全部问答>

[F7设计小分队征集中] 反射式血氧心率信号采集及监护记录系统

本帖最后由 nemo1991 于 2015-8-28 11:41 编辑 血氧探头展示: 原有所做的基于单片机的血氧仪,放大电路基于分立元件: 采用光学手段测试血氧的原理:file:///C:\\Users\\Di\\AppData\\Local\\Temp\\art222C.tmp 血红蛋白:对红光与红外光 ...…

查看全部问答>