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




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

一、背景介绍

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

二、硬件介绍

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

三、器件连接

  1. 红外接收器连接到单片机的P3^3引脚。
  2. 超声波传感器 的Trig和Echo分别连接到P1^0和P1^1引脚。
  3. 电机驱动 连接到单片机的P3^0、P3^1、P3^2、P3^6、P3^4、P3^5引脚。
  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显示屏及各传感器的初始化。

c 复制代码
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. 主循环

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

c 复制代码
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
相关推荐
深圳市青牛科技实业有限公司2 小时前
基于12位D/A转换器实现数控直流电流源的设计
人工智能·单片机·嵌入式硬件·新能源·电源模块
钟剑锋-JeffChong3 小时前
STM32之GPIO(General Purpose Input/Output,通用型输入输出)
stm32·单片机·嵌入式硬件·gpio·嵌入式开发
霜晨月c4 小时前
片上POR和BOR的区别
笔记·stm32·单片机·嵌入式硬件·学习
YunB西风英5 小时前
(STM32笔记)十一、通过EXTI外部中断实现 按键控制LED
笔记·stm32·单片机·嵌入式硬件·学习·硬件
Archie_IT5 小时前
【51单片机仿真】基于51单片机设计的钟表定时闹钟系统仿真&源码&设计文档&演示视频——完整资料下载
单片机·嵌入式硬件·51单片机
秋风&萧瑟6 小时前
【stm32】EXTI外部中断
stm32·单片机·嵌入式硬件
浅陌pa7 小时前
04:【stm32】LED编程和按键控制
stm32·单片机·嵌入式硬件
J_Capital7 小时前
STM32-低功耗模式详解
stm32·单片机·嵌入式硬件
电气_空空7 小时前
基于单片机的空调红外遥控器设计
单片机·嵌入式硬件·毕业设计·毕设
翰霖努力成为专家7 小时前
新手小白嵌入式单片机教程,ESP32
单片机·嵌入式硬件