寒假日志-基于51单片机的蓝牙避障小车

目录

前言

一、简介

二、硬件介绍

三、软件介绍


前言

        大二的一个寒假,了解到大二的单片机原理这门课需要做一个课程设计,于是为了避免开学后各种事情 的堆积,我打算在寒假做一个课设(反正闲着也是闲着)。

一、简介

        该作品为单片机课设作品(虽然最后也没用它),看网上小车挺好玩的,于是就查找了相关资料做了一个基于51单片机的蓝牙避障小车,当然功能也可以更多,比如循迹啥的。我只是简单实现两个功能,先把基础的搞定。

        小车有两层板组成,核心板和底板。主控就是用的STC89C51系列的单片机;显示部分用的是0.96寸的OLED显示屏,协议为IIC;蓝牙模块用的是HC-05,其实其它的也都行(比如JDY系列,很便宜),通过串口与单片机进行通信;避障模块用的是红外对管传感器,输出数字信号来判断是否有障碍物。

        小车的功能有蓝牙控制功能,OLED显示功能,自动避障功能。

 

二、硬件介绍

1、整体原理图

        这就是个一般的单片机课设,其整体原理图如下。我也参考了一些网上的资料,打算将其开源出来。

ab6b25f20ec14eb696e64d60ec643a6b.png850e48528d3d4947a0fa7e4513870e4b.png

 2、核心板

        核心板其实就是一个普通的51单片机最小系统,可以通过数据手册进行查看最小应用图进行绘制,也可以通过网上其他的渠道进行绘制。最小系统包括晶振电路、复位电路、P0口的上拉电阻。有一个问题需要注意,就是晶振所匹配的电容,容易一定不要选错,不要焊错,我就是因为在板子山焊接的是100nf,无论如何程序也下不进去,因为单片机就没有工作。

0a17458ade7b4a9f831425fcb4a9bba7.pnga2cd40a7d409476bb2c01d432ecbba0f.png

 3、底板

        底板上设计了OLED显示屏,蓝牙模块,避障模块,以及一些独立按键(目前按键还没有写功能),还有一个蜂鸣器。底板我设计的是异形板,前面的板框我进行了倒角的设计,使其更适配车模。

 f295641f79584a419f47c2eba13af8b2.png3b184467aee44aeca9049032e47dc07b.png

 4、电机驱动

         电机驱动模块,我选的是常用的L298N,这款电机驱动模块价格也不贵,常用于一些小车的项目中。

 

d5dcbde3117e44f79626abafce672a8e.png

 5、车模选型

        对于车模的选择,我并没有太多的考虑,之间在优信里买的是三轮的车模,两个直流电机驱动轮,一个万向轮。

ce529ca93a9f40859bd6ed13515b2980.png

 

三、软件介绍

1、电机驱动程序(让小车跑起来)

        驱动电机的程序也很简单,网上资料也有很多,这里不错过多赘述。直接贴代码。

motordrive.c

#include "motordriver.h"


sbit IN1 = P0^0;
sbit IN2 = P0^1;
sbit IN3 = P0^2;
sbit IN4 = P0^3;

void forward()
{	
	IN1=1; 
	IN2=0; 
	IN3=1; 
	IN4=0;
}

void back()
{	
	IN1=0; 
	IN2=1; 
	IN3=0; 
	IN4=1;
}

void left()
{
	IN1=1; 
	IN2=0; 
	IN3=0; 
	IN4=1;
}

void right()
{
//	LF=1;
//	LB=0;
//	RF=0;
//	RB=1;
	IN1=0; 
	IN2=1; 
	IN3=1; 
	IN4=0;
	
}

 void stop()
{
//	LF=0;
//	LB=0;
//	RF=0;
//	RB=0;
	IN1=0; 
	IN2=0; 
	IN3=0; 
	IN4=0;
}

motordrive.h

#ifndef __MOTORDRIVER_H_
#define __MOTORDRIVER_H_

#include <REGX52.H>




void forward();
void back();
void left();
void right();
void stop();



#endif

2、避障模块驱动(让小车实现避障功能)

        对于红外对管传感器,它其就是输出一个数字电平信号给单片机,只需要让单片机的引脚去读取是高电平还是低电平就行。当遇到障碍就输出低电平,没有障碍物就是高电平。

 

3、蓝牙模块调试

        对于蓝牙模块,其就是单片机通过串口,将数据发给蓝牙模块。就是用到了51单片机的串口中断这个功能。

        以下是串口初始化代码

void UartInit(void)		//9600bps@11.0592MHz
{
	PCON = 0x00;		//关倍频
	SCON = 0x50;		//8位数据,可变波特率
 	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFD;		//设置定时初始值
	TH1 = 0xFD;		//设置定时重载值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
	EA=1;			//总中断
	ES=1;			//打开串口中断
}

 

        下面是串口中断服务函数

void Uart_Routine() interrupt 4
{
	stop();
	RI=0;
	receiveData=SBUF;
	Receive_data(receiveData);
}

4、OLED显示驱动

        对于OLED,这就更加简单了,直接在淘宝客服索要例程即可。

 

最终实物图

707ef5537b85429cad4ba46b417860b1.jpeg

 

哔站演示视频链接如下

https://b23.tv/2p8dmDZ


 

最后附上程序

网盘链接,提取码:4non
 

  https://pan.baidu.com/s/1qj1Uk8tdybWP74y7Lox9NQ

 

 

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值