找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9217|回復: 1
打印 上一主題 下一主題
收起左側(cè)

單片機循跡尋光滅火小車設(shè)計原理圖PCB+程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:444484 發(fā)表于 2018-12-11 21:51 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式




一、選題的背景與意義

最近幾十年中,大量的高層、地下建筑與大型的石化企業(yè)不斷涌現(xiàn)。由于這些建筑的特殊性,發(fā)生火災時,不能快速高效的滅火。為了解決這一問題,盡快救助火災中的受害者,最大限度的保證消防人員的安全,消防機器人研究被提到了議事日程。而機器人技術(shù)的發(fā)展也為這一要求的實現(xiàn)提供了技術(shù)上的保證,使得消防機器人應(yīng)運而生。
從二十世紀八十年代開始,世界許多國家都進行了消防機器人的研究。美國和蘇聯(lián)最早進行消防機器人的研究,而后日本、英國、法國等國家都紛紛開展了消防機器人的研究,目前已有多種不同類型的消防機器人用于各種火災場合。
從功能上劃分,目前的消防機器人有下列幾類:滅火機器人、偵察機器人、攀登營救機器人和救護機器人。從控制方式來分,消防機器人可分為遙控消防機器人和自主消防機器人。
我國從八十年代末期開始消防機器人的研究,公安部上海消防研究所等單位在消防機器人的研究中取得了大量的成果,"自行式消防炮"已經(jīng)投入市場,"履帶輪式消防滅火偵察機器人"也于2000年6月通過了國家驗收。但是,我國消防機器人的研究還處在初級階段,還有許多有待研究的問題。比如,高層建筑發(fā)生火災時,消防人員不可能在短時間內(nèi)到達高處的火災發(fā)生地點,在地下建筑中,由于環(huán)境比較潮濕,煙氣不易擴散,消防人員不容易快速的判定火源位置;而在石化企業(yè)發(fā)生火災時,將產(chǎn)生大量的毒氣,消防人員在滅火時極易中毒。研制能夠用于這些場合的偵察滅火機器人,協(xié)助消防人員進行火災的定位和滅火,將有極大的社會意義。

  • 研究內(nèi)容與擬解決的主要問

機器人控制器是一個多任務(wù)并行執(zhí)行的實時控制器。在軟件實現(xiàn)上,滅火機器人除了要協(xié)調(diào)控制各個不同功用的電機,還需要對紅外、光敏等多種傳感器接收的數(shù)據(jù)進行傳輸、處理等。采用c語言可以方便快捷的編寫程序。這里對滅火機器人的每種功能進行模塊化處理?傮w的思路是:在地面上貼一條隨意的黑線(可用黑膠布),機器人(小車)可以沿著這條黑線行走,不會到處亂跑,在機器人行走的途中放置火源(發(fā)光的燈泡),機器人在行走到火源附近能夠發(fā)現(xiàn)火源并能夠行走到火源附近進行滅火(小車上的風扇開始轉(zhuǎn)動),滅火后(風扇停止轉(zhuǎn)動)機器人還能回到原本設(shè)定的路線繼續(xù)往下行走。。。實現(xiàn)起來最基本的就是使機器人能夠順利沿著設(shè)定的路線進行直線行走和拐彎,這一模塊稱為尋跡(直行時四個輪子同時轉(zhuǎn)動,左轉(zhuǎn)時,左前左后輪子停止轉(zhuǎn)動,右前右后輪子轉(zhuǎn)動。右轉(zhuǎn)時,右前右后輪子停止轉(zhuǎn)動,左前左后輪子轉(zhuǎn)動。來實行各種轉(zhuǎn)彎)具體為:

  (1)若正前距離很大,同時右前的距離稍小時,右邊的紅外傳感器快離開檢測范圍,執(zhí)行左轉(zhuǎn)微調(diào);

  (2)若正前距離很大,同時右前的距離稍大時,右邊的紅外傳感器快離開檢測范圍,執(zhí)行右轉(zhuǎn)微調(diào);

  (3)若正前距離很大,右前距離適中,就直行;

  (4)若正前距離比較小,右前距離也比較小時,機器人左轉(zhuǎn);

  (5)右前距離很大時,機器人執(zhí)行右轉(zhuǎn)彎。

  其中:(1)~(3)保證了在走直線時可以走直,通過不斷調(diào)整,使機器人始終運行在黑線上面(4)~(5)保證了機器人順利拐彎。具體的參數(shù)必須在不斷試驗中反復調(diào)節(jié)。知道這個機器人可以順利的完成所指定的動作。

  • 技術(shù)路線、研究方案與可行性分析

     3.1技術(shù)路線

