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/ >>236
質問する、質問に答える、お礼を言う
これだけでいいだろ
それが嫌なら答えなくていいぞ >>238
では、事なかれ主義になれ。
楽だぞ、そんなんじゃ生きているのがツライだろ?
良い診療内科を紹介してやってもいいw 遅くまでレスを待つ人が出てこないように、その日はもう書かずに落ちると宣言したことに「こんなもん」と言う。
「こんなもん」と言っておいて「悪いとは言ってない」と言う。
報告があったのに報告がないと言ってしまう。
「ゆとり」とひっくるめてこうだ、って分析ごっこ。そんな分析ごっこは聞いて不快になる人はいても、得をする人ってたいしていない。
たしなめられたら自分のことは棚に上げて相手を事なかれだと言う。
初心者スレで憂さ晴らしやめて。 >>241
なんの
つつ鏡
返しだ!
リエントラントでスタックレベルならぬ「つ」レベルが深くなる、ハハハ。
IDコロ助を相手に大人げない事をしてしまった。
いつもならアホの相手は深入りしないのだが、
少し5輪競技の成績も悪いしイライラしてたので・・・。
皆の衆、下らないやり取りスマン。 IDEが吐くメッセージすら読まないヤツがマイコン使うようななったんだ。
ことの良し悪し関係なく、もう何でもありの時代なのよ。 >>233
DHT11よりもBME280の方が、価格、寿命、寸法、ソフトの書きやすさで優れていると思う。
精度はなんとも言えないけど、経験としてはDHTは湿度センサが狂いやすい。
換装の例
↓
http://intellectualcuriosity.hatenablog.com/entry/2017/12/14/212651 そんなに嫌ならテンプレに追加して息苦しいスレに育てれば シリアル通信しているデバイスの間にかまして、パケットをフィルタしたいんですが
デバイス - Arduino - ホスト
|
デバッグモニタ(PC)
シリアルが3系統必要になります。
HardwareSerial + SoftwareSerial*2を使えば解決できると思ったのですが、
全く受信できません(スケッチは以下の通り)
void loop()
{
s1.listen();
while (s1.available() > 0) {
int b = s1.read();
char buf[10];
sprintf(buf, "1:%d", b);
Serial.println(buf);
}
s2.listen();
while (s2.available() > 0) {
int b = s2.read();
char buf[10];
sprintf(buf, "2:%d", b);
Serial.println(buf);
}
}
同時受信を実現しているライブラリってないのでしょうか >>247
megaかdue使えばいいのに
互換品なら安いよ というか、そのプログラムのwhileの中を直さないとだめだね
どっちかが受信したら、受信したポートのデータを受け取る様にしないと >>248
できれば、Nanoサイズが欲しいんですよね
なんだったら値段もNanoが・・・
>>249
これはまだそれぞれのポートから受けとったデータを
PCデバッガに転送するだけ(動作確認用)です
>>250
Hardware+Softwareならできます。
Software*2同時が無理っぽいんです
マルチポートの確認用のデバイスは、同じくArduinoで
void loop() {
count = (count + 2) % 256;
s1.write(count);
s2.write(count + 1);
delay(500);
}
こんなスケッチを用意しました
>>247のスケッチで、s1かs2どちらかのブロックをコメントアウトすると
当然のように受信し出すんです。 ちなみに、mega互換は先ほど発注しました。
これで間違いなく動く物ができてから、Nanoに落とし込めないか検討するべきですね
>できれば、Nanoサイズが欲しいんですよね
>なんだったら値段もNanoが・・・
これはくだらないこだわりでした >>252
>>248はハードウェアシリアルが4つあるからという意味で、
ソフトシリアルでやるなら通信速度を犠牲にして
タイマー割り込みを併用するしかないと思うよ シリアルを受信してPCに送信するならLeonardでもできそうだがどうなんだろう ソフトシリアルで実現することに労力使う意味があるとは思えないけど
↓こんなところも参考にしてみたら
ttps://garretlab.web.fc2.com/arduino_reference/libraries/standard_libraries/SoftwareSerial/index.html 今更かもしれないけど…
デバッグ側が通信内容を垂れ流すだけで良いのであれば、デバッグ側をsoftwareSerialにしてしまえば解決するような。
あいたHardwareSerialをデバイス側かホスト側に割り当てれば、SoftwareSerialの待ち受けは1つで良いし。
デバイスorホストがPCでない場合、ArduinoのオンボードUSBシリアルが使えなくなるから割と面倒ではあるけど レーザーモジュール関連を眺めてると皆受光側は汎用のCdSを使われていますが、
レーザーの波長にしか反応しない明るい所でも使える専用の受光モジュール的な物は
存在しないのでしょうか? >>258
レーザー受光用にCdSなんぞ使わんのじゃないか?
Photo Diodeだろう nanoでon500ms,1hzの方形波のon時間
を測りたい。方形波はrtc3231から
出力。インプットキャプチャで
立ち上がりと立ち下がりで割り込み、
その時のタマー1のicr1と、
タイマー1のカウンタが
オーバーフローした回数から
時間を計算。この流れでおかしな
ところがありますか?
ロジアナで方形波と、立ち上がりと
立ち下がりをキャプチャできている
ことは確認しました。
参考サイトがあればうれしいです 何言ってるか微妙に分からんからスケッチ貼っちゃうといい。
個人的には0.5秒サイクルならもっと適当でもいいと思うけど、まぁ現状測れてるんなら #include <DS3232RTC.h> //http://github.com/JChristensen/DS3232RTC
#include <Streaming.h> //http://arduiniana.org/libraries/streaming/
#include <Time.h> //https://github.com/PaulStoffregen/Time
#include <TimeLib.h> //https://github.com/PaulStoffregen/Time
#include <Wire.h> //http://arduino.cc/en/Reference/Wire
#define echoPin 8 // Echo Pin
volatile unsigned long timer1_overflow_count = 0;//volatile 割りこみ関数、メイン関数間で共有する時使用
volatile unsigned long pulse_count = 0;
volatile bool tgle_catch = true;
volatile bool wait = true;
ISR(TIMER1_OVF_vect)//timer1がオーバーフローした際に呼ばれる。オーバーフローまで4ms弱ある
{
timer1_overflow_count++;
}
ISR(TIMER1_CAPT_vect)
{
cli();//割りこみ禁止
pulse_count = ICR1;
if(tgle_catch){
digitalWrite(10, HIGH);TCCR1B = 0b00000001;//timer1 インプットキャプチャ立ち 下がり でON 分周比1 カウント開始
}else{
digitalWrite(9, HIGH);TCCR1B = 0b01000001;//timer1 インプットキャプチャ立ち上がりでON 分周比1 カウント開始
}tgle_catch = !tgle_catch;
wait = false;
sei();//割りこみ許可
} Arduino uno同士をi2c接続しています(master, slave)
この場合、slave側からはi2c接続のOLEDであるとか、多chモータドライバの類は
制御できないと考えて良いですか?
masterのメモリ残量がきついのでOLEDの処理だけでもslaveに移せたらうれしいのですが >>265
上手くプログラミングできるかどうかは分からないけど
元のmaster側がi2cにアクセスしない時間を保証できるなら
slave側はその間にmasterに設定し直してi2cアクセスするようにすれば
可能だと思う(終わったらslaveに戻す) >>260
コードは見てないけど、不具合がないならいんじゃないかね。 廃車したカーバッテリーをArduinoにつないで
ソーラーパネルで充電しながら常夜灯など簡単な器具を使う場合
ソーラーでの充電が十分ならチャージを切断し、
電力が下がりすぎればバッテリーが壊れるので利用を停止
こんなものを作りたいんだけど
Arduinoでは自分が使っている電圧を調べることできる?
また、Arduinoで同じような事をやってる人のHPなど知ってる人がいたら教えて欲しい >>270
ありがとう
ただ、偉い複雑だね
元々、逆流防止のダイオード一個だけの簡単なものを考えてて
ただ、過放電でバッテリーを壊したくないから監視するだけの
シンプルな設計でやりたいんだけど良い方法無いかな?
リンクはありがたいけど初心者には複雑すぎて理解できない><
12Vのバッテリーを昼充電して夜ちょっと使いたい arduinoが動作しなくなる前に負荷を遮断するのなら
電源をDCジャックから入力、その電圧がVin端子にも出るから
Vin端子から抵抗で分圧してアナログ端子に入れて測れるよ、必要なのは抵抗2本だけ
バッテリーから動作電源と測定の電源に分けて入力しても同じだけどw
「arduino 電圧測定 分圧抵抗」 とかで検索してヒントになるかな
電圧表示にLCDとか使うとリンク先のように複雑になるけど
電圧に応じてLEDを点灯させる程度ならスケッチもさほど複雑にならなさそう >>268
不具合があったけど
自己解決しました。
まだ誤差が59μsあるんだけど
コンパイルにo3の最適化しても
だめだったので、あと発振子を変えてみるつもりですがマイコンの限界かなと思ったり。 >>272
ありがとう
12Vだから電圧は抵抗分圧で落とす必要があるわけか
それならシンプルで簡単に制御できそう
ただ、Arduinoで電圧測定をしている説明を見ると、必ず電池でArduinoを起動させて、別の電池の電圧を測ってる
何となくイメージなんだけど、起動している電源からそのままアナログ端子に差し込むと感覚的に壊れそうなイメージがあって不安だった
一般にこんな事は起こらないの? どうやってチャージのon/offをするつもりなん? >>275
チャージの方はソーラーパネルに逆流防止のダイオードを付けるだけ
5Wの補充電用の物だから多分過充電にはならないと思う
不安がでそうだと
消費側同様、とりあずはリレーかな
他はフォトカプラやSSRか
まだあまりしっかりとは考えてない >>267
そんな事も可能なんですか、私の知識では無理そうですが覚えておきます
ありがとうございます >>269
>>274
開発途中までは思わぬトラブル回避で別電源を用意して試験して
ある程度めどがついたら充電対象のバッテリに依存するように設計変更したらよろしいのではないでしょうか >>273
UNOとかNanoはセラミック発振子だろそれでクリスタルRTCを測ってもね、
しかし年末に購入した中華DS3231も4個中2個が周波数が32.780KHzと
RTCとして使い物にならず他1個も不良でまともそうなのは1個だけだった。
UNOのクロック測ったら-25KHzで2009は+1.7KHzでした。 >>279
DS3231使ってるけど、そんな精度低いもんかな。
32kHz出力は使ったこと無いんだけど。
RTCとして使えないってことは、時計も盛大にずれるって事? >>279 >>282
DS3231が内部で温度とともに校正値を変化させているとはいっても 32.780kHz は異常。
366ppmって、並みの水晶でもでかすぎる。
考えられるふたつのこと。
32.780kHz を測った測定器の誤差が大きい。
中華DS3231が実は怪しいもの(偽造、テストに通らなくて廃棄されたもの)。 >>280
>流石にセラロックはねーって
これを見て最初、
「セラロックでRTCを評価するなんて、さすがに無いよなあ」という同意なのか
「UNOにセラロックが使われていることは、さすがに無いだろ」という反論なのか分からなかった。
よく見たらリンク先が回路図だったから、前者だったのだと安心した。
ともかく、
システムクロックを動かしてるオシレータは、水晶であってもRTCの水晶ほどにはシビアに合わさない。
それを使ってRTC精度を測るのはナンセンスですね。 で、>>279さんは、どんな測定器で周波数を測定したんでしょ? >>258
検出器の前に干渉フィルターを置けば?
レーザーの発光線幅よりも、フィルターの通過帯域の半値幅は遥かに広くて10 nm以上ありますが、他の波長はカットできますよ。 >>282
中華DS3231の話でテストしているわけでもないのでたまに不良品に当たるわけです。
発振周波数が12Hzもずれてると1日で30秒も進みますそんなRTC使いますか?
>>283
4個中2個は32.768KHz残りの2個が32.780KHzと12Hzずれたものがあったので
一応HPのユニバーサルカウンタでも確認しています。
購入した中華DS3231は1個245円ですのではなからバッタ物と認識していますが
ググッてもそんな悪評が見つからないのでここまで当りを引くとは思いませんでした。
>>286
確認に使ったのはルビで自家校正したHP53131A、校正したのは2年ぐらい前かな。 >>288
良品(と思われるもの)はちゃんとした周波数に見えてるのですね。
http://www.avrfreaks.net/forum/does-frequent-reading-slows-down-ds3231-rtc
↑DS3231を頻繁に読むとスピードが遅くなるか? というスレなのですけど、
中華品だからじゃないのか、という疑いも書かれています。
Digikeyでの価格と中華モジュール価格の差がとても大きいし注意は必要かもしれないですね。 >>289
>良品(と思われるもの)はちゃんとした周波数に見えてるのですね。
はい、半分の2個は32.768KHzを出力しています。
使用しているモジュールは以下と同じものです。
https://ht-deko.com/arduino/rtc_ds3231.html そういえばAliのRTC
どこで買ったか忘れたけど一次電池のボタン電池が付属してたけどこれに勝手に充電されてた
一歩間違えると過充電爆発するんじゃないかと不安になり、チャージ回路のパターンを切断したわ
もし買う予定ならお気を付けあれ
精度については良く覚えてないけど100円ショップの時計程度だと思う
ただ、どうしても精度が欲しいならGPSや電波時計からモジュールを取り出して使った方が良いんじゃないかな nano、センサー、モーターはバッテリーとDCDCコンバータで動かしながら
nanoにマイクロusb刺してデータを表示させたいんだけどできますか?
usbのハブがあるけどpcが壊れないか不安です。 >>293
GNDを共通にして大丈夫かどうか、とか、電圧次第ですけど、
心配だったら「USBアイソレータ」をひとつ持っておくと良いのではないかと思います。
俺は自作しましたが、基板だけの安い既製品もあります。
https://strawberry-linux.com/catalog/items?code=12284 PWM出力を0の時にPWMが最大出力にさせるにはどうすれば良いですか?
アナログ入力からの/4で、その数値が低い時にPWM出力を大きくしたいのです vs-codeで質問ですが、サンプル含めて既にある ino を開くのはいいんですが
新規に ino を作るときはどうしたらいいのでしょうか。
setup と loop だけの話ですが、スケルトンを作ってくれないのか、と >>295
そんなのLチカサンプル開いて、
setup()とloopの中身削除して名前を付けてセーブでいいんじゃないの? void setup() {} void loop() {}
↑これをIMEの単語登録に「スケルトン」で登録! まるきり新規なら、まず好きな名前で空のフォルダつくって、その中に「フォルダ名.ino」を
置けばプロジェクトの出来上がり。 >>296
アナログ入力値a、pwm出力bとすると
b={(1023-a)/1023}*255
みたいなんでいけない?
アナログ入力の比率は自分で考えて下さい >>302
それっていつも0しか出ないような気が、、、
4で割るだけでいいのに。 >>302
なるほど元発言の一行目は無視すればよいのか
ゼロのときに最大にしたい、ってなんだ?と思ってたけどようやく理解できました >>302
map関数使った方がスマートじゃない?
PWM出力ポート=map(アナログ入力ポート,0,1023,255,0)
こんな感じだったかな
これで10bitも同時に8bitに変換できて、尚且つ下限と上限入れ替えてるから入力0の時,出力255 ちなみに処理速度が速いのと、使用メモリが一番少ないのはビット演算 賢いコンパイラだと、2のべきによる整数割り算はシフトにしてくれる
お試し版とか、無料版とかのモードだとその辺の最適化が無効になっていることもあるが >>305とかこの手の人が読みやすい綺麗なコード書く人なんだろうなとは思う 昔はいろいろバイナリ、シフトとか考えて書いたけど、最近はやらなくなってしまったわぁ。
なるべく数式通りに、見てすぐわかるように冗長でもいいから、float使いまくって
そのまんま書いちゃう。 それだけ演算能力が上がったって事やね
Arduinoは低性能だけど。
nanoサイズでもっと高性能なのを出せばいいのに
STM32やESP32がIDEに対応してから地味にシェア食われていってるやん。
結局は多くの人がIDE目的ってことやな STM32F103C8T6でもnanoよりloop一周の時間が10倍は速かったよ
ESP32は240MHzでデュアルコア
どれだけ速くなることやら >>315
>Arduinoは低性能だけど。
これは、「AVRのArduinoは低性能だ」って意味なのかな? ADCH取得するだけで1/4になってるのにfloatにして割らなくても。 CPUタイムもスタックもスタティックも余りまくってて、ヒープ使いまくりのclassとかの状況で
細かいこと気にしても意味ないからねー >>312
それもあるけど
質問の一行目の意味を即理解してるのが凄いと思った
俺はコード読んで反転させたかったのかと理解した
暗号化されているかのような仕様書を理解してみんなに説明するプロジェクトリーダーっている。
だからこそリーダーなんだろうな >>297
MSの拡張入れてある?
だったら、空フォルダを開いてF1->Initializeでいけるんじゃね? >>311
割り算が単なるシフトにコンパイルされるには条件(unsigned)がある。
その条件を満たさないと単純シフトにできないよ。 esp32て100kHzの正弦波を全波整流して200kHzのゼロ検出とピーク電圧を計測するのに使ったな
俺の腕ではnanoさんだと厳しくて性能でゴリ押しした
圧倒的な性能でゼロ検出してからのifループで入力電圧最大値を変数にひたすら入れていき
再びゼロが来た時に最大値を記録した変数を渡し変数リセットなんていうクソコードでも
取りこぼさずやってくれた >>326
nanoで200kHz短波はanalogReadに掛かる時間的にも
どの道厳しいよ
そもそもどんな用途? >>327
少し前に流行ったZVSの誘導加熱のアナログロジックを
マイコン制御で電流と周波数を任意に設定できるようにしたら面白そうと思っただけの用途
設計段階からもう趣旨変わって
フルブリッジ になってゲートドライバのデッドタイムに頼らず、あくまでマイコンだけでやってみようとなって
それに必要だったのがCTで拾った正弦波の上に書いたやつ
それで目標だった100kHzは難なく実現して
その後に更に趣旨変わって高周波化になぜか突き進んで30MHzちょっとまでいって
銅を熱することに成功して満足して終わった。
esp32はまだ性能を持て余していたけど、
その先はシーリングライトが勝手に消えたりテレビが誤動作起したりポルターガイスト現象起き始めて、
電波法的にヤバそうだからやめた。 思っていたより壮大で思わず笑ってしまった
おそらく一次側にノイズフィルタをきちんと入れれば大丈夫だと思う >>329
大電流がいたので車の鉛蓄電池でやりました
ただの30Aのノイズ発生装置と化した
スチール缶にリッツ線巻いて熱湯出来たのに喜んでいたのが
スチール缶自体が熱で変形・溶ける能力になった時点でなんだかダメな領域に踏み込んでいる気がした
誘導コイルが水冷になった時点でもう目標の面影もなかった
よく考えたらこれ卒論ネタでやった奴だから特定されるやつだった。 書き方が面白いから卒論だけじゃなしに本にしたらいいと思う。読ませる文章は好きだ。
30AのMHzオーダーなスイッチングはかなりの試行錯誤があったはずだから,それも含めて。 パナソニックのIHに使われてる3倍共振回路が何なのか
ジャンク仕入れて解析したりそこから得た何かを利用した色々アウトなものがあるので
fetや手配線による周波数的な限界が来たらもう1セットフルブリッジ を増やすというゴリ押し回路
最後はfet20個になりました 30A・・・ 3Dプリンタのヒートベッド用ヒーターみたいだ 朝から読みふけってしまったじゃないかw
3倍共振インバータは蓋を開けてみれば
あ、ふーんで終わる代物だったでしょう 本来の職務であるWLANを自らの手で作り出した電磁波によって阻害されるESPたん >>324
算術シフトと割り算は結果が異なるから
そのままは使えない。
-1 / 2 = 0 割り算
-1 >> 1 = -1 シフト 次はIGBTをドライブしてテスラコイルのスイッチングだ
変調して音を奏でるんだ
曲は「雷電」 上の書き込みで気になってESP32買ってみたけど
これは確かに凄いな
今後も安定した供給が見込めるのなら設備に組み込みたいぐらいだ ■ このスレッドは過去ログ倉庫に格納されています