当前位置:文档之家› zigbee学习心得——实例分析(温湿度采集及控制)

zigbee学习心得——实例分析(温湿度采集及控制)

zigbee学习心得——实例分析(温湿度采集及控制)
zigbee学习心得——实例分析(温湿度采集及控制)

网易

新闻微博邮箱相册阅读有道摄影爱拍优惠券云笔记闪电邮手机邮印像派网易识字

更多

博客

手机博客博客搬家博客VIP服务

LiveWriter写博word写博邮件写博短信写博

群博客博客油菜地博客话题博客热点博客圈子找朋友

发现

小组

风格

网易真人搭配社区iStyle

网易真人搭配社区iStyle

网易真人搭配社区iStyle

玩摄影,玩LOFTER

玩胶片,玩LOFTER

玩绘画,玩LOFTER

创建博客登录

加关注

错误!超链接引用无效。 | 错误!超链接引用无效。

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》 | 错误!超链接引用无效。

豪醒的博客

不只是一个人的旅程

导航

首页

日志

相册

博友

关于我

日志

zigbee学习心得2——协议栈任务

Fork - VFork 一张图说明区别

zigbee学习心得——实例分析(温湿度采集及控制)

2012-08-05 16:58:58| 分类:zigbee | 标签:cc2430 zigbee 温湿度cc2430 |字号大中小订阅

就像这样,先添加于温湿度传感器相关的.c和.h文件,还有串口相关的,c和.h也就是写好可以给另外的文件调用的函数了。

我这里面只用到了voidwenshi_receive( void );一个函数,然后将函数和其中所用到的两个变量TH,RH,分别代表温度和湿度设为全局变量。

先打开SimpleSensor.c这个小工程,用官方程序调试的时候可以看出,也就是不断地发数据到协调器,自然就要找到与发数据相关的函数:

那其实发送之前要先与协调器绑定吧,好比打电话也要先拨通电话吧。

找到与绑定相关的函数:

void zb_BindConfirm( uint16 commandId,uint8 status )

{

if( ( status == ZB_SUCCESS ) && ( myAppState == APP_START ) )

{

myAppState = APP_BOUND;

//Start reporting sensor values

myApp_StartReporting();

}

else

{

// Continue to discover a collector

osal_start_timerEx( sapi_TaskID, MY_FIND_COLLECTOR_EVT, myBindRetryDelay);

}

直接点,若绑定成功,就会返回一个ZB_SUCCESS的状态,此时方会调用myApp_StartReporting();函数,否则就继续搜索节点。

对于myApp_StartReporting();:

void myApp_StartReporting( void )

{

osal_start_timerEx( sapi_TaskID, MY_REPORT_TEMP_EVT, myTempReportPeriod);

osal_start_timerEx( sapi_TaskID, MY_REPORT_BATT_EVT,myBatteryCheckPeriod );

HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );

}

直观地从函数看上去也就相当于添加一个周期性的任务;

从上一篇文章讲过这个TaskID的问题,也就添加一个任务嘛,回到整个工程的主函数,看看怎么回事,这里面就不详细地列出来了,有需要的读者可以一探究竟。过程是这样的:

主函数:ZSEG intmain( void )—— /*系统初始化*/osal_init_system();——osalInitTasks(); /*任务初始化*/

——SAPI_Init( taskID ); /*用户自定义任务函数,他的任务ID为taskID*/ ?——

/*其中的一个等式*/s api_TaskID = task_id;

也就是说可以通过osal_start_timerEx添加一个周期性的任务,其周期为XXXPeriod,比如片内温度采集:myTempReportPeriod,电压测量myBatteryCheckPeriod,那XXXEVT,也就相当于一个任务Task里面一个独立的事件Event了。

那么我们也可以这么添加自己的事件:

再看看XXXEVT 和XXXPeriod 的定义:

// Application osal event identifiers

// Bit mask of events ( from 0x0000 to0x00FF )

#define MY_START_EVT 0x0001

#define MY_REPORT_TEMP_EVT 0x0002

#define MY_REPORT_BATT_EVT 0x0004

#define MY_FIND_COLLECTOR_EVT 0x0008

自己跟着做:

#define MY_REPORT_WENDU_EVT 0x0010

#define MY_REPORT_SHIDU_EVT 0x0020

这里说一下为什么要这么做

因为等下调用任务处理函数zb_HandleOsalEvent();的时候判断语句是这种形式的:

if( event & MY_REPORT_TEMP_EVT )

按位与,所以..

顺便说一下,我最初做这个东西看漏了这条语句,传输过程会突然断开连接,这个bug搞了我十多天。。

周期时间:(对照范例)

static uint16 myStartRetryDelay =10000; // milliseconds

static uint16 myTempReportPeriod = 5000; // milliseconds

添加:

static uint16 myWENDUReportPeriod =6000; // milliseconds

static uint16 mySHIDUReportPeriod =7000; // milliseconds

这样子(这里的周期是毫秒级的,比如5000代表的就是5秒传一次MCU的温度)

再回到刚才的myApp_StartReporting(void )添加:

osal_start_timerEx( sapi_TaskID, MY_WENDU_BATT_EVT, myWENDUReportPeriod);

osal_start_timerEx( sapi_TaskID, MY_SHIDU_BATT_EVT, mySHIDUReportPeriod);

这样就添加好了自己读取温湿度信息的任务了,然后具体怎么实现这两个任务:接下来:而Sensor.c里面有一个Handle函数用于处理时间的:见介绍和实体:

/***************************************************************************** *@fn zb_HandleOsalEvent

*

*@brief The zb_HandleOsalEventfunction is called by the operating

* system when a task event is set

*

*@param event - Bitmask containingthe events that have been set

*

*@return none

*/

void zb_HandleOsalEvent( uint16 event )

{

uint8 pData[2];//用于存放数据和分类信息的

if( event & MY_START_EVT )

{

zb_StartRequest();

}

if( event & MY_REPORT_TEMP_EVT )

//这不就是从上面介绍的osal_start_timerEx();函数set的事件么?!

{

// Read and report temperature value

pData[0] =TEMP_REPORT;

//类型存放在pData[0]里面

pData[1] = myApp_ReadTemperature();

//读出来的温度值存到pData[1],myApp_ReadTemperature();是读取温度值的函数

zb_SendDataRequest(0xFFFE, SENSOR_REPORT_CMD_ID, 2, pData, 0, AF_ACK_REQUEST, 0 );

//发送出去

osal_start_timerEx(sapi_TaskID, MY_REPORT_TEMP_EVT, myTempReportPeriod );

//再设这样一个时间,无限循环

}

------------------------------------------------------------------------------------------------------------------------------

这里再说一下发送的过程,首先从刚才osal_start_timerEx();设一个发送温度值的系统事件,在一个myTempReportPeriod的周期之后,通过zb_HandleOsalEvent的调用,再通过if ( event & MY_REPORT_TEMP_EVT )的条件判断执行温度值发送的事件pData[0]用于告诉协调器是温度报告,pData[1]用于告诉协调器节点报告出来的温度值是多少,再通过zb_SendDataRequest函数发送出去,而发送的形式是通过0xFFFE,绑定的形式发送(这个下面有讲)字长为2个unsigned char类型,发送完毕后再继续调用osal_start_timerEx添加一个相同的温度采集系统事件,不断地重复这个过程。

------------------------------------------------------------------------------------------------------------------------------

if( event & MY_REPORT_BATT_EVT ) //道理和上面一样

{

// Read battery value

// If battery level low, report battery value

pData[0] = BATTERY_REPORT;

pData[1] = myApp_ReadBattery();

zb_SendDataRequest( 0xFFFE, SENSOR_REPORT_CMD_ID, 2, pData, 0,AF_ACK_REQUEST, 0 );

osal_start_timerEx( sapi_TaskID, MY_REPORT_BATT_EVT,myBatteryCheckPeriod );

}

if( event & MY_FIND_COLLECTOR_EVT )

{

// Find and bind to a collector device

zb_BindDevice( TRUE, SENSOR_REPORT_CMD_ID, (uint8 *)NULL );

}

}

先添加自己刚设的事件:

if ( event & MY_REPORT_WENDU_EVT )

{

// Read and report temperature value

pData[0] =WENDU_REPORT;

//相当于添加一个可以让协调器识别你发过去的是什么的标签

receive();

//调用wenshi.c里面的全局函数receive(); wenshi.c是我自己写的一个C

pData[1] = TH;

//代表温度

zb_SendDataRequest( 0xFFFE, SENSOR_REPORT_CMD_ID, 2, pData, 0,AF_ACK_REQUEST, 0 );

osal_start_timerEx(sapi_TaskID, MY_REPORT_WENDU_EVT, myWENDUReportPeriod );

//回调

}

这样子

额,pData[0] = WENDU_REPORT;,既然说这个是要让协调器识别的,那么协调器(SimpleCollectorEB.c)里面也要有相同的参数。

