第1步:構(gòu)建電路
《顯然,如果你正在關(guān)注我的構(gòu)建,你將不必經(jīng)歷我所做的測(cè)試。我做的第一件事是確保我的代碼工作,我可以正確地從光隔離器獲得信號(hào),并正確控制LED燈條?;艘稽c(diǎn)時(shí)間才弄清楚如何最好地將信號(hào)引腳連接到隔離器,但通過反復(fù)試驗(yàn),我找到了正確的方向。我剛剛使用了一個(gè)標(biāo)準(zhǔn)的原型板,因?yàn)槲抑粯?gòu)建了一個(gè),并且計(jì)算出一個(gè)跟蹤模式會(huì)花費(fèi)更多的時(shí)間而不是它的價(jià)值。電路板的頂部看起來很棒,但底部確實(shí)看起來有點(diǎn)混亂,但至少它的功能。
基本設(shè)計(jì)從輸入交流電源(僅在摩托車開啟時(shí)打開的電線)輸入12V電源開始。接線圖確實(shí)可以幫助找到這根電線。將其饋入電壓調(diào)節(jié)器的一側(cè)。一個(gè)0.33 uF電容將此輸入連接到穩(wěn)壓器的接地端,然后再將電壓調(diào)回到摩托車的地面。電壓調(diào)節(jié)器的輸出將有一個(gè)0.1uF的電容器接地。這些電容有助于消除穩(wěn)壓器的電壓。如果你在電路板的圖片中找不到它們,它們就在電壓調(diào)節(jié)器的下面。從那里,5V線路到達(dá)Arduino上的Vin,到為LED燈條供電的電源引腳,以及兩個(gè)光隔離器的源極側(cè),它們將饋入Arduino引腳,提供所需的5V信號(hào)。
至于光隔離器,有兩個(gè)方面:一個(gè)帶有紅外LED,另一個(gè)帶有晶體管和紅外探測(cè)器。我們想用IR LED側(cè)測(cè)量12V信號(hào)。由于LED的正向電壓為1.2V,因此我們需要一個(gè)串聯(lián)的限流電阻。 12V - 1.2V = 10.8V并且以18 mA運(yùn)行LED(我總是希望運(yùn)行時(shí)間小于20 mA),你需要一個(gè)R = 10.8V/0.018A = 600歐姆的電阻。車輛上的電壓也往往更高,可能高達(dá)14V,因此最好為此計(jì)劃,即大約710歐姆,盡管700可能更合理。然后LED側(cè)的輸出反饋到地。對(duì)于光隔離器的輸出側(cè),輸入將使用來自穩(wěn)壓器的5V信號(hào),然后輸出將連接到另一個(gè)電阻,然后再接地。這個(gè)電阻只需要大約10k到20k歐姆,至少這是我的數(shù)據(jù)表顯示的。這將提供快速的信號(hào)測(cè)量,因?yàn)槲覀儧]有處理嘈雜的環(huán)境。 Arduino引腳的輸出將在電阻和光隔離器輸出之間脫落,這樣當(dāng)信號(hào)關(guān)閉時(shí),引腳為低電平,當(dāng)信號(hào)打開時(shí),引腳為高電平。
LED燈條有三條與之相關(guān)的電線:電源,接地和數(shù)據(jù)。電源需要為5V。這個(gè)項(xiàng)目總共使用了12個(gè)LED(雖然我在條帶上有更多LED,但我只使用每三個(gè)LED),當(dāng)白光以全亮度使用時(shí),每個(gè)LED需要60mA。這總共提供720 mA。我們?cè)陔妷赫{(diào)節(jié)器的輸出功率范圍內(nèi),所以我們很好。只需確保電線足夠大,以便處理電源,我使用的是24號(hào)Cat 6以太網(wǎng)電線。以太網(wǎng)線是我坐在它周圍的東西,它有8條彩色編碼線,所以它很適合這個(gè)項(xiàng)目。然后,需要進(jìn)入頂盒的唯一電線是電源和接地(兩者都在條帶之間分開)和兩條數(shù)據(jù)線(每條條帶一條)。
接線的其余部分連接到arduino上的引腳并為其供電。用于此項(xiàng)目的引腳如下:
Vin - 連接到5V
Gnd - 接地
Pin2 - 連接到左條數(shù)據(jù)線
Pin3 - 連接到右條帶數(shù)據(jù)線
Pin4 - 連接到來自光隔離器的制動(dòng)信號(hào)
Pin5 - 連接到左轉(zhuǎn)向信號(hào)來自光隔離器
Pin6 - 連接到來自光隔離器的右轉(zhuǎn)向燈
步驟2:接線和安裝
電路構(gòu)建完成后,實(shí)際將電路連接到位。使用自行車的接線示意圖,您需要找到以下內(nèi)容:
接地
制動(dòng)信號(hào)輸入
左轉(zhuǎn)信號(hào)輸入
右轉(zhuǎn)信號(hào)輸入
對(duì)我來說,有一個(gè)插頭上有所有這些插件,所以我只是用它。有足夠的時(shí)間,我可能已經(jīng)能夠找到相同的插頭樣式,只是插入模塊,但我沒有,所以我只是刪除了絕緣材料,并焊接新的電線。我在這些拼接連接上使用了插頭,以便我可以在將來需要時(shí)移除其余部分。從那里我把Arduino放在一個(gè)密封的工程箱里,放在我附著的座位下面。輸出電纜然后沿著機(jī)架框架運(yùn)行到防水插頭,然后進(jìn)入盒子并沿著背部延伸到蓋子,在那里它為每一側(cè)分開。電線沿著蓋子內(nèi)部延伸到LED的連接點(diǎn)。使用附在帶有粘性背襯的戶外級(jí)拉鏈帶支架上的拉鏈將電線幫助到位。你可以在家裝店的電纜安裝部分找到這些。
我在LED燈條上使用了兩個(gè)迷你JST插頭,因?yàn)槲倚枰粋€(gè)小到足以通過最小直徑的孔的插頭因?yàn)槲蚁胍_保有足夠的電線來處理當(dāng)前的要求。再次,它可能是矯枉過正,我沒有任何小插頭三條線方便。用于光帶線穿過的盒子中的孔被密封以防止水流出。至于LED條的定位,因?yàn)殚g距略有不匹配(反射器和LED之間的間距差異大約為1 - 1.5 mm),我將它們放置在一起,這樣它們就可以分開LED和LED之間的差異。盡可能的洞。然后我用熱膠將它們固定到位并用密封劑完全密封該區(qū)域。 LED燈條本身是防水的,所以如果它們弄濕就沒問題。雖然安裝起來似乎很多,但這使得系統(tǒng)在將來更容易拆卸或者需要更換部件,因?yàn)樗赡軙?huì)發(fā)生。
第3步:代碼
我的源代碼應(yīng)位于此Instructable的開頭。我總是大量評(píng)論我的代碼,以便以后更容易理解。免責(zé)聲明:我不是專業(yè)的代碼編寫者。代碼是用一種更容易上手的方法編寫的,并且進(jìn)行了一些改進(jìn),但我知道它可以更精確。我也使用了大量的delay()函數(shù)進(jìn)行定時(shí),這并不理想。然而,相比之下,該單元接收的信號(hào)并不是快速信號(hào),所以我仍然覺得有理由讓他們使用像millis()這樣的東西。我也是一個(gè)非常忙碌的父親和丈夫,因此花時(shí)間改進(jìn)最終不會(huì)改變功能的東西并不在名單上。
對(duì)于此項(xiàng)目,只需要一個(gè)庫,即FastLED庫。這包含控制WS2811/WS2812B型LED燈條的所有代碼。從那里,我將介紹將要使用的基本功能。
標(biāo)準(zhǔn)定義以外的第一個(gè)是聲明你的兩個(gè)條帶。您將對(duì)每個(gè)條帶使用以下代碼:
FastLED.addLeds(leds[0], NUM_LEDS);
此代碼行設(shè)置引腳2將此條帶定義為條帶0,其中LED數(shù)量由常量NUM_LEDS定義,在我的case設(shè)置為16.要定義第二個(gè)條帶,2將變?yōu)?(對(duì)于pin3),條帶將標(biāo)記為條帶1.
下一行很重要的是顏色定義。
leds[0][1] = Color_high CRGB(r,g,b);
這行代碼雖然在不同的外觀中使用(我的大多數(shù)使用常量)?;旧?,此代碼將值發(fā)送到定義每個(gè)亮度的每個(gè)LED通道(紅色,綠色,藍(lán)色)。亮度值可以通過數(shù)字0 - 255定義。通過更改每個(gè)通道的亮度級(jí)別,您可以定義不同的顏色。對(duì)于這個(gè)項(xiàng)目,我想要一種白色,以保持光線盡可能明亮。所以我唯一的改變是在所有三個(gè)通道中設(shè)置相同的亮度級(jí)別。
下一組代碼用于單獨(dú)點(diǎn)亮每個(gè)燈光。請(qǐng)注意,對(duì)于每個(gè)條帶,每個(gè)LED的地址從最接近數(shù)據(jù)線連接的那個(gè)開始為0,一直到最低數(shù)量的LED為負(fù)1.例如,這些是16個(gè)LED條,所以最高的是16 - 1 = 15.原因是第一個(gè)LED標(biāo)記為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循環(huán)中使用變量(i)作為L(zhǎng)ED地址,然后以全部數(shù)量的LED(NUM_LEDS)為參考。這樣做的原因是我希望燈光從條帶末端而不是從頭開始。設(shè)置輸出到兩個(gè)條帶(LED [0]和LED [1]),然后發(fā)出顯示更改的命令。之后關(guān)閉此燈(CRGB :: Black),下一盞燈亮起。 Black引用是FastLED庫中的特定顏色,因此我不必為每個(gè)通道發(fā)出0,0,0,盡管它們會(huì)做同樣的事情。 For循環(huán)一次前進(jìn)3個(gè)LED(i = i-3),因?yàn)槲抑皇褂闷渌蠰ED。在此循環(huán)結(jié)束時(shí),燈光序列將從一個(gè)LED轉(zhuǎn)到另一個(gè)LED,每個(gè)條帶只有一個(gè)點(diǎn)亮,類似騎士騎士效果。如果你想保持每個(gè)燈點(diǎn)亮以便建立條形,你只需要?jiǎng)h除關(guān)閉LED的線路,這些線路會(huì)在程序的下一組代碼中發(fā)生。
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的最后一個(gè)代碼示例是淡入淡出循環(huán)。在這里,我使用臨時(shí)插槽來獲得每個(gè)通道(rt,gt,bt)的亮度,并將它們遞增1,每次顯示之間有一個(gè)延遲,以達(dá)到我想要的外觀。另請(qǐng)注意,此代碼僅更改最后三個(gè)LED,因?yàn)樗谶\(yùn)行燈中褪色,因此我從9開始而不是0.
其余的LED代碼是這些的迭代。其他一切都集中在尋找三種不同電線上的信號(hào)。代碼的Loop()區(qū)域?qū)ふ抑苿?dòng)燈,它會(huì)在停留之前閃爍一次(如果需要可以調(diào)節(jié))或?qū)ふ肄D(zhuǎn)向信號(hào)。對(duì)于這個(gè)代碼,因?yàn)槲也荒芗僭O(shè)左右轉(zhuǎn)向燈會(huì)在危險(xiǎn)的同一時(shí)間完全打開,我讓代碼首先找到一個(gè),然后在一個(gè)小延遲之后我檢查兩個(gè)是否都在指示危險(xiǎn)警告燈亮起。我所遇到的一個(gè)棘手的部分是轉(zhuǎn)向燈,因?yàn)闊魰?huì)熄滅一段時(shí)間,所以如何判斷仍處于開啟但處于關(guān)閉期間的信號(hào)與取消信號(hào)之間的區(qū)別?我想出的是實(shí)現(xiàn)一個(gè)延遲循環(huán),設(shè)置為比信號(hào)閃爍之間的延遲持續(xù)更長(zhǎng)時(shí)間。如果轉(zhuǎn)向信號(hào)仍然打開,則信號(hào)回路將繼續(xù)。如果延遲結(jié)束時(shí)信號(hào)沒有重新打開,則返回循環(huán)開始()。要調(diào)整延遲的長(zhǎng)度,請(qǐng)更改常量lightDelay的編號(hào),以便在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.
}
希望其余的代碼是自我解釋的。它只是一組重復(fù)的檢查和動(dòng)作信號(hào)。
第4步:結(jié)果
令人驚奇的是,這個(gè)系統(tǒng)第一次連接到自行車?,F(xiàn)在,為了公平起見,我在此之前在板凳上對(duì)它進(jìn)行了大量測(cè)試,但我仍然期望有問題或調(diào)整。事實(shí)證明,我不需要對(duì)代碼和連接進(jìn)行任何調(diào)整。正如您在視頻中看到的那樣,系統(tǒng)會(huì)通過啟動(dòng)順序(您不必?fù)碛校?,然后默認(rèn)為運(yùn)行燈。在此之后它會(huì)查找制動(dòng)器,在這種情況下,它會(huì)將所有LED點(diǎn)亮至全亮度并閃爍一次,然后保持直至制動(dòng)器釋放。當(dāng)使用轉(zhuǎn)向信號(hào)時(shí),我對(duì)指示轉(zhuǎn)彎的一側(cè)進(jìn)行了滾動(dòng)效果,如果打開則另一側(cè)將是運(yùn)行燈或剎車燈。危險(xiǎn)燈只會(huì)與其他燈一起閃爍。
希望通過這些額外的燈光,我會(huì)更容易被其他人看到。至少,這是一個(gè)很好的補(bǔ)充,使我的盒子比其他人更突出,同時(shí)提供實(shí)用性。我希望這個(gè)項(xiàng)目對(duì)其他人也有用,即使他們沒有使用摩托車頂盒照明。謝謝!
-
led燈
+關(guān)注
關(guān)注
22文章
1596瀏覽量
109551
發(fā)布評(píng)論請(qǐng)先 登錄
激光焊接技術(shù)在焊接摩托車噴油嘴工藝中的應(yīng)用

