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

(某宝:化作尘电子
某鱼:化作尘my)
哔哩哔哩视频链接: https://www.bilibili.com/video/BV1Ki421i76p/?spm_id_from=333.999.0.0
请添加图片描述

一、功能设计

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

二、元器件选型

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

三、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,"今日暂无任务");
    }
}

六、成品展示

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

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
【RT-Thread作品秀】基于 lvgl 的漏电保护装置校验仪 UI 界面设计作者:赵加文 概述低压漏电引起的各种安全事故已经严重影响到生产生活,威胁到生命财产安全。而解决这一现象的设备就是漏电保护开关,漏电保护开关的漏报率、误报率是很关键的参数,因此有必要对漏电保护开关的性能进行测试。因此,漏电保护装置校验仪是很有必要的。 开发环境硬件:ART-Pi 开发板,正点原子 480*272 4.3寸 RGB 屏幕 RT-Thread版本:4.0.3 开发工具及版本: RT-Thread Studio 2.0.0 :编写 编译 调试 下载代码 STM32CubeMX 6.1.0: codeBlocks 20.03:用于在 PC 机上进行 lvgl 模拟 MCU_Font V2.0: 用于转换中文,然后使得中文能够在 lvgl 中显示 RT-Thread使用情况概述在 UI 设计的整个过程中,使用到 RT-Thread 的部分主要有以下几个方面: 内核部分:动态线程,信号量 组件部分:PIN 设备、I2C 设备、TOUCH 设备框架、LCD 设备框架、finsh 组件 软件包部分:littlevgl2rtt、gt9147 硬件框架软件框架说明系统整体流程图: 软件模块说明整个UI 系统设计所遵循的是 lvgl 图形库的一个回调函数的机制,将各个事件与对应的操作所绑定起来,当滑动滑条时对应的滑条的回调函数就会被触发,那么就会执行滑条回调函数的内容,当滑动点击文本框时,文本框对应的回调函数就会被触发,进而创建键盘的控件,通过键盘输入所需要的数据。 演示效果图片展示: 演示视频: 比赛感悟这次参赛,之前还没有使用过 RT-Thread studio 这个集成开发环境,这次在使用 ART-Pi 的时候全程是使用 RT-Thread studio 这个开发环境,在使用的过程中也碰到了很多问题,有时候明明配置了相关组件,但是保存之后,并没有代码添加到工程里。现在也没有弄明白问题出在哪里,虽然存在着这里问题,但是在使用的过程中,还是非常的方便,整个开发过程就如同搭积木一样方便,与 RTT操作系统贴合的非常的紧密。 除此之外,便是在使用 lvgl 的过程中碰到了很多的问题,现在网上的教程基本是 lvgl v6 版本的教程,关于 lvgl v7 版本的教程很少,而且 v6版本与 V7 版本的 API 相差很大,不能按照 V6 版本来使用 V7 ,在这个过程中摸索了好多,同时也感受到了 lvgl 的魅力,使用在嵌入式系统上是非常不错的选择。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

化作尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值