基于51单片机的蓝牙遥控智能车

基于51的蓝牙遥控智能车

一.简介
本作品基于51单片机,通过控制电机驱动模块L298N输出高低电平,进而实现小车前后左右运动,外加HC-05蓝牙模块,连接手机软件进行远程操纵。
主要内容包括:
1.L298N电机驱动模块的使用。
2.使用PWM,实现匀速。
3.蓝牙模块的连接。

二. 硬件设计
1)总体硬件框图
STC89C52单片机做主控
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191220220947149.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTQxNzA2,size_16,color_FFFFFF,t_70
(2)单片机最小系统
单片机最小系统主要由电源、时钟电路、复位电路组成。

在这里插入图片描述
**p1.0, P 1.5,P2.0,P2.5口为使能

4) L298N电机驱动模块 下端口依次在这里插入图片描述
1.下端三个口(从左到右):+12V,GND,+5V
2.左右两个OUT端,连接电机。
3.上图有跳线帽的为使能,中间的四个,左二,右二,连接51单片机引脚控制电机左右转。正反方向可淘宝搜索,一般都会有介绍。
4.左转:左上轮为0,其余为1.
5.右转:右上轮为0,其余为1.(编程需要注意)

(**5)蓝牙模块
在这里插入图片描述

在这里插入图片描述
1.上图为蓝牙与51单片机串口通信连接图
2.仅用VCC,GND,RXD,TXD便可实现功能
3.蓝牙模块需要拿串口软件调试,设计波特率,和连接密码。

三.软件设计
(1)代码

#include<reg52.h>

typedef unsigned int u16;
typedef unsigned char u8;

sbit a=P1^0;              //前,右轮
sbit a1=P1^1;              
sbit a2=P1^2;  s

sbit b=P1^5;              //前,左轮
sbit b1=P1^4;         
sbit b2=P1^3;  

sbit c=P2^0;              //后,左轮  
sbit c1=P2^1;
sbit c2=P2^2;

sbit d=P2^5;              //后,右轮
sbit d1=P2^4;
sbit d2=P2^3;


u8 receiveData=0,hige=10000,low=10000;     //定义接收的数据;维持高,低电平

void delay(u16 i)
{
 while(i--);        //延时函数
}

void UsartInit()               //定时器
{
	SCON=0X50;			
	TMOD=0X20;			
	PCON=0X80;			
	TH1=0XF3;				
	TL1=0XF3;
	ES=1;					
	EA=1;		
	TR1=1;		
}
	

void main()                     //主函数
{
	 u16 x=0;            
	 UsartInit();
	 while(1)
{
	 if(receiveData=='0')        //接收“0”
{		
     led=1;
	 a=0;                        // a,b,c,d各指代L298N一侧的使能  
     b=0;                      
     c=0;
	 d=0;		                     
}                  
 
	 if(receiveData=='1')          //接收到“1”
{
	  led=0;
	  a=1;                         //全部使能,使模块进入到预工作状态
      b=1;
      c=1;
	  d=1;
	
 	  a1=0;                      //a1,a2.b1...控制模块在各口电机转动:左右,前后,停
      a2=1;	                    //以下一样
	  b1=0;
	  b2=1;
	  c1=0;
	  c2=1;
	  d1=0;
	  d2=1;  
	  for(x=0;x<hige;x++)           //同下面的low一样,为了保持匀速运动
{
delay(10);
}  
     a=0;
	 b=0;
     c=0;
	 d=0;
	  for(x=0;x<low;x++)
{
delay(10);
}	
}

	  if(receiveData=='b')            //接收“b”为后退
{
	  a=1;
      b=1;
      c=1;
	  d=1;
	
 	  a1=1;
      a2=0;	  
	  b1=1;
	  b2=0;
	  c1=1;
	  c2=0;
	  d1=1;
	  d2=0;  
	  for(x=0;x<hige;x++)
{
delay(10);
}
     a=0;
	 b=0;
     c=0;
	 d=0;
	  for(x=0;x<low;x++)
{
	  delay(10);
}	
}

	 if(receiveData=='L')            //接收‘L“为左转指令
{
	 a=1;
     b=1;
     c=1;
	 d=1;
	
 	  a1=0;
      a2=1;	  
	  b1=1;
      b2=1;
	  c1=1;
	  c2=1;
	  d1=0;
	  d2=1;  
	  for(x=0;x<100;x++)
{
delay(100);
}
     a=0;
	 b=0;
     c=0;
	 d=0;
	  for(x=0;x<100;x++)
{
	  delay(100);
}	 
}

	  if(receiveData=='R')          //右转
{
	 a=1;
     b=1;
     c=1;
	 d=1;
	
 	 a1=1;
     a2=1;	  
	 b1=0;
	 b2=1;
	 c1=0;
	 c2=1;
	 d1=1;
	 d2=1;  
	for(x=0;x<100;x++)
	{
	delay(100);
	}
    a=0;
	b=0;
    c=0;
	d=0;
	for(x=0;x<100;x++)
	{
	delay(100);
}		
}
}
}

void Usart() interrupt 4         //中断
{
	receiveData=SBUF;        //此处为接收蓝牙指令切入口
	RI = 0;
  SBUF=receiveData;
	while(!TI);
	TI=0;						
}

四.回顾和总结
1.遥控小车,只需要会发送指令的蓝牙模块+驱动电机运动驱动模块;本质上就是利用“无线+IO口(包含定时器的使用)+中断实现。

  • 18
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值