介紹:
從表面上看,這是一個非常簡單的項目。它讀取 3 個開關并驅動 2 個 LED 燈條。但是,這不是典型的獨立 Arduino 項目。將其集成到現有電氣系統中存在一些細微差別。
以下是構建此項目所需的技能和項目。
如果愿意深入研究自行車的電氣系統,您需要找到并利用:
開關 12V 線
左轉向信號線
右轉信號線
剎車燈線
三個 12V 繼電器(我選擇了小型簧片式繼電器)
5 v 電源能夠持續 5 A(不是峰值額定值)
兩個 - 5x8 WS2812 LED 矩陣(或您選擇的矩陣)
性能板
用于連接所有電線的接線端子
金屬絲
示意圖注釋
該項目的目標是將 Arduino 與自行車的電氣系統完全隔離。這就是繼電器用于觸發 Arduino 引腳的原因。您可能可以使用分壓器并避免使用繼電器。
如果您有一輛帶有 LED 轉向燈的新型自行車,請檢查您的燈的電壓。它可能正好是 5V,所以可以直接饋入 Arduino 引腳。
你可能會覺得奇怪的是我使用模擬來讀取剎車/轉向信號。這樣做只是為了簡化原型板的焊接,所以我沒有在 Arduino Nano 的一側進行所有連接。
切換的 12V 輸入線位于我自行車上現有的 10A 電路上。
不要給項目供電!每個 LED 矩陣可以消耗 2.5 A!如圖所示,我有一個雙輸出電源,每個輸出都能達到 4A,而且效果很好!兩個 3 安培 BEC 電路可能也可以工作。如果您的 Arduino LED 在轉向信號運行時閃爍,請使用 Arduino 專用電源,或為 Arduino 提供 12V 電源到 VIN 引腳。
構建電路板
我使用了 Adafruit perma 面包板(本質上是帶有面包板痕跡的穿孔板)。我希望內置的痕跡能讓構建更干凈。這不是一個完美的解決方案,需要刮掉一些痕跡。
花時間設計PCB板
放入接頭以便可以更換 Nano,但這也會增加構建的厚度
拓展一下我想試試 TI MSP430 而不是 Arduino
構建測試夾具
如果您正在修改代碼,您將需要構建一個測試夾具,以便您可以在辦公桌上進行開發和測試,而不是在連接到自行車的車庫中進行這項工作。我建立了一個 3 按鈕項目盒,為三個繼電器中的每一個提供 9v。三個按鈕分別代表:左、右、剎車信號,您可以測試所有組合。
Arduino項目
我很早就了解到,最好將 LED 動畫封裝在類庫中。這使得動畫可重復使用。
類庫的缺點是編寫起來有點痛苦。缺乏調試工具(我習慣于使用 Microsoft Visual Studio 和 Eclipse),而且當事情不正常時,幾乎沒有什么線索可以說明哪里出了問題。我的最佳建議是慢慢構建功能并保存備份副本。當您遇到問題時,請仔細檢查您最近所做的更改。C/C++ 中最常見的災難性錯誤可能是緩沖區溢出。
編譯這個 Arduino 草圖需要下載 4 個庫:
Adafruit neopixel 庫
BlinkLed
CascadeLed
尾燈
BlinkLed 類庫
在類庫的頭文件中查看調用序列的詳細信息。您還可以在草圖中找到用于實例化和調用剎車燈和行車燈的示例。將一組像素傳遞給光和頻率。
例子:
字節最大停止 = 25;
字節 StopPix[MAXSINGLEROW] = { 3, 4, 5, 6, 7, 11, 12, 13, 14, 15, 19, 20, 21, 22, 23, 27, 28, 29, 30, 31, 35, 36 , 37, 38, 39};
BlinkLed LStopLed = BlinkLed(&lstrip, &StopPix, maxstop, R, G, B, 19);
BlinkLed RStopLed = BlinkLed(&rstrip, &StopPix, maxstop, R, G, B, 19);
CascadeLed 類庫
在類庫的頭文件中查看調用序列的詳細信息。您還可以在草圖中找到用于實例化和調用轉向信號信號的示例。將二維像素陣列傳遞給光和頻率。然后該類將循環遍歷像素行并按該順序點亮它們。
警告:為簡單起見,我選擇創建常量來定義數組大小。為了便于使用,這會消耗一些內存。如果您選擇驅動每組超過 40 個像素,您可能需要更改定義在 CascadeLed\ArrayConstants.h 中的常量。
例子:
常量字節 maxrow = 5;
常量字節 maxcol = 8;
字節 Rightpix[MAXROW][MAXCOL] = { { 0, 1, 2, 3, 4, 5, 6, 7}, { 8, 9, 10, 11, 12, 13, 14, 15}, {16, 17 , 18, 19, 20, 21, 22, 23}, {24, 25, 26, 27, 28, 29, 30, 31}, {32, 33, 34, 35, 36, 37, 38, 39}} ;
CascadeLed RightLed = CascadeLed(&rstrip, &Rightpix, maxrow, maxcol, RT, GT, BT, 80, 900);
TailLight.ino Arduino 草圖
這里不多說。控制回路非常簡單:
void loop() {
byte leftpin = (analogRead(LEFTPIN) > 50);
byte brakepin = (analogRead(BRAKEPIN) > 50);
byte rightpin = (analogRead(RIGHTPIN) > 50);
// animate or clear the turn signals
// PsudoOn is true when pin is high or between turn signal blinks (pin is actually low)
bool lPsudoOn = LeftLed.Blink(leftpin);
bool rPsudoOn = RightLed.Blink(rightpin);
// animate or clear the brake lights LStopLed.Blink(brakepin); RStopLed.Blink(brakepin);
// only turn on running lights. Let the overlays turn it off // Clear will interfere with overlapping lights
if (!lPsudoOn && !brakepin) LRunLed.Set(true);
if (!rPsudoOn && !brakepin) RRunLed.Set(true);
}
備注:
轉向信號開關會中斷像素動畫,因為閃爍比一個動畫序列更快。CascadeLed 類有一個超時值來吸收閃爍的“關閉”部分并假裝信號仍然打開。這個偽開啟被傳遞回主控制回路,因此它需要知道是否應該考慮開啟或關閉轉向信號,而不是使用當前引腳值。
-
繼電器
+關注
關注
132文章
5333瀏覽量
148810 -
電氣系統
+關注
關注
1文章
354瀏覽量
24259 -
Arduino
+關注
關注
188文章
6468瀏覽量
186954
發布評論請先 登錄
相關推薦
評論