Arduino初心者熱烈大歓迎質問スレ part25
■ このスレッドは過去ログ倉庫に格納されています
>>33
温度センサーはDS18B20がオススメ
抵抗値や電圧じゃなくて温度がデジタルで読める
校正とかいらない
防水ステンレスキャップで延長コードついたのも200円くらい >>35
まだ調査してないから、リニアか分からないけど、車の社外水温メータpivotに付いてた水温センサーをそのまま使いたかったんだよ。
他の人が教えてくれたデジタルのセンサーでもいいんだけど、センサー先端のネジとかをどうやって作ればいいんだろう? >>36
この方法が自分の知識で今すぐ出来るやり方だと思う。変換テーブルはまだ使ったことないけど、勉強してみます。
ありがとう。 >>29
>>31
遅くなりましたがありがとうございます >>33
ExcelとかRで回帰分析して回帰式を用意するのが良いと思う。
プログラムは1次式ではなく、求めた回帰式を利用するだけなので簡単。
33が回帰式のモデルとなる式(2次式、3次式、etc)を用意する必要があるのと回帰分析の知識が必要。
ググればなんとかなるとは思う。 >>36の書き方だとプログラムするのに誤解しちゃうかもな
両側の2点を得る、じゃなく分岐処理するだけでよい
せいぜいグラフは3つの直線で済むだろう
そうすると3つのmap命令を用意して
あとは入力値で分岐処理、だな >>42
入力値で分岐して、その中のmap関数で数値を出すんですね。グラフの特性に合わせて分岐を増やせばいいのか・・・
なんとかやれそうです。
ありがとう! >>41
回帰分析をググったけど、まだarduinoにスケッチするとこまで行くのは難しそう。
みんなこんなすごいのを、さらっとやっちゃうんですか?スゴいです。 >>44
Arudinoでは回帰分析はしないよ。多分できなくはないけど大変だよ。
調べたサンプルの回帰分析はPCでして、読み取り値のxからyを推定する回帰式を作るんだよ。
33は比例と書いているけど、回帰分析ならば、1次式以外にも3次式とか対数式に近似する回帰式も作れるよ。
回帰式さえ作っちゃえば、Arudino側は回帰式に読み取り値xを入れれば、yが返ってくるので、読み取り値で条件分岐するとかが不要になるよ。 >>45
仕事の合間に回帰式を勉強してきました。重回帰分析じゃないんで、一次関数でいけるかな。式さえ出来れば関数作ってコールしてデータ入れれば結果が出せますね。式が出来るかなぁ。まずはグラフを作るか。テスターと温度計用意だね。 >>46
1次ならググるとExcelのデータ分析を利用する例がたくさん出るから頑張って。
最低でも10から20はサンプル必要だろうから、実際の特性調査の方が時間が掛かると思うよ。 折れ線グラフを扱う汎用的なのを作っておくといろいろ便利だよん みんな凄いなあ 初心者から見るとカッコいい〜
オレも頑張るぞっと pythonも少しやり始めたんだけど
分析してグラフ化はこっちに任せたほうが良さそうだね >>33
自分もDS18B20が楽で良いと思う。
ただ、校正はいらないけど個体毎の誤差は結構あるので、最初にまとめて温度とアドレス控えておいた方が良いかも。5個買って1℃位の差があったので、そこは補正してる。 技術的な質問じゃなくて、法律・倫理的な質問なんだけど、
LeonardとかでVIDやPIDを書き換えるのって違法になる?
メーカーが金を出して所得した番号を使う時点で違法確定なのか、
販売はNGだが、個人ならokなレベルなのか、
それとも技適警察みたいにネット上では批判される程度のものなのか。 業界団体規格なので違法にはならんでしょう。USBx.x準拠とかうたったら優良錯誤で違法になるかもしれんけど。 Arduino UNOの回路をばくって、USB付きの目覚し時計を自作して売ったら、何か駄目な事ってある? >>54
基本的に回路に著作権はない
arduinoに関してはarduinoと名乗らなければ問題ない
逆にarduinoの回路はavrにusbシリアルくっつけただけに過ぎないわけだが
ブートローダーやusbシリアル変換に使ってるavrのファームは別な話になるけどね >>38
車載の水温センサーなんかは基本的にサーミスタでB特性の値から計算するのが普通だけどね
安いしただの抵抗だから耐久性も高いし必要十分な精度あるし
自作しようとするならネジに穴開けて埋め込むだけでいいし
昔の車なんかで見かけたのは精度いらなきゃ線1本で引き回しておしまい >>57
車載だと壊れにくくシンプルなの優先するだろうから
ラジエターの冷却液の沸騰上限と凍結下限さえわかれば
途中の温度狂っててもなんでもいいのでは?
CPUの内部温度もサーミスタですよね >>58
燃料の噴射量にも関わるので、あまり雑にはできない。
車内の水温計ならそんなレベル。 >>58
>CPUの内部温度もサーミスタですよね
PN接合の順方向電圧を使います。 >>58
まぁ水温で何をするかというと燃料補正
水温が低いときの増量や水温上がってきたときの補正とか
せいぜい10度単位とかだよ シリアルモニタのウインドウが表示されないのですが、どうすれば良いでしょうか。
ポート認識はしていて、(windowsタスクバーを見る限り)シリアルモニタ起動もしている様なのですが。
互換品のelegoo uno r3で、ソフトの再インストールはしました。 ARDUINO 1.8.10 2019.09.13
[ide]
*ライブフォントのサイズ変更がコンソールとシリアルモニターにも適用されるようになりました@ Pieter12345
* Windows @ Pieter12345のソースからIDEを簡単に構築できます
*超小型画面に適した、より小さな設定ウィンドウ
*ダウンロードしたjsonをキャッシュし、@ mattiabertorelloを変更した場合にのみ取得します
*ボードが突然切断された場合、シリアルモニターを一時停止する
*ライブラリは、libインストール中に提案される依存関係を宣言できるようになりました
* SerialPlotter:@chromhelmラベルの追加を許可
* Board Manager @vowstarのtar.xzアーカイブをサポート
* SerialMonitor:コマンド履歴を追加(矢印キーを使用)@ Pieter12345
*アクセシビリティ:設定@ joew46167でアクセシビリティを有効にするチェックボックスを追加
このモードでは、ナレーションとキーボードナビゲーションが大幅に改善されます。
例えば。リンクはアクセス可能なボタンになり、リストは苦痛なく矢印キーでスクロールできます
[wifi-updater]
*最新のNINAファームウェアを追加 [ハードウェア] *新しいavrツールチェーンをバンドル(5.4.0および64ビットの互換性を今後のmacOS Catalinaと修正)
[arduino -buidler]
* 1.4.7 への更新(新しいarduino-cliに基づく) タスクマネージャーで、起動してる(けど見えない)シリアルモニタウインドウを最大化したら見えるようになりました。
最大化をやめたらまたすぐ消えたんですが、少しいじっている間に直りました。
原因が分かりませんでしたが、とりあえず良かったです。 >>67
ディスプレイの表示範囲の外に表示されてただけでしょ。
arduino云々の話じゃなくwindowsの基本操作の範疇じゃね?
タスクバーにはシリアルモニタ表示ってやったときにarduinoIDEの二つ目のアイコンが重なって表示されてたはずだからそれのシリアルモニタ側のアイコンにカーソルあわせてちょっと上にカーソル移動するとシリアルモニタのサムネイル画像(っていうのかな?)が表示される。
この時右クリックのコンテキストメニューから移動って選ぶとカーソルキーとかで自由に画面外のwindowでも動かせるようになるんでそれで画面内に戻せばいい。
注意点としてアイコンの上右クリックじゃなくてサムネイルのうえで右クリックね。 すみません
やりたいことが有り、まだ座学なのですが、電子工作で可能なら始めたいと思っていて、
そのための情報集めている段階なのでテストなど出来ないのですが質問させてください
arduinoをコアに
8chのマルチプレクサ10個をデイジーチェーンでコントロールしたいと思っています
TC4051Bのようにデイジーチェーンの仕組みのないマルチプレクサでそのようなコントロールする場合、
I2CやSPIなどで通信するのがスマートな気がするのですが、
後付でそのような機能を提供するような汎用チップのようなものはありますか?
また、他にもっと簡単な方法がありましたら教えて下さい
用語などを間違っていましたらすみません 74HC595を4個直列にしてシリアル-32bit出力を作って
3bit毎に4051を10個ぶらさげればいけるけど
単純に595を10個並べて80bit出力にしたほうがシンプルだよな
16chの74HC4067も入手しやすいはず
こっちならIC9個で実現できる >>69のコピペ元の大本質問者です
初心者質問スレ その134
https://rio2016.5ch.net/test/read.cgi/denki/1566321111/753
コピペしたのは私じゃないす
>>72
ありがとうございます
元スレにて、
アドレスデコーダー
シフトレジスター
という情報いただき、調べる過程でIOエキスパンダーでも行けそう
という感じになっています
で、マルチプレクサなんですが、 実際にはデマルチプレクサとして使用で8チャンネル10個が必要な回路になります >>73
だったら4051じゃなくて14051じゃね
16bit IOエキスパンダー MCP23017
8bit IOエキスパンダー PCF8574 (LCD*I2Cアダプタに搭載してるやつ)
とかでも別にいいと思う
配線大変そうだけどがんばってね M5.Lcd.drawJpg(const uint8_t *jpg_data, size_t jpg_len, uint16_t x, uint16_t y);
xを-10、yを-20にしたいんですが、uint16_t となってるから負の値は指定出来ないんでしょうか? int16_tならいいのかな
int16_tの負の数ってどう表現したらいいのかな >>77
なぜスクリーン上の座標をマイナスにしたい?
画像の描画範囲をずらしたいなら、引数 offX offYで操作するんじゃないの? >>78
x, yは画像の描画の原点でデフォだと左上の0, 0になるんですが、
スクリーンのサイズよりも画像が大きいため、画像の右側と下側が見切れてしまいます
そのため、画像の中心がスクリーンの中心に来るようにx, yをマイナス値に出来ればなと思いました >>79
Docsを見るとメンバ関数はこうなんだが
void drawJpg(const uint8_t *jpg_data, size_t jpg_len, uint16_t x = 0, uint16_t y = 0, uint16_t maxWidth = 0, uint16_t maxHeight = 0, uint16_t offX = 0, uint16_t offY = 0, jpeg_div_t scale = JPEG_DIV_NONE);
引数 offX offYでjpegの描画開始位置を変えられない?ダメだった? >>80
わあ!ありがとうございます
ライブラリ見てたら
M5.Lcd.drawJpg(const uint8_t *jpg_data, size_t jpg_len, uint16_t x, uint16_t y);
しか載ってなかったのでsdカードから画像を読み込む関数と違って使える引数がほとんどないんだと思っていました。
試してみます >>80
うまく行きました
ありがとうございました M5Stackの画面に1秒間隔で時計を更新して表示する関数と5秒間隔で気温の測定とラズパイのデータベースをチェックする関数を作ってマルチタスクで動かしてみました。
画面には時計と気温が表示されていてラズパイのデータベースの値は画面には表示させてないです。
もし、ラズパイのデータベースの値があらかじめ設定した値を超えた場合は時計と気温を非表示にしてデータベースの方だけを画面いっぱいに表示させたいんですがそういうことって可能ですか?
時計の方の更新間隔を伸ばさないと無理ですか? 割り込み処理っていうの使えばいいのかなと思ったんですがそれってボタンやセンサーのような外部入力だけですか? タイマー割り込みを使えばいい。
"arduino 時間 割り込み"でぐぐってみたまい。
というかそもそも君のそのマルチタスクのプログラムというのは
タイマー割り込みを使用しないで出来ているのか? 割込み使ってれば>>84の書き込みにはならない
ポーリングなら>>83の質問にはならない
いろいろ謎w データベース値が設定値超えたら
時計表示をパスすりゃいいだろ
更新と表示を一緒くたにして作るからそうなる ど素人の俺からすると
単純にインタラプト入れればいいだけのように思う レスありがとうございます
現状ですが、
https://nagatani.github.io/posts/m5stack-dht12-temptoifttt/
を参考にxTaskCreatePinnedToCoreっていう関数を使いました。
んでsetup関数に以下を書きました。
xTaskCreatePinnedToCore(clockTask, "clockTask", 4096, NULL, 1, NULL, 0);
xTaskCreatePinnedToCore(tempTask, "tempTask", 4096, NULL, 2, NULL, 0);
clockTaskは1秒ごとに時間の表示、tempTaskは5秒ごとに気温の表示とラズパイへのアクセスです。
loop関数にはM5.update();だけ書いてあります。 arduino 時間 割り込み
ググってみました
現状は関数の中で例えばディレイを1000として時計を動かしていますが、そうじゃなくて、
まず5秒毎にラズパイのデータの確認をして設定値より低ければタイマー割り込みという機能を使って1秒毎に時計を表示する関数(clockTask)を動かす、5秒毎にtempTaskを動かすって感じでしょうか? タスク間で通信をするんだよ。一番初心者にも解りやすいのはグローバル変数で作ったフラグやデーターを使う事です。
まず、1秒毎に起動するタスクと5秒毎に起動するタスクをつくる。
1秒の方では現在時刻の取得、最新温度とデーターベースから取得された値の確認をして、条件に合致しなければ時刻表示、合致したらアラート表示。
5秒毎の方では温度の計測と保存、データーベースへのアクセスと値の取得を行う。
みたいにすればいい(一例です)。
割り込みを使わず泥縄式にloop(){delay(1000);every1sec();if(count++%5==0)every5sec();}でも
各時間毎の処理内容は同じで出来ます。どうするのが良いかはスキルとプログラムの要求仕様や規模などによる。よく考えてみてw timeInfoで201910062143って今の時間を変数に入れるのってどうやるんですか?
dday = timeInfo.tm_mday;って取り出したら06じゃ無くて6になっちゃう >>95
String imaNoJikan = "";
imaNoJikan = String(sprintf("%04d%02d%02d%02d%02d%02d", timeInfo.tm_year + 1900, timeInfo.tm_mon + 1, timeInfo.tm_mday, timeInfo.tm_hour, timeInfo.tm_min, timeInfo.tm_sec));
ってやったら
invalid conversion from 'int' to 'const char*' [-fpermissive]
こんなエラーが出ました >>96
そらそやろ。sprintf の戻り値はintだからやで。しかも引数も間違えてるよ。 sprintfの出力文字列は第一引数にchar配列を入れて受けるんだよ
ググればすぐ出てくるだろに >>96
sprintfの戻り値ってintだから当然そうなる。あと第1引数は文字列を格納するバッファー。 char imaNoJikan[14];
sprintf(imaNoJikan, "%04d%02d%02d%02d%02d%02d", timeInfo.tm_year + 1900, timeInfo.tm_mon + 1, timeInfo.tm_mday, timeInfo.tm_hour, timeInfo.tm_min, timeInfo.tm_sec);
Serial.print(imaNoJikan);
コンパイルのエラーは出ないけどシリアル見てたら再起動繰り返してるっぽいです >>101
今やったらちゃんとimaNoJikanの中に入っていました
>>97
>>98
>>100
どうもありがとうございました >>101
今の時間の2秒前ってどうやって求めるんですか? 1970/1/1からの秒数のまま計算するんじゃない? 今の時間の2秒前のUnix時間を作ってそこから
>>101 みたいに変換する感じですかね?調べてみます >>105
JST変換するとき9時間足すのを
8時間59分58秒足す感じで DCモータ2軸制御のためにArduinoシールドを探しています。
動かしたいモータはマブチのRS-280RA-2865で、特性は
URLのような感じになります。
https://i.imgur.com/wbAO6r0.jpg
モータは起動時には最大出力で回り、以降はバランスをとるためにほぼ0rpmあたりになる予定です。
ざっと見た感じ、AdafruitのServoShieldしか見つかりませんでしたが、
これでも十分動作できそうですか? 電源電圧何ボルトなの? 静止時に流れる電流に耐えられれば使える
3ボルトで4.7Aとはまあ結構流れちゃうねぇ。 >>108
マイコンボードはSTM32の予定です。
電源電圧を複数用意するのは面倒なので5Vを3Vに降圧しようと考えています。 >>101
imaNoJikanに終端文字の\0が入る領域が足りてないが大丈夫か? Nano Everyの出荷始まってるけど話題ないの?
Pro Miniで充分だから? 10倍の価値があり、総務省様のお眼鏡にかなえば
そのうち話題になるやろ、どっかでw 照度を調べたいのでフォトトランジスタNJL7502Lを買ってみました
CdSセルに比べてちょっと向きを変えただけで大きく値が変わってしまって難しいです
必要な抵抗値とArduinoでの計算式が知りたいです
10kΩの抵抗を付けてAnalogReadを1024で割って3.3をかけたらいいんですか? >>116
https://www.njr.co.jp/products/semicon/PDF/NJL7502L_J.pdf
半値角が±20度しかない(データーシート4頁のDirectivity参照)。
これはレンズによるものだから、CdSに近づけたいならレンズを削り取る。
照度換算は、10kΩ負荷で5V系ならanalogReadの値に1.48を掛けるんだな。
感度が33μA@100Lx。10kΩ負荷では0.33V@100Lxよって3.3mV/Lx。
float Lux = analogRead(ch) * 5.0/1024 / 0.0033;
なお、15kΩ負荷にすればanalogReadの値が即Lux値になるから小数計算不要で高速化。 >>117
どうもありがとうございます!
NJL7302L-F3だと±55度だそうなのでこっちの方が使いやすいですか?色が黒なので赤外線用っぽく感じたので。
直列で10kΩ+1kΩ+1kΩ+1kΩ+1kΩ+1kΩと繋ぐと15kΩになりますか? >>118
これでやると蛍光灯の室内で130前後でiPhoneのライト当てると986くらい
16bitのADC使った方がいいんでしょうか? NJL7502L ピ−ク感度波長 560nm
赤外線 850-940nm
560nmは緑ー黄緑 うーん全く分からない…
廊下持っていくと照明ついてるのに0にしかならない >>118 >直列で10kΩ+1kΩ+1kΩ+1kΩ+1kΩ+1kΩ…
OKだよw
でも10kΩを2つ並列にしたら5kΩになるから、これと10kΩを直列にしたら全部で3個で済むよw
>>119
16bit必要かどうかは、何をどう計りたいか、という君の要求仕様による。
7.5kΩを負荷にしたらanalogRead()*2がLux値になるから2047Luxまでいける。最小分解能はもちろん2Luxになる。
晴天時野外とかは数万Lux有ったりするけど、人間用の室内照明で1000Lux越えるのは珍しい。といった条件を総合して考える。 >>123
>ACD
部屋の電気を消すだけで数値は必ずゼロになってしまうから気になりました
実際には真っ暗じゃないです ProMicroを使用してPB,PD,PF合計額18個のピンでdigitalReadをfor文で18回繰り返してるんですが、
もしかして一度、もしくはポート毎の3回とかでバイナリ値で取れたりしますか? >>124
人の目は慣れると1ルクス以下でも見えるからな
計測するなら対数変換するかレンジ切替とかした方がいいんじゃないかな >>125>>126
入力を拾うのはPINxレジスタの方だね
PORTxは出力を設定する方
マイコンのポートとArduinoのピン番号の対応をぐぐれば同じポートのピンはまとめて取れる 半年前に作ったプログラムと回路が難しすぎて、どのように動作しているのか理解出来ない ど素人です。お手柔らかにお願いします。
VCCから5Vを取り出して大体0.5Vにしたいので分圧しました
10kΩと1kΩ直列にしてグランドにつないでみました
VCC→10kΩ→0.5V取出→1kΩ→グランド
0.5V取り出したら分岐して6個のセンサーを付けて
センサーからそれぞれA0〜A6につなげた場合
A0〜A6各それぞれの入力インピーダンスは10kΩということでいいのでしょうか? >>131
違う
というか色々繋ぎ方にも疑問があるのでセンサーの型式と回路図(ちゃんとした記号を使った奴じゃなくてもいい)をあげてほしい >>131
それで分圧した場合、0.454v位のはず
また、0.5v-センサ-アナログ入力ってなにか違う気がする
たとえばこんな感じゃない?
(ただし分岐しない前提)
抵抗----0.5v----アナログ入力
|
センサ
|
グランド ■ このスレッドは過去ログ倉庫に格納されています