安全性、可靠的實(shí)時(shí)數(shù)據(jù)流是物聯(lián)網(wǎng)必不可少的兩樣?xùn)|西。在見(jiàn)過(guò)很多“這邊按下去,那邊燈就會(huì)點(diǎn)亮”這之類的硬件后,我和一個(gè)朋友卻想做一些明明在操縱它卻幾乎感覺(jué)不到數(shù)據(jù)流的存在這樣更具有互動(dòng)性的東西!所以,我們決定建立一個(gè)可以控制“物”的模型,即模仿你的手部動(dòng)作,并顯示顏色基礎(chǔ)上的手指定位的議案。希望在這篇文章的幫助下,你能做出屬于自己的硬件產(chǎn)品。
概念性的概述和一些更深入的了解可以在PubNub博客中找到相關(guān)源代碼,完整的代碼可在這個(gè)GitHub庫(kù)中查到,和Instructable上“the LED matrix driver circuitry”這篇文章詳細(xì)介紹了LED矩陣驅(qū)動(dòng)電路如何被寫(xiě)入。
Step 1: 零件和工具
解決這一難題有很多細(xì)小的片段,這里嘗試列出了一些主要的事情。
零部件及片段
· 樹(shù)莓派---這里使用V1型B +
· 跳躍運(yùn)動(dòng)控制器
· 5V電源
· I2C能的PWM驅(qū)動(dòng)器
· 4個(gè)微型舵機(jī) - 便宜的TowerPros即可。
· 4個(gè)微型伺服支座
· LED和限流電阻器 –-為達(dá)到視覺(jué)效果,但非必要。
· 項(xiàng)目機(jī)箱 --- 這一個(gè)是激光削減Ponoko。
· 螺絲,螺栓,螺母,曲別針 - 和其他類似的東西固定在一起的東西。
· 電纜包裹- --為了保持導(dǎo)線整潔。
· 電源插座,開(kāi)關(guān)和電纜 --- 這樣才能傳輸電能。
· 撥動(dòng)開(kāi)關(guān) --- 用于選擇伺服輸出模式
· 小按鈕 ---- 用作的R丕重啟/關(guān)機(jī)按鈕
· RGB LED+2×470歐姆的電阻 - 重啟/關(guān)機(jī)指示
· 支座 --- 便于安裝各種器件,這些在亞馬遜上很多。
· 掛接導(dǎo)線 --- 用于連接。
該RGB矩陣坐在舵機(jī)的頂部使用的是定制的驅(qū)動(dòng)程序。該項(xiàng)目的這一部分是相當(dāng)先進(jìn)的,Instrucable里對(duì)此有專門的描述。
軟件與服務(wù)
· PubNub - 數(shù)據(jù)流服務(wù)。免費(fèi)的沙盒模式的開(kāi)發(fā)!
· Java SE的 --- JDK8 - 一定要得到正確的版本為您的操作系統(tǒng)。
· 跳躍運(yùn)動(dòng)展示臺(tái)和Java SDK - 再一定要得到你的操作系統(tǒng)的正確軟件包。
· PubNub Java SE SDK --- 這需要進(jìn)入項(xiàng)目庫(kù)目錄
· Java IDE - 用你最喜歡的,比如JGrasp,NetBeans中的IntelliJ,或者Eclipse
· 項(xiàng)目源代碼存儲(chǔ)庫(kù) - 托管在GitHub上
樹(shù)莓派搭建
· PubNub Python庫(kù) - 這是關(guān)于樹(shù)莓派搭建的一個(gè)較深入的指南。
· Internet連接 - WiFi或以太網(wǎng)都可以。如果可以ping谷歌,那么也是好去處。
工具之類的
· 計(jì)算機(jī) - 寫(xiě)代碼,查看Instructables等
· 電鉆+鉆頭/驅(qū)動(dòng)器 - 鉆洞,扭螺絲等。
· Dremel旋轉(zhuǎn)刀具 - 用于切割孔,在機(jī)箱。。。都某些朋友來(lái)說(shuō)可能沒(méi)有這個(gè)必要。
· 熱膠槍 – 請(qǐng)問(wèn)還有其他粘合方式嗎?
· 烙鐵+焊接 - 不要吸入油煙!
· 激光切割機(jī) - 同樣,我用了一個(gè)服務(wù),但你可以DIY,如果你有你自己的機(jī)器周圍鋪設(shè)。
· 螺絲刀,鉗子 等你現(xiàn)在應(yīng)該有的這些東西!
Step 2: 項(xiàng)目預(yù)覽
頂層設(shè)計(jì),主要分為三個(gè)主要組成部分:
1. 計(jì)算機(jī)與跳躍運(yùn)動(dòng)控制器 -----用于將數(shù)據(jù)發(fā)布到網(wǎng)上。
2. “盒子”里的樹(shù)莓派- ---從網(wǎng)上訂閱數(shù)據(jù)。
3. PubNub - 通訊層安全地連接這些東西。
計(jì)算機(jī)部分是很簡(jiǎn)單的,但在“盒子”有更多一點(diǎn)事。。。
1. 樹(shù)莓派 - 主控制器,采用采用I2C總線通信
2. ATMEGA328P矩陣驅(qū)動(dòng)電路 - 通過(guò)I2C總線接收命令,控制28×8矩陣RGB
3. 基于TLC5916 LED的電路 -- 由ATMEGA328P控制,水槽LED矩陣電流
4. Adafruit PWM驅(qū)動(dòng)器 -----通過(guò)I2C總線,驅(qū)動(dòng)4舵機(jī)接收命令
5. 5V,5A電源
首先,我們需要設(shè)置用戶計(jì)算機(jī)便于使用跳躍運(yùn)動(dòng)控制器。
Step 3:Java和跳躍運(yùn)動(dòng)控制器設(shè)置
Java 設(shè)置
我們將使用Java SDK的跳躍運(yùn)動(dòng)控制器,因此只需要安裝Java開(kāi)發(fā)工具包,其中包括Java運(yùn)行環(huán)境。這是非常簡(jiǎn)單的,只要根據(jù)您的操作系統(tǒng)選擇正確的程序包。
不是創(chuàng)建一個(gè)安裝包,而是直接從Java IDE中運(yùn)行的源代碼。這可以讓你自己操作代碼,修改,學(xué)習(xí)!當(dāng)安裝JDK后,你需要一個(gè)好的IDE(也就是集成開(kāi)發(fā)環(huán)境)。一些常見(jiàn)的諸如Eclipse中的IntelliJ,和NetBeans。你可以隨便選一個(gè)。每個(gè)使用者建立的庫(kù)是不同的,所以你必須要參考文檔了解如何設(shè)置一個(gè)新的項(xiàng)目!
Java 源代碼
只有一個(gè)java文件需運(yùn)行代碼,但是也必須安裝跳躍運(yùn)動(dòng)和PubNub Java庫(kù)。。。 GitHub的項(xiàng)目庫(kù)包含一些非常必要的Java文件。
Leap 設(shè)置
設(shè)置跳躍可有點(diǎn)棘手,并且這個(gè)會(huì)根據(jù)系統(tǒng)不同而不同,而不是逐步完成的。這里不是通過(guò)告訴你我如何做到的,而是逐步引導(dǎo)您到相應(yīng)的文章。哪個(gè)地方不懂,可以隨時(shí)尋求幫助。
1. 下載SDK,驅(qū)動(dòng)程序,和跳躍運(yùn)動(dòng)中的應(yīng)用。
2. 安裝跳躍應(yīng)用,這將會(huì)安裝任何必要的驅(qū)動(dòng)程序和進(jìn)程。
3. 運(yùn)行跳躍運(yùn)動(dòng)診斷可視化工具,以確保跳躍的工作。
4. 瀏覽Java SDK文檔,尤其是設(shè)置項(xiàng)目。
PubNub 設(shè)置
最后一步是下載PubNub Java SDK的,文檔頁(yè)面會(huì)講到如何將庫(kù)添加到Java項(xiàng)目。
Step 4:Java源代碼
如果您對(duì)Java代碼沒(méi)有興趣,你可以跳過(guò)這一步;但是,你將至少需要把你的個(gè)人PubNub鑰匙到代碼為它工作!源代碼可以在GitHub上查看。
下面是一些入口需要。如果這出現(xiàn)錯(cuò)誤,很可能是沒(méi)有正確安裝的SDK庫(kù)。
要讓項(xiàng)目實(shí)現(xiàn)Runnable,讓所有跳躍活動(dòng)工作在自己的線程是至關(guān)重要的。我們首先設(shè)置項(xiàng)目為主,Runnable接口的實(shí)現(xiàn)和初始化全局變量便于后面使用。最主要的是要注意:全局變量“CHANNEL”,以及一對(duì)主宣稱鍵。
這些字符串是唯一可以改變的值,通道名稱可以保留默認(rèn)的“l(fā)eap2pi”,也可以是其他一些字母數(shù)字值。使用PubNub超過(guò)一個(gè)信道通信會(huì)談一切,所以要使用一個(gè)唯一的名稱,以防止不同項(xiàng)目之間的串?dāng)_!發(fā)布和訂閱鍵,當(dāng)你注冊(cè)一個(gè)PubNub帳戶含有獨(dú)特的個(gè)人標(biāo)識(shí)符可以保證他們的安全性和私有性,這些鍵防止別人從你的信道(S)交談,請(qǐng)留意,有可能是在具體使用字符串“l(fā)eap2pi”,而不是不斷的“CHANNEL,”而所有這些情況下應(yīng)該改變代碼的一些地方。
跳躍運(yùn)動(dòng)捕獲300幀每秒。在每一幀,我們有機(jī)會(huì)獲得非常多的信息,如手指伸直,俯仰,偏航和手勢(shì)等等。由飛躍俯仰和偏航(手腕云臺(tái))返回的值是弧度,這不會(huì)幫助我們太多。我們希望這些值轉(zhuǎn)換為通過(guò)在框中PWM驅(qū)動(dòng)器接受的格式。我們首先弧度轉(zhuǎn)換為度,然后度到150和600之間,該范圍相當(dāng)于一個(gè)伺服的(500 - 2000我們)的典型的工作范圍內(nèi)的可接受的伺服PWM值由12位伺服驅(qū)動(dòng)器來(lái)表示。
基本公式是美國(guó)2500/(2^13-1)*(伺服最小/最大脈沖寬度),所以[500,2000]我們映射到[150,600]。。。。。。大概在代碼中,這些轉(zhuǎn)換是通過(guò)以下方法進(jìn)行處理。
另外,請(qǐng)?jiān)彶徽_的伺服和PWM術(shù)語(yǔ)中的代碼。。。。。。不是每個(gè)制作愛(ài)好者都是這些學(xué)科的專家!
確保您的代碼在工作的最好方法是加載PubNub調(diào)試控制臺(tái)。從這里,你可以輸入通道名字,同發(fā)布和訂閱鍵一樣。點(diǎn)擊“訂閱”,當(dāng)操作跳躍運(yùn)動(dòng)控制器將Java代碼運(yùn)行的時(shí)候,公布的數(shù)據(jù)應(yīng)顯示在消息盒子。
Step 5:樹(shù)莓派安裝
隨著Java代碼的工作,是時(shí)候來(lái)設(shè)置樹(shù)莓派訂閱數(shù)據(jù),并用它來(lái)驅(qū)動(dòng)LED和舵機(jī)。在已經(jīng)配置了樹(shù)莓派有工作的互聯(lián)網(wǎng)連接,可以是WiFi或以太網(wǎng),但這部分需要你來(lái)完成!如果你需要幫助,可以在PubNub上找找看(前一段時(shí)間有人寫(xiě)了一篇)。此外,你可以使用顯示器和鍵盤直接在Pi上完成任何一個(gè)步驟,或用SSH遠(yuǎn)程登錄。無(wú)論哪種方式都可以,但該項(xiàng)目的最終目標(biāo)是擁有一個(gè)獨(dú)立的,無(wú)頭,安裝程序會(huì)自動(dòng)運(yùn)行啟動(dòng)所需的文件。
第一步驟是在安裝PubNub Python的SDK。
打開(kāi)終端,安裝以下內(nèi)容:
嗯,這是很簡(jiǎn)單的!現(xiàn)在,我們需要得到所有在GitHub的資源庫(kù)的皮目錄中的文件的副本。要做到這一點(diǎn)最簡(jiǎn)單的方法是使用Git克隆回購(gòu),然后刪除其他不需要的東西:
現(xiàn)在,leap2pi目錄的內(nèi)容應(yīng)該與GitHub庫(kù)Pi目錄中的文件相同。最后,我們希望Python腳本在啟動(dòng)運(yùn)行。這里有兩個(gè)Python腳本要運(yùn)行:
這是很簡(jiǎn)單的,我們只需要編輯一個(gè)Linux系統(tǒng)文件作為根用戶。首先,確保腳本是可執(zhí)行的,然后打開(kāi)rc.local文件進(jìn)行編輯。
你可以使用任何你喜歡的編輯,我更喜歡VI。該文件的最后一行應(yīng)該是“exit 0”,即是允許使用該文件的清潔出口和擊終端的初始化。這里可以添加任意數(shù)量的命令,只要它們運(yùn)行最后的“exit”命令。
插入以下,正上方的“exit 0”命令:
保存文件,退出,并在開(kāi)機(jī)后,Pi會(huì)自動(dòng)運(yùn)行這些腳本。而“&&”部分確保每一個(gè)命令運(yùn)行。如果你離開(kāi)了關(guān),在bash終端將永遠(yuǎn)載入,所以你會(huì)被無(wú)限期地鎖定您的個(gè)人信息的!
Step 6:樹(shù)莓派與伺服驅(qū)動(dòng)器的連接
樹(shù)莓派可用于直接驅(qū)動(dòng)伺服系統(tǒng),但是這需要花些功夫。有一個(gè)專用的PWM通道,但我們需要4根導(dǎo)線。因?yàn)樵谲浖锌梢蕴摂M,但是,這不是簡(jiǎn)單的事情。作為一臺(tái)電腦,樹(shù)莓派在高層級(jí)的處理比低級(jí)別的控制好多了。這一步你當(dāng)然可以使用任何PWM驅(qū)動(dòng)器,但我用這16通道,12位驅(qū)動(dòng)程序的形式Adafruit。是的,這有點(diǎn)過(guò)了,這是很容易編程的ATtiny24操作4舵機(jī)通過(guò) I2C總線通信??梢詣?chuàng)建你自己的,但可能會(huì)超出了本指南的范圍。
網(wǎng)上很多教程可以幫助你使用這款主板,您將需要一些額外的源代碼文件。這些都可以在源代碼庫(kù)的命名文件為“Adafruit”的目錄中找到 -。。。。。?!彼鼘?huì)告訴數(shù)樹(shù)莓派如何與PWM驅(qū)動(dòng)器通信。
連接樹(shù)莓派的板很容易。在樹(shù)莓派I2C線路上發(fā)現(xiàn)插針3和5,但這樣的情況下也需要打開(kāi)I2C通信信道,記得查看。一個(gè)重要的輸入引腳被標(biāo)為“OE”,即低電平有效“輸出使能”引腳,當(dāng)此引腳保持低電平伺服系統(tǒng)才會(huì)啟用,它可以直接連接到地,或者驅(qū)動(dòng)另一個(gè)端IO引腳。在這個(gè)項(xiàng)目中,實(shí)際上也是從ATMEGA328P矩陣驅(qū)動(dòng)電路也采用I2C數(shù)據(jù)線連接到R派。
在該圖中,伺服附著到通道1 PWM驅(qū)動(dòng)的。在項(xiàng)目中,設(shè)置像這樣的舵機(jī):
Step 7:近觀servo.py
Python代碼來(lái)控制舵機(jī)是非常簡(jiǎn)單的,只要你理解了Python。就個(gè)人而言,我沒(méi)有很喜歡這種語(yǔ)言,但是這是題外話,您可以在GitHub上查看servo.py文件的這個(gè)副本。
就像在Java代碼中,你需要把你的個(gè)人PubNub發(fā)布,在這里訂閱鍵,以及通信信道的名稱。
該樹(shù)莓派會(huì)做引導(dǎo)執(zhí)行以下操作:
1.復(fù)位AVR矩陣驅(qū)動(dòng)電路。
2.初始化PubNub與你的鑰匙。
3.訂閱PubNub通道“l(fā)eap2pi”。
4.永遠(yuǎn)循環(huán)下去,檢查輸出模式切換(一分鐘內(nèi)多次檢查)。
在系統(tǒng)底層,在PubNub庫(kù)處理所有的工作。這其會(huì)調(diào)用完成所有的操作,我們只需要指定一些回調(diào) ---- 這是指當(dāng)事件發(fā)生而需要調(diào)用的函數(shù)。
關(guān)于連接回調(diào)應(yīng)該是顯而易見(jiàn)的(連接,重新連接,等等),但一個(gè)沒(méi)有將大部分工作是適當(dāng)命名的“回調(diào)”的回調(diào)。這個(gè)函數(shù)實(shí)際上在做從訂閱頻道接收消息這些事。如上所述,該箱具有一對(duì)連接到幾IO線的滑動(dòng)開(kāi)關(guān)選擇的輸出模式。
?鏡像 - 機(jī)器人將反映你的動(dòng)作;因此,你的左手反向控制權(quán)機(jī)器人
?禁用 - 伺服系統(tǒng)會(huì)停止響應(yīng)
?克隆 - 的機(jī)器人會(huì)克隆你的動(dòng)作;因此,你的左手直接控制左機(jī)器人
這些模式的邏輯還有I2C驅(qū)動(dòng)報(bào)表中的回調(diào)函數(shù)來(lái)處理。
值得注意此文件中的唯一項(xiàng)目就是利用GPIO引腳4作為輸出。該引腳驅(qū)動(dòng)MOSFET,連接藍(lán)光LED地面陣列的大門。該引腳使能PubNub連接上,這樣的LED作為連接指示燈,這是一個(gè)無(wú)頭的設(shè)置的一個(gè)非常重要的方面 ---- 需要有一些現(xiàn)象表明我們成功地連接到互聯(lián)網(wǎng)!
Step 8:近觀shutdown.py
這個(gè)腳本是一個(gè)更容易跟隨比教上一個(gè),但也同樣重要。由于樹(shù)莓派也作為全功能計(jì)算機(jī),應(yīng)當(dāng)正確地關(guān)閉,只是殺傷力不同,它可能會(huì)導(dǎo)致驅(qū)動(dòng)器故障,數(shù)據(jù)丟失,內(nèi)存損壞。
為了解決這個(gè)問(wèn)題,我在盒子背面裝了RGB LED指示燈的一個(gè)簡(jiǎn)單按鈕。持續(xù)按一秒以上便可切換藍(lán)色燈光,當(dāng)按鈕松開(kāi)時(shí)會(huì)重新啟動(dòng)派。再按住按鈕持續(xù)幾秒鐘將導(dǎo)致LED變紅,信號(hào)完全關(guān)閉。
此功能在shutdown.py腳本下完全處理。 “永遠(yuǎn)的循環(huán)”運(yùn)行的情況下,將發(fā)生以下情況:
1.0.25秒休眠狀態(tài)
2.檢查按下一個(gè)按鈕(引腳上的低狀態(tài))
3.重復(fù)永遠(yuǎn)
1.在按鈕按下,睡眠1秒
2.重新檢查引腳,看看按鈕是否仍然被按下
3.如果按鈕仍然在舉行,我們可能要重新啟動(dòng)?如果沒(méi)有,請(qǐng)隨時(shí)查看!
4.設(shè)置RGB LED為藍(lán)色
5.睡眠2秒
6.重新檢查引腳,看看是否仍然被按下按鈕
7.如果按鈕仍然在舉行,應(yīng)該關(guān)機(jī)!
8.設(shè)置RGB LED為紅色
9.如果沒(méi)有,重新啟動(dòng)!
Step 9: 構(gòu)建盒子
在構(gòu)建此盒子的過(guò)程中,朋友Eric在Illustrator中創(chuàng)建一對(duì)矢量文件。這些被送到激光切割公司(Ponoko),它給我們送來(lái)一束激光切割木塊和丙烯酸。這些碎片送回來(lái)的時(shí)候還很大,但讓人有裝配他們的喜悅心情。
如果你很小心,可以在丙烯酸(以及木材)鉆導(dǎo)向孔,并用細(xì)螺釘來(lái)安裝在一起。如果你不想這樣做,可以隨意構(gòu)建你想要的情況,從部件列表支座應(yīng)該被用來(lái)保持牢固地安裝到該基座的電路元件,也可以減少一些額外的孔,在包裝盒背面安裝電源插口,按鈕和RGB領(lǐng)導(dǎo)。
最重要的是伺服鉆機(jī)的安裝。當(dāng)他們?cè)谝苿?dòng)的時(shí)候,舵機(jī)會(huì)造成任何重量輕安裝框架跌倒或跳來(lái)跳去。至關(guān)重要的是,他們被牢牢地安裝在一個(gè)堅(jiān)固的表面,這里選擇了箱子的蓋子!
Step 10:完成
有些部分需要進(jìn)行定制,特別是構(gòu)建實(shí)際的盒子和伺服支架。只要是有創(chuàng)意,大膽的去做吧!
-
led
+關(guān)注
關(guān)注
242文章
23321瀏覽量
661875 -
PWM
+關(guān)注
關(guān)注
114文章
5195瀏覽量
214348 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2911文章
44818瀏覽量
375067 -
樹(shù)莓派
+關(guān)注
關(guān)注
117文章
1710瀏覽量
105750
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論