Arduino初心者熱烈大歓迎質問スレ part23
■ このスレッドは過去ログ倉庫に格納されています
Arduino Leonardo ETHでサンプルのWebServerを書き込んで使ってみたんですがシリアルモニタを開かないと何故かLANで通信できません 試しにモバイルバッテリーに刺してみましたがやっぱりLANで通信できませんでした 対処法無いでしょうか? >>646 シリアルの応答を待ってるとか? シリアル関連をコメントアウトしてみたら? >>647 シリアル関連消したらできました Leonardoは色々不便ですね もう一つの質問ですが W5100のチップではEthernet.hが使えてEthernet2.hが使えなくて W5500のチップではEthernet.hが使えなくてEthernet2.hが使えるのは仕様ですか? >>648 直接USBでPCにつなぐとUSB機器のように使えるから便利なんだけど UNOとコンパチでは無いので使い慣れないと面倒だよね 優先度の高い割り込みハンドラ実行中に割り込み許可したら、優先度の低い割り込み入って来るよね? 割り込み優先度って、割り込み許可されたとき、それまで保留されてた割り込み要求を、どの順に処理するかってことでしょ? >>652 だよね。ちょっと不安になって書き込んだ。 サンキス 古いウォシュレットのリモコンが壊れたので、 Arduino UNOでリモコンを作りたい(動作と停止のボタン2つのみ)のだが 乾電池駆動の場合、どのくらいの間使えるかな? 実際にリモコンを作ってる人がいたら教えて欲しい あとAliexpressで買った激安品だけど火を噴く心配はどうだろうか? sleepを使ってボタン押した時だけ動作150mA x 2秒 とすると 乾電池1200mAhで14400回ボタン押せる 1日10回なら約4年使える --- LEDに流す電流とか電池要領考慮して↑のように計算してみればいいじゃん 自然放電は考慮しなくていいと思う Unoはスリープしても消費電流が絶望的だから他のマイコン使ったほうが良いと思うけど https://www.gammon.com.au/power SLEEP_MODE_PWR_DOWNで10mAも食うのか… >>659 あぁ、そう言うことか。 便座横のリモコンかと思った レスありがとう UNOで作ってる人があまり見つからず実態がわからないんだわ とりあえず安かったしメモリ容量を気にせず動くマルチリモコンがすぐに作れたから魅力的なんだけど実用で電池で使うとなると厳しいかな? 中古で学習リモコンでも買ったほうが良いかな >>658 普通はループにするんじゃないかな? 仮に、UNOの電源を入れたらON/OFFのIR飛ばす場合、物理的に二台必要になる こっちのほうが良いのだろうか? やったことはないけど、IR発信までにタイムラグが生まれそうだし頻繁なON/OFFに耐えられるか分からない >>660 便座横のリモコンを作ろうと思ってる 他にも部屋のシーリングライトとかも >>660 いや、すまない。 >古いウォシュレットの が目に入らず勝手に赤外線リモコンだと思い込んでた。 有線かもね。 >>662 まずは電源を気にせずUNOでリモコンを作る。 出来たらATmega328P単体で動かすように工夫する。 この段階でも電源のことは後回しで最低限のパーツでの動作を考える。 実現出来たら、スリープとかクロックとか省電力を考える。 私ならこういう手順かな。 でないとモチベージョンが維持できない。 ATmega328Pにいくつかの部品付ければチップ単体で動作するから UNOをスケッチ書く母艦にして開発すればいいんじゃないかな チップ単体ならPWR_DOWNで0.1mAみたいだよ ちなprominiが0.7mA(LED除去で0.3mA) >>654 赤外線リモコンを作る前提として、 UNOはマイコンをスリープにしても、マイコン周りの電気を食いすぎるので、使えないに等しいよ。 単三アルカリ3本で1〜2週間くらいしか持たないから。 もしスリープじゃなくて毎回電源を落とす場合は、UNOはブートローダの関係ですぐに起動して使える様にならないので、それも実用にはならんかと。 それに激安の互換機は安全マージンとか保安周りが無いに等しいから、常用はちょっと… 解決策としては、持ってる激安UNOで開発したあと、マイコンとかの部品を購入して、ユニバーサル基板に組み立ててICSPでプログラム書いてつかったらどうかな? もちろん保安部品マシマシで。 秋月で全部揃えても800円くらいで済むと思うよ。 >>663 赤外線のリモコン 一応USB接続したものはPythonからSerial通信で部屋や液晶の明るさとかに使ってる ただUSB電源だから電力とかはあまり考えたことがない >>664-665 ごめん 中国の安いやつだから多分チップだけは取り外せないと思う https://www.aliexpress.com/item/high-quality-One-set-UNO-R3-CH340G-MEGA328P-for-Arduino-UNO-R3-NO-USB-CABLE/32697443734.html とガンダムっぽい絵が書いてあるものを持ってる >>666 1年は持って欲しいと思ったけど厳しそうですね 送料込み3ドル弱のものを使っていますが、USB でも火吹くことありますかね? 一台だけPCに接続して液晶や部屋、スピーカーなどの制御に使ってます。 >>666 毎回ブートする場合、おおよそ何秒くらいかかりますかね? また、そもそもUNOを壊す可能性はありますかね? >>667-668 ブートローダの起動は1.5秒、arduinoとして動作するのに必要な時間です。 起動時間を無くすには、マイコンだけ取り出してICSP等で直接プログラムを書けば解決できます。 そして、USBでも火は吹かせられます。 1Aでも良いから、いくつかヒューズ入れるとかすれば、だいぶ良くなると思いますが… 激安じゃないUNOなら、最低限のリセッタブルヒューズが入ってます。 >>668 書き忘れた。 リモコンとして何回ブートを繰り返しても、基本的には壊れませんが… 赤外線リモコン作ったことあるけど、すこし離れるとすぐ動作しなくなった。 そんなもんと諦めてたが、 市販品はledをかなりオーバードライブしてると後から知った。 去年ウォシュレットが水漏れして買い替えたから古いアプリコットのリモコンが余ってるw >>671 赤外線LEDは、データシートに『点灯させっぱなしの場合』と、赤外線リモコンのような『パルス点灯』で流して良い電流が違ってる事が多いよ。 で、定格50mAの赤外線LEDは、パルス点灯で1Aくらい流せると書いてある。 もち、マイコンから流せる電流じゃないので、FETでドライブするといい感じ。 照明のリモコン作ろうと画策していて、検索してみたらそれっぽいページが出てきたりしたよ pro miniのパチモンを使ってた気がする >>669-670 快適とは言えないけど思ったよりも早いんですね。とりあえず作る意欲が湧いてきました。 チップを外してもその後の難易度が高そうなので今回は断念 ATmega328Pだけでも200円位 UNO3ドルで送料込みは激安で多分安全機構は入ってなさそうですね USBケーブルを改造してヒューズを入れておこうと思います >>671 3Wタイプなら行けるかなぁーと 弾丸型でも角度を調整すると意外と使えたり・・・ >>672 そっちは直したのですがリモコンが壊れた感じです ただ廃盤らしくリモコンが無く新品購入らしく10万円コース リモコンの信号はバックアップを取っていたのでとりあえずそこから復帰予定です >>673 はっきりしたデータが無かったけど リモコン程度のパルス幅で1Aは厳しいかも https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10151031900 >>674 コードや配列が大きくなったりしたら多分駆動しないし難易度が高そうで敬遠してる 赤外LEDも赤外照明、赤外連続通信、赤外リモコンで平均電流大きく違うからね リモコン用は短いパルスで許容ピーク電流の大きなものがあるはず たとえばhttp://akizukidenshi.com/download/ds/sharp/gl537_gl538.pdf とか Fig2見るとパルス幅とデューティによってはピーク1Aまで 赤外線LEDは抵抗なしでマイコン直繋ぎしたら良い感じに飛ぶようになったわ ネタだろうけど、くれぐれも紫外線LEDではそれやるなよ。まぁ切れる方が早いだろうが… >>679 パルスなら1Aとデータシートにもあるし 市販のリモコンってやたらとよく飛ぶし(反射波利用が当たり前)にネタというわけではないと思うぞ あと紫外線LEDはなんでダメなの? パルス駆動なら定格の倍くらいにしておいたほうがいいんじゃないの? 50mAなら100mAまで 以前可視LEDの破壊試験やってみたことがあるけど 2.0VのLEDに2.3V掛けると強く光る、だけどもうその固体は2.0V与えても 本来の輝度は得られなくなる。性能が劣化したわけだ。 更に6Vで発光素子周辺が黒ずみ、9Vくらいで焼き切れる。 色々実験したLEDは光ってても性能出てない壊れた固体である可能性があるので 定数決定したら新品に交換したほうがいいよ 定電流掛けるわけじゃないからな 温度上がれば同じ回路でも電流増えてくし 2.3Vとか6Vとか9VはLEDによって全然違うだろうけど 破壊段階は以下の段階があると覚えておくといいよ 「性能が上がったように見える」 ↓ 「実は劣化している」 ↓ 「焦げる」 ↓ 「切れる」 壊れた部品いじくりまわしても時間の無駄だからね >>682 その2.3Vかけたくらいで劣化したLEDに試験の際に流した電流値を教えてください。 強い電流流しすぎたら部品が劣化したり壊れたりするから その後動作不良がでていたら交換したほうがよい。 よく気づきましたね! ってのが初心者スレのあるべき姿やろ。なんでみんなで叩いてるの? 今、ここで大事なのは、 どこのメーカーのなんて規格のLEDを使ったのか明確になっていない経験談じゃなくて、 具体的な規格とデータシートから読み取れる事実じゃないかな。 経験談を書きたいのなら、具体的に規格とか電流とか、使用状況を書いてくれた方がみんな助かるよ。 因みに、OSI5FU5111C-40を赤外線リモコンの発光部に使って、1Aでドライブして、1日30回以上駆動して約3年、問題は感じてないよ。 稼働台数は13本、今のところ誤動作なし。 1Aでも普通に使えるのか これは参考になるな ただArduinoだとそこまで電流流せないけどどんな回路使ってる? あと今Arduinoで10Ω噛ましてるけど1Aにすると赤外線の飛びって実用上かなり違う? ×どこのメーカーのなんて規格のLEDを使ったのか明確になっていない経験談 ○どこのメーカーのなんて規格のLEDを使ったのか明確になっていない与太話 30mAとかで出力するアナログセンサあるんだけどこれって直で入れたらやばい? >>693 普通はアナログ出力のセンサー(ユニット)だと電圧を出力するタイプが多いはず。 そのメーカーと型式は何? >>693 電流出力だとラボ用のセンサかな? シャント抵抗で電流から電圧に変換してADCでしょうが、 要求精度、サンプリングレートはどうなんだろ? あ、めんご。5-20mAとかの電流出力ではなくて電圧返す普通のアナログセンサーなんだけどものすごく電流も流れてるみたい >>696 やっぱり電圧出力だったなとは思うが、正確な回答を貰うには具体的なメーカーと型式を知らせないと。 それとも言えない理由でもある? >>696 電流っていうのは負荷があっての電流じゃないかな。 入力抵抗の高いポートにつなげば電圧がかかるだけで電流は流れないと思うんだけど、それとも電流を流さないと動作しないセンサーとか? だったら普通にADCに入力すれば良い。 電流が流れるのは電源とセンサのループだから。 あとはハイインピーダンスの前段バッファが要るかどうか、センサの仕様で決めて 二箇所同時に押せるスイッチってある? 具体的には押しボタンスイッチを押す都度、 乾電池でArduino起動、同時にデジタルピンをONにして指定のコマンドを実行させたい ひとつのスイッチに独立した接点がいくつも入ってるのって幾らでもあるい。 2回路とか4回路とか表記されてる。 こっちのガンダムっぽいUNOでは動いたけど、 https://www.aliexpress.com/item/1PCS-UNO-R3-UNO-board-for-Arduino-Compatible-UNO-MEGA328P-CH340-NO-USB-CABLE/32674142713.html こっちでは動かない https://www.aliexpress.com/item/high-quality-One-set-UNO-R3-CH340G-MEGA328P-for-Arduino-UNO-R3-NO-USB-CABLE/32697443734.html なぜ?問題としては、AC_TOGGLE_SIGNALの配列の41228が入ってるからおかしいっぽいけどいまいち理由がわからない。 #define IR_EMIT_PIN 12 long AC_TOGGLE_SIGNAL[] = {8972, 4520, 540, 588, 532, 172, 540, 1712, 532, 596, 532, 1712, 536, 592, 540, 41228, 8944, 2284, 540, }; void setup() { pinMode(12, OUTPUT) ; Serial.begin(115200); } void loop(){ int duration; unsigned long started_at; Serial.print("S"); int signalLength = sizeof(AC_TOGGLE_SIGNAL) / sizeof(AC_TOGGLE_SIGNAL[0]); for (int i = 0; i < signalLength; i++) { duration = AC_TOGGLE_SIGNAL[i]; started_at = micros(); Serial.println(signalLength); Serial.println(i); while (micros() - started_at < duration) { // i is even: HIGH. i is odd: LOW // keep 1/3 duty, 8 usec. digitalWrite(IR_EMIT_PIN, 1 - (i % 2)); delayMicroseconds(8); // off remaining 2/3, 16 usec. digitalWrite(IR_EMIT_PIN, 0); delayMicroseconds(15); //なぜかここで無限ループになる } } Serial.println("F"); digitalWrite(IR_EMIT_PIN, 0); delay(500); } >>706 文章編集途中で送信してしまった 下記、スクリプトの挙動がUNOのクローンに寄って違うみたいだけどなぜだろう? なぜlong型? 元のプログラムはshortでしょ また、intのdurationにlongを突っ込んでいるのもまずいかな shortで試してみては? むしろ全部longにしたら? 41228は16ビットの符号つきの範囲越えてるんだし >>709 short AC_TOGGLE_SIGNAL[] = {8972, 4520, 540, 588, 532, 172, 540, 1712, 532, 596, 532, 1712, 536, 592, 540, 41228, 8944, 2284, 540, }; にすると warning: narrowing conversion of '41228l' from 'long int' to 'short int' inside { } [-Wnarrowing] とでた。 >>708 そのはずだよね・・・ duration = AC_TOGGLE_SIGNAL[i];の下にこれ追加すると Serial.println(duration); 8972 4520 540 588 532 172 540 1712 532 596 532 1712 536 592 540 -24308 となった。 41228がintでは扱えないから負の数字になって止まるっぽい? アドバイスに従って int duration;を long duration; にしたら動いた。 intの範囲ってこんなに小さかった? チップに寄って違うのかな? いんとの範囲はarduino以前の問題だからしらべておくれやす >>706 Aliで買った2台使ってるんだけど一方では動くが一方では動かなかった だから、arduinoに依存してるんじゃない? >>712 C言語の仕様としては int のbit幅は環境に依存する。 https://marycore.jp/prog/c-lang/data-type-min-max-values/ Arduinoの場合もCPUのbit幅依存性があり、Arduino UNOなら16bit だから 41228 は最上位 bit が1だから負数になってループから脱け出せない。 http://www.musashinodenpa.com/arduino/ref/index.php?f=0& ;pos=1106 ただ同じbit幅なのにクローンに依って違いが出るのは分からない。 むしろオリジナルでも無限ループになるはずだから正常動作したガンダムUNOの方が特異なのかも? Arduino側が32bit幅の int用コードを生成してしまっている? そもそも41228って数値は正しいの? 赤外線コントロールなら、そこを疑ってみるべきかな クローン同士の挙動の違いは、ロードしたバイナリが違う可能性も それが一番アヤしい uint16_tみたいなのビット数きまってるのを使えばそういう悩みは減る >>718 Arduinoの変数型でそこまで指定できる? って言うかクローンとは言えintは符号付き16bit幅のはずのUNOで動く例もあるのは何故? >>719 前半:できる(今時のC++なら普通) 後半:しらん(おかしいよね) 符号無しとの比較は、符号無しに変換されるのでループを抜けるはず。抜けなくなったのはmicros()がロールオーバーしたからじゃないかな? コンパイル時にwarning出ると思うんだけど。 long にしたらなおったってのに、問題はそこじゃないとか言うわけ?? >>722 自分も同感。 longにすれば正常になったけど、intの時は偶然UNOの起動から70分くらい経過して(カウントがゼロに戻り)無限ループになったとすると、もう一度リセットして直ぐテストすれば正常動作するはずだけど >>706 は一度しか試してなかったのかな? 自分だったら不思議過ぎてガンダムUNOと交互にリセットして何度か比較すると思うけどな。。。 焦電センサーを透明なプラスチックケースに格納したら、全く反応しなくなったでござる >>726 可視光は通す透明だけど赤外線は通さないから? >>727 それっぽい 材質も関係あるかも アクリルケース 携帯のカメラやデジカメは赤外線が映るやつ多いから適当なリモコンを発光させてケースを通したものと通さないものを比較してみると案外わかるかも arduino ideのタブの使い方がよく分からない。.hのファイルでプログラムをモジュール化するの? 同じフォルダに複数のinoファイルおいてあったらタブで出る 他のプロジェクトと共通の関数でライブラリにするほどでもないものを分けておくと便利 参考 https://keitetsu.blogspot.com/2014/11/arduino.html?m=1 ハードオフの100円Wiiヌンチャクと、140円のdigisparkでヌンチャクマウスが出来た analogReadから読み取った値に従ってLEDを点灯させるという実験をしていてpow関数の扱いでつまづきました。 int a = analogRead(A1); int b = a / 128; int c = pow(2, b); A1には5Vをつなぎ、1023という値を得てます。 2行目で7がbに代入され、3行目では2の7乗の128がcに代入される…と思ってたのですが実際にはcは127になってしまいます。 (a, b, c はSerial.printで確認しました) powの解説を読むと値がfloatで扱われるのでこのような結果になったのかと推測しているのですが、よく理解できません。 (1行目を「int a = 1023;」とすると普通に128になりました。) forループで回数分掛け算する方式にすれば大丈夫だったのですが、なぜpowではうまくいかなかったのかできれば知りたいです。 よろしくお願いします。 なにそれ アチョーって言うと左クリック アタタタって言うとタを言った分右クリックとかするの? CADやるとき楽しくなりそう >>734 まあいろいろ悩んでみるのもいいことだ 適当に推測で答えるがint c = pow(2, b);のところを int c = (float)pow(2, b); int c = pow(2.0, b); int c = pow(2, (float)b); みたいに適宜キャストしてやるとどうなるかな? ちょっと間違えたかも float f=pow(2, b); c=(int)f; とかかな? >>734 float,double は内部2進数で厳密な10進数の少数ではないので、丸め誤差が発生する(127.999999みたいなわずかにズレた値になる)ことがあります。 単に int (切り捨て)で変換すると理論上正しい値より1小さくなる事があります。四捨五入(0.5足してからint かける等)推奨です。 とはいえ、1行目が int a = 1023; である場合と int a = analogRead(A1); を Serial.print で確認して 1023 であるのとだけの違いで結果が変わらないはずで、 本当に b が「整数の」7なのに pow(2,b) が 127 になるというなら、違う Arduino でもそうなるか試してみたいところ… すみません >>738 の後ろ2行は無視してください(実験したら同じ Arduinoで同じはずの pow(2, int変数) なのに 127 になったり 128 になったりすることを確認しました) >>736 ,738,739 皆さんありがとうございました。 まずはfloatの扱いについて上げられたリンクなども参考にしてもっと調べてみます。 keyboard.hのKeyboard.press()やKeyboard.release()を使うと自動でpro microのTX LEDが点滅してしまうのを無効にするにはどうしたらいいですか キー入力のたびにチカチカ点滅するのが眩しい… ・ケースに入れる ・マジックで塗る ・LEDを外す、壊す >>743 そのキーボード関連の関数のソースを見てLED点滅部分をコメントアウトした別の関数を作り、それを例えばkeyboard.press2()、keyboard.release2()として使う。 TxLEDの隣の抵抗を外すとポートを引き出せるし戻し易いよ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる