51智能小车小车之跟随(超声波的使用)(三)

2023-11-16

        智能车的另外一种模式——跟随模式,会跟着前面的障碍物走,此模式利用两个模块,超声波模块和跟随模块;

模块的使用:

中间是超声波模块,两边是跟随模块;

超声波控制前进后退:利用超声波测距,如果距离小于一个值小车前进,否则后退;

跟随模块控制左右转动:如果左边的检测到障碍物,右边没有检测到,则向左转动,否则向右转;

跟随模块原理:含有一个红外发射和一个红外接收,遇到障碍物会反射回来红外信号,绿色指示灯会亮,来检测是否有障碍物,检测障碍物会OUT引脚返回一个低电平信号,利用单片机控制整个低电平信号就可以了;

 

没有多少新东西,而且超声波模块我已经讲过,如果不懂超声波可以直接点击下面连接看到超声波模块讲解https://blog.csdn.net/m0_58832575/article/details/121530250?spm=1001.2014.3001.5501

源码

主程序C文件 

#include "main.h"
#include "move.h"
#include "HC_SR04.h"


sbit bzz=P3^4;//左边跟随模块控制
sbit bzy=P3^5;//右边跟随模块控制
u16 L;


void gs()//跟随
{
	if(L>0 && L<10)//障碍物太近
	{
		back(20,20);
	}
	else if(L>10 && L<30)
	{
		qian(20,20);
	}
	else if(bzz==0 && bzy==1)
	{
		zuo(25,20);
	}
	else if(bzz==1 && bzy==0)
	{
		you(20,25);
	}
	else
	{
		stop();
	}
}
void main()
{
	sr04_init();//T0
	move_init();//T1
	while(1)
	{
		L=sr04_count();
		gs();
	}
}







主程序H文件 

#ifndef __main_H__
#define __main_H__


#include <REGX52.H>

#define u16 unsigned int
#define u8 unsigned char


#endif

超声波C文件

#include "HC_SR04.h"
#include "delay.h"


unsigned long time=0;
u16 S=0;
u16 T0_flag;

void sr04_init()
{
	TMOD|=0x01;//定时器0,工作方式1,16位
	TH0=0;//定时器1来计算,声波返回的时间
	TL0=0;
	EA=1;
	ET0=1;
	TR0=0;
}

u16 sr04_count()
{
	T0_flag=0;
	
	sr04_init();
	
	Trig=0;

	Trig=1;
	delay10us(2);
	Trig=0;

	while(!Echo);
	TR0=1;
	while(Echo);
	TR0=0;
	
	time=TH0*256+TL0;
	TH0=0;
	TL0=0;
	S=(time*1.7)/100;
	if(T0_flag==1)
	{
		S=999;
	}
	
	return S;
}

void T0_timer() interrupt 1
{
	T0_flag=1;
}




超声波H文件

#ifndef __HC_SR04_H__
#define __HC_SR04_H__

//头文件包含
#include "main.h"

//管脚定义
sbit Trig=P2^1;
sbit Echo=P2^0;

//函数声明
void sr04_init();
u16 sr04_count();


#endif


延迟函数C文件

#include "delay.h"

void delay10us(u16 i)
{
	while(i--);
}

void delayms(u16 z)
{
	u16 i,j;
	for(i=z;i>0;i--)
		for(j=114;j>0;j--);
}

void delays(u16 z)
{
	u16 i,j;
	while(z--)
	{
		for(i=498;i>0;i--)
			for(j=500;j>0;j--);
	}
}



延迟函数H文件

#ifndef __delay_H__
#define __delay_H__


#include "main.h"

void delay10us(u16 i);
void delayms(u16 z);
void delays(u16 z);

#endif

移动C文件

#include "move.H"

u8 pwm_left=0,pwm_right=0;
u16 t=0,flag; 

void move_init()
{
	TMOD|=0x10;//定时器1,工作方式1,16位
	TH1=(65536-100)/256;//pwm
	TL1=(65536-100)%256;
	EA=1;
	ET1=1;//中断允许
	TR1=1;//打开定时器
}

void qian(u16 right,u16 left)
{
	pwm_right=right;//25
	pwm_left=left;//25
	IN1=1;
	IN2=0;
	IN3=1;
	IN4=0;
}

void stop()
{
	IN1=0;
	IN2=0;
	IN3=0;
	IN4=0;
}

