2021Arduino家居安全系統(tǒng)構(gòu)建實戰(zhàn)_第1頁
2021Arduino家居安全系統(tǒng)構(gòu)建實戰(zhàn)_第2頁
2021Arduino家居安全系統(tǒng)構(gòu)建實戰(zhàn)_第3頁
2021Arduino家居安全系統(tǒng)構(gòu)建實戰(zhàn)_第4頁
2021Arduino家居安全系統(tǒng)構(gòu)建實戰(zhàn)_第5頁
已閱讀5頁,還剩80頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Arduino家居安全系統(tǒng)構(gòu)建實戰(zhàn)第1第2Arduino與ArduinoIDE入門第3第4第5Arduino和傳感器第6第7歡迎來到異步社區(qū)!第1章 家居安全系統(tǒng)的入門知識在這一章中,我們將會介紹如下的內(nèi)容:什么是家居安全基礎(chǔ)設(shè)施它是如何工作的部署這樣一個系統(tǒng)都需要些什么在當(dāng)前條件下為安全系統(tǒng)所做的準(zhǔn)備有線安全系統(tǒng)和無線安全系統(tǒng)傳統(tǒng)系統(tǒng)與現(xiàn)代化家居安全系統(tǒng)為了緊緊跟隨硬件的發(fā)展趨勢,本書介紹了隨處可見且價格極為低廉的平臺——Arduino或者公共機(jī)構(gòu)見到這個小電路板的身影。Arduino平臺因其眾多的優(yōu)勢而著名,例如低廉的成本、開放性的設(shè)計、簡單易行的組裝性以及可進(jìn)行調(diào)整的性能。這也就是幾乎所有的項目,無論專業(yè)還是業(yè)余,通過這些神奇的板子,都能從一張紙上的簡單設(shè)計快速地在真實世界中成為現(xiàn)實的原因。本書中我們將介紹采用這種技術(shù)來創(chuàng)建我們的家居安全系統(tǒng)。本章將會帶你步入家居安全系統(tǒng)的世界。此外,你也將會了解到傳統(tǒng)的監(jiān)控系統(tǒng)與家庭自動化系統(tǒng)之間的差異,也會了解它們的工作方式、進(jìn)行安裝的需求以及如何就環(huán)境進(jìn)行準(zhǔn)備。你應(yīng)該在對電子產(chǎn)品和計算機(jī)的基本概念有一些了解之后,再來深入地研究本書的內(nèi)容,并在隨后的章節(jié)中深入地學(xué)習(xí)更先進(jìn)的原理(但是請不必為此過度擔(dān)憂,本書的每一個知識點都通過實例進(jìn)行了仔細(xì)的說明,還關(guān)聯(lián)了大量的相關(guān)信息,以此來方便讀者的理解)。請弄清楚一件事,本書并不僅僅是一本帶領(lǐng)你一步一步地創(chuàng)建一個簡單系統(tǒng)的指導(dǎo)書,同時還是一本向你提供了能夠打造一個自己專屬的家居系統(tǒng)的相關(guān)知識的工具書。安全建議:在整個項目的開發(fā)過程中,你要采取最嚴(yán)格的安全措施,注意你周圍的環(huán)境,永遠(yuǎn)不要獨自一人施工,除非你擁有極為豐富的高級技術(shù)經(jīng)驗。另外,盡量少使用或者避免使用高電壓的電氣設(shè)備。家居安全的基礎(chǔ)設(shè)施當(dāng)然,如果你被問到一個關(guān)于安全系統(tǒng)組成部分的問題,你可能會毫不猶豫地對這個問題做出回答,例如,你可能會就監(jiān)控攝像頭、運(yùn)動傳感器和報警器等設(shè)備侃侃而談。但是你確實了解這些不同的組成模塊了嗎?你能清楚地說出它們之間所有的關(guān)聯(lián)嗎?你能詳細(xì)地講出它們的工作方式嗎?你能準(zhǔn)確地說出傳統(tǒng)的系統(tǒng)和當(dāng)前的系統(tǒng)的區(qū)別嗎?不要著急,這些答案都將為你揭曉。好了,現(xiàn)在我們這里已經(jīng)有這些問題的答案了。安全基礎(chǔ)設(shè)施包括了所有的硬件設(shè)備、軟件部分以及它們之間關(guān)聯(lián)的設(shè)計,將所有這些組件組合在一起構(gòu)成了一個整體。這里以一個訪問接入控制點基礎(chǔ)設(shè)施為例,在這個例子中,你使用一個連接到了數(shù)據(jù)庫的讀卡器,通過對數(shù)據(jù)庫數(shù)據(jù)讀取可以實現(xiàn)對卡的ID(卡片序列號)的檢查,以此來確定門禁的放行或者禁止操作,還有攝像頭提供支持,以實時地顯示事件動態(tài)。在這種情況下,如果有人試圖破壞安全措施時,系統(tǒng)將會觸發(fā)警報。然后,你可以決定下一步該怎么做。正如你在這個簡單的例子中看到的,我們使用了大量協(xié)同工作的要素來保證環(huán)境的安全。所有這些共同構(gòu)成了一個安全的基礎(chǔ)設(shè)施。工作原理之前討論了家居安全系統(tǒng)基本的組成部分,但是這些要素都是什么,它們是如何工作的呢?通過對它們進(jìn)行分類,我們可以將一個安全系統(tǒng)分成兩個部分。硬件部分一個基礎(chǔ)設(shè)施的硬件要素必須能夠勝任軟件的所有技術(shù)需求??梢詫⑺鼈冞M(jìn)一步細(xì)分為3個不同的子類別。這種分類方式不應(yīng)該被理解為具有排斥性,因為一個要素經(jīng)常可以被分到多個子類別中,這種分類方式反而有助于你理解系統(tǒng)所執(zhí)行的功能。傳感器:傳感器將作為系統(tǒng)的感覺器官,其作用就如同人類的身體感官。它們的功能就是從環(huán)境中搜集信息,并將這些信息轉(zhuǎn)化為數(shù)字信號,然后將這些信號發(fā)送給另外一些組件,這些組件就是被設(shè)計用來控制這些信號的,所獲取的數(shù)據(jù)將會作為我們設(shè)備的輸入。這個類別中包括了攝像機(jī)、聲音傳感器、運(yùn)動檢測傳感器、煙霧傳感器、紅外傳感器以及溫度傳感器等。執(zhí)行器:如果說傳感器是提供了環(huán)境中的所有必要信息的感覺器官,那么執(zhí)行器就是執(zhí)行所有行動的肌肉組織。一旦我們做出了一個行動的決定,我們將會發(fā)出一個信號來命令該要素開始工作。這個類別中的典型設(shè)備有警報器、揚(yáng)聲器、鎖和開關(guān)??刂破鳎哼@個部分就如同系統(tǒng)的大腦。一個典型的實例就是微處理器開發(fā)板,例如一個Arduino控制器,它可以存儲并運(yùn)行程序??刂破骺梢越邮崭兄男盘?,并對它們進(jìn)行處理,然后激活并控制執(zhí)行器設(shè)備和警報器。軟件部分定系統(tǒng)的行為機(jī)制。這個過程要依賴軟件資源,也就是你系統(tǒng)中的一套程序,來進(jìn)行管理。更具體地說,我們需要編寫代碼來創(chuàng)建自己的程序,并將它們存儲在我們的微處理器芯片中。因此,當(dāng)我們得到了需要的數(shù)據(jù)(例如,用來檢測火災(zāi)的室內(nèi)監(jiān)控溫度數(shù)值),對這些數(shù)據(jù)進(jìn)行了處理(通過是否超過了溫度的閾值,來判斷火災(zāi)的發(fā)生),處理過程無需人工干預(yù),然后,著手實施必要的措施(觸發(fā)警報并執(zhí)行滅火措施)。在這里我并不會向你指定具體的一門編程語言。我們單就軟件部分進(jìn)行討論,隨后將會深入地研究各種不同的編程語言和應(yīng)用程序(在本書中,我們將會使用到很多種編程語言,例如Python)。讀到此處,讀者們應(yīng)該已經(jīng)熟悉了相關(guān)的基本術(shù)語以及系統(tǒng)的組成部分,并對它的功能有了一定的了解。但是現(xiàn)在你能確切地講出,創(chuàng)建一個安全系統(tǒng)都需要些什么嗎?在哪里安裝又如何對其進(jìn)行安裝呢?它是否被安裝在了正確的位置呢?這就需要你先來對這個系統(tǒng)進(jìn)行設(shè)計。部署安全系統(tǒng)的先決條件如果你正在考慮部署一個安全系統(tǒng),那么最有可能的原因就是你有這方面的關(guān)鍵需求。因此,在這里最重要的事情就是要準(zhǔn)確地確定這種需求。如果做不到這一點,我們最終會步入歧途并造成損失或者導(dǎo)致半途而廢。如果并沒有這種需求,你只是擁有著一顆對現(xiàn)代科技勇于探索的心,那么你可能是出于學(xué)習(xí)和娛樂的目的來設(shè)計這個系統(tǒng),或者試圖將自己的家打造成一個現(xiàn)代化的場所。你可以瀏覽一下這個行業(yè)的先進(jìn)企業(yè)的網(wǎng)站以獲得參考。我們可以看到,大多數(shù)企業(yè)的系統(tǒng)是類似的,只是在某些部分存在一些差異,而這些差異大多是源于客戶的需求。舉個例子,許多系統(tǒng)都使用了相同的或者相類似的電子元件,那么它們的區(qū)別在哪里呢?就在于圖形化用戶界面(GraphicalUserInterface,GUI)的細(xì)節(jié)。對于系統(tǒng)而言,圖形化用戶界面就如同我們每個人的臉一樣,它的設(shè)計同樣也要考慮到最終用戶的方便易用。如果你設(shè)計了一套任何人都無法理解和控制的程序,結(jié)局只能是徒勞無功。一旦你在腦海中有了一個設(shè)計思路,那么下一步就是考慮你要安裝的系統(tǒng)所在的環(huán)境,此外,還要考慮到你所能利用到的物資資源以及所能投入的經(jīng)濟(jì)成本。這些事情看起來可能很簡單,可你搜集的信息越多,工作起來的時候就會越順利。這里舉一個說明性的例子,就是必須弄清楚光源、管道以及提供給我們網(wǎng)絡(luò)接入的布局。當(dāng)你掌握了這些布局情況后,就可以很容易地構(gòu)建我們的項目了。說到這本書所使用的材料,我們采用了一款最為著名的Arduino模塊——ArduinoUNO的3.0版本。在下一章中,我們將會對它進(jìn)行更多的了解。需要的其他材料也都是隨處可見并且價格低廉的,它們當(dāng)中很多都是由免費(fèi)的硬件或者開源的硬件(本身也都是很便宜的資源)所創(chuàng)建的。因此,如果你愿意的話,可以使用相對裝配模塊而言成本極為低廉的方案在家中建立一個這樣的系統(tǒng)。如果想獲得關(guān)于免費(fèi)硬件更多的信息,請訪問如下網(wǎng)址:\h/wiki/Opensource_hardware在當(dāng)前條件下要為安全系統(tǒng)做的準(zhǔn)備當(dāng)你選定了安裝的地址之后,這里就有許多的因素(甚至要考慮到周邊行人)需要你進(jìn)行考慮,以此來保證系統(tǒng)組件的安全性、完整性以及可靠性。只需要一個連接的配備條件下,你可以將Arduino板和其他的一些模塊放入墻體的變電箱中。如果你的環(huán)境中不具備使用電源的條件,或者想要一個后備系統(tǒng)(例如一個UPS[不間斷電源]),可以選擇可充電式鋰離子(Li-ion)電池,甚至太陽能電池板來作為系統(tǒng)的能源等。警告:無論在什么時候使用電池,你都需要考慮到極端的溫度會對電池產(chǎn)生的影響,例如電池電流承載能力降低,在低溫情況下電池放電能力的減弱,高溫帶來的熱損壞風(fēng)險,以及在某些極端情況下可能會有爆炸風(fēng)險。同樣地,我們也必須要小心濕氣、水凝結(jié)和露水,這些都可能會對我們的基礎(chǔ)設(shè)施產(chǎn)生破壞。這里建議你最好能保證網(wǎng)絡(luò)的連接,倒不一定是必須要連接到互聯(lián)網(wǎng)上。如果連接到了一臺內(nèi)部網(wǎng)絡(luò)的路由器上,通過這個連接你可以訪問每一個獨立的部分,修改它們的設(shè)置或者訪問它們的服務(wù)(例如,一個用戶圖形界面顯示警報是否已經(jīng)觸發(fā))。能是由于我們連續(xù)地使用某些技術(shù)設(shè)備產(chǎn)生的。這些設(shè)備以不同的頻率向外發(fā)射電磁輻射,而這些電磁輻射可能會導(dǎo)致系統(tǒng)的行為被改變。另一方面,如果安裝是在室外進(jìn)行的,你應(yīng)該對設(shè)備進(jìn)行妥善的安置,以使得它們免于惡劣天氣(例如閃電以及接地)的傷害。所有這一切都可以摧毀系統(tǒng)的電路,而且也會給人身安全帶來危險。最后,我必須指出一點,如果你在家里養(yǎng)了寵物的話,那么在你安裝那些價格可能十分昂貴的傳感器和執(zhí)行器的時候,一定要加倍小心。這些設(shè)備很有可能會被破壞,而針對它們的修復(fù)工作是十分困難的。另外,如果你的設(shè)備沒有選好合適的定位,那么可能每當(dāng)你的狗或者貓穿過花園的時候,都可能會激活報警系統(tǒng)。請牢牢記住,要定期對設(shè)備進(jìn)行維護(hù)。這里建議你最好在日程表中預(yù)留一些時間來專門執(zhí)行系統(tǒng)的維護(hù)。有線以及無線安全系統(tǒng)中被深入地討論,這個設(shè)備適合在很多地方進(jìn)行放置,并能快速地進(jìn)行安裝(在環(huán)境中部署線路)。多都相當(dāng)接近。目前最受歡迎的無線技術(shù)Wi-Fi和藍(lán)牙所使用的頻段都是2.4GHz,考慮到都會成為通信的障礙。如果你想獲得更多的相關(guān)信息,建議訪問負(fù)責(zé)監(jiān)管這些技術(shù)標(biāo)準(zhǔn)的組織IEEE的官方網(wǎng)站:\h/的普通線路。這里有一些措施(例如X10技術(shù)),可以實現(xiàn)一棟建筑內(nèi)的所有房間的互聯(lián),只需要它們的電源相數(shù)相同即可。X10技術(shù)可以使用電力線路來傳送信號以及進(jìn)行控制操作。這種部署方案的缺點主要在于初期的經(jīng)濟(jì)投入。注意:如果你想獲得更多關(guān)于X10技術(shù)的相關(guān)信息請訪問如下網(wǎng)址:\h/wiki/X10_(industry_standard)傳統(tǒng)系統(tǒng)與現(xiàn)代化的家居安全系統(tǒng)的比較最后,我們將給出一個傳統(tǒng)系統(tǒng)與現(xiàn)代化系統(tǒng)之間的比較,值得指出的是,在面對不同需求的時候,它們各自都有著特定的用處,這些需求例如減少模型的復(fù)雜性,提高系統(tǒng)的可靠性,增加系統(tǒng)可用性以及向開發(fā)者提供豐富的信息。以前,如果綜合考慮到多種因素,例如價格、技術(shù)的成熟度以及現(xiàn)有的基礎(chǔ)設(shè)施(連接)等,以一個較低的成本來實現(xiàn)一個可以實時管理的系統(tǒng)幾乎是不可能的。的一個系統(tǒng)變成現(xiàn)實。更進(jìn)一步地說,你甚至可以利用擁有更強(qiáng)大處理能力的云計算系統(tǒng),這種方案可以真正的實現(xiàn)零維護(hù)。在這里我還要補(bǔ)充一點,只需要具備基本的編程和電子方面的知識,就可以完成系統(tǒng)的安裝、維護(hù)和遷移。如果有一天你要搬家了,你可以輕松地將系統(tǒng)中最重要的設(shè)備帶走并再次利用。最后一點,你在世界上的任何地方都可以實現(xiàn)對數(shù)據(jù)的訪問。只需要在智能手機(jī)上安裝一個簡單易用的應(yīng)用程序,你就可以檢查家中的所有事務(wù)是否井然有序。因此,可以這樣說,如今我們擁有了更智能、更經(jīng)濟(jì)的系統(tǒng)。這些系統(tǒng)運(yùn)行速度更快,也為我們的家庭和環(huán)境提供了更大的安全保障。小結(jié)在這一章的學(xué)習(xí)中,本書詳細(xì)地介紹了一個安全家居系統(tǒng)的各個部分,但是并沒有涉及相關(guān)的任何具體設(shè)備。通過理論講解的方式,我們了解了系統(tǒng)的組成部分以及它們各自的功能。在擁有了這些知識之后,我們已經(jīng)做好了在下一章中深入學(xué)習(xí)的準(zhǔn)備了。我可以向你保證,下一章中內(nèi)容將會是引人入勝的。在下一章中,我們將了解Arduino的概念和歷史,以及ArduinoUno的各個組成部分。同樣我們也將學(xué)習(xí)到它們的工作方式,以及如何使用shield對ArduinoUNO進(jìn)行擴(kuò)展。第2章 Arduino與ArduinoIDE入門在這一章中,我們將會介紹如下的內(nèi)容:ArduinoUNO的介紹Arduino開發(fā)板項目實施中的安全預(yù)防措施Arduino集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)編寫第一個Arduino程序——“HelloWorld”Python編程語言和Arduino在經(jīng)過了上一章中對家居安全系統(tǒng)簡單的學(xué)習(xí)之后,我們現(xiàn)在即將進(jìn)入神奇而又強(qiáng)大的Arduino世界。隨著本章內(nèi)容的展開,我們將會一步步地了解到Arduino的特點、編程環(huán)境以及它那強(qiáng)大的功能。在這一章中,我們還將會介紹創(chuàng)建自己的第一個Arduino程序。不過在此之前,我們首先還是先來了解一下ArduinoUNO。Arduino項目最初于2005年在意大利的伊夫雷亞被設(shè)計并開發(fā)出來,最初是為了給學(xué)生在開發(fā)項目時提供一種價格低廉而又性能優(yōu)越的開發(fā)板。在Arduino平臺出現(xiàn)以前,市面上并沒有性價比如此優(yōu)越的同類產(chǎn)品。Arduino平臺具有極大的優(yōu)勢,它具備了多種功能,成本又十分低廉,價格不超過30美元,對于所有人而言開發(fā)都十分簡單,即使你完全沒有專業(yè)方面的知識也可以輕松掌握,學(xué)習(xí)效果十分理想。另外,Arduino所使用的編程語言是基于C#(C-Sharp)。在Arduino出現(xiàn)之前,我們建立系統(tǒng)可不是一件簡單的事。例如,我們建立一個簡單的發(fā)光系統(tǒng),它的功能是每隔固定的一段時間就閃爍一次。那么我們必須使用一種特定的芯片并對其進(jìn)行處理,使得這個芯片可以按照要求來控制燈的閃爍。另外,我們還需要手動的將這個芯片焊接到一個PCB上。Arduino的軟件和硬件自從推出就一直遵循著開源的原則。尤其是Arduino的開源硬件,得到了社會各界的認(rèn)可并直接促進(jìn)了硬件廠商的技術(shù)變革。借助于互聯(lián)網(wǎng)的傳播,Arduino在短短的10年成長過程中已經(jīng)成為了世界上最流行的開發(fā)板產(chǎn)品。需要注意的是,目前世界上有很多家的廠商都在生產(chǎn)Arduino開發(fā)板,例如Adafruit、SparkFun等,當(dāng)然Arduino本身也提供這些產(chǎn)品。因此,你經(jīng)常會發(fā)現(xiàn)一些不同品牌的開發(fā)板卻有著相同的設(shè)計。Arduino的成功得益于其優(yōu)秀的開源措施。Arduino的開發(fā)團(tuán)隊鼓勵所有人去查看和下載他們的設(shè)計圖紙,參與對Arduino的學(xué)習(xí)和研究,將資料進(jìn)行分享或者使用Arduino和其他設(shè)備聯(lián)合工作。隨著Arduino相關(guān)的開源社區(qū)和開源論壇的完善,你可以隨時從這里獲得知識和解除疑惑。這里推薦一個由MassimoBanzi在TED-Talks上錄制的關(guān)于Arduino短片,你可以訪問如下地址進(jìn)行查看:\hhttp://youtube/UoBUXOOdLXYArduino開發(fā)板從現(xiàn)在開始,我們將開始講述Arduino的特性,Arduino的標(biāo)識如圖2-1所示。下面列舉了開發(fā)板的一些性質(zhì),我們可以根據(jù)這些性質(zhì)作為標(biāo)準(zhǔn)來對其進(jìn)行分類:所擁有輸入/所使用的芯片類型系列Intel規(guī)格用途連接類型前面給出的分類標(biāo)準(zhǔn)并不是絕對的,但是這些標(biāo)準(zhǔn)可以幫助我們快速對各種開發(fā)板有一個大概的認(rèn)識,從而根據(jù)自身的需求做出最適合的選擇。當(dāng)然,正如前文所提到的,所有的開發(fā)板都是基于相同的原理,從一個到另外一個并不會有太大的差異。下面列舉了當(dāng)前市場上流行的開發(fā)板。圖2-1Arduino的標(biāo)識ArduinoMEGA這種開發(fā)板擁有數(shù)目眾多的輸入輸出引腳,用來實現(xiàn)和大量的傳感器或者執(zhí)行器的互聯(lián),這樣就無需再使用復(fù)用器之類進(jìn)行信號交換的設(shè)備。使用MEGA作為開發(fā)板的優(yōu)勢在于,在無需擴(kuò)展板的情況下,我們就可以通過它來控制大量的硬件。MEGA經(jīng)常應(yīng)用在氣象站和3D打印機(jī)等場合。ArduinoNANOArduinoNANO是這個系列開發(fā)板中體積最小的一種。由于體積上的優(yōu)勢,ArduinoNANO可以輕易地被集成到任何已建成的裝置中,從而為其提供新的屬性。對于一些對計算能力要求不強(qiáng)的系統(tǒng),ArduinoNANO是十分理想的智能模塊,它擁有著極低的功耗(5V)和較輕的重量。它擁有一個microUSB接口,所有的輸出接口都設(shè)計在了開發(fā)板的背面(我們可以通過電纜或者焊接的方式對其進(jìn)行連接)。ArduinoNANO在一些受到環(huán)境限制的最終解決方案(例如無人機(jī)或者火箭)中是極為理想的。ArduinoETHERNET這個開發(fā)板和ArduinoUNO十分相似,它的優(yōu)勢在于擁有一個以太網(wǎng)接口。如果以前一直使用有線連接,那么現(xiàn)在是時候來考慮一下無線連接的方案了。IntelGALILEOIntelGalileo是一款使用了英特爾處理器的新型開發(fā)板。它擁有一個以太網(wǎng)接口,兩個microUSB(雙向)接口,一個多功能的輸入輸出接口。利用這個接口可以實現(xiàn)多個開發(fā)板的集群工作,而每一個開發(fā)板本身都可以作為一個獨立單元來工作。ArduinoUNOArduinoUNO(如圖2-2所示)是目前市面上通用性最好使用范圍最廣的開發(fā)板,大小適中的特點使得它幾乎可以部署在任何的環(huán)境中。乍一看這個開發(fā)板似乎很簡單,但是,它擁有著大量的擴(kuò)展模塊,例如Wi-Fi、藍(lán)牙、NFC和I/O擴(kuò)展模塊板,這個特點使得ArduinoUNO可以滿足我們在各方面的需求。這使得ArduinoUNO成為了一款極為靈活的微處理器。在目前的市場上,ArduinoUNO得到了開發(fā)者們最大的支持。圖2-2 ArduinoUNO(Fritzing工具)ArduinoUNO開發(fā)板上包含了13個數(shù)字接口、6個模擬接口、一個5V和一個3.3V的電源引腳。另外它還有一個可以更換的ATmega328芯片,這個特性使得將來對其進(jìn)行升級和修理都成為可能。技巧:在某些情況下,你可以拔下微控制器芯片,然后將Arduino開發(fā)板作為一個串行端口適配器,但是這個技術(shù)在本書中并沒有詳細(xì)介紹(注意:如果你這么做的話,可能要冒著設(shè)備被損壞的風(fēng)險)。當(dāng)芯片被移除以后,我們將會使用引腳0(RX)和1(TX)。想獲得有關(guān)于開發(fā)板的規(guī)格、功能的更多信息或想購買各種開發(fā)板,你可以訪問如下鏈接:http://www.arduino.cc/en/pmwiki.php?n=Main/Boards\hhttp://store.arduino.cc/https://\h/https://\h/安全注意事項孩子們也可以參與到本書的實例中。但是至關(guān)重要的一點是,孩子們不可以獨立完成這些任務(wù),這一切必須在一個負(fù)責(zé)任的成年人的監(jiān)督下來進(jìn)行,整個過程中要嚴(yán)格遵守安全措施。盡管我們使用的組件都工作在一個很微弱的電壓下,通常在3.3V到5V之間,但是疏忽或者某些技術(shù)的不當(dāng)使用同樣會給使用者帶來危險。因此,建議你要遵守如下的注意事項。始終保持干凈、整潔的工作環(huán)境。在使用電器或者進(jìn)行加熱操作的時候,你一定要遠(yuǎn)離可燃物品。要知道一個裝滿了油漆或者化學(xué)藥品的倉庫可不是一個能進(jìn)行焊接的地點。對于孩子來說,Arduino可以算是一個完美的選擇,它不需要進(jìn)行線路焊接。但是要注意Arduino包含了許多的細(xì)小的零件,因此一定要小心處理。如果你工作在一個高電壓的環(huán)境下,在對任何模塊和組件進(jìn)行操作時一定要記得關(guān)閉電源。還有一定要注意的一點是,盡量保護(hù)你項目中使用的材料,不要使其受到惡劣天氣的影響。在最終安裝設(shè)備之前,一定要進(jìn)行長時間的測試(這樣做是為了保證組件在運(yùn)行過程中的穩(wěn)定性和安全性)。如果你在項目的哪個環(huán)節(jié)卡住了或者不了解自己現(xiàn)在正在做什么,又或者對某個環(huán)節(jié)產(chǎn)生了疑問,那么有很多的方法來解決這些問題。首先你可以嘗試通過上互聯(lián)網(wǎng)(這里有很多的制造商論壇)來尋找問題的解決方案,又或者你可以研究項目的裝配簡圖來對其進(jìn)行分析。如果你十分了解這些設(shè)備的原理,你還可以使用萬用表來解決一些問題。但是人非圣賢,孰能無過,那些將自己的設(shè)計上傳到網(wǎng)絡(luò)的人也同樣會出錯誤。如果你選擇了別人的設(shè)計,在這里還是要建議你盡量聯(lián)系到設(shè)計者,以獲得更詳細(xì)的設(shè)計信息。這將幫助你對設(shè)計有更多的了解,同時也確保了你能搞清楚為什么這個設(shè)計可以工作起來,以及這個設(shè)計是如何工作的。ArduinoIDE我們現(xiàn)在介紹ArduinoIDE的安裝過程。安裝在完成了對相關(guān)概念的理解之后,我們就要開始步入實踐環(huán)節(jié)中了。你將使用到ArduinoUNO,一個USB的A型公頭對B型母頭轉(zhuǎn)接線,一臺個人計算機(jī)或者一個樹莓派。接下來,我們將介紹在各種操作系統(tǒng)下ArduinoIDE的安裝步驟。這些不同系統(tǒng)的安裝過程具有一定的復(fù)雜性,因此在處理時應(yīng)該十分仔細(xì)(關(guān)于其他的發(fā)布版的安裝信息或者在安裝的過程中遇到的麻煩,你可以通過閱讀在線操作指南來查詢或解決)。如果你需要下載ArduinoIDE,可以訪問:\hhttp://arduino.cc/en/Main/Software在Windows操作系統(tǒng)上安裝IDE如果想在Windows操作系統(tǒng)上安裝ArduinoIDE,你必須先獲得系統(tǒng)的管理員權(quán)限。在成功取得了必需的管理權(quán)限之后,你就可以按照如下步驟進(jìn)行安裝操作了。將安裝文件下載到桌面上,并對其進(jìn)行解壓縮操作。雙擊運(yùn)行可執(zhí)行文件(.exe文件)。當(dāng)安裝過程結(jié)束后,你就可以將這個模塊連接到你的計算機(jī)上了。在Mac操作系統(tǒng)上安裝IDE如果想在Mac操作系統(tǒng)上安裝ArduinoIDE,你必須先獲得系統(tǒng)的管理權(quán)限。在成功取得了必需的管理權(quán)限之后,你就可以按照如下步驟進(jìn)行安裝操作了。將安裝文件下載到桌面上,并對其進(jìn)行解壓縮操作。運(yùn)行.dmg安裝文件并按照屏幕中的指示進(jìn)行操作。當(dāng)安裝過程結(jié)束后,你就可以將這個模塊連接到你的Mac計算機(jī)上了。GNU-Linux(Debian-Ubuntu)如果想在Linux操作系統(tǒng)上安裝ArduinoIDE,你可以按照如下步驟進(jìn)行安裝操作。在你確認(rèn)了自己擁有超級用戶的權(quán)限(命令之前都會有一個美元符號($))后,打開一個終端窗口,運(yùn)行如下的命令:George:~$sudoapt-getupdate //更新存儲庫George:~$<strong>sudoapt-getinstallarduino</strong> //下載并安George:~$echo$? //測試在最后一個命令輸入完成之后,如果屏幕上輸出了一個字符0功完成。如果不成功的話,請再次仔細(xì)執(zhí)行前面的步驟。如果錯誤仍然存在,請參閱Arduino網(wǎng)站上的官方指南。Linux發(fā)行版,而這些發(fā)行版并不含有高級程序包工具(AdvancedPackageTool,APT)。那么你可以從Arduino的網(wǎng)站下載一個官方的.tgz庫文件,然后執(zhí)行以下步驟:George:~$tarxvzf(filename.tgz) //解壓縮文George:~$cdArduino-1.X.Y… //修改文件目錄George:~$./arduino //測試使用ArduinoIDE開始工作在成功地安裝了ArduinoIDE之后,讓我們來繼續(xù)了解它的各個組成部分,并逐步熟悉如何利用ArduinoIDE來配置ArduinoUno。當(dāng)然,首先必須將ArduinoUno和你的計算機(jī)連接到一起。接下來,按照如下步驟來配置IDE。所示,首先要在IDE窗口最頂端的導(dǎo)航欄處選中Tools選項,然后在Tools下拉菜單中選中Board,在Board的下一級菜單中選中ArduinoUNO。圖2-3 在ArduinoIDE中選中ArduinoUNO然后,還是在最頂端的導(dǎo)航欄處選中Tools選項,然后在Tools下拉菜單中選中SerialPort,這表示我們在這里選擇使用串口來連接ArduinoUno。如果選中的端口不能工作的被一個連接到了你計算機(jī)上的真實或者虛擬設(shè)備占用。到此為止,我們成功建立了用來進(jìn)行項目開發(fā)的軟件工作環(huán)境。怎么樣,很簡單吧?如果你之前有過其他微控制器開發(fā)的經(jīng)驗,那么你一定會發(fā)現(xiàn)Arduino開發(fā)環(huán)境的搭建多么容易。接下來我們來介紹這個界面友好的開發(fā)環(huán)境的詳細(xì)信息,如圖2-4所示。在界面的上方,你可以看到一個綠色的圖形化工具條,它包含了6個小圖標(biāo),第一個圖標(biāo)是對勾,最后一個圖標(biāo)是一個放大鏡。下面是這些圖標(biāo)的詳細(xì)功能。編譯(Verify):這個操作負(fù)責(zé)在代碼載入到芯片之前對其進(jìn)行檢查,并對這些代碼進(jìn)行編譯,將這些代碼轉(zhuǎn)化為一種機(jī)器可以理解的語言。上傳(Upload):這個選項可以將代碼燒錄到ArduinoUNO上。新建程序(New):使用這個選項,你可以打開一個空白的項目文件,然后在文件中編寫新的代碼。打開程序(Open):使用這個選項,你可以打開一個保存在計算機(jī)中的代碼文件。保存程序(Save):使用這個選項,你可以用來保存你編寫完的代碼文件。串口監(jiān)視器(SerialMonitor):這是最常用的選項之一,通過它可以實現(xiàn)計算機(jī)和Arduino開發(fā)板之間的通信。一般而言,它是一個可以記錄向ArduinoUNO發(fā)送和從ArduinoUNO接收信息的界面。圖2-4 ArduinoIDE的細(xì)節(jié)在白色的畫布部分可以輸入項目的代碼,隨后我們將講解代碼,并對代碼進(jìn)行檢查和編譯,然后將其發(fā)送到ArduinoUno。最后的一部分是屏幕最下方的控制臺(黑色盒狀區(qū)域),這是一個調(diào)試用的工具。如果某些代碼中出現(xiàn)了錯誤,它將會在這里被顯示出來以便我們發(fā)現(xiàn)。HelloWorld現(xiàn)在是時候來開始學(xué)習(xí)和Arduino相對應(yīng)的軟件/代碼部分了。ArduinoUNO允許你使用多種編程語言來進(jìn)行項目的開發(fā),但是如果你此前對編程開發(fā)并不熟悉或者現(xiàn)在想采用一種快速而簡潔的編程解決方案,在這里我推薦你采用項目本身自帶的Arduino語言(這是一種過程語言演變而來的語言)。一個程序的結(jié)構(gòu)如下所示,它將作為我們今后程序的范例://這一行是一個注釋語句,ArduinoIDE并不會編譯這句代碼//我們必須使用注釋來保證代碼的可讀性#includeNAMELIBRARY //將NAMELIBRARY庫文件添加到項目中voidsetup(){ //函數(shù)入口,運(yùn)行一次//準(zhǔn)備設(shè)置Arduino的輸入輸出引腳pinMode(10,OUTPUT); //將10引腳設(shè)置為輸出引pinMode(11,INPUT); //將11引腳設(shè)置為輸入引腳}voidloop(){ //在函數(shù)"setup"完成后開始執(zhí)行//迭代執(zhí)行多次}到此為止,我們已經(jīng)有了足夠的知識儲備來創(chuàng)建一個小型的程序。如果愿意,你可以通過IDE環(huán)境自帶的一些代碼范例來進(jìn)行學(xué)習(xí)。查看這些代碼的方法是:首先選擇File選項,然后在下拉菜單中選擇Examples選項,在彈出的對話框中選中目錄C:\ProgramFiles(x86)\Arduino\examples\,就可以打開并查看實驗項目的源代碼(前提是你已經(jīng)擁有了實例中所使用的必備硬件)。下面就是一個用于ArduinoUno的基礎(chǔ)代碼實例://我的第一個Arduino項目voidsetup(){Serial.begin(9600);//打開串行端口}voidloop(){delay(1000);//等待1秒=1000毫秒Serial.print("Hello,I'mArduino\n");//輸出“Hello...”//"\n"相當(dāng)于ENTER鍵}前面的例子展示了一個用來打開串行端口(如圖2-5所示),并等待1000毫秒的簡單任務(wù)。在任務(wù)的最后打印輸出了一句話“Hello,I'mArduino”。圖2-5 Arduino串行接口——輸出Python和Arduino在了解了串行接口的工作原理之后,我們的學(xué)習(xí)將邁上一個新的臺階。現(xiàn)在我們使用Python編程語言(Python的標(biāo)識如圖2-6所示)和ArduinoUNO進(jìn)行交互,在這個過程中將不會使用到串行監(jiān)視器。圖2-6 Python的標(biāo)識這里先對Python語言做一個簡短的回顧,它是一門解釋型的語言,這門語言的設(shè)立宗旨就是增加代碼的可讀性,使其具備模塊化、靈活性以及多用性的特點。使用Python語言,我們可以完成數(shù)學(xué)運(yùn)算,對復(fù)雜的方程式求解,創(chuàng)建圖形化的界面,甚至可以將它應(yīng)用于聲音和圖像方面。這是一門十分優(yōu)秀的編程語言,所以真的很難用三言兩句就講清楚,這也是我向你推薦多閱讀一些Python相關(guān)書籍的原因。如果你是剛剛接觸到這種語言的話,請訪問https://www.python.org/來獲得關(guān)于Python的基本思想作為這個項目的開始。在本節(jié)中,你需要首先了解安裝Python2.7的細(xì)節(jié),并熟悉控制臺或者圖形化環(huán)境的使用。如果這是你第一次聽到這些內(nèi)容,也不用為此擔(dān)心,之前給出的鏈接中提供了簡明的教程和學(xué)習(xí)指南,相信這些內(nèi)容可以使你快速地開始學(xué)習(xí)并持續(xù)提高開發(fā)能力。PySerial從PySerial官方網(wǎng)站下載壓縮文件:/pypi/pyserial(注意Linux操作系統(tǒng)對應(yīng)的版本為pyserial-2.7.tar.gz,Windows操作系統(tǒng)對應(yīng)的版本為pyserial-2.7.win32.exe)??梢园凑杖缦碌牟襟E來安裝PySerial。在Windows操作系統(tǒng)環(huán)境下,雙擊執(zhí)行.exe文件然后按照屏幕上的提示完成安裝的過程。在Mac/Linux操作系統(tǒng)環(huán)境下,你需要下載并解壓正確的安裝文件。在終端中使用如下的命令來解壓文件:tarxfvz/Downloads/pyserial-2.6.tar.gz使用如下的命令來更改目錄并進(jìn)行安裝:cdpyserial-2.6sudopythonsetup.pyinstallArduino代碼現(xiàn)在,我們將再次利用那個通過串行接口實現(xiàn)周期性打印消息的Arduino代碼。Python代碼我們將創(chuàng)建一段Python代碼,這段代碼從同一個串行接口接收消息。下面就是這段代碼:#Thisisacommentfromtimeimportsleepimportserialport=serial.Serial('/dev/…',9600)#"…"Putyourserialport#rememberyoucanknowitintheArduino-IDE#gotoTools>SerialPortwhileTrue:#Entersaloopinwhichhearsevery0.2secondsprintport.readline()sleep(0.2)你可以使用你最喜愛的文本編輯器來創(chuàng)建這段程序,并將它以serialpython.py為名保存。$pythonSerialPython.py這個程序執(zhí)行后將會得到如下的輸出:HELLOSERIALHELLOSERIALHELLOSERIAL小結(jié)現(xiàn)在我們已經(jīng)到達(dá)了這個章節(jié)的最后部分了。在本章中,我們走進(jìn)了神奇的Arduino世界,了解了它的各個組成部分,學(xué)習(xí)了如何進(jìn)行安全措施的管理,安裝了開發(fā)環(huán)境并創(chuàng)建了我們的第一個Arduino程序。這一章是十分重要的,所以,在開始后面幾章的學(xué)習(xí)前,一定要先確保你已經(jīng)徹底理解了本章的概念。好了,如果你已經(jīng)準(zhǔn)備好了,那么我們就開始下一章的學(xué)習(xí)。在下一章中,你將步入傳感器的世界。第3章 從代碼到真實世界當(dāng)你掌握了在前面章節(jié)中講到的內(nèi)容之后,我們可以開始增長新的見識了。如設(shè)備的接口信息和工作原理,以及用來驗證概念的必要組件的信息。在本章的最后部分,我們還將講解到強(qiáng)大的NFC技術(shù)。通過NFC技術(shù),我們可以提高Python腳本的能力。在本章中,我們將從以下幾個方面來開展學(xué)習(xí):ProtoBoards和接線信號(數(shù)字和模擬端口數(shù)據(jù)手冊ProtoBoards和接線在使用電子組件進(jìn)行實驗和研究的時候,你有很多種可行的方案可以選擇。其中一個很不錯的方案就是使用ProtoBoard(也稱為面包板)。使用面包板有一個很強(qiáng)大的優(yōu)勢,那就是我們可以在不進(jìn)行焊接操作的情況下,就對它的組件和原型電路進(jìn)行測試。這樣做的好處很多,比如你可以反復(fù)利用同一組件,實現(xiàn)系統(tǒng)的快速開發(fā),一旦發(fā)生錯誤可以很容易地修改,輕松完成系統(tǒng)的升級改進(jìn)。從外觀上看,ProtoBoard像是一個長方形的盒子,它由一些排成行和列且內(nèi)部互相聯(lián)系的小插孔組成,有幾組小插孔可以互相連接。這些孔通過插入組件的引腳來完成安裝。ProtoBoard可以被看作是邁向最終的PCB成品設(shè)計的階梯,這個階梯可以幫助你消除系統(tǒng)的錯誤,降低開發(fā)的成本。相關(guān)的更多信息請訪問\h/wiki/breadboard。使用面包板進(jìn)行開發(fā)的時候,你將會對接線技術(shù)有更多的了解。相比起其他的開發(fā)板,你可以快速地對接線進(jìn)行調(diào)整,這將可以為你帶來更多的接線經(jīng)驗。在接線的過程中有一些必須遵守的規(guī)則,如果違反了這些規(guī)則,可能會直接導(dǎo)致元件的短路從而對電路板造成無法挽回的損害。圖3-1給出一張具體的ProtoBoard圖片,從圖中我們可以看出ProtoBoard主要包含了兩種區(qū)域,兩側(cè)的垂直列部分(以+和-極性符號開始的列)和中間的水平行部分(由字母和數(shù)字組成的坐標(biāo)系)?!?”表示用于連接電路板的電力供應(yīng),“-”表示用于接地。電子元件不應(yīng)該插在垂直的那些列上,而是應(yīng)該用線連接到ProtoBoard中間的那些行上。如果我們將電阻器的一條引線連接到了第一行的第一個插孔中,那么電阻器的其他引線就應(yīng)當(dāng)連接到其他行的插孔中,而不能再連接到同一行了。圖3-1 一個ProtoBoard和一個ArduinoUno這個面包板被一條無形的軸線分成了垂直對稱的兩個區(qū)域,這意味著這兩個區(qū)域在電力的使用上是相互獨立的。我們將利用這個特性來使用某些集成電路(IntegratedCircuit,IC)。這些集成電路的安裝將橫跨兩個區(qū)域。仔細(xì)觀察圖3-2,圖片的上半部分給出的都是錯誤的元件安裝方式,而下半部分則給出了正確的元件安裝方式。另外,圖中橫跨兩個區(qū)域的芯片安置方式是正確的,這種用法在集成電路中是很常見的。圖3-2 利用Fritzing得到的Protoboard圖像是一個可以幫助我們?yōu)轫椖靠焖賱?chuàng)建電路設(shè)計的工具。關(guān)于Fritzing這款工具的更多詳情請訪問網(wǎng)址\h/download/。模擬端口和數(shù)字端口現(xiàn)在我們已經(jīng)了解面包板的正確用法了。緊接著一個非常重要的概念——端口,擺在了我們面前。開發(fā)板包含了各種的輸入和輸出端口,端口的數(shù)量因我們所使用的開發(fā)板的型號差異而有所不同。但是端口是什么呢?ArduinoUNO開發(fā)板的端口在它的兩側(cè)。它們作為一種連接,來實現(xiàn)開發(fā)板與傳感器、執(zhí)行器以及其他設(shè)備(甚至是其他的Arduino開發(fā)板)的交互。主板的端口支持?jǐn)?shù)字和模擬兩種信號。這些端口的優(yōu)勢不僅在于它們的雙向性,還包括開發(fā)者可以對這些端口的行為進(jìn)行定義。在下面的代碼中,第一部分表明我們設(shè)定了將要使用端口的狀態(tài),下面就是setup函數(shù)的內(nèi)容://代碼開始voidsetup(){ //函數(shù)入口,運(yùn)行一次//準(zhǔn)備設(shè)置Arduino的輸入輸出引腳pinMode(10,OUTPUT); //將10引腳設(shè)置為輸出引pinMode(11,INPUT); //將11引腳設(shè)置為輸入引腳}下面讓我們來看看ArduinoUNO上的數(shù)字與模擬端口。模擬信號模擬信號指的是隨著時間連續(xù)變化的信號,模擬信號可以被理解為隨著時間連續(xù)變化的電壓。舉個例子,它可能從2V變到3.3V再變到3.0V或者3.333V,電壓隨著時間逐漸變化,每次的值都不相同。兩個值之間的數(shù)字是無限多的(理論上),這是一個很有意思的特性,而這個特性剛好是我們所需要的。例如,如果我們想要測量一個房間的溫度,溫度的測量值精確到小數(shù),這就需要使用一個模擬信號來表示測量值。另外,我們平時所使用的十進(jìn)制表示法中不可能存儲無限長的小數(shù),只能進(jìn)行數(shù)學(xué)舍入(數(shù)值截斷)。有一個被稱為離散化的過程就被用來實現(xiàn)模擬信號到數(shù)字信號的轉(zhuǎn)化。無論是在現(xiàn)實世界中還是在微控制器的世界中,兩個值之間的數(shù)字的個數(shù)都不會是無限大的。ArduinoUNO的接口使用了0到1023來描述一個模擬輸入信號。某些被標(biāo)記了PWM或者a~的端口可以創(chuàng)建一個在0到255之間變化的輸出信號。數(shù)字信號數(shù)字信號只包含了兩個值——0和1。許多電子設(shè)備內(nèi)部都設(shè)立好了一個范圍,從3.5V到5V之間的電壓值被看作是邏輯值1,從0V到2.5V之間的電壓為邏輯值0。為了更好的理解這點,我們來看一個按下按鈕觸發(fā)警報的例子。對于警報來說只有兩種有效的情況,一是當(dāng)按鈕被按下觸發(fā)警報,另一種就是按鈕沒有被按下。這里只能觀察到這兩個狀態(tài)。所以不同于之前那個有一個線性范圍值的溫度傳感器的例子,這里只有兩個值。從邏輯上講,我們可以根據(jù)不同的目的使用這些特性。ArduinoIDE中包含了一些說明性的例子,你可以將它們加載到開發(fā)板上來研究模擬信號和數(shù)字信號的理論。加載的方法是在導(dǎo)航欄上依次點擊File|Examples|Basic|Blink。傳感器在第1章家居安全系統(tǒng)的入門知識中,我們討論了各種不同種類的硬件,現(xiàn)在我們將就其中的傳感器展開詳細(xì)的討論?,F(xiàn)在傳感器的種類各種各樣,我們沒有必要去講解得面面俱到。現(xiàn)在我們就它們之間的一些差異進(jìn)行一下描述?,F(xiàn)實世界物體的物理屬性或者這些屬性的集合都有相對應(yīng)的傳感器,所以我們可以測量力度(人們在地上行走的壓力)、運(yùn)動(物理位移,即使在沒有光線的情況下)、煙霧、氣體、圖片(是的,攝像機(jī)也是一種傳感器)、噪聲(錄音)、天線(無線電波、WiFi和NFC)以及一系列的屬性,這也許需要一整本書來講解所有這些內(nèi)容。如果你去一家電子商店或者銷售門戶網(wǎng)站購買一個濕度傳感器(或者其他的任何電子產(chǎn)品),要比廉價的山寨品更耐用。當(dāng)我們開始尋覓一款合適的組件時,可以先查看詳細(xì)的組件數(shù)據(jù)資料(后面我們將會對這個文檔有詳細(xì)的講解),它涵蓋了產(chǎn)品的運(yùn)行特性和價格差異。你不必對數(shù)據(jù)資料中出現(xiàn)的兩款非常相似的型號感到驚訝,一些產(chǎn)品是用來實現(xiàn)專業(yè)部署的(例如應(yīng)用在一些技術(shù)部門或者軍事部門),而其他的一些產(chǎn)品主要是為滿足消費(fèi)類市場而設(shè)計的。這里,我們將考慮的重點將放在那些質(zhì)量不錯且性價比又比較高的產(chǎn)品。接下來我們將會以一個例子來作為和后面段落的銜接。這個例子中我們將會使用一個溫度傳感器(TMP-36)和ArduinoUNO上的模擬端口。圖3-3中給出這個實驗的電路原理圖。圖3-3 我們的設(shè)計——使用Fritzing設(shè)計//代碼開始//###########################//作者:JorgeReyesCastro//ArduinoHomeSecurityBook//###########################//A3作為輸入引腳//傳感器TMP36//###########################//全局變量intoutPut=0;floatoutPutToVol=0.0;floatvolToTemp=0.0;voidsetup(){Serial.begin(9600);//啟動串行端口,波特率設(shè)置為9600}voidloop(){outPut=analogRead(A3);//從A3輸入端口獲取值outPutToVol=5.0*(outPut/1024.0);//使用值進(jìn)行計算volToTemp=100.0*(outPutToVol-0.5);//從數(shù)據(jù)表中獲得數(shù)據(jù)Serial.print(" \n");mprint("Outputofthesensor->",outPut);mprint("Conversiontovoltage->",outPutToVol);mprint("Conversiontotemperature->",volToTemp);delay(1000);//等待1秒}//創(chuàng)建輸出函數(shù)//創(chuàng)建一個可以重用的函數(shù)voidmprint(char*text,doublevalue){//接收兩個參數(shù)Serial.print(text);Serial.print("\t");//輸出一個制表符Serial.print(value);Serial.print("\n");//輸出新的一行}現(xiàn)在,你可以從IDE中打開一個串行端口,當(dāng)然也可以選擇不打開端口而僅執(zhí)行前面的Python腳本。我們可以看到Arduino的輸出。輸入下面的命令來將這些代碼在python中運(yùn)行:$pythonSerialPython.py。輸出的結(jié)果將如下:Outputofthesensor145.00Conversiontovoltage0.71Conversiontotemperature20.80通過這段Python腳本,我們設(shè)法從傳感器中提取到了一些數(shù)據(jù),這些數(shù)據(jù)是經(jīng)過ArduinoUNO對信號進(jìn)行處理之后得到的?,F(xiàn)在使用ArduinoUNO的串行端口(利用Python腳本)對數(shù)據(jù)進(jìn)行提取和讀取。此時,我們可以按照自己的想法對數(shù)據(jù)進(jìn)行任意的處理,比如將它們存儲到一個數(shù)據(jù)庫中,或者將它們作為參數(shù)帶入到一個函數(shù)的運(yùn)算中,又或者使用它們來創(chuàng)建一個HTML頁面等。正如你可能已經(jīng)注意到的,我們現(xiàn)在正在進(jìn)行數(shù)學(xué)計算。不過,我們從哪里來獲得數(shù)據(jù)呢?這個問題的答案就是數(shù)據(jù)手冊。電子組件的數(shù)據(jù)手冊每當(dāng)我們需要使用或者操作一個電子組件的時候,就必須對它們的特性進(jìn)行研究。對于這一點,我們可以通過閱讀它們的官方文檔來解決,這些文檔的長度各不相同,但是制造商一般都會對該元件的特性進(jìn)行細(xì)致地描述。首先,我們要確定這個組件在它被制造時所獲得的唯一ID或者型號名稱。{TMP36GZ互聯(lián)網(wǎng)就可以很快找到它對應(yīng)的數(shù)據(jù)手冊。可以去\h搜索關(guān)鍵詞“TMP36GZ+datasheet”,或者直接訪問以下網(wǎng)址:\h/datasheets/Sensors/Temp/TMP35_36_37.pdf來獲得這個數(shù)據(jù)手冊。在獲得了這個數(shù)據(jù)手冊之后,你會發(fā)現(xiàn)很多組件看起來很類似,但是實際上這些組件的大小區(qū)別卻很大(這里的規(guī)格選擇對一個項目來說是至關(guān)重要的,一個錯誤的選擇可能給你帶來十分郁悶的意外)。這里舉一個例子,如果我們沒弄清楚元件的介紹就做了決定,那么可能會誤將一個用在手機(jī)上的元件買回來,這種元件是不可能被使用標(biāo)準(zhǔn)方式進(jìn)行焊接的,因為它們比你的小指甲還要小。因此,組件的外觀也是必須要注意的。在數(shù)據(jù)手冊的初始頁你可以看到該組件物理方面的特性。之后,它將介紹一些技術(shù)特點,比如工作電流、輸出電壓以及其他一些我們必須認(rèn)真了解的特性。這樣做是為了讓我們的設(shè)置與組件特性相符。一般情況下,我們工作的理想輸入電壓為2.7V到5.5V之間。Arduino的輸出電壓為5V。此外,要保持溫度在正常的工作范圍內(nèi)。下面我們將討論溫度對電子組件性能影響的具體細(xì)節(jié)。出現(xiàn)非常大的誤差。因此,盡量選擇那些在數(shù)據(jù)手冊中有著最優(yōu)異表現(xiàn)的組件來構(gòu)建系統(tǒng)。此外,你還必須始終遵守輸入電壓不能超出規(guī)定限額的規(guī)則,否則設(shè)備可能會被損壞,甚至無法修復(fù)。如果想獲得更多的關(guān)于ADC的信息,請參閱:\h/wiki/Analog-to-digital_converter.當(dāng)我們擁有了一個溫度傳感器設(shè)備之后,就可以利用它提取所需要的數(shù)據(jù)了。因此,我們需要進(jìn)行一個數(shù)據(jù)手冊中給出參考的簡單計算,正如所看到的,我們提供5V的電壓給傳感器,而它將根據(jù)溫度返回一個0到1023之間的數(shù)值。因此,我們使用一個簡單的公式來將這個數(shù)值和電壓值(模擬值)進(jìn)行轉(zhuǎn)換:電壓=從傳感器得到的值×(5/1024)這里使用數(shù)值1024是沒有問題的,因為我們已經(jīng)表示,這個數(shù)據(jù)的取值范圍是從0(包括0)到1023。這個數(shù)字看起來可能有些不同尋常,但是在計算機(jī)和電子的世界中,0是一個十分重要的數(shù)字。因此,在進(jìn)行計算時要多加注意。當(dāng)我們?nèi)〉昧穗妷旱闹抵螅覀兙椭謱⑦@個測量結(jié)果轉(zhuǎn)換為度數(shù)。為此,通過使用數(shù)據(jù)手冊中的公式,我們可以快速地完成這個轉(zhuǎn)換。我們使用一個可以保存小數(shù)的數(shù)據(jù)(雙精度型或者浮點型)類型的變量,否則結(jié)果將會被截斷,一些有用的信息將會丟失(這看起來好像有些奇怪,但是這個錯誤很常見)。這個轉(zhuǎn)換的公式是Co=(電壓?0.5)×100.0?,F(xiàn)在我們擁有了所有必需的數(shù)據(jù)以及優(yōu)秀的傳感器實現(xiàn)方案,這樣我們就可以消除數(shù)據(jù)的噪音和干擾。如果你有這方面的需求的話,可以更深入地對此進(jìn)行研究。有了前面的知識儲備,這些將不難實現(xiàn)。近場通信近場通信(NearFieldCommunication,NFC)技術(shù)基于射頻識別(RadioFrequencyIdentificationDevices,RFID)技術(shù)。這個技術(shù)的基本原理就是將兩個設(shè)備結(jié)合到了一個開發(fā)板上,一個擔(dān)當(dāng)天線的角色用來發(fā)送信號,另一個擔(dān)當(dāng)讀取/接收信號的角色,它們使用電磁場來交流信息。它們能處理小塊的信息,這足以使我們讓這個卓越的開發(fā)板發(fā)揮出更為神奇的能力。如果想獲得更多的關(guān)于RFID和NFC的信息,請參閱:\h/wiki/Near_field_communication\h/wiki/Radiofrequency_identification如今,我們可以在各種身份識別場合和門禁卡系統(tǒng)(一個開創(chuàng)性的例子就是某些國家,比如西班牙,所使用的身份證),公共交通的儲值卡,銀行的信用卡甚至智能手機(jī)(通過NFC技術(shù)實現(xiàn)支付)中看到這種技術(shù)的身影。對于這個項目,我們將會使用一個流行的模塊PN532AdafruitRFID/NFC。其實在模塊的選擇上,你大可隨意。我之所以選擇這款,是對性能、費(fèi)用,當(dāng)然最重要的是芯片等方面經(jīng)過綜合考慮做出的決定。目前流行的PN532得到了交流社區(qū)的有力支持,有很多相關(guān)的書籍和工具,它本身還自帶了大量庫文件。你可以將這個模塊插在Arduino上,再連接到一個樹莓派或者直接連接到你的計算機(jī)(通過一個USB轉(zhuǎn)串口適配器)上。另外,PN532開發(fā)板上配備了一個免費(fèi)的Mifare1k卡,在這個項目中我們將會使用到這個卡。此外,你也可以花錢去購買標(biāo)簽卡或者那種內(nèi)置有小型電路的鑰匙扣,這種鑰匙扣可以對信息進(jìn)行存儲,甚至對其進(jìn)行加密。這種方案的好處是除了價格低廉之外,我們還可以保護(hù)某些區(qū)域甚至全部區(qū)域的信息以不受用戶的訪問。這將保證我們重要數(shù)據(jù)的安全,同時避免被人對標(biāo)簽進(jìn)行克隆/復(fù)制操作。這里有很多的標(biāo)準(zhǔn)來幫助我們對現(xiàn)存的各種不同類型卡進(jìn)行分類。Mifare1K卡就是其中的一類(當(dāng)然在這個實驗中你也可以使用其他的NFC卡,但是實驗中需要做一點小小的更改)。有關(guān)MIFARE卡的更多信息,請參閱:\h/wiki/MIFARE。顧名思義,這種型號的卡只能存儲1KB的信息,它采用了EEPROM類型存儲芯片(可重寫)。此外,這種型號的每張卡片還擁有著一個獨一無二的序列號(將它們區(qū)分開)。卡的內(nèi)部被劃分成了16個扇區(qū)(0~15),并且每個扇區(qū)被細(xì)分成了4個塊(0~3),每個塊至少可以保存16個字節(jié)的信息。對于每個塊,我們都可以為其設(shè)置一個密碼以防止別人閱讀你的內(nèi)容。(現(xiàn)在,我們要巧妙地控制卡的密鑰,因為用戶可能會意外地對卡進(jìn)行了加密,從而導(dǎo)致了卡無法使用)默認(rèn)情況下,所有卡都會有一個默認(rèn)密碼(ffffffffffff)。讀者可以參閱鏈接\h/product/789的內(nèi)容來繼續(xù)上面的例子,又或者你選擇了一個其他的設(shè)備,那么你可以通過互聯(lián)網(wǎng)搜索它的特性信息。鏈接中也包含了一些教程,這些教程將教會你如何兼容其他設(shè)備(樹莓派),理解數(shù)據(jù)手冊,以及通過Github下載模塊使用的庫文件?,F(xiàn)在我們來執(zhí)行上面提到的最后一點,下載模塊使用的庫文件。作為開源硬件最大的優(yōu)勢,它的設(shè)計可以被任何人進(jìn)行修改和完善。對了,一定要牢記在處理電子組件的時候,一定要小心并盡量避免靜電。正如你所看到的,這個模塊是直接插在Arduino上的。如果焊接引腳不能直接接在上面,你可以使用杜邦公對母延長線來利用其他未使用的端口。當(dāng)我們成功安裝了設(shè)備以后,就可以使用那些用來控制這個設(shè)備的庫文件了。在本書的第5章中提供了一個詳細(xì)的程序。這里有一點很重要,你必須對要下載的庫進(jìn)行重命名操作,以去除空格或者其他類似的字符。否則,在導(dǎo)入過程中可能會引發(fā)錯誤。當(dāng)我們做好了這些準(zhǔn)備,并且擁有一個Mifare1K卡,就可以來研究下面這段有助于我們理解本章講解的所有技術(shù)的代碼了。這段代碼將為標(biāo)簽分配唯一標(biāo)識符(UID)://###########################//作者:JorgeReyesCastro//ArduinoHomeSecurityBook//############################include<Wire.h>#include<Adafruit_NFCShield_I2C.h>//這是Adafruit庫文件//宏定義#defineIRQ(2)#defineRESET(3)Adafruit_NFCShield_I2Cnfc(IRQ,RESET);//準(zhǔn)備NFC模塊//安裝voidsetup(void){Serial.begin(115200);//打開串行端口Serial.print("######SerialPortReady######\n");nfc.begin();//啟動NFCnfc.SAMConfig();if(!Serial){//如果串行端口沒有工作,等待delay(500);}}//LOOPvoidloop(void){uint8_tsuccess;uint8_tuid[]={0,0,0,0};//用來保存讀取的數(shù)據(jù)的緩沖區(qū)//uint8_tok[]={X,X,X,X};//輸入你的序列號uint8_tuidLength;success=nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A,uid,&uidLength);//讀取//如果標(biāo)簽卡存在if(success){Serial.println("Foundcard\n");Serial.print("UIDValue:\t");nfc.PrintHex(uid,uidLength);//將字節(jié)轉(zhuǎn)換為十六進(jìn)制intn=0;Serial.print("YourSerialNumber:\t");//該函數(shù)顯示出真實值//從4個位置運(yùn)行提取數(shù)據(jù)while(n<4){//復(fù)制這段代碼并記得在下面的例子中使用Serial.print(uid[n]);Serial.print("\t");n++;}Serial.println("");}delay(1500);//等待1.5秒}現(xiàn)在,你可以從IDE中打開一個串行端口,當(dāng)然也可以選擇不打開端口而僅執(zhí)行前面的Python腳本。我們可以看到Arduino的輸出。輸入下面的命令來將這些代碼在Python中運(yùn)行:$pythonSerialPython.py程序執(zhí)行完將會得到如下的輸出結(jié)果:######SerialPortReady######FoundcardUIDValue:0xED0x050xED0x9AYourSerialNumber:2375237154這樣我們就得到了自己的識別號碼,但是在我們的號碼上面出現(xiàn)的那些字母又是什么意思呢?很好,這就是十六進(jìn)制,一種廣泛使用的進(jìn)制,主要用來表示計算機(jī)中信息。十六進(jìn)制在表示數(shù)字的時候使用了一些英文字符,它可以表示比我們平時所用的十進(jìn)制更多的數(shù)字(要知道我們的卡的存儲空間不大,使用十六進(jìn)制可以更加有效的節(jié)省內(nèi)存空間)。這里舉一個例子,比如說數(shù)字15,如果是十進(jìn)制的話,我們需要使用兩個字符,而如果使用十六進(jìn)制的話則只需要一個字符f(0xf,這是十六進(jìn)制數(shù)的表示方法,使用0x開頭,這件事情應(yīng)該熟記于心,在將來這是十分有用的)。打開一個Python的控制臺。運(yùn)行下面的代碼來輸入十六進(jìn)制的數(shù)字,你將看到它到十進(jìn)制的轉(zhuǎn)換(你可以使用之前放入代碼中的值來代替它們):有關(guān)數(shù)字進(jìn)制的詳細(xì)信息,請參閱:\h/wiki/Hexadecimal$python>>>0xED237>>>0x055>>>0x9A154你現(xiàn)在可以知道它們指的是同樣的數(shù)字。當(dāng)你熟悉了這項技術(shù)的使用之后,就可以挑戰(zhàn)一些更困難的問題了。接下來,我們將會完成這個訪問控制系統(tǒng)。在此之前,一定要先把你的序列號(十進(jìn)制)記好。接下來,我將重點關(guān)注NFC卡(如圖3-4所示)的使用,但不涉及認(rèn)證密鑰的問題。以前曾提到過關(guān)于密鑰的問題,這可以作為本章實例的進(jìn)階實驗,在這里建議讀者獨立完成這部分內(nèi)容以提高系統(tǒng)的健壯性。此外,在這個系統(tǒng)中,我們還增加了一個LED和蜂鳴器,以提高系統(tǒng)的實用性。圖3-4 RFID/NFC模塊和標(biāo)簽訪問控制在接下來的實踐中我們的目的很明確,設(shè)計并實現(xiàn)一個訪問控制系統(tǒng),該系統(tǒng)只允許有身份的人通行(什么是有身份的人呢?首先他得有張屬于自己的通行卡,其次,這張通行卡得有一個特定的序列號)。如果你能使用加密密鑰的話,你就擁有了修改加密卡片信息的能力,通常這個密鑰只有卡片的制造者才知道。當(dāng)一張卡片成功通過了訪問控制的認(rèn)證之后,系統(tǒng)就會閃爍一下綠色的小燈,表示該卡片已經(jīng)被授權(quán)允許訪問。另外,用戶還會聽到一個令人愉悅的聲音,例如,一個悅耳的聲音對你說:“你已通過認(rèn)證,歡迎進(jìn)入”。要是該卡片無法通過訪問控制的認(rèn)證,這時警報聲會響起,并將一直持續(xù),提醒我們有人正試圖非法入侵,并將激活警報命令中心(你會看到一束紅色的燈光在不斷的閃爍,以此來提醒警衛(wèi))。你可以按照自己的意愿添加更多的模塊,如圖3-5所示。圖3-5 使用Fritzing繪制的我們的方案圖3-6給出了上面布線圖的更清晰的表示,以方便理解這里并沒有放置天線部分。圖3-6 使用Fritzing繪制的我們的設(shè)計現(xiàn)在我們已經(jīng)是萬事俱備,只欠東風(fēng)了。接下來,你就可以開始將所有的部件連接起來并開始創(chuàng)建項目代碼了。下面給出了NFC訪問控制的代碼實例://###########################//作者:JorgeReyesCastro//ArduinoHomeSecurityBook//############################include<Wire.h>#include<Adafruit_NFCShield_I2C.h>//這是Adafruit庫Library//MACROS#defineIRQ(2)#defineRESET(3)Adafruit_NFCShield_I2Cnfc(IRQ,RESET);//準(zhǔn)備NFC模塊voidsetup(void){pinMode(5,OUTPUT);//配置引腳5為輸出模式pinMode(9,OUTPUT);//配置引腳9為輸出模式pinMode(10,OUTPUT);//配置引腳10為輸出模式okHAL();Serial.begin(115200);//打開串行端口Serial.print("######SerialPortReady######\n");nfc.begin();//啟動NFCnfc.SAMConfig();if(!Serial){//如果串行端口不工作,等待delay(500);}}voidloop(void){uint8_tsuccess;uint8_tuid[]={0,0,0,0};//從標(biāo)簽卡讀取ID存入到緩沖區(qū)uint8_tok[]={237,5,237,154};//輸入你的序列號uint8_tuidLength;success=nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A,uid,&uidLength);//讀if(success){okHAL();//聲音“OK”Serial.println("Foundcard\n");Serial.print("UIDValue:\t");nfc.PrintHex(uid,uidLength);//UID轉(zhuǎn)化為16進(jìn)制的值intn=0;Serial.print("YourSerialNumber:\t");//UID轉(zhuǎn)化為10進(jìn)制的值while(n<4){Serial.print(uid[n]);Serial.print("\t");n++;}Serial.println("");Serial.println("Wait..\n");//驗證intm=0,l=0;while(m<5){if(uid[m]==ok[l]){//將獲得的UID與我們之前存儲的數(shù)據(jù)進(jìn)行比較}elseif(m==4){Serial.println("######Authorized######\n");//一切就緒authOk();okHAL();}else{Serial.println("######Unauthorized######\n");//不同于警報!!!authError();errorHAL();m=6;}m++;l++;}}delay(1500);}//創(chuàng)建一個函數(shù),以使我們能夠快速創(chuàng)建聲音//alarm("timetowait"inms,"tone/power")voidalarm(unsignedcharwait,unsignedcharpower){analogWrite(5,power);delay(wait);analogWrite(5,0);}//HALOKvoidokHAL(){alarm(200,250);alarm(100,50);alarm(300,250);}//HALERRORvoiderrorHAL(){intn=0;while(n<3){alarm(200,50);alarm(100,250);alarm(300,50);n++;}}//當(dāng)被我們調(diào)用時,這些函數(shù)激活了LED//(仔細(xì)查看上面的代碼所使用的位置)//紅色——快速voidauthError(){intn=0;while(n<20){digitalWrite(9,HIGH);delay(500);digitalWrite(9,LOW);delay(500);n++;}}//綠色——慢速voidauthOk(){intn=0;while(n<5){digitalWrite(10,HIGH);delay(2000);digitalWrite(10,LOW);delay(500);n++;}}//此代碼可以精簡,以提高執(zhí)行的效率和速度//但這些都是依據(jù)教學(xué)目的而設(shè)立,增加可讀性把這段代碼復(fù)制一下,然后進(jìn)行編譯,將其應(yīng)用在你的開發(fā)板上。確保當(dāng)我們開始通信或者有人試圖進(jìn)行身份驗證的時候,系統(tǒng)會發(fā)出一個聲音。另外,我們還增加了兩個簡單的LED指示燈,這兩個指示燈可以為我們的設(shè)計提供有用的信息。最后,我們終于完成了整個的系統(tǒng)?,F(xiàn)在也許是時候來完善我們的Python腳本和串行接口的設(shè)置了,這樣,在接收數(shù)據(jù)的時候,計算機(jī)就會創(chuàng)建一個紅色窗口或者響起警報?,F(xiàn)在正是讀者將理論轉(zhuǎn)化為實踐的階段,通過這個轉(zhuǎn)變,你將領(lǐng)略到程序世界的精彩。小結(jié)它們的主要區(qū)別,從而找到最能滿足我們需要的組件,最后將它們應(yīng)用到真實的項目中去。對了,我們還在項目中使用了NFC技術(shù)。這只是一個基礎(chǔ)性的實驗,將來讀者可以對如何確立設(shè)計的需求、安裝環(huán)境以及開發(fā)所需的措施。第4章 打造屬于自己的系統(tǒng)本章的目的是以實踐的形式來向你講解一些概念,這將不同于以往的純理論講授。這種新形式的教學(xué)嘗試將使你擁有一種與眾不同的思維方式和工作方式。在本章中,我們會就以下內(nèi)容展開學(xué)習(xí):從零開始,一步一步地詳細(xì)介紹系統(tǒng)設(shè)計的每個階段系統(tǒng)需求的確定創(chuàng)建一個系統(tǒng)的草圖設(shè)計或者原型設(shè)計系統(tǒng)的安裝、使用以及維護(hù)電氣定律與原理項目設(shè)計在前一章中,我們已經(jīng)建立了一個小型的訪問控制原型系統(tǒng),當(dāng)然這個系統(tǒng)嚴(yán)格來說還只能算是一個簡單的組裝,我們只是把所有的組件安裝到了面包板上,這在實際工作中還是遠(yuǎn)遠(yuǎn)不夠的。另外,我們最好能使該系統(tǒng)擁有一定程度的控制權(quán)。目前這個系統(tǒng)缺乏自主的控制權(quán),它的控制主要依靠和計算機(jī)的連接來完成,另外該系統(tǒng)還存在著其他的一些問題。因此,我們將開始了解如何來創(chuàng)建一個完善的設(shè)計,在這個設(shè)計中將解決所有可能的問題,不論這個問題發(fā)生在創(chuàng)建、部署還是開發(fā)階段。首先我們來解釋一下剛剛提到的3個詞匯——創(chuàng)建、部署和開發(fā),這是我們創(chuàng)建一個解決方案時最關(guān)鍵的3個點。設(shè)計思想在這一點上,我們必須能夠清楚地找出系統(tǒng)的關(guān)鍵問題所在。這意味著我們將要完成一次實際項目的構(gòu)思,以此來弄清楚系統(tǒng)中的哪些問題是表面性的,而哪些是實質(zhì)性的。這些話聽起來好像是很容易的,但其實要想成功完成一次設(shè)計工作,需要注意下面的幾點。舉個例子,假設(shè)我們想要統(tǒng)計在特定的時間點通過門禁的人數(shù)。帶著這樣一個簡單的想法,我們可以建立多種不同的解決方案,但是其中只有一小部分能真正地符合需求(需求/解決,這個方案應(yīng)該被理解為一個說明性的模型,因為我們還不能對這些需求進(jìn)行量化)如果在同一時間有很多人一起通過呢?這個系統(tǒng)可能會將同時通過的10個人計算成一個不合適的話,人臉識別功能也可能無法正常工作。我們必須盡可能地收集與環(huán)境相關(guān)的、可能遇到的特殊情況以及使用需求方面的信息。只有在解決方案滿足了所有的這些需求之后,我們才能順利進(jìn)入到下一個階段。要知道,具體環(huán)境中的空間分布和距離對于我們的設(shè)計來說都是強(qiáng)制性的制約條件。在實際的案例中要花費(fèi)充足的時間來對其進(jìn)行調(diào)研。這里的設(shè)計思想可以用來幫助我們解決各種行業(yè)中的問題,因此在實際項目中遵循上面提到的原則是一個不錯的選擇。設(shè)計方案在確定了系統(tǒng)需求和環(huán)境特點之后,我們將會開始設(shè)計階段的工作。當(dāng)你在腦海中構(gòu)思第一份草稿時,我們的設(shè)計其實就開始了。即使系統(tǒng)部署的環(huán)境很復(fù)對你安裝位置所在的環(huán)境的電力線路、電力節(jié)點、水管的部署了如指掌。在這個階段,你可能要做出一些選擇,例如是否使用電纜,以及在無線部署和有線部署(見第1章)中進(jìn)行二選一。因此,你需要復(fù)習(xí)一下它們各自的特點和優(yōu)劣,在這里我們不會在這一點上再進(jìn)行詳細(xì)的討論了。另外還要記住,整個項目不可能會是一帆風(fēng)順的,你可能會遇到一些阻礙,以致某些元件可能無法正常地進(jìn)行工作。項目部署當(dāng)完成了實驗室中開發(fā)板的設(shè)計工作之后,就可以繼續(xù)項目的部署工作了。如果決定開始執(zhí)行安裝工作了,那么我們首先要著手準(zhǔn)備需要的材料,例如傳感器、各種工具與設(shè)備(膠帶、電線等)。另外,我們還需要計算好項目中需要的人力、工期以及可能會面對的困難。試想一下,如果我們需要爬上一個屋頂或者到其他比較危險的區(qū)域,這時我們必須保證自己的安全。因此我們必須攜帶所有的重要設(shè)備和工具,來預(yù)防所有可能出現(xiàn)的事故,例如要避免從梯子上掉下來(當(dāng)然,你絕對不應(yīng)該獨自一人在這種情形下工作)。對設(shè)備進(jìn)行全面的調(diào)試工作是一個相當(dāng)明智的做法。這意味著我們在進(jìn)行運(yùn)行階段的操作之前需要驗證所有的操作是否正常,要考慮到一些特殊情況,即使這種情況很少發(fā)生。這個過程需要多次進(jìn)行重新評估來保證系統(tǒng)的完善。安裝使用當(dāng)你完成了上面的步驟之后,就可以繼續(xù)享受系統(tǒng)運(yùn)行帶來的樂趣了。運(yùn)行階段將會是我們整個項目周期中時間最長的一個階段。所以可能要面臨很多問題,我們可能需要對其進(jìn)行性能的擴(kuò)充,對項目中問題進(jìn)行修復(fù),或者進(jìn)行基本的維護(hù)。實例在快速地完成了理論部分的學(xué)習(xí)之后,我們來看一個實例,這個例子中涵蓋了你所需要練習(xí)的基本功能,以及一些問題的基本處理方法。例如,我們希望創(chuàng)建一個系統(tǒng),這個系統(tǒng)的目的是可以打開或者關(guān)閉一盞燈。通過使用一個LED來模擬遠(yuǎn)程的燈,LED是一種功耗極低并且不易損壞的設(shè)備。同樣,我們還可以選擇使用一個中繼設(shè)備和一個220V的燈泡來實現(xiàn)該目的。這里我已經(jīng)完成了表4-1中第一個步驟給出的需求。表4-1步驟內(nèi)容需求查看燈的狀態(tài)以及對燈進(jìn)行遠(yuǎn)程管理設(shè)計概要和草圖我們將創(chuàng)建一個小型的地圖并盡可能地收集相關(guān)的信息。SketchUp是一款功能十分強(qiáng)大的免費(fèi)軟件,使用它可以完成圖形的繪制和3D模型的創(chuàng)建(包括3D打?。?。我向你強(qiáng)烈推薦這款軟件(當(dāng)然你也可以選擇其他的類似工具)。最好在你開始項目的設(shè)計之前能夠熟練地使用這款軟件。你可以訪問下面的這個鏈接來下載SketchUp:\h/download。在圖4-1中你可以看到一個房間的平面布局,我們要控制這個房間里的頂燈。在這個例子中我們也可以使用工作電壓更高的組件例如普通家用照明燈或者光傳感器,來完成工作(要知道燈是用來在黑暗中照明的,因此我們要模擬的是室內(nèi)的工作環(huán)境,或者是一個夜間的灌溉系統(tǒng))。圖4-1 一個房間的平面圖我們還需要確認(rèn)當(dāng)前環(huán)境中電源的插座以及Wi-Fi網(wǎng)絡(luò)的覆蓋情況,這樣我們才能準(zhǔn)確地安裝微控制器和Wi-Fi模塊,或者考慮采用樹莓派和電池的方案。通過這個例子,我們還將引入一系列的工具,然后再創(chuàng)建一些符合需求的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論