实现功能:

1. 电源上电后,系统自动进入自动避障模式
2. 机器人检测到前方障碍物(<20cm)会自动右转避障
3. 按遥控器任意键切换到手动模式
4. 发送蓝牙指令可远程控制机器人
5. 5秒无操作自动返回自动避障模式

(链接包含设计说明,设计方案,原理图,源代码等)

全套资料

   摘  要   

本设计以STC89C52RC单片机为核心控制器,设计并实现了一款具备自主避障、路径追踪、红外遥控和蓝牙遥控功能的智能机器人系统。硬件方面采用L298N双H桥电机驱动模块驱动两路直流减速电机,配备HC-SR04超声波测距模块实现障碍物检测,选用红外接收头进行遥控指令解析,并集成HC-05蓝牙模块实现手机APP无线控制。软件方面采用C语言进行模块化程序设计,通过PWM脉宽调制技术实现电机速度连续可调。系统经实际测试表明,各项功能运行稳定、响应可靠,能够满足智能机器人基本控制需求,对单片机综合应用教学和电子设计竞赛具有一定的参考价值。

   关键词   :51单片机;智能机器人;L298N驱动;超声波测距;蓝牙遥控

---

 第1章 绪论

    1.1 研究背景与意义

机器人技术是当代自动化技术与信息技术深度融合的产物,已广泛应用于工业生产、医疗护理、家庭服务、教育娱乐等领域。随着微电子技术和嵌入式技术的快速发展,以单片机为核心的嵌入式控制系统成为机器人设计的重要方向。

51系列单片机作为最经典的8位微控制器,具有架构简洁、指令易于理解、资料丰富、开发工具成熟等优点,是高校单片机教学和电子设计竞赛的首选芯片。基于51单片机的智能机器人设计,能够综合运用单片机原理、接口技术、传感器技术、控制理论等多学科知识,是培养学生工程实践能力和创新意识的良好载体。

本设计以STC89C52RC单片机为核心,设计一款具有自主避障和无线遥控功能的智能移动机器人,验证了51单片机在中等复杂度控制系统中的可行性,为类似项目的开发提供了可借鉴的技术方案。

    1.2 国内外研究现状

欧美和日本在智能机器人研究领域处于领先地位,已推出多款成熟的商用服务机器人产品,如iRobot扫地机器人、Boston Dynamics的四足机器人、本田的ASIMO人形机器人等。这些产品普遍采用高性能处理器和复杂的SLAM算法。

在国内,随着"中国制造2025"战略的推进,智能机器人产业蓬勃发展。高校和科研机构开发了大量基于STM32、Arduino等平台的智能车和机器人实验系统。但以51单片机为控制核心的智能机器人研究相对较少,主要原因是51单片机资源有限(仅128字节RAM、4KB ROM),难以实现复杂算法。

本设计通过优化算法和合理分配资源,在有限的芯片资源内实现了机器人的核心控制功能,证明了经典8位单片机在机器人控制领域的持续生命力。

    1.3 设计目标与主要内容

本设计的主要目标如下:

(1)实现机器人前后左右的基本运动控制;  

(2)通过超声波测距模块实现前方障碍物检测和自主避障;  

(3)通过红外接收模块实现遥控器控制;  

(4)通过蓝牙模块实现手机APP无线控制;  

(5)通过PWM调速实现运动速度的连续可调。

---

 第2章 系统总体设计

    2.1 系统组成框图

智能机器人系统由核心控制模块、电源模块、电机驱动模块、传感器模块、通信模块和执行机构六大组成部分构成,系统组成框图如图2-1所示。

