stm32单片机红外遥控超声波避障小车

发布者:清新生活最新更新时间:2020-08-17 来源: 51hei关键字:stm32  单片机  红外遥控  超声波避障小车 手机看文章 扫描二维码
随时随地手机看文章

和同学一起在学校参加院电子设计大赛做的项目,看起来时间很长,但实际上我们拢共做的时间差不多是3天的样子。


板子是正点的,所以很多地方我们就直接扒的正点的例程,比如红外遥控的部分完整拿过来了,能直接用。


我们在完成学校的要求后又多加了测距显示和差速调节(让小车可以从完全停止到最高速度),后面我会分块尽量详细叙述小车的功能原理及代码介绍。


视频演示

https://www.bilibili.com/video/av85501350/


电源

我们采用的是三节18650供电,三节电池就有12v,用来驱动小车绰绰有余,为了获得更稳定符合小车需求的电压,我们又采用了一个LM2596S降压模块,把12V的电压给降到3v给单片机供电。在安装电源的时候,其实我们犯了一个错误,把电池给安装在了小车的第二层,这样在取放电池时就需要拆卸螺丝,比较麻烦。


驱动

驱动模块使用的是经典的L298N,主要是实验室一抓一大把,关于模块的详细说明可以搜索得到,不再赘述。


我们对于这个模块具体的使用如图我们做的是4轮驱动,把轮子分左右用一个驱动模块进行驱动,为了用PWM对小车进行速度控制,所以我们需要调用时钟,这里调用TIM4,使能PB8对左电机进行方向控制,使能PB9作为左电机的PWM信号,使能PA6对右电机进行方向控制,使能PB10作为右电机的PWM信号。


一边有俩电机对应俩轮子,所以,这里还进行了映射,PB8映射到PB5和PB6,对应左边的in1和in2,进行方向控制。


PA6映射到PA5和PA6,对应左边的in3和in4,进行方向控制。


更多具体的配置都在函数里面。


驱动部分并不是由我完全负责,所以我会在大体完成后找机会请当时一起完成的小伙伴一起校验。


在驱动部分,我想再主要挑一部分详细谈谈。


当时我们在对于进行差速控制部分有一个想法,让它实现从零开始逐步加速或者最高速逐步减速,同时也完成要求的三挡速度。


对于要求的三挡速度,其他选了小车的组,据我观察,应该都是在函数里面写好了预先配置3个的PWM占空比,来实现。


当时是我负责的这个功能的实现,我觉得这样写只能单一完成那个要求,然后为了达成我们预想的差速调节,于是我在主函数设置一个变量来代表占空比,然后motor.c里面引进并在后面的调速函数和三挡预置速度函数调用,就能够实现这两个功能了。里面更改占空比的数值是我们测试调节修改出来的。


在控制方向上,我们有旋转和有一定精度的角度的旋转。功能完成也是依靠调节占空比,不再赘述。


超声波部分我们采用的模块是HC-SR04,同样是一个比较经典的模块,这一部分比较搞的是什么,是超声波模块需要5v供电,及其重要,我们一开始代码调试好后,一直显示不出来正确的数据,一直为0(我们有加OLED显示模块,所以可以方便测试),从驱动做好后一直顺风顺水突然在这卡壳了,弄得我们自闭许久。后来在网上查到是5v供电后,一改立马成功。


OLED显示

我们用的0.96寸7针显示模块,代码部分也没什么好说的,网上找到读懂后直接调用就行了


单片机源程序如下:

#include "stm32f10x.h"

#include "delay.h"

#include "motor.h"

#include "usart.h"

#include "remote.h"  

#include "oled.h"

#include "hcsr04.h"

/*

void ZYSTM32_run(int speed,int time);       //前进函数

void ZYSTM32_brake(int time);               //刹车函数

void ZYSTM32_Spin_Left(int speed,int time); //左旋转函数

void ZYSTM32_Spin_Right(int speed,int time);//右旋转函数

void ZYSTM32_back(int speed,int time);      //后退函数

*/

float length=0,sum=0;

         u16 tim;

         uint j=0;

int i=2000;

int main(void)

