【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)

2024-03-10 14:59

本文主要是介绍【STM 32】之智能温控器(PCB、MCU源码和APP源码下载),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

智能温控器特点: 能够使办公环境更舒适,空调更节能,自动调节温湿度,这一切后建筑更绿色…
原创声 明,转载请注明出处:http://club.gizwits.com/thread-3332-1-1.html
机智云智能硬件创新大赛:http://club.gizwits.com/thread-2646-1-1.html


作者:夏天罂 粟      看到机智云的这个活动有点晚,犹豫是否要参加一下这个活动。不管是否能完成,我申请几块开发板了,支持一下机智云,同时也熟悉一下机智云的各个开发环节,后面会提出一些建议。周日(8月14日)才把PCB投出,周四回来焊接组装,正在调试。言归正传,我要做的是一个简单实用的产品。智能温控器。
      

产品功能: 控制中央空调风机盘管的通断阀,风机高中低转速。

应用环境: 楼宇中央空调的风机盘管控制,可以运用于写字楼、工厂等环境。

 

应用场景

        (1)夏天天气温度比较高,早上到办公室打开办公室空调,室内温度需要很长时间才能降下来。用户可以通过智能温控器把中央空调提前打开。

        (2)有时候下班时忘记关闭空调,可以通过手机软件关闭,或者在温控器设置定时关闭。

       (3)办公室、厂房空间比较大,温控器采样温度与出口温度不一致,用户可以通过手机软件设定温度和风速进行微调。

       (4)为了防止有人故意把空调温度设置过低或者过高,可以通过手机APP将面板进行锁定。

        (5)结合机智云平台数据分析,物业利用温控器的开通时间进行合理收费,不需要根据办公面积收费。

 

后面会陆续把原理图、PCB、软件代码、APP的UI和APP代码上传上来。

 

项目名称 ] 基于STM32和ESP8266的智能温控器
项目概述 ] 主要用于控制中央空调的风机。
硬件准备 ] 机智云GOkit2开发板,壳体,烙铁和示波器等等。
使用软件环境 ]

                    单片机开发:KEIL5.1

                    UI设计:AI

                   APP设计:Android Studio 2
相关源码 ]

                原理及PCB  ELC_CTRL_MB(v0.1).rar (1.83 MB, 下载次数: 20)

                  MCU源码  code.rar (7.28 MB, 下载次数: 74)

                  APP源码(基于Android Studio2)  smartThermostat.rar (26.71 MB, 下载次数: 134)

                  如果你觉得源码不错,请给我投上一票,谢谢!6号夏天** 智能温控器  投票页面


项目介绍 ]

(1)  视频1操作

(2)  视频2 设备调试

(3)  视频3 设备调试

(4)  做好的APP界面(基于GOkit的APP进行修改,还是用的机智云)

31184118_r6mp.jpeg31184125_cgQg.jpeg




[ 详细介绍 ]
       一、体系结构图
                      二、硬件篇(主要器件、BOM表和原理图)
                     三、硬件篇(焊接完成)
                     四、设备数据点定义篇
                     五、MCU代码篇
                    六、APP界面UI部分
      七、APP程序篇(陆续补充中)




一、 体系结构图

这里所说的温控器是楼宇中央空调的控制面板,是比较常见的面板。传统面板不带通讯模块,及时有也是RS485,用来统一控制,没有实质和用户打交道。

这款智能温控器是在传统温控器基础之上增加了WIFI模块,用户通过APP或微信控制更加人性化,更加简单。

 

31184130_s4kq.png

 

(1)  智能温控器通过WIFI连接到机智云服务器,用户可以通过APP来设置和控制中央空调。

(2)  用户可以远程开启和关闭办公室空调。

(3)  管理员可以查看大楼空调运行情况,可以根据开启时间收费。

(4)  可以和楼宇BA控制系统对接,提升大楼智能化水平。

(5)  可以通过微信将设备控制权分享给同事。

 