重慶贛鋒動(dòng)力榮獲2024年度中國(guó)摩托車行業(yè)優(yōu)秀供應(yīng)商
RIGOL示波器助力MIT開發(fā)氫燃料電池摩托車

摩托車無鑰匙進(jìn)入與一鍵啟動(dòng)系統(tǒng)解析技術(shù)原理·功能實(shí)現(xiàn)·安全優(yōu)勢(shì)

使用新思科技LucidShape軟件的摩托車前照燈設(shè)計(jì)

虹科免拆案例 | 2012 款哈雷戴維森摩托車冷機(jī)急加速熄火

億緯鋰能亮相米蘭國(guó)際摩托車展
上海貝嶺功率器件在電動(dòng)輕便摩托車控制器的應(yīng)用解析

Cadence Fidelity CFD工具助力凱越機(jī)車革新
兩輪摩托車QJ600GS-A用戶使用維護(hù)手冊(cè)
聯(lián)合電子2024北京國(guó)際摩托車展覽會(huì)精彩回顧
國(guó)內(nèi)市場(chǎng)藍(lán)海重要信號(hào)摩托車正在加快高端化智能化電動(dòng)化轉(zhuǎn)型

JAE連接器MX23A系列在摩托車上的應(yīng)用日益廣泛
兩位數(shù)車輛防碰撞方案

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

評(píng)論