2016年07月02日

フルカラーLED -第3回:カラーLEDの制御

はじめに

前回はカラーLED PL9823を動かすための回路を調べました。今回はPL9823を動かして見ます。
 

目次

 

1. 回路

図1がPL9823の基本的な回路です。
 
July01_回路図.png
図1 PL9823動作回路
 
電源ピンにはパスコンとして0.1[uF]のコンデンサ、データ入力ピンにはダンピング抵抗として33[Ω]の抵抗器を入れています。
あとはそれぞれのピンをArduinoと接続すれば動きます。
 

2. スケッチ

PL9823をArduinoで動かすにはGitHubに公開されているAdafruit NeoPixcel Libraryを使います。あとはサンプルスケッチをカラーLEDのRGBを指定すれば光らせることが出来ます。
とりあえずシリアル通信でRGBを設定できるスケッチを書きました。"R255"や"G064"、"B002"などとシリアル通信で送信すればRGBを設定できます。
 
// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN            6

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      1

// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_RGB + NEO_KHZ800); //NEO_GRBをNEO_RGBへ変更

char type, buf_val[4]="000";
int i, red, green, blue; //LED関連

void setup() {

  /*
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  // End of trinket special code
  */
  Serial.begin(9600);

  red = 0;
  green = 0;
  blue = 0;
  pixels.begin(); // This initializes the NeoPixel library.
  pixels.setPixelColor(0, pixels.Color(red, green, blue)); // Moderately bright green color.
  pixels.show(); // This sends the updated pixel color to the hardware.
}

void loop() {

  if (Serial.available() >= 4) {
//  if (Serial.available() >= 5) {  //終端文字有りの場合
    type = Serial.read();
    for( i=0; i<3; i++ ){
      buf_val[i] = Serial.read();
    }
//    Serial.read(); //終端文字有りの場合
    switch(type){
      case 'R':
        red = atoi(buf_val);
        break;
        
      case 'G':
        green = atoi(buf_val);
        break;
        
      case 'B':
        blue = atoi(buf_val);
        break;
        
      default:
        Serial.println("Error");
        break;
        
    }

    Serial.print("R:");
    Serial.print(red);
    Serial.print(" G:");
    Serial.print(green);
    Serial.print(" B:");
    Serial.println(blue);

    pixels.setPixelColor(0, pixels.Color(red, green, blue));
    pixels.show(); // This sends the updated pixel color to the hardware.

  }

}
 
上記のスケッチでカラーLEDを光らせた写真を何枚か載せます。
 
P2280454.jpg
図2 R:255 G:255 B:255
 
P2280456.jpg
図3 R:255 G:0 B:0
 
P2280457.jpg
図4 R:16 G:0 B:0
 
P2280461.jpg
図5 R:16 G:16 B:0
 
このようにArduinoでPL9823の色や明るさを自由にいじることができました。
 

3. 活用

せっかくなのでカラーLEDを活用したインテリアっぽいものをつくりました(図6)。
 
P2280467.jpg
図6 作成物外観
 
外装は3Dプリントの造形物に塗装などを行い、作成しました。中にはカラーLEDを4つ入れています(図7)。
 
P2280463.jpg
図7 作成物中身
 
また、色をいちいち指定するのは面倒なので、電源を入れると勝手にフェード点灯/消灯を繰り返すようスケッチを書き換えました。
 
// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN            6

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      4

// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_RGB + NEO_KHZ800); //NEO_GRBをNEO_RGBへ変更

char type, buf_val[4]="000";
int i, led, red, green, blue; //LED関連

void setup() {

  /*
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  // End of trinket special code
  */
  Serial.begin(9600);

  red = 0;
  green = 0;
  blue = 0;
  pixels.begin(); // This initializes the NeoPixel library.
  for(led=0; led<NUMPIXELS; led++)
    pixels.setPixelColor(led, pixels.Color(0, 0, 0));
  pixels.show(); // This sends the updated pixel color to the hardware.
}

