NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

クリスマスツリー・イルミネーション!その9(5V,20A電源!)

イメージ 1
 注文してから21日・・・待ちかねた5V,20A電源がついに香港から届きました!
モデル番号:SF-100A
入力:入力;110V/220V:110V/220V
出力:DC 5V定電圧、20A
サイズ・重量:20×9.8 X4.3cm(L* W* H)・516g
ケースの材質・色:金属・シルバートーン

1. 入力電圧の切り替え

 この電源は110or220VACの入力電圧に対応しており、それを切り替えるスイッチを探した所、パンチングメタルの奥に有りました。
 図1の通り細いマイナスドライバーを隙間から入れてスライドスイッチを110VACに切り替えました・・・合理的ですね~
イメージ 3
図1:110VAC(交流100V)に切り替え 

2. 電源ボックスへ取り付け

 図2の様に、購入した電源の入力端子に100VAC(白)の配線と、電源ボックスに穴をあけ、5VDC出力端子に赤(+)黒(-)の電線を配線しました。
イメージ 2
図2:電源へ配線

3. 出力電圧の調整

 電源の端子右側に「+V AD J」と書かれた出力電圧の調整つまみがありますので、これを使います
 電源に100VACを入力した状態で、5VDC出力端子の電圧をテスターで確認しました。
 マイナスドライバーで調整つまみを左回り一杯から右周り一杯に回すと5.101V~7.21Vとそもそも5V後の調整が出来ません!
 5Vピッタリに調整したかったのですが、諦めて5.101V良しとします
イメージ 4
図3:出力調整

4. 電源のリップル

 参考に電源のリップルオシロスコープ測定した結果、Vp-pは0.00V?でした。
負荷はつなげておりません
イメージ 5
図4:リップル確認

5. プログラム

 最終的にArduinoに書き込んだプログラムはこんな感じです。
 LED自体がかなり明るいので最大輝度を85/256(33%)位に落としてます。
 またLEDの数は237個使ったので「Adafruit_NeoPixel()」の中を237にしました。 
/*
   クリスマスツリー・イルミネーション!制御プログラム
   部品:フルカラーシリアルLEDテープ、人感センサー、CDS
   2016年12月18日作成
   NOBのArduino日記!
*/
#include <Adafruit_NeoPixel.h> //ライブラリの読み込み
#define MAX_VAL 85  // 最大輝度の設定をする(暗い←0 ~ 255→明い)
#define DELAY_TIME 30 //待ち時間1の設定
#define DELAY_TIME2 20 //待ち時間2の設定
#define DELAY_TIME3 50 //待ち時間3の設定

//インスタンスの設定(実際の使用環境の設定の事)
//   NEO_RGB     Pixels are wired for RGB bitstream
//   NEO_GRB     Pixels are wired for GRB bitstream
//   LEDテープの制御ICがWS2812ならNEO_KHZ800 / WS2811ならNEO_KHZ400
//   NEO_KHZ400  400 KHz bitstream (e.g. FLORA pixels)
//   NEO_KHZ800  800 KHz bitstream (e.g. High Density LED strip)
//Adafruit_NeoPixel(LEDの使用個数、Arduinoのピン番号、色の並び+データの転送速度)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(237, 3, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin(); //インスタンスの使用を開始、この時全てのLEDの状態を「0」とする。
  strip.show(); //Arduinoから全てのLEDへオフ信号「0」を転送し初期化する。
}

void loop() {
  //暗くてかつ近くに人の動きが有る時にLEDを点灯する!
  if (digitalRead(A3) == LOW || analogRead(2) > 500) {
    colorWipe(strip.Color(0, 0, 0), DELAY_TIME); // Black
  } else {
    //LEDへ出力する各色の設定例
    colorWipe(strip.Color(MAX_VAL, 0, 0), DELAY_TIME); // Red
    colorWipe(strip.Color(0, MAX_VAL, 0), DELAY_TIME); // Green
    colorWipe(strip.Color(MAX_VAL, MAX_VAL, 0), DELAY_TIME); // Yellow
    colorWipe(strip.Color(0, 0, MAX_VAL), DELAY_TIME); // Blue
    colorWipe(strip.Color(MAX_VAL, 0, MAX_VAL), DELAY_TIME); // Purple
    colorWipe(strip.Color(0, MAX_VAL, MAX_VAL), DELAY_TIME); // Cyan
    colorWipe(strip.Color(MAX_VAL, MAX_VAL, MAX_VAL), DELAY_TIME); // White

    //LEDを虹色に変化させる
    rainbow(DELAY_TIME2);
    rainbowCycle(DELAY_TIME2);

    // 劇場風の照明
    theaterChase(strip.Color(MAX_VAL, MAX_VAL, MAX_VAL), DELAY_TIME3); //White
    theaterChase(strip.Color(MAX_VAL, 0, 0), DELAY_TIME3); // Red
    theaterChase(strip.Color(0, 0, MAX_VAL), DELAY_TIME3); // Blue
    theaterChaseRainbow(DELAY_TIME3);
  }
}

// ①全てのLEDを指定色で点灯させる関数
void colorWipe(uint32_t c, uint8_t wait) {
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

// ②LEDを連続的に虹色に変化させる関数
void rainbow(uint8_t wait) {
  uint16_t i, j;
  for (j = 0; j < 256; j++) {
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// ③虹色を均等に分布させる関数
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// ④劇場風のクロールライトにする関数
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j = 0; j < 10; j++) { //do 10 cycles of chasing
    for (int q = 0; q < 3; q++) {
      for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, c);  //turn every third pixel on
      }
      strip.show();
      delay(wait);
      for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, 0);      //turn every third pixel off
      }
    }
  }
}

// ⑤虹の様な劇場風クロールライトにする関数
void theaterChaseRainbow(uint8_t wait) {
  for (int j = 0; j < 256; j++) {   // cycle all 256 colors in the wheel
    for (int q = 0; q < 3; q++) {
      for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, Wheel( (i + j) % 255)); //turn every third pixel on
      }
      strip.show();
      delay(wait);
      for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, 0);      //turn every third pixel off
      }
    }
  }
}

// 色の値を取得するには、0〜255の値を入力します。
// 色の移り変わりはR(赤)→G(緑)→B(青)からR(赤)に戻ります。
uint32_t Wheel(byte WheelPos) {
  if (WheelPos < 85) {
    return strip.Color((WheelPos * 3) * MAX_VAL / 255, (255 - WheelPos * 3) * MAX_VAL / 255, 0);
  } else if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color((255 - WheelPos * 3) * MAX_VAL / 255, 0, (WheelPos * 3) * MAX_VAL / 255);
  } else {
    WheelPos -= 170;
    return strip.Color(0, (WheelPos * 3) * MAX_VAL / 255, (255 - WheelPos * 3) * MAX_VAL / 255);
  }
}
イメージ 1
図1:プログラム例
 

6. 仕上げ!

 これで全ての準備は整いましたので図5の通り全部つなげます!
イメージ 6
図5:仕上げ 

7. 確認!

 正常に動作するか確認の為スイッチオン
イルミネーション点灯しました

8. まとめ

 クリスマスを3日過ぎてしました
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【クリスマスツリー・イルミネーション!】目次に戻る