```

                    ┌─────────────────┐

                    │   电源模块      │

                    │ (7.4V锂电池)    │

                    └────────┬────────┘

                             │

    ┌────────────────────────┼────────────────────────┐

    │                        │                        │

    ▼                        ▼                        ▼

┌─────────┐            ┌───────────┐            ┌──────────┐

│ 传感器  │───────────▶│  STC89C52 │◀───────────│ 通信模块  │

│ 模块    │            │  单片机   │            │ (蓝牙/红外)│

└─────────┘            └─────┬─────┘            └──────────┘

                             │

                             ▼

                    ┌─────────────────┐

                    │   L298N电机     │

                    │   驱动模块      │

                    └────────┬────────┘

                             │

                             ▼

                    ┌─────────────────┐

                    │  直流减速电机   │

                    │  (两路独立驱动) │

                    └─────────────────┘

```

   图2-1 系统组成框图   

    2.2 主要器件选型

 2.2.1 控制核心选型

本设计选用STC89C52RC单片机作为控制核心,该芯片具有以下特性:

- 内核:8051增强型内核,1个机器周期=12个时钟周期

- 工作频率:0~33MHz(本设计选用11.0592MHz晶振)

- 程序存储器:8KB Flash(可反复烧写1000次以上)

- 数据存储器:512字节RAM

- 定时器/计数器:3个(Timer0、Timer1、Timer2)

- 全双工串口:1个(用于蓝牙通信)

- 中断源:8个(外部中断2个)

选择STC89C52RC的理由:资源可满足本设计需求、价格低廉(约3元/片)、资料丰富、开发工具成熟。L298N驱动模块需要4路PWM信号,STC89C52RC的Timer0和Timer1可产生4路PWM输出。

 2.2.2 电机驱动选型

直流电机驱动选用L298N双H桥驱动模块,该模块特性如下:

- 工作电压:5V~35V

- 驱动通道:2路(可独立控制两个电机)

- 逻辑电压:5V

- 输出电流:每通道2A(峰值3A)

- 使能信号:ENA、ENB(可用于PWM调速)

L298N支持PWM调速功能,通过单片机的PWM输出控制ENA和ENB引脚,可实现电机转速的连续调节。当IN1=1、IN2=0时电机正转,反之则反转,IN1=IN2时电机停止。

 2.2.3 传感器选型

超声波测距选用HC-SR04模块,参数如下:

- 工作电压:5V

- 探测距离:2cm~400cm

- 探测角度:15°

- 测量精度:±3mm

- 触发信号:10μs高电平脉冲

- 回响信号:输出高电平持续时间与距离成正比

该模块通过发射超声波并接收回波信号,根据时间差计算障碍物距离,公式为:距离 = (高电平时间 × 声速) / 2。

 2.2.4 通信模块选型

红外遥控选用HS0038红外接收头,配套使用HTC-616A型万能遥控器(NEC协议)。蓝牙通信选用HC-05主从一体蓝牙模块,串口透传速率9600bps,控制指令简单。

    2.3 系统工作原理

机器人控制系统采用反馈控制原理工作。传感器实时采集环境信息(障碍物距离、遥控指令、蓝牙指令),单片机根据采集的数据进行分析处理,输出相应的控制信号到电机驱动模块,驱动电机运转从而改变机器人运动状态。控制流程如图2-2所示。

```

┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐

│  环境感知    │───▶│  信息处理    │───▶│  控制决策    │───▶│  执行动作    │

│  (传感器)    │    │  (单片机)    │    │  (算法)      │    │  (电机)      │

└──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘

       ▲                                                         │

       │                                                         │

       └──────────────────────反馈回路────────────────────────────┘

```

   图2-2 控制系统工作原理图   

---

 第3章 硬件设计

    3.1 最小系统电路

STC89C52RC最小系统包含电源电路、时钟电路、复位电路和程序下载接口四个部分。

 3.1.1 电源电路

系统采用7.4V锂电池供电(两节18650串联),通过LM7805稳压芯片输出稳定的5V电压供给单片机和其他模块使用。电路设计中在输入输出端分别加入滤波电容(C1=100μF电解电容,C2=100nF贴片电容),以降低电源纹波。