void loop() {

  i=0;
  while(i<256){
    Serial.println(i);
    red=i;
    green=i;
    blue=0;
    for(led=0; led<NUMPIXELS; led++)
      pixels.setPixelColor(led, pixels.Color(red, green, blue)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(100);
    if(i<16) i=i+1;
    else if(i<32) i=i+2;
    else if(i<64) i=i+4;
    else if(i<128) i=i+8;
    else i=i+16;
  }

  i=255;
  while(i>-1){
    Serial.println(i);
    red=i;
    green=i;
    blue=0;
    for(led=0; led<NUMPIXELS; led++)
      pixels.setPixelColor(led, pixels.Color(red, green, blue)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(100);
    if(i<16) i=i-1;
    else if(i<32) i=i-2;
    else if(i<64) i=i-4;
    else if(i<128) i=i-8;
    else i=i-16;
  }
  
  i=0;
  while(i<256){
    Serial.println(i);
    red=i;
    green=0;
    blue=i;
    for(led=0; led<NUMPIXELS; led++)
      pixels.setPixelColor(led, pixels.Color(red, green, blue)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(100);
    if(i<16) i=i+1;
    else if(i<32) i=i+2;
    else if(i<64) i=i+4;
    else if(i<128) i=i+8;
    else i=i+16;
  }

  i=255;
  while(i>-1){
    Serial.println(i);
    red=i;
    green=0;
    blue=i;
    for(led=0; led<NUMPIXELS; led++)
      pixels.setPixelColor(led, pixels.Color(red, green, blue)); // Moderately bright green color.
    pixels.show(); // This sends the updated pixel color to the hardware.
    delay(100);
    if(i<16) i=i-1;
    else if(i<32) i=i-2;
    else if(i<64) i=i-4;
    else if(i<128) i=i-8;
    else i=i-16;
  }
  
}
 
実際に動かしたものがこちらです。
 
 

まとめ

カラーLED PL9823をArduinoで制御でき、また3Dプリントと組み合わせることでインテリアっぽい物が作れました。
これでカラーLEDのシリーズは終わりです。また何かネタが出来るまでブログの更新はお休みします。
 

はじめての「123D Design」 [ nekosan ]

価格:2,700円
(2016/7/2 11:49時点)
感想(3件)

タグ:Led Arduino
posted by ました at 11:56| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする

2016年06月30日

フルカラーLED -第2回:PL9823の調査2

はじめに

前回はカラーLED PL9823を動かすには電源ラインに外付け抵抗が必要なのか不要なのか分からないという話をしました。
今回は実験を行って、外付け抵抗の有無を調べます。
 

目次

 

1. 外付け抵抗有り

とりあえず外付け抵抗を付けた状態でカラーLEDを点灯させ、カラーLEDの電源波形を観察します。測定箇所は図1の通りです。
カラーLEDの色はRGBで指定できますのでR:192 G:128 B:64としました。
 
June30_カラーLED調査.png
図1 電源波形測定箇所
 
まずは100[Ω]を外付けして、波形を観察します。結果は図2です。
 
100orhm.png
図2 外付け抵抗100[Ω]時電源波形
 
図2より分かることはPL9823はPWMで色を調整しているということです。電圧が4段階ありますが、最も低い電圧のときは赤・緑・青が点灯、次に低いときは赤・緑が点灯、その次は赤のみ点灯、最も高いときは全て消灯しているものと思われます。
 
さて、次は外付け抵抗を47[Ω]にして波形を観察します。結果は図3です。
 
47orhm.png
図3 外付け抵抗47[Ω]時電源波形
 
電圧が4段階なのは100[Ω]時と同じです。しかし電圧が100[Ω]時と異なります。LED点灯時の電圧は100[Ω]時が2.8[V]〜3.4[V]なのに対して、47[Ω]時は3.2[V]〜4.1[V]と高いです。
仮にPL9823が抵抗を内蔵しておらずLEDだけであれば、外付け抵抗の値にかかわらず降下時の電圧は一定となるはずです。しかし、実験では外付け抵抗の値によって電圧に差が生まれました。
 
よってPL9823は抵抗を内蔵しており、外付け抵抗は不要の可能性が高いです。
 

2. 外付け抵抗無し

外付け抵抗は不要の可能性が高いので、外付け抵抗無しで実験を行います。とはいえ、外付け抵抗無しで実験を行って、過電流が流れると怖いです。
そこで、外付け抵抗有りの状態と無しの状態で電流値を測定し、過電流が流れないことを確認します。その結果が表1です。
 
表1 外付け抵抗と電流
 抵抗[Ω] 電流[mA] 
100  15.1 
47  16.5 
10  17.3 
17.5 
 
表1のように外付け抵抗無し(=0[Ω])でも過電流は流れませんでした。またPL9823に使われているカラーLED制御IC WS2811は18.5[mA]が標準ですので、外付け抵抗無しでの電流が標準に近いです。
ですので、PL9823は外付け抵抗無しで動かして問題なさそうです。
 
外付け抵抗無しでの波形が図4です。ノイズは多少乗っているものの5[V]で安定しており、特に問題はなさそうです。
 
0orhm_01.png
図4 外付け抵抗無し電源波形
 

まとめ

実験で外付け抵抗の必要性を調べたところ、PL9823に外付け抵抗は不要という結果が得られました。また、100[Ω]を外付けしたときはたまにカラーLEDが白く点灯しました。おそらく電圧降下によってカラーLEDの動作が不安定になっているものと思われます。
PL9823の外部回路が分かりましたので、次回はカラーLEDを動かします。
 

タグ:Led 回路検討
posted by ました at 16:41| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする

2016年06月21日

フルカラーLED -第1回:PL9823の調査1

はじめに

今回からフルカラーLEDを3〜4回ほどかけて扱っていきます。フルカラーLEDとはその名の通り、様々な色を出すことができるLEDです。
今回は使うカラーLEDについて調べていきます。
 

目次

 

1. 部品の概要

使用するフルカラーLEDはPL9823-F5です(図1)。
 
I-08411.jpg
図1 フルカラーLED PL9823(秋月電子通商 通販コード:I-08411)
 
PL9823はWS2811(3ch LEDコントローラIC)を内蔵していると商品ページに書いてあります。おそらくPL9823はコントローラIC以外にもRGB各色のLEDなども内蔵しており、それらをパッケージ化して砲弾型LEDにしたのだと思われます。
PL9823をArduinoで制御するにはAdafruit製フルカラーLED NeoPixelのライブラリを使います。NeoPixelはWS2811を内蔵しているWS2812を使っているため、同じライブラリでPL9823を制御することができます。
  

2. 回路の矛盾

PL9823を使うには回路を組むようがありますが、PL9823のデータシートがよく分かりません。
図2の特徴の欄には一番下の行に「外付け部品は不要」と書いてあります。
 
2016-06-20.png
図2 PL9823の特徴(データシートより抜粋)
 
一方、図3の参考回路では抵抗器とコンデンサを外付けしています。
 
2016-06-20 (1).png
図3 PL9823の参考回路(データシートより抜粋)
 
電源(VCC)-GND間のコンデンサはパスコンだと思われますので、0.1[uF]程度を外付けすれば問題はないと思います。
問題は抵抗器です。外付け部品不要と謳っていて、ここに抵抗器を接続するのは不可解です。
 
そこでコントローラIC WS2811のデータシートを確認しました。すると、図4のように確かに電源ラインに外付け抵抗があります。
 
2016-06-20 (2).png
図4 WS2811の参考回路(データシートより抜粋)
 
ただ、図4を見てもPL9823の電源ラインに外付け抵抗が必要かどうかはわかりません。なぜなら図3のように外付け抵抗を接続しても図4と同じ回路にならないからです。
仮にPL9823が各LEDのみ内蔵し抵抗器を内蔵しておらず、外付け抵抗を接続したとすると、図5のような回路になります。
 
June20_カラーLED.png
図5 PL9823に外付け抵抗を接続した場合の予想図
 
図4では各LEDは+5[V]と直接接続されていますが、PL9823に外付け抵抗を接続すると図5のように+5[V]とLEDの間に抵抗器が挟まれることが推測できます。
 
PL9823の外付け抵抗が必要なのか不要なのかの調査が必要です
 

まとめ

フルカラーLED PL9823を使おうとしましたが、データシートからでは正しい回路が分かりませんでした。
次回は実験などからPL9823が動く正しい回路を調べます。
 

Adafruit NeoPixel Ring 12連フルカラーシリアルLED 【1643】

価格:1,128円
(2016/6/21 21:27時点)
感想(0件)

タグ:Led 回路検討
posted by ました at 21:27| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする

2016年06月19日

イヤホン用ケーブル(MMCX)作り -第2回:ケーブル作成

はじめに

前回は作りたいイヤホン用交換ケーブルの説明やATT(アッテネータ)の簡単な説明を行いました。今回はイヤホン用交換ケーブルを作ります。
 

目次

 

1. 部品一覧

ケーブルを作るために必要な部品です。なお、ATT関係の部品は除いてあります。
 
表1 使用部品一覧
項  品名  数量  URL 
1 MMCXプラグ  2個  http://oyaide.com/catalog/products/p-4947.html 
3.5mmプラグ  1個  http://oyaide.com/catalog/3-5mm_3.html 
ケーブル  1m  http://oyaide.com/catalog/products/p-257.html 
収縮チューブ15cmバラ
(3.2mm→1.6mm) 
1個  http://oyaide.com/catalog/hsttvabara.html 
絶縁キャップ(白)  2個  http://oyaide.com/catalog/products/p-1872.html 
他には作業をするために半田ごてやニッパー、ストリッパー、ホットボンドなどの工具が必要です。
  

2. ATT作成

作るケーブルには音量を下げるという目的もありますので、ATTを作ります。
図1は作成するATTの回路図です。
 
ATT-schematic.png
図1 ATT回路図
  
π型ATTを2段とし、合計約30[dB]減衰させています。また効果があるかどうかは不明ですが、インピーダンスの変換も行っています。
私は自分で計算しましたが、自作されるのでしたら「ATT 計算」で検索するとATTの設計用ツールが見つかるので、入出力インピーダンスを16[Ω]程度と仮定して設計するとよいと思います。
 
上記の回路図を元に作成したATTが図2です。音質への影響が少なくなるよう線を短く、扱いやすいよう小さく作りました。
 
P2280345.jpg
図2 ATT
 

3. ケーブル作成

ATTを作りましたので、ケーブルを作っていきます。
 
まずMMCXコネクタとケーブルを半田付けします(図3)。信号側とGND側の誤配線や短絡、断線、半田付け時の加熱による破損などに気を付けながら半田付けします。
写真はありませんが、半田付け後はホットボンドで絶縁と固定を行いました。
 
P2280346.jpg
図3 MMCXコネクタの半田付け
 
MMCXコネクタを半田付けしたら、今度はATTを半田付けします。その際はATTを半田付けする前に、収縮チューブや絶縁キャップをケーブルに被せて保護します。ATTも半田付け後にホットボンドで絶縁と固定を行います。
意味があるかどうかは分かりませんが、ATTからMMCXコネクタまでのケーブルは短めにしています。これは音の信号はATT通過後に弱まりますので、信号が微弱だと外来ノイズの影響を受けやすくなるかもと思ったためです。
これらのものを右音声と左音声用に合わせて2つ作成します(図4)。
 
P2280350.jpg
図4 ケーブル保護とATTの半田付け
 
今度はケーブルとミニプラグを半田付けします(図5)。ミニプラグはネジ式になっていますので回して外して、半田付けします。右と左の誤接続や断線、短絡に気を付けます。半田付け後はホットボンドで絶縁と固定をし、キャップを回してはめます。
 
P2280347.jpg
図5 ミニプラグの半田付け
 
ミニプラグには右音声と左音声合わせて2つのケーブルが接続されます。そのため半田付け後は2つのケーブルをねじってまとめます(図6)。ケーブルが左右に分岐する箇所では収縮チューブを被せておきます。
 
P2280349.jpg
図6 ねじったあとのケーブル
 
あとはミニプラグ側のケーブルをATTを半田付けし、熱収縮チューブを加熱して完成です(図7)。
 
P2280353.jpg
図7 完成後のケーブル
 

まとめ

市販されている部品を使い、イヤホン用交換ケーブルを作りました。
付属のケーブルに比べて短くなったたため扱いやすくなりました。またATTを入れたため、それまでは音量がほぼ最小で鳴らしていたのが、中くらいの音量でちょうど良くなり、音量の微調整がやりやすくなりました。
 
これでイヤホン用交換ケーブルは完成です。次回はカラーLEDの制御をしようと思います。
 

posted by ました at 11:55| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする

2016年06月16日

イヤホン用ケーブル(MMCX)作り -第1回:概要

はじめに

突然ですが私が持っているイヤホンはSHURE製のSE315です。SHURE製のイヤホンは遮音性が良いので愛用しています。
 

高音質イヤホン(イヤフォン) SHURE(シュア) SE315-CL-J(クリア) 【送料無料】

価格:23,490円
(2016/6/16 10:07時点)
感想(5件)

 
ただ使っている内に、以下2つのことが気になってきました。
  • ケーブル長が162[cm]と長い
  • 再生側のボリュームを小さくしても鳴る音が大きいので、音量の微調整がやりにくい
上記2点を改善したいと思います。
 
ちなみにこのシリーズではArduinoは全く関係ありません。
 

目次

 

1. やること

気になる点を改善するには以下2つのことをやればよいです。
  • ケーブルを短くする
  • イヤホン側で音量を下げる
幸いにもSE315はケーブルが着脱可能なタイプのイヤホンです。ですので、上記2つを満たすようなケーブルを自作すれば、気になる点を改善することができます。
 
SE315はケーブルの着脱用としてMMCXコネクタを採用しています。MMCXコネクタを採用しているイヤホンはそこそこあるため、「MMCX 自作」で検索すると様々な情報が集まります。
 

自作カスタムIEM用 MMCX female MMCXコネクターメス バラ売り1個単位 イヤホンなど自作用(メール便可)

価格:398円
(2016/6/16 10:30時点)
感想(1件)

 
MMCXコネクタに3.5mmミニプラグとイヤホン用ケーブル、そして音量を下げる部品があればケーブルを自作できます。
 

OYAIDE P-3.5AP 3.5mm ステレオミニプラグ

価格:1,680円
(2016/6/16 10:31時点)
感想(0件)

 

イヤホンケーブル自作用 PCOCC Hi-Fiケーブル 高解像・高音質ソフトケーブル 長さ130cm 切り売り(メール便可)

価格:5,200円
(2016/6/16 10:39時点)
感想(0件)

 
ちなみにミニプラグとケーブルは上記2点を紹介していますが、こんな高い物使っていません。私が購入したのはプラグは1個当たり200円〜300円程度、ケーブルは1m当たり300円〜400円程度のものです。
購入した部品の紹介などは次回行うつもりです。
 

2. 音量を小さくする方法(ATT)

さて、音量を小さくする(=信号を減衰させる)方法ですが、減衰器(アッテネータ、以下ATT)という部品をつかいます。この部品は文字通り信号を減衰することができます。
ATTの主なパラメータは減衰量で、単位はdB(デシベル)です。減衰量が大きいほど信号は小さくなります。
 
ATTや減衰量については詳しく説明しません。入出力インピーダンスや対数など説明することが増えるからです。またATTにもL型やT型、π型などいくつか種類があります。気になる方は参考資料の方を見てください。
とりあえずATTを入れることで音量を下げることができるとだけ覚えてください。
 
簡易的なATTであれば抵抗器が3つあれば作れます
ですので抵抗器からATTを自作し、自作ATTをケーブルに付ければ、音量を小さくするケーブルを作ることが出来ます
 

まとめ

今回は作りたいイヤホン用ケーブルの説明とATTに関する簡単な説明を行いました。
次回からは実際に作っていきます。
 

参考資料

  1. 作者名:小野測器. "技術レポート db(デシベルとは)". サイト名:小野測器. https://www.onosokki.co.jp/HP-WK/c_support/newreport/decibel/index.htm, (参照日:2016-06-16)
  2. 作者名:オリックス・レンテック株式会社. "いろいろなデシベル". サイト名:オリックス・レンテック株式会社. http://www.orixrentec.jp/helpful_info/detail.html?id=73, (参照日:2016-06-16)
  3. 作者名:オリックス・レンテック株式会社. "アッテネータとその使い方". サイト名:オリックス・レンテック株式会社. http://www.orixrentec.jp/helpful_info/detail.html?id=60, (参照日:2016-06-16)
 

Stereo編 誰でもできる!自作でオーディオアクセサリー PART.2 ONTOMO MOOK/特別付録:RCAケーブル・キット 【10P23Apr16】

価格:3,996円
(2016/6/16 11:01時点)
感想(0件)

タグ:オーディオ
posted by ました at 11:23| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする