基于51单片机的超声波红外避障捡拾小车
前言:
这个小车是我大一实验室考核的时候做的,里面的内容较为浅显且有些代码有冲突(不过还是能跑),请各位大佬轻喷。接下来我会介绍实现这个小车的各个步骤。
一、选材:
1:3个光电开关、1个HC-SR04超声波模块
2:一个stc89c52的最小系统板
3:4个TT马达、一个sg90舵机、2个l298n
二、各个模块的认识和使用:
1.光电开关:
接线:蓝色接gnd,黑色接你单片机定义过的io口,棕色接VCC(5v)
使用方法:当检测到障碍物时,与黑线连接的单片机I/O口被置低电平0,也就是说通过读取该I/O口的电平高低,就可以知道传感器前方有没有障碍物,
2.超声波模块:
接线:Vcc:+5V电源供电Trig:输入触发信号(可以触发测距)Echo:传出信号回响(可以传回时间差)Gnd:接地
使用方法:直接给trig高电平,然后读取ECHO引脚是否为高电平,若为高电平,则开启定时器,然后继续检测等待其为低电平的时候,获取计数器值,然后进行计算
计算公式:测试距离=(高电平时间*声速(340M/S))/2。
3.舵机pwm波:
接线:舵机上有三根线,分别是GND(棕色线)、VCC(红色线)和SIG(黄色线),也就是地线、电源线和信号线。VCC接5v,gnd接单片机的gnd,信号线接你定义的引脚就行了。
使用方法: 舵机的控制,需要一个20ms的时基脉冲,控制高电平时间为0.5ms~2.5ms范围内即可控制舵机在0 ~ 180°转动。(注:舵机的pwm在52上好像只能用定时器控制,用delay控制不准确)。
4.l298n:
注意:此处驱动一定要和stc89c52共地!!!否则无法传输数据。还有通道A、B使能上的那块东西要拔掉然后A、B各接一条线到单片机上就能控制电机的使能了
三:部分代码分享:
1.超声波模块的代码:
#include <car.h>float S=0;
extern bit flag;
unsigned int measure_time;
char M_sensor; void StartModule() {Trig=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_();Trig=0;}void Conut(void){measure_time=TH0*256+TL0;TH0=0;TL0=0;S=(measure_time*1.87)/100;if(flag==1||S>20||S<10) {flag=0;LED=1;M_sensor=1;}else{LED=0;M_sensor=0;}}
2.主函数代码:
#define uint8 unsigned char
#define uint16 unsigned short int
#define uint32 unsigned long
#include "reg52.h"
#include <intrins.h>
sbit D_sensor=P2^2;
sbit SERVO0=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P23=P2^3;
sbit P24=P2^4;
sbit LED=P0^0;
sbit L_sensor=P2^0;
sbit R_sensor=P2^1;
//电机L298N
void run(void)//前进
{P12=1;P13=0;P23=1;P24=0;
}
void back(void)//后退
{P12=0;P13=1;P23=0;P24=1;
}
void left(void)//左转
{P12=1;P13=0;P23=0;P24=0;
}
void right(void)//右转
{P12=0;P13=0;P23=1;P24=0;
}
void stop(void)//停止
{P12=0;P13=0;P23=0;P24=0;
}
uint16 Servo0PwmDuty=1500; //PWM脉冲宽度
void DelayMs(uint16 ms)
{uint16 i,j;for(i=0;i<85;i++) //89单片机用85,12系列单片机用800for(j=0;j<ms;j++);
}
void Timer0Init(void)
{TMOD&= 0xF0; //设置定时器模式TMOD|= 0x01; //设置定时器模式TL0 = 0x00; //设置定时初值TH0 = 0x00; //设置定时初值TF0 = 0; //清除TF0标志TR0 = 1; //定时器0开始计时ET0 = 1; //开定时器0中断
}void Timer0Value(uint16 pwm)
{uint16 value;value=0xffff-pwm; TR0 = 0;TL0=value; TH0=value>>8; TR0 = 1;
}void Timer0_isr(void) interrupt 1 using 1
{static uint16 i = 1; //静态变量:每次调用函数时保持上一次所赋的值,switch(i){case 1:SERVO0 = 1; //PWM控制脚高电平Timer0Value(Servo0PwmDuty); break;case 2:SERVO0 = 0; //PWM控制脚低电平Timer0Value(20000-Servo0PwmDuty);i = 0; break; }i++;
}
void main(){EA=1;Timer0Init();LED=0; while(1){ if(D_sensor==0)//检测黑线的光电{run(); }else{ stop();Servo0PwmDuty = 1500; DelayMs(500);Servo0PwmDuty = 500; DelayMs(500);} }}
有需要全部代码可以私信我(应该也不会有人问吧)
实机演示
基于51单片机的超声波红外避障捡拾小车相关推荐
- 基于51单片机的超声波避障小车设计(含Proteus仿真)
超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料. 这次主要给大家分享其Proteus仿真部分. 涉及到的模块有:超声波模块(hc-sr ...
- 【031】基于51单片机的超声波倒车雷达系统(带温度显示补偿)Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的超声波倒车雷达系统(带温度显示补偿)系统proteus仿真设计一份: (2).基于51单片机的超声波倒车雷达系统(带温度显示补偿)系统proteus仿真设计 ...
- 基于51单片机HC-SR04超声波测距带温度补偿
基于51单片机HC-SR04超声波测距带温度补偿 1 开发环境 2 功能说明介绍 3 程序 3.1 工程文件 3.2 代码 4 原理图 5 元器件清单 6 PCB 7全部资料 1 开发环境 仿真图:p ...
- 【030】基于51单片机的超声波液位测距报警系统(带温度显示)Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的超声波液位测距报警(带温度显示)系统proteus仿真设计一份: (2).基于51单片机的超声波液位测距报警(带温度显示)系统proteus仿真设计keli ...
- 基于51单片机的超声波避障小车(HC-SR04,SG90舵机)
+ 一.HC-SR04超声波模块 二.SG90舵机 三.总程序编写 一.HC-SR04超声波模块 HC-SR04时序图 触发信号输入端(Trig)输入一个10微秒以上的高电平信号,超声发送口收到信号自 ...
- 智能小车52单片机c语言,基于单片机的循迹避障智能小车设计文档
第3章 系统硬件电路设计3.1总体设计 智能小车采用两个前轮和一个万向轮的方式,在前轮的左右两端各安装一个电机驱动,利用电机驱动芯片L293D来控制两个前轮的左右转向和停止,后轮是一个万向轮,有支撑和 ...
- 23、基于51单片机温控风扇红外遥控智能温度控制系统设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Proteus仿真 七.程序源码 八.资料包括 摘要 本设计为一种温控风 ...
- 红外报警c语言,基于51单片机的人体红外报警器程序设计
//51单片机简人体红外报警器设计,手动按键控制实现紧急报警.布防.撤防.关闭报警)// #include #define uchar unsigned char #define uint unsi ...
- 基于51单片机的人体红外探测防盗报警
资料编号:128 下面是相关功能视频演示: 128-基于51单片机的人体红外探测防盗报警(仿真+源码+全套资料) 功能说明: 1.按下紧急报警按键,紧急报警灯闪烁,蜂鸣器报警 2.按下布防按键,布防 ...
- 基于51单片机的人体红外探测防盗报警(仿真+源码+全套资料)
资料编号:128 功能说明: 1.按下紧急报警按键,紧急报警灯闪烁,蜂鸣器报警 2.按下布防按键,布防指示灯开始闪烁,闪烁大约30秒,保持亮的状态,进入布防模式 3.按下取消报警/布防按键,取消布防 ...
最新文章
- 【转】超简单利用UGUI制作圆形小地图
- IBM 推出 Bluemix :Swift 将支持服务器端开发
- 西文是指什么_儒家君子文化:何为君子?为什么要做君子,而不做小人?
- 人工智能:第八章 自动规划
- js text 和 html,JS DOM innerText和textContent的区别
- 静态库的冲突 duplicate symbol
- XPATH获取USER列用户ID的小方法
- MyCat分布式数据库集群架构工作笔记0009---Mycat主--从复制配置上
- mysql lost connection to server during query
- 巴菲特曾说过,如果一个人身上有以下几个恶习
- 怎么用计算机技术预测蛋白质结构,蛋白质结构预测及方法介绍 一搜索无重复 - 生物科学 - 小木虫 - 学术 科研 互动社区...
- 树莓派上的Docker集群管理
- SQL数据库的下载与安装
- L2-011 玩转二叉树 (25分)
- wifi分析仪怎么看哪个信道好_怎么查看周围的WiFi网络使用了哪些信道
- 计算机网络知识总结(韩立刚老师视频)
- Linux系统交换空间详解
- 求求你了!别瞎提交代码了,看人家 Git 提交规范那叫一个舒服!
- 微信大数据解析不一样的人生,你被戳中了吗……
- 基于Qt ffmpeg opengl开发跨平台安卓实时投屏软件