基于51单片机宠物喂食系统设计

1 基于51单片机宠物喂食系统设计

本设计基于STC89C52单片机,结合LCD1602液晶显示器、HX711压力传感器、按键输入电路以及直流电机控制电路,实现对宠物喂食过程的自动化控制。系统能够定时投放食物,检测食物重量,保证投放量的精准性,同时具备手动投食功能,极大地方便了宠物主人的日常管理。以下将从功能介绍、电路设计和程序设计三个方面展开详细说明。


2 系统功能介绍

宠物喂食系统的目标是实现科学、自动化的宠物投喂管理,主要功能如下:

  1. 实时信息显示

    通过LCD1602液晶显示屏,实时显示当前系统时间、环境温湿度和剩余食物重量,方便用户随时了解系统运行状态。

  2. 食物重量检测

    采用HX711压力传感器模块,实时检测储料盒内的食物重量,确保投放食物的数量精准,避免宠物过度进食或不足。

  3. 喂养时间设置

    用户可通过按键设置三个喂养时间段,系统会在设定的时间自动进行投喂。

  4. 投放重量设置

    每次投放的食物重量可以通过按键进行设定,保证宠物摄入量合理。

  5. 自动投喂控制

    当达到设定的喂养时间,并且储料盒中食物剩余量小于设定的投放重量时,电机启动正转,模拟投食过程;当检测到投放重量达到标准后,电机反转,模拟投食结束。

  6. 手动投食功能

    用户也可以通过按键触发手动喂食,满足临时投喂需求。

该系统不仅能保证宠物饮食的科学化,还能大幅减少人工参与,提高养宠体验。


3 系统电路设计

系统的电路设计主要包括以下几个模块:

3.1 单片机最小系统电路

STC89C52单片机作为系统的核心,负责采集传感器数据、处理逻辑运算并输出控制信号。其最小系统电路包括晶振电路、复位电路与电源电路:

  • 晶振电路:提供稳定的时钟信号,保证程序的运行速度。
  • 复位电路:保证单片机上电或异常情况下能恢复初始状态。
  • 电源电路:提供+5V稳定直流电源,保证整个系统的可靠运行。

3.2 LCD1602液晶显示电路

LCD1602用于实时显示当前时间、环境温湿度以及食物重量。采用4位数据线模式连接单片机,节省I/O资源。显示内容直观明了,方便用户操作和观察。

3.3 HX711压力传感器电路

HX711是一款高精度24位A/D转换芯片,常用于重量检测。它与压力传感器配合使用,将食物重量转化为电信号,并传输给单片机进行处理。

  • DT引脚:数据输出,接单片机I/O口。
  • SCK引脚 :时钟信号,由单片机控制。
    通过程序控制,单片机能够实时读取食物重量并显示在LCD上。

3.4 按键输入电路

系统设置有多组按键,分别用于:

  • 时间调整(增加/减少小时和分钟);
  • 设置喂养时间段;
  • 设置投喂重量;
  • 手动喂食启动。

按键采用下拉电阻接法,单片机通过检测端口电平变化来识别按键操作。

3.5 电机控制电路

电机用于模拟投放食物的过程。通过H桥电路实现电机正转与反转:

  • 正转:投食;
  • 反转:停止或复位。

控制电路采用继电器或L298N电机驱动模块,由单片机I/O口输出信号控制其动作。

3.6 温湿度传感器电路

为实现环境监测功能,本设计引入DHT11温湿度传感器。它通过单总线与单片机通信,能够检测当前环境温度和湿度,数值显示在LCD屏幕上。


4 程序设计

系统的软件设计包含初始化、传感器数据采集、逻辑控制与输出显示几个主要部分。

4.1 主程序设计

主程序负责系统初始化、循环检测与逻辑判断,核心流程如下:

  1. 初始化单片机、LCD、HX711、DHT11;
  2. 实时检测当前时间;
  3. 比较当前时间与预设喂食时间;
  4. 判断剩余食物重量,执行投喂逻辑;
  5. 更新LCD显示信息。

程序框架如下:

c 复制代码
#include <reg52.h>
#include "lcd1602.h"
#include "hx711.h"
#include "dht11.h"

unsigned int feed_time[3][2] = {{8,0},{12,0},{18,0}}; // 喂养时间段
unsigned int feed_weight = 50;  // 每次投喂重量,单位g

