0


基于STM32的智能宠物自动喂食器设计思路:TCP\HTTP、Node.js技术

一、项目概述

1.1 项目目标

本项目旨在开发一款智能宠物自动喂食器,允许宠物主人通过智能手机远程控制喂食时间和食物分量。系统通过语音播报来吸引宠物进食,确保宠物按时获得所需的营养。这一解决方案特别适合上班族或经常出差的宠物主人,旨在提升宠物喂养的便利性和自动化程度。

1.2 项目用途

  • 定时定量喂食:根据设定的时间和食物分量自动喂食。
  • 远程控制:通过微信小程序实现对喂食器的远程监控和控制。
  • 语音提示:通过语音提醒宠物进食,提高喂食的互动性。

1.3 技术栈关键词

  • 单片机: STM32F103C8T6
  • 显示模块: OLED (SSD1306)
  • 称重传感器: HX711
  • 舵机: MG996R
  • 无线通信模块: ESP8266
  • 移动端开发: 微信小程序
  • 编程语言: C/C++, JavaScript
  • 开发环境: Keil uVision, Arduino IDE

二、系统架构

2.1 系统架构设计

本项目的系统架构由多个功能模块组成,各模块通过主控单元STM32进行协作。整体架构如下:

  • 主控单元: STM32单片机负责整体控制和数据处理。
  • 显示模块: OLED显示器用于实时显示系统状态和设置参数。
  • 称重模块: HX711传感器用于称量食物的重量,确保喂食准确。
  • 舵机控制: MG996R舵机用于控制食物释放机制。
  • 语音播报: 通过声音模块发出语音提示。
  • 无线通信: ESP8266模块用于与微信小程序进行数据通信。
  • 用户界面: 微信小程序提供用户友好的操作界面。

2.2 选择合适的单片机、通信协议及技术栈

  • 单片机: 采用STM32F103C8T6,因其具备丰富的IO接口和强大的处理能力,适合处理多任务。
  • 通信协议:- 串口通信: STM32与ESP8266通过UART进行通信。- HTTP协议: 用于小程序与服务器之间的数据交互。
  • 传感器与模块:- 称重传感器: HX711,精度高且易于接口。- 舵机: MG996R,支持大扭矩和精确控制。

2.3 系统架构图

#mermaid-svg-zq67sLm3U6PexUE3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zq67sLm3U6PexUE3 .error-icon{fill:#552222;}#mermaid-svg-zq67sLm3U6PexUE3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zq67sLm3U6PexUE3 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-zq67sLm3U6PexUE3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zq67sLm3U6PexUE3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zq67sLm3U6PexUE3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zq67sLm3U6PexUE3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zq67sLm3U6PexUE3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zq67sLm3U6PexUE3 .marker.cross{stroke:#333333;}#mermaid-svg-zq67sLm3U6PexUE3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zq67sLm3U6PexUE3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-zq67sLm3U6PexUE3 .cluster-label text{fill:#333;}#mermaid-svg-zq67sLm3U6PexUE3 .cluster-label span{color:#333;}#mermaid-svg-zq67sLm3U6PexUE3 .label text,#mermaid-svg-zq67sLm3U6PexUE3 span{fill:#333;color:#333;}#mermaid-svg-zq67sLm3U6PexUE3 .node rect,#mermaid-svg-zq67sLm3U6PexUE3 .node circle,#mermaid-svg-zq67sLm3U6PexUE3 .node ellipse,#mermaid-svg-zq67sLm3U6PexUE3 .node polygon,#mermaid-svg-zq67sLm3U6PexUE3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-zq67sLm3U6PexUE3 .node .label{text-align:center;}#mermaid-svg-zq67sLm3U6PexUE3 .node.clickable{cursor:pointer;}#mermaid-svg-zq67sLm3U6PexUE3 .arrowheadPath{fill:#333333;}#mermaid-svg-zq67sLm3U6PexUE3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-zq67sLm3U6PexUE3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-zq67sLm3U6PexUE3 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-zq67sLm3U6PexUE3 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-zq67sLm3U6PexUE3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-zq67sLm3U6PexUE3 .cluster text{fill:#333;}#mermaid-svg-zq67sLm3U6PexUE3 .cluster span{color:#333;}#mermaid-svg-zq67sLm3U6PexUE3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-zq67sLm3U6PexUE3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
控制

读取

控制

控制

通信

数据交互

       STM32单片机 
     

       OLED显示模块 
     

       HX711称重模块 
     

       舵机控制模块 
     

       语音播报模块 
     

       ESP8266模块 
     

       微信小程序 
     

三、环境搭建和注意事项

