工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoflake!

コンポーネントと消耗品

>
Arduino Nano R3
× 1

このプロジェクトについて

スノーフレークは、ArduinoNanoマイクロコントローラーによって個別に制御できる17の独立したセグメントにグループ化された30個のLEDで構成されています。各LEDグループをPWMで調光して、素敵なアニメーションを作成できます。

ツール

必要なのは、はんだごて、はんだ、ペンチだけです。

建設

まず、いくつかのパターンを選択します。素晴らしくシンプルなスノーフレーククリスタルを選び、ArduinoNanoがクリスタルのコアである六角形の内側に収まるサイズに印刷します。

配線としても機能する支持構造は、スズではんだ付けされた0.8mmの真ちゅう製の棒で作られています。合計2mのロッドを使用しました。なぜフリーフォームなのか?私はいつもそれを試してみたかったので、それはあなたの忍耐力とスキルのテストです。

まず、1本のロッドを曲げてコア六角形を作成し、両端をはんだ付けしました。六角形の上部にさらに6本のロッドを追加することにより、アース配線が完了します。これで、LEDのすべてのカソードリードをはんだ付けして、スノーフレークパターンを作成する必要があります。トリッキーな部分はSMDLEDを追加することでしたが、段ボールと両面テープから作成されたジグを手伝いました。

次に、コア構造の下にArduino Nanoマイクロコントローラーを追加し、マイクロコントローラーのピンをすべてのLEDアノードリードに接続する真ちゅう製のロッド配線の3層を取り付けるのに十分なスペースを残しました。これには、非常に多くの忍耐が必要でした。ワイヤ間の短絡を回避するだけでなく、電流制限抵抗を追加して見栄えを良くする必要があります。

リーフLEDは、最も近いArd​​uinoの出力ピンにそれぞれ個別に接続されています。分岐LEDは2つにグループ化され、PWMピンに接続されています。コアLEDも2つにグループ化され、残りのピンに接続されています。 Arduino NANOには18本の出力ピン(A6とA7は入力のみ)があり、タッチセンサー用に1本のピンが必要です。17本のピンしか残っていないため、2組のコアLEDを接続して4つのグループを作成します。 220Ωの抵抗を使用して、各ピンを流れる電流を約8mAに制限しています。これは、ATmega328チップとしては少し高い合計240mAを意味しますが、動作します。安全な最大値は200mAと言われています。

タッチセンサー

スノーフレークと相互作用できるようにするために、別の真ちゅう製のロッドを追加して、静電容量式タッチセンサーを作成しました。 PaulStoffregenによる素晴らしいライブラリとチュートリアルを見つけました。タッチセンサーは、arduinoflakeと対話するために使用されます-アニメーションの変更、オン/オフの切り替え、タッチしたときの輝き、名前を付けます...

最後のメモ

はんだ付けする前にすべてのダイオードを確認することを忘れないでください。壊れているか、逆極性で接続されている場合、ダイオードを交換するのはかなり困難です。

コード

もともと、ハードウェアPWMピンに接続されているブランチLEDしか暗くできないと思っていました。しかし、幸いなことに、すべてのピンをハードウェアPWMであるかのように使用できる素晴らしいソフトウェアPWMライブラリがあります。この設定により、アニメーションに無限の可能性が生まれました。最初のアニメーションのいくつかとともに、以下に添付されているコードを確認してください。

コード

  • snowflake.ino