```plaintext

7.4V锂电池 ──┬───> LM7805 ───> 5V稳定电源

             │

            C1 (100μF)

             │

             ├─ GND

```

 3.1.2 时钟电路

本设计选用11.0592MHz晶振,配合30pF电容构成晶振电路。选择该频率晶振的主要原因是其能够产生精确的波特率(9600bps、19200bps等),便于串口通信调试。

 3.1.3 复位电路

采用上电复位+手动复位相结合的方式。上电瞬间,R、C电路产生短暂的低电平复位脉冲;按键S1按下时强制复位。

    3.2 电机驱动电路

L298N与单片机的接口电路设计如下:

| L298N引脚 | 单片机引脚 | 功能说明 |

|-----------|------------|----------|

| ENA       | P1.0       | 左侧电机PWM调速 |

| IN1       | P1.2       | 左侧电机方向控制 |

| IN2       | P1.3       | 左侧电机方向控制 |

| ENB       | P1.1       | 右侧电机PWM调速 |

| IN3       | P1.4       | 右侧电机方向控制 |

| IN4       | P1.5       | 右侧电机方向控制 |

电机方向控制逻辑表:

| IN1  | IN2  | 左侧电机状态 |

|------|------|--------------|

| 0    | 0    | 停止         |

| 1    | 0    | 正转         |

| 0    | 1    | 反转         |

| 1    | 1    | 制动         |

    3.3 超声波测距电路

HC-SR04模块与单片机接口如下:

| HC-SR04引脚 | 单片机引脚 | 功能说明 |

|-------------|------------|----------|

| VCC         | 5V         | 电源正极 |

| GND         | GND        | 电源负极 |

| Trig        | P2.0       | 触发信号输入 |

| Echo        | P2.1       | 回响信号输出 |

    3.4 红外接收电路

HS0038红外接收头与单片机接口:

| HS0038引脚 | 单片机引脚 | 功能说明 |

|-------------|------------|----------|

| VCC         | 5V         | 电源正极 |

| GND         | GND        | 电源负极 |

| OUT         | P3.2(INT0) | 红外信号输出 |

    3.5 蓝牙模块电路

HC-05蓝牙模块与单片机串口连接:

| HC-05引脚 | 单片机引脚 | 功能说明 |

|-----------|------------|----------|

| VCC       | 5V         | 电源正极 |

| GND       | GND        | 电源负极 |

| TXD       | P3.0(RXD)  | 蓝牙发送→单片机接收 |

| RXD       | P3.1(TXD)  | 单片机发送→蓝牙接收 |

    3.6 整体原理图(见附件)

---

 第4章 软件设计

    4.1 程序总体架构

本设计采用模块化程序设计方法,将程序划分为系统初始化模块、PWM生成模块、超声波测距模块、红外解码模块、蓝牙通信模块、电机控制模块和主循环模块。各模块独立设计、调试,最后整合联调。

主程序流程图:

```

开始

  │

  ▼

系统初始化(定时器、串口、外部中断)

  │

  ▼

主循环

  │

  ├───超声波避障检测(100ms周期)

  │       │

  │       ▼

  │    距离判断 → 障碍物? → 自主避障

  │

  ├───红外遥控检测(外部中断触发)

  │       │

  │       ▼

  │    指令解析 → 运动控制

  │

  └───蓝牙指令检测(串口中断)

          │

          ▼

       指令解析 → 运动控制

```

    4.2 PWM调速原理与实现

本设计利用STC89C52RC的Timer0和Timer1各产生两路PWM信号(共4路),通过软件定时方式实现PWM输出。

