基于STM32单片机智能红外遥控跟随小车设计


本设计包含程序代码+原理图+PCB+设计报告,仅供学习参考使用

📚开发环境

原理图:Altium Designer
程序编译器:keil 5
编程语言:C语言
设计编号:C0021

📚功能描述

1.以STM32F103RBT6为主控芯片,实现对小车的控制,使小车能够做出前进、后退、左转、右转等基本行驶动作,通过红外遥控控制小车工作模式的转换(自由行走避障模式、跟随模式);
2.利用压力传感器测重,放在小车上物品的重量在500g范围以内,可以跟随,如果超过范围,就停止不动,蜂鸣器响提示超重。

📚原理图

在这里插入图片描述

📚PCB

在这里插入图片描述

📚程序代码

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"	
#include "timer.h"
#include "adc.h"
#include "remote.h"   
#include "hx711.h" 
#include <string.h>
 
u8 Model=0; //模式 
u8 PWM_WIDTH=28;  
u8 RunModel=0; 

void Hw_Process()
{
  u8 key;
		
	key=Remote_Scan();	
	if(key)
		{
			Beep=1;
			delay_ms(100);	//延时300ms
			Beep=0;			
			printf("\r\n红外键值= %d\r\n",key);
		}
   
    		
if(key==224)// - :进入 自由遥控避障模式		
		{
     RunModel=0;
		}
else if(key==168)// - :进入 跟随模式		
   {
	   RunModel=1;
	 } 
 if(RunModel==0) //自由遥控避障模式,遥控控制
  {
   if(key==194)// 暂停 >||
			{
			   Model=0;
 				 
				 printf("\r\n停止\r\n");//
			}			 
	  else if(key==34)//|<<
			{
			   Model=4;
				 delay_ms(500);	//延时300ms 
				 Model=1;
				 
				 printf("\r\n左\r\n");//
			}
			else if(key==2) //>>|
			{
			   Model=3;
				 delay_ms(500);	//延时300ms 
				 Model=1;
  		 
				 printf("\r\n右\r\n");//
			}
			else if(key==162) //CH-
			{
			   Model=1;
				 
				 printf("\r\n前进\r\n");//
			}
			else if(key==98) //CH
			{
			   Model=2;
 		 
				 printf("\r\n后退\r\n");//
			}				
			else if(key==48)  // 按下键1
			{
			   PWM_WIDTH=40;
 			 
				 printf("\r\n1档\r\n");//
			}
			else if(key==24)  // 按下键2
			{
			    PWM_WIDTH=35;
 				  
				 printf("\r\n2档\r\n");//
			}	
			else if(key==122)  // 按下键3
			{
			   PWM_WIDTH=28;
 
				 printf("\r\n3档\r\n");//
			}				
 
  }
}  
 int main(void)
 {	
	 u16 adcx;
	
	 unsigned long adtemp,adtemp1;
	 u16 Weight=0;
	u16 temp1,temp2;
	delay_init();	    	 //延时函数初始化	  
	 LED_Init();		  	//初始化与LED连接的硬件接口
 
	   
	uart_init(9600);
  //uart2_init(9600); 
	TIM3_Int_Init(10,5199);//10Khz的计数频率,计数到10为1ms   控制小车方向及速度
  CH_SR04_Init();//超声波设置初始化
	Remote_Init();			//红外接收初始化	 
	//ADInit();
	Beep=1;
	delay_ms(100);	//延时300ms
  Beep=0;
	delay_ms(100);	//延时300ms
	Beep=1;
	delay_ms(100);	//延时300ms
  Beep=0;
	printf("\r\n-----------------------------------------------\r\n");//
	adtemp=HX711_Read();  //先读取皮重对应的AD。注意:上电前 称重盘上不能放任何物品,以免造成测量不准。
	Model=0;
		 	
		while(1)
		{	 
 
 
     Hw_Process();//红外遥控处理
		if(RunModel==0) //自由遥控避障模式,遥控控制 +超声波避障
		{  
       temp1=Senor_Using_Left()*10;
			 printf("\r\n左方距离= %d cm",temp1);//串口打印出电压信息
       temp2=Senor_Using_Right()*10;
			 printf("右方距离= %d cm\r\n",temp2);//串口打印出电压信息			
			 if((temp1<250||temp2<250)&&Model==1)//前方障碍太近,需要避障
			 {
				 Model=0;
				 delay_ms(300);	//延时300ms 
				 Model=2;//后退
				 delay_ms(300);	//延时300ms 
			   Model=4;//右转
				 delay_ms(300);	//延时300ms 
				 Model=1;//前进
			 }
		}
	else if(RunModel==1) //进入自动跟随模式 
	  {
			adtemp1=HX711_Read();  
			if(adtemp1>adtemp) //判断检测到AD大于皮重时,认为有物体放置。
			{
			 Weight=(adtemp1-adtemp)*0.002388;   //根据串口调试该系数计算过程为:200g ÷(8494856(放置200g物体对应Ad值)-8411097(无物体放置时输出AD值))
			 printf("\r\n 重量=%d g\r\n",Weight);
			}	
	  if(Weight>500)//如果重物大于 500g  蜂鸣器报警。不跟随
		  {
			  Beep=1;
				delay_ms(300);	//延时300ms
				Beep=0;
				delay_ms(300);	//延时300ms
			}
	  else
		  {
				  
		      temp1=Senor_Using_Left()*10;
			    printf("\r\n左方距离= %d cm",temp1);//串口打印出电压信息
          temp2=Senor_Using_Right()*10;
			    printf("右方距离= %d cm\r\n",temp2);//串口打印出电压信息		
			 
          			if((temp1<200)||(temp2<200))  // 200= 20cm   左右有一方小于20cm
									{
										 	  Model=0;//停止 
									}
								else   if((temp1>1000)&&(temp2>1000))
								 {
									      printf("\r\n停止\r\n");
												Model=0;// 
								 }
                else if((temp1<1000)&&(temp2<1000))
								{
								    printf("\r\n前进\r\n");
									  Model=1;// 
								    delay_ms(300);	//延时300ms 
									
									
											if(temp1>temp2) //说明此时 小车车头相对人偏左,应让小车向右拐弯
											{

												Model=3;//右转
												printf("\r\n右转\r\n");
												delay_ms(200);	//延时300ms 
												       // 
											}
											else if(temp2>temp1)//说明此时 小车车头相对人偏右,应让小车向左拐弯	
											{

												Model=4;//左转
												printf("\r\n左转\r\n");
												delay_ms(200);	//延时300ms 
												 
											} 
								}									
		          Model=0;// 
				 
		  }
	  }
 
			
		 
		}
 }


在这里插入图片描述

📚设计报告

在这里插入图片描述

📚资料清单

在这里插入图片描述

📚下载链接

https://pan.baidu.com/s/1Ev8bZMIRk2ofeYFblrLSfg?pwd=pvwc

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值