電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>開源硬件之向所有有禮貌的司機(jī)表示感謝

開源硬件之向所有有禮貌的司機(jī)表示感謝

2022-12-21 | zip | 0.30 MB | 次下載 | 免費(fèi)

資料介紹

描述

只要我一直在開車,我就希望能夠以更有意義的方式與我周圍的隨機(jī)司機(jī)進(jìn)行交流。在我看來(lái),閃光、揮手、比揮手更重要的手勢(shì)、按喇叭或猛踩剎車最終都成為一種非常粗糙的交流機(jī)制。

其靈感來(lái)自詹姆斯·邦德的電影,在影片的開場(chǎng)場(chǎng)景中,他在奧斯汀·馬丁的后窗上展示了一些文字。我想,我真的可以告訴(不僅僅是用波浪形的手表達(dá))另一輛車?yán)锏乃緳C(jī)我在想什么。

?

還有一個(gè)準(zhǔn)真人演示:

?
pYYBAGOiaEmAcUHPAAewbtAc6pw735.jpg
?

這是概念草圖:

poYBAGOiaGOAGfrGAAOnszDdHhY298.jpg
這個(gè)概念
?

這個(gè)項(xiàng)目有一個(gè)額外的挑戰(zhàn),因?yàn)?MKR1000 是一個(gè)預(yù)發(fā)布板,沒有正式的文檔。

所以在項(xiàng)目的第一步:?

讓 MKR1000 說(shuō)話