目标: 办公环境更舒适,空调更节能,这一切后建筑更绿色…

二、硬件篇(结构图、原理图和主要BOM)

产品内部系统结构图

31184132_937r.png 


1 电源DCDC部分
12V转4.5V。开关电源是12V输出,继电器用的是12V类型的
31184132_AuNZ.png 
2、主芯片
Stm32F103C8T6
31184134_Myut.png 
 

3、晶振


31184136_dVvZ.png 
 

4、Cypress的触摸芯片

31184138_n8Fy.png

 

5、电平转换芯片

31184139_kiaB.png

 

6、段式液晶驱动芯片

31184140_4DWE.png

 

7、蜂鸣器驱动

31184141_hx1J.png

8、ESP8266WIFI模块

31184141_LQ8R.png

WIFI.png (27.21 KB, 下载次数: 0)

下载附件

5 天前 上传

 

主要BOM器件和成本估算

方案总体成本估算  60+元

1 MCU stm32           5元

2 触摸芯片           2元

3 LCD驱动芯片         2元

4 LCD段式液晶         4元

5 NTC热敏电阻          1+元

6 继电器型号 7A?        5+元

7 液晶背光板(含液晶背光) 3元

8 WIFI模块           12元

9开关电源 及 DCDC      12元

10蜂鸣器             1元

11 壳体            10元

三、硬件篇(焊接完成)
      (1)补充一下PCB布板图 反面
31184141_1RNE.png 
(2)PCB正面
31184147_xy9Z.png 

(3)PCB 的3D图
31184152_qrSH.png31184200_TbkN.png 

(4)PCB焊接完成
31184207_DPVJ.jpg 

(5)PCB焊机水平还不错吧。 能看到ST和乐鑫的芯片模块。

31184221_RT5J.jpg 

(6)和电源主板相连接(借用公司的电源板,上面有开关电源、继电器和DCDC)
31184356_FRwP.jpg 

(7)PCB正面,触摸区域,NTC热敏电阻和段式液晶LCD
31184405_PCtt.jpg 

(8)点亮OK了,帅吧。壳体是阿里上的公模
31184407_mYVE.jpg 

IMG_1958.JPG (1.36 MB, 下载次数: 0)

下载附件

4 天前 上传



下片把MCU代码资源上传上来。期待着!!

 

四、设备数据点定义篇
       温控器主要的操作有
      (1)冷水阀、热水阀的通断(四管制),用户理解就是制冷制热
      (2)风速 高中低三速 调整
      (3)温度调节
      (4)WIFI功能模式切换,softAP 和 airlink模式
      (5)故障上报
      (6)面板锁定(手机下发命令)
      (7)低温保护, 低于5摄氏度时启动空调

下图为设备数据点图
31184452_fDNK.jpg31184452_yqTe.jpg

五、MCU代码篇   
  (1)MCU程序整体部分
31184453_sawR.jpg 

(2)MCU程序用户处理部分
31184453_bhff.jpg 

(3)串口事件部分
31184453_4nFZ.jpg 