制造一個自主控制的機器人,它可以按照你給定的路線行走,找到光源并盡快的行走到光源附近,啟動風扇(相當于滅火),滅火后還可以按照以前的路線繼續(xù)前進。這個工作受地面摩擦、機器人慣性、機器人電機的轉(zhuǎn)數(shù)差、電壓變化等多個因素影響,它模擬了現(xiàn)實機器人處理火警的過程,燈泡代表燃起的火源,機器人必須找到并熄滅它。下面為機器人滅火的一般特性以及系統(tǒng)的構(gòu)成:

                 被控對象特性


3.2研究方案

本方案具有以下七個模塊組成:控制模塊、驅(qū)動模塊、傳感器模塊、滅火模塊、電源模塊、循線模塊、尋光模塊。

  • 控制模塊

采用STC89C52RC單片機作為本系統(tǒng)的核心控制芯片。能對其進行一系列處理,根據(jù)處理結(jié)果,驅(qū)動電機做相應(yīng)的運動,并能控制風扇轉(zhuǎn)動進行滅火操作。

  • 驅(qū)動模塊

驅(qū)動模塊采用L298芯片與兩個直流電機,該芯片能夠接收單片機發(fā)出的控制信號,同時驅(qū)動兩個直流電機運動。

3.  傳感器模塊

傳感器模塊采用紅外傳感器(st188)和光敏電阻(光敏二級管)傳感器兩種傳感器,紅外傳感器探測行進路面,光敏電阻傳感器探測前方的光源(火焰),并將探測到的數(shù)據(jù)傳到STC89C52RC進行模數(shù)轉(zhuǎn)換。

  •   滅火模塊

滅火模塊采用12V直流風扇,用5V電磁繼電器作為控制開關(guān)控制風扇的停轉(zhuǎn)。

5.    電源模塊

2200毫安的鋰電池,使機器人動作的正常運行。

  •    循線模塊

它是指小車在白色地板上循黑線行走,通常采取的方法是紅外探測法。紅外探測法,即利用紅外線在不同顏色的物體表面具有不同的反射性質(zhì)的特點,在小車行駛過程中不斷地向地面發(fā)射紅外光,當紅外光遇到白色紙質(zhì)地板時發(fā)生漫反射,反射光被裝在小車上的接收管接收;如果遇到黑線則紅外光被吸收,小車上的接收管接收不到紅外光。單片機就是否收到反射回來的紅外光為依據(jù)來確定黑線的位置和小車的行走路線。

7.尋光模塊
尋光模塊是根據(jù)電阻阻值的大小變化引起電壓的變化,與給定值作比較,發(fā)送給單片機,當大于給定值則為1(高),當小于給定值則為0(低)。然后由單片機來控制機器人的各種動作。

