Arduino初心者熱烈大歓迎質問スレ part21
■ このスレッドは過去ログ倉庫に格納されています
http://www.arduino.cc/ 【質問者心得】 ・スレに一応目を通してから質問しましょう ・回答者はエスパーではありません。状況が分かるように詳しく書きましょう 詳しく書いてくれないと、答える方も困ってしまいます。答えようがないのです 【回答者心得】 ・すぐにググレカスと言う前に「○○でググれカス」って言うような大人の余裕を見せつけてやりましょう ・節度ある初心者さんには、特に優しくね 【分裂騒ぎ】 おさまった模様。くわしくはぐぐれ。 前スレ Arduino初心者熱烈大歓迎質問スレ part20 https://rio2016.5ch.net/test/read.cgi/denki/1514503488/ 過去スレ Arduino初心者熱烈大歓迎質問スレ part19 http://rio2016.2ch.net/test/read.cgi/denki/1500745528/ Arduino初心者熱烈大歓迎質問スレ part18 http://rio2016.2ch.net/test/read.cgi/denki/1485192244/ Arduino初心者熱烈大歓迎質問スレ part17 http://rio2016.2ch.net/test/read.cgi/denki/1471967293/ Arduino初心者熱烈大歓迎質問スレ part16 http://wc2014.2ch.net/test/read.cgi/denki/1451909868/ Arduino初心者熱烈大歓迎質問スレ part15 http://rio2016.2ch.net/test/read.cgi/denki/1451893274/ 関連スレ 【Arduino】フィジカル・コンピューティング4【OSC】 http://wc2014.2ch.net/test/read.cgi/denki/1407830304/ 学研マイコン Japanino ジャパニーノで遊ぶスレ 3 http://kamome.2ch.net/test/read.cgi/denki/1286354827/ linux系で開発してるんでないの ファイル 上げてくれれば ubuntu /xxd でファイル変換してみるよ >>103 それLinuxのコマンドとviの派生エディタでしょ? なのに、あなたはWindows7環境ってことなの? もしそうなら「Windows バイナリダンプ」とかで検索してみて。 あと、自分の環境ちゃんと書かないと教えようが無いよ。 知ってる限りでは certutil コマンド とかが使えそうだけど…。 自分も興味あったんでPowerShellでcertutilコマンド実行してみたけどちゃんと吐いてくれる。 あとはテキストエディタで「, 0x」挿入すればおぜん立ては出来るかと思う。 Windows7の環境は無いので参考になるか知らんけど…。 あ、しまった。 >ここでは、小さな効果音などの比較的小さな音声ファイルを使うことを想定して、 とあるよ。 結局、VMwareでUbuntu起動してxxdでリダイレクトするのが一番速かったわw 深夜にも拘らずたくさんレスありがとうございます。 >>104 お手数をお掛けして申し訳有りません。 今回はご親切に甘えさせてもらってもよろしいでしょうか? https://free.filesend.to/filedn_infoindex?rp=70aec2e7cd6c9c158fda5c818f7bb50o ファイルの受け渡しもこれで良いのかどうかすら分かっていませんが… 何卒よろしくお願いします。 >>105 ↓一応Windows用のVimということで飛びついたんですが… https://qiita.com/toshihirock/items/743b26f50cbd0f1d519c 適当なキーワードだけで闇雲に進めてちゃやっぱりダメですよね… >>106 certutilコマンドでC言語の下2桁に変換出来るということですか? (自分でも何言ってるのかよく分かっていませんが… 1秒あまりの効果音を8000Hzでサンプリングしてるのですが、 それだと「,0x」を1万回挿入することになりますか?) >>107 モビルスーツの起動音ですので音質も何も…(ちょっと恥ずかしい…) >>111 モビルスーツの開発者様でしたか! 僕の夢はモビルスーツに乗って大気圏を往復する事なので完成を心待ちにしています! 開発は大変でしょうが頑張って下さい! モビルスーツの音って機械の動作音じゃなくて、意図的に出してる音だったのか >>111 http://fast-uploader.com/file/7083974149810/ ファイル名にスペース入れるのはやりにくいのでちょい変更した $ xxd -i msm-10Zock.raw >msnZock.c >>112 >>118 ありがとうございます。ご親切忘れません。感謝。 >>113 ご紹介ありがとうございます。解説が丁寧なブログですね。 次はこれを参考になんとか自力で頑張ってみようと思います。 >>120 グラフィックは専用サイトもあって、この手の方法でデータを用意するのが割と普通だけど、 これでどんなデータでも可能になったので面白かったです。 arduinounoを使っています。 大量のLEDを扱うのでLEDもUNOも外部から5vを供給している状態ですが、この状態でUNOのUSB端子をPCに繋いでシリアル通信できますでしょうか? 外部供給の5vがUSB端子に逆流してPCを壊してしまう可能性を考えると怖くて繋げられない状態です。 >>123 あーそれは辞めた方がいい TXピンとRXピンをPCに繋げればいいんだけど TX・RXピン ー(間に何か必要)ー PC >>124 https://www.amazon.co.jp/gp/aw/d/B01FVTBZRG/ シリアル→USB変換アダプタにTX・RXピンだけ繋げばいけますかね? とにかく、UNO内蔵のUSBは使わないようにします。 >>125 GNDもつながないと化けるぞ。 あと、スケッチ書き込むときにリセット押さないと書き込めないから気を付けるんだぞ。 あとそのamazonのFTDIチップは本物かどうか怪しいから、ある日突然使えなくなっても泣かないように。 ついでに中国からの発送だから2,3週間かかるから注意したほうが良いぞ。 VINが6.6Vを超えると切れると読めるんだけど? いま、どこから電源供給しようとしてるんだろう? まって、まって。 UNOの純正の話ですよね? >大量のLEDを扱うのでLEDもUNOも外部から5vを供給している状態ですが、この状態でUNOのUSB端子をPCに繋いでシリアル通信できますでしょうか? この接続をしたときにPCのUSBの電源に逆流するする、と思っている人って、UNOの回路図をご覧になってるのでしょうか? 質問者が回路図を理解できないということはありだとしても、回答者が回路図も見ていないのだとしたら悪質だと思います。 それ以前の話ですが、UNOのDCジャックから5Vを供給する事は規格外です。 >>131 > この接続をしたときにPCのUSBの電源に逆流するする、と思っている人って、UNOの回路図をご覧になってるのでしょうか? この接続とは、5Vをどこから入力すると言う仮定? いろんな記事で見かける外部から5番ピンの5Vに直接与える方法だと、 USB側に流れ込むでしょう。 公式ドキュメントでは、お勧めしないと書いてある。 皆さんありがとうございました!無事に音が出ました! 音質・音量は圧電スピーカーが小さいせいか少し残念な感じがするので、 スピーカーをグレードアップしてみたいと思います。 次のハードルはモノアイの順次点滅です。 並列処理は出来ない?らしいので、arduino nanoをもう1個投入するのは やぶさかではないのですが、出来れば1個で済ませたいと思います。 https://garretlab.web.fc2.com/arduino/examples/02.Digital/BlinkWithoutDelay.html ↑のようにdelay関数を使わなければ、点滅コードの裏で異なる処理を 行うことが出来るとのことですが、その異なる処理(つまり起動音)のほう にはdelay関数があっても構わないのでしょうか? もし無理なら、例えば2種類の時間間隔を定義してモノアイは60ミリ秒、 起動音は125マイクロ秒単位で制御する。みたいなことは可能でしょうか? 質問が的を得ていないような気が(なんとなくヒシヒシ)してますが、 右も左もさっぱり分かってないのでお手柔らかにお願いいたします。 >>131 悪質?DCジャック?何言ってんだお前 じゃ、2つの電源から供給するように促すんだな? どっちが悪質だよ >>133 思ってたより音悪いだろw? >delay関数があっても構わないのでしょうか? やっぱりそこで遅延が発生する 点滅は割り込みを使えばいいと思うけど、 重い音声再生に処理を持ってかれて、きちんと点滅しないかも 点滅は専用のICを使うか、 逆に起動音はDFPlayer Miniのような再生専用モジュールを使うとか 数十円〜百数十円程度の投資であっさり解決するケースもあるよ 本来Vinに12V電源を繋いで動かす様にしてる物にUSBを繋いだら Vinと並列に繋いだモーターが回り出したのですが、USBに繋いだ場合 Vinから5Vが出力されるのでしょうか? >>133 今気づいたけど初心者質問スレで聞いてた人ですね。 Arduinoに挑戦し始めたんだー、胸熱です。 delayは動作を止めておくことなんで指定した時間の間他のことは一切できません。 そのリンク先の方法や割り込みを使うことになります。 http://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/TIMERtoLED/TIMERtoLED.htm >>133 ああ、>>135 さんの言うモジュールもいいですね。 つい最近試してみたんです。 こんなサイズ感です。 https://i.imgur.com/47HRG6D.png 左がDFPlayer Mini、右がNanoです。 DFPlayer MiniはeBayで送料込み150円で音質も十分でしょう。 コンデンサでDC成分カットして圧電スピーカーをトランジスタでドライブしてやれば 大きくなるとおもうが 共振させちゃうと逆電圧もすごい >>132 >いろんな記事で見かける外部から5番ピンの5Vに直接与える方法だと、 すみません。 これは想定外でした。駄目ですね。 どこから供給しているかを最初に確認しないと。 >>134 すみません。俺が書いた話は>>140 で書いた通り、DCジャックからの電源供給を 想定したものでした。 「DCジャックからの電源供給をしている場合は、USB接続で問題はありません」 ですね。 勝手な想定で他人を「悪質」呼ばわりし、「すみません。」と言いながら「俺が」とほざく。 いつもの奴だが、たぶんこいつは一生こういう態度なんだろうな。 http://hissi.org/read.php/denki/20180609/ZmlkeWVSR00.html >>133 プラモでガンプラだよね そこまで凝った組み込みをやりたいのなら 一個全体制御用に用意して そっから各モジュールに対しての開始、停止、開始時のパラメーター送り をすればいいとおもう I2Cで全部つなげて、それぞれに対して常に送りっぱなしにして タイプによっては起動パラメーターによって動作内容が変化する的に デバッグも楽だしああとで他の模型にも転用効くし一回作ってみ ガンプラっちゅうのはNanoくらいなら中に入るのかえ? 40年前のなら中身スカスカで胴体や太ももに入りそうな気がするけれど今時のガンプラってフレームで中身詰まってるからどうだろう ガンプラ「あぁ…んっ!Nanoが…な、中には…ん!入ってきてるのぉ!」 >>135 >>137 ありがとうございます。 再生専用モジュールがそんな値段で買えるなんて思いもしませんでした。 これはもう買うしかないですね。 …それはそれとして、後学のためにお尋ねしたいのですが、 例えば、音声ファイルを20個くらいに分割して LED 1 ON(60ミリ秒点灯したい) 音声ファイル1再生 (起動音480個分×delay使って各々125マイクロ秒=60ミリ秒) LED 1 OFF LED 2 ON(60ミリ秒点灯したい) 音声ファイル2再生 (起動音の続き480個分×delay使って各々125マイクロ秒=60ミリ秒) LED 2 OFF ・ ・ みたいなことは技術的・機械の能力的には可能なんでしょうか? >>143 レスありがとうございます。 https://youtu.be/-yNXrEXfW-w 1stのゾックの初登場シーン↑の再現にチャレンジしています。 具体的にはモノアイと起動音(ぐぽーんぴろぴろーん)だけですので そこまでの発想はなかったのですが…なんだか面白そうですね。 >>146 >>147 HGUCのゾック(デカいしスカスカ)なのでnano自体は問題なく入るんですが、 スピーカーと電源(百均モバイルチャージャー)をどうするかが懸案事項です。 Arduino + Bluetooth を Bluetooth Mouse/Keyboardとして認識させたいのですがどうすればいいですか? >>149 自己レスですが、技術的・機械の能力的に可能かどうか、なんて スケッチ書いてブレッドボードで試してみればいいだけですね。 大変失礼いたしました。 >>152 ありがとうございます そこも見てました 1台でmouse,keyboardのフリするのは無理なんですかね? あと 例)アドレスが00:12:34:56:78:90なら、 btSerial.print("SR,001234567890"); がわからんです ベンダーID,プロダクトIDっていうのは指定できないんでしょうか? 初心者でよくわかってないです もっと情報ほしいです >>154 接続先、つまりPC側のbluetoothのアドレスじゃないの? あなたの知りたい事はbluetoothモジュールの事なので、arduinoでの直接の作例を探すよりもモジュール側について調べた方が良いような気がする。 ちなみにRN42のコマンドリファレンスにはSHコマンドのところにCOMBOってモードがあるから、キーボード+マウスとかも行けるんでない? >>149 DFPlayerは、私もオススメします 音楽鳴らすにも十分の性能かつ面白いです あ、ファイル名ディレクトリの制限あるから 純粋な音楽プレイヤーとしての利用は難しいかも >>149 ファイルを分割する必要はないよ。 125usの割り込みで毎回音声処理して、480回ごとにLEDを制御すればOK。 割り込みをカウントして処理すればどんなタイミングでもLEDを制御できる。 プログラミングだけに意識が向いている人は、 プログラミングの作法や知識ノウハウが俺様基準に到達していない製品をこきおろす。 自分が作る製品の別の部分のどこかがその専門家から見ればカスでタコなクズである可能性には意識が向かなかったりするね。 結果的にちゃんと動作するものであれば、それで良いと俺は思う。 なおdelay以外の対案を特に上げるつもりはないらしい アセンブラに直して命令数カウントするに決まってるだろ 部品を黒い工具箱に入れてたんだけど、ps-400というクリアケースに入れて眺めれる様になりました。うれしいですv^^ Arduinoに限った話ではないのですが、皆さんは8,16bitのマイコンにある程度の正確さと速さを求められる数値計算をさせたいとき、どのような変数型を使っていますか? shortやcharなどの整数型を使って計算させると、簡単にオーバーフローしてしまうと思うのですが、どうすればよいのでしょうか? リアルタイムで高速フーリエ変換をさせたいと思い、この問題を解決するために16bitの固定小数点数(整数部7bit,小数部8bit,符号1bit)をC言語のソースコードで実装し、計算させてみたのですが、FFTの点数が512程度になってくるとやはりオーバーフローを起こしてしまいます。 固定小数点数に限界を感じたので、浮動小数点数を使いたいと思ったのですが、floatやdoubleなどの浮動小数点数は32bit以上の変数です。8bitや16bitのマイコンでも使えますが、これが最適なのでしょうか? そこに疑問を感じて、16bitの浮動小数点数(仮数部10bit,指数部5bit,符号1bit)をソースコードで実装しようと、プログラムを作ろうと思ったのですが、私には骨の折れる作業なので、これが意味のあることなのか不安になって質問させていただきました。 今私が作ろうとしているものは、音楽用の簡易な観賞用のリアルタイムスペアナです。 スレ違いでしたら申し訳ありません。よろしくおねがいします。 http://neocat.hatenablog.com/entry/20100503/1272900070 に、リンクの張られている AppleRemoteIR.h を使用したいのですが サンプルのスケッチをコンパイルすると 「ボードArduino/Genuino Unoに対するコンパイル時にエラーが発生しました。」 と、エラーが出てしまいます。 なにか解決はできないでしょうか? よろしくお願いします。 mega2560をUSBでlinaxのPCに接続しましたが 書き込むと permission deniedエラーします 対処方法を教えて下さい >>167 オーバーフローならしないように計算方法変えるかそれよりも大きい型を使うだけ 正確さってのとオーバーフローは別問題だよ >>167 かなり力のある方だとお見受けしますが、車輪の再発明をしているような・・・ 固定小数点形式のFFTについては、本もたくさんあると思うし ググっても色々見つかりますよ そういうのを頼りにせず、5chでのコミュニケーションを楽しむというスタンスなの かもしれませんが・・・ >>159 ありがとうございます。DFPlayerを第一候補にします。 >>160 (割り込みの)回数をカウントする関数があるんですか? なんだか難しそうですが、割り込みは第二候補にします。 レスありがとうございました。 >>176 割り込み関数内でカウントすればいいだけ イメージ的には volatile int count=0; void 割り込み関数 { count++; } ってするだけ。最初は割り込みライブラリを使った方が簡単。 注意点は、割り込みの関数内で使う変数は「volatile」を付けて宣言すること。 >>177 >割り込みの関数内で使う変数は「volatile」を付けて宣言すること こういうふうに勘違いしてる人が多いみたいだけど、8bitのロード命令しかないCPUで 2バイト以上の変数を使う場合には、別の注意が必要 (前スレの55参照) もし、>>160 の構想でやるなら、割り込みハンドラの中で480回ごとに 1バイトのフラグを上げて、メインのLED制御のほうで、それを読んでから クリアするようにすればいい >>170 dmesg でデバイス名確認 sudo chmod o+wr /dev/ttyUSB0 >>179 そっか8ビットCPUだったわ でも10分で消えるライトを実際に運用してるけど 特に不具合を感じなかったけど、たまたまだったのか、気づいてなかったのか ともあれthx Lチカみたいにあまり精度要求しないなら カウンター読む前後で割込み禁止してしまうってのはあるよ まぁ、普通やらんけど >>183 ×カウンター読む前後で割込み禁止 〇カウンター読む前で割込み禁止、読んだ後許可 >>183 まあ、Lチカみたいに精度要求しないっていうか、間違えてもどうってことない 場合はいいけど、前スレのモーター制御のような場合だと致命的で、分かってないと 原因究明困難になりますよね 「カウンター読む前で割込み禁止、読んだ後許可」は、割り込みハンドラの中で どうこうするよりは、一般的なソリューションですね (それが望ましいかどうは別にして)ハンドラとの間で受け渡す変数が多い場合とか ハンドラの中でゴチャゴチャやりたくない、とか理由は色々あるけど、たいていの場合は使える >>177 >>179 ありがとうございます。 その方面?のことを単語からたどって色々調べてみましたが、 分からない言葉が多すぎて読み解くのにどれだけかかることやら… いま話題になってる変数は割り込み処理内でしかアクセスしないから 複数バイトあっても問題ないでしょ? 海外のいろいろなスペアナ製作記事を読むと 周波数帯域ごとに別々に処理して出力してる記事が多いから ぶっちゃけ小数点以下どうこうっていらねぇんじゃね?とか思った >>187 割込みの外から参照するって前提なんだけど。 ちゃんと読んでから書こうね。 Xtal取っ替えて20MHzのCoreを入れたArduinoで Servoライブラリ(サーボ4つ)とSoftwareSerialライブラリ(RXのみ)を併用してるんだけど サーボにジッターが出るのはしょうがない? >>189 >>177 のどこが割り込みの外で参照してるの? そらーおめー ++ した変数は割込み外で参照して使うためのものやろ ただし、参照を2バイトいっぺんにできて、1ループで一回しか参照しないとかなら 不必要な場合もあるわ。 外部から参照しないって 割込みを何だと思ってんだろうな? やはり根本に、メインと関係ない処理をやるのが割込みだと考えてるからそうなんだろうな メインのために定期的にやらなきゃいけないことをするって意識がまるで無い >>193 >>192 だろ。何のために変数用意したかが理解できてないだけ 外部から参照しないなら、volatile 宣言いらないような。 >>192 そうか。たとえば、M0のArduinoならたぶん、特別な配慮なしに読めますね。 volatileは、例えば while(count<480); のような記述をした時 countの値を一度しか参照しないようなコードを コンパイラが出力することを防ぐ loop()あるいはその中から呼び出す関数内で、if(count >=480){}とか書く場合は あってもなくても関係ないけど、割り込みで変更される特別な変数だって (人間が)分かるように volatileつけといたほうがいい 割り込みハンドラ内部でしか使わない変数なら、当然いらないんだけど そういう変数は、ハンドラの中に static 宣言して書くか、ハンドラが 呼び出す関数があってそれからも参照したい場合は、まとめて別ファイルにして その中で static 宣言するほうがいいと思う すみません。>>160 の構想でやる場合の話なんですが、 具体的に教えていただきたいことがたくさん出てきました。 当たり前のことや明後日の方を向いてる質問もあろうかと思いますが、 なるべく難しい用語を使わずにご教示いただければ助かります。 (注文つけるような立場ではないのは十分承知していますが…) A:メインのLED順次点滅のsetupは02の直前でいいでしょうか? (起動音再生とLED点灯開始は同タイミングにしたいのですが…) B:その際は起動音出力とLED出力が共にOUTPUTになるので arduino側で区別が出来ないと思うのですが問題ないですか? (LED点滅はPIN番号を指定することになりますが パクったスケッチ↓のvoid playにはPIN番号の指定がないので…) C:メインのLED順次点滅の本体部分はどこに入れるべきですか? その際のvoid ????の????部分は何にすべきですか? loop()に入れるならfor(;;)を使えばループしなくて済むんですよね? D:void play()全体をInterrupt()に入れれば割り込みになりますか? E:起動音再生480回ごとにフラグをたてるには 次のような関数を05の直後に入れればいいですか? if(i%480==0){FLG ON}else{} (iの剰余で480の倍数毎にFLGを立てればいいように思ったのですが…) const unsigned char sample_raw[] PROGMEM = { 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, ・・・・・・ 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7f }; unsigned int sample_raw_len = 1200; 01 void setup() { pinMode(3, OUTPUT); TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); TCCR2B = _BV(CS20); 02 play(); } 03 void play() { 04 for (int i = 0; i < sample_raw_len; i++) { OCR2B = pgm_read_byte_near(&sample_raw[i]); 05 delayMicroseconds(125); } } void loop() { } 少し言葉足らずだったかもしれません。 E:については>>179 さんのアドバイス後段に沿った案です。 分かるは範囲で A、はい。 B、問題ない。LEDのピン指定はsetup内で pinMode(LEDのピン番号, OUTPUT); で指定する。 C、?(どういう風に点滅させたいのかわからないので) D、なりません。 E、? >>167 その程度の用途のFFTなら ブロック浮動小数点 がいいかも。詳細はググってね >>200 レスありがとうがざいます。言葉足らずで申し訳ありませんでした。 意図する動作は次のようになります。 メインのLED@点灯(約60ms点灯したい、以後同じ) 割り込み内で起動音再生(125usのdelay×480個分=60ms) 割り込み内の処理480回でFLG ON FLG ONをメインで検知してLED@消灯、LEDA点灯、FLG OFF 割り込み内で引き続き起動音を再生(125umのdelay×480個分=60ms) 割り込み内の処理480回でFLG ON FLG ONをメインで検知してLEDA消灯、LEDB点灯、FLG OFF 割り込み内で引き続き起動音を再生(125umのdelay×480個分=60ms) 割り込み内の処理480回でFLG ON ・ ・ ・ >>200 D:についてはネット上に割り込みのスケッチ例が見当たらないので よく分からないままに質問してしまいました。すみません。 arduinoリファレンスが次のような感じなのですが、 (noInterruptsは書かないとして) @にはvoid play()とだけ書いて本体は別の所に書くのか、 Aに({}で括って?)void play()以下全文書けばいいのか、 とかが分からないのです。 void setup() {} void loop() { noInterrupts(); // critical, time-sensitive code here interrupts(@)A; // other code here } 割り込み内はできるだけ短時間の処理だけにする メイン処理で音再生して、割り込みでLED制御 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる