《校园智能路灯设计初探.docx》由会员分享,可在线阅读,更多相关《校园智能路灯设计初探.docx(29页珍藏版)》请在优知文库上搜索。
1、传感器与检测应用设计汇报试验名称:基于NRF24L01改)校园智能路灯课程设计一.设计名称基于NRF24L(H的校园智能路灯初步粗略设计方案二.摘要kWh,学校大多用电平局一度电在0.55元左右,因此,每晚一盏路灯所产生日勺电费大概在1.2-1.8元左右,大学校园如同一种小都市,每个学校日勺路灯至少上百盏,路灯的数量有时会到达上千盏甚至更多。这给学校每天的开销带来了一部分没必要时挥霍。节省校园照明用电消耗成为响应国家对于节能号召的重要措施之一。一般的校园照明系统只是运用一般的声控及光控传感器构成开环日勺控制系统,其灵活性差,功耗大,不可人为干预。而市场上闭环控制的照明系统投入资金大,稳定性差,
2、无法在校园中得到推广。三.设计目的1 .理解NRF24L01的基本通信原理2 .掌握StnI32f103芯片0AD转换原理3 .纯熟掌握光敏电阻的应用4 .将本学年所学知识进行一次综合汇总四.设计原理系统的设计重要有如下四个模块部分:微控制器STM32,光敏电阻模块,LED照明电路.无线射频模块。其中光敏电阻模块与LED照明电路构成检测照明部分,重要负责检测外界光的强度,人流高峰期会默认启动一般照明模式,夜间会默认启动节能模式。微控制器STM32负责搜集采集数据,以及AD转换,通过串口向PC机发送消息。无线射频模块负责向主机传递信息,当从机照明电路出现错误时会触发射频模块发射数据,不一样从机对
3、应不一样数据。发送完毕结束传播。1 .本设计的设计规定(1) .综合考虑选择是一主多从还是一从多主。(2) .硬件设计上应当考虑到滤波的重要性,构造尽量简朴实用,易于实现,使系统电路尽量简朴。(3) .软件设计必须要有完善日勺思绪,要充足考虑到多种传感器和无线收发器日勺时序,做到程序简朴,调试以便。(4) .通过软件设计尽量减少无线数据传播的误码率2 .重要硬件简介(1) .NRF24L01无线模块简介各管脚如下定义:8.IRQ7.MISO6.MOSI5.SCK4.CSN3.CE2. VCC1.GND详细阐明:3. CE芯片的模式控制线。在CSN为低的状况下,CE协同NRF24L01日勺CON
4、FIG寄存器共同决定NRF24L01日勺状态(参照NRF24L01的状态机)。4. CSN为芯片日勺片选线CSN为低电平芯片工作5. SCK为芯片控制的时钟线(SPI时钟)6. MOSI为芯片控制数据线(Masteroutputslaveinput)主输出从输入7. MISO芯片控制数据线(Masterinputslaveoutput)主输入从输出8. IRQ中断信号引脚。中断时变为低电平,即NRF24L01内部发生中断时IRQ引脚从高电平变为低电平。引脚会在如下三种状况变低:TxFIFO发完并且收到ACK(使能ACK状况下)、RxFIFO收到数据、到达最大重发次数。中断:nRF24L01日勺
5、中断引脚(IRQ)为低电平触发,当状态寄存器中TX_DS(数据发送完毕中断位)、RX-DR(接受数据中断位)或MAX_RT(到达最多次重发中断位)为高时触发中断。当MCU给中断源写1时,中断引脚被严禁。可屏蔽中断可以被IRQ中断屏蔽。通过设置可屏蔽中断位为高,则中断响应被严禁。默认状态下所有的中断源是被严禁叽系统构造框图如下所示STM32微控制器L)1STM32 微控制器 )NRF24L01通道五.设计原理NRF24L01工作原理发射数据时,首先将nRF24L01配置为发射模式:接着把接受节点地址TX_ADDR和有效数据TX_PLD按照时序由SPl口写入nRF24L01缓存区,TX_PLD必须
6、在CSN为低时持续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少IOus,延迟130US后发射数据;若自动应答启动,那么nRF24L01在发射数据后立即进入接受模式,接受应答信号(自动应答接受地址应当与接受节点地址TX_ADDR一致)。假如收到应答,则认为本次通信成功,TXDS置高,同步TXPLD从TXFIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已启动),若重发次数(ARC)到达上限,MAX_RT置高,TXFIFO中数据保留以便在次重发;MAX_RT或TX_DS置高时,使IRQ变低,产生中断,告知MCU。最终发射成功时,若CE为低则nRF24L01进入
7、空闲模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入空闲模式2。接受数据时,首先将nRF24L01配置为接受模式,接着延迟130s进入接受状态等待数据时到来。当接受方检测到有效的地址和CRC时,就将数据包存储在RXFlFO中,同步中断标志位RX_DR置高,IRQ变低,产生中断,告知MCU去取数据。若此时自动应答启动,接受方则同步进入发射状态回传应答信号。最终接受成功时,若CE变低,则nRF24L01进入空闲模式1。在写寄存器之前一定要进入待机模式或掉电模式。如下图,给出SPI操作及时序图:CSN一泯三三O三三O三三LMoSl亚MlSoB00EH迎05
8、00000回旺面上图2.4SPI读操作CSN1sex-m三三m三三三u三三三LSPI口为同步串行通信接口,最大传播速率为10Mb/s,传播时先传送低位字节,再传送高位字节。但针对单个字节而言,要先送高位再送低位。与SPl有关的指令共有8个,使用时这些控制指令由nRF24L01MOSI输入。对应的状态和数据信息是从MISO输出给MCU。11RF24L01所有的配置字都由配置寄存器定义,这些配置寄存器可通过SPl口访问。nRF24L01的配置寄存器共有25个,常用时配置寄存器如表2所示。表2:常用配置寄存器地址(三)寄存器名称功能00CONFIG设置24L01工作模式01EN_AA设置接受通道及自
9、动应答02ENRXADDR使能接受通道地址03SETUP_AW设置地址宽度04SETUP_RETR设置自动重发数据时间和次数07STATUS状态寄存器,用来鉴定工作状态0A0FRX_ADDR_P0P5设置接受通道地址10TX_ADDR设置接受接点地址116RX_PW_P0P5设置接受通道的有效数据宽度六.硬件电路图(1).NRF24L01原理图GND三U23V3I_NRFCEPG67538642TPG7NRFCSSPI2SCKPB13PB15SPI2MOSISPI2MISOPB14PG8NRFJRQNRF2401NRF2401无线模块接口DC NKSSOQNcescoirG Uccsmmni1
10、234-5678工 ID一 T.光敏电阻模块原理图IOK:104光敏电阻(3).硬件电路连接图七.程序源码及分析(1),主机程序主机程序重要实现当三个从机中在时间触发的状况下进行AD采集带电压并且返回给主机,主机进行错误判断一号路灯出现问题时候,主机会通过串口向PC段发送数据,主机端监视助手会进行判断,对应的对应时灯会出现亮灭以及闪烁状态。以到达提醒维修人员及时检查维修路灯。程序部分如下所示/错误检测NRFRXModeO;printf(,Receivemodern,z);if(NRF_Rx_Dat(rxbuf)=RX_DR),else(Printf(接受失败rn);)第一种路灯出现问题if(r
11、xbufO=JCl0&rxbuf1=JC11&rxbuf2=JCl)(bzl=l;USART_SendData(USARTl,0x01);whiIe(USART-GetFlagStatus(USRT1,USART_FLAGJrXE)=RESET);delayms(10);Printf(出错请检查路灯rn);memcpy(rxbuf,,12);printf(/%drnz,rxbuf0);printf(/%drn,jrxbufl);printf(,z%drnzz,rxbuf2);)第二个路灯出现问题elseif(rxbuf0=JC20&rxbuf1=JC21&rxbuf2=JC22)(bz2=l;
12、USART_SendData(USART1,0x02);whiIe(USART-GetFlagStatus(USARTl,USART_FLAG_TXE)=RESET);delay_ms(10);Printf(出错请检查路灯rr);InenICPy(rxbuf,,12);printf(,,%drn,/,rxbuf0);printfCz%dr11,z,rxbuf1);printf(z,%dr11z,rxbuf2);)第三个路灯出现问题elseif(rxbuf0=JC30&rxbuf1=JC31&rxbuf2=JC3)bz3=l;USART_SendData(USART1,0x03);whiIe(U
13、SART-GetFlagStatus(USRT1,USART_FLAGJrXE)=RESET);delay_ms(10);Printf(出错请检查路灯rn);memcpy(rxbuf,,z,,12);Printf(drn,rxbuf0);printf(zz%dr11z,rxbuf1);printf(zz%drnz,rxbuf2);)路灯一和路灯二出现问题elseif(bzlfebz2-1)(USRT-SendData(USART1,0x04);whiIe(USART-GetFlagStatus(USRT1,USART_FLAGJrXE)=RESET);delay_ms(10);bzl=O;bz
14、2=0;)路灯二和路灯三出现问题elseif(bz2&bz3=l)USART_SendData(USART1,0x05);whiIe(USART-GetFlagStatus(USRT1,USART_FLAGJrXE)=RESET);delay_ms(10);bz2=0;bz3=0;)路灯一和路灯三出现问题elseif(bzl&bz3=l)(USART_SendData(USART1,0x06);while(USART-GetFlagStatus(USART1,USART_FLAGJrXE)=RESET);delay_ms(10);bzl=O;bz3=0;)路灯一.路灯二.路灯三出现问题elseif(bzl&bz2&bz3=l)USART_SendData(USARTl,0x07);whiIe(USART-GetFlagStatus(USRT1,USART_FLAGJrXE)=RESET);delay_ms(10);