【TB作品】51单片机 Proteus仿真 00013红外proteus仿真循迹避障小车

news2024/11/13 15:14:48

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验报告:智能小车系统设计与实现

一、背景介绍

本实验旨在设计并实现一个基于STC89C52单片机控制的智能小车系统。该系统通过超声波传感器进行避障,通过红外接收器实现远程控制,同时具备循迹功能。整个系统的核心是单片机,它通过对各种传感器和执行器的控制,实现智能小车的多种功能。

二、硬件介绍

  1. STC89C52单片机:主控芯片,负责处理所有传感器数据及控制信号。
  2. 红外接收器:接收遥控器的信号,实现远程控制。
  3. 超声波传感器:用于检测前方障碍物的距离,进行避障处理。
  4. 电机及驱动模块:控制小车的运动,包括前进、后退、左转、右转等。
  5. LCD1602显示屏:用于显示当前小车的状态信息,如距离、按键值等。
  6. 蜂鸣器:提供声音提示。

三、器件连接

  1. 红外接收器连接到单片机的P3^3引脚。
  2. 超声波传感器的Trig和Echo分别连接到P10和P11引脚。
  3. 电机驱动连接到单片机的P30、P31、P32、P36、P34、P35引脚。
  4. LCD1602显示屏连接到单片机的P0端口。
  5. 蜂鸣器连接到P2^4引脚。

四、设计原理

1. 红外接收与解码

红外接收器接收遥控器发出的信号,通过外部中断1(INT1)进行处理,记录脉冲时间并存储在IR_receive_data数组中。定时器1以256us的周期记录脉冲宽度,通过分析脉冲宽度确定接收的数据位值。解码后,将按键值存储在IR_receive_code中。

2. 超声波测距

超声波传感器通过发送Trig信号触发测距,Echo信号返回高电平时间用于计算距离。距离计算公式为:
[ \text{距离} = \frac{\text{高电平时间} \times 1.7}{100} ]

3. 电机控制

电机通过H桥电路进行驱动,控制信号分别连接到P3端口,实现前进、后退、左转、右转及停止功能。

4. LCD1602显示

LCD1602显示屏用于显示当前小车状态信息,如距离、按键值等。通过LCD1602_init初始化后,通过LCD1602_Print函数进行显示操作。

5. 蜂鸣器提示

蜂鸣器通过PWM控制发出声音提示,主要用于操作确认。

五、电路原理

电路设计包括电源模块、传感器模块、执行器模块及显示模块。每个模块与单片机连接,并通过单片机的I/O口进行数据采集与控制。

六、程序原理

程序包括初始化、主循环及各功能模块的实现。

1. 初始化

包括定时器、外部中断、LCD1602显示屏及各传感器的初始化。

void Init_Timer0() {
    TMOD &= 0xf0;
    TMOD |= 0x01;        // 设T0为方式1
    TH0 = 0;
    TL0 = 0;            // 定时器0初始化装载0
    ET0 = 1;            // 允许T0中断
    EA = 1;             // 开启总中断
}

void IR_receive_init() {
    IR_receive_time = 0;
    IR_receive_flag = 0;
    IR_receive_bit = 0;
    IR_receive_OK = 0;
    IR_receive_end = 0;
    TMOD |= 0x20;        // 设置定时器1为8位自动重装计数
    TH1 = 0x00;
    TL1 = 0x00;         // 设置定时时间为256us
    ET1 = 1;            // 定时器1中断打开
    EA = 1;             // 总中断打开
    TR1 = 1;            // 启动定时器1
}

2. 主循环

主循环主要负责超声波测距、红外信号处理及执行相应的控制操作。