(4) 处理用户部分代码
void userHandle(void)
{
    uint8_t ret  = 0;
    static uint32_t lcdLastTimer = 0;
    static uint32_t capLastTimer = 0;
    static uint8_t last_cap=0;
    uint8_t cap_id=0;
    static uint16_t cap_time_count=0;
        static uint16_t cap_time_count1=0;          
     if((gizwitsGetTimerCount()-lcdLastTimer) > LCD_TIME_MAX) //timeout = 2S
     {
                                touch_scan();
        
                static uint8 power_on=0;
                ReadADCPoll(&temperature_c);
                if(0x00 == power_on)
                {
                    power_on=1;
                    memset_my(g_showBuff, 0x00, sizeof(g_showBuff));
            //        show_mode_signal();
                    return;
                }
                show_temperature(temperature_c.cur_temp, RT);
                show_mode_signal();
            //    show_time();                      //20160122时间不准,去掉显示时间
                lcd_reload();    
                if(temperature_c.backlight > 0)
                {
                    temperature_c.backlight--;
                    lcd_backlight(temperature_c.backlight);
                }
                
                if(temperature_c.sync_delay > 0) 
                {
                    temperature_c.sync_delay--;
                    if(0x00 == temperature_c.sync_delay)
                    {
                        temperature_c.sync_flag = 1;
                    }
                }

         lcdLastTimer = gizwitsGetTimerCount();
      }


      if((gizwitsGetTimerCount()-capLastTimer) > CAP_SCAN_PERIOD) //timeout = 2S
      {
                  auto_rev_opt(&temperature_c);
                  led_buzzer_ctrl(0,0);        
          cap_id=GET_TOUCH_NUMBER();
          if (last_cap!=cap_id)
          {
              last_cap =cap_id;
          }
          else
          {
              if (0!=cap_id)
              {
                cap_pad[cap_id- 1].touch = 1; //for relay ctrl
                led_buzzer_ctrl(logicch2phych[cap_id-1],1);
                led_buzzer_ctrl(5,1);
              }
          }
          if (cap_id == 1) 
          {
              cap_time_count++;
              if (cap_time_count > 5000 / CAP_SCAN_PERIOD) 
              {
                  gizwitsSetMode(SoftAp_Mode);
                  cap_time_count = 0;
                  lcd_init();
              }
          } else 
          {
              cap_time_count = 0;
          }

          if (cap_id == 4) 
          {
              cap_time_count1++;
              if (cap_time_count1 > 5000 / CAP_SCAN_PERIOD) 
              {
                  gizwitsSetMode(AirLink_Mode);
                  cap_time_count1 = 0;
                  lcd_init();
              }
          } else 
          {
              cap_time_count1 = 0;
          }
                  capLastTimer = gizwitsGetTimerCount();
      }
                        
}

(5)功能为触摸按键检测 、温度检测和 LCD刷新代码部分


void smart_frame(uint8_t cmd[],uint8_t buff[])
{
    uint8_t data[5],state=0;
        if ((cmd[0]!=9)&&(cmd[0]!=6)) return ;
    if (cmd[1]!=3) return ;
        if (cmd[3]!=0) return ;
        if (cmd[4]!=0) return ;
        IWDG->KR=0xaaaa;
    smart_frame_buff *wifi_data = (smart_frame_buff *)buff;
    if (wifi_data->action==0x02)
    {
        //read;
       send_state_frame();
        //state|=((temperature_c.temp_param.mode<<2)&0x12); 
    }
    if (wifi_data->action==0x01) 
    {
        if (wifi_data->attrr_flags&0x01) 
        {
           temperature_c.temp_param.on_off=(((wifi_data->attrr_value_L & 0x01)!=0 )?1:0);
        }
        if (wifi_data->attrr_flags&0x02)
        {
            temperature_c.temp_param.lock=(((wifi_data->attrr_value_L&0x02)!=0)?1:0);
        }
        if (wifi_data->attrr_flags&0x04) 
        {
            temperature_c.temp_param.mode=((wifi_data->attrr_value_L&0x0c)>>2);
        }
        if (wifi_data->attrr_flags&0x08)
        {
            temperature_c.temp_param.speed=((wifi_data->attrr_value_L&0x30)>>4);
        }
        if (wifi_data->attrr_flags&0x16)
        {
            temperature_c.temp_param.limit_t=BIN2BCD(wifi_data->attrr_value_H);
        }
        //write
                led_buzzer_ctrl(5,1);
                temperature_c.backlight = 60;
        ctrl_reply();
    }
}


详细代码请查阅本主题帖代码附件,谢谢!

 

 

【试用活动】Gokit 2.X、Gokit 3.X 免费试用申请   http://club.gizwits.com/thread-2610-1-1.html 

http://club.gizwits.com/thread-2610-1-1.html​​​​​​​ 

 

转载于:https://my.oschina.net/u/2320846/blog/738429

这篇关于【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。