質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

2回答

3003閲覧

テープLEDの明るさを可変抵抗で調整がしたい

kaitoma

総合スコア3

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2020/11/04 05:51

編集2020/11/05 04:46

前提・実現したいこと

Arduinoに繋いだテープLEDを可変抵抗を使って、明るさ調整がしたいです。

発生している問題・エラーメッセージ

書き直しました。
テープLEDは光るようになりました。
しかし、可変抵抗では変化しませんでした。
試行錯誤した結果、下のようなスケッチになったのですが、ここからがわかりません。

###使用したもの
・WS2812B テープLED
・Arduino UNO
・小型ボリューム 型番:SH16K4B102L20KC

###スケッチ
Arduino
#include "FastLED.h"

#define DATA_PIN 6
#define NUM_LEDS 144
#define PIN_BRI A0

CRGB leds[NUM_LEDS];

int bri = 0;

void setup(){
Serial.begin(9600);
LEDS.addLeds<WS2812,DATA_PIN,RGB>(leds,NUM_LEDS);
}

void loop(){
if (load_vol()) {
FastLED.showColor(CHSV(28, 100, 255));
delay(100);
}
}
boolean load_vol() {

static int prev_bri = 0;

int vol_bri = analogRead(PIN_BRI);

boolean changed = false;

int diff = 0;

diff = prev_bri - vol_bri;

if (abs(diff) > 10) {
bri = constrain(map(vol_bri, 10, 1000, 0, 255), 0, 255);
prev_bri = vol_bri;
changed = true;
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

後からこのQ&Aを読んで参考にしようという人への一般的な注意ですが、
LEDテープのLEDは(モノによりますが)1個あたり最大60mAぐらいの電流を消費しますので、144個のLEDをフルに点灯させると8A以上の電流が流れることになります。PCのUSB端子の電流供給能力はUSB2.0で0.5A、USB3.0で0.7A(だったかな)程度、USB-Cだといろいろバリエーションがあって使える場合もあるかとは思いますが、まぁそういうことなので、基本的には別途電源を用意しなければいけない、と思って下さい。


質問の本題の輝度については、「HSVって何?」というのを調べると解決に近づけそうに思いますが、それ以前の問題が山積みに見えます。

analogWrite(NUM_LEDS, val/4) ;
これは、NUM_LEDS番ピンにPWMで変調をかけてval/4/255のデューティー比で出力をする、という意味です。NUM_LEDSは144となっていますが、あなたの持っているArduinoには144番ピンがあるのですか?

光りませんでした。

このスケッチでは光るはずがないと思います。

もう一度、FastLEDライブラリでLEDテープを点灯するところまで立ち戻ってみてはいかがですか。すくなくとも、前の質問ではやっていたのですから...

プログラムはめちゃくちゃにいじって「当たり」を狙ってもそうそうあたるものではありません。


追記

とりあえずボリューム(可変抵抗)は置いといて、
LEDを点灯する最小限のプログラムを作ってみるとするなら、

Arduino

1#include "FastLED.h" 2 3#define DATA_PIN 6 4#define NUM_LEDS 144 5 6CRGB leds[NUM_LEDS]; 7 8void setup(){ 9 LEDS.addLeds<WS2812,DATA_PIN,RGB>(leds,NUM_LEDS); 10} 11 12void loop(){ 13 FastLED.showColor(CHSV(28, 100, 255)); 14}

となりますね。このプログラムのどこか一箇所の数値を変えるとLEDの色合いが変わり、どこか一箇所を変えると色の濃さが変わり、どこか一箇所を変えると明るさが変わるわけです。

ボリュームで明るさを制御したいのなら、上記のうち明るさを変えるパラメータをボリュームに応じて値が変わる変数に置き換えてやればよい、それだけのことです。

投稿2020/11/04 13:30

編集2020/11/05 22:17
thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaitoma

2020/11/05 04:44

たくさんのこと教えていただきありがとうございます。 色々と試しましたので、間違いなどがわかりましたら、返答していただくとありがたいです。
thkana

2020/11/05 12:55

また「当たり」を狙ってよくわからないまま寄せ集めを始めたようにしか見えないのだけれど。 直接的にLEDを点灯させているのは FastLED.showColor(CHSV(28, 100, 255)); のところなのだから、ここに読み込んだ電圧値を加工したなにかしらの変数を組み込まないかぎり変化は起こらないでしょう。
thkana

2020/11/05 13:16

(いつの間にかozwkさんの回答をなぞっているような気がしてきた...)
guest

0

  1. 明るさを変えるとか考えずにとりあえずテープLEDを光らせるコードを書く
  2. 可変抵抗とか考えずに1.から明るさを変えたコードを書く(= どこを書き換えれば明るさが変わるのかを調べる)
  3. 可変抵抗(の電圧)の値を取得するコードを書く(気づいてないかもしれないが既にできている)
  4. 2と3を組み合わせる

投稿2020/11/04 06:01

編集2020/11/04 06:02
ozwk

総合スコア13553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaitoma

2020/11/04 06:22

丁寧に回答してくれてありがとうございます。 2の明るさが変わるのか調べるで、setBrightnessで数字0〜255を入れると調整はできました。 しかし、数字をスケッチ上で変更したら変わるのですが、可変抵抗では変わりませんでした。 setBrightnessを使っての変数を知っていたら返答お願いします。
ozwk

2020/11/04 06:40 編集

3.ができていればできるはずです。 ご自身のコードで可変抵抗の値をどこの変数に入れているかをよく見てください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問