基于stm32F4的智能宠物喂食器的设计:LVGL界面、定时喂食喂水通风

2023-11-06 09:45

本文主要是介绍基于stm32F4的智能宠物喂食器的设计:LVGL界面、定时喂食喂水通风,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

宠物喂食器

  • 一、功能设计
  • 二、元器件选型
  • 三、UI设计
  • 四、原理图设计
  • 五、源代码设计
  • 六、成品展示

实物链接:https://m.tb.cn/h.5iCUX6H?tk=PL65WXCEipQ CZ3457
在这里插入图片描述

一、功能设计

1、设计一个触摸屏作为人机交互
2、通过触摸屏设置时间定时喂食喂水通风
3、获取当前水槽的水位并显示
4、获取环境温湿度并显示

二、元器件选型

1、触摸屏采用2.8寸电阻触摸屏
2、单片机采用STM32F407ZGT6
3、喂水使用直流水泵
4、喂食使用舵机
5、通风使用风扇
6、控制开关使用继电器
7、温湿度获取使用DHT11
8、水位检测使用水位传感器

三、UI设计

1、UI使用LVGL
2、UI设计环境使用SquareLine Studio
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
3、生成代码导入到vsCode进行仿真运行,编译比较快
在这里插入图片描述

4、调试UI界面比较满意后导入UI代码到keil5下载到单片机运行

在这里插入图片描述

四、原理图设计

1、STM32F407ZGT6最小系统设计
在这里插入图片描述

在这里插入图片描述

2、继电器控制电路设计

3、水泵和舵机电路设计

五、源代码设计

1、移植正点原子LVGL最小工程
在这里插入图片描述

2、导入生成的UI代码

在这里插入图片描述

3、编写IO控制程序,舵机控制程序,系统时间、定时喂食喂水程序、事件记录程序

void scan_timeout(void)
{int32_t remain_time[SCAN_TIME_NUM];static int32_t p_time = 0x7fffffff;static uint8_t p_num;TimeTypeDef remain_time_min = {0};char sprbuff[64];int32_t n_num = 0;char buff[SCAN_TIME_NUM][8] = {"喂食","喂食","喂水","喂水","通风","通风"};char * pbuf = NULL;get_sys_date_time();//获取系统时间remain_time[0] = time_compare(&System.para.systime,&System.para.feed.time1     );//计算时间差remain_time[1] = time_compare(&System.para.systime,&System.para.feed.time2     );//计算时间差remain_time[2] = time_compare(&System.para.systime,&System.para.feedwater.time1);//计算时间差remain_time[3] = time_compare(&System.para.systime,&System.para.feedwater.time2);//计算时间差remain_time[4] = time_compare(&System.para.systime,&System.para.ventilate.time1);//计算时间差remain_time[5] = time_compare(&System.para.systime,&System.para.ventilate.time2);//计算时间差for(int i=0; i<SCAN_TIME_NUM; i++) //看看时间差哪个短 找到最短那个任务优先执行{if(p_time > remain_time[i]  && remain_time[i] >= 0){remain_time_min.hour = remain_time[i] / 3600;remain_time_min.min = remain_time[i] % 3600 /60;remain_time_min.sec = remain_time[i] % 60;p_time = remain_time[i];pbuf = buff[i];p_num = i;if(p_time == 0)p_time = 0x7fffffff;printf("i = %d, remain_time[i]=%d\r\n",i,remain_time[i]);}if(remain_time[i] < 0){n_num ++;}}if(n_num != SCAN_TIME_NUM)  //今天任务做完了吗? 哦 没有就进去{if(p_time < 30)  //如果距离任务还不到 XXX秒了,就进来运行任务{switch(p_num){case 0:sprintf(sprbuff,"喂食时间到! %02d:%02d", System.para.feed.time1.hour,System.para.feed.time1.min);SW1_ON();break;case 1:sprintf(sprbuff,"喂食时间到! %02d:%02d", System.para.feed.time2.hour,System.para.feed.time2.min);SW1_ON();break;case 2:sprintf(sprbuff,"喂水时间到! %02d:%02d", System.para.feedwater.time1.hour,System.para.feedwater.time1.min);SW2_ON();break;case 3:sprintf(sprbuff,"喂水时间到! %02d:%02d", System.para.feedwater.time2.hour,System.para.feedwater.time2.min);SW2_ON();break;case 4:sprintf(sprbuff,"通风时间到! %02d:%02d", System.para.ventilate.time1.hour,System.para.ventilate.time1.min);SW3_ON();break;case 5:sprintf(sprbuff,"通风时间到! %02d:%02d", System.para.ventilate.time2.hour,System.para.ventilate.time2.min);SW3_ON();break;}lv_label_set_text(ui_MainInfoLabel7,sprbuff);}else if(pbuf != NULL){sprintf(sprbuff,"主线任务 - %s %02d:%02d:%02d",pbuf,remain_time_min.hour,remain_time_min.min,remain_time_min.sec);printf("%s\r\n",sprbuff);lv_label_set_text(ui_MainInfoLabel7,sprbuff);switch_all_off();}}else{lv_label_set_text(ui_MainInfoLabel7,"今日暂无任务");}
}

六、成品展示

**加粗样式**
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于基于stm32F4的智能宠物喂食器的设计:LVGL界面、定时喂食喂水通风的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/355869

相关文章

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

在C#中调用Windows防火墙界面的常见方式

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家... 目录引言1. 直接启动防火墙界面(1) 打开基本防火墙设置(firewall.cpl)(2) 打开高

SpringBoot中使用定时任务schedule详解

《SpringBoot中使用定时任务schedule详解》文章介绍了如何在Spring应用中使用@EnableScheduling注解启用定时任务,并创建一个配置类来定义定时任务的执行,文章还详细解释... 目录1、在spring启动类上添加注解@EnableScheduling2、创建定时任务配置类3、执

基于Nacos实现SpringBoot动态定时任务调度

《基于Nacos实现SpringBoot动态定时任务调度》本文主要介绍了在SpringBoot项目中使用SpringScheduling实现定时任务,并通过Nacos动态配置Cron表达式实现任务的动... 目录背景实现动态变更定时机制配置化 cron 表达式Spring schedule 调度规则追踪定时

Rust 智能指针的使用详解

《Rust智能指针的使用详解》Rust智能指针是内存管理核心工具,本文就来详细的介绍一下Rust智能指针(Box、Rc、RefCell、Arc、Mutex、RwLock、Weak)的原理与使用场景,... 目录一、www.chinasem.cnRust 智能指针详解1、Box<T>:堆内存分配2、Rc<T>:

Spring定时任务之fixedRateString的实现示例

《Spring定时任务之fixedRateString的实现示例》本文主要介绍了Spring定时任务之fixedRateString的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录从毫秒到 Duration:为何要改变?核心:Java.time.Duration.parse

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3