void main(void) {
    // 初始化LCD1602
    LCD1602_init();
    LCD1602_Print(0, 0, "KEY:");
    LCD1602_Print(0, 1, "Distance:");

    IR_receive_init();      // 红外解码设置程序
    int1init();             // 外部中断设置
    Init_Timer0();

    while (1) {
        delay_ms(50);

        // 测量超声波距离并显示
        TR0 = 0;
        TH0 = 0;
        TL0 = 0;
        Trig = 1;
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        Trig = 0;
        while (!Echo);
        TR0 = 1;
        while (Echo);
        TR0 = 0;
        distance = Conut();

        // 显示距离
        count = 0;
        disp[count++] = distance % 1000 / 100 + '0';
        disp[count++] = distance % 100 / 10 + '0';
        disp[count++] = distance % 10 / 1 + '0';
        disp[count++] = 'c'; disp[count++] = 'm';
        disp[count++] = 0;
        LCD1602_Print(9, 1, disp);

        // 按键处理
        if (IR_receive_OK) {
            IR_receive_OK = 0;
            IR_code();      // 红外数据解码

            if (IR_receive_end) {
                IR_receive_end = 0;
                IR_check(IR_receive_code[2]); // 红外按键值处理程序

                if (KEY == 1) {
                    AUTOMODE = !AUTOMODE;   // 自动模式开关
                } else if (KEY == 2) {
                    forward();              // 前进
                } else if (KEY == 5) {
                    left();                 // 左转
                } else if (KEY == 6) {
                    stop();                 // 停止
                } else if (KEY == 7) {
                    right();                // 右转
                } else if (KEY == 10) {
                    backward();             // 后退
                }

                beep();     // 蜂鸣器提示
                IR_receive_init(); // 重新初始化红外接收
                int1init();
            }
        }

        // 自动模式下的避障与循迹
        if (AUTOMODE) {
            Avoid();    // 避障
            tracking(); // 循迹
        }
    }
}

七、实验结果

通过上述设计与实现,小车能够实现红外遥控、超声波避障及自动循迹功能。实验过程中,通过LCD1602实时显示距离及按键状态,方便调试与观察。

八、结论

本实验成功实现了基于STC89C52单片机的智能小车系统,具备红外遥控、超声波避障及自动循迹等功能。通过合理的硬件连接与程序设计,小车能够稳定运行,实现预期功能。进一步优化可以考虑提高传感器精度及增加更多智能功能。

资料

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1904317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL之表的约束(1)

目录 空属性(NULL) 实例建表 插入操作 默认值(default) 建表 插入操作 NULL与default的结合 列描述 建表 zerofill 建表 插入操作 主键 建表 插入 主键的增加与去掉 去掉 增加 复合主键 插入的影响 真正约束字段的是数据类型,但是数据类型约束很单一&a…

阿里云 OSS - 开通到使用、服务端签名直传(前后端代码 + 效果演示)