我很幸運(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 庫(kù)管理器加載了以下庫(kù):Adafruit DotStar、Adafruit DotStarMatrix、Adafruit GFX、ArduinoJson 和適用于 Arduino 的 Windows Virtual Shields。

當(dāng)這塊板子正式發(fā)布時(shí),流程會(huì)簡(jiǎn)單很多。所以,我不打算在這里詳細(xì)介紹。在文章末尾有一個(gè)項(xiàng)目參考可以幫助您做到這一點(diǎn)。

構(gòu)建電子設(shè)備的第一條規(guī)則:永遠(yuǎn)不要讓魔法冒出電路!

MKR100 是一款基于 3v3 的開發(fā)板。沒有我想要的所有文檔,我不知道它們是否能承受 5 伏電壓。不僅一些組件確實(shí)需要 5 伏電壓來(lái)建立正確的邏輯 1 和 0。

這帶來(lái)了 Adafruit 對(duì) 4 通道雙向電平轉(zhuǎn)換的需求。藍(lán)牙卡和特別是 DotStar 矩陣都非常像一個(gè)完整的 5 伏特。所以,連接這些東西時(shí)要小心。

確保組件正常工作

在我擔(dān)心讓所有東西一起工作之前,我想確保所有組件都能正常工作。

我從 Adafruit 8x32 DotStar 矩陣開始。我發(fā)現(xiàn)我的人際關(guān)系有點(diǎn)古怪。為了使這不是問(wèn)題,我使用了一些我放在周圍的插頭引腳并將它們焊接起來(lái)。 ?

pYYBAGOiaKeARBJeAAhyIopEgs4376.jpg
即將焊接頭針
?

牢固連接收割臺(tái)銷。我將數(shù)據(jù)和時(shí)鐘輸入路由到 MKR1000 上標(biāo)有 SDA 和 SCL 的 SPI 引腳。 ?

牢固連接收割臺(tái)銷。我將數(shù)據(jù)和時(shí)鐘輸入路由到 MKR1000 上標(biāo)有 SDA 和 SCL 的 SPI 引腳。 ?

我將示例草圖“文件 > 示例 > Adafruit DotStarMatric > matrixtest”加載到 IDE 中。調(diào)整代碼中的DATAPIN為11,CLOCKPIN為12。構(gòu)建并部署了解決方案。在對(duì)矩陣進(jìn)行了一些選擇之后,我得到了一個(gè)可以工作的顯示器。

?

接下來(lái)是讓 Virtual Shield 通過(guò)藍(lán)牙適配器工作。這真的很簡(jiǎn)單。我按照 github 存儲(chǔ)庫(kù)?https://github.com/ms-iot/virtual-shields-arduino中提到的說(shuō)明進(jìn)行操作我唯一需要做的改變是 TX 和 RX 引腳。這些是我板上標(biāo)記的引腳 14 和 13。 ?

我會(huì)注意到,在以前的版本中,我必須斷開 TX/RX 引腳才能上傳新草圖。我很高興地報(bào)告,情況已不再如此。

遍歷代碼

現(xiàn)在一切正常,我將花點(diǎn)時(shí)間瀏覽一下這個(gè)項(xiàng)目的特定代碼。

為了訪問(wèn)所有功能,您需要包括以下內(nèi)容:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

前 5 個(gè)包含應(yīng)該很清楚。 ?

VirtualShield.h 包含通過(guò)藍(lán)牙適配器進(jìn)行通信的基本功能。無(wú)論您想訪問(wèn)哪個(gè)傳感器,這都是必需的。

Text.h 文件獲取更好的文本,即字符串處理。

Graphics.h、Recognition.h 和 Colors.h 包含訪問(wèn)虛擬屏幕和啟用語(yǔ)音識(shí)別所需的功能。雖然,這個(gè)挑戰(zhàn)還沒有完成,但我會(huì)在未來(lái)編寫語(yǔ)音功能。

接下來(lái)是重要代碼行列表,初始化 DotStar 矩陣和初始化 Shield 對(duì)象:

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 庫(kù)矩陣的大小和布局。有關(guān)各種選項(xiàng),請(qǐng)參閱 matrixtest 示例或 Adafruit_DotStarMatrix.h 文件。

這些顏色適用于 DotStar 庫(kù)。

最后 3 行啟動(dòng)屏蔽并初始化對(duì)象,以便與手機(jī)中的傳感器一起工作。

接下來(lái)像所有 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í)連接。我們需要事件,以便我們可以重繪屏幕,使其看起來(lái)像它應(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)槲艺娴暮芟雽⑹挛锞又幸允蛊淇雌饋?lái)不錯(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è)事件到來(lái),代碼檢查哪個(gè)按鈕被按下,我們調(diào)用 DisplayText 方法來(lái)顯示內(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)建非常簡(jiǎn)單。我找到了一個(gè)比矩陣足跡大的大小合適的盒子。拿了一塊 1/4" 的波羅的海樺木,它比我需要的大,然后把它切成合適的尺寸。 ?

專業(yè)提示:不要嘗試測(cè)量這個(gè)。只需將盒子放在臺(tái)鋸上,然后將柵欄推緊即可。
?
?
?
poYBAGOiaL6Ab7e9AAV44iqLbkA986.jpg
?
1 / 2
?
專業(yè)提示:在臺(tái)鋸上切割任何種類的原料時(shí),請(qǐng)將鋸片高度調(diào)整到最低限度。它最大限度地減少了木材上的燃燒,并降低了所有額外刀片旋轉(zhuǎn)的風(fēng)險(xiǎn)。
poYBAGOiaNaAZ-whAARfHTAQtNk846.jpg
?

使用與臺(tái)鋸相同的技術(shù)。首先將矩陣放在膠合板上。定位好后,再標(biāo)出接線的水平中心和垂直中心(包括輔助電源接線)。您現(xiàn)在需要做的就是連接線以找到您將要鉆孔的孔的中心。

是的,我說(shuō)的是“鉆孔”,而不是“鉆孔”。上次我在塑料上“鉆”孔時(shí),得到了一些非常不令人滿意的結(jié)果。這次我使用?了 Forestner 鉆頭。我在下面有一張他們的照片。注意邊緣是用來(lái)切割的,中間有一個(gè)刮刀用來(lái)挖出不需要的木頭。做一個(gè)更好的“洞”。現(xiàn)在,開始“鉆孔”,您可能想繼續(xù)鉆懸掛孔。