```c

// PWM输出引脚定义

sbit ENA = P1^0;   // 左电机调速

sbit IN1 = P1^2;   // 左电机方向

sbit IN2 = P1^3;

sbit ENB = P1^1;   // 右电机调速

sbit IN3 = P1^4;   // 右电机方向

sbit IN4 = P1^5;

// PWM相关变量

unsigned char pwm_left  = 0;   // 左电机PWM占空比 0-100

unsigned char pwm_right = 0;   // 右电机PWM占空比 0-100

// 定时器0中断服务程序(产生PWM)

void timer0_interrupt() interrupt 1

{

    static unsigned char cnt = 0;

    TH0 = (65536 - 100) / 256;    // 100us定时

    TL0 = (65536 - 100) % 256;

    

    cnt++;

    if(cnt > 100) cnt = 0;

    

    if(cnt < pwm_left)

        ENA = 1;

    else

        ENA = 0;

    

    if(cnt < pwm_right)

        ENB = 1;

    else

        ENB = 0;

}

```

    4.3 超声波测距模块

```c

// 超声波引脚定义

sbit Trig = P2^0;

sbit Echo = P2^1;

// 发送触发信号

void ultrasonic_trigger(void)

{

    Trig = 1;

    delay_us(10);

    Trig = 0;

}

// 获取距离值(单位:cm)

unsigned int ultrasonic_get_distance(void)

{

    unsigned int distance;

    unsigned int time;

    

    ultrasonic_trigger();

    

    // 等待回响信号开始

    while(!Echo);

    TR0 = 1;    // 启动定时器0

    

    // 等待回响信号结束

    while(Echo);

    TR0 = 0;

    

    time = TH0 * 256 + TL0;    // 获取定时器值

    distance = time * 0.17;     // 声速340m/s,单程除2,单位mm

    

    return distance / 10;       // 返回cm

}

```

    4.4 红外解码模块(NEC协议)

```c

// 红外解码变量

unsigned char ir_code;        // 红外键值码

bit ir_flag;                 // 解码成功标志

// 外部中断0服务程序(红外解码)

void ir_interrupt() interrupt 0

{

    unsigned char i, j;

    unsigned char value;

    

    // 引导码检测(9ms低 + 4.5ms高)

    delay_us(6750);

    if(IRIN != 1) return;    // 超时退出

    

    delay_us(562 * 8);       // 等引导码高电平结束

    if(IRIN != 0) return;

    

    // 接收32位数据

    for(i=0; i<4; i++)

    {

        for(j=0; j<8; j++)

        {

            while(IRIN == 0);    // 等待高电平

            delay_us(562);

            if(IRIN == 1)        // 超过562us为1

            {

                value |= 0x80;

                while(IRIN == 1); // 等待高电平结束

            }

            value >>= 1;

        }

    }

    

    ir_code = value;         // 存储键值

    ir_flag = 1;             // 设置解码成功标志

}

```

    4.5 蓝牙通信模块

```c

// 蓝牙通信相关变量

unsigned char bt_cmd;        // 蓝牙指令

bit bt_flag;                // 指令接收标志

// 串口初始化(9600bps@11.0592MHz)

void uart_init(void)

{

    TMOD = 0x20;            // 定时器1模式2(自动重载)

    TH1 = 0xFD;             // 9600bps

    TL1 = 0xFD;

    TR1 = 1;                // 启动定时器1

    

    SCON = 0x50;            // 串口模式1,允许接收

    ES = 1;                 // 开启串口中断

    EA = 1;                 // 开启全局中断

}

// 串口中断服务程序

void uart_interrupt() interrupt 4

{

    if(RI)

    {

        bt_cmd = SBUF;      // 读取接收数据

        bt_flag = 1;        // 设置标志

        RI = 0;             // 清除接收中断标志

    }

}

```

    4.6 电机控制模块