{        

         u8 key;

          float distance;

         delay_init();

         TIM4_PWM_Init(7199,0);  //初始化PWM

         Remote_Init();                        //红外接收初始化        

         CH_SR04_Init();

                          OLED_Init();                        //初始化OLED  

                OLED_Clear();

         ZYSTM32_brake(500);         

         NVIC_Config();         

         while(1)

                {                  

                         key=Remote_Scan();        

                        distance=Senor_Using();                        

                        OLED_ShowString(0,2,"distance is");

                        OLED_ShowNum(0,4,distance,8,20);

                        if(distance>30)

                        switch(key)

                        {   

                                case 98:ZYSTM32_run(100);break;            

                                case 2:ZYSTM32_brake(100);break;                                             

                                case 34:ZYSTM32_Spin_Left(100);break;                  

                                case 168:ZYSTM32_back(100);break;                  

                                case 194:ZYSTM32_Spin_Right(100);break;

        case 104:speedchange(1);break;

        case 152:speedchange(2);break;        

        case 176:speedchange(3);break;        

                                case 48:turnleft45(220);break;                //4   

                                case 24:turnright45(220);break;                //5   

                     case 16:turnleft45(50);break;     //7

        case 56:turnright45(50);break;                //8               

                                case 224:speeddown();break;                                    

                                case 144:speedup();break;

                        }

                        else

                                {

                                        ZYSTM32_back(100);

                                        delay_us(50);

                                        ZYSTM32_brake(100);

                        }

                }

}


关键字:stm32  单片机  红外遥控  超声波避障小车 引用地址:stm32单片机红外遥控超声波避障小车

上一篇:基于机智云的智能感应灯源程序
下一篇:STM32F103+NRF24L01航模遥控器制作

推荐阅读最新更新时间:2024-11-11 21:54

如何将ADC连接到8051单片机
ADC(模数转换器)是许多单片机开发中非常重要的一部分,本文是关于将ADC连接到8051单片机。ADC0804是此处使用的ADC,在进行接口程序之前,我们必须清楚地了解ADC0804的工作原理。 一、ADC0804 ADC0804是一颗8位、单通道的A/D转换器。ADC0804的特点是差分模拟电压输入,0-5V输入电压范围,无调零,内置时钟发生器,可以外部调节参考电压以将较小的模拟电压跨度转换为8位分辨率等。ADC0804引脚图如下图所示: ADC0804的Vref/2(引脚9)处的电压可以在外部进行调节,以将较小的输入电压跨度转换为全8位分辨率。Vref/2(pin9)左开表示输入电压跨度为0-5V,步长为5/255=1
[单片机]
如何将ADC连接到8051<font color='red'>单片机</font>
基于PIC单片机USB接口的数据采集系统设计
  我们把所设计的数据采集系统功能分解为三大部分:数据采集部分、数据通信部分、数据处理部分。   数据采集部分应包含:A/D转换器,时序、模式控制,数据缓冲功能。它应能接受来自主机的命令,按不同模式控制A/D转换器采集数据,暂存于数据缓冲区,再根据主机命令发给主机。这部分功能由一个单片机及接口来实现是最优方式。   数据通信部分应包含:简单、高效、通用的数据通信模式和软硬件支持。它应能在数据采集和数据处理两部分之间实现目前最好的连接和沟通。因为USB作为一种外部总线标准,用于规范电脑与外部设备的连接和通讯,并具有传输速度快,使用方便,支持热插拔,连接灵活,独立供电等优点,所以这部分功能采用USB接口连接最好。   数据处理部分应
