できること

第50回 Arduinoでパーツやセンサを使ってみよう〜フルカラーLEDテープを使ったちょっとお洒落な電子工作

※この記事は2016年10月26日に公開した記事を再編集し、2022年2月10日に再度公開しました。

1-dsc_1726

前回まではロームセンサ評価キットを使っていろいろとセンサを使う方法を学びました。今回から、またArduinoでいろいろなパーツや他のセンサも扱っていきます!

近頃、すっかり外も寒くなってきて、ハロウィーンやクリスマスといったイベントが近づいていますね。……というわけで、そんな場に欠かせないイルミネーションでの飾り付けを作ります。もちろんチカチカだけではなく、1つ1つのLEDが制御できるフルカラーLEDを使って、Arduinoならではの工夫をしてみたいと思います!

 

目次

  1. LEDテープって何?普通のLEDとの違いについて
    1. 1.1. LEDテープの種類と特徴について
  2. LEDテープの接続方法、使い方
    1. 2.1. フルカラーLEDテープの接続方法
  3. 実際に光らせてみる
  4. まとめ

 

今回の電子工作レシピ

完成までの時間目安:60分
必要なパーツ

※ロームセンサ評価キットは下記サイトから購入できます!
チップワンストップ
ザイコストア

 

1. LEDテープって何?普通のLEDとの違いについて

今回利用するのは、LEDテープというパーツを使います。LEDテープはいつも本連載で使っているLEDとはちょっと違い、LEDがいくつもテープ上に連なっているパーツになっています。通常販売されているものは長さは30cmくらいのものから5mくらいまでが一般的に発売されています。

写真1 LEDテープ本体

写真1 LEDテープ本体

1.1. LEDテープの種類と特徴について

LEDテープの種類は主に2種類あります。一つ目はLEDテープの上のLEDが全てオンオフが同期しているタイプのもの。もう一つは、LEDテープのLEDを信号に応じて1つずつ個別に制御することができる制御ICが載っているものがあります。前者はLEDの数がたくさんついているものの、基本的には通常のLED同様プラスマイナスの端子のみがあるだけです。後者のLEDテープは下記写真3のように端子がプラスマイナスの他、信号用などを含めて合計4、5端子のものが一般的です。

また、LEDテープの特徴として、写真2の黄色の点線部分の接触部分を切ることで長さを調整することができます。(それ以外の部分を切ってしまうとプラスマイナス端子などの接続ができなくなります)

 

写真2 フルカラーLEDテープの仕様

写真2 フルカラーLEDテープの仕様

 

写真3 フルカラーLEDテープの端子

写真3 フルカラーLEDテープの端子

 

LEDテープ形状の面では、LEDテープは写真1のような形状以外にもイルミネーションでよく使われるようなタイプのものなど、多くの種類が存在します。

 

写真4 イルミネーションタイプのLEDテープ

写真4 イルミネーションタイプのLEDテープ

 

今回は、ハロウィンに合わせたイルミネーションをしてみたいので、このイルミネーションタイプのLEDテープを使って取り組んでみます。

 

2. LEDテープの接続方法、使い方

フルカラーLEDテープを光らせるためには、信号を制御する必要があるのですが、その処理が手軽にできる便利なライブラリがあります。下記URLのページを開き、中段にある「Download Adafruit_NeoPixel for Arduino」 と書いてあるボタンをクリックすることでライブラリのダウンロードができます。ライブラリの追加方法については、これまで何度か出てきていますので、そちらをご覧ください。

Arduino Library Installation – adafruit
https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation

図1 Adafruitのページからライブラリをダウンロード

図1 Adafruitのページからライブラリをダウンロード

zip形式のファイルがダウンロードできたら、Arduino Createの場合はライブラリページでアップしてインストール、アプリケーションを動作させている場合は、上部メニュー「スケッチ」から入っていってライブラリを追加してください。追加が完了したらLEDテープとArduinoの接続を試みます。

 

2.1. フルカラーLEDテープの接続方法

今回利用するLEDテープは5Vで、端子が4つありました。ドキュメントを確認すると、プラスマイナス(GND)とに加えて、基板側には信号端子とGND端子がありました。LEDの入力電圧は5VなのでArduinoの5Vを使いたいところですが、LEDテープはLEDの数がとても多いため、必要とする電流も多く、Arduinoの5Vを使うとArduinoに負担がかかって壊れてしまうので、外部電源で5Vを用意してください。

図2 フルカラーLEDテープの回路図

図2 フルカラーLEDテープの回路図

 

3. 実際に光らせてみる

回路の準備ができたらプログラムを作成しましょう。基本的にはAdafruitのページにサンプルが掲載されていますので、それをベースにしています。

 

LEDテープのサンプルプログラム

Code-Example
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#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が光ると思います!

写真5 ArduinoのLEDテープを光らせる

写真5 ArduinoのLEDテープを光らせる

 

また、ちょっとプログラムを変えれば1つずつ順々にLEDを光らせることも可能です。

1つずつ光らせるプログラム

Code-Example
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#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テープ、ちょっとインタラクティブなハロウィン、クリスマス、やってみませんか?

 

アバター画像

電子工作や新しいデバイスをこよなく愛するエンジニア。日常生活のちょっとしたことを電子工作で作って試して、おもしろく過ごしたいと日々考えています。

高専ロボコン2015 出場ロボット解剖計画