前言:

这个小车是我大一实验室考核的时候做的,里面的内容较为浅显且有些代码有冲突(不过还是能跑),请各位大佬轻喷。接下来我会介绍实现这个小车的各个步骤。

一、选材:

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单片机的超声波红外避障捡拾小车相关推荐

  1. 基于51单片机的超声波避障小车设计(含Proteus仿真)

    超声波避障程序随处可见,基于51单片机的超声波避障小车也很成熟,但是完整的Proteus仿真并不容易找到开源资料. 这次主要给大家分享其Proteus仿真部分. 涉及到的模块有:超声波模块(hc-sr ...

  2. 【031】基于51单片机的超声波倒车雷达系统(带温度显示补偿)Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的超声波倒车雷达系统(带温度显示补偿)系统proteus仿真设计一份: (2).基于51单片机的超声波倒车雷达系统(带温度显示补偿)系统proteus仿真设计 ...

  3. 基于51单片机HC-SR04超声波测距带温度补偿

    基于51单片机HC-SR04超声波测距带温度补偿 1 开发环境 2 功能说明介绍 3 程序 3.1 工程文件 3.2 代码 4 原理图 5 元器件清单 6 PCB 7全部资料 1 开发环境 仿真图:p ...

  4. 【030】基于51单片机的超声波液位测距报警系统(带温度显示)Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的超声波液位测距报警(带温度显示)系统proteus仿真设计一份: (2).基于51单片机的超声波液位测距报警(带温度显示)系统proteus仿真设计keli ...

  5. 基于51单片机的超声波避障小车(HC-SR04,SG90舵机)

    + 一.HC-SR04超声波模块 二.SG90舵机 三.总程序编写 一.HC-SR04超声波模块 HC-SR04时序图 触发信号输入端(Trig)输入一个10微秒以上的高电平信号,超声发送口收到信号自 ...

  6. 智能小车52单片机c语言,基于单片机的循迹避障智能小车设计文档

    第3章 系统硬件电路设计3.1总体设计 智能小车采用两个前轮和一个万向轮的方式,在前轮的左右两端各安装一个电机驱动,利用电机驱动芯片L293D来控制两个前轮的左右转向和停止,后轮是一个万向轮,有支撑和 ...

  7. 23、基于51单片机温控风扇红外遥控智能温度控制系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Proteus仿真 七.程序源码 八.资料包括 摘要 本设计为一种温控风 ...

  8. 红外报警c语言,基于51单片机的人体红外报警器程序设计

    //51单片机简人体红外报警器设计,手动按键控制实现紧急报警.布防.撤防.关闭报警)// #include #define uchar unsigned char #define uint  unsi ...

  9. 基于51单片机的人体红外探测防盗报警

    资料编号:128  下面是相关功能视频演示: 128-基于51单片机的人体红外探测防盗报警(仿真+源码+全套资料) 功能说明: 1.按下紧急报警按键,紧急报警灯闪烁,蜂鸣器报警 2.按下布防按键,布防 ...

  10. 基于51单片机的人体红外探测防盗报警(仿真+源码+全套资料)

     资料编号:128 功能说明: 1.按下紧急报警按键,紧急报警灯闪烁,蜂鸣器报警 2.按下布防按键,布防指示灯开始闪烁,闪烁大约30秒,保持亮的状态,进入布防模式 3.按下取消报警/布防按键,取消布防 ...

最新文章

  1. 【转】超简单利用UGUI制作圆形小地图
  2. IBM 推出 Bluemix :Swift 将支持服务器端开发
  3. 西文是指什么_儒家君子文化:何为君子?为什么要做君子,而不做小人?
  4. 人工智能:第八章 自动规划
  5. js text 和 html,JS DOM innerText和textContent的区别
  6. 静态库的冲突 duplicate symbol
  7. XPATH获取USER列用户ID的小方法
  8. MyCat分布式数据库集群架构工作笔记0009---Mycat主--从复制配置上
  9. mysql lost connection to server during query
  10. 巴菲特曾说过,如果一个人身上有以下几个恶习
  11. 怎么用计算机技术预测蛋白质结构,蛋白质结构预测及方法介绍 一搜索无重复 - 生物科学 - 小木虫 - 学术 科研 互动社区...
  12. 树莓派上的Docker集群管理
  13. SQL数据库的下载与安装
  14. L2-011 玩转二叉树 (25分)
  15. wifi分析仪怎么看哪个信道好_怎么查看周围的WiFi网络使用了哪些信道
  16. 计算机网络知识总结(韩立刚老师视频)
  17. Linux系统交换空间详解
  18. 求求你了!别瞎提交代码了,看人家 Git 提交规范那叫一个舒服!
  19. 微信大数据解析不一样的人生,你被戳中了吗……
  20. 基于Qt ffmpeg opengl开发跨平台安卓实时投屏软件

热门文章

  1. 2021年下半年《信息系统项目管理师》真题
  2. keil 使用教程 编写第一个led灯程序
  3. OpenGL超级宝典(第7版)之清单的初始环境配置VS2019
  4. 几何画板制作抛物线,就是这么简单
  5. 追踪研读法破解EZ-USB的“远程唤醒”
  6. python ichat_Python使用微信itchat接口实现查看自己微信的信息功能详解
  7. 《游戏设计艺术(第二版)》第一、二章个人学习
  8. 记 * 恢复ext4硬盘的数据
  9. 高质量程序好文分享之王垠《编程的智慧》
  10. 第一章 时间序列基础知识