智能温控器特点: 能够使办公环境更舒适,空调更节能,自动调节温湿度,这一切后建筑更绿色…
作者:夏天罂 粟 看到机智云的这个活动有点晚,犹豫是否要参加一下这个活动。不管是否能完成,我申请几块开发板了,支持一下机智云,同时也熟悉一下机智云的各个开发环节,后面会提出一些建议。周日(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进行修改,还是用的机智云)
[ 详细介绍 ]
一、体系结构图
二、硬件篇(主要器件、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模块 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布板图 反面
(2)PCB正面
(3)PCB 的3D图
(4)PCB焊接完成
(5)PCB焊机水平还不错吧。 能看到ST和乐鑫的芯片模块。
(6)和电源主板相连接(借用公司的电源板,上面有开关电源、继电器和DCDC)
(7)PCB正面,触摸区域,NTC热敏电阻和段式液晶LCD
(8)点亮OK了,帅吧。壳体是阿里上的公模
IMG_1958.JPG (1.36 MB, 下载次数: 0) 下载附件 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();
}
}
详细代码请查阅本主题帖代码附件,谢谢!
|