void zuo(u16 right,u16 left)
{
	pwm_right=right;//35
	pwm_left=left;//30
	IN1=0;
	IN2=0;
	IN3=1;
	IN4=0;
}

void you(u16 right,u16 left)
{
	pwm_right=right;
	pwm_left=left;
	IN1=1;
	IN2=0;
	IN3=0;
	IN4=0;
}

void back(u16 right,u16 left)
{
	pwm_right=right;
	pwm_left=left;
	IN1=0;
	IN2=1;
	IN3=0;
	IN4=1;
}

void Timer1() interrupt 3
{
	EA=0;
	
	TH1=(65536-100)/256;
	TL1=(65536-100)%256;
	t++;
	if(pwm_right>=t)ENA=1;
	else ENA=0;
	if(pwm_left>=t)ENB=1;
	else ENB=0;
	if(t==50)t=0;
	EA=1;
}

移动H文件

#ifndef __move_H__
#define __move_H__


#include "main.h"


sbit ENA=P1^0;//电机的PWM连接管脚
sbit ENB=P1^5;
sbit IN1=P1^1;//电机转动引脚,一个电机两根线
sbit IN2=P1^2;
sbit IN3=P1^3;
sbit IN4=P1^4;



void move_init();
void qian(u16 right,u16 left);
void stop();
void you(u16 right,u16 left);
void zuo(u16 right,u16 left);
void back(u16 right,u16 left);


#endif

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51智能小车小车之跟随(超声波的使用)(三) 的相关文章

  • 嵌入式学习笔记---VIM常用操作和命令

    嵌入式学习笔记 VIM常用操作和命令 写在前面 这里我使用的开发环境是Windows下的Cygwin软件 如果不想下载虚拟机什么的 用这个日常开发完全够 具体的下载安装教程网上一大把 可以参考其他博主 一些配置文件 1 定义 Cygwin是
  • Oracle 进程结构

    Oracle进程结构 进程是动态创建的 完成任务后就消亡 而程序是静态的实体 程序是可以复制 编辑的 进程强调的是执行过程 而程序仅仅是指令的有序集合 进程在内存中 程序在外存中 ORACLE分为用户进程和ORACLE进程 l 用户进程 当
  • 可以解释一下什么是补码吗?

    补码是一种用来表示二进制数的方法 也是计算机中常用的数值表示方式之一 在补码中 正数的二进制表示与原码相同 而负数的二进制表示则是将对应正数的二进制表示按位取反后加上1 例如 在8位补码中 3的二进制表示为11111101 对应的正数是00
  • 输入3个整数,按从小到大的顺序输出

    include

