2012年2月28日火曜日
2012年2月25日土曜日
マイコンでLEDを使うときの自分用メモ
マイコンでLEDを発光制御する場合、一番単純な方法は、ポートにLEDをつないでオンオフ制御する。
ポートのオンオフが5V/0V、LEDの降下電圧を2Vとすると、5-2=3Vの電圧に対してどれだけの電流を設定するか(どれだけの抵抗を挟むか)によりLEDの光量が決まる。
ポートから電流を流れださせる(ソースカレント)か、ポートに電流を流れこませる(シンクカレント)かの方法がある。
ポートから流れ出す電流値(と全てのポートから流れだす電流値の総和)、ポートに流れ込む電流値(と全てのポートから流れこむ電流値の総和)にはマイコンによって上限制限があり、普通は流れこませる電流値上限のほうが高い。
シンクカレントでも上限に引っかかる場合には、トランジスタやFETを使って別途用意した電源から電流を流すようにする。
トランジスタを使用する場合、ポート電流を設定する抵抗と、LEDに流す電流を設定する抵抗と、を回路に追加する必要があるので部品数が増加する。1個や2個のLEDなら苦にはならないが、5個、6個、…となるとめんどくさい。
なので、TD62003のようなあらかじめ抵抗とトランジスタの組が1つに組み込まれた部品を使ってサボる。
TD62003を使用する場合には、制御するLEDの数だけポートとLED電流制限の抵抗を用意して構成する。
PWMを使えるポートなら、LEDの光量制御も今まで通りにできる。
しかし、10個を超えるようなLED制御をしようとすると、1個ずつポートに接続していてはマイコンのポートが足りなくなる。
なので、74HC595のような汎用シフトレジスタを使用してシリアル→パラレル変換してしのぐ。74HC595は、カスケード接続してもオーバーフローピンとデータピンをつないでいけば制御プログラム側をいじることなく増やしていける。
でも今度はPWMによる光量制御ができなくなる。個別の光量制御ならまだしも、全てのLEDの光量制御を同時にできないのはツライ。個別の光量制御もソフトウェア側で工夫すればできないことはないが(PWMでなくBAMとかBCMとかよばれるやつをプログラムして)、お手軽じゃぁない。
ソフト側での調整でなくてもいいから、可変抵抗を回しての全体調整でもよいのだがそれもできない。(いや、考察と実験が足りないのかもしれないけど。。。)電流制限の抵抗を一旦はんだづけしたら取り外すのは面倒だから、簡単に調整したいのだ。
追記:) 連続電流でなければ、595のenable/disableをいじればいいのか。でもポート使うのもったいないしなぁ。。。
ってことで、最終的にはTLC5940のようなLEDを駆動するのに必要な機能が揃っている半導体の使用に行き着く、のだろうか。
ポートのオンオフが5V/0V、LEDの降下電圧を2Vとすると、5-2=3Vの電圧に対してどれだけの電流を設定するか(どれだけの抵抗を挟むか)によりLEDの光量が決まる。
ポートから電流を流れださせる(ソースカレント)か、ポートに電流を流れこませる(シンクカレント)かの方法がある。
ポートから流れ出す電流値(と全てのポートから流れだす電流値の総和)、ポートに流れ込む電流値(と全てのポートから流れこむ電流値の総和)にはマイコンによって上限制限があり、普通は流れこませる電流値上限のほうが高い。
シンクカレントでも上限に引っかかる場合には、トランジスタやFETを使って別途用意した電源から電流を流すようにする。
トランジスタを使用する場合、ポート電流を設定する抵抗と、LEDに流す電流を設定する抵抗と、を回路に追加する必要があるので部品数が増加する。1個や2個のLEDなら苦にはならないが、5個、6個、…となるとめんどくさい。
なので、TD62003のようなあらかじめ抵抗とトランジスタの組が1つに組み込まれた部品を使ってサボる。
TD62003を使用する場合には、制御するLEDの数だけポートとLED電流制限の抵抗を用意して構成する。
PWMを使えるポートなら、LEDの光量制御も今まで通りにできる。
しかし、10個を超えるようなLED制御をしようとすると、1個ずつポートに接続していてはマイコンのポートが足りなくなる。
なので、74HC595のような汎用シフトレジスタを使用してシリアル→パラレル変換してしのぐ。74HC595は、カスケード接続してもオーバーフローピンとデータピンをつないでいけば制御プログラム側をいじることなく増やしていける。
でも今度はPWMによる光量制御ができなくなる。個別の光量制御ならまだしも、全てのLEDの光量制御を同時にできないのはツライ。個別の光量制御もソフトウェア側で工夫すればできないことはないが(PWMでなくBAMとかBCMとかよばれるやつをプログラムして)、お手軽じゃぁない。
ソフト側での調整でなくてもいいから、可変抵抗を回しての全体調整でもよいのだがそれもできない。(いや、考察と実験が足りないのかもしれないけど。。。)電流制限の抵抗を一旦はんだづけしたら取り外すのは面倒だから、簡単に調整したいのだ。
追記:) 連続電流でなければ、595のenable/disableをいじればいいのか。でもポート使うのもったいないしなぁ。。。
ってことで、最終的にはTLC5940のようなLEDを駆動するのに必要な機能が揃っている半導体の使用に行き着く、のだろうか。
ラベル:
回路の自習
2012年2月20日月曜日
アニメでのガジェットの進化は停滞気味?
家にこもってハンダ付けやらヤスリがけやらするときって、録りためたアニメを聞きながら、たまにチラチラと見ながら作業してます^^;;;
が、ここのところのアニメで真似したいガジェットみたいなものって、何かあったかなぁ。。。
部分的には現実のほうが追い越しているともいえるしなぁ。ま、アイディアに限界はないので期待してます。
が、ここのところのアニメで真似したいガジェットみたいなものって、何かあったかなぁ。。。
部分的には現実のほうが追い越しているともいえるしなぁ。ま、アイディアに限界はないので期待してます。
2012年2月19日日曜日
パクトケース改 タバコケース(2)
こちらで、コンパクトケースの加工によるタバコケース製作をしましたが、このケースだとロングサイズ(っていったっけ)のタバコは入れることができません<
ってことで、新たにパクトケースを入手しました(`・ω・´)
今度はMAQuillAge(資生堂)。ガキっぽいデザインが多い中、さすが資生堂(?)ちょっと高級感^^
ってことで、新たにパクトケースを入手しました(`・ω・´)
今度はMAQuillAge(資生堂)。ガキっぽいデザインが多い中、さすが資生堂(?)ちょっと高級感^^
やっぱり6本しか入らない><
このコンパクトケースは底に穴が開いているため、香りが逃げてしまいそう。。。
こういう硬質樹脂(しかも半透明)の加工は難しいですね。磨くことはままならない><モーターツール削りっぱなしで若干コンパウンドで均したのみ。
録りためておいたアニメの整理
モーレツ宇宙海賊は追いつきましたよ!
これ、おもしろいじゃないの。なんかナデシコっぽいなぁって思ってたら、やっぱり同じ監督さんだった。あの紙芝居の演出で確信したしwww
これ、おもしろいじゃないの。なんかナデシコっぽいなぁって思ってたら、やっぱり同じ監督さんだった。あの紙芝居の演出で確信したしwww
ラベル:
アニメ・映画
2012年2月16日木曜日
照明にハマる
白熱灯の照明調光として、使えそうで日本製なのがこれ。
オーデリックのLC241。これなら、スイッチを交換するだけでOK?ダイヤル部分の電動化は、、、まぁ、買ってみてバラしてみれば解決法はいくらでも見つかるか。
オーデリックのLC241。これなら、スイッチを交換するだけでOK?ダイヤル部分の電動化は、、、まぁ、買ってみてバラしてみれば解決法はいくらでも見つかるか。
問題は蛍光灯タイプの調光。コンセントから蛍光灯に接続して、調光させるって敷居が高そう><
リネストラランプにすればいいのかもしれないけど、間接照明タイプって売ってる???
2012年2月14日火曜日
Google Codeを使ってみる
ソース管理にGoogle Codeを使ってみるか、といじってみたのですが、ハマりました。
僕は、そりゃ昔はSunOS4、Solaris、FreeBSDを使ってましたが、今や完全にWindowsオンリー。
なので、Windowsだけでやろうとしたのですが、git pushするところでハマりました><
fatal: remote error: Invalid username/password.
You may need to use your generated googlecode.com password; see https://code.google.com/hosting/settings
なんてメッセージが出てpushできない><
ホームディレクトリは、C:\Documents and Settings\(ユーザ名)
で、
そこに、.netrcをつくって、中にhttps://code.google.com/hosting/settingsでかかれた
machine ホスト名 ユーザ名 パスワード
を書けばいいんでしょって設定しているのですがダメ(´・ω・`)
しかたないなぁ、とググッてみてやっと解決(`・ω・´)
まず、.netrcでなく、_netrcが正解。
つぎに、_netrcに書く内容ですが、こちらの
僕は、そりゃ昔はSunOS4、Solaris、FreeBSDを使ってましたが、今や完全にWindowsオンリー。
なので、Windowsだけでやろうとしたのですが、git pushするところでハマりました><
fatal: remote error: Invalid username/password.
You may need to use your generated googlecode.com password; see https://code.google.com/hosting/settings
なんてメッセージが出てpushできない><
ホームディレクトリは、C:\Documents and Settings\(ユーザ名)
で、
そこに、.netrcをつくって、中にhttps://code.google.com/hosting/settingsでかかれた
machine ホスト名 ユーザ名 パスワード
を書けばいいんでしょって設定しているのですがダメ(´・ω・`)
しかたないなぁ、とググッてみてやっと解決(`・ω・´)
まず、.netrcでなく、_netrcが正解。
つぎに、_netrcに書く内容ですが、こちらの
Why isn't my username/password accepted?
If you enter your username as part of the URL, you have to encode the "@" sign as "%40" to avoid confusing Mercurial. If you're on windows, % is an escape character in the command prompt, so you have to encode the "@" sign as "%%40".
The above instructions are only relevant to non-gmail users; gmail users can use the username part of their email address, the part preceding the "@" sign, as their Google Code username.
にあるように、gmailユーザなら@gmail.comはいらない、ってことですた。
追記: @は%%40に、ってのはgitでも有効?こういうのって、いまどきのlinuxの認証に慣れていれば苦も無く対応策がわかるんだろうなぁ。。。
追記: @は%%40に、ってのはgitでも有効?こういうのって、いまどきのlinuxの認証に慣れていれば苦も無く対応策がわかるんだろうなぁ。。。
ってことで使えるようになりました♪
2012年2月13日月曜日
X10とか調光ソケットってなんで日本では売ってないの?
いや、探せば売っているんだろうけど、ネットで見つからなかった><
リビングのハロゲンスポットの調光をしたいんだけど壁内の配線をいじるわけにもいかず、困っています。
これ。x10の電力線通信で調光できるらしいです。欲しいけど売り切れ><
100歩譲って、調光固定でもいいのだけど、こういうの
も見かけないよなぁ。。。
日本だと、LED照明ばっかりに商品構成が偏っているから???
リビングのハロゲンスポットの調光をしたいんだけど壁内の配線をいじるわけにもいかず、困っています。
これ。x10の電力線通信で調光できるらしいです。欲しいけど売り切れ><
100歩譲って、調光固定でもいいのだけど、こういうの
も見かけないよなぁ。。。
日本だと、LED照明ばっかりに商品構成が偏っているから???
2012年2月12日日曜日
L6203とか
Arduinoによるモータ制御として、TA7279で回路作りましたが、PWM周波数とモータ電流に余裕のあるL6203でまた作ってみました。
L6203って、2.54mmピッチのユニバーサル基板に斜めに刺すようになっている(?)ので各パーツの配置で頭がこんがらがります。
Fritzingで入念にパーツ配置を検討し、Arduinoのシールド基板に2つL6203を載せれるようにがんばってみました。
が!!!、せっかく書いて用意したパーツ配置図ですが、案の定、配置位置を間違えてしまい、綺麗に仕上げようというモチベーションを失ってしまったのでテケトーに作業しましたwww
図からもわかるように、ジャンパー線てんこ盛りですwwwwww
Arduinoのシールド基板のFrizingの図面、あらかじめ用意しておいたほうが便利ですね。
あと、リビングの照明リモコンの赤外線送信もArduinoからできるように実験しました。
最初は、Arduino公式サイトからたどっていって見つけられるサイトの赤外線送受信ライブラリ(IRremote)を使ったのですが、受信でそれっぽいコード(NECプロトコル(?))を吐くものの、そのコードを送信してもうんともすんとも><
そこでググって和製のコードを拾ってきて試してみて、送受信成功!!!
IRremoteの吐くコード、32bitのNECプロトコルだ、というとこまではあっているんだけど、その他はぜんぜん違うコードでした(´・ω・`)
回路作成って、暇つぶしにいいですね。今日1日、こんなコトばっかりやってて外に出なかった(´・ω・`)
2012年2月7日火曜日
2012年2月6日月曜日
ここまでの成果
ケースの照明→電球色FluxLED×2+TLC5940
電気スタンド照明→TLP626+TLP560のAC調光
を1つのArduinoでやってみた。
LED照明の方は、AC調光の割り込みのためか、ちらつく><改善の余地あり。色も電球色のわりには色温度が高いなぁ。。。
2つしかLED使わないんじゃ、TLC5940使うまでもなく、直接ポートから出力すればよかったかもしれない^^;;;
次は、リモコン照明の制御を赤外線LEDでやってみようかな。
コードはこうなりました。ループの方はまだテスト用にプログラム組んだだけ。
MsTimer2でTimer2のインターバルとコールバック関数を設定するのですが、Timer2のインターバルはTlcでいじられる(´・ω・`)
(最初は、FlexiTimerを使ってみたのだけど、これを使うとSerialが使えなくなる><)
計算式を見つけるのが面倒なのでインターバル周期は実測で見つけます。
約600カウントくらいがAC50Hzでの1/2周期(ACdimで設定)。
#include "Tlc5940.h"
#include "MsTimer2.h"
volatile int zc_counter=0;
volatile boolean zero_cross=false;
int AC_pin = 5;
volatile int ACdim = 500; // 0-600(?)
void zero_cross_detect()
{
zero_cross = true;
digitalWrite(AC_pin, LOW);
}
void ACdim_check()
{
if(zero_cross == true) {
if(zc_counter>=ACdim) {
digitalWrite(AC_pin, HIGH);
zc_counter = 0;
zero_cross = false;
} else {
zc_counter++;
}
}
}
void setup()
{
attachInterrupt(0, zero_cross_detect, RISING);
pinMode(AC_pin, OUTPUT);
MsTimer2::set(1, ACdim_check);
MsTimer2::start();
Tlc.init();
Tlc.clear();
Serial.begin(115200);
}
void loop()
{
if(Serial.available()>0){
int inByte=Serial.read();
if(inByte=='1'){
ACdim+=50;
if(ACdim>600) ACdim=0;
Serial.println(ACdim, DEC);
}else if(inByte=='2'){
Tlc.set(0, 2000);
Tlc.set(1, 2000);
Tlc.update();
}else if(inByte=='0'){
ACdim=600;
Tlc.set(0, 0);
Tlc.set(1, 0);
Tlc.update();
Serial.println("reset");
}
}
}
ラベル:
Arduino
ACリレーと調光と
秋月のソリッドステートリレーキットとネットに転がっている図面を収集して作った回路がこれ。
AC電源とTLP626をつなげるところの抵抗値はあやしいw
FritzingにZNRの画像がないので、ZNRはそれっぽく書いておきました。これに放熱板とかつけます。
ヒューズも付けてないですが、僕の利用法としては50Wの白熱電球の調光なので、まぁいっかって感じ^^;;;
調光の原理としては、上半分のTLP626の回路でAC電源のゼロクロスを検知し、下半分のTLP560の回路でACリレーを構成して、ゼロクロスを検知したらリレーオフにし、任意の時間後にリレーオンにすることで調光を実現します。
これをArduinoで制御しようとすると、結構苦労します。attatchInterrupt()した関数内でdelay()する方法では動きません(´・ω・`)
タイマーで短いインターバルで関数を連続的に呼び出し、関数内で呼び出し回数をカウントして、インターバル×カウント数でリレーオンにするタイミングをはかります。
それだけだったらそんなには難しくはないのですが、他の制御と同居させようとすると、他の制御がタイマーいじってたりするので、そっちに合わせないといけない><たかだか電球1個の調光だけのためにArduino使うのはもったい無いですから。
AC電源とTLP626をつなげるところの抵抗値はあやしいw
FritzingにZNRの画像がないので、ZNRはそれっぽく書いておきました。これに放熱板とかつけます。
ヒューズも付けてないですが、僕の利用法としては50Wの白熱電球の調光なので、まぁいっかって感じ^^;;;
調光の原理としては、上半分のTLP626の回路でAC電源のゼロクロスを検知し、下半分のTLP560の回路でACリレーを構成して、ゼロクロスを検知したらリレーオフにし、任意の時間後にリレーオンにすることで調光を実現します。
これをArduinoで制御しようとすると、結構苦労します。attatchInterrupt()した関数内でdelay()する方法では動きません(´・ω・`)
タイマーで短いインターバルで関数を連続的に呼び出し、関数内で呼び出し回数をカウントして、インターバル×カウント数でリレーオンにするタイミングをはかります。
それだけだったらそんなには難しくはないのですが、他の制御と同居させようとすると、他の制御がタイマーいじってたりするので、そっちに合わせないといけない><たかだか電球1個の調光だけのためにArduino使うのはもったい無いですから。
2012年2月4日土曜日
MI-5[spooks]って。。。w
今のところDVDレンタルで借りれる最終の26話までみましたが、、、
ダニー死んでるし(´・ω・`)
1話から残っている主要メンバーってゾーイを除くとボスのハリーしかいないしw
そいえば、1話(だったかな)でサポート的メンバーだった女の子もあっさり死んでたなぁ。
これがイギリスドラマっすねwww
ダニー死んでるし(´・ω・`)
1話から残っている主要メンバーってゾーイを除くとボスのハリーしかいないしw
そいえば、1話(だったかな)でサポート的メンバーだった女の子もあっさり死んでたなぁ。
これがイギリスドラマっすねwww
ラベル:
アニメ・映画
2012年2月2日木曜日
2012年2月1日水曜日
回路の自習: リレー
トランジスタのECB、覚えていない。。。
ACのリレーも清書しておきたかったけど、Fritzingにトライアックのパーツアイコンがなかった><
const int relayPin = 2;
void setup() {
pinMode(relayPin, OUTPUT);
}
void loop() {
digitalWrite(relayPin, HIGH);
}
回路の自習: タクトスイッチ
プルダウン、プルアップ。
const int button1Pin = 2;
const int button2Pin = 12;
void setup() {
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
}
void loop(){
button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
if (button1State == HIGH) {
} else {
}
}
こうか???
回路の自習: LED点灯
恥ずかしながら、今さら回路の自習。
Fritzing使ってみました。
Arduinoだと、ポートから流れ出る電流も流れこむ電流も1ポートあたりMax40mA?
Fritzing使ってみました。
Arduinoだと、ポートから流れ出る電流も流れこむ電流も1ポートあたりMax40mA?
const int led1Pin = 2;
const int led2Pin = 12;
void setup() {
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
}
void loop()
{
digitalWrite(led1Pin, HIGH);
digitalWrite(led2Pin, LOW);
}
あんれ~、これでよかったんだっけ、といきなり悩むw
登録:
投稿 (Atom)