拿一張 120 號(hào)砂紙,輕輕打磨整塊砂紙。確保“緩解”電路板的邊緣包括剛剛制作的所有孔。一定要把板子擦干凈,這樣板上就沒有其他“東西”的鋸屑了。

現(xiàn)在是時(shí)候處理塑料盒了。 ?

在盒子的兩端鉆兩個(gè)孔。這些用于電源連接器和與矩陣的連接。暫時(shí)不要鉆矩陣輔助電源孔。

現(xiàn)在,在盒子背面貼幾條雙面膠帶,然后將盒子貼在膠合板上。因?yàn)檫@是“可重新定位”的膠帶,我真的希望它能永遠(yuǎn)粘住。我在上面放了一些沉重的書,并放置了 24 小時(shí)。為什么是24小時(shí)?磁帶說(shuō)明說(shuō)不要。這對(duì)我來(lái)說(shuō)是一個(gè)足夠好的理由。

最后一個(gè)洞的時(shí)間。您現(xiàn)在應(yīng)該有輔助電源連接孔的準(zhǔn)確位置。把它弄出來(lái),享受你“精確”的工作。?

?
?
?
poYBAGOiaPmAZRLVAAesmxFDlkc792.jpg
?
1 / 6
?

把智慧放在盒子里

似乎面包板的尺寸正好適合盒子,但我希望能夠從 MKR1000 插入/拔出 USB 連接器。所以,我不得不讓面包板更短。

?
?
?
pYYBAGOiaSqAE_MTAAk64VJyPVE690.jpg
?
1 / 4
?

好的,在那次創(chuàng)傷之后,剝下面包板的背面并將其粘住。確保避開輔助電源連接孔。

?
?
?
poYBAGOiaVKAeq4SAAb-bkyFCHI763.jpg
?
1 / 3
?

將矩陣連接到膠合板的正面,將連接穿過(guò)孔。用一些熱膠固定矩陣。

讓我們談?wù)剻?quán)力

即使我將亮度設(shè)置為 40%,如果我點(diǎn)亮所有 256 個(gè)像素,最大電流大約為 7.5 安培。遠(yuǎn)遠(yuǎn)超過(guò) MKR1000 所能提供的。對(duì)我來(lái)說(shuō)幸運(yùn)的是,沒有一個(gè)顯示是靜態(tài)的,我沒有在整個(gè)矩陣附近的任何地方點(diǎn)亮。輔助電源連接來(lái)救援。我提供高達(dá) 4A 的電流。我想既然它不是持續(xù)的也不是靜態(tài)的,電源應(yīng)該是好的。?

我還有一個(gè)備用的壁式電源適配器,當(dāng)它在車內(nèi)通電時(shí),我使用它的末端為 MKR1000 供電。

?
?
?
pYYBAGOiaXKAVv9gAAYu1Haoqq8189.jpg
?
1 / 2
?

我正在考慮在項(xiàng)目中構(gòu)建一個(gè)電源轉(zhuǎn)換器,以獲取 12V 汽車電源并將 5V 提供給項(xiàng)目。經(jīng)過(guò)深思熟慮,以 5.00 美元的價(jià)格購(gòu)買一個(gè) 5V 4A 交流適配器并使用我已有的交流轉(zhuǎn)換器在所有方面都更好。當(dāng)涉及到這些東西時(shí),簡(jiǎn)單通常更好。

掛牌子

我曾計(jì)劃使用“球彈力繩”和一些吸盤將其固定在后擋風(fēng)玻璃上。這么說(shuō)吧,我在該地區(qū)還有更多工作要做。

?
?
?
pYYBAGOiaZWAatUHAAYcFqepDnw366.jpg
?
1 / 2
?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)