目录 开始 OSS 相关术语须知 阿里云 OSS 开通 阿里云 OSS 使用 官方文档教程 实战开发 阿里云 OSS 自动配置 环境配置 实战开发 服务端签名直传 概述 代码实现 开始 OSS 相关术语须知 中文 英文 说明 存储空间 Bucket 存储空间是您用于存储对象(Ob…

Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测

Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测 目录 Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现Transformer-LSTM多变量时间序列预测,Transf…

IDEA发疯导致maven下载回来的jar不完整zip END header not found

IDEA发疯导致maven下载回来的jar不完整zip END header not found 具体报错 java: 读取D:\mavenRepository\com\alibaba\druid-spring-boot-starter\1.2.23\druid-spring-boot-starter-1.2.23.jar时出错; zip END header not foundjava: java.lang.RuntimeException: java.io.…

【Linux】进程间的通信----管道

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

暄桐教练日课·21天《线的初识》即将开始 一起感受线描的乐趣

林曦老师的直播课,是暄桐教室的必修课。而教练日课是丰富多彩的选修课,它会选出书法史/美术史上重要的、有营养的碑帖和画儿,与你一起,高效练习。而且暄桐教练日课远不止书法、国画,今后还会有更多有趣的课程陆续推出&…

【C++第十课 - stack_queue】stack、queue的使用、适配器模型stack、queue和priority_queue的底层实现、deque

目录 一、stack使用1、push2、pop3、empty4、top题目1、最小栈2、栈的压入、弹出序3、逆波兰表达式求值 二、queue的使用priority_queue习题 三、适配器stack的底层实现queue的底层实现priority_queue的底层实现仿函数/函数对象函数指针 四、deque 一、stack使用 stack是个容器…

深入探索Python库的奇妙世界:赋能编程的无限可能

在编程的浩瀚宇宙中,Python以其简洁的语法、强大的功能和广泛的应用领域,成为了众多开发者心中的璀璨明星。而Python之所以能够如此耀眼,很大程度上得益于其背后庞大的库生态系统。这些库,如同一块块精心雕琢的积木,让…

ffmpeg图片视频编辑器工具的安装与使用

title: ffmpeg图片视频编辑器工具的安装与使用 tags: [ffmpeg, 图片, 音频, 视频, 工具, 流媒体] categories: [工具, ffmpeg] FFmpeg是一个开源的命令行工具,广泛用于处理视频和音频文件,包括转换格式、剪辑、混流、解码、编码等。以下是一些基本的FFmp…

【全面讲解下iPhone新机官网验机流程】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

nginx配置反向代理-CSDN

客户需求 1、实现通过域名访问税金的发票服务(路径格式要求:https://www.xxx.com) nginx的部署 前提 1、客户在局域网内已实现通过https://ip:port/stms访问税金平台 2、客户已获取https的SSL证书 3、客户申请的外网ip和域名已绑定 部署…

为什么要设计DTO类

为什么要使用DTO类,下面以新增员工接口为例来介绍。 新增员工 1.1 需求分析和设计 1.1.1 产品原型 一般在做需求分析时,往往都是对照着产品原型进行分析,因为产品原型比较直观,便于我们理解业务。 后台系统中可以管理员工信息…

WEB自动化框架封装MySQL连接及sql断言教程

为了在Web自动化测试中连接MySQL数据库并进行SQL断言,您可以按照以下步骤: 安装MySQL Connector/Python驱动程序,并导入它。 使用Connector/Python创建一个连接对象,指定所需的主机名、用户名、密码和数据库名。 创建一个游标对…

linux-虚拟内存-虚拟cpu

1、进程: 计算机中的程序关于某数据集合上的一次运行活动。 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。广义定义:进程是一个具有一定独立功能的程序关于某个…

【三维向量旋转】基于Matlab的三维坐标旋转

一、问题描述 若空间中存在三个点A,B,C,其中A点是不动点,B点是当前方向向量上的一个点,C是目标方向上的一个点。如果要让AB向量沿着BC方向进行旋转,使得AB最终旋转到AC。这个过程就是三维向量的旋转过程。我们关注的是这个过程&am…

JAVA 课设 满汉楼餐厅点餐系统

一、代码详解 1.总体结构展示 2.总体代码 2.1 libs文件 链接:https://pan.baidu.com/s/1nH-I7gIlsqyMpXDDCFRuOA 提取码:3404 2.2 配置的德鲁连接池 #keyvalue driverClassNamecom.mysql.cj.jdbc.Driver urljdbc:mysql://localhost:3306/mhl?rewriteBa…

爱了!8款超好用的PC端办公软件!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 你电脑中用的最久的软件是哪些?以下是否有你曾经使用过的软件呢?工欲善其事,必先利其器,今天继续…

打造属于自己的脚手架工具并发布到npm仓库

一、创建项目 使用 npm init -y 创建项目创建项目入口文件 index.js在 package.json 中添加 bin 字段使用 npm link 命令将文件映射至全局,使可以在本地测试 zp 命令 // "zp" 为用于全局执行脚手架的命令,vue-cli中使用的是vue命令 "bi…

STM32-I2C

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. I2C通信1.1 I2C通信简介1.2 硬件电路1.3 I2C时序基本单元1.3.1 起始条件和终止条件1.3.2 发送一个字节1.3.3 接收一个字节1.3.4 发送应答和接收应答 1.4 I2C时序1.4.1 指定地址写1.4.2 当前地址读1.4.3 指定地址读…

利用docker搭建漏洞环境,使用SSRF+Redis写入centos以及ubuntu的公钥,实现免密登录

一、实验环境 kali:在kali中搭建docker容器环境,这里我主要是使用第一个; redis作为一种数据库,它可以将数据写入内存中去,我们通过利用ssrf请求,实现服务器对自己的公钥写入,从而实验免密登录;…