查看: 3499|回复: 1

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

[复制链接]
  • TA的每日心情
    慵懒
    2016-10-24 09:55
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-11-28 16:09:24 | 显示全部楼层 |阅读模式
    分享到:
    智能温控器特点: 能够使办公环境更舒适,空调更节能,自动调节温湿度,这一切后建筑更绿色…
    原创声 明,转载请注明出处: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代码上传上来。

    [ 项目名称 ] 基于STM32ESP8266的智能温控器
    [
    项目概述 ] 主要用于控制中央空调的风机。
    [
    硬件准备 ] 机智云GOkit2开发板,壳体,烙铁和示波器等等。
    [
    使用软件环境
    ]
                        单片机开发:KEIL5.1
                        UI设计:AI
                       APP设计:Android Studio 2
    [ 相关源码 ] 回帖可见相关源码:原理及PCB、MCU源码、APP源码(基于Android Studio2)
    本帖隐藏的内容
                    原理及PCB ELC_CTRL_MB(v0.1).rar (1.83 MB, 下载次数: 210)
                      MCU源码 code.rar (7.28 MB, 下载次数: 628)
                      APP源码(基于Android Studio2) smartThermostat.rar (26.71 MB, 下载次数: 1655)
    Gokit2.rar (12.7 MB, 下载次数: 602)



    如果您需要Gokit APP for Android  Studio源码,请投我一票,6号夏天** 智能温控器    我将发送给你。谢谢! 投票页面   

    [ 项目介绍 ]
    (1)  视频1操作

    (2)  视频2 设备调试

    (3)  视频3 设备调试

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



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




    一、 体系结构图
    这里所说的温控器是楼宇中央空调的控制面板,是比较常见的面板。传统面板不带通讯模块,及时有也是RS485,用来统一控制,没有实质和用户打交道。
    这款智能温控器是在传统温控器基础之上增加了WIFI模块,用户通过APP或微信控制更加人性化,更加简单。


    (1)  智能温控器通过WIFI连接到机智云服务器,用户可以通过APP来设置和控制中央空调。
    (2)  用户可以远程开启和关闭办公室空调。
    (3)  管理员可以查看大楼空调运行情况,可以根据开启时间收费。
    (4)  可以和楼宇BA控制系统对接,提升大楼智能化水平。
    (5)  可以通过微信将设备控制权分享给同事。

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

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

    产品内部系统结构图




    1 电源DCDC部分
    12V转4.5V。开关电源是12V输出,继电器用的是12V类型的

    2、主芯片
    Stm32F103C8T6


    3、晶振



    4、Cypress的触摸芯片

    5、电平转换芯片

    6、段式液晶驱动芯片

    7、蜂鸣器驱动
    8、ESP8266WIFI模块

    主要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布板图 反面

    (2)PCB正面


    (3)PCB 的3D图


    (4)PCB焊接完成


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



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


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


    (8)点亮OK了,帅吧。壳体是阿里上的公模
    [size=0.83em]IMG_1958.JPG (1.36 MB, 下载次数: 0)
    下载附件
    [color=rgb(153, 153, 153) !important]4 天前 上传





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

    下图为设备数据点图
    五、MCU代码篇   
      (1)MCU程序整体部分


    (2)MCU程序用户处理部分


    (3)串口事件部分


    (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();
        }
    }


    详细代码请查阅本主题帖代码附件,谢谢!
    六、APP界面UI部分

    (1)登陆界面,取名智能温控器。 还有一个小绿叶,


          


    (2)控制界面

    回复

    使用道具 举报

  • TA的每日心情

    2017-12-13 09:01
  • 签到天数: 152 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-11-28 20:31:27 | 显示全部楼层
    顶,顶,,
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 06:50 , Processed in 0.125743 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.