无线传感网络课件

上传人:痛*** 文档编号:241902730 上传时间:2024-08-04 格式:PPTX 页数:71 大小:14.51MB
返回 下载 相关 举报
无线传感网络课件_第1页
第1页 / 共71页
无线传感网络课件_第2页
第2页 / 共71页
无线传感网络课件_第3页
第3页 / 共71页
点击查看更多>>
资源描述
无线传感网络(WSN)无线传感网络(WSN)无线传感网络关键词英文:Wireless Sensors Networking传感无线网络无线传感网络关键词英文:Wireless Sensors N概念无线传感器网络是一种分布式传感网络,它的末梢是可以感知和检查外部世无线传感器网络是一种分布式传感网络,它的末梢是可以感知和检查外部世界的传感器。界的传感器。WSNWSN中的传感器通过无线方式通信,因此网络设置灵活,设备位中的传感器通过无线方式通信,因此网络设置灵活,设备位置可以随时更改,还可以跟互联网进行有线或无线方式的连接。通过无线通置可以随时更改,还可以跟互联网进行有线或无线方式的连接。通过无线通信方式形成的一个多跳自组织网络。信方式形成的一个多跳自组织网络。概念无线传感器网络是一种分布式传感网络,它的末梢是可以感知和无线传感网络课件课程内容传感技术应用无线传感网络通信基础无线传感网络应用课程内容传感技术应用考核办法平时成绩:20%期末大作业:80%考核办法平时成绩:20%Zigduino开发平台Arduino体系优点:易上手,可实现快速应用单片机开发实质:配置寄存器Zigduino开发平台Arduino体系硬件平台硬件平台无线传感网络课件无线传感网络课件软件平台Eclipse,相比Arduino IDE、KEIL、IARArduino程序特点软件平台Eclipse,相比Arduino IDE、KEILArduino核心库函数和系统库函数void setup()/void setup()/初始化配置函数,在初始化配置函数,在mainmain函数中首先函数中首先被执行,只执行一次被执行,只执行一次void loop()/void loop()/无限循环函数无限循环函数delay()/delay()/延迟函数延迟函数Arduino核心库函数和系统库函数void setup()Zigduino基础实验通用数字IO口点亮LED串口的使用ADC口光敏传感器控制外部中断点亮LED定时器的使用1602型LCD的应用Zigduino基础实验通用数字IO口点亮LED常用传感器驱动开发和应用DHT11:温湿度传感器ADXL345:三轴加速度传感器BH1750FVI:光照传感器DS18B20:温度传感器常用传感器驱动开发和应用DHT11:温湿度传感器单片机IO接口I/O口是输入/输出的简写,I/O口分数字I/O口和外设I/O口两种。外设I/O口有ADC接口,TIMER接口(时钟),中断接口,I2C接口,串口等等。一个芯片的I/O口引脚是用于数字I/O口还是外设I/O口,可以通过寄存器配置进行选择。单片机IO接口I/O口是输入/输出的简写,I/O口分数字I/IO口实验一第一步:连接电路 数字IO口实验一 IO口实验一第一步:数字IO口实验一IO口实验一第二步:写程序,新建名字叫IO1的工程项目;在setup()函数里面写入:在loop()函数里面写入:pinMode(3,OUTPUT);digitalWrite(3,HIGH);delay(1000);/延时1000msdigitalWrite(3,LOW);delay(1000);怎么理解delay()函数?就好像一个要走路的人在原地踏步!MCU一旦上电,根本停不下来IO口实验一第二步:写程序,新建名字叫IO1的工程项目;piArduino包含的以下数字IO口库函数void pinMode(uint8_t pin,uint8_t mode)void pinMode(uint8_t pin,uint8_t mode):设置管脚的方向,:设置管脚的方向,pinpin表示管脚的序号表示管脚的序号,mode,mode表示方向,只能取表示方向,只能取INPUTINPUT,OUTPUTOUTPUT两个两个值值,如下面的代码把管脚如下面的代码把管脚1010设成输入:设成输入:pinMode(10,INPUT);void digitalWrite(uint8_t pin,uint8_t val)void digitalWrite(uint8_t pin,uint8_t val):设置管脚的:设置管脚的数字电平数字电平,pin,pin表示管脚的序号表示管脚的序号,value,value表示电平,只能取表示电平,只能取HIGHHIGH,LOWLOW两个值,如下面的代码把管脚两个值,如下面的代码把管脚5 5设成高电平:设成高电平:digitalWrite(5,HIGH);int digitalRead(uint8_t pin)int digitalRead(uint8_t pin):返回管脚的数字电平:返回管脚的数字电平,pin,pin表表示管脚的序号示管脚的序号,返回值只能是返回值只能是HIGHHIGH或或LOWLOW,如下面的代码将返回管,如下面的代码将返回管脚脚7 7的数字电平:的数字电平:val=digitalRead(7);Arduino包含的以下数字IO口库函数void pinMoIO口实验二电路连接IO口实验二电路连接新建IO2工程项目下载程序后,LED红灯亮了。然后你用黑色导线的另外一端插入到GND即地,此时就可以发现灯灭了,因为3号引脚读取的电平是低电平。(默认情况下管脚输入的读取值是高电平)#include io2.h#include io2.hvoid setup()pinMode(3,OUTPUT);/配置3号数字引脚为输出模式pinMode(1,INPUT);/配置1号数字引脚为输入模式 void loop()if(digitalRead(1)/读取1号引脚的电平判断是否为高电平digitalWrite(3,HIGH);/将3号引脚的电平设置为高电平else /否则digitalWrite(3,LOW);/将3号引脚的电平设置为低电平 新建IO2工程项目下载程序后,LED红灯亮了。然后你用黑色导总结数字IO口既可以是输入,也可以是输出。但是无论是输入还是输出,它是都是数字型的,要么是0(零电压LOW),要么是1(电源电压HIGH)。当它为高电平即电源电压,它相当于电源正极,但是它的输出电流受限于单片机IO口。为低电平时,相当于GND即地。总结数字IO口既可以是输入,也可以是输出。但是无论是输入还是(UART)串口:串行通信接口(UART)串口:串行通信接口无线传感网络课件无线传感网络课件Zigduino里面串口串口的英文单词用Serial串口通信有两个方向:发送和接收串口有一个参数:波特率,(单位是bps)即数据通信的传输速率。常用波特率数值有(300、600、1200、2400、4800、9600、19200、38400、43000、56000、57600、115200bps)。通信的接收方需要设置与发送方一致的波特率才可以正确接收到数据。假定我们自己是单片机,单片机读,是输入;写则是输出。Zigduino里面串口的英文单词用Serial串口通信有串口库函数void void begin(unsigned long baud):begin(unsigned long baud):串口使能,并工作在数值为串口使能,并工作在数值为baudbaud的波特率下,如下面的代码启动了的波特率下,如下面的代码启动了UARTUART,并工作在,并工作在5760057600的波特率下:的波特率下:Serial.begin(57600);int int available(void):available(void):返回串口缓冲区中有多少字节没有读取的数据;返回串口缓冲区中有多少字节没有读取的数据;int int read(void)read(void):返回串口读取到的当前数据,同时从缓冲区中删除此数据;返回串口读取到的当前数据,同时从缓冲区中删除此数据;size_t size_t write(uint8_t)write(uint8_t):往串口写入一个字节;:往串口写入一个字节;size_t size_t write(const char*str)write(const char*str):往串口写入一个字符串;:往串口写入一个字符串;size_t size_t write(const uint8_t*buffer,size_t size)write(const uint8_t*buffer,size_t size):往串口写入一个字节数组的前面的大小为:往串口写入一个字节数组的前面的大小为sizesize的部的部分;分;print(data)print(data):往串口写入数据,可以是数字型的也可以是字符串;:往串口写入数据,可以是数字型的也可以是字符串;print(data,encoding)print(data,encoding):往串口写入格式化数值数据,往串口写入格式化数值数据,encoding encoding 可以是十进制可以是十进制(DEC)(DEC),十六进制(,十六进制(HEXHEX),),八进制(八进制(OCTOCT),二进制(),二进制(BINBIN),字符(),字符(BYTEBYTE),如下面的输出;),如下面的输出;Serial.print(75);/Serial.print(75);/输出输出75 75 Serial.print(75,DEC);/Serial.print(75,DEC);/输出输出75 75 Serial.print(75,HEX);/Serial.print(75,HEX);/输出输出4B 4B Serial.print(75,OCT);/Serial.print(75,OCT);/输出输出113 113 Serial.print(75,BIN);/Serial.print(75,BIN);/输出输出1001011 1001011 Serial.print(75,BYTE);/Serial.print(75,BYTE);/输出输出KK,7575代表的字符代表的字符println(data)println(data):和和print(data)print(data)基本相同,不过在最后加上了回车换行。基本相同,不过在最后加上了回车换行。串口库函数void begin(unsigned long 串口实验一:Serial.print和Serial.write的区别int i=52;int i=52;void setup()void setup()Serial.begin(57600);void loop()void loop()Serial.print(i);Serial.println();Serial.write(i);Serial.println();delay(1000);Serial.print()打印的是原来的内容;而Serial.write()打印出来的是ASCII码值串口实验一:Serial.print和Serial.wri串口实验二:实现单片机与计算机之间的串口通信台式机也有串口,所以可以与单片机通信只需要usb线连接台式机和单片机开发板就可以了用到AcessPort串口软件这里程序的功能是将计算机发给单片机的数据发回给计算机串口实验二:实现单片机与计算机之间的串口通信台式机也有串口思考:为什么这里Serial.write没有打印出ASCII码值?void setup()void setup()Serial.begin(57600);void loop()void loop()while(Serial.available()while(Serial.available()Serial.write(Serial.read();delay(1000);思考:为什么这里Serial.write没有打印出ASCIADCADC,英文解释为Analog-Digit Convert(模拟数字转换),简单意思是单片机可以读取外部的模拟电压值转化成数字值。ADCADC,英文解释为Analog-Digit ConveZigduino一共有6个AD管脚即模拟输入管脚为了实现Zigduino管脚的模拟输入,我们需要了解最基本的AD采样。所谓AD采样就是把模拟信号转换成数字信号,在转化的过程中需要关注采样精度、采样频率和采样范围,对于Zigduino使用的Atmega128RFA1来说,它内置的是10位的AD采样精度,即采集出来的数值范围是0-1023,采样频率则和应用程序相关,但最快不能超过MCU的限制,采样范围表示的是允许的模拟信号的幅度。对于Atmega128RFA1来说,用户可以选择1.5V,1.6V,1.8V或任意外部输入的在0-1.8V之间的电压作为参考电压,也是采样的最高电压,iDuino默认的采样范围是0-1.8V,用户可以通过下面的函数来改变参考电压:void void analogReference(uint8_t mode)analogReference(uint8_t mode)其中mode可选列表如下:INTERNAL1V5:1.5V内部参考电压;INTERNAL1V6:1.6V内部参考电压;DEFAULT:默认内部1.8V参考电压;EXTERNAL:通过AREF管脚输入的外部参考电压。Zigduino一共有6个AD管脚即模拟输入管脚为了实现Ziint analogRead(uint8_t pin)int analogRead(uint8_t pin):返回管脚的模拟电平:返回管脚的模拟电平,即即ADAD采样的结果,只能用采样的结果,只能用在模拟管脚上,在模拟管脚上,pinpin表示管脚的序号表示管脚的序号,返回值的范围是返回值的范围是0-10230-1023,如下面的代码将,如下面的代码将返回管脚返回管脚A0A0的采样结果:的采样结果:val=analogRead(A0);int analogRead(uint8_t pin):返回在实际应用中,对于某些温敏、光敏、压敏、热敏传感器来说,为了测出它们的电阻变化,必要的分压电路也是必须的,下面是一个简单的光敏测量电路:IO口D1拉高,相当于电源。为了使信号的输入符合Zigduino的电压采样范围,对信号进行必要的分压是必须的。在实际应用中,对于某些温敏、光敏、压敏、热敏传感器来说,为了ADC实验一:自动光感led灯用到的元器件:电阻470欧姆一个,(左)用于限流。电阻2K欧姆一个,(右)用于分压。10k光敏电阻一个Led一个导线5根ADC实验一:自动光感led灯用到的元器件:THANK YOUSUCCESS2024/8/436可编辑THANK YOUSUCCESS2023/7/293程序int sensevalue=0;int sensevalue=0;void setup()void setup()pinMode(0,OUTPUT);pinMode(1,OUTPUT);Serial.begin(38400);void loop()void loop()digitalWrite(0,HIGH);/供电sensevalue=analogRead(A1);/读取ADC0口模拟值if(sensevalue500)if(sensevalue500)digitalWrite(1,HIGH);/当光线暗时,点亮led灯elseelsedigitalWrite(1,LOW);Serial.print(sensevalue);delay(1000);串口可以调试你的程序,很方便程序int sensevalue=0;串口可以调试你的程序,中断Interrupt(INT)什么是中断中断的类型中断三要素中断作用中断Interrupt(INT)什么是中断什么是中断 单片机暂停正在运行的程序,保存现场,自动转去执行相应的程序,执行完以后再返回断点继续执行被打断的程序。这个过程就叫中断。什么是中断 单片机暂停正在运行的程序,保存现场,自动中断的类型可分为:内部中断和外部中断内部中断有:内部定时器中断、串口中断、AD中断、SPI中断等。这些设备或者接口都集成在单片机内部。外部中断有:外部信号引起的中断中断的类型可分为:内部中断和外部中断中断三要素1.中断源:中断产生的来源。2.中断方式(外部中断):高电平、低电平、上升沿、下降沿等。3.中断服务程序:中断产生以后,单片机去执行的程序。中断三要素中断源:中断产生的来源。中断如何使用三个步骤:1.设置需要开启的中断源。2.设置中断方式。3.编写中断服务程序。中断如何使用三个步骤:中断的作用中断使得单片机实现系统调度,实时响应。使用中断,可以实现定时报警、外部中断报警等功能。中断的作用中断使得单片机实现系统调度,实时响应。中断库函数void attachInterrupt(uint8_t interruptNum,void void attachInterrupt(uint8_t interruptNum,void(*userFunc)(void),int mode)(*userFunc)(void),int mode)其中的第一个参数表示Arduino中的中断号,第二个参数是中断处理函数名称(需要用户定义),第三个参数是中断模式,就是什么情况下触发中断,一共有四种模式:LOWLOW表示低表示低电平触发,电平触发,CHANGECHANGE表示电平改变时触发,表示电平改变时触发,RISINGRISING表示电平由低变高时触表示电平由低变高时触发,发,FALLINGFALLING表示电平由高变低时触发。表示电平由高变低时触发。void detachInterrupt(uint8_t interruptNum)void detachInterrupt(uint8_t interruptNum)有些中断是会持续产生的,如低电平产生的中断,此时如果不加以控制,系统会陷入持续的中断处理中,为此在处理中断函数时首先需要把中断禁止掉,detachInterrupt就是用于完成此目标,后面的唯一参数就是中断号。中断库函数void attachInterrupt(uint外部中断的中断号与管脚号对照表中断号中断号INT0INT1INT2INT3INT4INT5INT6管脚号632122012外部中断的中断号与管脚号对照表中断号INT0INT1INT2中断实验用一个按键开关连接到一个外部中断口,当中断触发时就改变一次led灯的状态中断实验用一个按键开关连接到一个外部中断口,当中断触发时就改代码void myhanlder()/中断服务程序 detachInterrupt(1);/关中断digitalWrite(0,!digitalRead(0);/将led灯的状态改变一次 void setup()pinMode(0,OUTPUT);pinMode(3,INPUT_PULLUP);/将中断口上拉 void loop()attachInterrupt(1,myhanlder,FALLING);/开中断,设置中断触发方式为下降沿方式delay(1000);attachInterrupt(1,attachInterrupt(1,myhanlder,FALLING)myhanlder,FALLING)表示表示的是当由下降沿触发的中的是当由下降沿触发的中断断1 1产生时系统会自动去执产生时系统会自动去执行行myhanldermyhanlder函数,从而让函数,从而让绿灯的状态发生变化。绿灯的状态发生变化。代码void myhanlder()/中断服务程序att扩展实验将INT1的中断触发方式设置成低电平触发,并实现当触发中断时打印出“interrupt triggered!”扩展实验将INT1的中断触发方式设置成低电平触发,并实现当触总计外部中断总共有8个,它们可以组合起来使用。总计外部中断总共有8个,它们可以组合起来使用。定时/计数器定时器/计数器(Timer/Counter,TC)是一种计数装置,若计数内部的时钟脉冲,可视为定时器;若计数外部的脉冲,可视为计数器。实质都是计数。定时/计数器定时器/计数器(Timer/Counter,TC定时器(Timer)定时功能也是通过计数器的计数来实现的。不过此时的计数脉冲来自单片机的内部。每个机器周期产生一个计数脉冲,也就是每个机器周期计数器加1。定时器(Timer)定时功能也是通过计数器的计数来实现的。不定时器中断定时器的应用之一:设置内部定时器中断原理:专门有一个寄存器(8位或12位或16位)存放计数,每个机器周期计数器加1,加满就产生计数溢出中断。定时器中断定时器的应用之一:设置内部定时器中断设置一个一秒一次的定时器中断,改变一次led的状态。定时器中断设置一个一秒一次的定时器中断,改变一次led的状态。定时器中TimerOne实例#include TimerOne.hvoid callback()digitalWrite(3,!digitalRead(3);void setup()pinMode(3,OUTPUT);Timer1.initialize(500000);/初始化定时器1,设置中断周期为半秒 Timer1.attachInterrupt(callback);/设置一个定时器溢出中断服务程序void loop()/your program here.TimerOne实例#include TimerOne.hLCD1602工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。LCD1602工业字符型液晶,能够同时显示16x02即32个 引脚1602采用标准的16脚接口,其中:第1脚:GND为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。引脚1602采用标准的16脚接口,其中:字符集1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。字符集1602液晶模块内部的字符发生存储器(CGROM)已经写0 x38设置为8-bit接口.写0 x06输入方式设定写0 x0E开启显示屏写0 x01屏幕清空写0 x80设置显示位置写0 x01屏幕清空写0 x8x或0 xCx写数据写0 x01或0 x02屏幕清空,光标位置归零或者新文字替换老文字写数据写0 x38写0 x06写0 x0E写0 x01写0 x80写0 x01无线传感网络课件ZIGBEE无线通信原理短距离、低功耗、低速率的无线组网通信技术可使用2.42.485G之间的16个频段通信zigbeewifi频段2.4G、900M等2.4G、5G等距离(最远)300m20m数据通信速率 250k10M/100MZIGBEE无线通信原理短距离、低功耗、低速率的无线组网通信无线通信数据包格式包头包类型目的地址源地址有效数据包结束1字节1字节4字节4字节1-116字节1字节l只有在同一频段的无线节点之间才能进行数据收发。无线通信数据包格式包头包类型目的地址源地址有效数据包结束1字ZigduinoRadio库使用说明1.初始化ZigduinoRadio库 void begin(int chan);以上函数必须在使用ZigduinoRadio之前调用。chan表示通讯频段,取值范围是11-26ZigduinoRadio库使用说明1.初始化ZigduiZigduinoRadio库使用说明2.发送数据包 发送数据有一般模式和精简模式两种,不管在何种模式下,都是以数据包为最小传输单位。在复杂模式下,发送数据需要三步:开始发送 void beginTransmission();void beginTransmission(uint16_t destaddress);写入数据前,用户必须调用beginTransmission方法,传入参数表示目标地址,如果没有参数,则表示发送广播数据。写入要发送的数据 void write(uint8_t c);void write(char*str);void write(uint8_t*arr,uint8_t len);在一个数据包内,用户可以写入多种数据,但802.15.4/c标准规定一个数据包的最大长度为128,再加上包头9个字节和包尾2个字节的数据,实际的有效数据最大为128-9-2=116。结束发送 void endTransmission();void cancelTransmission();用户可以调用endTransmission真正发送数据,也可以通过cancelTransmission取消数据发送。在精简模式下,用户只需调用以下方法即可:Void sendFrame(uint16_t destaddress,bool needack,uint8_t*frm,uint8_t len);其参数含义为目标地址,是否要求ack,数据内容和数据长度。ZigduinoRadio库使用说明2.发送数据包 3.接收数据包 ZigduinoRadio自带的接收处理方式和串口是一样的,用缓冲区先把数据保存下来,等待用户处理,此时,用户可以使用的函数如下:int8_t available();返回缓冲区中有多少有效数据,不包括包头包尾。int16_t read();读取当前数据,并从缓冲区中删除此数据,同样,它实际的数据类型是uint8_t,如果返回值是-1则表示缓冲区中已经没有数据。3.接收数据包 广播发送方发出的数据包,目的地址为0 xFFFF。接收方只要接收到广播数据包,都将收下来。广播发送方发出的数据包,目的地址为0 xFFFF。点对点收发实验一一方发送:每秒发送一次字符a一次一方接收:接收发送过来的a,并通过串口打印出来。点对点收发实验一一方发送:每秒发送一次字符a一次广播收发实验二一方发送,发送的内容是串口收到的数据一方接收,将发送的数据通过串口打印出来广播收发实验二一方发送,发送的内容是串口收到的数据广播收发实验三一方发送DHT11采集到的温湿度数据,5秒一次。一方接收,并通过串口打印出来,并在LCD1602或者四位数码管上显示。广播收发实验三一方发送DHT11采集到的温湿度数据,5秒一次广播收发实验四一方采集模拟光敏电阻,当光线暗时将无线发命令给另一方使其亮灯。广播收发实验四一方采集模拟光敏电阻,当光线暗时将无线发命令给THANK YOUSUCCESS2024/8/471可编辑THANK YOUSUCCESS2023/7/297
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!