第1步:構建電路
《顯然,如果你正在關注我的構建,你將不必經歷我所做的測試。我做的第一件事是確保我的代碼工作,我可以正確地從光隔離器獲得信號,并正確控制LED燈條。花了一點時間才弄清楚如何最好地將信號引腳連接到隔離器,但通過反復試驗,我找到了正確的方向。我剛剛使用了一個標準的原型板,因為我只構建了一個,并且計算出一個跟蹤模式會花費更多的時間而不是它的價值。電路板的頂部看起來很棒,但底部確實看起來有點混亂,但至少它的功能。
基本設計從輸入交流電源(僅在摩托車開啟時打開的電線)輸入12V電源開始。接線圖確實可以幫助找到這根電線。將其饋入電壓調節器的一側。一個0.33 uF電容將此輸入連接到穩壓器的接地端,然后再將電壓調回到摩托車的地面。電壓調節器的輸出將有一個0.1uF的電容器接地。這些電容有助于消除穩壓器的電壓。如果你在電路板的圖片中找不到它們,它們就在電壓調節器的下面。從那里,5V線路到達Arduino上的Vin,到為LED燈條供電的電源引腳,以及兩個光隔離器的源極側,它們將饋入Arduino引腳,提供所需的5V信號。
至于光隔離器,有兩個方面:一個帶有紅外LED,另一個帶有晶體管和紅外探測器。我們想用IR LED側測量12V信號。由于LED的正向電壓為1.2V,因此我們需要一個串聯的限流電阻。 12V - 1.2V = 10.8V并且以18 mA運行LED(我總是希望運行時間小于20 mA),你需要一個R = 10.8V/0.018A = 600歐姆的電阻。車輛上的電壓也往往更高,可能高達14V,因此最好為此計劃,即大約710歐姆,盡管700可能更合理。然后LED側的輸出反饋到地。對于光隔離器的輸出側,輸入將使用來自穩壓器的5V信號,然后輸出將連接到另一個電阻,然后再接地。這個電阻只需要大約10k到20k歐姆,至少這是我的數據表顯示的。這將提供快速的信號測量,因為我們沒有處理嘈雜的環境。 Arduino引腳的輸出將在電阻和光隔離器輸出之間脫落,這樣當信號關閉時,引腳為低電平,當信號打開時,引腳為高電平。
LED燈條有三條與之相關的電線:電源,接地和數據。電源需要為5V。這個項目總共使用了12個LED(雖然我在條帶上有更多LED,但我只使用每三個LED),當白光以全亮度使用時,每個LED需要60mA。這總共提供720 mA。我們在電壓調節器的輸出功率范圍內,所以我們很好。只需確保電線足夠大,以便處理電源,我使用的是24號Cat 6以太網電線。以太網線是我坐在它周圍的東西,它有8條彩色編碼線,所以它很適合這個項目。然后,需要進入頂盒的唯一電線是電源和接地(兩者都在條帶之間分開)和兩條數據線(每條條帶一條)。
接線的其余部分連接到arduino上的引腳并為其供電。用于此項目的引腳如下:
Vin - 連接到5V
Gnd - 接地
Pin2 - 連接到左條數據線
Pin3 - 連接到右條帶數據線
Pin4 - 連接到來自光隔離器的制動信號
Pin5 - 連接到左轉向信號來自光隔離器
Pin6 - 連接到來自光隔離器的右轉向燈
步驟2:接線和安裝
電路構建完成后,實際將電路連接到位。使用自行車的接線示意圖,您需要找到以下內容:
接地
制動信號輸入
左轉信號輸入
右轉信號輸入
對我來說,有一個插頭上有所有這些插件,所以我只是用它。有足夠的時間,我可能已經能夠找到相同的插頭樣式,只是插入模塊,但我沒有,所以我只是刪除了絕緣材料,并焊接新的電線。我在這些拼接連接上使用了插頭,以便我可以在將來需要時移除其余部分。從那里我把Arduino放在一個密封的工程箱里,放在我附著的座位下面。輸出電纜然后沿著機架框架運行到防水插頭,然后進入盒子并沿著背部延伸到蓋子,在那里它為每一側分開。電線沿著蓋子內部延伸到LED的連接點。使用附在帶有粘性背襯的戶外級拉鏈帶支架上的拉鏈將電線幫助到位。你可以在家裝店的電纜安裝部分找到這些。
我在LED燈條上使用了兩個迷你JST插頭,因為我需要一個小到足以通過最小直徑的孔的插頭因為我想要確保有足夠的電線來處理當前的要求。再次,它可能是矯枉過正,我沒有任何小插頭三條線方便。用于光帶線穿過的盒子中的孔被密封以防止水流出。至于LED條的定位,因為間距略有不匹配(反射器和LED之間的間距差異大約為1 - 1.5 mm),我將它們放置在一起,這樣它們就可以分開LED和LED之間的差異。盡可能的洞。然后我用熱膠將它們固定到位并用密封劑完全密封該區域。 LED燈條本身是防水的,所以如果它們弄濕就沒問題。雖然安裝起來似乎很多,但這使得系統在將來更容易拆卸或者需要更換部件,因為它可能會發生。
第3步:代碼
我的源代碼應位于此Instructable的開頭。我總是大量評論我的代碼,以便以后更容易理解。免責聲明:我不是專業的代碼編寫者。代碼是用一種更容易上手的方法編寫的,并且進行了一些改進,但我知道它可以更精確。我也使用了大量的delay()函數進行定時,這并不理想。然而,相比之下,該單元接收的信號并不是快速信號,所以我仍然覺得有理由讓他們使用像millis()這樣的東西。我也是一個非常忙碌的父親和丈夫,因此花時間改進最終不會改變功能的東西并不在名單上。
對于此項目,只需要一個庫,即FastLED庫。這包含控制WS2811/WS2812B型LED燈條的所有代碼。從那里,我將介紹將要使用的基本功能。
標準定義以外的第一個是聲明你的兩個條帶。您將對每個條帶使用以下代碼:
FastLED.addLeds(leds[0], NUM_LEDS);
此代碼行設置引腳2將此條帶定義為條帶0,其中LED數量由常量NUM_LEDS定義,在我的case設置為16.要定義第二個條帶,2將變為3(對于pin3),條帶將標記為條帶1.
下一行很重要的是顏色定義。
leds[0][1] = Color_high CRGB(r,g,b);
這行代碼雖然在不同的外觀中使用(我的大多數使用常量)。基本上,此代碼將值發送到定義每個亮度的每個LED通道(紅色,綠色,藍色)。亮度值可以通過數字0 - 255定義。通過更改每個通道的亮度級別,您可以定義不同的顏色。對于這個項目,我想要一種白色,以保持光線盡可能明亮。所以我唯一的改變是在所有三個通道中設置相同的亮度級別。
下一組代碼用于單獨點亮每個燈光。請注意,對于每個條帶,每個LED的地址從最接近數據線連接的那個開始為0,一直到最低數量的LED為負1.例如,這些是16個LED條,所以最高的是16 - 1 = 15.原因是第一個LED標記為0.
for (int i = NUM_LEDS-1; i 》 -1; i = i - 3) { // This will change the light for every third LED going from the last to first.
leds[0][i] = Color_low; // Set strip 0 LED color to the chosen color.
leds[1][i] = Color_low; // Set strip 1 LED color to the chosen color.
FastLED.show(); // Show the set colors.
leds[0][i] = CRGB::Black; // Turn off set color in prep for next color.
leds[1][i] = CRGB::Black;
delay(150);
}
FastLED.show(); // Show the set colors.
此代碼的工作方式是在for循環中使用變量(i)作為LED地址,然后以全部數量的LED(NUM_LEDS)為參考。這樣做的原因是我希望燈光從條帶末端而不是從頭開始。設置輸出到兩個條帶(LED [0]和LED [1]),然后發出顯示更改的命令。之后關閉此燈(CRGB :: Black),下一盞燈亮起。 Black引用是FastLED庫中的特定顏色,因此我不必為每個通道發出0,0,0,盡管它們會做同樣的事情。 For循環一次前進3個LED(i = i-3),因為我只使用其他所有LED。在此循環結束時,燈光序列將從一個LED轉到另一個LED,每個條帶只有一個點亮,類似騎士騎士效果。如果你想保持每個燈點亮以便建立條形,你只需要刪除關閉LED的線路,這些線路會在程序的下一組代碼中發生。
for (int i = 0; i 《 dim; i++) { // Quickly fade lights to running light level.
rt = rt + 1;
gt = gt + 1;
bt = bt + 1;
for (int i = 9; i 《 NUM_LEDS; i = i +3) { // This will light up the last three lights for the position light.
leds[0][i] = CRGB( rt, gt, bt); // Set strip 0 LED color to the chosen color.
leds[1][i] = CRGB( rt, gt, bt); // Set strip 1 LED color to the chosen color.
}
FastLED.show();
delay(3);
}
我用于LED的最后一個代碼示例是淡入淡出循環。在這里,我使用臨時插槽來獲得每個通道(rt,gt,bt)的亮度,并將它們遞增1,每次顯示之間有一個延遲,以達到我想要的外觀。另請注意,此代碼僅更改最后三個LED,因為它在運行燈中褪色,因此我從9開始而不是0.
其余的LED代碼是這些的迭代。其他一切都集中在尋找三種不同電線上的信號。代碼的Loop()區域尋找制動燈,它會在停留之前閃爍一次(如果需要可以調節)或尋找轉向信號。對于這個代碼,因為我不能假設左右轉向燈會在危險的同一時間完全打開,我讓代碼首先找到一個,然后在一個小延遲之后我檢查兩個是否都在指示危險警告燈亮起。我所遇到的一個棘手的部分是轉向燈,因為燈會熄滅一段時間,所以如何判斷仍處于開啟但處于關閉期間的信號與取消信號之間的區別?我想出的是實現一個延遲循環,設置為比信號閃爍之間的延遲持續更長時間。如果轉向信號仍然打開,則信號回路將繼續。如果延遲結束時信號沒有重新打開,則返回循環開始()。要調整延遲的長度,請更改常量lightDelay的編號,以便在lightDelay中每1次記住延遲變化100ms。
while (digitalRead(leftTurn) == LOW) { for(int i = 0; i 《 lightDelay; i++) {
leftTurnCheck();
if(digitalRead(leftTurn) == HIGH) {
leftTurnLight();
}
delay(100);
}
for (int i = 0; i 《 NUM_LEDS; i = i +3) { // This will change the light for every third LED going from the last to first.
leds[0][i] = CRGB( 0, 0, 0); // Set strip 0 LED color to the chosen color.
}
for (int i = 9; i 《 NUM_LEDS; i = i +3) { // This will set up the running lights which only use the last three.
leds[0][i] = Color_low; // Set strip 0 LED color to the chosen color.
}
FastLED.show(); // Output settings
return; // Once turn signal is no longer on, go back to loop.
}
希望其余的代碼是自我解釋的。它只是一組重復的檢查和動作信號。
第4步:結果
令人驚奇的是,這個系統第一次連接到自行車。現在,為了公平起見,我在此之前在板凳上對它進行了大量測試,但我仍然期望有問題或調整。事實證明,我不需要對代碼和連接進行任何調整。正如您在視頻中看到的那樣,系統會通過啟動順序(您不必擁有),然后默認為運行燈。在此之后它會查找制動器,在這種情況下,它會將所有LED點亮至全亮度并閃爍一次,然后保持直至制動器釋放。當使用轉向信號時,我對指示轉彎的一側進行了滾動效果,如果打開則另一側將是運行燈或剎車燈。危險燈只會與其他燈一起閃爍。
希望通過這些額外的燈光,我會更容易被其他人看到。至少,這是一個很好的補充,使我的盒子比其他人更突出,同時提供實用性。我希望這個項目對其他人也有用,即使他們沒有使用摩托車頂盒照明。謝謝!
-
led燈
+關注
關注
22文章
1592瀏覽量
108540
發布評論請先 登錄
相關推薦
虹科免拆案例 | 2012 款哈雷戴維森摩托車冷機急加速熄火

億緯鋰能亮相米蘭國際摩托車展
上海貝嶺功率器件在電動輕便摩托車控制器的應用解析

聯合電子2024北京國際摩托車展覽會精彩回顧
國內市場藍海重要信號摩托車正在加快高端化智能化電動化轉型

跨越速度與激情:SIMSCAN三維掃描儀成雅馬哈摩托車新晉檢測利器

TomTom通過創新導航支持BMW摩托車的全球產品線
LED摩托車燈驅動ICAP5160降壓恒流芯片輸出8A大電流
博世參展2024北京國際摩托車展覽會,助力兩輪摩托車全面提升性能
PMP22557.1-適用于電動摩托車 BMS 應用的高壓降壓轉換器 PCB layout 設計

評論