基于 51 单片机的红外智能垃圾桶源程序

使用 STC89C52 / AT89C52 + 红外人体感应 + SG90 舵机,非常适合课程设计 / 毕业设计 / 智能家居 DIY。


一、系统功能说明

人体靠近 → 自动开盖

延时 3~5 秒 → 自动关盖

支持手动按键开盖

低功耗待机(可扩展)


二、硬件连接(标准接法)

模块 51 单片机
红外人体感应 HC-SR501 P3.2(INT0)
按键 P3.3
舵机 SG90 P1.0
蜂鸣器(可选) P1.1
LED 指示灯 P1.2

三、核心工作原理

  • HC‑SR501:检测到人体 → 输出高电平
  • 定时器0:产生 20ms 舵机 PWM
  • 角度控制
    • 0° → 0.5ms
    • 90° → 1.5ms
    • 180° → 2.5ms

四、源程序(Keil C )

main.c(可直接编译)

c 复制代码
#include <reg52.h>

typedef unsigned char uchar;
typedef unsigned int  uint;

sbit SERVO = P1^0;     // 舵机信号
sbit IR    = P3^2;     // 红外人体
sbit KEY   = P3^3;     // 手动按键
sbit LED   = P1^2;     // 指示灯

uchar count = 0;
uchar angle = 0;       // 舵机角度控制
bit open_flag = 0;

/* 延时 ms */
void DelayMs(uint ms)
{
    uint i, j;
    for(i = ms; i > 0; i--)
        for(j = 110; j > 0; j--);
}

/* 定时器0初始化(20ms PWM) */
void Timer0_Init(void)
{
    TMOD &= 0xF0;
    TMOD |= 0x01;
    TH0 = 0xB8;   // 20ms
    TL0 = 0x00;
    ET0 = 1;
    EA  = 1;
    TR0 = 1;
}

/* 舵机角度设置(0~180) */
void Servo_SetAngle(uchar ang)
{
    angle = ang;
}

/* 开盖 */
void Trash_Open(void)
{
    Servo_SetAngle(180);
    LED = 1;
}

/* 关盖 */
void Trash_Close(void)
{
    Servo_SetAngle(0);
    LED = 0;
}

/* 定时器中断 */
void Timer0_ISR(void) interrupt 1
{
    TH0 = 0xB8;
    TL0 = 0x00;

    count++;
    if(count >= 40) count = 0;

    if(count < angle / 9 + 5)
        SERVO = 1;
    else
        SERVO = 0;
}

/* 主函数 */
void main(void)
{
    Timer0_Init();
    Trash_Close();

    while(1)
    {
        if(IR == 1 || KEY == 0)   // 红外或按键触发
        {
            Trash_Open();
            DelayMs(3000);        // 开盖延时
            Trash_Close();
        }
    }
}

五、HC‑SR501 红外模块设置

跳线 设置
触发方式 单次触发
延时 最小
灵敏度 中档

参考代码 基于51单片机的红外智能垃圾桶源程序和原理图 www.youwenfan.com/contentcst/182092.html

六、舵机角度对照表

角度 高电平时间 占空比
0.5 ms 2.5%
90° 1.5 ms 7.5%
180° 2.5 ms 12.5%

七、常见问题排查

问题 原因
舵机不转 电源功率不足
一直开盖 红外感应太灵敏
垃圾桶抖动 舵机供电不稳
误触发 环境热风干扰

建议:舵机单独供电,GND 与 51 共地

相关推荐
东京老树根7 小时前
Arduino - 入门02 - Arduino编程基础 Arduino程序结构,实物与模拟器对照,Arduino常用函数
单片机·机器人
salipopl10 小时前
基于STM32平台的多旋翼无人机系统设计与实现
stm32·嵌入式硬件·无人机
iCxhust17 小时前
8086/8088单板机VSCode集成自动下载功能(完善串口接收显示版)
ide·vscode·单片机·编辑器·微机原理·8088单板机·8086单板机
振南的单片机世界18 小时前
从数码管到点阵屏:动态扫描加595,3个IO驱动256个LED
stm32·单片机·嵌入式硬件
listhi52018 小时前
STC8 16通道模拟采集 + 4路串口 + 8路PWM 程序
stm32·单片机·嵌入式硬件
星夜夏空9919 小时前
STM32单片机学习(4)——嵌入式概述
stm32·单片机·学习
Deitymoon20 小时前
STM32——OLED显示字符串
单片机·嵌入式硬件
Graceful_scenery20 小时前
龙芯2k0300 - 走马观碑组按键驱动移植
单片机·嵌入式硬件
d111111111d20 小时前
MQTT+STM32+ESP8266网络程序分层+韦老师
笔记·stm32·单片机·嵌入式硬件·学习·php
长安第一美人20 小时前
RT-Thread 工业屏驱动开发实战:UART 串口屏协议解析 + 数据实时刷新 + 设备驱动框架完整实现
驱动开发·嵌入式硬件·rt-thread·工业控制·uart通信·串口屏驱动