3.3可行性分析:

     本設(shè)計的控制芯片是采用STC89C52RC,另外還采用了L298芯片,以及紅外傳感器(例如ST188)和光敏二級管(或者光敏三級管)。滅火模塊采用的是12V的直流風扇。

    智能滅火機器人是以STC89C52RC單片機為核心的,STC89C52RC是一個低電壓,高性能CMOS 8位單片機,片內(nèi)含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(RAM)。采用L298芯片的驅(qū)動模塊可以控制電機的正反轉(zhuǎn),初始方案中使用玩具四驅(qū)車上附帶的電機。利用L298 及其外部輔助電路構(gòu)成驅(qū)動電路。其優(yōu)點是可實現(xiàn)控制電路和驅(qū)動電路雙電源供電, 可提高系統(tǒng)的穩(wěn)定性。缺點是電機驅(qū)動模塊中獨立電源的增加將會使車體變重,從而影響小車運行效果。最終方案決定采用雙直流減速電機。直流減速電機轉(zhuǎn)動力矩大, 體積小,重量輕, 裝配簡單,使用方便, 價格比步進電機要便宜。。而紅外傳感器則是內(nèi)部發(fā)射特殊紅外線光波,相當數(shù)據(jù)流,也就是數(shù)字信號轉(zhuǎn)成紅外信號---紅外信號轉(zhuǎn)成數(shù)字信號(達到控制,信號傳輸?shù)男Ч,也就是在白色的地面上貼上的黑膠布,紅外傳感器對于白色和黑色是具有一定的分辨能力來控制小車應(yīng)該往哪走的。光敏二級管則是用于探測我們給定的光源的(也就相當于火源),光敏二級管在無光照時,有很小的飽和反向漏電流,即暗電流,此時光敏二極管截止。當受到光照時,飽和反向漏電流大大增加,形成光電流,它隨入射光強度的變化而變化。因此可以利用光照強弱來改變電路中的電流。因此,該系統(tǒng)設(shè)計方案可行。

     當然,還存在很多不可預測的問題,例如環(huán)境的因素,數(shù)據(jù)的調(diào)試,光照強度的因素等等。但是,在具體設(shè)計過程中遇到問題后通過分析最后將問題解決或者獲得實踐的經(jīng)驗也都是有益的。



