プロが教えるわが家の防犯対策術!

マイコン(PIC)を使って可変抵抗器でフルカラーLED(RGB)の色を自由に選べるように、もしくはスイッチ(モーメンタリ)を押すたびに色が赤→橙→黄のように変わっていくようにしたいのですがプログラムをどうすればいいかわかりません。
どうすればいいのでしょうか?

また、今までずっとアナログ回路をやっており初めてマイコンに手を出したばっかりなので色々とわからないことだらけです。

ライターはマイクロチップ社のPICkit3を使っていますがPICは何を使えばいいのでしょうか?(LEDの点灯程度の用途)

ちなみに今まではアナログ的にRGBそれぞれに可変抵抗器で明るさを調整できるようにし、3つの可変抵抗器で色を作っていました。一つの可変抵抗器で自由に色を作れたらと思い質問させていただきました。

よろしくお願いします。

A 回答 (4件)

#1です。



> 数値を入れてプリセットできると思い込んでいました。
設定する数値がわかっていれば簡単です。その数値をプログラムの一部としてプログラムメモリーに書き込んでも良いし、EEPROMを使うならpickit3経由でいじることもできます。EEPROMはCPU自身で書きかえることもできます。
要は制御値をどうやって外部に出すかです。D/A変換してアナログ値として出すか、PWM信号として出すか。ここが出来ていればどうにでもなると思いますが・・・

> また、私の思い違いでPICでも0〜255までの値で設定できるのでしょうか?
PIC12FやPIC16Fなどは基本的に8ビットですから0〜255の数値を扱うのは問題ありません。メモリーを2バイト使えば言うまでもなく0~65535が扱えます。
PICは一般にA/D変換は10ビット、D/A変換は5ビットになっているものが多いです。PWMは出力周波数によりますが8~12ビット程度の分解能はあります。表示灯の色を変えるだけでしたら十分過ぎると思いますが、品番によって機能がなかったり回路数に違いがあるので注意してください。

> そうしたらマイコン入りのLEDを使う方が簡単なのでしょうか?
どんなLEDユニットを使うかによるでしょう。
まず明るさ制御がどうなっているか。光る・光らないだけの制御なら赤、青、緑の3色の点滅を組み合わせて8色しか表示できません。明、暗、OFFの3段階制御のユニットなら27色が、4段階制御なら64色が可能ですね。色数はこの程度でも十分かと。ならばD/Aは5ビットでも十分過ぎることになります。
そして親装置とのインターフェイスが容易であることが条件でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございました。
また質問させていただくかもしれませんのでまたお力をお借りできればよろしくお願いします。m(_ _)m

お礼日時:2017/09/08 19:57

もう一方に回答します。


https://oshiete.goo.ne.jp/qa/9913943.html
    • good
    • 0

#1です。



> ボタンを押すごとにプリセットしておいた色にどんどん変化していくもの(赤→橙→黄色→黄緑→緑→水色→青→紫→ピンク→白のように)は可能ですかね?

可能です。
色が決まっているのでしたらプリセット値に応じたPWMパルス(またはアナログ電圧)を出せばよいでしょう。
しかしプリセットしておく値はどうやって決めますか? LEDは同じ電流を流しても色によって明るさが違うので実際に光り方を見ながら決めるしかないと思います。
例えばCPUにVRを3個設け、この値に応じて赤、青、緑のLEDの明るさが変わるようにします。実際に光らせてみて最適になった所でボタンを押して記憶させます。これをあなたが欲しいすべての色に対して行います。
PICはほぼすべての品種でEEPROM(不揮発性メモリー)を持っているのでこれを使うと良いでしょう。
プリセットが完了したら「使用モード」にし、色選択ボタンで色を切り替えて使います。

