基于STM32红外避障小车的设计(有代码)

2023-10-29

什么是避障小车

用红外光电传感器,探测到物体即输出脉冲,输入到单片机中处 理一下,再对电机驱动模块进行控制,实现壁障的功能,这样的避障小车又称为简单的避障机器人。

各种避障方法:
1、红外线避障 2、超声波避障

红外避障原理

基本硬件 红外发射管和接收管:分离式和一体式
在这里插入图片描述
变送电路:模拟量;数字量:将模拟量经过比较器输出开关量

选择模块简介:

在这里插入图片描述
不怕光HJ-IR2传感器 • 1、HJ-IR2相当于一个红外电子开关,检测到障碍输出低电平,平 时高电平。。 • 2、前方有障碍物时,红外管发出的红外信号经红外接收管接收 回来后,经集成的芯片放大,比较后,输出一低电平,点亮模块 上的LED发光管,同时可以输出一个低平信号,信号可以作为单 片机的信号输入检测控制外部各种驱动模块之用。 • 3、模块三线制,VCC为电原+5V,OUT为信号输出端,GND接电源 负极。 • 4、探测距离大概为1~30CM(探测距离的长短和供电电压、电流还 有周围环境有关,这里只作为参考) • 5、工作电压5V 工作电流 18-30ma左右。

2路壁障模块的输出 :

在一般电子设计比赛等对壁障模块功能要求不高的场合,完全可 以采用比较器输出开关量,这样编程简单,易于实现; 1路壁障模块模块则输出1路开关量,可以接单片机的普通输入IO 口;

2路壁障模块原理 :

根据小车的运行情况有以下几种运动方式:
若没有被任何一个探头检测到,小车直行; 左边探头检测到物体时小车向右转 ; 右这探头检测到物体时小车向左转 •;上述算法描述是最简单的红外壁障算法,如果有一定的速度需求, 则在以上算法上进行改进。

壁障模块的安装调试步骤 :

将2路探头呈一行布置在智能车前方,探头朝前面, 可以采用铜柱+螺丝方式固定; 将中控板固定在车身上; 正确连接中控板和探头的杜邦线; 正确连接控制主板; 将小车放到地面上,前方10CM处放物体,调节电位器, 保证某探头在经过物体时,LED的状态不同。 若无论怎么调节电位器,LED状态都不变化,则应该 是杜邦线接触不好,要更换。

简单源码分析—IO口定义

在这里插入图片描述

简单源码分析—算法分析

在这里插入图片描述主程序:


#include "stm32f10x.h"
#include "interface.h"
#include "LCD1602.h"
#include "IRCtrol.h"
#include "motor.h"
#include "UltrasonicCtrol.h"
#include "redvoid.h"

//全局变量定义
unsigned int speed_count=0;//占空比计数器 50次一周期
char front_left_speed_duty=SPEED_DUTY;
char front_right_speed_duty=SPEED_DUTY;
char behind_left_speed_duty=SPEED_DUTY;
char behind_right_speed_duty=SPEED_DUTY;

unsigned char tick_5ms = 0;//5ms计数器,作为主函数的基本周期
unsigned char tick_1ms = 0;//1ms计数器,作为电机的基本计数器
unsigned char tick_200ms = 0;//刷新显示

char ctrl_comm = COMM_STOP;//控制指令
char ctrl_comm_last = COMM_STOP;//上一次的指令
unsigned char continue_time=0;

int main(void)
{
   
	delay_init();
	GPIOCLKInit();
	UserLEDInit();
//	LCD1602Init();
//	IRCtrolInit();
	TIM2_Init();
	MotorInit();
	//UltraSoundInit();
	RedRayInit();
	ServoInit();

 while(1)
 {
   	 
	 		if(tick_5ms >= 5)
		{
   
			tick_5ms = 0;
			tick_200ms++;
			if(tick_200ms >= 40)
			{
   
				tick_200ms = 0;
				LEDToggle(LED_PIN);
			}

			VoidRun();

		}
		
 }
}


串口部分:

#include "uart.h"
#include "interface.h"

//UART function
//UART1 TxD GPIOA9   RxD GPIOA10
void USART1Conf(u32 baudRate)
{
   
	USART_InitTypeDef USART_InitSturct;//定义串口1的初始化结构体

	GPIO_InitTypeDef GPIO_InitStruct;//定义串口对应管脚的结构体

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA , ENABLE);//打开串口管脚时钟
	//USART1_Tx_Pin Configure 
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;//输出引脚
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//设置最高速度50MHz
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//推挽复用输出
	GPIO_Init(GPIOA , &GPIO_InitStruct);//将初始化好的结构体装入寄存器

//USART1_Rx_Pin Configure
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;//GPIO模式悬浮输入
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;//输入引脚
  GPIO_Init(GPIOA, &GPIO_InitStruct);//将初始化好的结构体装入寄存器

//USART1 Configure	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);//时钟使能
	USART_InitSturct.USART_BaudRate = baudRate;//波特率19200
	USART_InitSturct.USART_WordLength = USART_WordLength_8b;//数据宽度8位
	USART_InitSturct.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitSturct.USART_Parity = USART_Parity_No;//无奇偶校验
	USART_InitSturct
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STM32红外避障小车的设计(有代码) 的相关文章