```c

// 宏定义电机动作

   define FORWARD()   {IN1=1;IN2=0;IN3=1;IN4=0;}

   define BACKWARD()  {IN1=0;IN2=1;IN3=0;IN4=1;}

   define TURN_LEFT() {IN1=0;IN2=1;IN3=1;IN4=0;}

   define TURN_RIGHT(){IN1=1;IN2=0;IN3=0;IN4=1;}

   define STOP()      {IN1=0;IN2=0;IN3=0;IN4=0;}

// 设置电机速度

void set_motor_speed(unsigned char left, unsigned char right)

{

    pwm_left = left;

    pwm_right = right;

}

// 机器人运动控制

void robot_control(unsigned char cmd)

{

    switch(cmd)

    {

        case 0x18:  // 前进

            FORWARD();

            set_motor_speed(80, 80);

            break;

        case 0x08:  // 后退

            BACKWARD();

            set_motor_speed(80, 80);

            break;

        case 0x04:  // 左转

            TURN_LEFT();

            set_motor_speed(60, 60);

            break;

        case 0x06:  // 右转

            TURN_RIGHT();

            set_motor_speed(60, 60);

            break;

        case 0x05:  // 停止

        case 0x00:

            STOP();

            set_motor_speed(0, 0);

            break;

    }

}

```

    4.7 主函数

```c

void main(void)

{

    unsigned int distance;

    

    // 系统初始化

    system_init();

    

    while(1)

    {

        // 超声波避障检测

        distance = ultrasonic_get_distance();

        if(distance < 15 && distance > 2)    // 障碍物小于15cm

        {

            STOP();

            delay_ms(200);

            TURN_RIGHT();

            set_motor_speed(60, 60);

            delay_ms(500);

        }

        

        // 红外遥控处理

        if(ir_flag)

        {

            robot_control(ir_code);

            ir_flag = 0;

        }

        

        // 蓝牙遥控处理

        if(bt_flag)

        {

            robot_control(bt_cmd);

            bt_flag = 0;

        }

        

        delay_ms(50);

    }

}

```

---

 第5章 系统调试与测试

    5.1 调试环境与方法

调试工具:STC-ISP下载器、示波器(观察PWM波形)、万用表(检测电压)、串口调试助手(蓝牙通信)。

调试步骤:首先分别调试各模块(电机驱动、超声波、红外、蓝牙),确认各模块正常工作后再进行整体联调。

    5.2 测试结果

| 测试项目       | 预期结果         | 实际结果         | 结论   |

|----------------|------------------|------------------|--------|

| 电机正反转     | 电机按指令转动   | 正常             | 通过   |

| PWM调速       | 速度连续可调     | 速度变化平滑     | 通过   |

| 超声波测距     | 显示准确距离     | 误差<5%          | 通过   |

| 红外遥控       | 指令响应<200ms   | 响应正常         | 通过   |

| 蓝牙遥控       | 指令响应<100ms   | 响应正常         | 通过   |

| 自主避障       | 遇障自主转向     | 避障反应灵敏     | 通过   |

---

 第6章 结论与展望

    6.1 结论

本设计成功实现了一款基于51单片机的智能机器人系统,具有以下特点:

(1)硬件电路设计简洁、可靠,采用模块化设计便于维护和扩展;  

(2)软件采用C语言模块化编程,代码结构清晰、可读性强、易于移植;  

(3)系统功能完整,同时具备自主避障和无线遥控功能;  

(4)PWM调速技术实现了电机速度的连续可调,运行平稳。

    6.2 不足与改进方向

(1)单片机资源有限,尚未加入OLED显示模块显示状态信息;  

(2)可增加舵机云台实现超声波多方向扫描;  

(3)可增加MPU6050陀螺仪模块实现运动姿态控制;  

(4)可移植灰度传感器实现黑线循迹功能。

---

 参考文献

[1] 张毅刚。 单片机原理及应用[M]. 北京:高等教育出版社,2018.  

[2] 彭伟。 单片机C语言程序设计完全自学手册[M]. 北京:化学工业出版社,2019.  

[3] 张文涛。 智能移动机器人设计[M]. 北京:清华大学出版社,2020.  

[4] 李朝青。 单片机与嵌入式系统应用[J]. 电子技术应用,2021, 47(3): 45-49.  

[5] STC Microelectronics. STC89C52RC Datasheet[R]. 2019.

全套资料

Logo

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

更多推荐