「色選択ボタン」は「使用モード」では1個のボタンで押すたびに順次変わる方式で良いでしょう。しかし「設定モード」では何番目の色を設定しているのかわからなくなるでしょうから3~4個用意してバイナリー的に指定した方が使いやすいと思います。
ご存知と思いますがLEDは電流と明るさが比例しないうえ色によってその変化のしかたが違います。3色のLEDの電流を同じ割合で変えた場合、合成した色が変わるので注意してください。いわゆるガンマ補正といわれるものです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。m(_ _)m
なるほど!そうですよね。
今までマイコン入りのLEDとArduinoを使い0〜255までの値で明るさを制御し色をいじっていたため数値を入れてプリセットできると思い込んでいました。

また、プリセット自体は決めた色を何色か固定でいいので最終的には電源入力にボタン、フルカラーLEDという感じにしたいです。

具体的には、とある機械の電源インジケータが単色ではつまらないので好きな色に後から変えられるようにしようと思って今回PICでいろいろ考えています。

そうしたらマイコン入りのLEDを使う方が簡単なのでしょうか?

また、私の思い違いでPICでも0〜255までの値で設定できるのでしょうか?

おそらく決められた周波数のパルスでいじってるはずなので受け側(LED)にマイコンが入っている前提で255までの値を使ったプログラムで制御していると思いますので単に受け側がLEDの場合は難しいですよね。

すいません。いろんな色を扱うようなことは今までAruduinoとマイコン入りLEDでしかやったことがないもので...

ちなみに各色のRGBの値(0〜255)は前に計測してあります。

よろしくお願いします。m(_ _)m

お礼日時:2017/09/03 04:09

ひとつの可変抵抗器(VR)では無理でしょう。


色は赤、青、緑の3つの要素の組み合わせです。それぞれ独立して 0~100% の調整できないと任意の色は作れないです。
もし1つのVRでするならば制限が生じます。例えば、VRを左一杯にすると赤0%、緑100%、右一杯にして赤100%、緑0%、これはできます。しかし赤と緑を同時に100%とか0%にはできません。さらに青はどうしましょう? 常に50%では目的を達せないですね。
やはり3個のVRを使って赤、青、緑を個別に0~100%調整できるようにすべきと思いますが・・・
1個のVRで3色の量を調整する上手い方法があれば話は別ですがたぶん無理でしょう。小生には思いつきません。

PICを使うのであればまずアナログ入力が3つ必要です。PIC16Fクラスのものは一般に5~10個持っているのでまず心配いりません。ADコンバーターの基準電源は内蔵していますし、電源電圧を基準電源にできるものもあります。
出力も3つ必要ですね。赤、青、緑のレベルをアナログ値で出すならDA変換器が3つ必要です。しかしPICのDAは貧弱で一般的には5ビットの変換器を1回路しか持っていません。この点チップの選択には注意してください。
小生が作るならPWMを使います。パルス幅を変えてアナログっぽい信号を作るものです。とは言ってもPWMを3回路以上持っているチップは多くはありません。マイクロチップ社の製品情報を探したところPIC16F1574は4回路持っているようです。これなら使えるでしょう。外形は14ピンの古典的な(?)DIP型があるので工作はしやすいでしょう。ポートを増やした20ピン型もあります。
<注意>チップは機能や端子を共用している部分があり実際に使おうとすると他の機能と重複して使えないことがあります。そのためマニュアルを熟読して実際に使えるかどうは十分検討してください。
VRからアナログ入力したものをPWMにして出力する、という仕掛けですが、その間に押しボタン操作をうまく入れれば使い易いものができるでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。

自分も希望通りの色の変化にすると滑らかなRGBのそれぞれの明るさ変動ができないのではないかと思っていたのですがやはりそうですよねイーケイキットから可変抵抗器で色を選べるものがあったので買ってみたのですが抵抗値に合わせて15色プリセットされた色が点々と変わっていくような仕様でした。

やはりボタンで色を変える方式にしようと思います。

ボタンを押すごとにプリセットしておいた色にどんどん変化していくもの(赤→橙→黄色→黄緑→緑→水色→青→紫→ピンク→白のように)は可能ですかね?

よろしくお願いします。

お礼日時:2017/09/02 17:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!