先日作成した「ピアノでLチカ」の、光り方のダイナミックレンジと言うか、そういうのが小さいので、もっと多段階に光らせられないものかな、と思った。
そもそも、5V/10ビット=1024段のAD変換器にせいぜい4ビット分くらいの入力しかしていないのだから、これを12ビット分4096に展開したって、光り方に濃淡が足りないのは当たり前である。
これは適切なアンプを使っていないからだというのは自明だ。
そこで、今朝、フリップフロップ遊びをするために使ったトランジスタ、「2SC1815」に目が向く。うんうん、これで1石増幅してやろう。
普通はこの場面ではオペアンプとかリニアICを買いに行くのだろうが、何しろ150円で10個も入っていた2SC1815がもったいない。活用しなければ。
えーっと、どうやるんだっけな、と思い出し思い出し、ブレッドボードを作る。
抵抗分圧でベースにバイアスをかける。エミッタにつなぐ抵抗に増幅したい倍率をかけ、それをコレクタにつなぐ。普通は直流成分カットのためのコンデンサを出力につなぐが、0~5VまでのArduinoのアナログ入力に入れるのだから、これはいらない。
結局、ベースバイアスには220kΩ×2個、コレクタに10kΩ、エミッタに1kΩをつけた。望ましい抵抗値は他にあると思うのだが、なにしろ、手持ちのものがそれしかない。
いやまあ、お詳しい方からすると、各種の数値がツッコミどころ満載なのでしょうが、いや、その、手元にある抵抗等がこんなのしかなかったんですよ(苦笑)。
小さいスピーカーをつないで音を聴いてみると、耳がおかしくなるくらい音が歪んでいるが(笑)、レベルは十分であるようだ。
こんなスケッチを書き、PCのヘッドホン端子にArduinoをつないでレベルをチェックする。
#include <stdio.h> void setup() { Serial.begin(9600); pinMode(0, INPUT); } void loop() { String graph = ""; char s[30]; int v = analogRead(0); sprintf(s, "%4d ", v); graph.concat(s); for(int i = 0; i <= v / 10; i++){ graph.concat("*"); } Serial.println(graph); }
音声を直接Arduinoに入れるとこんなものだが……
「2SC1815」を1個通しただけで、うんと幅広になる。
……というわけで、うまく幅広な入力が得られるようになった。
で、入力はこれでOKだ、というわけで、それを「ピアノLチカ」につないでみたのだが、あれ……?
3端子レギュレータが触れないくらい熱くなっている。いかんいかん、というのですぐ電源を外す。回路にどこか間違いがあるのかな、と小一時間調べたが、間違いはない。
どうやらLEDドライブICのTLC5940NTがダメになってしまったみたいだ。いつもArduinoを保護するために、TLCには3端子レギュレータで5Vの別建て電源を作り、それを与えていたのだが、ネットの情報によると、それでTLCが不安定な状態の時に電源が通り、壊れてしまうことはよくあることらしい。
うーん、390円、もったいないなあ……。まあ、また買いに行くとするか……。ピアノLチカは、また今度だな……。