資料介紹
描述
只要我一直在開車,我就希望能夠以更有意義的方式與我周圍的隨機(jī)司機(jī)進(jìn)行交流。在我看來,閃光、揮手、比揮手更重要的手勢、按喇叭或猛踩剎車最終都成為一種非常粗糙的交流機(jī)制。
其靈感來自詹姆斯·邦德的電影,在影片的開場場景中,他在奧斯汀·馬丁的后窗上展示了一些文字。我想,我真的可以告訴(不僅僅是用波浪形的手表達(dá))另一輛車?yán)锏乃緳C(jī)我在想什么。
還有一個(gè)準(zhǔn)真人演示:
這是概念草圖:
這個(gè)項(xiàng)目有一個(gè)額外的挑戰(zhàn),因?yàn)?MKR1000 是一個(gè)預(yù)發(fā)布板,沒有正式的文檔。
所以在項(xiàng)目的第一步:?
讓 MKR1000 說話
我很幸運(yùn)能夠進(jìn)入由http://arduino.cc贊助的論壇,該論壇為我們每個(gè)發(fā)行版的所有者提供了一個(gè)私人論壇。在一個(gè)充實(shí)的星期六之后,我設(shè)法能夠?qū)﹄娐钒暹M(jìn)行編程并讓所有組件正常工作。
我當(dāng)前的設(shè)置涉及 Arduino IDE 版本 1.6.9 每小時(shí)構(gòu)建一次。如果你像我一樣,那么在項(xiàng)目中使用“每小時(shí)”構(gòu)建至少會(huì)讓你“不舒服”。 ?
安裝 IDE 后,我使用 IDE 的板管理器下載板的驅(qū)動(dòng)程序。我還使用 IDE 庫管理器加載了以下庫:Adafruit DotStar、Adafruit DotStarMatrix、Adafruit GFX、ArduinoJson 和適用于 Arduino 的 Windows Virtual Shields。
當(dāng)這塊板子正式發(fā)布時(shí),流程會(huì)簡單很多。所以,我不打算在這里詳細(xì)介紹。在文章末尾有一個(gè)項(xiàng)目參考可以幫助您做到這一點(diǎn)。
構(gòu)建電子設(shè)備的第一條規(guī)則:永遠(yuǎn)不要讓魔法冒出電路!
MKR100 是一款基于 3v3 的開發(fā)板。沒有我想要的所有文檔,我不知道它們是否能承受 5 伏電壓。不僅一些組件確實(shí)需要 5 伏電壓來建立正確的邏輯 1 和 0。
這帶來了 Adafruit 對 4 通道雙向電平轉(zhuǎn)換的需求。藍(lán)牙卡和特別是 DotStar 矩陣都非常像一個(gè)完整的 5 伏特。所以,連接這些東西時(shí)要小心。
確保組件正常工作
在我擔(dān)心讓所有東西一起工作之前,我想確保所有組件都能正常工作。
我從 Adafruit 8x32 DotStar 矩陣開始。我發(fā)現(xiàn)我的人際關(guān)系有點(diǎn)古怪。為了使這不是問題,我使用了一些我放在周圍的插頭引腳并將它們焊接起來。 ?
牢固連接收割臺銷。我將數(shù)據(jù)和時(shí)鐘輸入路由到 MKR1000 上標(biāo)有 SDA 和 SCL 的 SPI 引腳。 ?
牢固連接收割臺銷。我將數(shù)據(jù)和時(shí)鐘輸入路由到 MKR1000 上標(biāo)有 SDA 和 SCL 的 SPI 引腳。 ?
我將示例草圖“文件 > 示例 > Adafruit DotStarMatric > matrixtest”加載到 IDE 中。調(diào)整代碼中的DATAPIN為11,CLOCKPIN為12。構(gòu)建并部署了解決方案。在對矩陣進(jìn)行了一些選擇之后,我得到了一個(gè)可以工作的顯示器。
接下來是讓 Virtual Shield 通過藍(lán)牙適配器工作。這真的很簡單。我按照 github 存儲庫?https://github.com/ms-iot/virtual-shields-arduino中提到的說明進(jìn)行操作。我唯一需要做的改變是 TX 和 RX 引腳。這些是我板上標(biāo)記的引腳 14 和 13。 ?
我會(huì)注意到,在以前的版本中,我必須斷開 TX/RX 引腳才能上傳新草圖。我很高興地報(bào)告,情況已不再如此。
遍歷代碼
現(xiàn)在一切正常,我將花點(diǎn)時(shí)間瀏覽一下這個(gè)項(xiàng)目的特定代碼。
為了訪問所有功能,您需要包括以下內(nèi)容:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
前 5 個(gè)包含應(yīng)該很清楚。 ?
VirtualShield.h 包含通過藍(lán)牙適配器進(jìn)行通信的基本功能。無論您想訪問哪個(gè)傳感器,這都是必需的。
Text.h 文件獲取更好的文本,即字符串處理。
Graphics.h、Recognition.h 和 Colors.h 包含訪問虛擬屏幕和啟用語音識別所需的功能。雖然,這個(gè)挑戰(zhàn)還沒有完成,但我會(huì)在未來編寫語音功能。
接下來是重要代碼行列表,初始化 DotStar 矩陣和初始化 Shield 對象:
Adafruit_DotStarMatrix matrix = Adafruit_DotStarMatrix(
32, 8, DATAPIN, CLOCKPIN,
DS_MATRIX_TOP + DS_MATRIX_LEFT +
DS_MATRIX_COLUMNS + DS_MATRIX_ZIGZAG,
DOTSTAR_GBR);
const uint16_t colors[] = {
matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255),
matrix.Color(255, 0, 255), matrix.Color(255, 0, 106), matrix.Color( 255, 255, 255) };
VirtualShield shield;
Graphics screen = Graphics(shield);
Recognition speech = Recognition(shield);
第一行告訴 DotStar 庫矩陣的大小和布局。有關(guān)各種選項(xiàng),請參閱 matrixtest 示例或 Adafruit_DotStarMatrix.h 文件。
這些顏色適用于 DotStar 庫。
最后 3 行啟動(dòng)屏蔽并初始化對象,以便與手機(jī)中的傳感器一起工作。
接下來像所有 Arduino 草圖一樣,我們需要處理 setup() 方法
void setup() {
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(40);
matrix.setTextColor(colors[0]);
DisplayText("Initializing...", 4, 10);
// set up virtual shield events:
shield.setOnRefresh(refresh);
speech.setOnEvent(onSpeech);
screen.setOnEvent(screenEvent);
// begin the shield communication (also calls refresh()).
shield.begin(); //assumes 115200 Bluetooth baudrate
DisplayText("Initializing...finished", 3, 10);
}
“矩陣”行是不言自明的,執(zhí)行這些行后,我現(xiàn)在可以向矩陣發(fā)送一些信息性消息。
“屏蔽”行現(xiàn)在設(shè)置回調(diào)方法。當(dāng)事件發(fā)生時(shí),將根據(jù)需要調(diào)用這些方法。 ?
現(xiàn)在是整個(gè)草圖最復(fù)雜的方法
void loop() {
// checkSensors() checks for return events and handles them (calling callbacks). This is VirtualShield's single loop() method.
shield.checkSensors();
}
是的,你明白了。我們不斷檢查傳感器是否已觸發(fā)以及需要處理的事件。
現(xiàn)在好了,讓我們真正處理一些事件。首先是 refresh() 方法。當(dāng)許多不同的事件發(fā)生時(shí),它將被調(diào)用。我們目前關(guān)心的一個(gè)事件是藍(lán)牙何時(shí)連接。我們需要事件,以便我們可以重繪屏幕,使其看起來像它應(yīng)該的那樣。?
void refresh(ShieldEvent* shieldEvent)
{
// put your refresh code here
// this runs whenever Bluetooth connects, whenever the shield.begin() executes, or the 'refresh' button is pressed in the app:
screen.clear(ARGB(123,86,204));
screen.drawAt(0,0, "");
thanksId = screen.addButton(10, 50, ". Thank you .");
welcomeId = screen.addButton(10, 100, ". Welcome .");
turnLeftId = screen.addButton(10, 150, ". Left .");
stoppingId = screen.addButton(175, 50, ". Stopping .");
startingId = screen.addButton(175, 100, ". Starting .");
turnRightId = screen.addButton(175, 150, ". Right .");
backoffId = screen.addButton(10, 225, ". Back Off .");
calling911Id = screen.addButton(10, 290, ". Calling 911 .");
}
此方法使用淺紫色背景清除屏幕,然后繼續(xù)將各種按鈕放在屏幕上。注意單詞周圍的間距。這是虛擬盾牌功能的當(dāng)前限制,因?yàn)槲艺娴暮芟雽⑹挛锞又幸允蛊淇雌饋聿诲e(cuò)。
那么當(dāng)我觸摸其中一個(gè)按鈕時(shí)會(huì)發(fā)生什么?一個(gè)事件被觸發(fā),并在下面的代碼中處理。
void screenEvent(ShieldEvent* shieldEvent)
{
if(screen.isPressed(thanksId))
{
DisplayText("Thank You", 5, 100);
}
if(screen.isPressed(welcomeId))
{
DisplayText("You're welcome", 2, 100);
}
if(screen.isPressed(backoffId))
{
DisplayText("Please back off", 4, 100);
}
if(screen.isPressed(stoppingId))
{
DisplayText("...stopping...", 0, 100);
}
if(screen.isPressed(startingId))
{
DisplayText("...starting...", 1, 100);
}
if(screen.isPressed(turnLeftId))
{
DisplayText("Turning LEFT", 3, 100);
}
if(screen.isPressed(turnRightId))
{
DisplayText("Turning RIGHT", 3, 100);
}
if(screen.isPressed(calling911Id))
{
DisplayText("Calling 911", 0, 100);
}
}
一個(gè)事件到來,代碼檢查哪個(gè)按鈕被按下,我們調(diào)用 DisplayText 方法來顯示內(nèi)容。
最后,文本如何進(jìn)入矩陣?DisplayText 方法將為您處理。
void DisplayText(String message, int colorIndex, int currDelay)
{
int x = matrix.width();
int maxX = -1 * (message.length() * 5 + message.length());
matrix.setTextColor(colors[colorIndex]);
while( x > maxX) {
matrix.fillScreen(0);
matrix.setCursor(x, 0);
matrix.print(message);
--x;
matrix.show();
delay(currDelay);
}
}
這個(gè)方法計(jì)算出這個(gè)字符串到底有多寬。我們需要知道,這樣我們才能確保字符串完全滾動(dòng)進(jìn)出視圖。字母之間的間距為 5 寬 + 1。
建造圍欄
構(gòu)建非常簡單。我找到了一個(gè)比矩陣足跡大的大小合適的盒子。拿了一塊 1/4" 的波羅的海樺木,它比我需要的大,然后把它切成合適的尺寸。 ?
專業(yè)提示:不要嘗試測量這個(gè)。只需將盒子放在臺鋸上,然后將柵欄推緊即可。
專業(yè)提示:在臺鋸上切割任何種類的原料時(shí),請將鋸片高度調(diào)整到最低限度。它最大限度地減少了木材上的燃燒,并降低了所有額外刀片旋轉(zhuǎn)的風(fēng)險(xiǎn)。
使用與臺鋸相同的技術(shù)。首先將矩陣放在膠合板上。定位好后,再標(biāo)出接線的水平中心和垂直中心(包括輔助電源接線)。您現(xiàn)在需要做的就是連接線以找到您將要鉆孔的孔的中心。
是的,我說的是“鉆孔”,而不是“鉆孔”。上次我在塑料上“鉆”孔時(shí),得到了一些非常不令人滿意的結(jié)果。這次我使用?了 Forestner 鉆頭。我在下面有一張他們的照片。注意邊緣是用來切割的,中間有一個(gè)刮刀用來挖出不需要的木頭。做一個(gè)更好的“洞”。現(xiàn)在,開始“鉆孔”,您可能想繼續(xù)鉆懸掛孔。
拿一張 120 號砂紙,輕輕打磨整塊砂紙。確保“緩解”電路板的邊緣包括剛剛制作的所有孔。一定要把板子擦干凈,這樣板上就沒有其他“東西”的鋸屑了。
現(xiàn)在是時(shí)候處理塑料盒了。 ?
在盒子的兩端鉆兩個(gè)孔。這些用于電源連接器和與矩陣的連接。暫時(shí)不要鉆矩陣輔助電源孔。
現(xiàn)在,在盒子背面貼幾條雙面膠帶,然后將盒子貼在膠合板上。因?yàn)檫@是“可重新定位”的膠帶,我真的希望它能永遠(yuǎn)粘住。我在上面放了一些沉重的書,并放置了 24 小時(shí)。為什么是24小時(shí)?磁帶說明說不要。這對我來說是一個(gè)足夠好的理由。
最后一個(gè)洞的時(shí)間。您現(xiàn)在應(yīng)該有輔助電源連接孔的準(zhǔn)確位置。把它弄出來,享受你“精確”的工作。?
把智慧放在盒子里
似乎面包板的尺寸正好適合盒子,但我希望能夠從 MKR1000 插入/拔出 USB 連接器。所以,我不得不讓面包板更短。
好的,在那次創(chuàng)傷之后,剝下面包板的背面并將其粘住。確保避開輔助電源連接孔。
將矩陣連接到膠合板的正面,將連接穿過孔。用一些熱膠固定矩陣。
讓我們談?wù)剻?quán)力
即使我將亮度設(shè)置為 40%,如果我點(diǎn)亮所有 256 個(gè)像素,最大電流大約為 7.5 安培。遠(yuǎn)遠(yuǎn)超過 MKR1000 所能提供的。對我來說幸運(yùn)的是,沒有一個(gè)顯示是靜態(tài)的,我沒有在整個(gè)矩陣附近的任何地方點(diǎn)亮。輔助電源連接來救援。我提供高達(dá) 4A 的電流。我想既然它不是持續(xù)的也不是靜態(tài)的,電源應(yīng)該是好的。?
我還有一個(gè)備用的壁式電源適配器,當(dāng)它在車內(nèi)通電時(shí),我使用它的末端為 MKR1000 供電。
我正在考慮在項(xiàng)目中構(gòu)建一個(gè)電源轉(zhuǎn)換器,以獲取 12V 汽車電源并將 5V 提供給項(xiàng)目。經(jīng)過深思熟慮,以 5.00 美元的價(jià)格購買一個(gè) 5V 4A 交流適配器并使用我已有的交流轉(zhuǎn)換器在所有方面都更好。當(dāng)涉及到這些東西時(shí),簡單通常更好。
掛牌子
我曾計(jì)劃使用“球彈力繩”和一些吸盤將其固定在后擋風(fēng)玻璃上。這么說吧,我在該地區(qū)還有更多工作要做。
- 開源硬件之保護(hù)花園免受貓的侵害
- 開源硬件之孩子們的拼寫挑戰(zhàn)
- 開源硬件-警燈
- 開源硬件之Gerber文件
- AirBits開源硬件
- 開源硬件之明星有多亮
- 音箱開源硬件分享
- 開源硬件之電流傳感器交流
- HBus開源硬件
- 開源硬件之篡改防護(hù)設(shè)備
- 門鈴開源硬件
- 開源硬件之語音控制LED
- 開源硬件之微笑鏡
- 開源硬件之ArduBand 拯救你的眼睛
- 主流的開源硬件有哪些詳細(xì)資料說明
- 安信可小安派-Knob旋轉(zhuǎn)編碼器驅(qū)動(dòng)板簡介 600次閱讀
- 小安派-SCP-2.4 無線中控器參數(shù)概述 851次閱讀
- 用小安派開源硬件制作一個(gè)桌面天氣站 1007次閱讀
- 開源之夏總結(jié)runk:基于Rust的OCI runtime實(shí)現(xiàn) 3595次閱讀
- 使用開源硬件的烹飪過程 1500次閱讀
- 尋找開源硬件成功的觸發(fā)器 755次閱讀
- RVBoards~初心始于2018年 教育部產(chǎn)學(xué)合作育人項(xiàng)目分享 1175次閱讀
- 如何使用開源硬件的WIFI控制開關(guān) 4239次閱讀
- dfrobotDFRobot Bluno M3控制器簡介 1996次閱讀
- 源創(chuàng)通信BPI-M1+ 開源硬件開發(fā)板介紹 2811次閱讀
- 源創(chuàng)通信開源智能路由器 MTK 7623N 介紹 3078次閱讀
- 關(guān)于FPGA在開源方面的探索淺析 3864次閱讀
- 高階自動(dòng)駕駛在高速公路交匯處的“禮貌行為” 3561次閱讀
- 三大主流開源硬件對比:Arduino vs BeagleBone vs Raspberry Pi 6657次閱讀
- 開源硬件究竟有多“Open”?看完這個(gè)你就清楚了 7124次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論
查看更多