snowflake.ino Arduino
ソースコード
 #include "SoftPWM.h" #include  byte edgeLedPins [] ={13、A4、A5、2、8、12}; byte middleLedPins [] ={10、6、3、 5、9、11}; byte innerLedPins [] ={A2、A3、A1、4、7、A1}; ADCTouchSensor touchSensor =ADCTouchSensor(A0、1); void setup(){Serial.begin(115200); SoftPWMBegin();} byteアニメーション=0; long touchAt =0; void loop(){switch(animation){case 0:_fill(100);壊す;ケース1:shinyAnimation(); // fadingAnimation();壊す;ケース2:circleAnimation();壊す;ケース3:loopAnimation();壊す;ケース4:fireworkAnimation(); fireworkAnimation(); fireworkAnimation(); fireworkAnimation(); fireworkAnimation(); fireworkAnimation();アニメーション++;壊す;ケース5:smileAnimation();壊す;デフォルト:animation =0;壊す; } int touchValue =touchSensor.read(); if(touchAt + 2000 <ミリ秒()&&touchValue> 1000){touchAt =ミリ秒(); //タッチダウン、コールドダウンタイムアウトは2秒のアニメーション++; _fill(0); }} void fireworkAnimation(){for(int i =0; i <4; i ++){SoftPWMSet(innerLedPins [i]、100); delay(100); } SoftPWMSet(innerLedPins [4]、100); for(int i =0; i <6; i ++){SoftPWMSet(middleLedPins [i]、255); } delay(50); for(int i =0; i <6; i ++){SoftPWMSet(innerLedPins [i]、0); SoftPWMSet(edgeLedPins [i]、255); } delay(50); for(int i =0; i <6; i ++){SoftPWMSet(middleLedPins [i]、0); } delay(50); _fill(0);} void smileAnimation(){SoftPWMSet(innerLedPins [1]、100); SoftPWMSet(innerLedPins [3]、100); SoftPWMSet(middleLedPins [0]、255); SoftPWMSet(middleLedPins [5]、255); SoftPWMSet(edgeLedPins [2]、255); SoftPWMSet(edgeLedPins [3]、255); delay(2000); SoftPWMSet(innerLedPins [1]、0); SoftPWMSet(innerLedPins [3]、0); delay(100); SoftPWMSet(innerLedPins [1]、100); SoftPWMSet(innerLedPins [3]、100); delay(100); SoftPWMSet(innerLedPins [1]、0); SoftPWMSet(innerLedPins [3]、0); delay(100);} byte circleState [] ={100、55、10}; byte circleStateAnimation [] ={1、1、1}; void circleAnimation(){for(int i =0; i <3; i ++) {if(circleState [i]> =100){circleStateAnimation [i] =-1; //薄暗い} else if(circleState [i] <=10){circleStateAnimation [i] =1; //明るい} circleState [i] + =circleStateAnimation [i]; } for(int i =0; i <6; i ++){SoftPWMSet(innerLedPins [i]、circleState [0]); SoftPWMSet(middleLedPins [i]、circleState [1]); SoftPWMSet(edgeLedPins [i]、circleState [2]); } delay(5);} byte waveState [] ={100、55、10、10、55、100}; byte waveStateAnimation [] ={1、1、1、-1、-1、-1}; void waveAnimation (){for(int i =0; i <6; i ++){if(waveState [i]> =100){waveStateAnimation [i] =-1; //薄暗い} else if(waveState [i] <=10){waveStateAnimation [i] =1; //明るい} waveState [i] + =waveStateAnimation [i]; } for(int i =0; i <6; i + =2){SoftPWMSet(innerLedPins [i]、waveState [0]); SoftPWMSet(middleLedPins [i]、waveState [1]); SoftPWMSet(edgeLedPins [i]、waveState [2]); SoftPWMSet(innerLedPins [i + 1]、waveState [3]); SoftPWMSet(middleLedPins [i + 1]、waveState [4]); SoftPWMSet(edgeLedPins [i + 1]、waveState [5]); } delay(10);} byte loopCounter =0; byte loopState =150; void loopAnimation(){SoftPWMSet(innerLedPins [loopCounter]、loopState); SoftPWMSet(middleLedPins [loopCounter]、loopState); SoftPWMSet(edgeLedPins [loopCounter]、loopState); loopCounter =_nextIndex(loopCounter、1); if(loopCounter ==0){loopState =(loopState ==150?0:150); } delay(100);} byte slowOnCounter =0; byte slowOnState =150; void slowOnAnimation(){byte randomLed =random(0、18); if(randomLed <6){SoftPWMSet(innerLedPins [randomLed]、slowOnState); } else if(randomLed <12){SoftPWMSet(middleLedPins [randomLed-6]、slowOnState); } else {SoftPWMSet(edgeLedPins [randomLed-12]、slowOnState); } slowOnCounter ++; if(slowOnCounter> =50){slowOnCounter =0; slowOnState =(slowOnState ==150?0:150); } delay(50);} byte shinyState [] ={0、100、0、100、0、100}; byte shinyStateAnimation [] ={1、1、1、1、1、1}; byte shinyCounter =0; void shinyAnimation(){for(int i =0; i <6; i ++){if(shinyState [i]> =100){shinyStateAnimation [i] =-1; //薄暗い} else if(shinyState [i] <=0){shinyStateAnimation [i] =1; //明るい} shinyState [i] + =shinyStateAnimation [i]; SoftPWMSet(edgeLedPins [i]、shinyState [i]); } shinyCounter ++; if(shinyCounter> 10){shinyCounter =0; for(byte r =random(1、3); r> 0; r-){byte randomLed =random(0、12); if(randomLed <6){SoftPWMSet(innerLedPins [random(0、6)]、255); } else {SoftPWMSet(middleLedPins [random(0、6)]、255); }}} else {for(int i =0; i <6; i ++){SoftPWMSet(innerLedPins [i]、20); SoftPWMSet(middleLedPins [i]、20); }} delay(30);} byte fadingState [] ={0、100、0、100、0、100}; byte fadingStateAnimation [] ={1、1、1、1、1、1}; void fadingAnimation() {for(int i =0; i <6; i ++){if(fadingState [i]> =100){fadingStateAnimation [i] =-1; //薄暗い} else if(fadingState [i] <=0){fadingStateAnimation [i] =1; //明るい} fadingState [i] + =fadingStateAnimation [i]; SoftPWMSet(edgeLedPins [i]、fadingState [i]); SoftPWMSet(middleLedPins [_nextIndex(i、1)]、fadingState [i]); SoftPWMSet(innerLedPins [i]、50); } delay(20);} void _fill(byte value){for(int i =0; i <6; i ++){SoftPWMSet(edgeLedPins [i]、value); SoftPWMSet(middleLedPins [i]、value); SoftPWMSet(innerLedPins [i]、value); }} byte _prevIndex(short index、byte step){index- =step; while(index <0){index + =6; } return index;} byte _nextIndex(short index、byte step){index + =step; while(index> 5){index- =6; } return index;} 

回路図


製造プロセス

  1. ノックピンは何に使用されますか?
  2. ノックピンは何でできていますか?
  3. ノックピンを選択する際に考慮すべき5つのこと
  4. 麺棒
  5. ボウリングピン
  6. 安全ピン
  7. 超低電力システムがAIの期待をTinyMLに固定
  8. Raspberry PI I / Oブレイクアウトケーブルとプラグボードアダプター
  9. ダイナミックトライアングルアート
  10. LEDとピエゾスピーカーを備えたDHT11センサー
  11. BGA – BGA とは?