Arduino初心者熱烈大歓迎質問スレ part23
■ このスレッドは過去ログ倉庫に格納されています
×どこのメーカーのなんて規格の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の隣の抵抗を外すとポートを引き出せるし戻し易いよ みなさん回答ありがとうございます
コード一行書くだけで無効にできるような方法があればいいなと思ったんですが、これ意外と手間がかかることだったんですね
最終的にはケースに入れる予定なのでそれまで何かで覆ってしのぐことにします
ありがとうございました ソフトで光らせてるんじゃなく信号線に直結でLEDがつながってるんとちゃうの?知らんけど。 Pro Microて32U4が直接USB接続されてるやつかな?
LEDがつながってるのはデータラインじゃなくてPB0(RX LED)とPD5(TX LED)らしいらソフトウエア点滅ぽいな
この辺をアクセスしてるソースがあれば… >>750
ホントだね。
UNOやMEGAだと別チップだからファームに本体チップからのリクエスト受け付ける機能が無いとダメそう。 >>751
えっ何処が?
最初のArduinoから10数年経つ中で様々なマイコン・プラットホームに移植され誰でもがArduinoマイコンを気軽に使える時代が到来し、ブームと言うより当然の選択肢の1つになるまで広く普及してるんじゃないの。 中華クローン安くて良いけど
シリアルがch340なのはまだいいとして
レギュレーターのAMS1117の性能が悪すぎる
絶対最大定格で15Vのはずなのに12Vでかなりの個体が煙吹くわw
Arduino単体で確認してるから消費電流はマイコンとシリアルとLEDで合計30mAもないのに…
本家はuA78Mだから絶対最大定格で35VとVin=12Vでもかなり余裕があるね(当然PDは別ね)
レギュレーターを乗せ変えようにも
uA78Mは左からVin GND Vout (タブはGND)に対して
AMS1117は左からVin Vout GND (タブはVout)になってるから
基板のパターンが違くてそのまま付かねえwww AMSが燃えたやつは取り外してUSB電源で動くものに使ってるよ レギュレータが乗っかってるけど、外部レギュレータが必要w 俺も12V繋いだら盛大に煙出したな
ショートモードで壊れたからマイコンも一緒に死亡 >>751
広く普及して一ジャンルとして定着したから、ブームは去ったのかな。 皆が思う Arduino ブーム っていつ頃?
自分は2011年から使ってるけど、電子工作自体が個人的趣味でたまにやるだけだからブームだったという認識がない う〜ん、どれくらい前だったかなぁ、PICの関連書籍の発刊数が少なくなってきて、
Arduinoの関連書籍の発刊数が上回ったあたりじゃないかな?
個人的には、その頃にはブームは去って定着していたようにも思うけど。 検索すると多くのblogとかヒットするから流行ってるのかなと感じる事はあるよね
過去スレの消費時間みると
part15 = 7ヶ月
part22 = 2ヶ月ちょい >>762
なるほど。
面白い評価法だね。
Google検索の時点が過去にまでさか戻れれば各時点(1年、2年、、10年、)での総ヒット数でもArduinoの普及度が測れないかな? そうそう、AMSって何であんなピン配置なんだよ!
すぐ間違えるわ。
おまけに壊れる時大抵ショートモードでマイコン巻き込んで燃えるのな^^ AMS(austria micro systems)ってまともな会社やのに!って思ってたら違うやん。 偽物がかなり出回ってるみたいだな
http://buin2gou.sak ura.ne.jp/sblo_files/powerele/image/AM1117_Issue.jpg
Rock54が出るから全角空白が入ってる >>747
遮光性の高いテープやシール貼れば簡単
復元も容易 やっぱこれからもマイコンはPICだよね
なんといっても老舗だし 8KテレビにもにもPIC24入ってるし
探せばまだまだ見つかるぞ・・・・ >>754>>758>>764
中華AMS1117は耐圧15Vだけど実際使うのは006P電池とか9Vまでにしといた方が良いね…
本物のAMS1117とか、LT1117(リニアテクノロジ)やLD1117(STマイクロ)の奴なら12V平気だと思うけどねw
ちなみに1117系列のピン配置から78xx系列へのレギュレータのコンバージョンについてだけど、俺のやり方は↓
https://i.imgur.com/sZwFEZ3.png
この中華クローンの炸裂したAMS1117(USBでは動作したのでショートモードにならずレギュレータ以外は無事だった)を交換する
7805シリーズでリードタイプのレギュレータ(写真のはTO-251で珍しいが…STマイクロのL78M05CDT-1)をリードフォーミング
印字面から見て、1番を左に90度曲げる → 2番と3番を奥(タブ側)に90度曲げる → 2番を1番から5mm離れた所で左に90度曲げる
https://i.imgur.com/W1LEZvu.png
(写真のは高さ低くしたくてモールドの根元で無理に曲げちゃってるけど、コレは良くない!! 先の細いペンチで根元を押さえて曲げよう!)
https://i.imgur.com/J7Kuxo9.png
足の余った部分を適当に切り落として、こんな感じに半田付けすればそのまま使える(当然ながら不恰好ではあるけど…)
7805でTO-251のは珍しいから(ちなみに↑の型番のは確かRSで買ったのが家にあった奴)素直にTO-92/TO-226とかでもいいと思う(電流容量に注意)
ぶっちゃけTO-220も同じ要領で半田付け出来るけどクソデカレギュレータになって見た目がかなり不安な感じになる・・・ネジ止めする場所無いしw pro miniのVcc端子に外部から5v入れたい。
内蔵レギュレータの出力側に5vがかかるけど、raw端子をオープンにしとけば問題ない?
内蔵レギュレータ外すのめんどくせ >>776
そのジャンパー切ってもレギュレータの出力側には5v掛かるね
大丈夫なんかな? >>776
間違えた
そのジャンパー切ればいいね
すまん >>776
手持ちの中華にはそのジャンパーなかた
本物にもなさそう >>775
そんなん余裕で大丈夫だろって調べたら下記サイトでも大丈夫って書いてあった
https://ht-deko.com/arduino/promini.html
リンク先に書いてあるけど、周辺回路を3V3想定で作っておいて5Vかけるのはナシで
>>776
for low power application って書いてあるのは
電池などでVCCに電圧かけるとLEDひかりっぱなしで電池無駄になるから切ると良いですよってことで絶対切れって指示ではないかと >>780
自分も調べてたけどその通りだった。
今回は関係無いけどLED消灯したいときにジャンパーが無いPro miniモドキのバターンカット法を見たときアレレッって思った。。。
https://www.instructables.com/id/Arduino-low-Project-and-code/
>>775
という事で、勘違いご免なさい。 自分でちゃんと組んでみて確かめろ、って言われるかもしれないけど。
「初心者熱烈大歓迎」に甘えさせて。
この配線図っておかしいよね。
https://i.stack.imgur.com/XDxJD.png
4桁7segに文字表示するってことになってるけど?
ダイナミックなんとかとかなんも考えてなくて、4桁ともおんなじ表示
になるような。(カソードコモン?がそのまんまGNDにつながってる)
https://arduino.stackexchange.com/questions/38834/cant-get-4-digit-7-segment-display-to-show-different-values
画像は上記の投稿が参照してるのでそのまんまもらってきてるけど、
Elegooって会社のSuperStarterKit のチュートリアル "Lesson 20 FourDigital" の
とこに同じ図がある。ついてるスケッチはこの投稿よりは
ましだけど、やっぱり配列で1バイトのビットパターンを
> void Display(unsigned char num)
> {
> digitalWrite(latch,LOW);
> shiftOut(data,clock,MSBFIRST,table[num]);
> digitalWrite(latch,HIGH);
> }
って感じでおそらく、0からFまで渡してるだけ。
イラストには、HALOって出てるけど、そもそもがtableが16しか無くて英文字のパターンもらって無い。
一応、よその電子工作系のブログ見て4桁表示する「正しい」手順は理解してるつもりだけど、、、
じゃこれは何なんだろう?
チュートリアルとしては何回か改定してるみたいだし、、、これを長年堂々とユーザにだしてるのか?
それとも超絶技巧かなんかで解決してんのかと、、、
1桁の7segもついてて、そっちのLessonもあるし、べつに続くレッスンで「タネあかし」して、
4桁別々に表示するやりかた教えてくれる、って構成になってるわけでもない。 >>872
その図がおかしいことはその相談サイトの質問に書いてあり
対応策はいくつかの返答の中に書かれているから参考にして直せばいい。
何か文句が言いたいならElegooに直接言ったらどう?
一番わからないのはそれ以上あんたがどうしたいかだわw 普通は未完成の回路とスケッチ見て「糞サイトか」と言いながらそっ閉じ 未完成ww
どうせアフィ目的だから、コードが間違っていようが、回路図がおかしくても直す気無いんだろうな もとはElegooのチュートリアルがおかしいって話だからな。
それについて相談してるQ&Aサイトを見て、ろくに読まずに>>782が騒いでるだけ。
解決策はそこでアドバイスされてるし、そもそも文句はElegooに言えばいいだけ。
糞サイトとかアフィ目的とか全く関係ない。
ま、クソ商品、クソ取説なのは事実だが、良くある話。 前にArduino使って、7セグ4つで文字を出力するアイテムを作っていたとき
HELLOと最初に出そうとしたんだけど
一文字足りなかったのでスクロールするようにしたのよね
そこだけうまく行かなくて
何回やってもhELLになって困ったのどぉ思い出した
めっちゃ初心者の頃の話だけどね
なんか思い出したんで書き込む 7セグのテストって、一度ブレッドボードからバラしちゃうとまた一からやり直す気にならないよね >>788
言えるw
抵抗アレイいれてモジュール化していてもやりたくなくなるw >>787
> 何回やってもhELLになって
ええはなしや 1602の配線も正直に言うとめんどくさい
I2Cの1602買ってからは快適だけど ■ このスレッドは過去ログ倉庫に格納されています