STM32 学习笔记2-智能小车循迹实验
特斯拉镇楼
1、什么是小车循迹?
将小车放在黑色跑道上面,小车沿着黑色跑道运动 → 循迹
黑色跑道
2、小车循迹基本原理
原理:
介绍原理之前,突然记起来,在电子爱好者上 做过 一个循迹小车的项目,那个介绍的相相当详细,和这个基本原理是一样的。
光敏电阻:光照作用下, 光敏电阻器的阻值下降。光敏接触(跑道)黑色线时,电阻上升
LM393 比较两路光敏电阻 R13 R14 的大小,不平衡时,控制压线侧电机停止,第二个电机工作,从而修正方向,使黑色跑道线保持在两轮之间。
硬件:
小车底板及附件:支撑,骨架,带四个车辆,前两轮为驱动轮;
可调电位器:10K ,用于调节循迹传感器模块的灵敏度
传感部件:2*反射式光电管 ,用于检测跑道black/white
四个引脚分别为:1 Anode 正极 2 cathode 负极 3 Emitter 发射极 4 collector 接收极
驱动:两个直流电机,作用为驱动车轮运动
电源:干电池
控制模块: LM393 & 单片机系统
显示模块:LED ,循迹指示灯,当循迹探头检测到黑线,指示灯亮
背面:白色是发射端,黑色是接受端
正面
电路图(基本原理与上面介绍的类似,只不过是把用LM393 检测的结果输出给 单片机)
3、小车循迹代码实现 和 分析
先来看主函数 main.c
#include "stm32f10x.h" //系统库函数
#include "delay.h" //延时函数
#include "motor.h" //电机库函数
#include "keysacn.h" // 按键函数
#include "IRSEARCH.h" // 循迹库函数int main(void){ delay_init(); //延时初始化(在调用延时函数之前,必须先用delay_init()初始化Systick)KEY_Init(); // 初始化 调用按键函数IRSearchInit(); // 循迹初始化TIM4_PWM_Init(7199,0); //初始化 PWM 让电机转起来STM32_brake(500); //刹车0.5s keysacn(); while(1){ SearchRun(); // 循迹函数 }}
初始化延时, delay_init();,在之前的内容已经谈论过啦,不赘述
初始化按键, KEY_Init(); 使用的是 GPIO 外设 ,设置和我的学习笔记0 让小灯亮起来类似
//按键初始化函数
//PA15 和PC5 设置为输入
void KEY_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA PORTC时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//PC2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置为上拉输入GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //蜂鸣器PC3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO 50MHzGPIO_Init(GPIOC, &GPIO_InitStructure); //设定参数初始化 GPIOC.3
}
初始化探头,IRSearchInit(); PA7 PB0
void IRSearchInit(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB , ENABLE);//使能时钟GPIO_InitStructure.GPIO_Pin = SEARCH_R_PIN;// PA7GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//输入上拉模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//端口速度GPIO_Init(SEARCH_R_GPIO , &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SEARCH_L_PIN;// PB0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;// GPIO_Init(SEARCH_L_GPIO , &GPIO_InitStructure);
}
初始化 PWM 电机 配置,见学习笔记1 TIM4_PWM_Init(7199,0);
按键读取程序, keysacn(); 同时程序中加了一个蜂鸣器作为反馈声,被按下时蜂鸣器响
void keysacn()
{int val;val=KEY; //读取按键while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))//当按键没有被按下时,一直循环{val=KEY;//}while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))//当按键被按下时{delay_ms(10); //延时10msval=KEY;//读取PC2口电平值赋给Valif(val==1) //第二次判断按键是否被按下{BEEP_SET; //蜂鸣器响while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)) //判断按时是否被松开BEEP_RESET; //蜂鸣器停止}elseBEEP_RESET;//蜂鸣器停止}
}
蜂鸣器定义函数:怎么让蜂鸣器响起来? 蜂鸣器定义为 PC3
#ifndef __KEYSACN_H_
#define __KEYSACN_H_#include "stm32f10x.h"void KEY_Init(void);//按键初始化
void keysacn(void);//按键扫描函数//蜂鸣器IO口定义
#define BEEP_PIN GPIO_Pin_3
#define BEEP_GPIO GPIOC
#define BEEP_SET GPIO_SetBits(BEEP_GPIO,BEEP_PIN)
#define BEEP_RESET GPIO_ResetBits(BEEP_GPIO,BEEP_PIN)//¶ÁÈ¡°´¼ü
#define KEY GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)//读取按键0#endif
下图为示意,实际为 PC.3口为高电平时,蜂鸣器发声,为低电平时,不工作
while(1)
{
SearchRun();
}
SearchRun();
void SearchRun(void) //循迹控制程序
{if(SEARCH_L_IO == WHITE_AREA && SEARCH_R_IO == WHITE_AREA) //前进控制逻辑ctrl_comm = COMM_UP;else if (SEARCH_L_IO == BLACK_AREA && SEARCH_R_IO == WHITE_AREA) //左转控制逻辑ctrl_comm = COMM_LEFT;else if (SEARCH_R_IO == BLACK_AREA & SEARCH_L_IO == WHITE_AREA) //右转控制逻辑ctrl_comm = COMM_RIGHT;else ctrl_comm = COMM_STOP; //停止if(ctrl_comm_last != ctrl_comm) // 检测上一次命令为COMM_STOP?{ctrl_comm_last = ctrl_comm; switch(ctrl_comm){case COMM_UP: STM32_run(50,10);break; //控制电机case COMM_DOWN: STM32_back(50,10);break;case COMM_LEFT: STM32_Left(50,10);break;case COMM_RIGHT: STM32_Right(50,10);break;case COMM_STOP: STM32_brake(10);break;default : break;}}
}
STM32 学习笔记2-智能小车循迹实验相关推荐
- 循迹智能小车c语言主程序,智能小车循迹、避障、红外遥控C语言代码
<智能小车循迹.避障.红外遥控C语言代码>由会员分享,可在线阅读,更多相关<智能小车循迹.避障.红外遥控C语言代码(13页珍藏版)>请在人人文库网上搜索. 1.智能小车避障.循 ...
- Arduino智能小车——循迹篇
Arduino智能小车--循迹篇 Arduino智能小车系列教程时空门: Arduino智能小车--拼装篇 点击跳转 Arduino智能小车--测试篇 点击跳转 Arduino智能小车--调速篇 点击 ...
- 基于51单片机智能小车循迹功能的实现
基于51单片机智能小车循迹功能的实现 目录 基于51单片机智能小车循迹功能的实现 一.思路(仅供参考) 二.部分硬件模块介绍 1.L298n电机驱动模块 2.两路红外循迹模块 三.实现 1.代码 2. ...
- 五路循迹传感器的优点_5路红外线传感器控制智能小车循迹,27秒走完所有站点...
5路红外线循迹智能小车27秒走完比赛地图 为了指导学生参加2017年广东省机器人挑战赛自选项目"高铁时代"的比赛,我改进了某厂家的arduino智能小车,把红外线循迹传感器从2路增 ...
- STM32智能小车循迹教程
文章目录 前言 一.红外循迹模块工作原理及接线图 红外循迹模块工作原理 红外循迹模块和STM32的接线图 二.cubeMX配置 三.代码解析 总结 前言 本篇文章将带大家学习STM32智能小车的循迹功 ...
- 巡线小车学习笔记(arduino 四路循迹)
巡线小车代码学习笔记 红外布局原理 中间两路巡线一直在黑线上,小车会直行,当任意一个出来,小车会自动纠正.如果最外面的检测到黑线.则小车以更大速度纠正到黑线上去.在算法上,优先处理锐角,直角等外围传感 ...
- 51单片机智能小车循迹完整程序_电气与信息工程学院双创协会开展循迹小车培训...
为培养青年学子创新意识和创新能力,激发勇于创新的主动性和积极性,营造良好科技创新氛围,10月29日至30日,电气与信息工程学院双创协会于一教609.三教102和三教202开展循迹小车培训,该培训由电子 ...
- 智能小车循迹、跟随业务代码编写
通过这段时间的学习,终于是把智能小车的循迹.跟随.避障业务实现出来.那么通过写下这篇文章,将自己在这个过程的心得.组装智能小车以及通过代码的编写实现各种业务的心路历程记录下来. 这是小车的实物图,通过 ...
- 遥控汽车的编程c语言,智能小车循迹、避障、红外遥控C语言代码.docx
//智能小车避障.循迹.红外遥控C语言代码 // 实现功能有超声波避障, 红外遥控智能小车, 红外传感器实现小车自动循迹, 1602 显示小 车的工作状态,另有三个独立按键分别控制三种状态的转换 // ...
最新文章
- 通过BeanShell获取UUID并将参数传递给Jmeter
- poj1422(最小路径覆盖问题)
- LeetCode209 长度最小的子数组(二分法)
- 面向对象,面向过程编程
- ASA防火墙11 应用层检测
- Mina框架项目运用
- 【总结】MTO/MTS操作步骤及月末结算
- 计算机病毒中毒该怎么办,电脑中毒后该怎么杀毒呢?
- pytorch学习笔记(十八):Use-Gpu
- 使用idea进行Maven打包异常:Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war
- 机器学习基础(四十二)—— 常用损失函数的设计(multiclass SVM loss hinge loss)
- python代码编写_高质量Python代码编写的5个优化技巧
- django python版本选择
- [领域]javascript hacking guide 第5部分
- 谷歌地球看不了街景_PPT放入3D模型之后,居然能模拟谷歌地图!
- opencv 识别微信登录验证滑动块位置
- unity项目多语言本地化讲解(一)
- mac 外接双显示器
- MP4之sample信息
- Django项目QQ登录后端接口实现
热门文章
- 【ROS2知识】SQLite数据库
- TensorFlow项目1——鸢尾花识别的拆分详解(来源:北大曹健老师tensorflow学习视频)
- 天龙八部服务器维护后提BB,天龙八部:宠物比号值钱?玩家哭诉附体BB半年也卖不出去...
- 中国医科大学22春《生药学(本科)》在线作业【标准答案】
- CentOS 卸载PHP
- PMP备考笔记:项目整合管理1(五)
- 完美世界3D格斗手游[格斗宝贝]今日公測
- Python#内置函数结尾
- win10升级win11(华硕主板)
- 如何实现多存储文件传输,镭速提供多存储文件传输解决方案