[单片机]
基于PIC<font color='red'>单片机</font>USB接口的数据采集系统设计
基于单片机直流电机PWM控制系统设计
【资源下载】下载地址如下1547: https://docs.qq.com/doc/DTlRSd01BZXNpRUxl 直流电机PWM控制系统的主要功能包括:实现对直流电机的加速、减速以及电机的正转、反转和急停,并且可以调整电机的转速,能够很方便的实现电机的智能控制。 主体电路:即直流电机PWM控制模块。这部分电路主要由AT89S52单片机的I/O端口、定时计数器、外部中断扩展等控制直流电机的加速、减速以及电机的正转和反转,并且可以调整电机的转速,能够很方便的实现电机的智能控制。其间是通过AT89S52单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。该直流电机PWM控制系统由以下电路模块组成:
[单片机]
基于<font color='red'>单片机</font>直流电机PWM控制系统设计
8位MCU交期拉长,Q2 MCU出货大幅增长
受惠于国际MCU大厂转往车用、工控等高端应用市场,逐渐淡出8位MCU市场,全球MCU供货短缺、交货期拉长,下游方案及代理商为因应下半年旺季到来,开始提前拉货备料,MCU厂盛群、新唐第2季可望提前反应旺季。 目前8位MCU Cortex M0/M3/M4 等交期拉长,从今年初至今为改善,且随着下半年大陆十一长假、欧美耶诞节旺季,不少方案及代理商提前备料,更拉大供需之间缺口,而新唐第1季末便开始受惠转单效应,加上32位MCU有新应用于工控、游戏机及智能音箱已获客户采用,第2季MCU出货大幅成长,加上下半年旺季到来,可望带动新唐MCU全年营收双位数成长。 盛群进入传统旺季加上转单效应,第2季出货量倍增,其中无线充电上季出货达30
[半导体设计/制造]
PIC系列单片机简介
一、引言 据统计,我国的单片机年容量已达1-3亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。这说明单片机应用在我国才刚刚起步,有着广阔的前景。培养单片机应用人才,特别是在工程技术人员中普及单片机知识有着重要的现实意义。 当今单片机厂商琳琅满目,产品性能各异。针对具体情况,我们应选何种型号呢?首先,我们来弄清两个概念:集中指令集(CISC)和精简指令集(RISC)。采用CISC结构的单片机数据线和指令线分时复用,即所谓冯.诺伊曼结构。它的指令丰富,功能较强,但取指令和取数据不能同时进行,速度受限,价格亦高。采用RISC结构的单片机数据线和指令线分离,即所谓哈佛结构。这使得取指令和取数据可同时进行,且
[单片机]
PIC系列<font color='red'>单片机</font>简介
单片机3个按键灵活修改多个参数(浮点与整数型)
最近写代码,涉及到按键修改参数,就设计了由3个按键修改多个参数的程序设计。按键修改参数,我以写过,但是有着很长的代码。最近写了一个程序,个人感觉代码量较少,适合使用。这里我选STC15F2K60S2单片机开发板来写Demo程序。 原理很简单,第一个按键是 调节+ 按键(程序IO口写Add),第二个按键是 调节- 按键(程序IO口写写Sub),第二个按键是 切换 按键(程序IO口写Exit),也就是切换要修改的参数。然后通过Exit按键修改Add和Sub调节的变量,从而达到修改参数。 预先定义3个要修改的变量和操作标志位。 unsigned char Data1=0,Data2=0,Data3=0; unsigned c
[单片机]
MSP432单片机学习记录(二)
前面的文章提到了ccs工程的创建,下面继续介绍msp432的使用,上一篇文章链接如下所示:MSP432单片机学习记录(Code Composer Studio) 另外一个就是芯片的资源官网查不到了,不知道啥原因,这里可以从一些其他老的网站看到一些,可以看下芯片资源,便于后面在选择芯片时候的考量。 低功耗、高性能 MSP432P401R MCU 带浮点单元和 DSP 加速功能的 48MHz 32 位 ARM Cortex M4F 功耗:95uA/MHz 工作功耗和 850nA RTC 待机操作功耗 模拟:24 通道 14 位差动 1MSPS SAR ADC,两个比较器 数字:高级加密标准 (AES256) 加速器、CRC
[单片机]
MSP432<font color='red'>单片机</font>学习记录(二)
51系列单片机的区别与特点介绍
8031/8051/8751是Intel公司早期的产品。 1、8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPROM的2764系列。用户若想对写入到EPROM中的程序进行修改,必须先用一种特殊的紫外线灯将其照射擦除,之后再可写入。写入到外接程序存储器的程序代码没有什么保密性可言。 2、8051的特点 8051片内有4k ROM,无须外接外存储器和373,更能体现“单片”的简练。但是你编的程序你无法烧写到其ROM中,只有将程序交芯片厂代你烧写,并是一次性的,今后你和芯片厂都不能改写其内容。 3、8751的特点 8751与8051基本一样,但875
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved