Arduino Pro Mini甚のLED点滅ストップラむト

Arduino Miniのストップラむト甚の点滅LEDストリング 車のリアりィンドりにステッカヌを貌りたくなかっただけです。倜間に誰が車を通り過ぎるのか、碑文に察する反応はどうなるのかはわかりたせん。 リアりィンドりの䞋にLEDの碑文を䜜成するこずにしたした。 非アクティブ時には、たったく衚瀺されたせん背面の色付きガラス。たた、必芁に応じおオン/オフを切り替えるこずができたす。 たあ、少し埌で、ブレヌキラむトが点灯し、赀いLEDで碑文を䜜成するずきにのみ碑文をオンにするずいうアむデアが浮䞊したした-停止信号の単玔な耇補が埗られたすが、远加情報がありたす。 䜜業はすべお午埌3時でした。

もちろん、ランニングラむンたたはラむトボヌドを賌入しおリアりィンドりの䞋に眮くだけです...しかし、これらのデバむスの䟡栌を超えおすぐに、それはすぐにお金に残念になり、自分でやるこずに決めたした。

たず、ハヌドりェアを決定したした-これはArduino Pro Miniで、eBayで4ドルかかりたす。 なぜ圌女なのか 豊富でさえ、それで十分だからです。 LEDの茝床を制埡できるように、LEDをPWMチャネルに接続するこずが蚈画されおいたした。 Arduino Miniにはこれらの出力が6぀しかありたせん-これで十分です。 実際、Arduinaは私たちの仕事に絶察に適しおいたす。

Arduino Pro Mini 次に、碑文を決定し、6぀の独立したセクションに分割したした。 これは非垞に倚くのこずが刀明したため、5぀のアクティブなものだけを残し、Prozapas甚に1぀のチャネルを蚈画したした。 各セクションでは、2〜4文字になっおおり、各文字には玄10〜20個のLEDが必芁です。

ご存じのずおり、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に接続するための抵抗を蚈算するこずで回避できたす。

DIY LEDパネヌル

たた、LEDの脚をそのたたにしおおくこずも非垞に重芁だったので、他のデザむンで䜿甚できるようになりたした。 したがっお、脚を接続するには、わずかに折り返しお互いにはんだ付けしたす。 芁するに、構造は玄3時間で組み立おられ、はんだ付けされたした。

DIY LEDパネヌル

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

画像

コントロヌラボヌドを挿入するためのコネクタもブレッドボヌドにはんだ付けされおいたす。 次に、MOSFETをはんだ付けしお、1぀のヒヌトシンクをネゞ止めしたすただし、電流は非垞に小さいため、ここではヒヌトシンクは䞍芁です。 Arduino MiniのPWMピン3、5、6、9、10、および11は、察応するMOSFETの察応する入力にはんだ付けされおいたす。

画像

DC DCコンバヌタヌ 次に、タスクはArduino Miniに安定した電力を䟛絊するこずでした。 ご存知のように、車のシガヌラむタヌからは12Vが埗られたすが、この電圧は車を䜿甚しおいる特定の時間で13ボルトず14ボルトになる可胜性がありたす。 Arduino Miniのドキュメントには、最倧䟛絊電圧は12Vを超えないこずが蚘茉されおおり、わずかな過剰でもボヌドが無効になる可胜性があるこずがフォヌラムで読たれたした。 そのため、Arduinoに電力を䟛絊するために、個別の調敎可胜なDC-DCレギュレヌタヌを䜿甚するこずが決定されたした。 EBayで泚文するこずもできたす1ドルの費甚がかかりたすが、自分で組み立おるこずができたす。 私はそのようなブロックを持っおいるので、私は既補のものを䜿甚したした。 したがっお、12Vは個別のスタビラむザヌたたは最倧30Vたでに䟛絊され、出力は、たずえば6Vに蚭定され、Arduino MiniのRAW出力に䟛絊されたす。 LEDはMOSFETを介しお12Vから盎接絊電されたす。


プリント回路基板の蚭蚈を思い぀いた結果、次の芁玠の配眮を埗たした。

画像

これで、すべおの信号がオンになる信号によっお決定する時が来たした。 最初は、デバむス党䜓を車のブレヌキラむトに盎接平行に接続するこずが蚈画されおいたした。 しかし、残念なこずに、電圧がArduinoに印加されるず、コントロヌラヌが初期化され、1秒よりかなり長く続きたす。 さらに、スむッチをオンにした盎埌、Arduino出力はZ状態にあり、MOSFETは非垞にランダムな方法でこれに反応したす。 その結果、スむッチをオンにした埌、コントロヌラヌの初期化期間党䜓で任意の指瀺が発生したす。 もちろん、远加のボディキットの助けを借りお、キヌの初期状態を蚭定できたすが、これにはより倚くの詳现ず時間が必芁です...

2番目のオプションは、車のブレヌキラむトからの信号をArduinoデゞタル入力に接続するこずでした。 これを行うには、ブレヌキランプの電圧を5Vに䞋げる必芁がありたしたが、これは原則ずしお難しくありたせん。 しかし、このオプションは、リアパネルを巻き戻しお䜕らかの圢でブレヌキラむトに接続する必芁があるずいう事実のために非実甚的であるこずが刀明したした...

フォトレゞタ 完党にシンプルな゜リュヌションが必芁でしたが、芋぀かりたした Arduinoアナログ入力に接続された簡単なフォトレゞスタヌを䜿甚するこずが決定されたした。 フォトレゞスタ自䜓は、停止信号のあるボックスに単玔に配眮されたす。 そのような皮類のオプトペアが刀明したす:)この゜リュヌションにより、車の電気系統にたったく適合しなくなりたす。 確かに、これは、ブレヌキラむトがキャビンのガラスの䞋にあり、フォトレゞスタヌを挿入できる堎合にのみ可胜です。 芁するに、私はそのようなアクセス暩を持っおいるので、たさにそれをしたした。

さらに、フォトレゞスタのオプションにより、呚囲の光に䟝存するグロヌの茝床ずいう別の問題を解決するこずができたした。 フォトレゞスタを䜿甚するず、路䞊での照明をほが評䟡し、日䞭はバックラむトをより明るく、倜は暗くするこずができたす。 私はプログラムでこれを考慮したしたが、実際には倜間はLEDがラむダヌの埌ろで盲目にならないこずが刀明したした。

フォトレゞスタは、端子A0ず+ 5Vに接続されおいたす。 端子A0からグランドぞの10kΩ抵抗も必芁です。 フォトレゞスタのタむプず分呚噚の抵抗の倀は、プログラムで蚭定される定数に圱響したす実隓的に遞択できたす。

結果はそのようなボヌドです

画像

FTDIベヌシック それでは、私たちのお気に入りの嚯楜であるプログラミングに取り掛かりたしょう。 Arduino Pro Miniにプログラムをアップロヌドするには、USBシリアルコンバヌタヌが必芁です。 私はこの目的のためにFTDI Basicを䜿甚しおいたすが、これはeBayでも賌入できたす。

これは、ファヌムりェアを起動する前のArduino Pro Miniの倖芳です。

Arduino Pro Miniファヌムりェア

これを行うには、Arduino開発環境をロヌドしたす。 すべおが正しくむンストヌルされおいれば、COMポヌトがサヌビス/シリアルポヌトメニュヌに衚瀺されるはずです。 存圚しない堎合は、プラットフォヌム自䜓の「drivers」フォルダヌから適切なドラむバヌをむンストヌルする必芁がありたす。

ポヌトを遞択したら、間違いなくService / Board / Arduino Miniを遞択する必芁がありたす。 残念ながら、ここではすべおがそれほど単玔ではありたせん。 ブヌトロヌダヌのバヌゞョンによっおは、コントロヌラヌにプログラムを曞き蟌むこずができない堎合がありたす。 コンパむル埌に次のような゚ラヌが発生した堎合

stk500_getsync(): not in sync: resp=0x00

、開発環境のCOMポヌト速床がブヌトロヌダヌで指定された同じパラメヌタヌず䞀臎しない可胜性がありたす。 これを修正するには、次のこずをお勧めしたす。

  1. サヌビス/ボヌド/ Arduino Nanoを遞択したす。 これは通垞は圹立ちたすが、うたくいかない堎合は、次の段萜をご芧ください。
  2. 開発環境フォルダヌに、ファむル「\ 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で賌入したした。

合蚈403ルヌブル。

結論


Arduinoの開発における幞運ず成功。 たあ、もちろん、嘘を぀かないでください:)

Source: https://habr.com/ru/post/J189146/


All Articles