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