|
2015瑞萨电子设计大赛作品
项目名称: |
IOT设计之室内气体烟尘网络监测及换气系统 |
项目实现的功能说明: |
本系统以室内换气为主线,通过本地MCU与服务器通信(串口转wifi或转以太网),将本地数据上传,并可通过终端设备访问 |
项目进展状态: |
完成 |
软硬件设计思路: |
以瑞萨开发板为主,采用传感器MQ135进行气体烟尘监测,考虑到经济实力,换气扇用家用风扇代替,根据流体力学可知风扇背部能够抽气,试过可行,风扇的启停可以用继电方式控制,网络编程采用VS2012的MFC编程,单片机程序中采用滞回判断法来进行继电控制,如果时间允许可以将远程控制和安卓app等功能加上 |
原理图: |
- |
源码: |
- |
相关帖子集锦: |
第一篇:刚收到板子,在什么地方跟帖啊,具体地方
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=471593&fromuid=501860
(出处: 电子工程世界-论坛)
第二篇:给仿真器刷指定的固件时,出现can not open virtual uart com driver
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=471601&fromuid=501860
(出处: 电子工程世界-论坛)
第三篇:下载失败求解
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=471604&fromuid=501860
(出处: 电子工程世界-论坛)
第四篇:项目进度1
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=471607&fromuid=501860
(出处: 电子工程世界-论坛)
第五篇:谁有R7F0C809的头文件包啊
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=471700&fromuid=501860
(出处: 电子工程世界-论坛)
第六篇:项目进度2---定时器0通道1间隔定时模式之跑马灯程序
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=472021&fromuid=501860
(出处: 电子工程世界-论坛)
第七篇:为啥定时器0的1通道开了中断,但不进中断函数呢,但中断标志TMIF01会置1
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=472533&fromuid=501860
(出处: 电子工程世界-论坛)
第八篇:谁能告诉我R7F0C809怎么烧写?come on
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=473457&fromuid=501860
(出处: 电子工程世界-论坛)
第九篇:Unable to connect E1
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=473647&fromuid=501860
(出处: 电子工程世界-论坛) |
作品形象代表照片: |
|
作品总结: |
由于前期采购问题,买了块串口转wifi模块,结果调了1个月都没调通,后面有点忙搁置了一段时间,没办法,最后就在从头来过,用串口转以太网方案了,又开始写转换程序,以前是个纯C和汇编出身的,现在开始vc,java,js,php编程的确太难了,迎难而上呗,折腾了许久,初见苗头,要评职称了,没时间搞了,只能暂停一个阶段,后面再搞 |
最后陈述,为自己的作品拉票: |
最后,很感谢EEWorld的信任,以及为我们提供的瑞萨开发板,让我受益匪浅,wugx在这祝EEWorld越办越好;我相信技术是可以服务生活的 |
演示视频: |
- |
本帖最后由 wugx 于 2015-10-30 09:31 编辑
题目:IOT设计之室内气体烟尘网络监测及换气系统
作者:Wugx
日期:2015.10.29 pm
软件平台:CubeSuite+
硬件:瑞萨R7F0C809 Target Board
项目简介:本系统以室内换气为主线,通过本地MCU与服务器通信(串口转wifi或转以太网),将本地数据上传,并可通过终端设备访问(同时可以发一些控制指令)
方案论证:以瑞萨开发板为主,采用传感器MQ135进行气体烟尘监测,考虑到经济实力,换气扇用家用风扇代
替,根据流体力学可知风扇背部能够抽气,试过可行,风扇的启停可以用继电方式控制,网络编程采用VS2012
的MFC编程,手机app采用安卓系统开发。
项目结果:目前只完成了室内气体烟尘网络监测,只能本地换气,不能远程控制,pc和安卓软件还有问题,有待完成
项目感悟:由于前期采购问题,买了块串口转wifi模块,结果调了1个月都没调通,后面有点忙搁置了一段时间,没办法,最后就在从头来过,用串口转以太网方案了,又开始写转换程序,以前是个纯C和汇编出身的,现在开始vc,java,js,php编程的确太难了,迎难而上呗,折腾了许久,初见苗头,要评职称了,没时间搞了,只能暂停一个阶段,后面再搞
程序简介:单片机定时10s采集、并通过串口发送一次室内烟尘浓度,本地服务器收到数据暂存下来,并处于监听状态,网络通信采用TCP/IP协议,一旦有客户端发送套接字,服务器接受后,将数据传送数据,方便起见,整个过程都是本地测试的,客户端端口分配为9996,串口波特
率9600,当浓度高于上限值时,继电器吸合风扇打开。
致谢:最后,很感谢EEWorld的信任,以及为我们提供的瑞萨开发板,wugx在这祝EEWorld越办越好
serial转TCP比较大,有需要的朋友可以留言,给你发邮箱
MCU部分代码:
#include "r_cg_macrodriver.h"
#include "r_cg_userdefine.h"
#include "r_cg_cgc.h"
#include "r_cg_port.h"
#include "r_cg_serial.h"
#include "ad.h"
#include "vr.h"
#include"led.h"
/******************************************************************************
Exported global variables and functions
******************************************************************************/
uint8_t g_Uart0RxBuf; /* uart0 receive buffer */
uint8_t g_Uart0RxErr; /* uart0 receive error status */
MD_STATUS g_Uart0TxEnd; /* uart0 transmission end */
boolean g_Flag1s;
boolean g_Flag10s;
boolean g_Flag10ms;
static const uint8_t message[16] = {"WELCOME EEWORD\r\n"};
uint8_t count[10] = {"0123456789"};
uint16_t temp;
uint8_t table[16]={"C:0000.0000000\r\n"};
void delay_1ms(uint16_t x)
{
uint16_t i,j;
for(i=0;i
{
for(j=0;j<256;j++);
}
}
void main(void)
{
/*initialization programe*/
MD_STATUS status; /* UART Status */
R_Systeminit();
P0 &= 0xc3;
g_Flag1s=0;
/* UART0 receive buffer setting */
//status = R_UART0_Receive(&g_Uart0RxBuf, 1);
/* Start the UART0 Tx/Rx operation */
R_UART0_Start();
TS0 |= 0x02; /* Starts TAU01 */
while ( !(TE0 & 0x02) ); /* Waiting TAU01 works */
/* Main loop */
while (1U)
{
while (TMIF01 == 0)
{
}
TMIF01 = 0; /* Clears interrupt flag bit */
if(g_Flag10ms == 1)
{
TT0 |= 0x02; //close timer01
while(TE0 & 0x02);
g_Flag10ms=0;
temp=AD_In(); //AD sampling
/*data process*/
temp=temp/8;
if(temp>120)
{
delay_1ms(5);
if(temp>120)
{
P0.0=1;
}
}
else if(temp<110)
{
P0.0=0;
}
LED_Display(temp*10);
/*data send to pc COM*/
if(g_Flag1s == 1)
{
g_Flag1s=0;
table[2]=count[temp*10/10000];
table[3]=count[temp*10%10000/1000];
table[4]=count[temp*10%10000%1000/100];
g_Uart0TxEnd = R_UART0_Send(table,16);
while (g_Uart0TxEnd == 0){} //waiting for sent
}
TS0 |= 0x02; //restart timer01
while ( !(TE0 & 0x02) );
}
}
}
MFC--Serial转TCP部分代码:
//********************************************************
// 收串口数据处理
//********************************************************
LRESULT CSerialTcpDlg::OnCommunication(WPARAM ch, LPARAM port)
{
UINT SerialPort = (UINT)port;
int DataLen = (int)ch;
char buf[512];
memset(buf, 0, 512);
for(int i=0; i
{
if(m_arrItem->m_serialPort.m_nPortNr == SerialPort)
{
memcpy(buf, m_arrItem->m_serialPort.m_RXBuff, 512);
//*********************** 发送数据 *******************
if(m_arrItem->m_dataSockInUse) //发送到DataPort
{
m_arrItem->m_sockDateMain.Send(buf, DataLen);
char bufTemp[512];
//写入日志
memset(bufTemp, 0, 512);
sprintf_s(bufTemp, 512, "COM%d => TCP %2d]", m_arrItem->m_serialPort.m_nPortNr, DataLen);
CTime timer_1;
timer_1 = CTime::GetCurrentTime();
CString s=timer_1.Format("[%H:%M:%S");
char bufTemp1[512];
memset(bufTemp1, 0, 512);
sprintf_s(bufTemp1, 512, "%s %s", s, bufTemp);
CString temp = bufTemp1;
if (m_arrItem->m_logFlag)
{
FILE* stream = fopen(m_arrItem->m_strLogFileName, "a+");
fwrite(temp, 1, temp.GetLength(), stream);
fclose(stream);
char buf1[5];
stream = fopen(m_arrItem->m_strLogFileName, "a+");
if (DataLen>16)
{
DataLen = 16;
}
for (int i=0; i
{
BYTE hex;
hex = buf;
sprintf(buf1, " %02X", hex);
fwrite(buf1, 1, 3, stream);
}
fclose(stream);
for(int i=0; i<16-DataLen; i++)
{
stream = fopen(m_arrItem->m_strLogFileName, "a+");
fwrite(" ", 1, 3, stream);
fclose(stream);
}
//处理末尾的字符串
stream = fopen(m_arrItem->m_strLogFileName, "a+");
fwrite(" [", 1, 2, stream);
for (int i=0; i
{
char temp12 = buf;
if (temp12>= '0' && temp12 <= '9')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12>= 'A' && temp12 <='Z')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12>= 'a' && temp12 <= 'z')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == ' ')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == '@')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == '#')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == '$')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == '%')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == '^')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == '&')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == '*')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == '(')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == ')')
{
fwrite(&temp12, 1, 1, stream);
}
else if (temp12 == '=')
{
fwrite(&temp12, 1, 1, stream);
}
else
{
fwrite(".", 1, 1, stream);
}
}
fwrite("]", 1, 1, stream);
fwrite("\r\n", 1, 2, stream);
fclose(stream);
}
}
if(m_arrItem->m_debugSockInUse) //发送到DebugPort
{
char bufTemp[512];
memset(bufTemp, 0, 512);
sprintf_s(bufTemp, 512, "Out—> %s", buf);
m_arrItem->m_sockDebugMain.Send(bufTemp, DataLen+7);
}
if(m_arrItem->m_debugSockInUse || m_arrItem->m_dataSockInUse)
{
m_arrItem->m_iTotalSendDate += DataLen;
}
break;
}
}
return 0;
}
|
赞赏
-
1
查看全部赞赏
-
|