3.1 开发环境搭建

  1. 安装Keil uVision: 用于STM32的固件开发。
  2. 安装Arduino IDE: 用于ESP8266的固件编写和上传。
  3. 安装微信开发者工具: 用于开发和调试微信小程序。
  4. 安装必要库: 在Arduino IDE中安装HX711、Servo和ESP8266相关库。

3.2 注意事项

  • 电源管理: 确保ESP8266和STM32的电源稳定,避免电压波动引起的系统不稳定。
  • 称重模块校准: 在使用HX711进行称重时,需进行校准以确保测量精度。
  • 舵机控制: 确保舵机的转动角度设置合理,避免过度扭转导致损坏。并确保舵机的供电充足,以维持稳定的工作状态。
  • 无线通信稳定性: 在设计电路时,尽量缩短ESP8266的信号线,以降低信号干扰,确保Wi-Fi连接稳定。
  • 调试与测试: 在实际使用前,进行充分的测试,确保各个模块之间协调工作,特别是喂食时间和重量的计算。

四、代码实现过程

4.1 功能模块实现

4.1.1 STM32主控模块

主控模块负责整个系统的协调和控制,包括定时喂食、称重和数据处理。以下是主控模块的代码示例:

#include"stm32f10x.h"#include"OLED.h"#include"HX711.h"#include"Servo.h"#include"Voice.h"#defineFEEDING_INTERVAL3600// 喂食间隔(秒)#defineDESIRED_WEIGHT50.0// 期望喂食重量(克)voidsetup(){// 初始化OLED显示OLED_Init();// 初始化HX711HX711_Init();// 初始化舵机Servo_Init();// 初始化语音模块Voice_Init();}voidloop(){staticuint32_t lastFeedTime =0;uint32_t currentTime =millis();// 检查是否到达喂食时间if((currentTime - lastFeedTime)>= FEEDING_INTERVAL *1000){float foodWeight =HX711_Read();if(foodWeight < DESIRED_WEIGHT){Servo_Open();// 开始喂食delay(2000);// 喂食时间Servo_Close();// 停止喂食}// 语音播报Voice_Play("Time to eat!");// 播放提示音
        lastFeedTime = currentTime;// 更新最后喂食时间}}
4.1.2 称重模块

HX711用于获取食物重量,代码示例如下:

#include"HX711.h"// HX711引脚配置#defineLOADCELL_DOUT_PIN3#defineLOADCELL_SCK_PIN2

HX711 scale;voidHX711_Init(){
    scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
    scale.set_scale(2280.f);// 设定标定值
    scale.tare();// 去皮}floatHX711_Read(){return scale.get_units(10);// 返回平均值}
4.1.3 舵机控制模块

舵机模块控制食物释放,代码示例如下:

#include<Servo.h>

Servo myServo;voidServo_Init(){
    myServo.attach(9);// 舵机连接到数字引脚9
    myServo.write(0);// 初始位置}voidServo_Open(){
    myServo.write(90);// 打开舵机,释放食物}voidServo_Close(){
    myServo.write(0);// 关闭舵机}
4.1.4 语音播报模块

语音模块使用PWM控制喇叭发出提示音,代码示例如下:

#include"Voice.h"voidVoice_Init(){pinMode(8, OUTPUT);// 语音模块连接到数字引脚8}voidVoice_Play(constchar* message){// 假设有一个函数能将消息转换为音调播放tone(8,1000,1000);// 播放1000Hz的音调,持续1秒}
4.1.5 微信小程序

微信小程序用于远程控制喂食器的操作界面,下面是一个基本的示例代码:

// index.jsPage({
  data:{
    feedingTime:'12:00',
    foodAmount:50// 默认喂食量},setFeedingTime:function(e){this.setData({
      feedingTime: e.detail.value
    });},setFoodAmount:function(e){this.setData({
      foodAmount: e.detail.value
    });submitSettings:function(){const that =this;
    wx.request({
      url:'http://<your_server_address>/setFeed',// 替换为你的服务器地址
      method:'POST',
      data:{
        feedingTime: that.data.feedingTime,
        foodAmount: that.data.foodAmount
      },success:function(res){
        wx.showToast({
          title:'设置成功',
          icon:'success'});},fail:function(){
        wx.showToast({
          title:'设置失败',
          icon:'none'});}});}});
4.2 数据交互和控制

在后端,我们需要处理来自微信小程序的请求,并相应地更新STM32的喂食设置。可以使用Node.js或Python的Flask框架来实现后端服务。

// Node.js示例const express =require('express');const bodyParser =require('body-parser');const app =express();const port =3000;

