Arduino初心者熱烈大歓迎質問スレ part20
■ このスレッドは過去ログ倉庫に格納されています
http://www.arduino.cc/
【質問者心得】
・スレに一応目を通してから質問しましょう
・回答者はエスパーではありません。状況が分かるように詳しく書きましょう
詳しく書いてくれないと、答える方も困ってしまいます。答えようがないのです
【回答者心得】
・すぐにググレカスと言う前に「○○でググれカス」って言うような大人の余裕を見せつけてやりましょう
・節度ある初心者さんには、特に優しくね
【分裂騒ぎ】
おさまった模様。くわしくはぐぐれ。
前スレ
Arduino初心者熱烈大歓迎質問スレ part19 [無断転載禁止]©2ch.net
http://rio2016.2ch.net/test/read.cgi/denki/1500745528/
過去スレ
Arduino初心者熱烈大歓迎質問スレ part18 [無断転載禁止]©2ch.net
http://rio2016.2ch.net/test/read.cgi/denki/1485192244/
Arduino初心者熱烈大歓迎質問スレ part15
http://rio2016.2ch.net/test/read.cgi/denki/1451893274/
Arduino初心者熱烈大歓迎質問スレ part17
http://rio2016.2ch.net/test/read.cgi/denki/1471967293/
Arduino初心者熱烈大歓迎質問スレ part16
http://wc2014.2ch.net/test/read.cgi/denki/1451909868/
関連スレ
【Arduino】フィジカル・コンピューティング4【OSC】
http://wc2014.2ch.net/test/read.cgi/denki/1407830304/
学研マイコン Japanino ジャパニーノで遊ぶスレ 3
http://kamome.2ch.net/test/read.cgi/denki/1286354827/ どうもありがとうございます
>>626
このページには回路図は載っていませんでした。
>>627
暗く点灯(7時)〜明るく点灯(7時)
が正しいという事でしょうか?
新しい可変抵抗を買ってきたらもういちど試してみます。
>>629
暗く点灯(7時)→明るく点灯→早く点滅〜ゆっくり点滅(5時)
が正しいという事でしょうか?
暗く点灯または消灯(7時)〜明るく点灯(5時)
7時から5時の間を滑らかに明るさを可変させるには上のページの手順で出来るんでしょうか? >>630
IDEのサンプルスケッチ見てきたら入力電圧がそのままオンオフそれぞれのディレイ時間
になってるから動作としてはポテンショメータ動かすことで高速点滅←→低速点滅
になる
そのまんまやってる動画
https://www.youtube.com/watch?v=f7loalWZW4w 回路図は載ってないんじゃなくてぇ、無けりゃまず自分で書きなよ。
自分が何をやってるのかわからんだろ まあ 初めはdead copyからだ
次は配線図から回路図起こす (慣れてれば逆だが・・) >>630
あなたのやりたいことは、そのページで取り上げてるAnalogInputと
別の例のFadingというスケッチの合わせ技だと思う。
今は スケッチ例>03.Analog>AnalogInput をやってるはずだけど、
スケッチ例>03.Analog>Fading もやってみてくださいな。
LEDは9ピンにつないでね。 >>625
回路的には単純なので、まず何をどう制御しようとしているか理解すると良いと思います
「PWM制御 Arduino」などで検索してみてください 回路図回路図とわめくステレオタイプ
2度と戻らない質問者 sensorValueをシリアルモニタに出力したら何が起こってるのか分かると思うの >>637
ステレオタイプじゃなくバカの一つ覚えって奴だな >>631
これです
自分のと同じ動きでした
>>635
なるほど、チャレンジしてみます
>>636
分かりました
ただ真似するのでは無く、仕組みを理解するようにします 可変抵抗器を回したらMIDIを送信するスケッチを書きました。
しかし、可変抵抗器に触っていないのに常に数値が動いてしまって不安定です。
つまみを回したときだけ数値が動くようにするにはどんなコードを追加したらいいですか?
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
int cc = 0;
int AnalogValue = 0;
int lastAnalogValue = 0;
void setup() {
MIDI.begin(4);
}
void loop() {
AnalogValue = analogRead(0);
cc = AnalogValue/8;
if (lastAnalogValue != cc) {
MIDI.sendControlChange(16,cc,1);
lastAnalogValue = cc;
}
} 続き
LEDについては、以下のようにやれば左に回すと弱く点灯、右に回すと明るく点灯になりました。
しかし、641の時と同じく、なんだか光り方が不安定でした。
void setup() {
}
void loop() {
int val ;
val = analogRead(0) ;
analogWrite(3,val) ;
} >>642
>なんだか光り方が不安定
とか言われても客観性に乏しくて何とも言えない。
valをシリアルに出力してそのデータでグラフでも描いてみ。
滑らかか、変化が断続的かわかる。
可変抵抗交換してみる手もある。 LEDが不安定というのは何も触っていないのに明るくなったり暗くなったりといった感じです。
シリアルモニタですが、
「ボード/dev/cu.usbmodem142431は利用できません」
と出て、シリアルモニタが開けません。
Midi Firmware for Arduino Unoを入れているからでしょうか? 最近は差別とかで学校で色覚検査してないから
自分が見えにくい色があることを知らないで大人になる人がいるらしい。 >>644
そのスケッチで問題があるとすれば、
analogWriteは0〜255なのにvalの値は0〜1023だってことくらい。
手元に中華NANOしかないけど、
やってみたらコンデンサなんか何も入れなくても触らなきゃ何も変化しない。
エラーメッセージ件は分からない、まず自分の環境を書いて。 >>641
コードの変更でご所望の処理を行うことはおそらく可能ですが
「回したときだけ動く」と言う処理に最も向いているのはロータリーエンコーダです
MIDI機器でカチカチとノッチのある感覚で回るノブなどは大体それです
割り込みなどを覚える必要はありますが利用は難しくありませんので調べてみてください >>641
現在値と過去の値の差の絶対値が規定以上かどうかを判断すれば良いよ。
ボリュームを入力デバイスにするときはそうしてる。 if(valとvaloldの差の絶対値が規定以上){
valold=val
処理
} >>649
ロータリーエンコーダーも同じような処理がいると思うのだが
ちょうど境目で止めた場合に勝手に読み値が変わるのを防ぐ為に
基本中の基本だと思っていたけど
趣味の世界だとそういうのは省略するのが一般的? >ちょうど境目で止めた場合に勝手に読み値が変わるのを防ぐ為に
手動式のロータリエンコーダは停止位置=クリック位置が決っている。
(力尽くで任意の位置で停止させることは可能だと思うが。)
秋月ではALPS製と中華製の2種類のロータリエンコーダを売っていて、
両者の停止位置の位相が異なっている。
http://akizukidenshi.com/catalog/g/gP-06357/
http://www.alps.com/prod/info/J/HTML/Encoder/Incremental/EC12E/EC12E1220407.html
http://akizukidenshi.com/catalog/g/gP-00292/
http://akizukidenshi.com/download/ds/taiwanalpha/RE160F-40E3-20A-24P.pdf
中華製の方が価格が高いが、A、B相ともレベルキープ位置で止まるので
パラパラとH/Lが変わること無く、使いやすかったと記憶している。
>「回したときだけ動く」と言う処理に最も向いているのはロータリーエンコーダです
同意。 ユーザーが必ずクリック位置で止めるなんて保証は無いし、
クリックの無いものもある
業務コードだとそういう対策は当たり前なんだけどね ロータリーエンコーダーとボリュームは用途が違うわけで
ボリュームは
回転角に対して分解能が高い
位置が分かりやすい
電源を切っても値を保持
という特徴がある
ソフトが楽をしたいからとかそういう理由で決める物じゃない >>644
余計な事をやってハードル上げる前に、
素の状態で、一番基本の>>642がちゃんと出来るようにシリアルモニターで確認する。
それが解決してからMIDIでも何でもいいけど次の段階に移る。
ロータリーエンコーダとか言ってる人もいるけど、
足元と知識を固めながら順番にやらんと堂々巡り、時間の無駄になるよ。 >>644
>Midi Firmware for Arduino Unoを入れているからでしょうか?
"Midi Firmware for Arduino Uno"調べてみたら、その通りみたいだね
本当は>>656さんの書いてるように、基本のところから経験してったほうが
いいから、元に戻してADだけ確認して・・・っていう手順ふむべきかもしれないけど
Midi入れた状態でもシリアルモニター使える状態にしとくのは有用だから
ソフトシリアル出力を使えるようにするのもいいかも
まあ、どっちがいいとか悩む前にどっちもやってみりゃいいだけだけど >>654
>ユーザーが必ずクリック位置で止めるなんて保証は無いし、
だから「力尽くで任意の位置で停止させることは可能だと思う」と書いた。
>クリックの無いものもある
そりゃ、フィードバック位置決め用エンコーダなどでは無くても中にはあるだろうな。
多数派では無いと思うけど。
>基本中の基本だと思っていたけど
趣味の世界だとそういうのは省略するのが一般的?
>業務コードだとそういう対策は当たり前なんだけどね
趣味だから対策はやらなくていい、なんて書いてない。
想定外の異常な動作をしないように、って対策するのにプロもアマも関係ないと思うけどな。
あまり趣味の電子工作をバカにしない方がいい。
私が言いたかったのは、
秋月で売っているロータリエンコーダはクリック位置が2種類有って
中間位置で止まるタイプの方が使いやすいやすかった
ただそれだけです。 別に力尽くじゃなくたって雑に操作すれば中途半端な所で止まるよ
趣味の電子工作なら別に対策しようがしまいがどうでもいいけど そもそも、
作る物を何も知らないのに
ロータリーエンコーダーを突然すすめること自体がおかしい >>659
>別に力尽くじゃなくたって雑に操作すれば中途半端な所で止まるよ
普通に使っていれば、クリック位置からズレた変な位置で止まったりはしないよ。
オシロのロータリエンコーダを良く回すけど、クリック位置以外で止めるのは至難の業だ。
「雑に使っていれば変な位置に止まる」の「雑に」の定義がよく分らないけど、
私が書いた「普通に」も定義が難しいなw
金を貰うという点がプロとアマの根本的な違いであり、
プロの仕事は厳しい、という事は否定しない。
でも、よくこんな仕事やって金が取れるな、あるいは、手を抜いたな、
仕事に対する誇りは無いのか、と思うプロも中にはいるよ。
アマでも中には良いものを作る人もいる。
あなたの上から目線のイヤミな書き方が少し気になっただけ。
>趣味の電子工作なら別に対策しようがしまいがどうでもいいけど
これはその通りだな。
異常な動作に対して対策しないのは感心しないが、対策するかどうかは本人の自由だ。
プロなら放置は許されない。
>>660
私は >>649 の
>「回したときだけ動く」と言う処理に最も向いているのはロータリーエンコーダです
という考え方に対して同意したのであり、ロータリエンコ−ダを推薦したわけでは無い。
Arduinoファンの皆様、関係の無いつまらない長文レスを続けて済みません。
これで終わりにします。 使ってるうちにクリックがヘタってエラーが出やすくなるんだよな。 初心者熱烈大歓迎質問スレと書いてあるから来てみたが何か聞く雰囲気ではなかった
FacebookやGoogle+に行きますさようなら すみません
別の可変抵抗器を買ってきたら触ったときだけちゃんと動いてくれました。
手元にあったのが腐ってたようです。 >>667
おめ。
問題の切り分け方法についてちょっと考えてみてね。
後々楽だからさ。 >>667
動き検出の部分だけでいいからソース見たい >>663
これを知った時に疑問に思ったのだがどういう用途に使うんだろ? 普通にUIに使われてるしメカに組み込むのにだって需要があるだろ
むしろ何で使わないと思えるのが不思議 >>671
ググると無線のVFOにノンクリックが良いらしいけど、この品物は回転が
渋いらしいね。
クリック有りのものからバネを外した方がスムーズに回って使いやすいとか。 ↑
HF用だといいかも
v/u用だとクリックあったほうがいい >>674
FMはクリック有り
SSBはクリック無しがいいな ノンクリックのロータリーエンコーダーで回転数検出とかには使えるの
クリック感無くとも調子こてい回転させるとすぐチャタる構造だったりする? モータ軸に付けて位置や速度のフィードバック自動制御に、
などの用途ではすぐに接点が駄目になるだろうし、
操作パネルにつけて手で回して操作量を決める、
という用途ではクリックで停止位置がハッキリしている方がいいだろうし、
(読み取りプログラムも簡単になる)
と、このクリック無しエンコーダの用途が不思議だった。
早く回すためにはクリックが無い方がいいのか?
回転量(パルス個数)を気にしない用途なのか?
あるいは、逆にある程度ブレーキが効いていて、
H/L境界で停止してもパラパラとH/Lが変わることが無いのか?
ウム、今度秋月で1個買ってきて調べてみようっとw 身の回りの家電じゃアンプの音量ダイヤルがクリック感の無いロータリーエンコーダーだな
回転抵抗高め
コントロール側はクリック感有り抵抗無し
アナログ時代のボリュームを意識してるんだろうけど使い辛いだけだ >マウスのホイールも両方ある
そうそう、前に使っていたマウスだけど、
クリックがユルユルで、回転停止後にぽろっとが動いたりしてめちゃ使いづらかった。
分解してホイールのクリック用極小バネを強化したら、何とかOKになった。
クリック無しのマウスは使った事が無い。 今の電子レンジにもロータリーエンコーダが付いてるね 沢山のレスありがとうございます。
ロータリーエンコーダーだと、ボリュームの様に7時〜5時って感じで動く範囲が固定されていないし、(MIDIも127段階とは言え)ロータリーエンコーダーだとカクカクした動きにしかならなず、
また12時の位置にセンタークリックがほしいけれど、そういうことも多分出来ないだろうからロータリーエンコーダーは違うかなと思いました。
そもそもロータリーエンコーダーを使うなら市販のMIDIコントローラーで十分間に合いますし。
それか、動く範囲がボリュームの様に7時〜5時のロータリーエンコーダーって存在するんでしょうか?
>>656
見直します。
>>657
シリアルモニタがひらけないので、ファームを元に戻す方法を調べて確認してみようと思います。
>>668
先週買った可変抵抗器だからまさか壊れているとは思いもしませんでした。
複数個買っておいたほうがよさそうですね。
>>670
単純にこう書きました。
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
int LED = 13;
int cc = 0;
int AnalogValue = 0;
int lastAnalogValue = 0;
void setup() {
MIDI.begin(1);
MIDI.turnThruOff();
}
void loop() {
AnalogValue = analogRead(0);
cc = AnalogValue/8;
if (lastAnalogValue != cc) {
MIDI.sendControlChange(16,cc,1);
lastAnalogValue = cc;
}
}
>>667
667では触ったときだけ動いたと書きましたが、新しい可変抵抗器でもやっぱり触っていないのに時々MIDIの数値が上下に細かく動いてました。
先日新しく買った可変抵抗器のどれも時々細かく動いてしまいました。 analog read がブレてるんだろうね
ボリュームはAカーブとBカーブがあるけど Bカーブでいいけど
そこまでぶれるかな疑問?
電解コンデンサーでもいれてみるか 1 - 10uFくらいの どうでもいいけど
Bカーブって表現嫌い
カーブじゃなくてリニアだろっていつも突っ込みたくなる A接点、B接点この表記はすかんね
設備系じゃないからかね
メーク ブレーク NC NO >>680
今使ってるLogicoolのM705というマウスはクリック感がないばかりでなくフライホイール
になっている。
ホイールを勢いよく回すと7秒間くらい回り続けて一気にスクロールできる。
たまにぽろっと動くという欠点は確かにあるけどスクロールの快適性には替えられない。 エンコーダならA相B相 ボリューム(=ポテンショ)でリニアといったら回転じゃない直線形状のものを
指す場合も多いからBカーブでヨロ スライド式をリニアというのは聞いたことが無いが
テーパーがリニアは普通に使う >>693
カーソルを移動して、[No]を押した瞬間にポイントが1行ズレて、[Yes]を押してしまった、
なんて事が起きて、怖くなってユルユルのクリックは止めてしまった。
ただし、ユルユルのクリックとクリック無しのマウスは似て非なるものかもしれない可能性はある。 リニアポテンショ 約 24,400 件 (0.49 秒) テーパーリニア 約1,210,000件
リニアテーパー 約1,100,000件 linear potentiometer で画像検索してみたら、>>694に納得した。 >>702
A0とGNDに取り付けるかなあ。
なるべくA0の近く。
5VとGNDにも付ける。
複数回計測したのを足し上げて平均する。
電源を電池にする。
とかもやってみる価値あり。 どんなにハードやソフトでノイズを消しても
ソフトによるヒステリシス処理は必須ですよ
MIDI値の境目にボリュームが止まったらダメなので >>702
回路間違ってる。
Arduinoに使われてるATMega328PのA/Dポートの入力インピーダンスとボリュームの抵抗値(10KΩ?)は知らないけど、入力インピーダンスはボリュームの抵抗値より充分に高いと仮定する。
まず今付いてる抵抗と横向きの青線を取り外し、その青線が元々繋がってたボリュームの中央端子に10KΩ(赤黒橙)の抵抗(のリード線)を繋ぐ。
その抵抗のもう一方のリード線を縦の青線の下側に繋ぐ。
その青線と黒線の間に数μFのコンデンサを入れる。
これで簡単なローパスフィルタ回路になる。 ハードのフィルタは必須じゃない
どうせソフトのフィルタを通すだろうから
保護用に軽く抵抗を挟んで置くだけで Oooops!
>>707
今付いてるコンデンサも外す。 基本的な回路はこんな感じで。
A/Dコンバータの入力抵抗は基本的には高いけれど、一般的に内部の等価容量(※)に
変換開始にチャージが発生するので、その瞬間は電流が流れる。可能なら外部のコンデンサを
A/Dの入力端子にぶらさげておくのが良い。電源パスコンが、ICの急激で短時間の大きい電流
をまかなってくれるのと、はたらきは似てるかもしれない。
俺が好きなソフトウェアLPFは
k=0.1
val=valold*(1-k)+AD変換値*k
valold=val 普通の1次のローパスフィルタですね
kは値に理由がないなら
m/2^nの形にしておくと計算が速いよ
移動平均の方が良く使われる気がする
アホでもイメージしやすく、
整数演算にした時の失敗も少ないからって理由だろうけど >>708
本件のようにほぼ直流みたいな周波数ならともかく、
交流信号のサンプリングだと、ちゃんとハードウェアのフィルタを作っておかないと
デジタルでは取り切れませんよね… Arduinoを初めて1週間の初心者です
1時間に1回センサーから値を取得する というスケッチを書きたいのですが どのようにしたらいいかわかりません
delay(1000)を3600回繰り返せばいいのでしょうか
どのように調べればいいかも分からないのでそこから教えてくれると幸いです time(NULL)でとってきた値が秒単位なので過去との誤差が3600になったら1時間経過したことになる
コイツをうまく使いこなせ ずっと「0」です! 値が読み取れません!
#include <time.h>
time_t now = time(NULL);
Serial.println(now); ああ、適当に書いたけどダメらしいな
DateTime.h に DateTime オブジェクトがあるからコイツでやると
DateTime.Hourの値を監視すれば良いのだろうとおもふ #include "LowPower.h" //ライブラリはこちら→ https://github.com/rocketscream/Low-Power
int loop=0; //ループ変数
int data=0; //アナログ入力の変数
void setup() {}
void loop() {
data = analogRead(0); //A0ピンから入力読取り
while(loop<450) //8秒間スリープ x 450回 = 3600秒(1時間)後にループから抜ける
{
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); //8秒間スリープ
loop++;
}
}
※整形するために先頭に全角スペースが入ってる行があるから消して
スリープ仕様だけど、こんなんでどうでしょ? >>722
ありがとうございます!
このスケッチの通りにやったらうまくできました >>722
横からですが頂きます。勉強になります。
このような有用なサンプルコードがまとまって置いてあると凄く助かるんですけど。。。
何処かにありますか? リンク集でもありがたいです NanoのVinに+12Vを繋げて大丈夫ですか?
カタログスペック的には大丈夫そうなんですけど
+10Vまでにしておけって記事もいくつかあったので
Nanoとそれに繋ぐ周辺回路の消費電流が少なければ平気でしょうか >>704
MIDIの受信側の機器はPCなので、USBから電源を取っています。
PCとはUSBで繋ぎつつ、DCを繋ぐと電源はDCからとるしくみになってることは分かったんですが、USBのバスパワーを完全にカットする方法もありますか?
>>705, 707,710
全然違っていました汗
>>706
>ヒステリシス
可変抵抗器の最小の位置(または最大の位置)から回し始めたらMIDIの受信側の機器ではすぐには数値が動いてくれず、しばらく回すと反応してくれます。
こういうのもヒステリシス処理を行えばすぐに反応してくれるんでしょうか?
>>707、710
数μFのセラミックコンデンサが売っていないのでアルミ電解コンデンサでも構わないですか? GPSモジュール繋げて、簡易トリップメーターみたいなのを作ろうとしたら、意外にメンドウだった。
1秒おきに緯度経度が得られるんだけど、よく考えたら距離的な座標ではないので変換しなきゃいけないんだ… ■ このスレッドは過去ログ倉庫に格納されています