第1步:電話部分
電話部分
貝爾模型202電話(或1930年至1970年的任何撥號電話)
仿古木制雪茄盒
DF Robot Bluno Nano
Deek-Robot Nano終端適配器
SPI Micro SD讀卡器
Micro SD卡
220歐姆電阻器(連接到耳機(jī)揚(yáng)聲器)
2x 10K歐姆電阻(連接到電話撥號)
母電源插孔
5V(或高達(dá)12V)電源
第2步:名稱標(biāo)簽部件
這是要制作的項目列表一個名牌。我做了10個。
(注意:我將其中的一個短路,使其部分功能失調(diào)。提前計劃:可能會額外訂購一兩個布魯諾斯或者提出一個計劃“B”以防萬一!)
DF機(jī)器人Bluno甲殼蟲
4x 100歐姆電阻器
藍(lán)色可穿戴LED
紅色可穿戴設(shè)備LED
黃色可穿戴LED
綠色可穿戴LED
9V雙容量(1200mAh)鋰電池
9V電池連接器
微型開關(guān)
2cmx8cm原型板(切成兩半)
名稱帶剪輯的標(biāo)簽夾(亞馬遜)
Avery 5141“您好我的名字是”名稱標(biāo)簽(亞馬遜)
第3步:連接電話
手機(jī)內(nèi)的arduino需要執(zhí)行以下所有操作任務(wù)。本節(jié)介紹如何將所有內(nèi)容連接在一起。
當(dāng)有人拿起耳機(jī)時打開Arduino
撥打電話
抓住聲音SD卡
在耳機(jī)揚(yáng)聲器上播放聲音
原理圖
附圖是原始圖像和Fritzing格式。您可以在此處下載Fritzing應(yīng)用程序:fritzing.org
撥號和電源開關(guān)
手機(jī)內(nèi)部有三個需要連接的開關(guān)。
“掛機(jī)”開關(guān),為Bluno Nano上的Vin供電。
當(dāng)接收器掛在掛鉤上時,此開關(guān)斷開。
“主動撥號”開關(guān),表示車輪不在其家中位置。這是有線的,使D8在激活時為+ 5v,在激活時為0v。
當(dāng)手機(jī)處于靜止位置時,我的手機(jī)上此開關(guān)正常連接 。一旦用戶開始移動撥號盤,開關(guān)就會斷開連接。我把一端貼在Arduino上。我把另一端連接到arduino上的D8。 D8還連接到10K歐姆電阻到+5。這種配置產(chǎn)生一個“高”使能信號,告訴Sketch程序是時候開始計數(shù)脈沖了。
(在其他一些手機(jī)上,當(dāng)撥號“休息”時,此開關(guān)正常斷開。如果您有這種類型的手機(jī),則需要將其與我的電話對接:結(jié)束到+5,另一端接到D8和一個接地的10K電阻。)
“脈沖”開關(guān)每次撥號時產(chǎn)生一個脈沖在從釋放返回原位時傳遞一個數(shù)字。這用于在引腳D7上產(chǎn)生+ 5V脈沖。
在我的手機(jī)上,當(dāng)撥盤“休息”時,此開關(guān)正常連接。用戶松開方向盤后,每次通過號碼時,此開關(guān)斷開連接。我把一端貼在Arduino上。我將另一端連接到arduino上的D7。 D7還連接到一個10K歐姆電阻,該電阻導(dǎo)致+5導(dǎo)致引腳在斷開時被拉高。此配置為Sketch程序生成“高”脈沖以進(jìn)行計數(shù)。
(在其他一些手機(jī)上,當(dāng)撥號“休息”時,此開關(guān)正常斷開。如果您有這種類型的手機(jī),則需要將其連接到我的對面:一端為+5,另一端為D7,另一端為10K接地電阻。)
我沒有添加任何特殊電路,如電容器進(jìn)行去抖動。我用軟件處理了這個。每次開關(guān)打開或關(guān)閉時,你都會得到一堆電力尖峰(++++ - + - + - + - + - + -------)直到它結(jié)束。在決定狀態(tài)實(shí)際發(fā)生變化之前,軟件只等待輸入引腳上的值穩(wěn)定到一個電壓或另一個電壓一段足夠長的時間。
聽筒揚(yáng)聲器
用于產(chǎn)生聲音的輸出引腳需要是具有PWM功能的引腳。此外,根據(jù)您使用的Arduino,您可能需要注意運(yùn)行PWM所需的定時器并可能啟用它。 Arduino Nano上的針腳D9(在我的情況下是Bluno Nano)是一個很好的默認(rèn)選擇,因?yàn)槟J(rèn)配置正確。
耳機(jī)有三條線。簡化,這些是:地面,耳機(jī)和吹嘴。由于耳機(jī)和吹嘴松散連接,因此并不那么簡單。我將電壓表置于“接通”位置以測量電阻。在這種模式下,當(dāng)您探測正確的兩個端子時,電壓表會產(chǎn)生少量的電,從而在聽筒中產(chǎn)生“靜態(tài)”的沙啞聲。
將一個端子連接到地。將另一個端子連接到一個220歐姆的電阻,該電阻通向D9 PWM引腳。這非常適合我在標(biāo)準(zhǔn)電話耳機(jī)揚(yáng)聲器中所需的聲級。
(如果你想創(chuàng)建一個“揚(yáng)聲器電話”,你需要添加一些額外的電路來將聲音放大到一個外部揚(yáng)聲器供所有人聽。我沒有在我的實(shí)現(xiàn)中這樣做但是本來不錯增強(qiáng)。)
(如果要添加音量控制,可以將電位器連接到其中一個模擬輸入引腳,并根據(jù)輸入電壓讀數(shù)調(diào)整聲級。)
Micro SD卡SPI
SPI可以直接連接到Arduino Nano。 GND至GND,+ 5至+5,MISO至MISO,MOSI至MOSI,以及SCK至SCK。我使用引腳D4作為我的選擇引腳,所以:D4到CS。 (如果您使用的是5v Arduino,例如Nano,請確保使用5v SD卡控制器。)
電線
我剪了一段cat-5以太網(wǎng)電纜和從電話上的連接器通過一個鉆入基座的孔向下延伸到安裝在雪茄盒下面的Arduino。以太網(wǎng)電纜中的8根電線對我的連接來說已經(jīng)足夠了,對于任何標(biāo)準(zhǔn)的撥號電話都應(yīng)該足夠了。因?yàn)槲覍⑺械孛孢B接在一起,只有一個地面連接到Arduino,因此8根電線對我來說是過度殺死的。我不需要在手機(jī)上運(yùn)行+5線,但如果你使用不同類型的手機(jī),你可能會發(fā)現(xiàn)有必要這樣做。無論哪種方式,對于幾乎任何項目來說,8根電線應(yīng)該足夠了。
我還在雪茄盒后面鉆了一個小洞,讓我在切斷電源線后將電源線插入。端部在盒子內(nèi)拼接在一起,然后連接到電源。
我用電工膠帶完全包裹Nano,只留下USB連接器暴露并可以進(jìn)行編程。如果您決定將USB電纜留在盒子內(nèi),即使您沒有編程,也必須確保電纜末端與所有電氣部件隔離。靜電會弄亂電子設(shè)備,導(dǎo)致奇怪的事情發(fā)生如此意外的重置或更糟。
模擬引腳A0
注意:不連接任何東西針腳A0。該引腳用于為隨機(jī)數(shù)發(fā)生器播種,因此它需要浮動未連接。
可選:兩個Arduinos卸載聲音
如果您需要卸載聲音我提供了原理圖到了第二個Arduino。如果RAM耗盡或需要更快啟動,請執(zhí)行此操作。標(biāo)準(zhǔn)的Arduino Nano處理聲音。 Bluno Beetle處理撥號和藍(lán)牙連接。
將兩個Arduinos連接在一起:D2到D2,D3到D3。
步驟4:連接名稱標(biāo)簽
名稱標(biāo)簽內(nèi)電子設(shè)備的接線圖是公平的簡單:只需幾個LED,一個開關(guān)和一個電池。 “可穿戴”LED有點(diǎn)難以使用。我的繞線工具在這里派上用場了。
開始之前
在布線Bluno Beetle名稱標(biāo)簽之前,我建議對每一個進(jìn)行預(yù)編程,這樣他們就可以了啟動時依次閃爍所有數(shù)字引腳(D2,D3,D4,D5)。 (在提供的草圖中定義START_WITH_BLINK,或編寫您自己的簡單草圖來執(zhí)行此操作。)這將允許您在組裝后立即測試不良焊接連接。
繞線和焊接LED
將所有四個電阻焊接到引腳D2,D3,D4和D5
從電路板背面夾住引線。
將電阻器導(dǎo)線留下約1英寸(2厘米)
將裸露的導(dǎo)線焊接到地面,留下1.5到2英寸(3-4厘米)。
使用繞線工具,將綠色LED的紅色線纏繞到D2電阻上并將其焊接到位。
將黑色引線繞線連接到接地引腳。
對藍(lán)色LED,黃色LED和紅色LED重復(fù)步驟5和6。
確認(rèn)沒有引腳意外觸及鄰居。
再次驗(yàn)證。
將USB電纜插入充電器電源插座,確認(rèn)所有四個LED在啟動時按正確順序閃爍。
如果一切似乎都連接正確,請將一根熱縮管滑過每個暴露的針腳(包括接地針)并將其縮小,使其貼合。我用烙鐵來完成這個任務(wù)。如果你有一個熱縮槍(又名熱“吹風(fēng)機(jī)”),那將是更好的選擇。
焊接開關(guān)和電池
將面包板切成大約3“x .5”(5cm x 1cm)(大約是Bluno Beetle抵達(dá)盒子高度的一半。
將面包板頂部三個孔中的開關(guān)焊接。
焊接一端針。
確保開關(guān)的兩端都貼著面包板,如果需要,可能會重新焊接第一根針。
焊接另一端兩個開關(guān)銷到面包板。
在電路板背面:焊接正極端(紅線)電池連接器連接到開關(guān)的頂部引腳。(焊接到面包板,使其連接到頂部引腳。)
將電池的負(fù)極(黑線)焊接到電池的接地孔上。 Bluno。
將紅線切割,剝離并焊接到開關(guān)的中間引腳上(焊接到面包板的背面)與開關(guān)的電氣連接。)
將電線穿過幾個孔以消除應(yīng)力。
將紅線的另一端焊接到Bluno上的VIN孔,這樣當(dāng)開關(guān)打開時,9伏將施加到VIN。
確認(rèn)沒有交叉線。
連接電池并進(jìn)行測試,確保Bluno開啟并在開關(guān)打開時閃爍。
纏繞電工膠帶以覆蓋整個面包板。
用電工膠帶包裹Bluno,直到您對電線應(yīng)變消除和隔離連接感到滿意為止。
留出一個用于連接USB電纜的開口,以便將來進(jìn)行編程。
將其打開并再次測試。
步驟5:打包名稱標(biāo)簽
這些是步驟將可穿戴名稱標(biāo)簽包裝在Bluno Beetle進(jìn)來的盒子里面。
用鋒利的手術(shù)刀切開開關(guān)的矩形孔Exacto刀
將開關(guān)和電路板放入盒子中并將其按壓在側(cè)面以找到合適的步伐來切割孔。/li》
使用泡沫和電池將卡紙切換到位。
將電池放在電路板旁邊的盒子里
Bluno來了用一塊泡沫。將其卷起并粘貼,然后將其塞入盒子中,使開關(guān)牢固地固定到位。
為前面的LED線切一個洞因此它在關(guān)閉時不會干擾翻蓋,距離頂部大約0.75英寸(1.5厘米)。尺寸無關(guān)緊要。稍后會隱藏。我的洞大約1.5英寸x .25英寸(1厘米x) .5厘米。
通過孔進(jìn)給LED
使用透明膠帶將LED指示燈朝外。透明膠帶確保LED安全并面向全世界以獲得全亮度。
將Bluno推入USB接口的盒子中,可以進(jìn)行編程。
將Avery 5141名稱標(biāo)簽剝離并粘貼在白紙上,然后將其剪成形狀。最好不要將名稱標(biāo)簽直接粘貼到盒子上,因?yàn)閷砟硞€時候您需要將其刪除。
覆蓋LED并將“Hello my name is”名稱標(biāo)記為帶。
切割塑料名牌固定器,使其牢固地固定在盒子背面。
附上剪輯。
第6步:Arduino草圖
我已經(jīng)提供了在這個項目中配置和運(yùn)行Bluno Arduinos所需的全部四個草圖。
如果您還沒有下載Arduino IDE。這里:arduino.cc
解壓縮包含草圖的zip文件,并從Arduino IDE中打開它們。這些是草圖:
blunoBasic:用于初始化所有Blunos
blunoPhone:在手機(jī)上的Bluno Nano上運(yùn)行
blunoPhoneSounds(可選) :播放手機(jī)上的聲音
blunoNameTag:在“可穿戴”名稱標(biāo)簽上運(yùn)行
步驟7:在中央電話上準(zhǔn)備BLE
將草圖 BlunoBasic 加載到手機(jī)內(nèi)的Arduino Bluno Nano中并執(zhí)行以下操作:
打開串口監(jiān)視器
設(shè)置“無行結(jié)束”類型“+++”并發(fā)送
應(yīng)說“進(jìn)入AT模式”
現(xiàn)在我們處于“AT”模式,用于在電路板上配置BLE藍(lán)牙。
設(shè)置“兩個NL& CR”
AT + MAC =?
復(fù)制MAC地址
打開 blunoNameTag 草圖。
找到正確的“centralMAC”
粘貼MAC以指定正確連接。
全部輸入要完成配置,請執(zhí)行以下命令:
AT + ROLE = ROLE_CENTRAL
AT + CMODE = UNIQUE
AT + IBEACONS = OFF
AT + BLUNODEBUG = OFF
AT + USBDEBUG = OFF
AT + EXIT
現(xiàn)在用草圖重新編程bluno blunoPhone 用于正常操作。
步驟8:在名稱標(biāo)簽上準(zhǔn)備BLE
加載草圖 BlunoBasic 將放置在名稱標(biāo)簽內(nèi)的每個Bluno Beetle上并執(zhí)行以下操作:
打開串行監(jiān)視器
設(shè)置“無行結(jié)束”
輸入“+++”并發(fā)送
應(yīng)該說“進(jìn)入AT模式”
現(xiàn)在我們處于“AT”模式,用于配置主板上的BLE藍(lán)牙。
設(shè)置“兩個NL& CR”
AT + MAC =?
復(fù)制MAC地址
打開 blunoPhone 草圖。
查找“phoneLookup_t phoneBook [] = {”
將MAC粘貼到陣列中的適當(dāng)位置,可能會創(chuàng)建一個新條目。
刪除最重要的4位數(shù)字,從而創(chuàng)建一個32位十六進(jìn)制數(shù)字。
確保MAC_PREFIX與上一步中刪除的最重要的4位數(shù)匹配。
(步驟5和6實(shí)現(xiàn)優(yōu)化以在手機(jī)Sketch上保存珍貴的RAM。)
綁定到bluno手機(jī)的MAC。例如,如果Bluno中央MAC是0xB4994C50236A,那么您可以在外設(shè)名稱標(biāo)簽上執(zhí)行此操作:
AT + BIND = 0xB4994C50236A
確定一個數(shù)字作為名稱的ID標(biāo)簽。例如“8”。將該數(shù)字插入上面討論的phoneBook []數(shù)組條目,并在外圍名稱標(biāo)簽bluno上執(zhí)行此操作:
AT + NAME = 8
輸入以下所有命令以完成配置:
AT + ROLE = ROLE_PERIPHERAL
AT + CMODE = UNIQUE
AT + IBEACONS = OFF
AT + BLUNODEBUG = OFF
AT + USBDEBUG = OFF
AT + EXIT
現(xiàn)在使用Sketch blunoNameTag 重新編程bluno以進(jìn)行正常操作。
步驟9:創(chuàng)建聲音
《我附上了一個包含我在SDCard上安裝的所有聲音的zip文件。聲音來自各種網(wǎng)站:
來自freesound.org的有趣聲音
電話錄音來自:http://stuff.gigo.com/phone/
如果您想要一組不同的聲音,可以生成一些或從各種網(wǎng)站下載。但它們需要轉(zhuǎn)換為簡單的單聲道8位16KHz WAV格式。我是這樣做的:
轉(zhuǎn)到:https://audio.online-convert.com/convert-to-wav
更改位分辨率:8位
更改采樣率:16000 Hz
更改音頻通道:單聲道
高級:
PCM格式:PCM無符號8位
開始轉(zhuǎn)換
下載
如果需要,請重命名文件,文件名中有8個或更少的字符,擴(kuò)展名為“.wav”(又名8.3格式)。
將SD卡插入計算機(jī)
將所有文件復(fù)制到micro SD卡上最頂層的目錄中
彈出
插入通過SPI接口將micro SD卡連接到Arduino控制器中。
blunoPhone Sketch負(fù)責(zé)安裝SD卡并使用庫播放聲音文件:SD.h,SPI.h和TMRpcm .H
步驟10:Arduino手機(jī)草圖軟件
在手機(jī)內(nèi)部的Bluno Nano上運(yùn)行的Sketch blunoPhone 旨在使用BLE進(jìn)行通信藍(lán)牙與另一個草圖 blunoNameTag 在電池供電的“可穿戴式”Bluno Beetles上執(zhí)行,其中包含分散在房間內(nèi)的人們的“名牌”。
可選擇手機(jī)聲音可以播放一個單獨(dú)的Arduino,也將被安置在手機(jī)內(nèi)。這樣做的原因有很多,稍后將在評論中進(jìn)行描述。如果您希望其他Arduino使用Sketch nanoPhoneSounds 播放聲音,請定義OFFLOAD_SOUND。我用一個內(nèi)置的Bluno Nano制作了一部手機(jī)。我制造了第二部手機(jī),其中包含用于通信的Bluno Beetle,以及用于播放聲音的標(biāo)準(zhǔn)Arduino Nano。在大多數(shù)情況下,我用單個Bluno Nano記錄手機(jī),但知道還有其他選擇。
這個程序適用于Arduino。 RAM最大化因此,如果添加更多功能或增加變量數(shù)量,您可能會遇到一些奇怪的行為,例如程序重置和意外重啟。該程序使用一些先進(jìn)的技術(shù)來節(jié)省RAM(以及一些黑客來節(jié)省RAM)。 (如果你有RAM問題,你應(yīng)該認(rèn)真考慮將聲音功能卸載到另一個Arduino。)
Bluno BLE似乎只用于兩個藍(lán)牙永不改變端點(diǎn)之間的通信:一個中心端口和一個外圍設(shè)備。似乎我正在使用它的目的不是專門設(shè)計的。通過一些努力,我得到了它的工作 - 主要是。有時需要多次嘗試才能建立連接。
該程序的設(shè)計有一個中央Bluno和許多外圍設(shè)備。在任何給定時間只連接一個外圍設(shè)備,但中央Bluno從已知外圍設(shè)備列表中動態(tài)選擇。通常連接速度相當(dāng)快(在15秒內(nèi)),但有時需要更長時間(幾分鐘)。外圍設(shè)備(名稱標(biāo)簽)在代碼中內(nèi)置了一個看門狗,以便偶爾強(qiáng)制重啟。這種“黑客”似乎有所幫助,但并不完美。手動關(guān)閉/打開所有外圍設(shè)備以及中央電話似乎有時可以幫助建立穩(wěn)固的連接。
此草圖動態(tài)運(yùn)行“AT + BIND”命令,然后“AT + RESTART”連接期望的外圍設(shè)備。那個序列并不總是有效。如果在一個循環(huán)中調(diào)用兩次而不是一次,它似乎更穩(wěn)定。不幸的是,每次通過循環(huán)都會增加額外的延遲時間。如果您不擔(dān)心額外的延遲,請考慮調(diào)整程序調(diào)用AT + BIND三次以獲得更好的穩(wěn)定性。
當(dāng)通過USB電纜將Sketch編程到Bluno中心或任何外圍設(shè)備時,我發(fā)現(xiàn)它如果我關(guān)掉房間里所有其他的Blunos,那么最穩(wěn)定。由于通過藍(lán)牙從一個Bluno到另一個Bluno的串行連接,程序員似乎對Bluno的目標(biāo)編程感到困惑。
這使用PlainProtocol庫來格式化通過藍(lán)牙發(fā)送的命令。這可以在GitHub上找到:
git clone https://github.com/DFRobot/BlunoAccessoryShieldDe.。.
當(dāng)在串行監(jiān)視器上手動弄亂AT命令時,我發(fā)現(xiàn)最好運(yùn)行Sketch blunoBasic 。
正常程序流程
軟件具有各種不同功能的狀態(tài)。正常的軟件路徑如下所示:
當(dāng)手機(jī)放在開關(guān)掛鉤上時,電流不會流動并且Bluno電源關(guān)閉。
當(dāng)有人拿起聽筒時,接通電源并且Bluno開始啟動,調(diào)用功能設(shè)置()。
在初始化期間安裝SD卡,初始化藍(lán)牙BLE,并初始化相關(guān)的數(shù)字引腳。這需要幾秒鐘。
一旦所有內(nèi)容都初始化,就會播放撥號音。與所有聲音一樣,此聲音來自SD卡上的文件。撥號音實(shí)際上是一個相對較短的聲音文件,一旦完成就會重復(fù)。
一旦手機(jī)上的滾輪開始移動,軟件就會檢測到引腳D8上的更改并停止撥號音。
電話號碼中的每個數(shù)字都是根據(jù)D7針腳上檢測到的脈沖數(shù)計算出來的。
撥打全部6位數(shù)后,程序?qū)逾徛暎趐honeBook []數(shù)組中找到該號碼,并綁定到列出的名稱標(biāo)簽的MAC地址。
只要完成簡單的握手以驗(yàn)證MAC地址是否與預(yù)期的名稱標(biāo)簽ID匹配,就會在耳機(jī)揚(yáng)聲器上播放一長串(有些愚蠢)的“你好”聲音(當(dāng)時草圖上的名稱標(biāo)簽開始快速閃爍顏色瘋狂)。
通常此人會自動掛斷電話并觀看有人打開禮物。電源關(guān)閉,因此Bluno什么都不做。
特殊情況導(dǎo)致特殊情況
如果有人撥打手機(jī)上寫的號碼(869-869)或“TMW-TMW”)然后播放隨機(jī)應(yīng)答消息。另外,The Mad Wrapper在圣誕樹深處隱藏了一個額外的Bluno Beetle“名牌”。布魯諾開始快速地眨眼。在樹上有一個特別的禮物供所有人享用!
各種標(biāo)準(zhǔn)的AT& T錯誤信息都是針對諸如未知號碼之類的內(nèi)容而播放的,并且在沒有答案的情況下響鈴太長。
如果手機(jī)處于摘機(jī)狀態(tài)4分鐘,則摘機(jī)AT& T“blat-blat-blat 。..”聲音表示掛斷電話。
很多計時器
每次循環(huán)時,程序都會檢查時間并查看是否有任何“計時器”已過期。定時器用于一系列事情,包括正常操作和錯誤測試:
有一個看門狗定時器,用于重置和重新綁定到所需的名稱標(biāo)簽。
有一個定時器用于去除“撥號移動”引腳D8。在宣布狀態(tài)發(fā)生變化之前,我們等待嘈雜的信號穩(wěn)定下來。
有一個定時器用于消除引腳D7上的脈沖。
在開始同步時,有一個定時器用于限制與名稱標(biāo)記的握手通信。
沒有足夠的RAM用于變量和數(shù)組
程序完全超出RAM使用量,導(dǎo)致以下警告
可用內(nèi)存不足,可能會出現(xiàn)穩(wěn)定性問題。
如果添加任何新內(nèi)容,則可能出現(xiàn)錯誤功能,程序?qū)㈤_始表現(xiàn)得非常奇怪,包括重啟。我實(shí)現(xiàn)了一些技巧來最小化RAM使用:
諸如聲音文件名之類的字符串作為常量存儲在ROM中。函數(shù)pgm_read_word()用于檢索ROM的常量。
MAC地址是48位十六進(jìn)制數(shù)。我的原始實(shí)現(xiàn)將MAC地址存儲為52個字符的字符串。當(dāng)我只有三個名稱標(biāo)簽與之通信時,這很好。一旦我啟用了10個遠(yuǎn)程Blunos,我就用光了。我能夠通過存儲10個32位長整數(shù)來恢復(fù)程序。所有Bluno Beetle MAC地址中最重要的16位對于我所擁有的設(shè)備始終是相同的,因此我只是將16位添加到唯一的32位數(shù)字進(jìn)行綁定。
另一種節(jié)省RAM的方法(可能是最好的方法)是在兩個Arduinos之間拆分任務(wù)。如果定義了OFFLOAD_SOUND,則刪除聲音產(chǎn)生功能。這被替換為使用SoftwareSerial庫與另一個連接到D3和D4的Arduino進(jìn)行通信的功能。這樣做可以在RAM中留出足夠的空間來支持許多新功能或更多名稱標(biāo)簽。
步驟11:消除嘈雜的電話交換機(jī)
當(dāng)手機(jī)內(nèi)的開關(guān)打開或關(guān)閉時,它不會干凈利落。電壓將反彈+ 5,0,+ 5,0,+ 5,0 。..。..一段時間,直到它穩(wěn)定在一個或另一個上。這可以用一些電子設(shè)備來處理,例如電容器。我用軟件處理它。 blunoPhone 草圖會檢查該值是否發(fā)生變化,然后等待一段時間來驗(yàn)證該值是否再次發(fā)生變化。
延遲10毫秒效果很好!
#define DEBOUNCE_DELAY 10 // wait 10ms for the circuit to settle during puls transition
用于跟蹤時間的變量:
long timeOfPulsePinStateChange = 0; // save the time for debouncing
去抖動的一些代碼:
if (pulseInputLastState != pulseInputPinState) {
timeOfPulsePinStateChange = millis();
}
if ((millis() - timeOfPulsePinStateChange) 》 DEBOUNCE_DELAY) {
// debounce - this happens once it‘s stabilized
if (pulseInputTrueState != pulseInputPinState) {
// this means that the switch has either just gone from closed-》open or vice versa.
pulseInputTrueState = pulseInputPinState;
}
步驟12 :Arduino名稱標(biāo)記草圖軟件
草圖 blunoNameTag 實(shí)現(xiàn)在DFRobot上運(yùn)行的可穿戴“名稱標(biāo)記” Bluno Beetle。
它使用BLE藍(lán)牙連接與隱藏在古董電話中的中央Bluno進(jìn)行通信。
在空閑狀態(tài) - 當(dāng)沒有連接到手機(jī)時 - - 藍(lán)色LED輕輕地發(fā)出更亮的光,然后變暗。
隨著通信握手開始,一些不同顏色的LED亮起,藍(lán)色LED發(fā)出全亮度不再發(fā)出脈沖。
握手需要使用名稱標(biāo)簽的ID進(jìn)行回復(fù)。這是從AT + NAME =?返回的結(jié)果。有關(guān)使用適當(dāng)編號配置AT + NAME的重要說明,請參閱本Instructable的另一部分。
一旦通信完全建立,所有顏色的LED都開始瘋狂地閃爍。
很多計時器
每次循環(huán)時,程序都會檢查時間并查看是否有任何“定時器”已過期。
有一個計時器可以更新藍(lán)色LED的亮度。 (我真的很喜歡這個簡單的細(xì)微特征。在空閑狀態(tài)下輕柔的平靜脈沖為項目增添了一點(diǎn)“自然”的人性。)
每個彩色LED都有一個定時器告訴它閃爍一定時間。每個LED的閃爍速率不同,導(dǎo)致輕微隨機(jī)的光圖案。
有一個計時器可以檢查來自手機(jī)的消息。
有一個看門狗定時器可以重置整個Bluno Beetle。有時,完全開始是與嘗試接觸的中央Bluno同步的唯一方法。
步驟13:輕輕地點(diǎn)亮LED以獲得良好的平靜效果
我盡可能嘗試為我的應(yīng)用添加一些微妙的“自然”效果。如果做得好,這將增加一定程度的舒適度并獲得用戶的一點(diǎn)信任。它讓人感覺很好。這是一個很好的設(shè)計。
如果您只是需要向用戶顯示您的小工具已啟動,那么簡單的事情就是在啟動過程中點(diǎn)亮LED并忘記它。
咩。
使用Arduino PWM功能并做一些有趣的事情。做吧!這并不難(特別是因?yàn)槲乙呀?jīng)提供了一些代碼供您復(fù)制/粘貼到您的應(yīng)用程序中)。
我喜歡以下代碼的效果,它實(shí)現(xiàn)了藍(lán)色LED輕輕發(fā)光以平靜的“呼吸”速度變得更加明亮和暗淡。感覺很棒!
我將藍(lán)色LED連接到一個支持PWM的引腳(Bluno Beetle上的引腳D3)。
#define BLUE_LED 3 // blue LED
我設(shè)置了一些參數(shù)LED發(fā)光的速度和亮度有多快
#define GLOW_MIN 15 //15 // min brightness of glow
#define GLOW_MAX 100 //120 // max brightness of glow
#define GLOW_UPDATE_DELAY 40 // when to increment
#define GLOW_STEP_SIZE 2
及相關(guān)變量
long timeOfLastPulseUpdate = 0;
int glowValue = 0; // led brightness 0-255
int glowIncrement = GLOW_STEP_SIZE; // Either + or - depending on up/down glow
我創(chuàng)建了一個實(shí)用程序函數(shù)來幫助確定是否需要調(diào)整LED的亮度:
// gently glow bright/dim when not connected
bool timeToUpdateGlow () {
long now = millis();
if ((now - timeOfLastPulseUpdate) 》 GLOW_UPDATE_DELAY) {
timeOfLastPulseUpdate = now;
return true;
} else {
return false;
}
}
然后,每次通過循環(huán),如果是時候改變亮度,改變它。如果 glowIncrement 為正數(shù),則LED會略微變亮。如果 glowIncrement 是負(fù)數(shù),則藍(lán)色LED稍微變暗。
void loop() {
。..
if (timeToUpdateGlow()) {
glowValue += glowIncrement;
if (glowValue 《= GLOW_MIN) {
glowValue = GLOW_MIN;
glowIncrement = GLOW_STEP_SIZE; // +1 so start glowing brighter
} else if (glowValue 》= GLOW_MAX) {
glowValue = GLOW_MAX;
glowIncrement = -GLOW_STEP_SIZE; // start dimming now
}
analogWrite(BLUE_LED, glowValue);
}
。..
}
步驟14:瘋狂的浮華色彩吸引注意力
引起人們對小工具的關(guān)注的一個好方法是使用幾個LED“隨機(jī)”潑灑閃亮的顏色。我對我使用的效果感到滿意。每個LED以不同的快速閃爍,以創(chuàng)建一個有趣的色彩管弦樂隊。
定義閃爍率和變量:
// blink rates when connected spaced to look like random orchestrated splatter
#define BLUE_BLINK_DELAY 300 // blink rate 0.3 seconds
#define YELLOW_BLINK_DELAY 500 // blink rate 0.5 seconds
#define RED_BLINK_DELAY 800 // blink rate 0.8 seconds
#define GREEN_BLINK_DELAY 1300 // blink rate 1.3 seconds
long timeOfLastBlueBlink = 0;
long timeOfLastGreenBlink = 0;
long timeOfLastYellowBlink = 0;
long timeOfLastRedBlink = 0;
確定何時閃爍LED的一些實(shí)用程序功能
// after connected we wildly blink the blue LED
bool timeForBlueBlink () {
long now = millis();
if ((now - timeOfLastBlueBlink) 》 BLUE_BLINK_DELAY) {
timeOfLastBlueBlink = now;
return true;
} else {
return false;
}
}
// after connected we wildly blink the green LED
bool timeForGreenBlink () {
long now = millis();
if ((now - timeOfLastGreenBlink) 》 GREEN_BLINK_DELAY) {
timeOfLastGreenBlink = now;
return true;
} else {
return false;
}
}
// after connected we wildly blink the yellow LED
bool timeForYellowBlink () {
long now = millis();
if ((now - timeOfLastYellowBlink) 》 YELLOW_BLINK_DELAY) {
timeOfLastYellowBlink = now;
return true;
} else {
return false;
}
}
// after connected we wildly blink the red LED
bool timeForRedBlink () {
long now = millis();
if ((now - timeOfLastRedBlink) 》 RED_BLINK_DELAY) {
timeOfLastRedBlink = now;
return true;
} else {
return false;
}
}
以及閃爍的功能。
void blink (int pin) {
digitalWrite(pin, HIGH);
delay(100);
digitalWrite(pin, LOW);
}
并且,如果處于正確的狀態(tài),每個循環(huán)一次,檢查時間并使LED閃爍
void loop() {
。..
if (timeForBlueBlink()) {
blink (BLUE_LED);
}
if (timeForGreenBlink()) {
blink (GREEN_LED);
}
if (timeForYellowBlink()) {
blink (YELLOW_LED);
}
if (timeForRedBlink()) {
blink (RED_LED);
}
。..
}
-
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5771瀏覽量
169836 -
電話
+關(guān)注
關(guān)注
0文章
135瀏覽量
25781
發(fā)布評論請先 登錄
相關(guān)推薦
評論