app.use(bodyParser.json());

app.post('/setFeed',(req, res)=>{const{ feedingTime, foodAmount }= req.body;// 这里可以将设置保存到数据库或直接通过串口发送给STM32
  console.log(`设置喂食时间: ${feedingTime}, 食物量: ${foodAmount}`);// 发送给STM32的代码可以在这里实现
  res.send({ status:'success'});});

app.listen(port,()=>{
  console.log(`Server running at http://localhost:${port}`);});

4.3 时序图

#mermaid-svg-zeZs2nktoMqqntl6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zeZs2nktoMqqntl6 .error-icon{fill:#552222;}#mermaid-svg-zeZs2nktoMqqntl6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zeZs2nktoMqqntl6 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-zeZs2nktoMqqntl6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zeZs2nktoMqqntl6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zeZs2nktoMqqntl6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zeZs2nktoMqqntl6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zeZs2nktoMqqntl6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zeZs2nktoMqqntl6 .marker.cross{stroke:#333333;}#mermaid-svg-zeZs2nktoMqqntl6 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zeZs2nktoMqqntl6 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-zeZs2nktoMqqntl6 text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-zeZs2nktoMqqntl6 .actor-line{stroke:grey;}#mermaid-svg-zeZs2nktoMqqntl6 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-zeZs2nktoMqqntl6 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-zeZs2nktoMqqntl6 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-zeZs2nktoMqqntl6 .sequenceNumber{fill:white;}#mermaid-svg-zeZs2nktoMqqntl6 #sequencenumber{fill:#333;}#mermaid-svg-zeZs2nktoMqqntl6 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-zeZs2nktoMqqntl6 .messageText{fill:#333;stroke:#333;}#mermaid-svg-zeZs2nktoMqqntl6 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-zeZs2nktoMqqntl6 .labelText,#mermaid-svg-zeZs2nktoMqqntl6 .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-zeZs2nktoMqqntl6 .loopText,#mermaid-svg-zeZs2nktoMqqntl6 .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-zeZs2nktoMqqntl6 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-zeZs2nktoMqqntl6 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-zeZs2nktoMqqntl6 .noteText,#mermaid-svg-zeZs2nktoMqqntl6 .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-zeZs2nktoMqqntl6 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-zeZs2nktoMqqntl6 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-zeZs2nktoMqqntl6 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-zeZs2nktoMqqntl6 .actorPopupMenu{position:absolute;}#mermaid-svg-zeZs2nktoMqqntl6 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-zeZs2nktoMqqntl6 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-zeZs2nktoMqqntl6 .actor-man circle,#mermaid-svg-zeZs2nktoMqqntl6 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-zeZs2nktoMqqntl6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
用户

   微信小程序 
 
   服务器 
 
   STM32单片机 
 
设置喂食时间和食物量 

发送设置请求 

更新喂食设置 

返回设置成功 

返回设置成功 

显示设置成功 

  用户 

  微信小程序 

  服务器 

  STM32单片机 

五、项目总结

5.1 项目主要功能

  • 定时定量喂食: 系统能够根据设定的时间和食物量自动进行喂食,确保宠物得到规律的营养。
  • 远程控制: 用户可以通过微信小程序实现远程监控和设置,方便快捷。
  • 语音提示: 系统会在每次喂食时播放语音提示,吸引宠物前来进食,增强互动性。

5.2 实现过程总结

  • 本项目通过STM32单片机作为核心控制单元,结合HX711称重模块、MG996R舵机、OLED显示模块及ESP8266无线通信模块,构建了一套完整的自动喂食系统。
  • 微信小程序作为用户交互界面,方便用户进行设置及监控,提升了用户体验。
  • 在开发过程中,注意了各模块的协同工作,通过充分的测试确保系统的稳定性和可靠性。

5.3 未来改进方向

  • 数据记录与分析: 可以考虑增加数据记录功能,记录每次喂食的时间和食物量,帮助宠物主人分析宠物的饮食习惯。
  • 多种喂食模式: 增加不同的喂食模式,如按需喂食、定时喂食等,提供更多的灵活性。
  • 移动端优化: 提高微信小程序的用户界面友好性,增强用户体验。
  • 宠物健康监测: 集成健康监测模块,监测宠物体重变化,并根据健康状况调整喂食量。
标签: stm32 宠物 tcp/ip

本文转载自: https://blog.csdn.net/qq_40431685/article/details/143722873
版权归原作者 极客小张 所有, 如有侵权,请联系我们删除。

“基于STM32的智能宠物自动喂食器设计思路:TCP\HTTP、Node.js技术”的评论:

还没有评论