基于 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 共地

相关推荐
qq_2837200511 小时前
STM32F103 GPIO 端口配置寄存器 CRL / CRH 详解
stm32·单片机·嵌入式硬件
振南的单片机世界12 小时前
NVIC:Cortex-M内核的“中断CPU”
stm32·单片机·嵌入式硬件
KaifuZeng12 小时前
运算放大器学习笔记-虚短和虚断
单片机·嵌入式硬件·运算放大器
张海森-16882013 小时前
cv610的spi0上适配tmi8150b电机ic
单片机
硅农程序猿13 小时前
芯片设计中的门级仿真(GLS):从零延迟验证到 SDF 时序反标
嵌入式硬件·硬件架构·risc-v·芯片
智购科技智能售货柜14 小时前
自动售货机主控方案怎么选?——单片机、树莓派、ESP32的实战对比~YH
单片机·嵌入式硬件
米饭不加菜14 小时前
电平转换电路
经验分享·嵌入式硬件·硬件工程
老k一步步来1 天前
STM32 HAL库CAN通信核心函数详解,参数以及作用
stm32·单片机·嵌入式硬件
gwf2161 天前
SSD读写速度深度解析:顺序读写vs随机读写、IOPS、延迟,你的硬盘性能到底怎么看?
git·嵌入式硬件·缓存·github·智能硬件