
もちろん、ランニングラインまたはライトボードを購入してリアウィンドウの下に置くだけです...しかし、これらのデバイスの価格を超えてすぐに、それはすぐにお金に残念になり、自分でやることに決めました。
まず、ハードウェアを決定しました-これはArduino Pro Miniで、eBayで4ドルかかります。 なぜ彼女なのか? 豊富でさえ、それで十分だからです。 LEDの輝度を制御できるように、LEDをPWMチャネルに接続することが計画されていました。 Arduino Miniにはこれらの出力が6つしかありません-これで十分です。 実際、Arduinaは私たちの仕事に絶対に適しています。

ご存じのとおり、Arduinoの出力は40mAしか消費しません。このため、このような大規模なLEDをArduinoの出力に直接接続しても機能しません。 この問題を解決するために、P16NF06 MOSFETが使用されました。これは、ザシャシニクに20人いる強力なフィールドワーカーです。 最大1アンペアまで電流を切り替えることができます(たとえば、長さの短いLEDストリップを静かに引っ張ります)。 代わりに、より安価な単純なバイポーラトランジスタを使用できます。 ただし、MOSFETはArduinoピンに直接接続できます。 入力インピーダンスが高く、同じ理由で、抵抗器の形のボディキットは必要ありません。
次に、在庫から約130個の赤色5mm LEDを割り当てなければなりませんでした。 残念ながら、私は手にそれほど多くの赤いLEDを持っていなかったので、私はいくつかの文字を緑にする必要がありました。 ご存じのように、LEDは抵抗を介して接続し、電流を制限する必要があります。 6個を直列に接続し、抵抗を介してこのLEDブロックを+ 12Vに接続することが決定されました。 6個のLEDと12Vの供給電圧の場合、約50オームの抵抗が必要であることが経験的に計算され選択されました。
将来のデバイスの主なポイントが示されているので、ビジネスに取りかかりましょう。
パネルの基礎として、古い箱から普通の段ボールが取り出されました。 80x15 cmの2つのストリップを切り取りましたが、このサイズは車のリアウィンドウの下に配置するのに最適でした。 次に、テキスト行がプリンターで印刷され、文字のフォントが選択されました-サイズがCalibri 300で、段ボールに貼り付けることで、碑文がストリップに転写されました。 ピンセットを使用して、LEDに穴を開けました。 ここでは、LEDが6個のブロックで接続されていることを考慮する必要があるため、6の倍数のLEDの数を各チャネルに接続する必要があります。 原則として、これは他の数量から一連のLEDを作成し、それらを12Vに接続するための抵抗を計算することで回避できます。

また、LEDの脚をそのままにしておくことも非常に重要だったので、他のデザインで使用できるようになりました。 したがって、脚を接続するには、わずかに折り返して互いにはんだ付けします。 要するに、構造は約3時間で組み立てられ、はんだ付けされました。

Arduino Miniは通常、脚なしで販売されているため、最初に行うことは脚をはんだ付けすることです。 それはほとんどArduino Nanoであることが判明しましたが、3.3Vなしでのみ:)

コントローラボードを挿入するためのコネクタもブレッドボードにはんだ付けされています。 次に、MOSFETをはんだ付けして、1つのヒートシンクをネジ止めします(ただし、電流は非常に小さいため、ここではヒートシンクは不要です)。 Arduino MiniのPWMピン3、5、6、9、10、および11は、対応するMOSFETの対応する入力にはんだ付けされています。


プリント回路基板の設計を思いついた結果、次の要素の配置を得ました。

これで、すべての信号がオンになる信号によって決定する時が来ました。 最初は、デバイス全体を車のブレーキライトに直接平行に接続することが計画されていました。 しかし、残念なことに、電圧がArduinoに印加されると、コントローラーが初期化され、1秒よりかなり長く続きます。 さらに、スイッチをオンにした直後、Arduino出力はZ状態にあり、MOSFETは非常にランダムな方法でこれに反応します。 その結果、スイッチをオンにした後、コントローラーの初期化期間全体で任意の指示が発生します。 もちろん、追加のボディキットの助けを借りて、キーの初期状態を設定できますが、これにはより多くの詳細と時間が必要です...
2番目のオプションは、車のブレーキライトからの信号をArduinoデジタル入力に接続することでした。 これを行うには、ブレーキランプの電圧を5Vに下げる必要がありましたが、これは原則として難しくありません。 しかし、このオプションは、リアパネルを巻き戻して何らかの形でブレーキライトに接続する必要があるという事実のために非実用的であることが判明しました...

さらに、フォトレジスタのオプションにより、周囲の光に依存するグローの輝度という別の問題を解決することができました。 フォトレジスタを使用すると、路上での照明をほぼ評価し、日中はバックライトをより明るく、夜は暗くすることができます。 私はプログラムでこれを考慮しましたが、実際には夜間はLEDがライダーの後ろで盲目にならないことが判明しました。
フォトレジスタは、端子A0と+ 5Vに接続されています。 端子A0からグランドへの10kΩ抵抗も必要です。 フォトレジスタのタイプと分周器の抵抗の値は、プログラムで設定される定数に影響します(実験的に選択できます)。
結果はそのようなボードです:


これは、ファームウェアを起動する前のArduino Pro Miniの外観です。

