本帖最后由 wugx 于 2016-7-2 13:57 编辑
项目名:智能冷风机
小组:wugx
一、摘要:
该作品是基于由EEworld提供的MicroPython板,利用冷风机设备做的室内温湿度控制系统。
该系统主要功能为本地MCU通过传感器采集环境温湿度来控制冷风机的运行状态,同时控制器将数据蓝牙通信至手机或pad终端本地显示,并且转发至web服务器,保存在数据库里,最后从web页面上显示。
二、方案论证:
(1)硬件方面:
a.方案一:自主开发冷风机控制板和驱动板,这样更方便控制,也能批量生产,实用性强
b.方案二:利于原有硬件,只需另做外部控制板,相当于按键触发,开发时间短,可控性不强
(2)通信方面:
a.方案一:采用wifi通信,直接可将数据传输至web服务器,同时用终端设备也可以远程监控,比较便捷
b.方案二:采用bluetooth(蓝牙)通信,若要与web服务器通信及远程监控,必须本地设有中继设备(例如手机一部),只要手上有空闲的手机或pad,这个费用就较低了,过程比较复杂
(3)软件方面:
a.方案一:移动设备客户端+PC客户端,换个PC就要装软件,太麻烦
b.方案二:移动设备客户端+web页面,较方便,而且适应潮流
最后,结合用户体验度、费用、时间、及学习的深度等方面,这次选择了(1)(2)(3)的方案二
三、原理及细节解析
1、冷风机原理:
拆机后,通过观察内部结构和板子,其冷风功能是通过柱形风机将气流通过水面卷入室内,而加湿功能是通过水泵江水抽至顶部滤网,气流从滤网后进入,被水加湿后从出风口吹出,摆风功能里的风板是通过步进电机来控制的,它们的驱动部分都是独立原价,而且比较简单(暴利),而控制板的输入是按键,不同的按键触发的脉冲同过串入并处的8位移位寄存器编码后,接入单片机的IO后,然后有MCU进行逻辑控制。
2、外部控制板:
根据其原理,只需仿制按键功能即可,MCU外带六路带光耦隔离的继电电路,同时接入DS18b20温度传感器,及串口蓝牙通信模块。
3、android软件设计:
主界面设计,要有数据显示,控制模式,远程监控,以及通信起动及关闭功能,其次应有手动控制界面和远程监视界面
4、通信设计:
MCU端用串口转蓝牙模块和客户端通信,为保证数据可靠传输,android这边蓝牙读数据线程延时1秒,为了防止进程阻塞,向服务器发送数据,只有将界面间切换至webservice对应的线程时才发送数据
四、总结:
整个功能都实现了,但就是方案上说的,这种控制可控性差,必进不是闭环的,有时候需要重启才会正常,但不影响用户体验度。
做完了,感觉和腾讯的微信硬件平台差不多,相关知识大家可以自己在平台上找。
我澄清一下之前的看法,发现python是个很不错脚本语言,爬虫、黑客这些都能用挺全的,好用,恩
最后,感谢eeworld举办的这次活动,不仅让我学习了Python及STM32F4XX,而且巩固物联网相关知识,祝论坛越办越好。
php服务器端代码:
$dbhost="xxxxxx";
$dbuser="xxxx";
$dbpass="xxxxx";
$dbname="wugx";
$con=mysql_connect($dbhost,$dbuser,$dbpass)or die("connect failed");
@mysql_select_db($dbname)or die("db error");
mysql_query("set names 'UTF-8'");
$tmp=str_replace(" ","",$_POST['tmp']);
$rh=str_replace(" ","",$_POST['rh']);
//print_r($_POST);
//var_dump($_POST);
if($tmp!=null&&$rh!=null){
$sql = "insert into users (tmp,rh) values('$tmp','$rh')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
}else{
}
$sqlrt="select tmp from users order by id desc limit 1,1";//"select tmp from users where id=200";
$rsrt=mysql_query($sqlrt,$con);
if($rsrt){
$rowrt=mysql_fetch_array($rsrt);
}
if(empty($rowrt))$tmp="暂无";
else $tmp = substr($rowrt[tmp],0,5);
$sqlrr="select rh from users order by id desc limit 1";//"select rh from users where id=200";
$rsrr=mysql_query($sqlrr,$con);
if($rsrr){
$rowrr=mysql_fetch_array($rsrr);
}
if(empty($rowrr))$rh="暂无";
else $rh = substr($rowrr[rh],0,5);
//print_r($rowrt);
?>
php服务器端数据显示
textarea{width:100px;height:60px; solid # CCC; font-size:30px; color:#000;}
p{font-size:30px; color:#000;}
input{width:150px;height:40px; solid #CCC; font-size:30px; color:#000;background-color:#54FF9F;text-align:center;}
html,body,div{
margin:0;
padding:0;
height:100%;
position:relative;
}
.wrap{
width:310px;
height:480px;
margin:10px;
border:1px solid #000;
}
.all-middle2{
width:310px;
height:480px;
background-color:#69F;
}