51单片机小项目--红外巡线小车
这次项目要求我们使用51单片机,实现红外循迹,超声波避障的功能。
我将这个几个实现的任务一步步分解开来,首先要然小车动起来,需要模块是需要电机和定时器,我们那时候用到小黄电机,驱动是用的L298N。然后就是将其他实现的功能加进去,比如先使用红外对管,可以让小车寻黑线,使用超声波躲避障碍,然后和队友一起焊遥控器,控制小车穿越规定障碍路线。当时我们51单片机的基础很差(其实就没有学),而且C语言都没有学,什么都不会,CSDN也是第一次用,搜索效率是真低啊,还好隔壁组有大佬,请教了好几次,把程序要来直接用,虽然效果不是很好,但是渐渐的我也摸索到了方法,那时候我负责红外循迹,也是三个任务里面比较难的,因为基础差,我们都没将三个任务的程序在一个main函数里面。后面的博客我会将三个程序合起来,算是弥补当时的小遗憾吧。
L298N驱动
先了解L298N驱动的工作原理,现在看它的驱动原理,有了不同的感觉,因为我也是最近学习一些数字电路的内容,回顾它还是蛮简单的,使用之前一定要看对口再接线,尤其是正负极,还有5V和12V的接口(有一个板载5V使能跳线帽:供电电压为5V时套上,12V时摘下),其次弄懂它的逻辑原理,L298N是一个两路的驱动,它可以驱动两个电机,每一路驱动都有一个使能口,两个逻辑输入口,不同情况对应电机不同的状态。
方法1:
这个方法是三个口控制一个电机,其实也可以使用两个口直接控制的,但是我先说一下前面这种吧,而且最开始我也是使用三个口的,这是基础的控制方法了。
IN1 | IN2 | ENA | 电机状态 |
---|---|---|---|
X | X | 0 | 停止 |
1 | 0 | 1 | 顺时针 |
0 | 1 | 1 | 逆时针 |
0 | 0 | 0 | 停止 |
1 | 1 | 0 | 停止 |
(1:表示高电平,0:表示低电平)
主要是还是使能口的确定,确定使能口的高低电平,然后给逻辑口1或0,就可以控制电机了。软件程序是需要使用定时器的,设置PWM值控制电机的转速。
//以定时器0和定时器1为例
#define uint unsigned int
uint PWM=0; //定义PWM值,控制电机转速
uint pwm1=0;sbit IN11 = P1^0; //定义逻辑口
sbit IN21 = P1^1; sbit IN31 = P1^2;
sbit IN41 = P1^3;sbit a1=P2^1; //定义驱动使能口a1
sbit b1=P2^2; //定义驱动使能口b1
uint i=0,j=0;void Time() //定时器0和1初始函数
{ TMOD |= 0x11; //设置定时器0方式为1 定时器1为方式1
// TMOD |= Ox01; //设置定时器0方式为1EA=1; //打开总中断TH0 = 0xfc; //设置定时器处置为高四位,定时1msTL0 = 0x18; //设置定时器设置为低四位ET0 = 1; //打开定时器0中断允许TR0 = 1; //打开定时器0TH1 = 0xfc; //设置定时器处置为高四位,定时1msTL1 = 0x18; //设置定时器设置为低四位ET1 = 1; //打开定时器1中断允许TR1 = 1; //打开定时器1}void Timer0() interrupt 1
{TH0=0xfc; TL0=0x18; if(i>PWM)a1=1;else a1=0; i++;if(i>=100)i=0;
}
void Timer1() interrupt 3
{TH1=0xfc; TL1=0x18; if(j>pwm1)b1=1;else b1=0; j++;if(j>=100)j=0;
}void forward_move() //电机正转函数,速度50,最大速度100
{PWM = 50;pwm1 = 50;IN11 = 0; IN21 = 1; IN31 = 0; IN41 = 1;
}void xunji() //定义循迹函数
{forward_move();//这里需要用户自己写了,我们但是使用了红外对管循黑线,它很简单,使用的对管多了,逻辑就复杂一点,但是谨慎一点就好
}
void main()
{Timer();while(1){xunji();}
}
方法2 :
第二种方法是使用在性能更高的芯片上,比如STM32F1或F4系列的。首先要将使能口跳线帽拔掉,开启PWM调速。由于STM32的定时器有PWM模式,有模式1和模式2,这样就可以将普通口拉高或拉低,通过定时器的PWM模式(我使用的PWM模式2),赋值两个通道,直接给驱动的逻辑口输入需要的速度值即可。(这里需要对STM32定时器PWM模式有一定的理解,不然还是有点费力的,当时我就没弄明白只是会用,现在回过头才恍然大悟)
电机状态 | IN1 | IN2 |
---|---|---|
正转 | 1/PWM | 0 |
反转 | 0 | 1/PWM |
待机 | 0 | 0 |
刹车 | 1 | 1 |
(1:表示高电平;0:表示低电平;PWM:表示脉宽调制波,调节占空比改变调速)
第二种方法因为要使用到STM32系里开发板,这里我就不提供代码了,等我后面写我们校内赛的总结的时候,可以加上这方面的代码。
我的能力有限,但是希望可以帮助一些刚学习51单片机的朋友,最后呢,如有错误,还望指正,一起进步,一起努力,加油,我们不可以停止脚步哦!
51单片机小项目--红外巡线小车相关推荐
- 51单片机小项目--超声波避障小车
超声波模块 电路连接 超声波HCSR04模块有四个引脚,VCC,GND,TRIG和ECHO. VCC接5V即可. TRIG引脚负责发射超声波信号的信号引脚.这个引脚需要用超过10us的高电平来启动,所 ...
- 51单片机-蓝牙遥控红外循迹小车-代码+硬件连接
2021/04/28-更新工具的连接 ----------------------------------------- 前几天弄了个基于51芯片的蓝牙红外小车,因为是新手也没有人教,网上的资料也不够 ...
- 基于STM32F103智能巡线小车
项目描述: 巡线小车是我作为新手入手的第一个项目,基本巡线功能是使用红外传感器循迹模块判断黑线的路径来确定转向方向,同时控制单片机配置PWM占空比波控制小车前进的L298N电机模块,实现前后退,左 ...
- 基于STC89C52RC单片机制作的红外循迹小车(4个传感器)
单片机:基于STC89C52RC单片机制作的红外循迹小车(4个传感器) 个人感觉红外循迹小车和那些遥控小车的区别就是信号发射不同:遥控小车是通过遥控器发出信号执行相应的动作,而红外循迹是通过红外传感器 ...
- 第五课 程小奔之巡线
广西●河池学院 广西高校重点实验室培训基地 系统控制与信息处理重点实验室 本篇博客来自河池学院: 409教育机器人组 写作时间: 2020年8月9日 程小奔第五课 回顾上节课与新课 课程简介 开始创作 ...
- stm32 电磁巡线小车
stm32 电磁巡线小车 一 可实现功能 使用陀螺仪,根据俯仰角变化在下坡后停车 . 通过三路电感,实现小车巡线,可循 s弯 ,d形弯,8字弯,环岛. 可在不同的地方巡线,有学习能力. 红外光电开关判 ...
- 基于STC89C52RC模块的巡线小车
基于STC89C52RC模块的巡线小车 在STC89C52RC的基础上使用电机驱动使小车完成巡线,停站,避障,掉头等多功能智能小车 所需头文件: #include <reg52.h> #i ...
- Arduino案例实操 -- 智能巡防小车(三)图形化巡线小车编程
巡防小车的巡线功能同时可以用图形化编程软件来实现.博主这里用的图形化编程软件是KRobot. 三.图形化巡线小车编程 3.1 编程环境配置 3.1.1 下载编程软件 3.1.2 安装编程软件 3.2 ...
- Arduino案例实操 -- 智能巡防小车(三)Arduino IDE巡线小车编程
三.Arduino IDE巡线小车编程 3.1 Arduino开发环境 下载免安装ZIP包 下载IDE安装包 3.2 Arduino IDE 3.3 Blink项目实例 打开内置案例 进行程序上传 3 ...
最新文章
- Platform Builder和Embedded visual C++简介
- 从字节码层面分析==比较integer和int
- 字符串 charat_Java | String.charAt(index)| 从字符串中按索引获取字符
- phpcmsV9框架:安装教程
- ListView(1)
- 给萌新HTML5 入门指南
- Android使用init.rc触发脚本实现隐藏内置应用
- 如何保护 Apple ID 避免被盜用的风险?
- day14:磁盘管理df/du/fdisk/parted命令
- Java如何使用IP代理
- 人工智能第六章——约束满足问题(CSP)
- catalina java opts_tomcat catalina.sh JAVA_OPTS参数说明与配置
- 无透镜计算成像文章简介
- windbg使用教程(调试异常及死锁等)
- MDCC2016 总结
- PyCharm 下载/上传gitlab 代码
- Python3 网络爬虫. 4
- 原装Win8系统换win7系统(图文教程)
- 关于我用python表白成功这件事【表白成功】
- 56个JavaScript 实用工具函数助你提升开发效率!