簡(jiǎn)單穩(wěn)定地感應(yīng)你——紅外感應(yīng)開(kāi)關(guān)的創(chuàng)新制作
我們家族八輩貧農(nóng),生活在一個(gè)東北的小山村,雖然說(shuō)沒(méi)見(jiàn)過(guò)什么大場(chǎng)面,可是好山好水的,生活倒也不錯(cuò)。從小對(duì)電子制作的著迷也受到了環(huán)境的限制,很難去一趟城市,也沒(méi)見(jiàn)過(guò)什么新奇玩意兒。話說(shuō),在我13歲的那年,老爸朋友的兒子結(jié)婚,在城里置辦了酒席,請(qǐng)我們一家三口過(guò)去。人家的婚禮真是氣派,就在鐵力市中心最豪華的大酒店舉行。酒店里金碧輝煌,地面光得照人,墻上貼著大大的“喜”字。年頭久遠(yuǎn),記不清更多的細(xì)節(jié),唯有一件事讓我印象深刻。菜上來(lái)了,有我最愛(ài)吃的大蝦,配上大瓶的可樂(lè),兩眼一閉、大嘴一張,吃它個(gè)天翻地覆、死去活來(lái)。吃飽喝足,來(lái)到豪華酒店的廁所門前。廁所里也金碧輝煌,地面也光得照人,墻上貼著大大的“男”字。沒(méi)錯(cuò),就是這里了。走進(jìn)去看到一排小便池,小便池并不稀奇,之前也有見(jiàn)過(guò),稀奇的是小便池上面貼著標(biāo)語(yǔ),上寫“向前一小步,文明一大步”。更稀奇的是標(biāo)語(yǔ)的下面有一個(gè)方形的金屬板,金屬板中間有一個(gè)黑色方形的玻璃。我一邊小便一邊研究著,我發(fā)現(xiàn)時(shí)不時(shí)地從黑色玻璃里面會(huì)亮起一個(gè)小紅燈。我把身體前后移動(dòng),小紅燈也跟著閃爍。當(dāng)我轉(zhuǎn)身離開(kāi)的時(shí)候,突然聽(tīng)到“嘩嘩”的沖水聲。我馬上回來(lái)看,小紅燈又開(kāi)始閃爍,我一走開(kāi)它又沖水。難道黑色玻璃后面有人在看?我有點(diǎn)害羞,沒(méi)敢再過(guò)去研究。來(lái)到洗手臺(tái),發(fā)現(xiàn)一排水龍頭竟然都沒(méi)有閥門開(kāi)關(guān),我拍了拍出水口,沒(méi)有反應(yīng)。忽然發(fā)現(xiàn)出水口下面也有一個(gè)黑色玻璃,我把手伸過(guò)去,水就自然地流了出來(lái)。我確定黑玻璃的后面沒(méi)有人,這應(yīng)該是一種感應(yīng)裝置,可以感應(yīng)到我的手??伤降资侨绾胃袘?yīng)的呢?洗完了手,正準(zhǔn)備出門,又發(fā)現(xiàn)門旁邊的干手機(jī)。干手機(jī)的底部也有一片黑玻璃,當(dāng)我把手放在下面時(shí),一股暖風(fēng)出現(xiàn)了。
這次豪華酒店的廁所之旅把我給震撼了,原來(lái)電器的開(kāi)關(guān)可以這么智能,不用我們觸碰到它,它就可以感應(yīng)到我。我的腦子開(kāi)始高速運(yùn)轉(zhuǎn),想象著這項(xiàng)技術(shù)應(yīng)用到自己家中的情景。媽媽洗菜可以不用開(kāi)水龍頭,家里的電燈不用出力按就可以開(kāi)關(guān),還有家里的電視機(jī)、電風(fēng)扇、奶奶的收音機(jī)都可以放上這種感應(yīng)開(kāi)關(guān)。把它裝在大門上,和門鈴連接,只要有人站在門口,門鈴就會(huì)響。我的小伙伴來(lái)家里找我,一定會(huì)把他們嚇一跳的。想著想著,忍不住笑出聲來(lái)。
從數(shù)字電路到單片機(jī)
上了大學(xué)后,學(xué)校里有很多書店。在沒(méi)有發(fā)現(xiàn)單片機(jī)之前,我一直在書店的電子技術(shù)專區(qū)里徘徊。那里有好多關(guān)于電子制作的書,都是我喜愛(ài)的。我最愛(ài)看的就是電子制作500例之類的書,里面的好多制作簡(jiǎn)單又實(shí)用。某天,我突然在書中發(fā)現(xiàn)了紅外線感應(yīng)干手機(jī)的制作實(shí)例。一下把我?guī)Щ氐侥且淮坞y忘經(jīng)歷——豪華酒店的廁所之旅。我要實(shí)現(xiàn)我少年的夢(mèng)想,我要實(shí)現(xiàn)這個(gè)制作。接下來(lái)的日子里,我就開(kāi)始研究紅外線感應(yīng)干手機(jī)的原理和電路。
原來(lái),所謂的感應(yīng)開(kāi)關(guān),只是利用了人眼看不到的紅外線來(lái)感應(yīng)物體。感應(yīng)開(kāi)關(guān)的核心元器件就是紅外反射傳感器。紅外反射傳感器包括一個(gè)紅外線發(fā)光二極管和一個(gè)紅外線光敏二極管,它們兩個(gè)都朝著一個(gè)方向,被封裝在一個(gè)塑料外殼里。使用時(shí),紅外線發(fā)光二極管點(diǎn)亮,并發(fā)出一道人眼看不見(jiàn)的紅外光。如果傳感器的前方?jīng)]有物體,那么這道紅外光就以299792458m/s的速度(光速)消散在宇宙中。
但如果傳感器前方有不透明的物體時(shí),紅外光就會(huì)被反射回來(lái),會(huì)照在旁邊的紅外線光敏二極管上。紅外線光敏二極管接收到紅外光后,其輸出引腳的電阻值就會(huì)產(chǎn)生變化。通過(guò)判斷這個(gè)阻值的變化,它就可以感應(yīng)到前方的物體,進(jìn)而控制電器開(kāi)關(guān)了。
了解了原理,又看到了書中的電路原理圖后,我卻產(chǎn)生了新的疑惑。紅外線發(fā)光二極管應(yīng)該和普通二極管的驅(qū)動(dòng)電路一樣,用紅外線光敏二極管加一個(gè)三極管放大接收信號(hào)來(lái)驅(qū)動(dòng)繼電器不就可以了嗎?為什么還要加NE555和CD4069兩個(gè)芯片,把簡(jiǎn)單的事情搞復(fù)雜了呢?看了后面的文章介紹才知道,原來(lái)這樣做的目的是為了防止環(huán)境光的干擾。在我們生活的環(huán)境里,處處都暗藏著紅外線。太陽(yáng)是最常見(jiàn)的紅外線發(fā)光體,還有火光、燈光、紅外線遙控器和一些不可預(yù)知的光源。問(wèn)題來(lái)了,身邊這么多紅外線光源,傳感器里的紅外線光敏二極管怎么知道哪些光是環(huán)境里的紅外光,哪些光是它鄰居發(fā)出來(lái)的紅外光呢?于是天才的工程師想到了調(diào)制解調(diào)的辦法。他們把紅外線發(fā)光二極管以某一頻率進(jìn)行調(diào)制,即讓它以一定的頻率閃爍。在紅外線光敏二極管一端則設(shè)計(jì)一個(gè)電路,讓接收端可以篩選出這一頻率的紅外光源。像收音機(jī)一樣,傳感器只要以自己的頻率發(fā)射,再以自己的頻率接收就可以過(guò)濾掉其他頻率光源的干擾了。
哈哈,看過(guò)原理之后,心中暗自生起了一團(tuán)烈火。然后以70km/h的速度(坐車)奔向電子市場(chǎng)。備齊了元器件,照著原理圖制作出了實(shí)物。不得不佩服我當(dāng)時(shí)的焊接水平,用了一片小小的洞洞板,把電路制作得小巧、緊湊。不過(guò)接上電源之后,問(wèn)題就來(lái)了,當(dāng)我把手放在感應(yīng)區(qū)域時(shí),指示燈并沒(méi)有亮。后來(lái)發(fā)現(xiàn),這是發(fā)射頻率和接收頻率不匹配導(dǎo)致的,因?yàn)椴捎玫氖荝C電路產(chǎn)生頻率,簡(jiǎn)單地說(shuō)就是靠電容的充放電周期產(chǎn)生頻率,所以頻率很容易隨溫度變化而變化。電路的調(diào)試花了我許多時(shí)間,在沒(méi)有示波器的幫助下,光靠反復(fù)修改電阻值和電容值的測(cè)試來(lái)達(dá)到成功是多么困難的事情呀!當(dāng)同學(xué)把手放在感應(yīng)區(qū),指示燈亮起的那一刻,所有調(diào)試的困苦都轉(zhuǎn)化為成就感,在同學(xué)們贊嘆的話語(yǔ)中成幾何性倍增了。
像電影一樣,故事到了高潮,接下來(lái)的每一步都是墜落。同學(xué)們只看到了光彩的一面,背地里它悄悄出現(xiàn)的問(wèn)題,都成為我們私下獨(dú)處時(shí)的傷痛。在一個(gè)陽(yáng)光明媚的下午,強(qiáng)光照進(jìn)室內(nèi),感應(yīng)開(kāi)關(guān)受強(qiáng)光的影響而處在不穩(wěn)定的狀態(tài),它不斷地自行開(kāi)關(guān),而且對(duì)反射物體沒(méi)有反應(yīng)。家里常用的電視機(jī)紅外線遙控器也會(huì)讓感應(yīng)開(kāi)關(guān)失靈。即使把它放在陰暗的角落也會(huì)出現(xiàn)一個(gè)討厭的問(wèn)題,即當(dāng)反射物就會(huì)不斷地開(kāi)關(guān),繼電器的吸合很快,好像一臺(tái)電報(bào)機(jī)。這是因?yàn)榉瓷湮矬w正好處在了感應(yīng)區(qū)的臨界點(diǎn)上,也就是“感應(yīng)到”和“感應(yīng)不到”的分界線上,物體微微靠近或離開(kāi)就會(huì)產(chǎn)生開(kāi)關(guān)狀態(tài)的改變。沒(méi)有人會(huì)希望自己家的電燈像閃電、水龍頭像音樂(lè)噴泉吧。這些問(wèn)題加在一起,讓感應(yīng)開(kāi)關(guān)的應(yīng)用很不理想,辛辛苦苦把家里所有的電燈開(kāi)關(guān)都改裝成感應(yīng)的,不到一個(gè)月又被爸爸改回了傳統(tǒng)開(kāi)關(guān)。慢慢的,對(duì)感應(yīng)開(kāi)關(guān)的興趣就被音控開(kāi)關(guān)、延時(shí)開(kāi)關(guān)的制作熱情所取代。幾星期后,我和紅外線感應(yīng)開(kāi)關(guān)徹底分手了。
從那之后的某一天,我開(kāi)始學(xué)習(xí)單片機(jī)。幾個(gè)月前我對(duì)單片機(jī)內(nèi)置的模數(shù)轉(zhuǎn)換器(ADC)產(chǎn)生了興趣,不斷地探索它的妙用,DIS.MUSIC3炫彩音樂(lè)顯示器就是利用ADC來(lái)采集音頻信號(hào)的。突然有一天,我想,利用帶有ADC功能的單片機(jī)可不可以取代傳統(tǒng)的數(shù)字電路,而讓紅外線感應(yīng)開(kāi)關(guān)變得更穩(wěn)定呢?在網(wǎng)上搜索了半天,沒(méi)有找到基于單片機(jī)的紅外線傳感器的制作。這個(gè)情況對(duì)我來(lái)說(shuō)亦好亦壞,好的是如果制作成功,這將又會(huì)是我的一項(xiàng)創(chuàng)新制作;壞的是我沒(méi)有任何可以參考的資料,甚至都不能保證我的想法是否可行。我學(xué)習(xí)單片機(jī)的過(guò)程好像是一條正弦波,從基礎(chǔ)開(kāi)始學(xué)習(xí),然后開(kāi)發(fā)應(yīng)用程序,再后來(lái)獨(dú)立完成創(chuàng)新制作,到最后又回到了基礎(chǔ)技術(shù)問(wèn)題的研究。接下來(lái)的日子里,我做得最多的事是研究紅外線的知識(shí)。做了N多次實(shí)驗(yàn),用不同的紅外線發(fā)光源來(lái)做研究,找到它們的特性和區(qū)別。之后開(kāi)始研究電路制作簡(jiǎn)單、同時(shí)又具備高穩(wěn)定性的紅外感應(yīng)開(kāi)關(guān)。研究到最后,我自己都驚訝了,原來(lái)硬件電路可以如此簡(jiǎn)單,簡(jiǎn)單到?jīng)]有任何多余的元器件——單片機(jī)、紅外反射傳感器、LED指示燈和電源。在之前的版本里,硬件電路上還需要加一條導(dǎo)線,但是后來(lái)我修改了程序算法,這條導(dǎo)線便光榮下崗了。
是的,程序算法——一種殺人于無(wú)形的利器。如果人類和動(dòng)物的區(qū)別是人類具有理性和智慧的話,那么單片機(jī)與數(shù)模電路的區(qū)別就是單片機(jī)具有程序控制。單片機(jī)程序精確地處理著時(shí)間和狀態(tài),軟件的強(qiáng)大把硬件成本降到最低,并可以零成本復(fù)制。我熱愛(ài)編程,它給了我無(wú)窮的樂(lè)趣和超乎想象的創(chuàng)新可能。如果我是即將畢業(yè)的大學(xué)生,我會(huì)把這個(gè)創(chuàng)新制作寫成論文,讓導(dǎo)師喜笑顏開(kāi);如果我是專注科普的《無(wú)線電》雜志的作者,我就只能用微小的篇章簡(jiǎn)單地說(shuō)一說(shuō)這款制作的基本原理了。但在此之前,先讓我們趁著熱情未減,親手制作一下這款基于單片機(jī)的紅外感應(yīng)開(kāi)關(guān),體驗(yàn)它的精巧構(gòu)思,檢驗(yàn)它的抗干擾能力吧。
我是在面包板上搭建的電路,電源采用的是3節(jié)5號(hào)電池所組成的4.5V直流電源。因?yàn)殡娐贩浅:?jiǎn)單,我還特意為了面包板上的接插布局而定義了IO接口。所以我們連導(dǎo)線都不需要,只要把單片機(jī)、紅外反射傳感器和LED指示燈插在指定的孔洞里就行了。值得注意的問(wèn)題有:?jiǎn)纹瑱C(jī)需要使用帶有ADC功能的STC12C2052AD系列;燒寫程序時(shí),選擇使用內(nèi)部RC振蕩器;紅外反射傳感器沒(méi)有特定的型號(hào),我使用的是RPR220,你也可以使用其他型號(hào)的產(chǎn)品。
在面包板搭建的實(shí)驗(yàn)電路上測(cè)試,有沒(méi)有感覺(jué)到它的精簡(jiǎn)和穩(wěn)定呢?把LED指示燈接在P1.7接口上時(shí),它是無(wú)鎖存的感應(yīng)開(kāi)關(guān),即有反射物體時(shí)LED燈亮,物體離開(kāi)就熄滅,適用于感應(yīng)式水龍燈。把LED指示燈接在P1.6接口上時(shí),它
是鎖存感應(yīng)開(kāi)關(guān),即感應(yīng)開(kāi)關(guān)觸發(fā)1次LED燈亮,2次觸發(fā)時(shí)LED燈滅,適用于感應(yīng)式電燈開(kāi)關(guān)。如果把LED指示燈改換成繼電器,就可以用來(lái)控制其他電器了。電器可以是任何你想得到的東西,相信你和我一樣,早就有過(guò)這樣的夢(mèng)想?,F(xiàn)在是實(shí)現(xiàn)它的時(shí)候了。
除了實(shí)用的開(kāi)關(guān)改裝計(jì)劃,紅外感應(yīng)開(kāi)關(guān)還可以把家居生活變成科幻電影。一張可以感應(yīng)你的桌子會(huì)不會(huì)震驚四座呢?普通桌子的上表面嵌著一塊磨砂玻璃板,當(dāng)桌面空空的時(shí)候,桌子沒(méi)有什么特別??墒钱?dāng)我們把手、杯子或報(bào)紙放在上面時(shí),相應(yīng)的位置就會(huì)發(fā)出光來(lái)。原來(lái),玻璃下面安裝了數(shù)百個(gè)LED燈和感應(yīng)裝置,只要桌子感應(yīng)到有東西放在上面,就會(huì)讓單片機(jī)控制對(duì)應(yīng)位置的LED燈點(diǎn)亮。變換單片機(jī)的程序還可以玩出更多的花樣呢。
如果用我的這款紅外感應(yīng)開(kāi)關(guān)是不是也可以實(shí)現(xiàn)這部科幻作品呢?在撰寫本文的時(shí)候,我也同時(shí)在研究這項(xiàng)技術(shù),希望可以用我們常用的單片機(jī)來(lái)實(shí)現(xiàn),如果真能實(shí)現(xiàn),我再另寫文章與各位分享。那桌子、那感應(yīng)式電燈都將成為你的作品、你的精心之作。
關(guān)鍵問(wèn)題與解決之道
從年少時(shí)廁所里紅外感應(yīng)開(kāi)關(guān)初體驗(yàn),到傳統(tǒng)電路制作的原理及問(wèn)題,再到用單片機(jī)實(shí)現(xiàn)更穩(wěn)定的感應(yīng)開(kāi)關(guān)設(shè)計(jì),直至感應(yīng)開(kāi)關(guān)在電器開(kāi)關(guān)和感應(yīng)桌面上的應(yīng)用。紅外感應(yīng)開(kāi)關(guān)已經(jīng)逐漸從廁所走向了客廳,從復(fù)雜走向了精簡(jiǎn),從波動(dòng)走向了穩(wěn)定。那么有誰(shuí)想知道單片機(jī)是怎么做到穩(wěn)定感應(yīng)的呢?其中的奧秘又是什么呢?這里就把一些技術(shù)實(shí)現(xiàn)的基本原理與諸位分享。如果你有更好的方案和改進(jìn)意見(jiàn),或者你是這方面資深的專家,歡迎各路英豪與我交流。閑話少說(shuō),小弟這里獻(xiàn)丑了哈!
1.如何去除環(huán)境光的干擾?
與之前的調(diào)制解調(diào)的方式不同,在使用ADC功能之后,另一種解決方案會(huì)讓測(cè)試更有效率。那就是使用雙重檢測(cè)方法。前提條件是,單片機(jī)可以控制紅外發(fā)光二極管的開(kāi)關(guān)。首先,要使用ADC功能讀出接在ADC接口上電壓的模擬量,數(shù)值從0到255(十進(jìn)制)。紅外光敏二極管接收的紅外光線強(qiáng)時(shí),ADC讀出的數(shù)值就大,反之就小。我們要做的就是,控制紅外發(fā)光二極管在發(fā)光時(shí)讀一次ADC的數(shù)值,然后再讓紅外發(fā)光二極管熄滅,再讀一次ADC的數(shù)值。我們先假設(shè)沒(méi)有其他紅外光源的干擾,當(dāng)紅外發(fā)光二極管熄滅時(shí),紅外光敏二極管應(yīng)該檢測(cè)不到光源,ADC讀出的數(shù)值也應(yīng)該為0;當(dāng)紅外發(fā)光二極管點(diǎn)亮,且沒(méi)有反射物體時(shí),ADC讀出的值也應(yīng)該很小,接近于為0;當(dāng)有反射物體時(shí),紅外光敏二極管檢測(cè)到光源,ADC讀出的數(shù)值會(huì)變大。如果存在其他光源的干擾,那么當(dāng)紅外發(fā)光二極管熄滅時(shí),也會(huì)讀到較大的數(shù)值。雙重檢測(cè)讀出的數(shù)值的差距越大,表示干擾光源越弱,反之則越強(qiáng)。我們通過(guò)這種雙重檢測(cè),就可以判斷接收到的紅外光是不是發(fā)射端發(fā)出來(lái)的了,兩次檢測(cè)的數(shù)值之差就是我們需要的最終數(shù)值。最終數(shù)值將參與下面的算法處理,也是我們判斷和處理的關(guān)鍵數(shù)據(jù)。單片機(jī)需要控制紅外發(fā)光二極管高速開(kāi)關(guān),以便更快地采集數(shù)據(jù)。
最終數(shù)值=紅外發(fā)光二極管點(diǎn)亮?xí)rADC讀出的數(shù)值-紅外發(fā)光二極管熄滅時(shí)ADC讀出的數(shù)值
2.如何解決臨界點(diǎn)的感應(yīng)波動(dòng)問(wèn)題?
微微向前一點(diǎn)就觸發(fā),微微向后一點(diǎn)就關(guān)斷,這是臨界點(diǎn)問(wèn)題的困擾。問(wèn)題的根源在于,觸發(fā)的臨界點(diǎn)和關(guān)斷的臨界點(diǎn)是同一個(gè)距離。只要在基于單片機(jī)系統(tǒng)中把這兩個(gè)臨界點(diǎn)分開(kāi),這個(gè)問(wèn)題就可迎刃而解。我們知道,單片機(jī)需要處理的數(shù)據(jù)是“最終數(shù)值”,它是紅外發(fā)光二極管開(kāi)、關(guān)狀態(tài)時(shí)ADC讀出的數(shù)值之差。最終數(shù)值也是一個(gè)從0到255之間不斷變化的變量。反射物理離傳感器越近,“最終數(shù)值”就越大。如果我們?cè)诔绦蚶镌O(shè)置,當(dāng)“最終數(shù)值”大于某一值時(shí)(例如200)就觸發(fā)開(kāi)關(guān),小于這一值時(shí)就關(guān)斷開(kāi)關(guān),那么這樣編程的效果就是單一臨界點(diǎn)的不穩(wěn)定開(kāi)關(guān)。單片機(jī)既然都可以模仿不穩(wěn)定的開(kāi)關(guān),自然也很容易創(chuàng)造穩(wěn)定的開(kāi)關(guān)了!只要寫一下程序的設(shè)置就可以很輕松地讓它變得穩(wěn)定。雙臨界點(diǎn)的設(shè)計(jì)只需要兩個(gè)數(shù)值的條件判斷:當(dāng)“最終數(shù)值”大于某一值時(shí)(例如200)就觸發(fā)開(kāi)關(guān),當(dāng)“最終數(shù)值”小于另一個(gè)數(shù)值時(shí)(例如150)就關(guān)斷開(kāi)關(guān)。這樣一來(lái),在150和200之間就會(huì)創(chuàng)建一塊中間區(qū)域。當(dāng)反射物理在這個(gè)區(qū)域前后移動(dòng)時(shí),開(kāi)關(guān)仍保持其原來(lái)的狀態(tài),或判斷、或觸發(fā)。這種雙臨界點(diǎn)的設(shè)計(jì),其實(shí)是給反射物體一個(gè)活動(dòng)空間,對(duì)反射物體的穩(wěn)定性要求降低了,系統(tǒng)狀態(tài)就自然穩(wěn)定了下來(lái)。在實(shí)際調(diào)試過(guò)程中,可以根據(jù)應(yīng)用的需要修改雙臨界點(diǎn)的兩個(gè)數(shù)值。比如做自動(dòng)水龍頭時(shí),手的移動(dòng)范圍較大,所以應(yīng)該留出較大的活動(dòng)區(qū)域。如果是做自動(dòng)尋跡小車的傳感器,則可以用較小的活動(dòng)區(qū)域,甚至改用單臨界點(diǎn)來(lái)實(shí)現(xiàn)。雙臨界點(diǎn)的設(shè)計(jì)是有啟發(fā)性的,你可以利用此設(shè)計(jì)來(lái)做更多的事情,或者用在其他傳感器的穩(wěn)定性設(shè)計(jì)之中。
3.如何增加感應(yīng)的成功率和可靠性?
“最終數(shù)值”處理和雙臨界點(diǎn)設(shè)計(jì)都可以增加系統(tǒng)的穩(wěn)定性。在多次數(shù)據(jù)采集中,出現(xiàn)幾次失敗和誤差是很正常的事情。但如果這些誤差左右了開(kāi)關(guān)的狀態(tài),那么這種失敗又由誰(shuí)來(lái)負(fù)責(zé)呢?我寫的文章錯(cuò)別字很多,雜志社的編輯老師都說(shuō)我無(wú)藥可救了。當(dāng)你看到本文時(shí),你要知道一件事,那就是已經(jīng)有好幾位編輯老師瞪大眼睛幫我改掉了文中的錯(cuò)別字。最后大家看到的才是精美而通順的文章。在感謝編輯老師的同時(shí),我也要為我們的紅外感應(yīng)開(kāi)關(guān)配備幾位“編輯老師”,給采集到的數(shù)據(jù)把關(guān)。一旦出現(xiàn)錯(cuò)誤,就放棄當(dāng)前的數(shù)據(jù),重新采集,這種設(shè)計(jì)其實(shí)就是一種冗余。我在程序中設(shè)計(jì)了一段循環(huán)檢測(cè)語(yǔ)句,連續(xù)20次檢測(cè)和判斷采集到的數(shù)據(jù),如果20次中有1次誤差就馬上放棄當(dāng)前的所有數(shù)據(jù),重新檢測(cè)。連續(xù)20次檢測(cè)已經(jīng)算是很穩(wěn)定的了,當(dāng)然你也可以為了更穩(wěn)定而改用連續(xù)50次、100次的檢測(cè),但是系統(tǒng)的反應(yīng)速度會(huì)變慢,靈敏度也會(huì)下降。靈敏度和穩(wěn)定度之間的矛盾是剛性的,在實(shí)際測(cè)試中找到適合目標(biāo)系統(tǒng)的檢測(cè)次數(shù)就可以了?!白罱K數(shù)值”、雙臨界點(diǎn)和20次連續(xù)檢測(cè)聽(tīng)上去好像是很復(fù)雜的事情,可是在程序里只是很簡(jiǎn)單的幾條語(yǔ)句。設(shè)計(jì)的重點(diǎn)不在于程序的復(fù)雜性,而是整個(gè)系統(tǒng)的設(shè)計(jì)思路。下面列出一段關(guān)鍵程序部分與大家分享,這個(gè)簡(jiǎn)單的程序包含了上述的3種抗干擾設(shè)計(jì)。
4.如何增大感應(yīng)距離?
經(jīng)過(guò)實(shí)驗(yàn)證明,基于單片機(jī)的紅外傳感器的感應(yīng)距離和單片機(jī)的ADC精度、雙臨界點(diǎn)數(shù)值、紅外發(fā)光二極管的功率、紅外光敏二極管的靈敏度,均和反射物理的反光效果有關(guān),一般的感應(yīng)距離不會(huì)超過(guò)20cm。不過(guò),對(duì)于開(kāi)關(guān)感應(yīng)開(kāi)關(guān)的設(shè)計(jì)已經(jīng)足夠了。要想增加感應(yīng)距離,可以對(duì)以下幾方面進(jìn)行改進(jìn)。只是,更遠(yuǎn)的感應(yīng)距離反而會(huì)讓系統(tǒng)產(chǎn)生許多
RAM_H=Read_ADC;//讀出LED亮?xí)rADC端口的值
RAM_L=Read_ADC;//讀出LED滅時(shí)ADC端口的值
RAM_H=RAM_H-RAM_L;//取2次檢測(cè)值之差,避開(kāi)環(huán)境光干擾if(RAM_H>0x06){//開(kāi)啟時(shí)的距離(應(yīng)該小于關(guān)閉時(shí)的距離)CON++;//計(jì)數(shù)加1
CON2=0;
if(CON>20){//連續(xù)20次檢測(cè),以避開(kāi)干擾
CON=0;
LED_Y=0;//LED指示燈點(diǎn)亮
}
}
if(RAM_H0x03){//關(guān)閉時(shí)的距離
CON2++;CON=0;if(CON2>20){CON2=0;
LED_Y=1;//LED指示燈熄滅
}
}
“最終數(shù)值”、雙臨界點(diǎn)和20次連續(xù)檢測(cè)的程序部分
不確定因素,效果反而不佳。如果在某些特殊情況還需要更遠(yuǎn)的傳送距離,我們就要用新的軟硬件方案來(lái)應(yīng)對(duì)了。
☆提高ADC精度,例如將8位ADC換成10位或12位ADC。
☆將雙臨界點(diǎn)的數(shù)值設(shè)置得更小。
☆用LED驅(qū)動(dòng)電路提高紅外發(fā)光二極管的功率(即提高亮度)。
☆為紅外光敏二極管一端加裝信號(hào)放大電路。
☆盡量使用反光效果好的反射物體(如白紙、鏡面)。
5.如何進(jìn)一步提升抗干擾能力?
最后一個(gè)問(wèn)題,是同頻環(huán)境光的干擾。在我的實(shí)驗(yàn)中,還沒(méi)有出現(xiàn)過(guò)這樣的問(wèn)題,它只存在于理論推理中。但這種干擾的可能性并不為0,所以有必須說(shuō)明一下。所謂的同頻干擾,就是假設(shè)紅外感應(yīng)開(kāi)關(guān)的周圍正好存在這么一個(gè)紅外光源,它也按一定的頻率點(diǎn)亮和熄滅,而這一頻率正好和紅外感應(yīng)開(kāi)關(guān)中紅外發(fā)光二極管的亮、滅頻率一致,且周期相同。這種巧合并不只是彩票頭獎(jiǎng)的幸運(yùn)觀眾才能遇見(jiàn)的,當(dāng)多個(gè)紅外感應(yīng)開(kāi)關(guān)在較近的距離內(nèi)同時(shí)使用時(shí),問(wèn)題就自然會(huì)出現(xiàn)。如果它們之間的距離不能改變,那就只有用跳頻的方法來(lái)解決了。跳頻技術(shù)在移動(dòng)電話和無(wú)繩電話機(jī)上已經(jīng)成為必備的功能,為了防止竊聽(tīng)或當(dāng)某一頻道被占用時(shí),電話機(jī)會(huì)自動(dòng)切換到別的頻道,讓通信更穩(wěn)定、可靠。對(duì)于紅外感應(yīng)開(kāi)關(guān)來(lái)說(shuō),跳頻并沒(méi)有那么復(fù)雜,只要在程序中不斷改變紅外發(fā)光二極管的亮、滅時(shí)間,用不同的頻率去檢測(cè),其他干擾光源也以相同頻率跳變的機(jī)會(huì)就少之又少了,再加上前面介紹的20次連續(xù)檢測(cè)功能,再遇見(jiàn)干擾的可能性就幾乎為0了。
增加以上5項(xiàng)功能,系統(tǒng)的穩(wěn)定性達(dá)到了巔峰,而如此穩(wěn)定的設(shè)計(jì)卻絲毫沒(méi)有改變硬件制作。仍然是那幾種元器件,穩(wěn)定與否全看程序的設(shè)計(jì)。單片機(jī)就是這么神奇,創(chuàng)造優(yōu)良性能于無(wú)形之中,帶你體驗(yàn)精簡(jiǎn)設(shè)計(jì)的內(nèi)在之力。
更遠(yuǎn)距離的對(duì)射傳感器方案
還有一種情況,是應(yīng)用上的需要。如果使用紅外感應(yīng)開(kāi)關(guān)來(lái)制作賽跑的電子終點(diǎn)線,將紅外發(fā)射管和接收管分別安裝在跑道的兩端會(huì)是更好的解決方案。平時(shí)終點(diǎn)線上沒(méi)有障礙物,發(fā)射的紅外信號(hào)輕松地被接收。當(dāng)有人通過(guò)終點(diǎn)線時(shí),人的身體擋住了紅外光的路線,接收端收不到信號(hào)而觸發(fā)開(kāi)關(guān),完成比賽的計(jì)時(shí)。同樣的設(shè)計(jì)還可以用作防盜報(bào)警器。這種對(duì)射式的傳感器需要很遠(yuǎn)的傳送距離,一般需要2~5m。如果是這種應(yīng)用,就需要改變軟硬件方案,38kHz調(diào)制紅外線不是很好的解決方案。利用單片機(jī)產(chǎn)生38kHz的調(diào)制紅外線信號(hào),接收端使用具有集信號(hào)解調(diào)、放大和輸出于一體的紅外傳感器TSOP1838。電路設(shè)計(jì)同樣精簡(jiǎn),而對(duì)射有效距離可以達(dá)到7~10m。相關(guān)的技術(shù)正在被我研究著,這里算是拋磚引玉,希望給正在研究此技術(shù)的朋友一點(diǎn)幫助。發(fā)揮你的才能,把這項(xiàng)技術(shù)運(yùn)用到生活之中。制作自動(dòng)干手機(jī)、感應(yīng)水龍頭、感應(yīng)電燈開(kāi)關(guān)、智能尋跡小車、防盜報(bào)警器、感應(yīng)桌面、比賽計(jì)時(shí)器等?;趩纹瑱C(jī)的紅外感應(yīng)開(kāi)關(guān)將成為你電子競(jìng)賽、產(chǎn)品設(shè)計(jì)、趣味DIY的必備佳品。這就是紅外感應(yīng)開(kāi)關(guān)的創(chuàng)新制作,可以簡(jiǎn)單穩(wěn)定地感應(yīng)你。
萬(wàn)能遙控器相關(guān)文章:萬(wàn)能遙控器代碼
手機(jī)電池相關(guān)文章:手機(jī)電池修復(fù)
51單片機(jī)相關(guān)文章:51單片機(jī)教程
模數(shù)轉(zhuǎn)換器相關(guān)文章:模數(shù)轉(zhuǎn)換器工作原理
燃?xì)鈭?bào)警器相關(guān)文章:燃?xì)鈭?bào)警器原理
評(píng)論