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