随机推荐

  • 第13章 商品秒杀功能实现

    mini商城第13章 商品秒杀功能实现 一 课题 商品秒杀功能实现 二 回顾 1 密码安全学 2 微信支付 3 微信退款 三 目标 1 秒杀设计 秒杀业务设计 秒杀架构设计 秒杀表结构设计 2 活动管理 活动分析 有效活动列表查询 3 搜索
  • 有问题的代码

    1 把对象加到集合中
  • servlet 教程 1:环境搭建和新建 servlet 项目

    Servlet Server Applet 是 Java Servlet 的简称 称为小服务程序或服务连接器 狭义的 Servlet是指 Java 语言实现的一个接口 广义的 Servlet 是指任何实现了这个 Servlet 接口的类 一
  • flex布局,占满余下宽度或余下高度

    father display flex flex flow row nowrap son1 width 20px son2 flex grow 1 占满宽度 flex direction row 占满高度 flex direction co
  • C++ strcmp函数的使用

    函数关键字 strcmp 使用格式 类型 strcmp 参数1 参数2 功 能 比较参数1和参数 1 若参数1 gt 参数2 返回正数 2 若参数1 lt 参数2 返回负数 3 若参数1 参数2 返回0 例 include
  • JBOSS4.2.2 EJB WEB 群集配置与部署全过程

    目录 完整参考资料 JBOSS4指南 http docs jboss org jbossas jboss4guide r5 jboss4guide zip 1 修改虚拟机的参数 run bat或run conf 文件中的jvm堆大小 如果是
  • C++ 参数加入const &的作用

    一 作为传入参数不可以修改其值 二 如果实参与形参的数据类型相同时 则不会创建新的临时变量 即形参和实参的地址相同 三 如果实参与形参的数据类型不同时 则会在函数体中创建一个新的形参临时变量来存储实参类型 这里会自动对实参进行强制类型转化
  • 用python代码实现ChatGPT平台和剪映/百度AIGC平台制作短视频的自动化的讨论

    思路 使用ChatGPT平台生成短视频的文本描述 将文本描述传入剪映 百度AIGC平台 生成短视频 代码 使用ChatGPT平台生成短视频的文本描述 import openai openai api key YOUR API KEY def
  • JAVA中的各种循环语句

    目录 一 if循环 二 if与else if循环的运用 三 while循环 四 for循环 我下面都用案例来解释和展示循环 大家结合案例和注释多加感悟 将会对Java循环有个不错了解 一 if循环 下面为一个输入成绩判定情况 public
  • 2022Java面试题大全,附答案,最新整理

    1 遍历ArrayList时如何正确移除一个元素 错误写法示例一 public static void remove ArrayList
  • vue 更改头像功能实现(结合项目)

    用VUE脚手架学习开发的一个项目 某学习软件 先分享一个更换头像的功能 真实后台接口数据 很常见的个人中心版块 重点在头像和昵称这块 首先要理清业务需求 点击头像或昵称跳转到修改信息页 下面上代码 跳转到信息填写页面 点击头像 弹出遮罩层
  • Qt 插件路径(笔记)

    Qt Manual 已经专门介绍了Deploying Plugins 的问题 半年前Qt 插件学习 一 也简单整理了一点路径相关的问题 可是 一直以来没理清 图片插件 编解码插件 数据库插件 到底是如何被加载的 走马观花 如果我们需要打开或
  • arcgis墨卡托与经纬度之间的互相转换

    使用 esri geometry webMercatorUtils 方法 经纬度转墨卡托 webMercatorUtils lngLatToXY x y 返回墨卡托坐标 merx mery 墨卡托转经纬度 webMercatorUtils
  • EasyExcel读取excel读复杂表头文件

    最近在项目开发中 遇到的一个excel复杂表头的导入数据库操作 具体怎么做 直接上代码吧 1 文件上传 把你要导入的文件上传磁盘某个目录 当然你也可以导入到项目目录下都行 该类的位置就是controller层 给用户提供一个上传文件的接口
  • 子集生成算法——增量构造法

    我的个人博客 逐步前行STEP 思路是一次选出一个元素放入集合中 生成0 n的子集 每次选出最小的值放入集合中 通过从0递增得到下一个位置的值 include
  • String常量池问题的几个例子

    String常量池问题的几个例子 示例1 Java代码 String s0 kvill String s1 kvill String s2 kv ill System out println s0 s1 System out println
  • 剑指Offer-40

    题目 一个整型数组里除了两个数字之外 其他的数字都出现了两次 找出只出现一次的数字 要求时间复杂度是 O n 空间复杂度是 O 1 实现 coding java public class Solution40 用 Hashmap 的方式 时
  • ES3~ES6数组的方法总结

    ES3数组的方法 push arr push 值 向数组的最后一个位置添加一个元素 语法 arr push 返回值 改变之后的数组的长度 改变原数组 var arr aa bb cc var res arr push dd console
  • day08-编程题

    每日作业 JavaSE第8天 题目1 训练 现已知工人 Worker 类 属性包含姓名 name 工龄 year 请编写该类 提供构造方法和get set方法 在测试类中 请查看键盘录入Scanner类的API 创建工人类对象 属性值由键盘
  • 基于STM32红外避障小车的设计(有代码)

    什么是避障小车 用红外光电传感器 探测到物体即输出脉冲 输入到单片机中处 理一下 再对电机驱动模块进行控制 实现壁障的功能 这样的避障小车又称为简单的避障机器人 各种避障方法 1 红外线避障 2 超声波避障 红外避障原理 基本硬件 红外发射