※この記事は2016年10月26日に公開した記事を再編集し、2022年2月10日に再度公開しました。
前回まではロームセンサ評価キットを使っていろいろとセンサを使う方法を学びました。今回から、またArduinoでいろいろなパーツや他のセンサも扱っていきます!
近頃、すっかり外も寒くなってきて、ハロウィーンやクリスマスといったイベントが近づいていますね。……というわけで、そんな場に欠かせないイルミネーションでの飾り付けを作ります。もちろんチカチカだけではなく、1つ1つのLEDが制御できるフルカラーLEDを使って、Arduinoならではの工夫をしてみたいと思います!
目次
今回の電子工作レシピ
完成までの時間目安:60分
必要なパーツ
1. LEDテープって何?普通のLEDとの違いについて
今回利用するのは、LEDテープというパーツを使います。LEDテープはいつも本連載で使っているLEDとはちょっと違い、LEDがいくつもテープ上に連なっているパーツになっています。通常販売されているものは長さは30cmくらいのものから5mくらいまでが一般的に発売されています。
1.1. LEDテープの種類と特徴について
LEDテープの種類は主に2種類あります。一つ目はLEDテープの上のLEDが全てオンオフが同期しているタイプのもの。もう一つは、LEDテープのLEDを信号に応じて1つずつ個別に制御することができる制御ICが載っているものがあります。前者はLEDの数がたくさんついているものの、基本的には通常のLED同様プラスマイナスの端子のみがあるだけです。後者のLEDテープは下記写真3のように端子がプラスマイナスの他、信号用などを含めて合計4、5端子のものが一般的です。
また、LEDテープの特徴として、写真2の黄色の点線部分の接触部分を切ることで長さを調整することができます。(それ以外の部分を切ってしまうとプラスマイナス端子などの接続ができなくなります)
LEDテープ形状の面では、LEDテープは写真1のような形状以外にもイルミネーションでよく使われるようなタイプのものなど、多くの種類が存在します。
今回は、ハロウィンに合わせたイルミネーションをしてみたいので、このイルミネーションタイプのLEDテープを使って取り組んでみます。
2. LEDテープの接続方法、使い方
フルカラーLEDテープを光らせるためには、信号を制御する必要があるのですが、その処理が手軽にできる便利なライブラリがあります。下記URLのページを開き、中段にある「Download Adafruit_NeoPixel for Arduino」 と書いてあるボタンをクリックすることでライブラリのダウンロードができます。ライブラリの追加方法については、これまで何度か出てきていますので、そちらをご覧ください。
Arduino Library Installation – adafruit
https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation
zip形式のファイルがダウンロードできたら、Arduino Createの場合はライブラリページでアップしてインストール、アプリケーションを動作させている場合は、上部メニュー「スケッチ」から入っていってライブラリを追加してください。追加が完了したらLEDテープとArduinoの接続を試みます。
2.1. フルカラーLEDテープの接続方法
今回利用するLEDテープは5Vで、端子が4つありました。ドキュメントを確認すると、プラスマイナス(GND)とに加えて、基板側には信号端子とGND端子がありました。LEDの入力電圧は5VなのでArduinoの5Vを使いたいところですが、LEDテープはLEDの数がとても多いため、必要とする電流も多く、Arduinoの5Vを使うとArduinoに負担がかかって壊れてしまうので、外部電源で5Vを用意してください。
3. 実際に光らせてみる
回路の準備ができたらプログラムを作成しましょう。基本的にはAdafruitのページにサンプルが掲載されていますので、それをベースにしています。
LEDテープのサンプルプログラム
#include <Adafruit_NeoPixel.h> #define PIN 6 //信号端子のピン番号 #define LED_NUM 50 //LEDの数 Adafruit_NeoPixel ledtape = Adafruit_NeoPixel(LED_NUM, PIN, NEO_GRB + NEO_KHZ800); //3つめのパラメータは使うLEDテープの制御ICがWS2812ならNEO_KHZ800 / WS2811ならNEO_KHZ400 void setup() { ledtape.begin(); ledtape.show(); //一旦全てOFFの状態で反映 } void loop() { uint16_t i, j; for(j=0; j <256; j++) { for(i=0; i < ledtape.numPixels(); i++) { ledtape.setPixelColor(i, rotateColor((((i) * 256 / ledtape.numPixels()) + j) & 255)); } ledtape.show(); delay(20); } } //RGBの色の移り変わり関数 uint32_t rotateColor(byte WheelPos) { if(WheelPos < 85) { return ledtape.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } else if(WheelPos < 170) { WheelPos -= 85; return ledtape.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else { WheelPos -= 170; return ledtape.Color(0, WheelPos * 3, 255 - WheelPos * 3); } }
きちんとつながってプログラムが正常だと色鮮やかな表現でLEDが光ると思います!
また、ちょっとプログラムを変えれば1つずつ順々にLEDを光らせることも可能です。
1つずつ光らせるプログラム
#include <Adafruit_NeoPixel.h> #define PIN 6 //信号端子のピン番号 #define LED_NUM 50 //LEDの数 Adafruit_NeoPixel ledtape = Adafruit_NeoPixel(LED_NUM, PIN, NEO_GRB + NEO_KHZ800); //3つめのパラメータは使うLEDテープの制御ICがWS2812ならNEO_KHZ800 / WS2811ならNEO_KHZ400 void setup() { ledtape.begin(); ledtape.show(); //一旦全てOFFの状態で反映 } void loop() { uint16_t i, j; //for分でLED全ての色の状態をセットして、showで光らせる for(i=0; i < ledtape.numPixels(); i++) { ledtape.setPixelColor(i, Wheel((((i) * 256 / ledtape.numPixels()) + j) & 255)); ledtape.show(); ledtape.setPixelColor(i, ledtape.Color(0,0,0)); delay(20); ledtape.show(); } } //RGBの色の移り変わり関数 uint32_t rotateColor(byte WheelPos) { if(WheelPos < 85) { return ledtape.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } else if(WheelPos < 170) { WheelPos -= 85; return ledtape.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else { WheelPos -= 170; return ledtape.Color(0, WheelPos * 3, 255 - WheelPos * 3); } }
ハロウィンかぼちゃと一緒に組み合わせると、一気に雰囲気がでますね。
まとめ
今回はLEDテープの使い方の基本を学びました。次回はこれまで利用してきたロームセンサ評価キットのセンサや他のセンサを利用して、センサから入力した値をもとにLEDテープを操作するデバイスを作ってみたいと思います。
手軽に操作できてかっこいいLEDテープ、ちょっとインタラクティブなハロウィン、クリスマス、やってみませんか?