【Proteus仿真】【Arduino单片机】寻迹避障蓝牙遥控小车


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使LCD1602液晶,L298电机,直流电机,HC05/06蓝牙模块,HCSR04超声波,红外寻迹模块等。
主要功能:
系统运行后,LCD1602显示小车运行状态、模式、检测距离;
当小车在蓝牙模式,可通过蓝牙发送命令控制小车前进、后退、左转、右转、模式、LED开关;
当小车在寻迹模式,通过左右红外传感器感应寻迹,前进时LED亮,否则灭;
当小车在避障模式,通过超声波检测距离,当距离小于避障值,右转,否则前进;
蓝牙控制命令(十六进制):
0X10->前进
0X11->后退
0X12->左转
0X13->右转
0X14->停止
0X15->蓝牙模式
0X16->寻迹模式
0X17->避障模式
0X18->LED开
0X19->LED关


二、软件设计

/*
作者:嗨小易(QQ:3443792007)

*/



//系统数据获取
void sys_data_get(void)
{
	while(1)
	{
    //获取距离
		sys_ctrl.dis=ultrasonicwave_measure();
		//红外感应
		if(HW_L==0 && HW_R==1)sys_ctrl.ir=1;
		else if(HW_L==1 && HW_R==0)sys_ctrl.ir=2;
		else if(HW_L==1 && HW_R==1)sys_ctrl.ir=0;

		break;
	}
}

//系统数据显示
void sys_data_show(void)
{
  while(1)
  {
    //模式显示
		if(sys_ctrl.mode==0)lcd1602_show_string(2,0,"LY");
		else if(sys_ctrl.mode==1)lcd1602_show_string(2,0,"XJ"); 
		else if(sys_ctrl.mode==2)lcd1602_show_string(2,0,"BZ");
		//红外感应状态显示
		if(sys_ctrl.ir==0)lcd1602_show_string(6,0,"N");
		else if(sys_ctrl.ir==1)lcd1602_show_string(6,0,"L");
		else if(sys_ctrl.ir==2)lcd1602_show_string(6,0,"R"); 
		//距离显示
		lcd1602_show_nums(11,0,sys_ctrl.dis,3,0);

    break;
  }
}

//系统数据设置
void sys_data_set(void)
{
  if(Serial.available())  //当串口接收到信息后
  {
    UART_RX_BUF[0]=Serial.read();//读取接收到的数据
  }

  //模式选择
	if(UART_RX_BUF[0]==CAR_MODE_LY)
	{
		sys_ctrl.dir=0;
		sys_ctrl.mode=0;
	}
	else if(UART_RX_BUF[0]==CAR_MODE_XJ)sys_ctrl.mode=1;
	else if(UART_RX_BUF[0]==CAR_MODE_BZ)sys_ctrl.mode=2;
  
  //蓝牙模式
	if(sys_ctrl.mode==0)
	{
		//蓝牙控制命令
		switch(UART_RX_BUF[0])
		{
			case CAR_FORM://前进
				sys_ctrl.dir=1;
				break;
			case CAR_BACK://后退
				sys_ctrl.dir=2;
				break;
			case CAR_LEFT://左转
				sys_ctrl.dir=3;
				break;
			case CAR_RIGHT://右转
				sys_ctrl.dir=4;
				break;
			case CAR_STOP://停止
				sys_ctrl.dir=0;
				break;
			case LED_ON://LED开
				LED(0);
				break;
			case LED_OFF://LED关
				LED(1);
				break;
		}		
	}
	if(UART_RX_BUF[0]!=0)UART_RX_BUF[0]=0;		
}

//系统功能控制
void sys_fun_ctrl(void)
{
  //蓝牙模式
	if(sys_ctrl.mode==0)
	{
		//小车控制
		switch(sys_ctrl.dir)
		{
			case 0:car_stop();break;//停止
			case 1:car_forward();break;//前进
			case 2:car_back();break;//后退
			case 3:car_left();break;//左转
			case 4:car_right();break;//右转
		}
//		//小车状态显示
//		_car_staus_show(sys_ctrl.dir);
//		if(sys_ctrl.dir!=0)sys_ctrl.dir=0;		
	}
	//寻迹模式
	else if(sys_ctrl.mode==1)
	{
		//如果没有感应黑线,前进,开灯
		if(sys_ctrl.ir==0)
		{
			LED(0);
			sys_ctrl.dir=1;
			car_forward();
		}
		//如果左侧感应黑线,左转,关灯
		else if(sys_ctrl.ir==1)
		{
			LED(1);
			sys_ctrl.dir=3;
			car_left();
		}
		//如果右侧感应黑线,右转,关灯
		else if(sys_ctrl.ir==2)
		{
			LED(1);
			sys_ctrl.dir=4;
			car_right();
		}	
	}
	//避障模式
	else if(sys_ctrl.mode==2)
	{
		LED(1);
		//如果检测距离大于避障距离,前进
		if(sys_ctrl.dis>BZ_VALUE)
		{
			sys_ctrl.dir=1;
			car_forward();	
		}
		//如果检测距离小于避障距离,右转
		else
		{
			sys_ctrl.dir=4;
			car_right();	
		}	
	}
	
	//小车状态显示
	_car_staus_show(sys_ctrl.dir);
}






三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Proteus是一款流行的电路仿真软件,可用于仿真各种电子硬件系统。而Arduino是一种开源的、基于简单I/O模块的硬件平台,常用于电子原型设计。 在Proteus仿真Arduino可以帮助开发人员在实际制作硬件之前,先进行虚拟的测试和验证。使用Proteus仿真Arduino的过程如下: 1. 准备工作:首先,在Proteus中安装Arduino库文件。这些库文件包含了Arduino的元件和其它相关零件,可以方便的进行仿真。 2. 创建电路:接下来,在Proteus中创建一个新电路。选择合适的开发板并将其拖放到电路板上。然后,将所需的传感器、模块和其他外围元件添加到电路板上,连接它们以形成完整的硬件系统。 3. 编写代码:然后,为Arduino编写代码。使用Arduino IDE将代码编写为C/C++语言,并包含所需的库文件和功能。这些代码将用于仿真过程中的引脚连通和传感器读取等。 4. 进行仿真:最后,在Proteus中启动仿真过程。通过仿真实验中的不同输入、输出值和传感器读数来模拟真实环境。可以模拟相应的输入或外围设备的信号,然后观察Arduino的响应情况。 通过对Proteus中的仿真过程的模拟,可以尽早发现和解决潜在的问题,减少实际制作过程中的错误和成本。此外,这也方便了对硬件设计的修改和优化。 总而言之,Proteus提供了一个方便而实用的仿真平台,使开发人员可以在实际制作之前对Arduino进行虚拟测试和验证。这有助于提高产品的质量,并提供了更高的可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值