void main() {
    LCD_Init();
    HX711_Init();
    DHT11_Init();
    LCD_ShowString(1,1,"Pet Feeder");

    while(1) {
        unsigned int weight = HX711_Read();
        unsigned int temp, humi;
        DHT11_Read(&temp,&humi);

        LCD_ShowString(2,1,"W:");
        LCD_ShowNum(2,3,weight,3);
        LCD_ShowString(2,7,"T:");
        LCD_ShowNum(2,9,temp,2);
        LCD_ShowString(2,12,"H:");
        LCD_ShowNum(2,14,humi,2);

        check_feed_time(weight);
    }
}

4.2 HX711重量检测程序

HX711通过时钟信号控制数据输出,单片机读取其电平状态并进行计算,获得当前食物重量。示例程序如下:

c 复制代码
long HX711_Read(void) {
    long count;
    unsigned char i;
    HX711_DOUT=1;  
    HX711_SCK=0;   
    count=0; 
    while(HX711_DOUT);
    for(i=0;i<24;i++) {
        HX711_SCK=1; 
        count=count<<1;
        HX711_SCK=0; 
        if(HX711_DOUT) count++;
    }
    HX711_SCK=1; 
    count ^= 0x800000;  
    HX711_SCK=0;
    return(count/100);  
}

4.3 DHT11温湿度采集程序

DHT11采用单总线协议,单片机通过时序控制与传感器通信,获取温湿度数据并显示。示例函数如下:

c 复制代码
bit DHT11_Read(unsigned char *temp, unsigned char *humi) {
    // 略去完整时序实现
    *temp = 25; 
    *humi = 60; 
    return 1;
}

4.4 喂食逻辑控制程序

核心逻辑在于时间判断与重量控制:

  • 如果当前时间与设定喂食时间匹配;
  • 且当前重量小于设定重量;
  • 则电机正转投食,重量达到设定值后电机反转停止。
c 复制代码
void check_feed_time(unsigned int current_weight) {
    unsigned char i;
    for(i=0;i<3;i++) {
        if(time_match(feed_time[i][0],feed_time[i][1])) {
            if(current_weight < feed_weight) {
                Motor_Forward();
                while(current_weight < feed_weight) {
                    current_weight = HX711_Read();
                }
                Motor_Backward();
            }
        }
    }
}

4.5 按键设置程序

通过按键输入实现对时间和重量的修改,例如:

  • 增加/减少设定时间;
  • 修改投喂重量;
  • 触发手动喂食。

示例程序:

c 复制代码
void Key_Scan() {
    if(KEY1==0) { feed_weight += 10; }
    if(KEY2==0) { feed_weight -= 10; }
    if(KEY3==0) { Motor_Forward(); } // 手动投食
}

5 总结

本系统基于STC89C52单片机,集成LCD1602显示、HX711重量检测、DHT11温湿度采集、按键输入和电机控制,成功实现了宠物喂食的自动化与智能化。系统具备定时投喂、定量控制和手动喂食等功能,极大地方便了宠物主人日常管理。

同时,该系统结构合理、功能全面,具有一定的推广应用价值。在未来的优化方向中,可以加入无线通信模块实现远程控制,或接入物联网平台实现云端数据监控,从而进一步提升系统的智能化水平。

相关推荐
老邓计算机毕设2 小时前
SSM基于的宠物领养管理系统ugssn(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
宠物·ssm 框架·公益信息化系统
一语雨在生无可恋敲代码~2 小时前
RAG Day06 查询重建
数据库
客官、打尖还是住店3 小时前
STM32简介
stm32·单片机·嵌入式硬件
对着晚风做鬼脸3 小时前
MySQL进阶知识点(八)---- SQL优化
数据库
机器视觉知识推荐、就业指导3 小时前
STM32 外设驱动模块:DHT11温湿度传感器模块
stm32·单片机·嵌入式硬件
nbsaas-boot3 小时前
使用 DuckDB 构建高性能 OLAP 分析平台
java·服务器·数据库
欢喜躲在眉梢里3 小时前
mysql之二进制日志
运维·数据库·mysql·日志·数据·mysql日志
GilgameshJSS3 小时前
STM32H743-ARM例程8-EXTI外部中断
c语言·arm开发·stm32·单片机·嵌入式硬件·学习
lingzhilab3 小时前
零知IDE——STM32F407VET6与GP2Y1014AU的粉尘监测系统实现
stm32·单片机·嵌入式硬件