#define TEMP_REPORT 0x01

#define BATTERY_REPORT 0x02

#define WENDU_REPORT 0x04

#define SHIDU_REPORT 0x08

再分析回原来的事件处理部分:

都有调用zb_SendDataRequest();函数

zb_SendDataRequest ( uint16 destination,uint16 commandId, uint8 len,uint8 *pData, uint8 handle, uint8 txOptions, uint8radius )

其中

status = AF_DataRequest(&dstAddr,&sapi_epDesc, commandId, len, pData, &handle, txOptions, radius);

最终调用AF_DataRequest函数;

afStatus_t AF_DataRequest( afAddrType_t*dstAddr, endPointDesc_t *srcEP, uint16 cID, uint16 len, uint8 *buf, uint8*transID, uint8 options, uint8 radius )

/*********************************************************************

*@fn AF_DataRequest

*

*@brief Common functionality forinvoking APSDE_DataReq() for both

* SendMulti and MSG-Send.

*

*input parameters

*

*@param *dstAddr - Full ZB destinationaddress: Nwk Addr + End Point.

//0xFFFF -这个一个对全网络中设备进行广播的广播地址

//0xFFFD -如果在命令中将目标地址设为这个地址的话那么只对打开了接收的设备进行广播

//0xFFFC -广播到协调器和路由器

//0xFFFE -如果目的地址为这个地址的话,那么应用层将不指定目标设备,而是通过协议栈读取绑定表来获得相应目标设备的短地址

------------------------------------------------------------------------------------------------------------------------------

我们这里协调器发送用的是0xFFFF,而节点发送用的是0xFFFE,这是因为我做的这个项目是多对一的网络结构,因此作为协调器的角色是通过广播式发送的;而用0xFFFE,看上面介绍是:(应用层将不指定目标设备,而是通过协议栈读取绑定表来获得相应目标设备的短地址)也就是,如果协调器之前已经跟节点绑定了,也就可以很顺利地直接发送,也就是这个意思,当然,你也可以用广播式发送,但你要处理好节点与协调器对广播信息的处理问题

------------------------------------------------------------------------------------------------------------------------------

*@param *srcEP - Origination (i.e.respond to or ack to) End Point Descr.

//端点描述符指针,就好像你发短信,但别人手机不知道你发的东西是短信还是打电话,因此需要用这类型的信息

用以区分

*@param cID - A valid cluster ID asspecified by the Profile.

*@param len - Number of bytes of datapointed to by next param.

//长度

*@param *buf - A pointer to the databytes to send.

//要发的数据

*@param *transID - A pointer to a bytewhich can be modified and which will

* be used as the transactionsequence number of the msg.

*@param options - Valid bit mask of Txoptions.

*@param radius - Normally set toAF_DEFAULT_RADIUS.

*

*output parameters

*

*@param *transID - Incremented by one ifthe return value is success.

*

*@return afStatus_t - See previousdefinition of afStatus_... types.

就这么个道理,就这么发送数据的了。。。

------------------------------------------------------------------------------------------------------------------------------

这里说一下cID的概念,cID - A valid cluster ID asspecified by the Profile.,网上的人叫“簇”,看上去好像就是一捆东西,有一种物以类聚的意思,上面分析可知发送数据函数zb_SendDataRequest ();最近调用AF_DataRequest(),在AF_DataRequest(),簇——cID被命名为commandId,被定义为命令ID,顾名思义,也就是一类命令的集合。将不同命令分入不同的cID中,这显得zigbee协议栈的控制的高效,又保证了数据的安全性和通信可靠性。

举个例子,如果你用zigbee一方面要收集温湿度信息,一方面要控制灯光、电扇,还有控制温湿度信息的时间间隔之类,这样子你就需要将这些任务分类,这就是cID的意义

------------------------------------------------------------------------------------------------------------------------------

然后再看接收数据。

Workspace那里打开SimpleCollector,可以找到介绍函数的原型:(底层不分析了,直接看应用层了)

void zb_ReceiveDataIndication( uint16source, uint16 command, uint16 len, uint8 *pData )

{

uint8 buf[32];

//用于存放串口发送数据

uint8 *pBuf;

//指向buf[ ]的

uint8 tmpLen;

//长度

uint8 sensorReading;

//传感器读到的东西,也就是从节点传回来的东西

if(command == SENSOR_REPORT_CMD_ID) {

// Received report from a sensor …………………………………………………………………………………………………………………….

sensorReading = pData[1];

// If tool available, write to serial port

tmpLen =(uint8)osal_strlen( (char*)strDevice );

//CONST uint8strDevice[] = "Device:0x";

pBuf =osal_memcpy( buf, strDevice, tmpLen );

//将strDevice的内容复制到buf里面,返回指向buf的指针赋给pBuf

_ltoa( source,pBuf, 16 );

//这个函数用于将long型转化为asii码,source记录的是节点的段地址,long型

pBuf += 4;

//long型4个字节

*pBuf++ = ' ';

if ( pData[0] == BATTERY_REPORT )

{

tmpLen = (uint8)osal_strlen( (char*)strBattery );

pBuf = osal_memcpy( pBuf, strBattery, tmpLen );

//pBuf指向复制了strBattery内容的pBuf指针,也就相当于复制内容到pBuf指针指向的内存空间

*pBuf++ = (sensorReading / 10 ) + '0'; // convent msb to ascii

*pBuf++ = '.'; // decimal point ( battery reading is in units of 0.1 V

*pBuf++ = (sensorReading % 10 ) + '0'; // convert lsb to ascii

*pBuf++ = ' ';

*pBuf++ = 'V';

}

那按照协议栈写的添加:

else if( pData[0] == WENDU_REPORT )

{

tmpLen = (uint8)osal_strlen((char*)strWENDU );

pBuf = osal_memcpy( pBuf, strWENDU,tmpLen );

*pBuf++ = sensorReading/10+0x30;

*pBuf++ = sensorReading%10+0x30;

//转askii码

*pBuf++ = ' ';

*pBuf++ = 'C';

}

最后官方协议栈是通过调用

#if defined(MT_TASK )

debug_str( (uint8 *)buf );

#endif

也就是debug_str();函数发送到串口的,测试过发现有乱码,然后我有一篇文章是将乱码的原因和如何解决这种乱码现象的,大家可以留意一下。

做完了这一part以后我们来试试做控制部分的。要知道只能看不能操作是很无聊的!呵呵

首先控制部分都是与串口挂钩的了。串口怎么写额…这个得看回我写的第一篇文章里面有介绍的一些小实验,其中就是涉及到串口部分的,现在想来是非常有用的。

//Uart0 初始化

voidUart0Init(uint8 StopBits,uint8 Parity)

{

PERCFG &= ~0x01;

//选择UART0可选位置1,TXD-P0_3 RXD-P0_2

P0SEL |= 0X0C;

//设置02 03为外设IO

U0CSR = 0XC0;

// 1100 0000 UART模式(异步)能接收使能

U0GCR = 11;

U0BAUD = 216;

// 波特率为115200bps

U0UCR |= StopBits|Parity;

}

//Uart0 接收数据

unsigned charUart0Receive(void)

{

unsigned char data;

uint8 status;

if(URX0IF == TRUE)

{

data = U0DBUF;

URX0IF = FALSE;

// Restoring old state

U0CSR = status;

} //提取接收到的数据

return data;

}

就这么了。

先理清一下思路吧!

PC——协调器——处理任务

那么协调器怎么接受来之PC的信息呢,什么时候接收呢,这个其实跟sensor路由器一样道理,从绑定开始调用接受字符函数Uart0Receive();,但是我们不能直接拿那个函数吖,这只是一个最直接的函数,我们还需要一个函数去分析PC发过来的是什么吧。

voidmy_Uart(void)

{

uint8 c=0;

c = Uart0Receive();

}

好,先就这么写着。C for control.

找到void zb_HandleOsalEvent( uint16 event )

添加:

{

if ( event & MY_UART_EVT )

{

my_Uart();

osal_start_timerEx( sapi_TaskID,MY_UART_EVT, myUartPeriod );

}

}

跟路由器一个道理,添加系统时间,不断地执行读取串口数据的命令,记得帮MY_UART_EVT define一个16进制的代码。

然后写处理命令了:

voidmy_Uart(void)

{

uint8 c=0;

uint8 pData[1];

c = Uart0Receive();

asm("NOP");

switch(c)

{

case 'A': //开始采集

HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );

pData[0] = Collect_start;

zb_SendDataRequest( 0xFFFF,SENSOR_CONTROL_CMD_ID, 1,

pData, 0, 0, 0 );

break;

case 'B': //停止采集

HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );

pData[0] = Collect_stop;

zb_SendDataRequest( 0xFFFF, SENSOR_CONTROL_CMD_ID,1,

pData, 0, 0, 0 );

break;

case 'C': //开始MCU片内温度采集

HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );

pData[0] = MCUTemp_start;

zb_SendDataRequest( 0xFFFF,SENSOR_CONTROL_CMD_ID, 1,

pData, 0, 0, 0 );

break;

case 'D': //停止MCU片内温度采集

HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );

pData[0] = MCUTemp_stop;

zb_SendDataRequest( 0xFFFF,SENSOR_CONTROL_CMD_ID, 1,

pData, 0, 0, 0 );

break;

case 'E': //开始MCU 电压采集

HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );

pData[0] = MCUBat_start;

zb_SendDataRequest( 0xFFFF,SENSOR_CONTROL_CMD_ID, 1,

pData, 0, 0, 0 );

break;

case 'F': //停止MCU 电压采集

HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );

pData[0] = MCUBat_stop;

zb_SendDataRequest( 0xFFFF,SENSOR_CONTROL_CMD_ID, 1,

pData, 0, 0, 0 );

break;

…….

就想这么写,代码长不一一列出来

这里面发送和sensor发送温湿度信息时一样的。

HalLedSet(HAL_LED_1, HAL_LED_MODE_OFF );这是一个成功的标志,如果关闭什么成功了后,比如用户想关掉MCU 的温度采集,通过LED1灯灭的情况反馈给用户。

pData[0] =Collect_stop;

zb_SendDataRequest( 0xFFFF, SENSOR_CONTROL_CMD_ID,1,

pData, 0, 0, 0 );

当然,这里面的命令只有一个unsigned char的长度,命令形式是广播式的然后Collect_stop这样子的命令必须编码,

而且协调器跟节点应保持一致。如

#defineCollect_start 0x40

#define Collect_stop 0x80

#defineMCUTemp_stop 0x30

#defineMCUTemp_start 0xD0

#defineMCUBat_stop 0x50

#defineMCUBat_start 0x60

#defineTemp_stop 0x70

#defineTemp_start 0xE0

#defineHUM_start 0x90

#defineHUM_stop 0xA0

我乱写的,就好像这样子。

那么sensor那边负责接收的函数:

void zb_ReceiveDataIndication(uint16 source, uint16 command, uint16 len, uint8 *pData ) {

if ( command == SENSOR_CONTROL_CMD_ID )

{

if ( pData[0] == Collect_start ) //开始采集温度和电池电压

{

myApp_StartReporting();

if ( LED1_SBIT == LED1_POLARITY (1)) //LED1 是标志,成功后反馈到协调器

{

pData[0] = Collect_start;

zb_SendDataRequest( 0xFFFE,SENSOR_REPORT_CMD_ID, 1,

pData, 0,AF_ACK_REQUEST, 0 );

}

}

if ( pData[0] == Collect_stop ) //停止采集温度和电池电压

{

myApp_StopReporting();

if ( LED1_SBIT == LED1_POLARITY (0) )

{

pData[0] = Collect_stop;

zb_SendDataRequest( 0xFFFE,SENSOR_REPORT_CMD_ID, 1,

pData, 0,AF_ACK_REQUEST, 0 );

}

}

if ( pData[0] == MCUTemp_stop ) //停止采集片内温度

{

myApp_StopMCUTempReporting();

pData[0] = MCUTemp_stop;

zb_SendDataRequest( 0xFFFE,SENSOR_REPORT_CMD_ID, 1,

pData, 0, AF_ACK_REQUEST, 0 );

}

if ( pData[0] == MCUTemp_start ) //开始采集片内温度

{

myApp_StopMCUTempReporting();

myApp_StartMCUTempReporting();

zb_SendDataRequest( 0xFFFE,SENSOR_REPORT_CMD_ID, 1,

pData, 0,AF_ACK_REQUEST, 0 );

}

……

就像这样

从if ( command == SENSOR_CONTROL_CMD_ID )

这个判断语句读者应该能理解cID的用意吧

这里面没什么好说的,不过要看看处理函数

voidmyApp_StartReporting( void )

{

unsigned char a,b,c,d;

a = osal_start_timerEx( sapi_TaskID,MY_REPORT_TEMP_EVT, myTempReportPeriod );

b = osal_start_timerEx( sapi_TaskID,MY_REPORT_BATT_EVT, myBatteryCheckPeriod );

c = osal_start_timerEx( sapi_TaskID,MY_REPORT_WENDU_EVT, myWENDUReportPerio

d );

d = osal_start_timerEx( sapi_TaskID,MY_REPORT_SHIDU_EVT, mySHIDUReportPeriod ); HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );

//Uart0SendString("Start ssecess!");

//Uart0Send( a );Uart0Send( b );Uart0Send( c);Uart0Send( a );

//测试用

}

上面的一些赋值可以忽略,这是我用于测试的。

道理也很简单,再看看停止的:

voidmyApp_StopReporting( void )

{

//unsigned char i,j,k,z;

osal_stop_timerEx( sapi_TaskID, MY_REPORT_TEMP_EVT);

osal_stop_timerEx( sapi_TaskID,MY_REPORT_BATT_EVT );

osal_stop_timerEx( sapi_TaskID,MY_REPORT_WENDU_EVT );

osal_stop_timerEx( sapi_TaskID,MY_REPORT_SHIDU_EVT );

HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );

//Uart0SendString("CStop s sucess!");

//Uart0Send(i);Uart0Send(j);Uart0Send(k);Uart0Send(z);

}

道理也很简单,直接调用就OK,意思是将自己想要停止的时间从系统timer中删除掉。

删除单个道理一样:

voidmyApp_StopMCUTempReporting( void )

{

osal_stop_timerEx( sapi_TaskID,MY_REPORT_TEMP_EVT );

HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );

}

voidmyApp_StopMCUBatReporting( void )

{

osal_stop_timerEx( sapi_TaskID,MY_REPORT_BATT_EVT );

HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );

}

…….

最后是反馈信息,因为命令是从协调器发出去的,因此协调器必须受到反馈信息才好确认是否准确操作了该条命令。

if ( LED1_SBIT == LED1_POLARITY (1)) //LED1 是标志,成功后反馈到协调器

{

pData[0] = Collect_start;

zb_SendDataRequest( 0xFFFE,SENSOR_REPORT_CMD_ID, 1,

pData, 0,AF_ACK_REQUEST, 0 );

}

LED1灯亮了之后,代表成功开启,然后发送pData[0] =Collect_start;的信息到节点,这就是为什么协调器和节点要保持发送接收命令信息(如Collect_start = 0x40 )一致的原因。

这里面提一下LED1_POLARITY (1)这个函数

它最终的原型是一个#define ACTIVE_LOW !

也就是非,应该就是为了符合个人操作习惯而设的。

再看看协调器怎么处理这些反馈回来的信息

if ( pData[0] == Collect_start )

{

zb_AllowBind( 0xFF );

HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );

tmpLen = (uint8)osal_strlen((char*)strCollect );

pBuf = osal_memcpy( buf, strCollect,tmpLen );

}

if ( pData[0] == Collect_stop )

{

zb_AllowBind( 0x00 );

HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );

tmpLen = (uint8)osal_strlen((char*)strCollect2 );

pBuf = osal_memcpy( buf, strCollect2,tmpLen );

}

if ( pData[0] == MCUTemp_start )

{

tmpLen = (uint8)osal_strlen((char*)strMCUTEMP );

pBuf = osal_memcpy( buf, strMCUTEMP,tmpLen );

}

if ( pData[0] == MCUTemp_stop )

{

tmpLen = (uint8)osal_strlen((char*)strMCUTEMP2 );

pBuf = osal_memcpy( buf, strMCUTEMP2,tmpLen );

}

if ( pData[0] == MCUBat_stop )

{

tmpLen = (uint8)osal_strlen((char*)strMCUBAT2 );

pBuf = osal_memcpy( buf, strMCUBAT2,tmpLen );

}

if ( pData[0] == MCUBat_start )

{

tmpLen = (uint8)osal_strlen((char*)strMCUBAT );

pBuf = osal_memcpy( buf, strMCUBAT,tmpLen );

}

if ( pData[0] == Temp_start )

{

tmpLen = (uint8)osal_strlen((char*)strTEMP );

pBuf = osal_memcpy( buf, strTEMP, tmpLen);

}

其实我贴出来的用意是讲明协调器收到节点反馈信息之后需要发送一个成功的标志到串口里,最后通过串口调试工具显示出来。

这里面的一些字符串的定义:

//CONST uint8strDevice[] = "Device:0x";

CONST uint8strDevice[] = "a";

//CONST uint8strTemp[] = "MCU Temp: ";

CONST uint8strTemp[] = "b";

//CONST uint8strBattery[] = "Battery: ";

CONST uint8strBattery[] = "c";

//CONST uint8strWENDU[] = "Temp: ";

CONST uint8strWENDU[] = "d";

//CONST uint8strSHIDU[] = "humidity: ";

CONST uint8strSHIDU[] = "e";

//CONST uint8strCollect[] = "MCU Collect start success!";

CONST uint8strCollect[] = "f";

//CONST uint8strCollect2[] = "MCU Collect stop success!";

CONST uint8strCollect2[] = "g";

//CONST uint8strMCUTEMP[] = "MCU Temp start success!";

CONST uint8strMCUTEMP[] = "h";

…….

不一一列出来,注释是因为编码需要,大家如果是通过文本框直接接受的最好就好像注释里面的那样子定义字符串,我这么编码是为了提取文本信息的需要。

之前的都没有截图,现在的截图出来都是

a796Fd25@a796Fe30@a796Fb39@a796Fd25@a796Fe30@a796Fb39@a796Fd25@a796Fe30@a796Fc27@a796Fb39@a7 96Fd25@a796Fe30@a796Fb39@a796Fd25@a796Fe30@a796Fb39@a796Fd25@a796Fe30@a796Fb39@a796Fd25@a796 Fe30@a796Fc27@a796Fb39@a796Fd25@a796Fe30@a796Fb39@a796Fd25@a796Fe30@a796Fb39@a796Fd25@a796Fe 31@a796Fb39@a796Fd25@a796Fe31@a796Fc27@a7

这样的数据不好看。

其实写这篇文章只是给大家讲述一下我自己的一种方法,一个方向而已。

好,就这样,之后我会发一篇串口的文章

评论这张

转发至微博

转发至微博

0人 | 分享到:

阅读(14)| 评论(0)| 转载(0) |举报

zigbee学习心得2——协议栈任务

Fork - VFork 一张图说明区别

历史上的今天

相关文章

最近读者

登录后,您可以在此留下足迹。

xiaoyan_

评论

点击登录|

取消

上一页1... -1-1-1-1-1-1-1... -1下一页

页脚

公司简介- 联系方法- 招聘信息- 客户服务- 隐私政策- 博客风格- 手机博客- VIP博客- 订阅此博客网易公司版权所有 ?1997-2012

基于单片机的无线温湿度采集系统设计说明

毕业论文(设计)论文题目无线温湿度采集系统设计

二零一一年六月 目录 1 引言 (1) 2 设计要求 (1) 3 系统总体方案 (1) 4 采集模块硬件电路设计 (2) 4.1 电源模块设计 (2) 4.2S H T10温湿度传感器 (3) 4.3A T89S52芯片介绍 (4) 4.3.1 时钟电路 (4) 4.3.2 复位电路……………………………………………………………………… 5 4.4n R F905功能的实现 (5) 4.4.1n R F905的接口 (5) 4.4.2 nRF905的工作模式………………………………………………………… 6 4.4.3 器件配置 (7) 4.4.4n R F905供电电源 (8) 5 接收模块硬件电路设计 (8) 5.1n R F905的接收流程 (8) 5.2L C D1602液晶显示 (9) 6 软件设计………………………………………………………………………… 10 6.1 采集模块软件设计…………………………………………………………… 10 6.2 接收模块软件设计…………………………………………………………… 1 2 6.3 nRF905通过SPI口与单片机通讯 (13) 7 系统调试与性能分析…………………………………………………………… 1 4

结论 (15) 致谢 (15) 参考文献 (16) 附录A 发射模块电路图……………………………………………………………18附录B 接收模块电路图…………………………………………………………… 19 附录C n R F905原理图 (20) 附录D 实物图……………………………………………………………………… 2 1 无线温湿度采集系统设计 摘要:温湿度测量在工业生产中有着广泛的应用。通常,要实现温湿度测量和自动控制,监控室与现场之间必须敷设大量的电缆,这是一个麻烦的问题。本文提出采用无线温湿度测量的方案,不必敷设电缆,可以节省费用和时间。该采集系统是以AT89S52芯片为主要,利用数字式温湿度传感器SHT10进行收集,将收集数据传给单片机AT89S52,经过处理从无线发送模块nRF905发射出去,单片机通过模拟SPI口实现与nRF905之间的通信,因为nRF905兼具发射和接收功能,经过一定距离的通信,接受模块通过NRF905将数据传给 AT89S52,单片机经处理后,将数据传给显示屏LCD1602.完成无线数据采集与发送。 关键词:nRF905 AT89S52 AHT10

温度数据采集系统

第三章系统硬件设计 温度数据采集系统和接收显示硬件电路主要包含温度数据采集、发送、接收和显示等模块,温度数据采集采用数字式温度传感器DS18B20,数据的发送和接收采用无线数据收发模块PTR2000,整个系统采用单片机STC89C52进行各模块的协调控制,下面对各个模块进行介绍。 3.1 数字温度传感器DS18B20 3.1.1 DS18B20 的性能特点 DS18B20 是由DALLAS 半导体公司生产的单线型智能数字温度传感器,是新一代适配微处理器的智能温度传感器,广泛应用于工业、农业等领域,具有体积小、接口方便和传输距离远的特点,在一根通信线上可以挂很多个DS18B20,很方便。具有以下特点: (1)具有独特的1-Wire 接口,只需要一个端口引脚就可以进行通信; (2)具备多节点能力,能够简化分布式温度检测应用中的设计; (3)不需要外部元件; (4)可以直接从数据线供电,电源电压范围在3~5.5V; (5)在待机状态下可以不消耗电源电量; (6)测量温度范围在-55~+125℃; (7)在-10~+85℃时测量精度在±0.5℃; (8)可以用程序设定9~12 位分辨率; (9)用户可根据需要定义温度的上下限报警设置。 DS18B203 脚封装的管脚排列图如图3.1.1 所示。

图 3.1.1 DS18B20 管脚排列图 DS18B20 只有三个引脚。其中,引脚1 和3 分别是GND 和VDD,引脚2 是DQ 端,是用于数据信息的输入和输出。当给DS18B20 加电后,单片机可以通过DQ 端写入命令,并可以读出含有温度信息的数字量。在使用寄生电源情况下,可以向DS18B20 提供电源。 3.1.2 DS18B20 的内部结构 DS18B20的内部框图如图3.1.2所示。 图3.1.2 DS18B20的内部框图 DS18B20主要由64位ROM、温度传感器、非易失性温度报警触发器TH和TL及暂存器四部分组成。64位ROM存储器具有独一无二的序列号,可以看作是该DS18B20的地址系列号,是在出厂前就被光刻好的。暂存器各字节具有不同的意义,0和1字节是用于存储温度传感器数字输出的温度寄存器;2字节和3字节分别是非易失性上限报警触发寄存器(TH)和下限报警触发寄存器(TL);4字节的配置寄存器能够用来设置温度转换的精度; 5、6和7字节作为内部保留使用。DS18B20有两种供电方式,可以使用寄生电源供电,也可以使用外部电源。在使用寄生电源的时候,不用外部电源,而是在总线为高时由DQ端提供电源,同时向内部电容充电,以求在总线拉低时为DS18B20提供电量。上电后,DS18B20进入空闲状态;当MCU向DS18B20发出Convert T [44h]的命令后,DS18B20 向MCU传送转换状态,开始温度测量和A/D转换。温度数据以带符号位的补码形式存储在温度寄存器中,温度寄存器格式如图3.1.3所示。 图3.1.3 DS18B20温度寄存器格式 温度的正负值是由符号为来说明的,正为0,负为1。表3.1给出一部分数字数据与温度的对应关系。 表3.1 DS18B20温度与数据对应关系

实训总结300字通用版5篇

实训总结300字通用版5篇 实训总结300字通用版篇一 为期两周的实训就这样结束了,这两周让我收获了不少。我的第一次PLC实训主要有两个项目:花式彩灯控制系统的设计方法和应用PLC实现自动分拣控制系统的设计,同时我们还学习了PLC软件的安装,也实现了PLC与自动分拣控制系统的调试,最后完成了利用PLC成功控制了自动分拣设备的正常运作。当然其中还学习了画图等一些与自己专业关联的知识。 我在实训的过程中,让我学到了许多东西,其中最主要的是PLC设计方法与应用。设计步骤是首先是我们要弄清楚设备的顺序运作,然后结合PLC知识在图纸上画出顺序功能图,将顺序功能图转变为梯形图,之后利用PLC软件编程。在练习的时候,我们可以实现用编辑好的程序与自动分拣设备进行调试。总的来说,我是较好的完成了既定任务。还有都不时去帮助其他同学解决一些问题。 实训总结300字通用版篇 这次我们的主要实训项目有:1工作台自动往返,要求:用PLC控制实现工作台的自动往返 运动;2?电控机星三角形降压启动,要求:按下启动按钮SB1时,电动机丫形启动,5S后自动转为三角形运行;3?两台电机顺序控制;4 :按钮交通灯控制;5十字路口交通信号灯控制;6 : 机械手控制;7 :多种液体混合;8 :四节传送带运送,要求:系统启动后,配料装置自动识别货车到位情况和能够对货车进行装料;9.音乐喷泉;10.小车三点往返运动;11. 水塔水位控制;12 ?抢答器。 虽然本次课程设计是要求自己独立完成,但是,彼此还是脱离不了集体的力量,遇到问题和 同学互相讨论交流,也在老师的帮助下完美的完成。再这次的PLC实训里孙老师对 我们要求了很多,比如在作图中他要求我们把图看清楚理清思路,把顺序指令先写岀来再作图等等一些要求跟技巧。这次实训我学了很多知识,给了我很多启示。在今后的学习过程中,我想我要 更加努力的学习自己的专业知识,多多与同学和老师交流。而且,这次实训给与我不同的学习方法和体验,让我深刻的认识到实践的重要性。所以,在以后的学习的过程中,我会更注重自己的操作能力和应变能力。 实训总结300字通用版篇 这个学期开设了电气控制与PLC实训的课程,跟以前所有开设的课程有很大的区别,这门课 程的灵活性很强,充分发挥自己的潜力;其实学习的过程当中并不一定要学到多少东西,个人觉得开散思维怎样去学习,这才是最重要的,而这门课程恰好体现了这一点。此次的实训以班级为主体,以个人为单位而开展的一次综合的实践,老师也给予我们足够的空间让我们完成此次的实训,这让我觉得压力不小。

实训总结300字通用版

( 实习报告 ) 单位:_________________________姓名:_________________________日期:_________________________ 精品文档 / Word文档 / 文字可改 实训总结300字通用版Training summary 300 words General Edition

实训总结300字通用版 实训总结300字通用版篇一 为期两周的实训就这样结束了,这两周让我收获了不少。我的第一次PLC实训主要有两个项目:花式彩灯控制系统的设计方法和应用PLC实现自动分拣控制系统的设计,同时我们还学习了PLC软件的安装,也实现了PLC与自动分拣控制系统的调试,最后完成了利用PLC成功控制了自动分拣设备的正常运作。当然其中还学习了画图等一些与自己专业关联的知识。 我在实训的过程中,让我学到了许多东西,其中最主要的是PLC 设计方法与应用。设计步骤是首先是我们要弄清楚设备的顺序运作,然后结合PLC知识在图纸上画出顺序功能图,将顺序功能图转变为梯形图,之后利用PLC软件编程。在练习的时候,我们可以实现用编辑好的程序与自动分拣设备进行调试。总的来说,我是较好的完

成了既定任务。还有都不时去帮助其他同学解决一些问题。 实训总结300字通用版篇二 这次我们的主要实训项目有:1工作台自动往返,要求:用PLC 控制实现工作台的自动往返运动;2.电控机星三角形降压启动,要求:按下启动按钮SB1时,电动机Y形启动,5S后自动转为三角形运行;3.两台电机顺序控制;4:按钮交通灯控制;5十字路口交通信号灯控制;6:机械手控制;7:多种液体混合;8:四节传送带运送,要求:系统启动后,配料装置自动识别货车到位情况和能够对货车进行装料;9.音乐喷泉;10.小车三点往返运动;11.水塔水位控制;12.抢答器。 虽然本次课程设计是要求自己独立完成,但是,彼此还是脱离不了集体的力量,遇到问题和同学互相讨论交流,也在老师的帮助下完美的完成。再这次的PLC实训里孙老师对我们要求了很多,比如在作图中他要求我们把图看清楚理清思路,把顺序指令先写出来再作图等等一些要求跟技巧。这次实训我学了很多知识,给了我很多启示。在今后的学习过程中,我想我要更加努力的学习自己的专

无线温度采集系统实现分析

龙源期刊网 https://www.doczj.com/doc/b012935548.html, 无线温度采集系统实现分析 作者:李佩张红李新娥 来源:《数字技术与应用》2012年第01期 摘要:介绍了一种以单片机为中心的无线数据采集方法和VB系统的计算机端的数据采集控制系统的实现过程。温度数据的无线传输模块采用Nordic公司的nRF905作为控制核心,实验开发板采用的是DD-900,PC通过VB的串口通信控件与无线模块进行通信,以达到实时数据采集的目的。 关键词:无线温度采集 VB DD-900 nRF905 中图分类号:TP274.2 文献标识码:A 文章编号:1007-9416(2012)01-0068-02 Abstract:Introduces a method of wireless tempreture acquisition by single-chip,and the achieve process of tempreture acquisition control system based on PC teminal by VB. Wireless transmisson unit adopt nRF905 produced by Nordic as control centre, and DD-900 as expriment unit.The communication between PC and wireless unit use Serial Interface communication control in VB,in order to achievement tempreture acquisition real-time. Key words:Wireless tempreture acquisition Visual Basic DD-900 nRF905 在生活中使用最多的温度参数被广泛地应用于科学研究和人们的日常生活等领域。针对恶劣环境的工业现场以及高科技的农业现场,布线困难,浪费资源,占用空间,可操作性差等问题做出的一个解决方案。该方案主要是利用51单片机采集实时外界的温度,利用无线传输实现在VB上位机显示温度采集的结果,并对数据进行相应的对比和处理。 1、无线温度采集系统设计 1.1 无线温度采集的原理 无线温度采集的原理如下:温度传感器将被测点的温度采集后输出的模拟信号逐步送往信号放大电路、低通滤波器以及A/D转换器(即信号调理电路),然后在单片机的控制下将 A/D转换器输出的数字信号传送到无线收发芯片中,并通过芯片的调制处理后由芯片内部的天线发送到上位机,在上位机模块中,发送来的数据由单片机控制的无线收发芯片接收并解调,最后通过接口芯片发送到PC机中进行显示和处理。 1.2 无线温度采集系统方案

基于单片机的温湿度采集管理系统

基于单片机的温湿度采集管理系统

目录 摘要 (1) 第1章绪论 (1) 1.1 系统开发背景 (1) 1.2 课题设计目的和意义 (2) 1.3 课题研究内容 (2) 第2章无线温湿度采集管理系统总体设计 (3) 2.1 系统的总体设计 (3) 2.2 系统设计的功能 (4) 第3章无线温湿度传输系统硬件设计 (4) 3.1 nRF905高频头通信模块 (5) 3.1.1 nRF905概述 (5) 3.1.2 nRF905无线模块硬件结构 (5) 3.1.3 nRF905天线 (6) 3.1.4 nRF905频率调制 (6) 3.1.5 nRF905输出频率 (6) 3.1.6 高频头输出接口电路 (7) 3.2 AT89S52单片机 (8) 3.2.1 单片机与nRF905通信 (9) 3.2.2 单片机与主机通信 (11) 3.2.3 单片机程序下载模块 (12)

3.3 DS18B20温度传感器 (12) 3.3.1 温度传感器概述 (12) 3.3.2 温度传感器构成及原理 (12) 3.3.3 温度传感器寄生电源 (13) 3.3.4 传感器温度测量 (14) 3.4 DHT11传感器 (14) 3.4.1 DHT11温湿度传感器概述 (14) 3.4.2DHT11构成及其工作原理 (15) 3.4.3 测量分辨率 (16) 3.5 系统电源模块 (16) 第4章无线温湿度传输系统软件(下位机)设计 (16) 4.1 无线温湿度传输系统软件总体设计 (17) 4.2 单片机串口通信 (18) 4.2.1 SBUF数据缓冲寄存器 (19) 4.2.2 SCON串行口控制寄存器 (19) 4.2.3 PCON特殊功能寄存器 (20) 4.2.4 串口通信波特率选择 (20) 4.2.5 IE中断允许控制寄存器 (21) 4.3 nRF905与单片机通信 (21) 4.3.1 nRF905的数据发送 (21) 4.3.2 nRF905的数据接收 (22) 4.3.3 掉电模式 (24)

实习生个人总结(通用版)

个人工作总结通用版 200X年,我坚持以马克思、列宁主义,毛泽东思想,邓小平理论和“三个代表”重要思想为指导,自觉加强理论学习,认真学习“三个代表”重要思想、党的十六大报告及十六届X中全会精神,刻苦钻研业务知识,努力提高理论知识和业务工作水平。遵纪守法,努力工作,认真完成领导交办的各项工作任务,在同志们的关心、支持和帮助下,思想、学习和工作等方面取得了新的进步。现总结 (一)、严于律已,自觉加强党性锻炼,党性修养和政治思想觉悟进一步提高。 一年来,我始终坚持运用马克思列宁主义的立场、观点和方法论,运用辩证唯物主义与历史唯物主义去分析和观察事物,明辨是非,坚持真理,坚持正确的世界观、人生观、价值观,用正确的世界观、人生观、价值观指导自己的学习、工作和生活实践,在思想上积极构筑抵御资产阶级民主和自由化、拜金主义、自由主义等一切腐朽思想侵蚀的坚固防线。热爱祖国,热爱中国共产党,热爱社会主义,拥护中国共产党的领导,拥护改革开放,坚信社会主义最终必然战胜资本主义,对社会主义充满必胜的信心。认真贯彻执行党的路线、方针、政策,为加快社会主义建设事业认真做好本职工作。工作积极主动,勤奋努力,不畏艰难,尽职尽责,在平凡的工作岗位上作出力所能及的贡献。 (二)、强化理论和业务学习,不断提高自身综合素质 我重视加强理论和业务知识学习,在工作中,坚持一边工作一边

学习,不断提高自身综合素质水平。 一是认真学习“三个代表”重要思想,深刻领会“三个代表”重要思想的科学内涵,增强自己实践“三个代表”重要思想的自觉性和坚定性;认真学习党的十六大报告及十六届三中、四中全会精神,自觉坚持以党的十六大为指导,为进一步加快完善社会主义市场经济体制,全面建设小康社会作出自己的努力。 二是认真学习工作业务知识,重点学习公文写作及公文处理和电脑知识。在学习方法上做到在重点中找重点,抓住重点,并结合自己在公文写作及公文处理、电脑知识方面存在哪些不足之处,有针对性地进行学习,不断提高自己的办公室业务工作能力。 三是认真学习法律知识,结合自己工作实际特点,利用闲余时间,选择性地开展学习,通过学习,进一步增强法制意识和法制观念。 (三)、努力工作,按时完成工作任务 一年来,我始终坚持严格要求自己,勤奋努力,时刻牢记党全心全意为人民服务的宗旨,努力实践“三个代表”重要思想,在自己平凡而普通的工作岗位上,努力做好本职工作。在具体工作中,我努力做好服务工作,当好参谋助手: 一是认真收集各项信息资料,全面、准确地了解和掌握各方面工作的开展情况,分析工作存在的主要问题,总结工作经验,及时向领导汇报,让领导尽量能全面、准确地了解和掌握最近工作的实际情况,为解决问题作出科学的、正确的决策。 二是领导交办的每一项工作,分清轻重缓急,科学安排时间,按

无线温湿度采集系统设计说明

无线温湿度采集系统设计 作者:xx 指导老师:xx 农业大学工学院 xx级电子信息工程 230036 摘要:温湿度测量广泛应用于工农业领域,为了避免传统布线安装的测量不便,以及所引起的电磁干扰和信号衰减,达到对温湿度的精确测量,设计并实现了一种无线数据采集系统。该采集系统是以AT89S52单片机为核心,利用数字式温湿度传感器SHT10进行测量,将测量数据传送至单片机AT89S52,经过处理从无线发送模块nRF905发射出去,单片机通过模拟SPI口实现与nRF905之间的通信,因为nRF905兼具发射和接收功能,经过一定距离的传输,无线接收模块将接收到的数据送单片机串口,进行数据识别以及通过LCD1602显示温湿度,成功地实现了无线温湿度的数据采集。 关键词:nRF905 AT89S52 AHT10 1 引言 温度、湿度是工农业生产的主要环境参数,在工农业生产实践中占有重要地位,对其进行适时准确的测量具有重要意义。而传统的温湿度传感器需通过较复杂的电路才能将温度信号转化为数字信号,且远距离传输会引起较大的误差。本系统采用单总线数字温湿度传感器SHT10,直接将温湿度变为数字信号,配合单片机及无线通信模块nRF905进行无线数据传输,达到实时采集的目的。利用单片机对温、湿度控制具有控温、湿精度高、功能强、体积小、价格低,简单灵活等优点,很好的满足了工艺要求。本文介绍了利用AT89S52单片机进行温度和湿度检测的智能化方法。 2 设计要求 无线温度、湿度采集系统是家庭信息智能化的一个部分,也独立应用于农业大棚温湿度监控。传统的布线安装给使用带来很大不便,为了解决这一问题,本设计需要设计一款无线温湿度采集系统,通过无线的方式实现主机对各采样点的温度、湿度信息进行监控。 本设计是实现温度和湿度的测量和实时监控,通过单片机(AT89C52)直接连接SHT10,将测量得到的温度和湿度数据显示在液晶屏上。上位机的数据经过无线传输及显示后再被传输至接受端的89S52单片机中,然后再由单片机将数据转化为可以由液晶显示板1602显示的数据。 3 系统总体方案 无线温湿度采集系统是一种基于射频技术的无线湿温度检测装置。本系统由

温度数据采集系统

第三章 系统硬件设计温度数据采集系统和接收显示硬件电路主要包含温度数据采集、发送、接收和显示等模块,温度数据采集采用数字式温度传感器 DS18B20,数据的发送和接收采用无线数据收 发模块PTR2000,整个系统采用单片机STC89C52进行各模块的协调控制,下面对各个模块进行介绍。 3.1 数字温度传感器DS18B20 3.1.1 DS18B20 的性能特点 DS18B20 是由 DALLAS 半导体公司生产的单线型智能数字温度传感器,是新一代适配微处理器的智能温度传感器,广泛应用于工业、农业等领域,具有体积小、接口方便和传输距离远的特点,在一根通信线上可以挂很多个 DS18B20,很方便。具有以下特点:(1)具有独特的 1-Wire 接口,只需要一个端口引脚就可以进行通信;(2)具备多节点能力,能够简化分布式温度检测应用中的设计;(3)不需要外部元件; (4)可以直接从数据线供电,电源电压范围在 3~5.5V ;(5)在待机状态下可以不消耗电源电量;(6)测量温度范围在-55~+125℃;(7)在-10~+85℃时测量精度在±0.5℃;(8)可以用程序设定 9~12 位分辨率;(9)用户可根据需要定义温度的上下限报警设置。DS18B203 脚封装的管脚排列图如图 3.1.1 所示。、管路敷设技术通过管线敷设技术不仅可以解决吊顶层配置不规范高中资料试卷问题,而且可保障各类管路习题到位。在管路敷设过程中,要加强看护关于管路高中资料试卷连接管口处理高中资料试卷弯扁度固定盒位置保护层防腐跨接地线弯曲半径标高等,要求技术交底。管线敷设技术中包含线槽、管架等多项方式,为解决高中语文电气课件中管壁薄、接口不严等问题,合理利用管线敷设技术。线缆敷设原则:在分线盒处,当不同电压回路交叉时,应采用金属隔板进行隔开处理;同一线槽内,强电回路须同时切断习题电源,线缆敷设完毕,要进行检查和检测处理。、电气课件中调试对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料试卷相互作用与相互关系,根据生产工艺高中资料试卷要求,对电气设备进行空载与带负荷下高中资料试卷调控试验;对设备进行调整使其在正常工况下与过度工作下都可以正常工作;对于继电保护进行整核对定值,审核与校对图纸,编写复杂设备与装置高中资料试卷调试方案,编写重要设备高中资料试卷试验方案以及系统启动方案;对整套启动过程中高中资料试卷电气设备进行调试工作并且进行过关运行高中资料试卷技术指导。对于调试过程中高中资料试卷技术问题,作为调试人员,需要在事前掌握图纸资料、设备制造厂家出具高中资料试卷试验报告与相关技术资料,并且了解现场设备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。 、电气设备调试高中资料试卷技术电力保护装置调试技术,电力保护高中资料试卷配置技术是指机组在进行继电保护高中资料试卷总体配置时,需要在最大限度内来确保机组高中资料试卷安全,并且尽可能地缩小故障高中资料试卷破坏范围,或者对某些异常高中资料试卷工况进行自动处理,尤其要避免错误高中资料试卷保护装置动作,并且拒绝动作,来避免不必要高中资料试卷突然停机。因此,电力高中资料试卷保护装置调试技术,要求电力保护装置做到准确灵活。对于差动保护装置高中资料试卷调试技术是指发电机一变压器组在发生内部故障时,需要进行外部电源高中资料试卷切除从而采用高中资料试卷主要保护装置。

实训总结通用版

实训总结通用版 今天小编为大家收集资料整理回来了关于工作总结的文章,希望能够为大家带来帮助,希望大家会喜欢。同时也希望给你们带来一些参考的作用,如果喜欢就请继续关注我们()的后续更新吧! 通过这次实训,我收获了很多,一方面学习到了许多以前没学过的专业知识与知识的应用,另一方面还提高了自己动手做项目的能力。本次实训,是对我能力的进一步锻炼,也是一种考验。从中获得的诸多收获,也是很可贵的,是非常有意义的。 在实训中我学到了许多新的知识。

是一个让我把书本上的理论知识运用于实践中的好机会,原来,学的时候感叹学的内容太难懂,现在想来,有些其实并不难,关键在于理解。 在这次实训中还锻炼了我其他方面的能力,提高了我的综合素质。首先,它锻炼了我做项目的能力,提高了独立思考问题、自己动手操作的能力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等。其次,实训中的项目作业也使我更加有团队精神。 从那里,我学会了下面几点找工作的心态: 一、继续学习,不断提升理论涵养。 在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更应该把学习作为保持工作积极性的重要途径。走上工作岗位后,我会积极响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务

知识提升能力,以广博的社会知识拓展视野。 二、努力实践,自觉进行角色转化。 只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是通过实践活动来实现的,也只有通过实践才能锻炼人的品质,彰显人的意志。必须在实际的工作和生活中潜心体会,并自觉的进行这种角色的转换。 三、提高工作积极性和主动性 实习,是开端也是结束。展现在自己面前的是一片任自己驰骋的沃土,也分明感受到了沉甸甸的责任。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。 我认为大学生实习难,就业难,除非你有关系,能给你轻松找到工作,否则就难逃市场选择的厄运。我在该公司实习总结了五个攻略,只能智勇双全,

基于ZigBee的无线温湿度采集系统

基于ZigBee的无线温湿度采集系统 摘要:针对传统温湿度检测存在的问题,结合无线传感器网络技术,本文提出一种基于ZigBee 技术的无线温湿度采集系统的设计方法。设计采用CC2530 射频芯片及SHT11 数字温湿度传感器,在ZigBee 协议栈的基础上进行应用开发。阐述了ZigBee技术,系统组成及工作原理,系统软硬件设计等内容,并通过实验测试表明,该无线温湿度采集系统能够稳定可靠的运行,并且具有组网简单、功耗低,成本低等优点,具有十分好的实用价值和经济效益。 关键字:ZigBee,温湿度,CC2530,协议栈 Wireless temperature and humidity acquisition system based on ZigBee technology Abstract: According to the problems existing in temperature and humidity detecting of traditional ways,combining with wireless sensor network technology , this paper puts forward a new design of temperature and humidity acquisition system based on ZigBee technology. The design was carried out based on the ZigBee protocol, adopting CC2530 RF chip and digital humidity and temperature sensor SHT11. Paper introduces ZigBee technology, the overall design of the system, hardware and software design of the nodes and so forth. Finally, the experimental tests have proved that the wireless temperature and humidity acquisition system was stable and credible , with the advantages of simple networking , low cost and low power, and it has a very good practical value and economic benefits . Keywords: ZigBee, Temperature and humidity, CC2530, Protocol

单片机实验温度采集系统

单片机原理与运用 课 程 设 计 课题名称:专业班级:学生姓名:指导老师:完成时间:温度采集与显示系统2012年7月4号

摘要 随着信息技术的飞速发展,嵌入式智能电子技术已渗透到社会生产、工业 控制以及人们日常生活的各个方面。单片机又称为嵌入式微型控制器,在智能 仪表、工业控制、智能终端、通信设备、医疗器械、汽车电器、导航系统和家 用电器等很多领域都有着广泛的应用,已成为当今电子信息领域应用最广泛的 技术之一。 本文主要介绍了一个基于STC89C52单片机的温度采集与显示系统,详细 描述了利用液晶显示器件温度传感器DS18B20开发测温系统的原理,重点对传感器与单片机的硬件连接和软件编程进行了详细分析。主要地介绍了数字温度 传感器DS18B20的数据采集过程,进而对各部分硬件电路的工作原理进行了介绍。温度传感器DS18B20与STC89C52结合构成了最简温度检测系统,该系统可以方便的实现温度采集和显示,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合我们日常生活和工、农业生产中的温 度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。 单片机综合实验的目的是训练单片机应用系统的编程及调试能力,通过对 一个单片机应用系统进行系统的编程和调试,掌握单片机应用系统开发环境和 仿真调试工具及仪器仪表的实用,掌握单片机应用程序代码的编写和编译,掌 握利用单片机硬件仿真调试工具进行单片机程序的跟踪调试和排错方法,掌握 示波器和万用表等杆塔工具在单片机系统调试中应用。 关键词:单片机STC89C52、DS18B20温度传感器、液晶显示器LCD1602、AT24C02数据存储芯片

关于实训总结通用版

关于实训总结通用版 通过这次实训,我收获了很多,一方面学习到了许多以前没学过的专业知识与知识的应用,另一方面还提高了自己动手做项目的能力。本次实训,是对我能力的进一步锻炼,也是一种考验。从中获得的诸多收获,也是很可贵的,是非常有意义的。 在实训中我学到了许多新的知识。是一个让我把书本上的理论知识运用于实践中的好机会,原来,学的时候感叹学的内容太难懂,现在想来,有些其实并不难,关键在于理解。 在这次实训中还锻炼了我其他方面的能力,提高了我的综合素质。首先,它锻炼了我做项目的能力,提高了独立思考问题、自己动手操作的能力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等。其次,实训中的项目作业也使我更加有团队精神。 从那里,我学会了下面几点找工作的心态: 一、继续学习,不断提升理论涵养。 在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更应该把学习作为保持工作积极性的重要途径。走

上工作岗位后,我会积极响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升能力,以广博的社会知识拓展视野。 二、努力实践,自觉进行角色转化。 只有将理论付诸于实践才能实现理论自身的价值,也只有将理 论付诸于实践才能使理论得以检验。同样,一个人的价值也是通过实践活动来实现的,也只有通过实践才能锻炼人的品质,彰显人的意志。必须在实际的工作和生活中潜心体会,并自觉的进行这种角色的转换。 三、提高工作积极性和主动性 实习,是开端也是结束。展现在自己面前的是一片任自己驰骋 的沃土,也分明感受到了沉甸甸的责任。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。 我认为大学生实习难,就业难,除非你有关系,能给你轻松找 到工作,否则就难逃市场选择的厄运。我在该公司实习总结了五个攻略,只能智勇双全,才能在这个社会中出人头地。

温湿度采集系统设计

目录 第1章设计意义及要求 (1) 1.1 设计意义 (1) 1.2 设计要求 (1) 第2章硬件设计 (2) 2.1 AT89S52芯片介绍 (2) 2.2 液晶显示器LCD1602 (3) 2.2.1 液晶显示原理 (3) 2.2.2 液晶显示器分类 (3) 2.2.3 显示原理 (3) 2.2.4 LCD1602的基本参数及引脚功能 (4) 2.3 温湿度模块DHT11介绍 (6) 2.3.1 DHT11概述 (6) 2.3.2 DHT11传感特性说明 (7) 2.3.3 DHT11封装信息 (8) 2.3.4 串行接口(单线双向) (8) 第3章设计实现 (11) 3.1 设计框图及流程 (11) 3.2 设计结果及分析 (11) 第4章设计总结 (13) 参考文献 (14) 附录 (15)

第1章设计意义及要求 1.1 设计意义 最近几年来,随着科技的飞速发展,单片机领域正在不断的走向社会各个角落,还带动传统控制检测日新月异更新。在实时运作和自动控制的单片机应用到系统中,单片机如今是作为一个核心部件来使用,仅掌握单片机方面知识是不够的,还应根据其具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。 现代社会越来越多的场所会涉及到温度与湿度并将其显示。由于温度与湿度不管是从物理量本身还是在实际人们的生活中都有着密切的关系,例如:冬天温度为18至25℃,湿度为30%至80%;夏天温度为23至28℃,湿度为30%至60%。在此范围内感到舒适的人占95%以上。在装有空调的室内,室温为19至24℃,湿度为40%至50%时,人会感到最舒适。如果考虑到温、湿度对人思维活动的影响,最适宜的室温度应是工作效率高。18℃,湿度应是40%至60%,此时,人的精神状态好,思维最敏捷。所以,本课程设计就是通过单片机驱动LCD1602,液晶显示温湿度,通过此设计,可以发现本设计有一定的扩展性,而且可以作为其他有关设计的基础。如何高效、稳定地对数据(包括温度、湿度光线、压力等项目)进行实时采集对于现代的企业、工厂、研究所等对数据精度要求较高的单位具有非常重要的意义。 1.2 设计要求 本系统设计采用温度和湿度作为采集对象,是以单片机为核心的温度、湿度采集、数字显示系统,用液晶显示出当前温度、湿度的信息。以此了解AT89S52芯片为核心外接温度传感器和湿度传感器模块在液晶显示屏上显示当前的温度和湿度的过程。

大学生实训心得体会(通用版)

大学生实训心得体会(通用版) 导语:大学生实训指的是在大学生即将毕业走进社会前期,经过实际项目的技能提升,加强自己的实际动手操作能力,从而为将来的进入职场打下坚实的基础。以下是带来的实训心得体会,希望对您有所帮助。 转眼间实习就结束了,每一份实习工作,对于一个大学生而言,都是既辛苦又难忘的宝贵财富。进行了辛勤的实习工作后,如何来进行呢?实习报告网为大家带来以下这篇大学生实习的实习总结可以可以供大家作为参考。 前言:“没有实习,就没有发言权” ,只有亲身经历过才会有那种超乎平常的感觉。我与社会的接触并不多。其实学校要求我们参加认识实习 , 无非是想让我们提前接触社会 , 了解社会 , 这样才不会在真正走上社会的时候找不到生活的重心 , 于是我才决定这个假期要真正的去接触社实践是检验真理的惟一标准。在课堂上,我们学习了很多理论知识,但是如果我们在实际当会 , 品尝社会的酸甜苦辣。中不能灵活运用,那就等于没有学。实习就是将我们在课堂上学的理论知识运用到实战中。 我们 * 把课本上的知识灵活恰当的运用到生活、工作当中去,成为对别人对社会有用的人才?我们 * 适应当今飞速发展的社会, *

确定自己的人生坐标,实现自己的人生价值呢?抱着这种想法,经人介绍我走进了长春前进大街肯德基店。在那里,我学到许多书本上所没有的社会实践知识,体会到了工作的一些难处,学会了如何处世,怎样把事做对做好,清楚了自身的不足更明确了自己以后要怎样努力去完善自己,为毕业后走上工作岗位而奠定基础。 再这段实践里我得到了许多体会与认识,理解了学院为什么一直强调加强我们社会实践能力,现我将这短短的工作经历总结做出实践报告如下,请老师予以指导。 一、实习目的: 锻炼自身的社会活动能力,了解社会现实,从实践中拉进了与社会的距离,认清一些 * ,看清一些社会现象,在社会大课堂里,经风雨、见世面,检验知识,培养能力,磨练意志,使自身得到启迪,增强社会责任感。在实践中认识社会、增长才干、提高自身素质、为日后真正走进社会铺定基石。 二、实习内容: 开始时要试工一天,工作6个小时。试工期间,我被安排到大厅工作。及时收拾客人用餐后留下的垃圾,保持大厅的整洁是工作的

实训总结300字通用版5篇

实训总结300字通用版5篇 【导语】实训目的要明确,在理论上验证定理,公式,算法,并使实验者获得深刻和系统的理解,在实践上,掌握使用实验设备的技能技巧和程序的调试方法。一般需说明是验证型实验还是设计型实验,是创新型实验还是综合型实验。为大家整理的实训总结300字通用版5篇,希望对大家有所帮助! 实训总结300字通用版篇一 为期两周的实训就这样结束了,这两周让我收获了不少。我的第一次PLC实训主要有两个项目:花式彩灯控制系统的设计方法和应用PLC实现自动分拣控制系统的设计,同时我们还学习了PLC软件的安装,也实现了PLC与自动分拣控制系统的调试,最后完成了利用PLC 成功控制了自动分拣设备的正常运作。当然其中还学习了画图等一些与自己专业关联的知识。 我在实训的过程中,让我学到了许多东西,其中最主要的是PLC 设计方法与应用。设计步骤是首先是我们要弄清楚设备的顺序运作,然后结合PLC知识在图纸上画出顺序功能图,将顺序功能图转变为梯形图,之后利用PLC软件编程。在练习的时候,我们可以实现用编辑好的程序与自动分拣设备进行调试。总的来说,我是较好的完成了既

定任务。还有都不时去帮助其他同学解决一些问题。 实训总结300字通用版篇二 这次我们的主要实训项目有:1工作台自动往返,要求:用PLC控制实现工作台的自动往返运动;2.电控机星三角形降压启动,要求:按下启动按钮SB1时,电动机Y形启动,5S后自动转为三角形运行;3.两台电机顺序控制;4:按钮交通灯控制;5十字路口交通信号灯控制;6:机械手控制;7:多种液体混合;8:四节传送带运送,要求:系统启动后,配料装置自动识别货车到位情况和能够对货车进行装料;9.音乐喷泉;10.小车三点往返运动;11.水塔水位控制;12.抢答器。 虽然本次课程设计是要求自己独立完成,但是,彼此还是脱离不了集体的力量,遇到问题和同学互相讨论交流,也在老师的帮助下完美的完成。再这次的PLC实训里孙老师对我们要求了很多,比如在作图中他要求我们把图看清楚理清思路,把顺序指令先写出来再作图等等一些要求跟技巧。这次实训我学了很多知识,给了我很多启示。在今后的学习过程中,我想我要更加努力的学习自己的专业知识,多多与同学和老师交流。而且,这次实训给与我不同的学习方法和体验,让我深刻的认识到实践的重要性。所以,在以后的学习的过程中,我会更注重自己的操作能力和应变能力。 实训总结300字通用版篇三 这个学期开设了电气控制与PLC实训的课程,跟以前所有开设的课程有很大的区别,这门课程的灵活性很强,充分发挥自己的潜力;其实学习的过程当中并不一定要学到多少东西,个人觉得开散思维怎样

基于单片机的多点温度采集系统

基于单片机的多点温度采集系统 The detecting System of the muti-point Environmental Temperature Based on Single chip Microcomputer 系(院)名称:电子信息与电气工程学院 专业班级:2008级自动化1班 学生姓名:xxx 学号: 指导教师姓名:xxx 指导教师职称:副教授

目录 摘要 ............................................................................................................................ I Abstract..................................................................................................................... II 引言 .. (1) 第一章方案论证 (2) 1.1课题的来源 (2) 1.2系统设计思路概述 (2) 1.3系统方案对比 (2) 1.3.1系统设计方案一 (3) 1.3.2系统设计方案二 (3) 1.3.3方案对比与选择 (4) 第二章硬件系统设计 (5) 2.1硬件系统设计概述 (5) 2.2单片机最小系统设计 (5) 2.2.1单片机简要介绍 (5) 2.2.2时钟电路与复位电路 (5) 2.2.3单片机的工作方式 (6) 2.2.4单片机最小系统 (7) 2.3温度采集电路设计 (7) 2.3.1 传感器的选用 (7) 2.3.2 温度传感器DS18B20简介 (8) 2.4键盘控制电路设计 (11) 2.4.1 键盘控制的主要功能 (11) 2.4.2 键盘电路设计 (11) 2.5液晶显示电路设计 (13) 2.5.1 LCD1602液晶显示模块 (13) 2.6报警电路设计 (15)

实习心得体会通用版3篇(完整版)

实习心得体会通用版3篇 实习心得体会通用版3篇 实习心得体会通用版一: 经过这段时间的实习,我主要有以下几点感想: 第一,要有坚持不懈的精神 作为在校生,我们不管到哪家公司,一开始都不会立刻给工作我们做,一般都是先让我们熟悉公司的工作环境,时间短的要几天,时间长的要几周,或更长的时间,在这段时间里很多人会觉得很无聊,没事可做,便会产生离开的念头,在这个时候我们一定要坚持,不能轻易放弃。 第 二,要勤劳,任劳任怨 我们到公司去实习,由于我们不是正式职员,所以公司多数是把我们当学生看待。公司在这个期间一般不会给我们什么重要的工作去做,可又不想让我们闲着,因此,他们会交给我们一些比较简单的工作。与此同时,我们应该自己主动找一些事情来做,从小事做起,刚开始也只有这样。 第 三,要虚心学习,不耻下问 在工作过程中,我们肯定会碰到很多的问题,有很多是我们所不懂的,不懂的东西我们就要虚心向同事请教,当别人教我们知识的时候,我们也应该虚心地接受。同时,我们也不要怕犯错。每一个人都有犯错的时候,工作中第一次做错了不要紧,重要的是知错能改。

第 四,要确立明确的目标,并端正自己的态度 平时,我们不管做什么事,都要明确自己的目标,就像我们到公司工作以后,要知道自己能否胜任这份工作,关键是看你自己对待工作的态度,态度对了,即使自己以前没学过的知识也可以在工作中逐渐的掌握。因此,要树立正确的目标,在实现目标的过程中一定要多看别人怎样做,多听别人怎样说,多想自己应该怎样做,然后自己亲自动手去多做。只有这样我们才能把事情做好。 通过本次的实习,我还发现自己以前学习中所出现的一些薄弱环节,并为今后的学习指明了方向,同时也会为将来的工作打下一个良好的基础。,但这次的实习为我们提供了一个很好的锻炼机会,使我们及早了解一些相关知识以便以后运用到以后的业务中去。通过这次的实习,我熟练地掌握英语口语,能够自如地与外国人交流,同时让我懂得英语真的很重要,我知道只有通过刻苦的学习,加强对业务知识的熟练掌握程度,在现实的工作中才会得心应手,应对自如。 总体来说,这次实习不仅仅是锻炼了我在贸易操作方面的一些技能,同时,经过这次实习,我还从中学到了很多课本上所没有提及的知识,还有就是在就业心态上我也有很大的改变,以前我总想找一份适合自己爱好,并且专业对口的工作。可现在我们都知道找工作很难,要专业对口更难,很多东西我们初到社会才接触、才学习。所以我现在要建立起先就业再择业的就业观。应尽快学会在社会上独立,敢于参加与社会竞争,敢于承受社会压力,使自己能够在社会上快速成长。总的来说,作为一个快要毕业的大学生,无论是在今后的工作或是生活中,实习都将成为我人生中一笔重要的资本。

相关主题
文本预览
相关文档 最新文档