随机推荐

  • mysql每秒最多能插入多少条数据 ? 死磕性能压测

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 前段时间搞优化 最后瓶颈发现都在数据库单点上 问DBA 给我的写入答案是在1W 机械硬盘 左右 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高
  • MobileNet V3 网络结构的原理与 Tensorflow2.0 实现

    文章目录 介绍 MobileNet V3 的创新 1 SE模块的加入 2 修改尾部结构 3 修改通道数量 4 改变激活函数 SE 模块中 BottleNeck 模块中 MobileNet V3 网络结构 1 MobileNet V3 Lar
  • transformer包中的bert预训练模型的调用详解

    文章目录 Bert调用 安装transformers BertTokenizer BertModel Bert调用 2018年的10月11日 Google发布的论文 Pre training of Deep Bidirectional Tr
  • JS获取URL中的Query参数

    需求描述 获取 URL 中的 Query 参数 例如 https www example com test html a param1 b param2 代码片段 实现一 使用URLSearchParams对象 兼容性见Can I use
  • ov5640 PLL时钟、图像大小、帧率寄存器配置

    不同像素和时钟的ov5640摄像头寄存器配置方法 配置摄像头寄存器 网上没有明说的 参考正点原子的文档进行介绍 像素大小配置 0x3801 0x3807 设置ISP大小 0 0 2631 1951 0x3808 0x380B 设置输出图像大
  • 经验分享-前端与后端的接口、HTML分离

    在WEB项目中 前后端不分离多人开放效率还不及一个人开发效率来的高 今天分享一个概念 后端写一个同一个的接口 此接口用于前端根据自己放在服务器上的文件地址生成 但访问处此地址的时候加载相关的一个总的JS用于加载其他的JS CSS HTML文
  • 计算机中丢失msvcp140.dll无法启动此程序怎么办(修复教程)

    DLL是Dynamic Link Library的缩写 意为动态链接库 dll文件是电脑系统及软件运行的重要文件 电脑如果丢失dll文件 那么很多软件跟游戏都是无法运行的 msvcp140 dll丢失这个问题就有很多小伙伴遇到 小编今天就分
  • JS 实现body背景颜色切换

    使用JS点击按钮 实现背景颜色的切换 效果如下 代码实现
  • 使用 React 18 流式传输 SSR 的指南

    React 18 引入了许多令人兴奋的变化和特性 这可能是您已经听说过很多的事情 并且有充分的理由 尽管稍微不那么引人注目 但在 React SSR 架构中也有一些非常令人兴奋的发展 要了解 React 18 带来的突破 必须查看整个时间线
  • 参加2013年大连软件开发者大会

    昨天参加了东软和QClub合办的2013大连软件开发者大会 在此总结一下 这次活动是东软的攻城狮俱乐部主办的 本来是想要向大连的广大程序员朋友征集讲师 但是大家的响应不是特别积极 所以就改成了找讲师的形式 我报了个名 然后通过InfoQ找到
  • 任务6 学生宿舍信息管理系统

    系列文章 任务6 学生宿舍信息管理系统 已知宿舍的信息包括 宿舍楼号 宿舍号 床位号 对应床位号的学生学号 楼长姓名等 设计程序能实现以下功能 1 宿舍信息录入 可随时增加宿舍信息到数据文件中 2 宿舍信息浏览 宿舍的信息输出到屏幕 3 查
  • 【NoSQL数据库技术与应用】【课本代码】【课后题答案】【暂不更新了】

    文章目录 一 课本代码 第1章 初识NoSQL 第2章 文档存储数据库MongoDB 第3章 MongoDB数据库操作 3 8 使用Java操作MongoDB 1 搭建JAVA环境 1 Java配置 2 Maven配置 3 基于Java A
  • nginx进程监控(Keepalived)

    bin bash nginx 家目录 NG HOME xxx xxx nginx Keepalived家目录 HA HOME xxx xxx keepalived RE pid of nginx wc l if RE eq 0 then N
  • 语义熵:QoE-Aware Resource Allocation for Semantic Communication Networks

    目录 论文简介 语义熵的意义 语义熵的定义 论文简介 作者 Lei Yan Zhijin Qin Rui Zhang Yongzhao Li Geoffrey Ye Li 发表期刊or会议 GLOBECOM 发表时间 2022 12 语义熵
  • Python Selenium搭建UI自动化测试框架

    自动化测试是软件测试中非常重要的一部分 可以提高测试效率和测试覆盖率 在UI自动化测试中 Selenium是非常流行的工具 本文将介绍如何使用Python和Selenium搭建UI自动化测试框架 一 环境准备 在开始搭建UI自动化测试框架之
  • phpmyadmin版本对应的各php版本

    phpmyadmin支持的php版本如下 phpmyadmin4 0 PHP5 2 PHP5 3 PHP5 4 PHP5 5 PHP5 6 PHP7 0 PHP7 1 PHP7 2 PHP7 3 PHP7 4 phpmyadmin4 4 P
  • linux 之 内核实时性

    1 linux 实时性方案 单内核方案 主线软实时内核 打PREEMPT RT补丁 使内核成为硬实时内核 双内核方案 主线普通内核 实时内核 例如 RT linux RTAI Xenomai 2 实时性和抢占性 实时性 实时分为硬实时和软实
  • 项目实现读写分离操作(mysql)

    读写分离 1 问题说明 2 读写分离 Master 主库 数据同步 gt Slave 从库 Mysql主从复制 mysql主从复制 介绍 mysql主从复制是一个异步的复制过程 底层是基于mysql数据库自带的二进制日志功能 就是一台或多台
  • GNU 链接脚本LDS介绍

    前言 程序的从C语言代码变成可以在目标机器上执行额文件 可以分为如下步骤 编译 预编译 将宏定义等转义编译 将C语言变成目标文件 o档案 编译 汇编 将预编译过后的目标变为目标文件 链接 合并多个目标文件 o a 等为最终的可执行文件 LD
  • 51智能小车小车之跟随(超声波的使用)(三)

    智能车的另外一种模式 跟随模式 会跟着前面的障碍物走 此模式利用两个模块 超声波模块和跟随模块 模块的使用 中间是超声波模块 两边是跟随模块 超声波控制前进后退 利用超声波测距 如果距离小于一个值小车前进 否则后退 跟随模块控制左右转动 如