これを行うには、Arduino開発環境をロードします。 すべてが正しくインストールされていれば、COMポートがサービス/シリアルポートメニューに表示されるはずです。 存在しない場合は、プラットフォーム自体の「drivers」フォルダーから適切なドライバーをインストールする必要があります。
ポートを選択したら、間違いなくService / Board / Arduino Miniを選択する必要があります。 残念ながら、ここではすべてがそれほど単純ではありません。 ブートローダーのバージョンによっては、コントローラーにプログラムを書き込むことができない場合があります。 コンパイル後に次のようなエラーが発生した場合
stk500_getsync(): not in sync: resp=0x00
、開発環境のCOMポート速度がブートローダーで指定された同じパラメーターと一致しない可能性があります。 これを修正するには、次のことをお勧めします。
- サービス/ボード/ Arduino Nanoを選択します。 これは通常は役立ちますが、うまくいかない場合は、次の段落をご覧ください。
- 開発環境フォルダーに、ファイル「\ hardware \ arduino \ avr \ boards.txt」があります。 このファイルには、セクション「mini.name = Arduino Mini」、パラメーター「menu.cpu.mini.atmega328.upload.speed = 57600」があります。 ここでは、57600の値(何か他のものがあるかもしれません)を他の値に変更しようとしています。 可能なすべての速度値は、モニターで見つけることができます。サービス/ポートモニターメニューで、選択は右下隅にあります。 チェックする前に、開発環境をオーバーロードする必要があります。
プログラム自体はここに隠されています
#define pinZA 3 #define pinNA 5 #define pinVAL 6 #define pinNO 9 #define pinGO 10 #define pinEMPTY 11 #define pinSTOPSIGNAL 0 #define sensValue 900 // . 0-1024 #define sensNight 200 // , . 0-1024 #define lightDay 255 // . 0-255 #define lightNight 150 // . 0-255 int currentMaxValueLight = 255; void setup() { Serial.begin(9600); pinMode(pinZA, OUTPUT); pinMode(pinNA, OUTPUT); pinMode(pinVAL, OUTPUT); pinMode(pinNO, OUTPUT); pinMode(pinGO, OUTPUT); setAll(0); } int currentEffect = 1; int maxEffects = 2; // void loop() { if(checkState()){ switch(currentEffect){ case 1: // 1 effect_1(); delayWithStateCheck(2000); effect_off(); break; case 2: // 2 effect_2(); delayWithStateCheck(2000); effect_off(); break; case 3: // 3... . // ................... break; } currentEffect++; if(currentEffect > maxEffects){ // , currentEffect = 1; } } } void effect_2(){ for(int i=0; i <= 1; i++){ fade(pinZA, 3, true); fade(pinNA, 3, true); fade(pinVAL, 3, true); fade(pinNO, 3, true); fade(pinGO, 3, true); fade(pinZA, 3, false); fade(pinNA, 3, false); fade(pinVAL, 3, false); fade(pinNO, 3, false); fade(pinGO, 3, false); fade(pinGO, 3, true); fade(pinNO, 3, true); fade(pinVAL, 3, true); fade(pinNA, 3, true); fade(pinZA, 3, true); fade(pinGO, 3, false); fade(pinNO, 3, false); fade(pinVAL, 3, false); fade(pinNA, 3, false); fade(pinZA, 3, false); } setAll(currentMaxValueLight); delayWithStateCheck(200); setAll(0); delayWithStateCheck(100); setAll(currentMaxValueLight); delayWithStateCheck(200); } void effect_1(){ fade(pinZA, 10, true); fade(pinNA, 10, true); fade(pinVAL, 10, true); fade(pinNO, 10, true); fade(pinGO, 10, true); fade(pinGO, 3, false); fade(pinGO, 3, true); fade(pinGO, 3, false); fade(pinGO, 3, true); } void effect_off(){ fade(pinGO, 3, false); fade(pinNO, 3, false); fade(pinVAL, 3, false); fade(pinNA, 3, false); fade(pinZA, 3, false); } void fade(int pin, int d, boolean side){ // / fade if(side){ for(int value = 0 ; value <= currentMaxValueLight; value+=5){ if(!checkState()) break; analogWrite(pin, value); delay(d); } }else{ for(int value = currentMaxValueLight; value >=0; value-=5){ if(!checkState()) break; analogWrite(pin, value); delay(d); } } } void delayWithStateCheck(int d){ // for(int value = 0 ; value <= d; value++){ if(!checkState()) break; delay(1); } } boolean checkState(){ // - int val = analogRead(pinSTOPSIGNAL); boolean state = val > sensValue; if(!state){ // - setAll(0); if(val < sensNight){ // currentMaxValueLight = lightNight; // }else{ currentMaxValueLight = lightDay; // } } return state; } void setAll(int val){ // analogWrite(pinZA, val); analogWrite(pinNA, val); analogWrite(pinVAL, val); analogWrite(pinNO, val); analogWrite(pinGO, val); }
プログラムの主な「複雑さ」は、標準遅延機能をバイパスすることです。 実際には、ブレーキライトが消えた直後にすべてをオフにする必要があります。 これを行うには、割り込みを使用するか、フォトレジスターの照明を常に調べる必要があります。 なぜなら 人類はまだアナログ入力割り込みを発生させていません(キットを作成して回路にしきい値を縫う必要があります)。そして、停止信号が出たときに「クラッシュ」する自家製のdelayWithStateCheck関数を使用します。
結果は次のとおりです。
デバイスのインストール準備完了:

内蔵フォトレジスターによる停止信号:

夜景:

費用
すべてのコンポーネントは、事前に中国または香港のeBayで購入しました。
- Arduino Pro Mini-150ルーブル
- 6個P16NF06-120ルーブル
- 130個のLED-90ルーブル
- フォトレジスター-3ルーブル
- DCDCコンバーター-30ルーブル
- 抵抗器20個-10ルーブル
- 古いイーサネットケーブルのペアからのワイヤ-0ルーブル
合計:403ルーブル。
結論
Arduinoの開発における幸運と成功。 まあ、もちろん、嘘をつかないでください:)