基于STM32F103智能小车黑线寻迹运动实验(有代码)

2023-11-24 13:48

本文主要是介绍基于STM32F103智能小车黑线寻迹运动实验(有代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小车设计

利用STM32作为智能小车的主控制器来驱动智能小车的直流电机工作,电机驱动芯片采用L298N微型集成电路电机驱动芯片,配合STM32核心板使用实现四个直流电机运行和pwm软件调速,通过改变直流电机占空比的电压来改变平均电压的数值,从而改变电机的转速变化来驱动轮式机器人运行。轮式机器人行驶的状态有:前进、后退、左转、右转和停止。当轮式机器人在行驶过程中遇到障碍物,红外避障检测模块检测周围障碍物,轮式机器人自动停止或转向。通过WIFI无线信号作为传输媒介,以上位机或手机作为控制端来控制机器人的运动以及将摄像头所拍摄的视频信息在控制端界面中显示,这样便可观察轮式机器人周围的环境并对机器人进行实时监控。主要设计步骤有:

(1)根据提出方案的功能需求对智能小车进行结构设计。
(2)根据主控制器的基本结构和特点,设计总体硬件电路模块。总体硬件电路模块的设计包括电机驱动电路设计、红外避障电路设计、无线传输电路设计等。
(3)选择符合系统设计需求的系统软件,并在该软件的基础上编写驱动代码和应用软件代码。针对系统功能的具体要求,从系统信号稳定传输的角度出发,对电机驱动、调速、无线路由器系统的改造、视频信息的接受与发送、红外避障模块的改造和控制端界面的设计等进行详细的分析与设计,并完成代码的编写与调试。
(4)把硬件开发板和软件平台结合起来,对视频监控智能小车整个系统进行了整体测试。对测试中出现的问题进行相关的改进工作,进一步提高系统工作的可靠性和稳定性。

根据提出方案的功能需求,对轮式机器人的整体结构进行设计,采用双面覆铜加硬的PCB板料作为轮式机器人的底盘,其优点是:不易变形、不易折断、轻量化、不易造成短路;选用抗干扰TT马达,其加入压敏抗组的转子可抵抗电机突然启动产生的火花干扰,避免触发信号错误,可有效降低马达启动噪音,并在启动时可提供更大电流,使马力更强;使用航模级抗滑橡胶轮胎内带海绵表面平整不易变形,在避障行走时刹车不易撞上障碍物。马达用马达锁片固定到机器人底盘上,轮子通过轴与马达相连。
在这里插入图片描述在这里插入图片描述
其余硬件设备均固定到机器人底盘上,包括电池座、红外避障传感器、wifi模块、摄像头、STM32单片机主控模块和L298N电机驱动芯片。

具体设计细节请参考之前的博客,再次不做赘述

主程序代码

#include "sys.h"	
#include "delay.h"	#define EN1 PAout(2)                          //L293D控制管脚定义
#define IN1 PAout(3)                          //L293D控制管脚定义
#define IN2 PAout(4)                          //L293D控制管脚定义
#define EN2 PAout(7)                          //L293D控制管脚定义
#define IN3 PAout(6)                          //L293D控制管脚定义
#define IN4 PAout(5)                          //L293D控制管脚定义#define BEEP PBout(5)                         //蜂鸣器控制管脚定义#define KEY1 PAin(8)		                      //功能按键对应的管脚#define XJ_LEFT PAin(13)                      //左边循迹信号           
#define XJ_RIGHT PAin(14)                     //右边循迹信号u8 pwmval_left  = 0;                          //左电机调速变量 
u8 pwmval_right = 0;                          //右电机调速变量 u8 pwmval_left_init  = 6;                     //左电机速度值  
u8 pwmval_right_init = 6;                     //右电机速度值 u8 right_pwm = 1;	                            //左电机调速开关   
u8 left_pwm  = 1;			                        //右电机调速开关      void Motor_Init(void);                        //电机接口初始化
void forward(void);                           //小车前进控制函数
void back(void);			                        //小车后退控制函数
void left_turn(void);                    //向右转  
void stop(void);			  	                        //向左转
void right_turn(void);		                      //停车
void circle_left(void);		                    //原地向左转圈
void circle_right(void);		 	                //原地向右转圈 
void left_moto(void);                         //左电机调速函数
void right_moto(void);                        //右电机调速函数
void Timerx_Init(u16 arr,u16 psc);            //定时器初始化函数
void Beep_Init(void);                         //蜂鸣器接口初始化
void Key_Init(void);                          //按键接口初始化函数
void Key_Scan(void);                          //按键1扫描函数
void Xj_Init(void);                           //循迹信号接口初始化函数
/***********************************************************实验功能
智能小车按键循迹实验,智能小车上电后,按下开发板启动按键(靠
近电源开关那个)小车开始循迹运动。要达到好的实验效果请仔细调
循迹灵敏度。接线说明:
电机驱动线:
开发板的PA2接小车底盘的M6
开发板的PA3接小车底盘的M5
开发板的PA4接小车底盘的M4
开发板的PA5接小车底盘的M3
开发板的PA6接小车底盘的M2
开发板的PA7接小车底盘的M1电源线:
开发板的5V接小车底盘的5V
开发板的GND接小车底盘的GND循迹信号线:
开发板的PA13接小车底盘的H1
开发板的PA14接小车底盘的H2
***********************************************************/
int main(void)
{Stm32_Clock_Init(9);                         //系统时钟设置delay_init(72);	                            //延时初始化Motor_Init();		  	                        //初始化与电机连接的硬件接口Timerx_Init(9,7199);                         //10Khz的计数频率,计数到9为1ms Beep_Init();                                 //蜂鸣器接口初始化                                 Key_Init();Xj_Init();Key_Scan();                                  //按键扫描while(1)        	                               {   if((XJ_LEFT==0)&&(XJ_RIGHT==0))             //两边都没有感应到黑线{forward();                                 //前进 }else if((XJ_LEFT==1)&&(XJ_RIGHT==1))        //两边都感应到黑线(这种情况基本不会出现,主要是容错处理){forward();                                 //前进}else{			  if((XJ_LEFT==1)&&(XJ_RIGHT==0))	          //右边感应到黑线  {delay_ms(3);if((XJ_LEFT==1)&&(XJ_RIGHT == 0)){left_turn();		                          //左转}	 	 }			   			    if((XJ_RIGHT==1)&&(XJ_LEFT==0))            //左边感应到黑线  {delay_ms(3)

这篇关于基于STM32F103智能小车黑线寻迹运动实验(有代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/422043

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip