基于单片机无线防丢报警器设计过程分享
目錄
【功能介紹】
【原理圖】
【PCB】
【實物圖】
【元器件清單】
【源代碼】
【模塊介紹】
【參考資料】
【參考文獻】
【功能介紹】
本設計利用51單片機結合NRF24L01無線模塊進行設計,防丟器分為兩個部分,分為從機和主機,即發射模塊和接收模塊,從機放在怕被丟失的物件上,而主機則攜帶在主人身上,可以實現兩大功能:
- 超出兩個模塊的通信距離會報警,及時通知主機,防止從機丟失;
- 在兩個模塊的通信范圍內,從機不知道在哪,主機可以發起尋找。
【原理圖】
發送模塊原理圖
接收模塊原理圖
? ? ? ? ?原理圖發送模塊與接受模塊差異點是接收模塊少一個按鍵,其他都一樣,都有單片機最小系統,指示燈電路,蜂鳴器電路,無線模塊,串口電路。如需詳細資料可私信作者或加微信biyezhan007
【PCB】
發送模塊
?接收模塊
【實物圖】
?
【元器件清單】
- 單片機底座*2
- 單片機*2
- 晶振*2
- 瓷片電容*4
- 電阻*4
- 電解電容*2
- 四腳按鍵*3
- 電源座*2
- LED燈*4
- DIP8底座*2
- NRF24L01模塊*2
- 蜂鳴器*2
- 三極管*2
【源代碼】
//發送端main.c#include "nRF24L01.h" //包含頭文件 #include "def.h" //包含頭文件void Delay_1(unsigned int s) //延時函數 {unsigned int i;for(i=0; i<s; i++);for(i=0; i<s; i++); } void delay(unsigned int z) //延時函數 {unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); }void main(void) //主函數 {unsigned int flag; //定義變量unsigned char t =0,flag_1;unsigned char TxBuf[20]={0}; // 數據暫存數組unsigned char RxBuf[20]={0}; a: init_io() ; //初始化flag_1=0;flag=0; //變量清零TxBuf[0]='c'; //發送數據cwhile(1) //進入循環{//SetRX_Mode();if(KEY1 ==0 ) //按下按鍵{TxBuf[0]=0;TxBuf[1]=1; //發送01}else //按鍵沒有按下{TxBuf[0]=1;TxBuf[1]=1; //發送11}nRF24L01_TxPacket(TxBuf); // 發送緩沖區數據SetRX_Mode(); //發送完數據后設置成接收模式if(nRF24L01_RxPacket(RxBuf)) //如果接收緩沖區有數據{nRF24L01_TxPacket(TxBuf); // 發送緩沖區數據 flag=0;flag_1=0; //變量清零}else //接收緩沖區無數據,也就是沒有接收到數據{flag++; //計時變量加if(flag>=80) //加到80flag_1=1; //變量置1delay(5); //計時分辨率是5ms,計80次就是80*5=400ms}if(flag_1) //如果變量為1,計時400ms,開啟報警for(t=0;t<20;t++) //for循環控制燈和蜂鳴器報警{LED2=~LED2;LED1=~LED1; //取反,達到閃爍的效果delay(80); //延時80msif(t==19) //t加到19時{goto a; //回到while前面的a:flag_1=0;flag=0;}}} } //接收端main.c#include "reg52.h" #include "nRF24L01.h" #include "def.h"#include "delay.h" //包含頭文件uchar count_1,count_2,count_3,count,miao,fen,fen_1,fen_2,fen_3,flag_1,flag_2,flag_3; //定義全局變量void Delay_1(unsigned int s) //延時函數 {unsigned int i;for(i=0; i<s; i++);for(i=0; i<s; i++); } void delay(unsigned int z) //延時函數 {unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); }void main(void) //主函數 {unsigned int flag,f=1000; //定義變量unsigned char t ,flag_1;unsigned char TxBuf[20]={0}; //緩沖區數據清零 unsigned char RxBuf[20]={0}; init_io() ; //初始化while(1) //進入循環{TxBuf[0] = 0;TxBuf[1] = 1; //發送數據01SetRX_Mode(); //設置接收模式if(nRF24L01_RxPacket(RxBuf)) //如果接收緩沖區有數據{ nRF24L01_TxPacket(TxBuf); //發送緩沖區數據if( RxBuf[0]==0&&RxBuf[1]==1) //如果接收的數據是01{ for(t=0;t<10;t++) //控制燈和震動工作閃爍{LED1=~LED1;LED2=~LED2; //取反delay(50); //延時}}RxBuf[0]= 0;RxBuf[1] = 0x00; //接收緩沖區數據清零flag=0;flag_1=0; //變量清零}else //接收緩沖區無數據{flag++; //計時開始if(flag==200) //計時到1秒(200*5ms){flag_1=1; //變量置1}delay(5); //5ms延時}if(flag_1) //如果超時沒有接收數據,就開啟報警for(t=0;t<10;t++) //for循環啟動報警{LED2=~LED2; //閃爍報警delay(50); //延時if(t==9) //閃爍一個周期{flag_1=0; //變量清零,返回后再次判斷是否有信號,如無信號,繼續報警flag=0;}}} }【模塊介紹】
? ? ? ? 此次防丟器所用的無線模塊為nRF24L01,nRF24L01是由NORDIC生產的一款工作頻率在2.4~2.5GHzISM之間的新型單片射頻收發器件,幾乎可以連接到各種單片機芯片,并完成無線數據傳送工作,nRF24L01內部包含的模塊分別為頻率合成器、功率放大器、晶體振蕩器與調制器,并與增強型的ShockBurst技術結合,可以通過SPI接口對其輸出功率、頻道選擇與協議進行設置,因為nRF24L01有極低的工作電流,不僅功耗較低,而且處于其他低功率工作模式時,即掉電模式和待機模式下電流消耗更低,在節能設計方面占有足夠大的優勢。
【參考資料】
【參考文獻】
[1]肖金球,馮翼.增強型51單片機與仿真技術[M].北京:清華大學出版社社,?
[2]肖金球.單片機原理與接口技術[M].北京:清華大學出版社,2004,17-128.?
[3]周鴻武.基于單片機的酒精濃度檢測儀設計[J].制造業自動化2012,02.?
[4]?康華光.電子技術基礎模擬部分(第五版)[M].高等教育出版社,2006年
[5]?康華光.電子技術基礎數字部分(第五版)[M].高等教育出版社,2006年
[6]?紀宗南.單片機外圍器件使用手冊—輸入通道器件分冊[M].北京航空航天大學出版社,2005年?
[7]賈伯年.傳感器技術[M].東南大學出版社,2000年
[8]何希才.傳感器及其應用[M].國防工業出版社,2001年
[9]鄭學堅.微型計算機原理及應用[M].清華大學出版社,2006年
[10]張水利.?單片機原理及應用.?黃河水利出版社,出版年:2008年8月?
[11]譚浩強.?C程序設計.?第三版.?清華大學出版社,出版年:2005年7月
?? ? ? ?本文介紹了在設計的過程的關鍵點,供大家參考學習,如需獲取實物、或者下載鏈接失效、對其他單片機硬件設計感興趣、有不明白的或者錯誤的,可以添加徽信biyezhan007?
鄭重聲明,此文章提供給大家做參考模板,杜絕一切不良學術不良行為。
?
?????????最后說一下,如果大家對硬件和編程感興趣,可以點擊??途W這個連接看看,是個不錯的學習網站,是學長推薦給我的,因為之前找工作的時候沒有太多經驗,也不知道怎么準備,去哪里搜資源,走了很多彎路,所以推薦給大家,當初在上面大量刷題還看了好多面試經驗等,反正上面有很多課程+刷題+面經+求職+討論區等資源,關鍵里面的資源全部公開免費,不用花錢,希望能幫助家!????
未經作者允許,不得抄襲轉載,轉載或有問題請私信或微信作者。
總結
以上是生活随笔為你收集整理的基于单片机无线防丢报警器设计过程分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java并发编程笔记之ThreadLoc
- 下一篇: 汇编软件的安装与实验一