基于单片机的智能寻迹小车设计 设计功能: 1.红外寻迹; 2.自动避障; 须知: 程序 仿真 原理图

嘿,各位电子爱好者们!今天咱来聊聊基于单片机的智能寻迹小车设计,这玩意儿可有趣了,能实现红外寻迹和自动避障两大超酷功能。

一、设计功能解析

1. 红外寻迹

简单说,就是让小车沿着特定的轨迹跑,就像给它画了条隐形的跑道。红外传感器会发射和接收红外线,要是发射的红外线遇到跑道边界反射回来,传感器就能检测到,小车就知道该调整方向,继续沿着跑道跑啦。

2. 自动避障

这功能就像给小车装上了“眼睛”,能让它自己躲开路上的障碍物。超声波传感器或红外避障传感器派上用场,当检测到前方有障碍物时,小车就会自动停下来或者改变行驶方向,防止“撞车”。

二、硬件搭建:原理图

要实现这些功能,硬件部分是基础。咱得先看看原理图。(这里假设使用常见的 51 单片机为例)

  1. 单片机最小系统:这是小车的“大脑”,51 单片机配上晶振电路和复位电路,保证单片机正常工作。晶振就像给单片机定了个工作节奏,常见的 12MHz 晶振,能让单片机每秒执行 1200 万个指令周期。复位电路则像个“重启键”,能让单片机回到初始状态。
  2. 红外寻迹模块:一般由多个红外发射和接收对管组成。比如在小车底部安装 3 - 5 个红外对管,中间的对管用于检测跑道中心,两边的辅助判断方向。
  3. 自动避障模块:以超声波传感器为例,它由超声波发射和接收探头组成。工作时,发射探头发出超声波,碰到障碍物反射回来,接收探头接收,通过测量超声波往返的时间,就能算出障碍物距离。

三、软件编程:程序实现

红外寻迹代码示例(以 C 语言为例)

#include <reg51.h>

sbit LeftSensor = P1^0;
sbit RightSensor = P1^1;

void main() {
    while(1) {
        if(LeftSensor == 0 && RightSensor == 1) {
            // 左边检测到黑线,右转
            P2 = 0x01; 
        } else if(LeftSensor == 1 && RightSensor == 0) {
            // 右边检测到黑线,左转
            P2 = 0x02; 
        } else if(LeftSensor == 0 && RightSensor == 0) {
            // 两边都检测到黑线,直走
            P2 = 0x03; 
        } else {
            // 没检测到黑线,停止
            P2 = 0x00; 
        }
    }
}

代码分析:这里我们定义了两个引脚分别连接左右红外传感器。在主循环中,通过检测传感器的电平状态(0 表示检测到黑线,1 表示未检测到)来决定小车的行驶方向。P2 口用来控制电机驱动模块,不同的数值代表不同的行驶状态。

自动避障代码示例(超声波传感器)

#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit Trig = P1^2;
sbit Echo = P1^3;

unsigned int distance;

void delay(unsigned int time) {
    while(time--);
}

void measure() {
    Trig = 0; _nop_(); _nop_();
    Trig = 1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
    Trig = 0;
    while(Echo == 0);
    TL0 = 0; TH0 = 0;
    TR0 = 1;
    while(Echo == 1);
    TR0 = 0;
    distance = (TH0 << 8) | TL0;
    distance = distance * 1.7 / 100; 
}

void main() {
    TMOD = 0x01;
    while(1) {
        measure();
        if(distance < 20) {
            // 距离小于 20cm,停止
            P2 = 0x00; 
        } else {
            // 正常行驶
            P2 = 0x03; 
        }
    }
}

代码分析:这段代码利用定时器 0 来测量超声波往返时间。measure函数里,先通过 Trig 引脚发送一个短暂的高电平触发超声波发射,然后等待 Echo 引脚变为高电平,开始计时,直到 Echo 变为低电平停止计时,算出的时间换算成距离。在主函数中,根据测量的距离决定小车是否停止。

四、仿真验证

有了代码和硬件设计,别急着动手焊接。咱可以先通过仿真软件验证下设计思路。像 Proteus 就很适合。在 Proteus 里搭建好硬件电路,导入写好的程序,就能模拟小车在不同场景下的运行情况啦。要是发现问题,比如小车转弯逻辑不对,或者避障反应不灵敏,就可以及时调整代码和硬件参数。

基于单片机的智能寻迹小车设计 设计功能: 1.红外寻迹; 2.自动避障; 须知: 程序 仿真 原理图

总之,基于单片机的智能寻迹小车设计,从硬件到软件再到仿真验证,每一步都充满乐趣和挑战。大家不妨动手试试,打造属于自己的智能小车!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