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/ 割り込み試してたらどうしても想定通りの動きをしなく、悩んでたらvolatile型だった
AVRの様なしょぼいCPUでもこんな事が問題になるのね >>23
それはCPUの問題じゃなくてコンパイラの最適化の都合ではないかと。 >>24
マルチスレッドやキャッシュで問題が出る様なイメージだったんだ >>18-22
ありがとうございます。
勉強不足でなかなか難しいので、ひとまず回路を真似してみようと思います。
動かしてみて不都合が発生したときはまた教えてください。 >>23
能力がしょぼくても、汎用レジスタがある程度の数あるから
グローバル変数がある期間レジスタに乗せられたんだね。
まあ、gccを-O0以外で動かせば十分あり得るね。 >>3の質問をした初心者です
いまaitendoから出ているesp32が搭載されているarduinoを使用しようとしているのですが
get.exeというアプリケーションが作動しません
どうしたらよいですか? 開発環境構築の途中の話なのか知らないけど
ネットに繋げてないか相手が落ちてるんじゃね? >>28
「>>3の質問」とは?
どの商品なのかリンク貼って
get.exeって何? >>28
この手順のとおりやってるんだよね?
https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/windows.md
get.exeが「作動しない」ってのは、ダブクリしてもなにもおきないってこと?
それとも、ダブクリすればウインドウは出るけど、ダウンロードが進まないってこと? モーターの回転数制御て中々難しいね…特に低回転時
回転センサーの割り込みの中でやると負荷で停止した時に次の割り込みが発生しなくなって完全終了、
loop中でやるとどうもギクシャクするんで、基本割り込みの中でやってloopでも想定時間の2倍経っても
割り込みが発生していなかったらやや加速してみる様にしたけど、何か違う気がする
普通は全てloopの方でやって、頑張ってギクシャク感を無くす物なのかな 何をどうやってるのかさっぱりだけど、思い付きで無責任なアドバイスしてみると
タイマー割り込み使うとか・・・ それはまあループ中というのと同じことだろうが。
とりあえず、最低動作電圧を高めに設定して不感帯を突破しないとね。
RCサーボの制御を見てると、昔からうまいことやってるなとわかる。 >それはまあループ中というのと同じことだろうが。
まあ、それはそうなんだけど、割り込みとloopと2本立てみたいになって
無用に複雑化するのは避けられるかとw
33がやりたいことが、書いてる通り「回転数制御」だとしたら
慣性負荷が小さくて低回転という条件ではなかなか難しい
もう少し具体的に環境を書いたら、その道のプロの助言がもらえないかも http://codepad.org/P0B2uc2B
割り込みの所だけ
何か式がどんどん肥大化して割り込みの中でやるレベルじゃ無くなってる気がする 割込みでなにかやる必要はないよ
基本的には定期的に現在値と目標値の差を取ってPIDすればいい
不感帯に隠れる小出力はIでため込んでやればそのうち動く。 UNOの5Vと書かれているところから出る電源はDVDDですか?AVDDですか?VCCですか?VDDですか? >>38
重箱で恐縮だが「定期的」な値の取得はループじゃなく割り込みでするのが理想では? センサ割り込みは速度計算だけやって、タイマ割り込みで定期的に出力を計算するのがよい >>38
周期が一定しない場合、loop() で同じ処理を継続していても実質的に制御の
定数が変わっているのと同じになりますし、状態の取り込みと出力は、割り込みに
もとづいた時間生成が必要になるのでは? loopでdelay(1)とかやるんじゃないの?
定期的かどうかはオシロで見ればすぐわかるんだから、もしダメなら自分でtimerでもなんでもどうぞ
ちなみに割込みはフラグ立てるだけにしておくと楽だよ >>44
割り込み内にほぼ全ての処理があって、メインループすっからかんって俺のこと? そう言えば割り込み内でグローバル変数を弄る場合、メインの方でそのグローバル変数を読み書きする場合
noInterruptsをしないといけないのでしょうか
マルチスレッドの場合はクリティカルセクション等の排他処理でも空くのを待てますが、シングルスレッドの
割り込みだとメインが止まってしまうので待つも何も無いですよね
noInterruptsで割り込みを止めると割り込みの取りこぼしが起きそうで、変数の読み書きミスと取りこぼしの
二択を迫られる様な? まあ、「loopでdelay(1)とか」だと普通は一定周期処理にならないから
micros()で時刻取得して一定周期になるように調整するんだけど
どっちかっていうと、timer割り込みよりも高等テクニックかも
折衷案としては、44が書いてるようなtimer割り込みでフラグ立てて
loop内でそのフラグ見て処理するみたいな感じかな
割り込みの中はデバッガーで追いにくいから、最終的には割り込みの中に
入れるとしても、開発中はそういうふうにしたほうがいいかも
(arduinoだとあんまり関係ないかもだけど) その為のvolatile宣言
RAMに格納されていてその度にロードされるからもし衝突しない
最大限に運が悪くても単に一つ前の値をメインループ側が取得するだけ、でいいよな多分 loop()でいろいろやってもdelay(1)だときちんと1msごとに回る俺の環境は特殊なのか?
まあこういうのはモノによって挙動が違うかもしれないので、ちゃんと確かめよう 色々やった後にそこで1ms待つんだから1msで回ったらおかしいんじゃない >>49
loop()
{
delay(1);
ナンチャラ処理
}
普通に考えて、ナンチャラ処理の時間が余分にかかるのでは?
まあ、ナンチャラ処理の時間が数10usecくらいだとオシロで見てるだけでは
気づかないかもしれないけど >>46
noInterrupts();
割り込み関数でセットした変数から、別の変数へコピー;
interrupts();
別の変数を料理;
このとき、noInterrupts()〜interrupts() の間に発生した割り込みは待たされて、
interrupts() のあとに実行される、はず。はず。ずっとそう思ってやってきたけど違うのかな?
心配されているのは、待機が発生するぶんだけ、割り込みハンドラの実行にジッタが発生する
ことですかね。これはそのとおりだと思います。
バイトデータ1個なら、こんなことをしなくても、メインからは普通に読むだけで良いわけですが。 >>48
volatile はたとえば、参照だけを繰り返す変数リード処理が、最適化でなくなってしまわないようにするためのものでは?
だからこそ volatile なんて名前なのですし。 >>50 (モノによるとおもうが)delay()から返るのは1msごとのタイミングに正規化?されている
あれ?delay(0)だったかな、いま手元にコード無いから確かめられない
オシロでタイマの出力と並べてみればわかるよ。 >>48
AVRの場合16bitとか32bit変数のアクセスは、マシン語レベルでは複数個の
8bitメモリアクセス命令で実行されるから、途中で割り込みがかかる可能性がある
例えば、メイン側読み出し中に割り込み側で新しい値を書き込んだ場合
単に一つ前の値が読みだされるとかじゃなくて、下位バイトは古い値で
上位バイトは新しい値とかなってめちゃくちゃになる
そういうことが起きないようにするには、一時的に割り込み禁止するか
2回続けて同じ値になるまで読み出すループを作るとかしかない >>55
なるほど!
int a,b,c;
do{ a=ga; b=gb; c=gc } while(a!=ga || b!=gb || c!=gc);
こんな感じで良いのかな >>54
Leonaldoで試してみました。
loop(){
delay(1);
180us相当のソフトウェアループ;
ポートのトグル;
}
ループの実行時間は、ソフトウェアループのぶんだけ長くなります。
ソフトウェアループをコメントアウトすると、ほぼ1msになりました。
(実際にはポートのトグルや、loop()呼び出しに関わる時間分長くなっているのではないですかね) >>57 すると俺のいじってるのがたまたまそうだったというだけなのだね すまない、ARMのsystickとごっちゃにしてしまったかも。 >>58
うーん。そんな違いってあるんでしょうか。
ということはですね。
loop(){
delay(1); //前回の待ちたいから書いた
処理A;
演算処理;
処理B(次回の処理Aのための外部回路の設定)
}
なんてふうに書くと、期待するところは、
処理Bでの影響が落ち着いてから処理Aが発生する。
なのですが、
Arduinoのモノによっては、
たまたま演算処理が長引いたときには、処理Bと処理Aの間隔が短くなる、
ということになります。
これ、いやーな落とし穴な気がします。
Arduinoの種類は何なのでしょうか。 あ、すみません。>>59を見ないで>>60を書き込んでしまいました。 >>56
まあ、よほどの特殊事情でもないかぎり割り込み禁止ですませると思うのですが^^;
int ga,gb,gc; に volatileつけるの忘れずに、ですね >>46
booleanフラグなら1命令、禁止いらんと思う
実質的な作業をメインでやれば、万が一時間オーバーしてもなんとかなる
ような作りにしやすいし、5RJujcjs氏の言う通りデバッグも楽 >>56にして先頭に加算カウンタを入れてカウンタが2以上ならエラー表示する様にしたら
かなりの頻度でエラー表示されててびっくり
loopでやろうとするとぎくしゃくするのはこれが原因だったんだなぁ たかがAVRの数Kバイトのプログラムなんだからフルアセンブラでやれば?
あいまいなところはキッチリ無くなって、何もかも手の内に有り思いのままに操れるよ。 >>40
見てみました
VCCと言うことは分かりました
でも調べてもDVDDかAVDDかわかりません
教えていただけないでしょうか? >>55
それは初めて知った
メインループと割り込みでの優先順位程度なら大丈夫だろう程度の知識でレスして申し訳なかった
訂正してくれてありがとう
>>65
ルールさえ理解すれば書いたとおりで動くのに、これから先ずっとデカイのもアセンブラで書くの? >>65
アセンブラでi2c処理キレーに書ける?
Arduinoのよいところはそういうのもお気軽な(深みにはまらないとは言ってない)所かも。
ただ 10時間くらいで学習できるならやってみたくはある (現実は多分そうではないかも) >>65
それ、アセンブラと無関係。
そんなこと言ってると、他の言語は使えない人と思われちゃうよ。 >>66
Arduino UNO3には正規品でもいくつかの回路図が出ています。
とりあえずこの回路図で。
https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
(VCCとVDD および AVCCとAVDDはここでは区別していません)
DVCC(VCC)かAVCCかは右側のメインCPUのピンでの呼称の話をされていますよね?
この回路図を見ると両者は繋がっています。たぶんパターンでも特別な工夫はないように思います。
つまり、この基板を使う限りは、DVCCとAVCCを分けて考える意味がありません。
俺の手元にあるUNO3の回路図(正規品 3e)には一つこの接続が違っているものがあり、
それは、図のようになっています。この場合は、+5VのラインはAVCCではなくVCC(DVCC)であると
言えるでしょうね。(でも、俺の手元にあるUNO3基板に、こんなコイルはないのです)
Arduinoってマイコンボードのことだけじゃなくて、C++ベースの開発環境こみこみの概念ですよね。
アセンブリ言語の話題はAVRスレの方が適切ではないですか? https://youtu.be/DnMkno6DhVo
12V電源に繋いで試してみたらわりと安定してきた感じがする
arpmが1秒平均、lrpmが直近の1/8回転の回転速度 nowpowがPWM
指離した直後に回転数が上がってしまうのはブレーキ回路?があるわけじゃないから仕方無いと思いたい センサーなどのモジュールを、Arduinoの5VピンとGNDにつなげると、
PCからUSBの切断音が流れて、Arduinoがリセットされます。
Arduinoが故障してるのでしょうか?前はこんなことなかったのですが。。。 そのセンサーはほんとに5VとGNDに直結して良い物なのか >>74
はい。
今、LEDを5VとGNDに繋いでもUSBが切断されました。。。
内部のどこかでショートしてるのでしょうか・・・ >>75
ショートというか、5V-GND間に流れる電流で、5Vが電圧降下を起こしてるように見えます。
念のため。
その繋いだLEDには直列に抵抗は付いてますか?
その上で、
使っているArduino基板の名前は?
Arduino基板にセンサーを繋いだとき、+5Vのラインは実測して何Vになっていますか(測定器の名称も書いてください)
DCジャックから電源を供給してますか? 給電はどんな電源?(電圧、電流容量、できれば型式)
それともUSBからだけで給電してますか? >>77
電源はUSBからだけです。PC電源はKEIANの安物なのでPC側の問題なのかも。。。
さっきはLEDに抵抗を付けてませんでしたw
抵抗をつけるとリセットはされないですが、Blinkのスケッチを書き込んでたのですが不規則に点滅します。。。
ArduinoはNanoで、素のままで5VピンとGNDをテスターで測ると3.12V、センサーをつなげると2.98Vです。
電源供給が原因?かも。バッテリーに繋いでみます。 >>66
そこまでキーワード出てんなら、このスレを見てる機械で検索した方が良い。 たぶん電源かUSBケーブル関係だと思います。
「電圧降下」のヒントを与えて頂いてありがとうございました! arduino yunを用いてFTP通信を行うためにサーバーを作成しようとしているのですが、FTPツールが見つかりません。
vsftpのようなものは用いれないのでしょうか? >>81
猛烈に質問範囲が広くなっちゃってて 門外漢だが エスパーってみる
https://forum.arduino.cc/index.php?topic=256107.0
ここの#9さん (sonnyyuさん)みたいに
pythonでrootとって 直接書いてはだめなのですか。
大事なことなのでもう一度いいます rootとってください。
深い理由はありませんがrootとらないと 多分こけます。 任天堂の段ボールピアノ凄いと思ったんですけど
カメラで複数の対象を個別に認識するってのは
arduinoで再現する方法はありますでしょうか
ご教示願いたく スケッチによって書き込める場合と、書き込めない場合があるのはなぜ?
スケッチ例のBlinkだと書き込めるのに。
普通は書き込み中にTXとRXのLEDがパタパターーーっと点滅するけど、
パタパタ・・・で終わって、IDEは「書き込み中・・・」で止まったまま・・・ あら、Blinkも書き込めないわ
Arduinoがぶっ壊れたのかな USBケーブルって電源とGNDしかつなげてないのあるね。
ChromeCastの附属ケーブルがそうだった。 Ardiuinoの電源用に電池ボックスとUSBコネクタ買って作ってるけど、
既製品でもあるのか 百均とかコンビニに置いてある、ケイタイの充電器(乾電池タイプ)っていうのが
それじゃない? あぁそう言えばそうかぁ
ArduinoのBタイプのもある? 付属ケーブルが標準のBタイプとかはないと思うけど
充電器っていうか電池BOX側は標準Aタイプだから手持ちのケーブル刺せばいいだけ
もっとも、百均ではもう見かけないような気がするし
Liイオン電池のを300円とかで売ってたりするから、それ買うほうがいいと思う なるほどね
そうかケーブルで変換できるよね
Li電池は持ってるけどRaspberryPiに使ってた
これも使えるか ありがとう http://arduino.umemoto.org/home/blood-pressure-sensor-mps20n0040d
このMPS20N0040Dと言う血圧センサーを使った事のある方いらっしゃいます?
https://images-na.ssl-images-amazon.com/images/I/61g2b96d4ML._SY355_.jpg
この形状でどうやって血圧計るのかイマイチ解らないのですが、この突起部分を
単純に腕に押し当てても血圧なんか計りようがありませんよね…
市販の血圧計の様にチューブに空気を入れて圧力を掛け、圧力の僅かな変動を
検知したりの大掛かりな装置が居るのかな 使い方ワカランモノを手に入れても後々宝の餅腐れになるだけやぞ(実体験 両方必要
昔からのは心拍センサーの役目を聴診器と耳でやっていた 圧力センサーは水銀柱、エアーポンプは手でしゅこしゅこ アマゾンで手動ポンプディジタル表示の血圧計\2000位で売ってるから
それ買ってばらすなりして研究しろ
A&Dのやつ
(最近血圧高いと言われたので買った) 血圧測定はよほどの簡易(手抜き)方式でなければコロトコフ音の解析がキモだから。
単にコロトコフ音の有無では判定(最大、最小)出来ないから。
自作で意味のある測定はまず不可能だよ。 自動のディジタル血圧計ならaliexpressで1000円程で買った
家庭用の安価な血圧計ならコロトコフ音じゃなくて脈波を利用したオシロメトリック法が一般的だったと思う 自分は逆に血圧が低すぎてナチュラルにブラックアウト寸前な状態で、
目が見えなくなったりするので常時モニタリングして不味い水準になったら
アラーム鳴らせたり出来たらなと思ったんですが難しそうですね 血圧常時モニタってどうやるんだろう
カフを常時、圧の上げ下げやるのか?
>>104 医者に行ってるだろうけど
上げる薬飲んでる?
深煎りすると医療スレになっちまうか 直接法でも計れるみたいだから、インプラントが発展したらイケるんじゃないの >>105
>>98の下、愛知県立大の教授は心拍センサーでの常時モニタリングを目標としてるみたいです お邪魔します
arduinoからATmega328のマイコンだけ抜き取って3.3Vで16Mhzで動かすと(本当はダメなんですけど)I2C通信はきびしいですか?
LCD位は表示するんですが
やっぱり8Mhzに落とすかしないとダメですか?
CCS811をつなげてます ダメって何がダメ?
データシート見ると3.3Vでも16Mでmega328は動作する
I2Cの速度も上がってCCS811が付いてこれないというなら
そのあたりはソフトで調整してやればいい
(ライブラリ見てウエイト突っ込む) >>109
>データシート見ると3.3Vでも16Mでmega328は動作する
ATmega328/Pのデータシートではこうなってるのでは?(赤色は俺が追加したよ)
返事ありがとうございます
クォーツ8Mに交換しても動きませんでした
違うところに原因ありそうなので、もう少し自分で頑張ります >>110
ああそういうことか
サマリしか見てなかった すまん
でもグラフの下部はメーカ保証値みたいなもんだから
オーバクロックで動きそうなものと思う
(CCS811が3.6Vmaxなのね)
8Mの速度で間に合うならそれがいいよ I2Cなんて100k〜400kHzくらいなんだから多分ちゃんと信号線吊ってないとか
そのセンサを使ったことが無いし、動かないと言うのが有効なデータが取れないのか通信そのものが無理なのかどっちかわからないからアレだけど 48時間のエージングと20分のウォームアップが必要とかAVオタみたいだな。 108です
CCS811の件ですけど
arduino UNOにつなげると上手くいきます
センサーがsparkfun製のモノでして、Hookup Guide通りに接続してソフトもGitHubで拾ってちょっとLCDつなげる改造して動きました
ただarduinoからでているI2Cクロックとデータラインが5Vですよね
本当はここに5Vと3.3Vの変換が入るはずなんですがそこが疑問に思ってて
Hookup Guideもその様な結線図になってます
あーオシロ欲しいお金ない頭痛い >>116
I2Cがオープンドレインなので、CPUの5Vラインからセンサーに流入してくることはない。
UNOの 328PはHが VCC×0.6 なので、3.3Vでプルアップされていれば問題はないかな。 I2Cぐらいの電圧になると、1chのオシロキットだと力不足になりますね。悩ましい。 あ、問題無いんですか
いいこと聞いた
これでケースに組み込みします
素晴らしいセンサーでした
歯が痛い原因が換気不足なのが分かりましたし
ありがとうございます >>118
オシロの1chと2chの差は大きい。
2chあれば「波形の比較」が出来るので。
彼女が一人いるか二人いるか、の差より大きいと思うw 彼女が二人いれば「波形の比較」は出来なくても
他の色々な点を「比較」が出来るから
オシロの1chと2chの差と同じなんではw ■ このスレッドは過去ログ倉庫に格納されています