單片機源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>

  3. /********IO引腳定義***********************************************************/
  4. sbit SPK=P3^7;                        //蜂鳴器驅(qū)動引腳

  5. sbit LED1=P0^0;                        //LED
  6. sbit LED2=P0^1;                        //

  7. sbit gy=P1^2;                        //光敏電阻 右
  8. sbit g0=P1^3;                        //         中
  9. sbit gz=P1^4;                        //         左

  10. sbit d1=P1^0;                        //對管 右  黑線高電平(==1)
  11. sbit d2=P1^1;                        //     左

  12. sbit a1=P2^0;                        //電機驅(qū)動
  13. sbit a2=P2^1;
  14. sbit b1=P2^2;
  15. sbit b2=P2^3;

  16. sbit f1=P2^4;                        //風扇驅(qū)動
  17. sbit f2=P2^5;                        //

  18. /************************************************
  19.              延時函數(shù)
  20. ************************************************/
  21. void DelayMs(unsigned int timer)   //參數(shù) 整型timer 大小范圍 0-65536,決定延時時間長短
  22. {
  23.         int x,y;
  24.         for(x=timer;x>0;x--)
  25.                 for(y=120;y>0;y--);
  26. }

  27. /************************************************
  28. 電機轉(zhuǎn)動函數(shù)定義
  29. ************************************************/

  30. /*** 前進 ***/
  31. void QianJin()
  32. {
  33.          a1=0;
  34.          a2=1;
  35.          b1=0;
  36.          b2=1;
  37. }
  38. /*** 后退***/
  39. void HaoDu()
  40. {
  41.          a1=1;
  42.          a2=0;
  43.          b1=1;
  44.          b2=0;
  45. }
  46. /*** 左轉(zhuǎn) ***/
  47. void ZuoZhuan()
  48. {         
  49.          a1=1;
  50.          a2=0;
  51.          b1=0;
  52.          b2=1;
  53. }
  54. /*** 右轉(zhuǎn) ***/  
  55. void YouZhuan()
  56. {
  57.         a1=0;
  58.         a2=1;
  59.         b1=1;
  60.         b2=0;  
  61. }
  62. /*** 停止 ***/
  63. void Stop()
  64. {  
  65.          a1=1;
  66.          a2=1;
  67.          b1=1;
  68.          b2=1;
  69. }

  70. /************************************************
  71.             風扇函數(shù)定義
  72. ************************************************/
  73. void Feng()
  74. {
  75.         f1=1;f2=0;
  76.         DelayMs(3000);//風扇轉(zhuǎn)3秒
  77.         f1=1;f2=1;
  78.         SPK=0;
  79.         DelayMs(1000);
  80.         SPK=1;
  81. }
  82. /************************************************
  83.            循跡子程序
  84. ************************************************/
  85. void xunjin()
  86. {
  87.                  Stop();
  88.                   LED1=1;LED2=1;
  89.                         while(d1==0&&d2==0)
  90.                         {
  91.                                         LED1=1;LED2=1;
  92.                                   QianJin();
  93.                         }
  94.                        
  95.                   while(d1==1&&d2==0)
  96.                         {   LED1=0;
  97.                                         YouZhuan();DelayMs(200);
  98.                         }
  99.                        
  100.                         while(d1==0&&d2==1)
  101.                         {   LED2=0;
  102.                                         ZuoZhuan();DelayMs(200);
  103.                         }       
  104.                        
  105.                         while(d1==1&&d2==1)
  106.                         {
  107.                                         Stop();LED1=1;LED2=1;
  108.                         }       
  109. }

  110. /*
  111. ******************************************************************************************
  112. ** 函數(shù)名稱: main
  113. ** 函數(shù)功能: 主函數(shù)
  114. ** 入口參數(shù): 無
  115. ** 出口參數(shù): 無
  116. ******************************************************************************************
  117. */
  118. void main()
  119. {       

  120.   while(1)
  121.         {  
  122.                
  123.                   Stop();
  124.                   LED1=1;LED2=1;
  125.                         while(d1==0&&d2==0)//兩個對管檢測到白紙前進
  126.                         {
  127.                                         LED1=1;LED2=1;
  128.                                   QianJin();
  129.                                  
  130.                                          /*如果右邊光敏檢測到光源右轉(zhuǎn)對準光源則前往光源執(zhí)行滅火程序 */                                 
  131.                                         if(gy==0){
  132.                                                                                         while(g0==1)YouZhuan();DelayMs(50);
  133.                                                                                         QianJin();DelayMs(2000);//前進距離
  134.                                                                                         Stop();
  135.                                                           Feng();//如果滅燈模擬滅火則用while(g0==0){f1=1;f2=0;}f1=1;f2=1;SPK=0;DelayMs(1000);SPK=1;
  136.                                                                                         while(d1==0&&d2==0)HaoDu();
  137.                                                                                         QianJin();DelayMs(500);
  138.                                                                                         while(d1==0)ZuoZhuan();
  139.                                                                 while(1)xunjin();
  140.                                                                                  }
  141.                                          /*如果左邊光敏檢測到光源右轉(zhuǎn)對準光源則前往光源執(zhí)行滅火程序 */                                 
  142.                                         if(gz==0){
  143.                                                                                         while(g0==1)ZuoZhuan();DelayMs(50);
  144.                                                                                         QianJin();DelayMs(2000);//前進距離
  145.                                                                                         Stop();
  146.                                                           Feng();//如果滅燈模擬滅火則用while(g0==0){f1=1;f2=0;}f1=1;f2=1;SPK=0;DelayMs(1000);SPK=1;
  147.                                                                                         while(d1==0&&d2==0)HaoDu();
  148.                                                                                         QianJin();DelayMs(500);
  149.                                                                                         while(d2==0)YouZhuan();
  150.                                                                 while(1)xunjin();
  151.                                                                                  }                                         
  152.                                                
  153.                                                                                                          
  154.                         }
  155. ……………………

  156. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
循跡尋光滅火小車.rar (218.66 KB, 下載次數(shù): 246)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:296551 發(fā)表于 2019-5-3 17:45 來自手機 | 只看該作者
你好!請問可以幫忙畫一下總的電路圖嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表