2015俺は佐藤宅の便器だ。JSTLEDは半導体であるから、電球と違って、光り始める前は抵抗は無限大であり、電流は流れない。ところが電圧がVfを超えて光り始めたら最後、抵抗がなくなって電源をショートさせた状態でぶっ飛び、自分自身も壊れる。従って必ず抵抗を一緒にくっつけてやるのだ。いう、この式のみでよい。LEDを買ってくると、流すべき電流値(If)、光り始める電圧(Vf)がどこかに書いてあるから、それに従って計算する。買ってきたLEDのIf(順方向電流)、つまり光らせるために必要な電流ただ、抵抗は入手可能な数値が決まっており、そのものピタリという抵抗値のものは売っていない。計算した値と一番近い抵抗を選び、その抵抗値で再び電流を計算して、買ってきたLEDのIfを超えていないかどうかを確かめる。これが、簡単な計算ではあるけどいちいち面倒くさい。それでまあ、抵抗を選ぶのにこういうスプレッドシートを作る。スペックシートの順電流と順電圧、電源電圧を入れると抵抗を選んでくれるスプレッドシートそれから、これを使ってみよう。これは、「武蔵野電波のプロトタイパーズ第15回『TLC5940で16個のLEDを遊ぶ』」で取り上げられている「TLC5940NT」というICだ。千石電商本店2階、入って左側の、一番奥のほうの抽斗で売られている。武蔵野電波のページでは400~700円とされているが、千石電商の店頭売りでは390円である。IDEのインストールディレクトリの下にある「libraries」の中にコピーすればよい。スペックシートはコレだが、スペックシートを見るより、Arduinoにライブラリを入れると出てくるようになるサンプルスケッチの「BasicUse」を見た方が分かり易いと思う。こんな風にサンプルは書かれている。}}この最初のほうのコメントにアスキー・アートで書かれている図を見て結線するとよい。LEDピカリ館」で売っていた10個入り300円の白色LEDで、Vfが3.0V~3.4V、Ifが20mAとある。電源が5Vならば100Ωばかり抵抗を付けてやればいい理屈だが、全部点灯させるとArduinoがダメになってしまうから、さらに絞って10KΩつけてやる。コンパイルして動かすとこうなる。10kΩでもこれくらい明るい。このICを使うと、パルス幅変調の幅も、Arduinoが256段階であるのに比べ、4096段階と格段に細かくなる。アレンジを加えてみよう。昨日買ってきたポテンショメータを使う。アナログの4番ピンと5番ピンに50kΩのポテンショメータと10kΩの抵抗をつなぎ、それぞれを強さと速さにして、「尾を引いたみたいに」明るさ制御をする。ポテンショメータの回路はこうする。図の「E1」をアナログ入力で読めばよい。ポテンショメータのつまみの位置は、次の計算でR2を求めれば明らかになる。2組み付けるとこうなる。スケッチはこんな感じ。JST先週試したAdafruit製の「小型TTLシリアルjpegカメラ」での間欠撮影。先週はどうしたわけか同じ画像ばかり撮れてしまい、失敗である。秋月電子「小型TTLシリアルJPEGカメラ(NTSCビデオ出力付)」(チナミに、このカメラのメーカーの「Adafruit」という会社、有名なマッシモ・バンジのTEDの中で紹介されていたことに気付いた。)https://youtube.com/watch?v=UoBUXOOdLXY%3Ft%3D5m50s気を取り直して、スケッチを直す。撮影時のカメラのステータスを確認し、撮れていなければ何回でも撮り続ける。「while(撮れてない)撮る;」......というわけだ。万が一ハードウェアエラーなどがあるとループが回り続けるので良くないが、ループが回り続けようが結局のところはモノとしては電源を入れ直す他にどうしようもないので、こんなものだろう。それと、撮影が終わったらカメラをそのつどリセットすることにした。存在するファイル名は避けるようにした。いう時、Arduinoには書式文字列付きの「sprintf」がないので、少し不便だなと思う。夜明けから日没までの一日の空の雲を撮りたいので、天気予報を見て雨が降らぬ確信を持ってから、昨夜寝る前にベランダにカメラをセットしておいた。朝早く起きるより楽だからだ。夜のうちに1000枚くらい写真が撮れてしまうが、SDカードには余裕があるので大丈夫である。昼間は用事があるのでカメラの面倒は見れないが、放置しておけば淡々と写真は撮れていく。Makerに流し込むと、微速撮影動画の一丁上がりだ。スケッチは次のとおりである。間欠撮影をし、Webでダウンロードできるようにする。JSTLEDを強力に光らせることが出来たので、いよいよWebサーバつき多機能リモコンを作成する。卓上などに置いておき、ネットワークにつないで、スマホなどから複数の電化製品を操作できるというものだ。ここでは、いくつかのテクニックを使った。一つは、フォームが大きくなってしまい、ハードコーディングするとメモリが足りなくなる。そこで、SDカード内にHTMLを置き、これを読み出すようにした。同様に、リモコンから読み取った数値データが大きくなって、普通にハードコーディングしたのではメモリが不足する。そこで、「PROGMEM」というキーワードを使って、フラッシュメモリ内にデータを置き、これを読み出すようにした。SDカードを取り付けられるから、そこにHTMLを書き込んでおけばよい。FETをつけたブレッドボードと一緒に、買っておいたSparkfunの基盤に固定する。SDカード内には、次のようなHTMLを置き、ファイル名を「irform.htm」とする。</body></html>上のHTMLの見た目はこんな感じだ。スケッチは次のようになる。リモコンをウェブで操作する。}勿論、ただのWebであるから、このようにスマホの他、タブレットなどからも操作可能である。ルータでポートフォワードすれば、外出先からの操作も可能である。JST秋月電子で買ったリモコン、せっかくだから、これでLEDを点けたり消したりしてみよう。点滅ではいまいち芸がないから、3色LEDの照度を多段階に変えたり、色をいろいろに変えたりしてみようではないか。買ってきたリモコンIR受信ライブラリを使ってみたが、どうも安定しない。リモコンからはコードが連続送出されるようなのだが、受信ごとに違う値が返ってきて困る。調べてみると、0xffffff、すなわち24ビットを超える値が返ってくるときはどうやら受信がうまく行っていないことがわかったので、これを排除してみたところ、うまくいくようだ。そこを通り抜けると、今度はどうも、使用するピンの組み合わせに約束があるようだ。わからないのだが、PWMを9・10・11、IRリモコン受信モジュールを12で使うと、さっぱりうまく行かない。変えて、LEDのためのPWMをR・G・Bそれぞれ9・5・6に割り付けるとうまくいくことがわかった。......理由がなんだかよくわからないのだが(笑)。スケッチは結局こうなった。赤外線リモコン「DFR0107」(DFROBOT社)でLEDをコントロールする。JST昨日試した扇風機遊びを少し進め、温度制御を付けてみたい。KIT」には、サーミスタが入っている。これで温度を検知して、温度ごとに扇風機の回転を制御するわけだ。2をつなぎ、ウェブインターフェイスで行うと面白いだろう。以前にも試したが、しかし、このキット付属のサーミスタは情報が少なくて困る。そこで、ちゃんと計算してそれなりの温度測定をしてみたい。以前は測りたい温度近傍の特性値をテーブルから拾って2次式で近似しただけであった。スペックシートによれば、-55°Cで10583.3Ω、+125°Cで1.277Ωになる、とある。常温付近では0°Cで190.07Ω、40°Cで24.87Ωだ。サーミスタ直付けでArduinoから5V給電すれば、-55°Cのときは0.47mAだが、0°Cで26.3mA、40°Cで201mAと、Arduinoに流せる電流の20mAを大きく逸脱してしまう。40度付近でも大丈夫なように、抵抗を付加しなければならない。40°Cの時に流したい電流を5mAと仮定すれば、......というような計算で975Ωくらいつなげておけばよいということになる。手持ちの抵抗は、キットに入っていた330Ω・1kΩ・10kΩの3種類しかないから、これで賄うしかない。14mA...ということになる。間をとって、1kΩで回路を作ってみよう。次に、サーミスタは抵抗から温度を知る。Arduinoは電圧からデジタル値を知る。したがって、電圧からまず抵抗値を知らなければその先の温度測定に進めない。先の電流調整用の1kΩ抵抗をR0として含め、現在のサーミスタの抵抗値を知るには、一般に式は次のようになろう。これをソースコードに表せば、次のようになる。vt;次に、知った抵抗値から温度を知る計算である。サーミスタの抵抗は対数特性を持っているので、関数は対数モデルになる。サーミスタの特性を表す重要な値は「B値」と呼ばれるものと、Ta(温度)、R0(抵抗)の3つで、それらはスペックシートに書いてある。TaとR0については、「温度がTaのとき、抵抗はR0になる」というものだ。50kΩ......とある。B値は「抵抗の対数と、温度の比」である。これもスペックシートに関係式が書いてある。これらのスペックシートの値と、知った抵抗値から温度を求める式は、次のようになる。これを、先の抵抗値を知る部分と併せて、Arduinoで使える関数にすれば、このようになろうか。K);}これを用いて、少し真面目っぽい温度測定スケッチを書けば、次のようになる。サーミスタでわりと真面目に温度を測る。K);}次に、温度に応じて扇風機の回転数が変わるようにしよう。先日作った「ソリッドステート・リレーモジュール」を遺憾なく使用する。25A(20A)タイプ」が組み付けてある。27°Cで1/fゆらぎエフェクト、28°Cで弱風、29°Cで強風、とでもしてみようか。1/fゆらぎエフェクトには、先週書いた関数をそのままコピペする。サーミスタで温度を測り、扇風機を制御する。255));}回路図など、描くも愚かというか、こんな簡単なものである。2をつなぎ、この扇風機をWeb化する。昨日買っておいた「クリアランス確保用ピンソケット」が役に立つ。組み付けるとこんな感じである。回路はネットにつながない場合と同じでよい。こんなインターフェイスで動かす。設定した温度になると扇風機が回る。スケッチはこのようになる。サーミスタで温度を測り、扇風機を制御する。間欠カオス法により0~255の間で1/fゆらぎを生成して返す。JSTさて、他の人もよくやっている「1/fゆらぎのLチカ」を、私もマネしてやってみる。こちらやこちらのサイトを参考にさせていただく。使われるのはこの「間欠カオス法」だそうである。間欠カオス法としてのときのときただし、参考にさせていただいた各サイトによると、この間欠カオス法は、0.0付近や1.0付近に値が貼り付き易いので、0.0や1.0に近くなったら乱数を入れてやるとよいとのことである。実際に試すと、たしかに、長時間ちらつきがなくなったり、消えたままになったりしやすい。そこで、そうなったときに乱数を入れ、中間付近の適当な輝度で光らせるようにしてある。青色要素を少なくして、ろうそくの色合い風なちょっと黄色味がかった色にした。