【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进行修改,还是用的机智云)

【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第1张图片【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第2张图片




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




一、 体系结构图

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

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

 

【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第3张图片

 

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

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

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

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

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

 

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

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

产品内部系统结构图

【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第4张图片 


1 电源DCDC部分
12V转4.5V。开关电源是12V输出,继电器用的是12V类型的
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第5张图片 
2、主芯片
Stm32F103C8T6
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第6张图片 
 

3、晶振


【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第7张图片 
 

4、Cypress的触摸芯片

【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第8张图片

 

5、电平转换芯片

【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第9张图片

 

6、段式液晶驱动芯片

【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第10张图片

 

7、蜂鸣器驱动

【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第11张图片

8、ESP8266WIFI模块

【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第12张图片

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布板图 反面
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第13张图片 
(2)PCB正面
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第14张图片 

(3)PCB 的3D图
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第15张图片【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第16张图片 

(4)PCB焊接完成
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第17张图片 

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

【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第18张图片 

(6)和电源主板相连接(借用公司的电源板,上面有开关电源、继电器和DCDC)
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第19张图片 

(7)PCB正面,触摸区域,NTC热敏电阻和段式液晶LCD
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第20张图片 

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

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

下载附件

4 天前 上传



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

 

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

下图为设备数据点图
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第21张图片【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第22张图片

五、MCU代码篇   
  (1)MCU程序整体部分
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第23张图片 

(2)MCU程序用户处理部分
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第24张图片 

(3)串口事件部分
【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)_第25张图片 

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


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

你可能感兴趣的:(【STM 32】之智能温控器(PCB、MCU源码和APP源码下载))