Arduino初心者熱烈大歓迎質問スレ part27
■ このスレッドは過去ログ倉庫に格納されています
>>751
へぇーっ、プロだとデバッガが乗ってるんだな?
Arduinoもココまできたか。。 まだアルファ版だもんね… せめてβから使ってみたい…
IDEどうしよかな Eclipseまだ試してないから入れてみよっかな… おはようございます。センサーの電源について質問です。
余熱が必要なセンサーを使いたいと思っています。
センサーには5V、GND、信号線の合計3本の線があります。
このセンサーは、5VとGNDの2本を繋ぐと、
強制的に予熱するようになっている(抵抗が発熱する)のですが、
センサーを使った測定は1日に1回でよいので、
その間ずっと予熱しておくのは電池がもったいない。
そこで、5Vの線を5Vピンに繋がずにデジタルアウトピンに繋いで、
余熱が必要になったらそのピンをHIGHにして5Vをかける、
測定が終わったらそのピンをLOWにすれば電気節約、
なんていう使い方をしようと思ったのですが、
これは、回路的にアリでしょうか?
それとも、電源の5Vはあくまでも5Vピンに繋ぐべきでしょうか? >>755
余熱なら消費電力もそれなりに多いのでマイコンから直接動かすのは厳しいと思う
トランジスタ等で回路を作るのが現実的 >>755
そのヒーターとやらの消費による
実用的にマイコンのピンから取っていい電流はせいぜい1本20mAくらいまで&ピン全部で100mAくらいまで
抵抗体なら250Ω以上あればまぁその使い方をしてもいいが、それより重い負荷(抵抗値が低い)ならトランジスタを使うべし >>756-757
さっそくありがとうございました。
データシート見ると、90mA流れるようなので、
別回路を組んでトランジスタでON/OFFします。
ありがとうございました。 シリコンエピタキシャルプレーナバイポーラジャンクショントランジスタ
メタルオキサイドセミコンダクターフィールドエフェクトトランジスタ 出力に90mAか、hfe=100ぐらいのトランジスタなら、ベース電流5〜10mAぐらいだな。 >>763
なんだって!!
ちょっと理解出来ない
俺の理解が違うのか、トランジスタの常識が違うのか、世界が生まれ変わったのか••• I2Cやってるんだけど送信バッファ溢れで連続してデータを
送れない。32バイト以内で送ったらスレーブはすぐにそれを変数に格納して、
バッファをクリアして、すぐに次のデータ待ちにしたいんだけど
どうしたらいいだろうか?Serial.flushみたいなのがあればいいんだけどなあ。 slaveでwire.onrecive使って受け取った32バイトを処理する関数でも登録しとけば良いんじゃないの >>767
うん、それでやってるんだよ。15種のデータを送りたいんだけど、
10個に減らして5分毎に送れば問題なくて、10個と5個に分けて30秒間隔を
空けて送ると前のバッファが残っていてエラーで破棄される。。もうかれこれ2日間くらいハマってるよ。 デバイスもコードも出さないんじゃエスパーしかちゃんと答えられない。stop送ってなくて応答待ちになってるとか。 >>770
あれ、、34バイト送ってるっぽい
一つ減らしてみる、、 こんにちは
DFPlayerでmp3を再生したいのですがうまくいきません
スイッチを押してSDカードの曲を順番に再生したい
ArduinoUNOです
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(10, 11);
DFRobotDFPlayerMini myDFPlayer;
const int buttonPin = 2;
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
mySoftwareSerial.begin(9600);
Serial.begin(115200);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter++;
if(buttonPushCounter==1)myDFPlayer.play(1);
else if(myDFPlayer.readType()==DFPlayerPlayFinished )myDFPlayer.next();
}
}
lastButtonState = buttonState;
delay(1000);
} 何がうまく行かないのか分からない。
とりあえず1秒以上ボタンを押し続けないと動かないコードになってるけど
期待した動作なの?変数の使い方やツッコミどころは多々あるけど、
うまく行かない原因が分からんわ。
初期化も無いみたいだし、サンプルは動くの? 自己解決しました。ケアレスミスで括弧の位置がおかしかった。 間違えました。
2曲目から再生されてしまう。ボタンを押すと1曲目を再生し、ボタンを押すたびに2曲目、3曲目・・・と制御したい。
#include "DFRobotDFPlayerMini.h"
#include "SoftwareSerial.h"
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void setup() {
// put your setup code here, to run once:
mySoftwareSerial.begin(9600);
Serial.begin(115200);
pinMode(2,INPUT);
myDFPlayer.begin(mySoftwareSerial) ;
myDFPlayer.volume(30);
}
void loop() {
if(digitalRead(2) == HIGH){
myDFPlayer.next();
}
} bool first=true;
void loop() {
if(digitalRead(2) == HIGH){
if (first){
first=false;
myDFPlayer.play(1);
}else
myDFPlayer.next();
}
} 知人から頼まれてNano互換機でWifi接続の監視・通知デバイスを作成したのですが、
できればSSIDとパスワードは聞かずに(ハードコーディングせずに)知人自身の手で設定・変更ができるようにしたいです。
開発環境無しでUSB接続してUIからデータの一部を書き換えるようなアプリって存在しますか? int number =1;
void loop() {
if(digitalRead(2) == HIGH){
myDFPlayer.play(number);
number++;
}
} >>780
やはり作るしかない感じですかね… と言ってもArduinoもWebで公開されてるものをツギハギのコピペでどうにか動かしてる状態で、
USB通信するWinAppなんて全く自力で作れるビジョンが見えないというのが正直なところです
Bluetoothモジュールつきに切り替えてスマホのシリアル通信アプリで書き換えてもらうのが楽かもしれませんね >>781
USB通信するWinAppで考えているくらいなら、ユーザにarduino ide入れてもらってソース提供、#define で一番上で定義しておいてそこを書き換えてもらう。
ソース提供嫌なら、Hexファイルのssid部分を書き換えるアプリつくってセットで提供。SSIDの文字数がわかっていないとちょっと工夫がいるけどね。
Hexファイル書き込みツールはググってね。 >>782
ソース提供は全く問題ないのですが、最終的にPCスキルがゼロに等しい人でも使えるようにしたかったので
IDEのインストールやデータ保管の必要がある専用書き換えアプリ仕様は極力避けたくて方法を模索してました
正直シリアル通信もかなりハードル高いと思ってます(USBだとホスト機能の有無云々とかわからないと思うし)
「スイッチ切り替えるとUSBメモリとして振舞って、そこにあるテキストファイルをメモ帳で書き換えればOK」ぐらいまで行ければ最高なんですけどね SSIDとパスワードをもらうんじゃない、
こちらから指定するのだ。 microSDカードじゃ駄目?
シールドが100円程度だし、固定ファイル読み込むなら数行程度の
サンプルそのままで動く。
SDカード、PC接続USB、なんて何処でも売ってるし、
事前にファイルを用意してあげて、PCでテキストファイル書き換えて貰う。 >>781
NANOならUSBたってシリアル通信でしょ…
デバイスドライバ作れってワケじゃないんだぜ?
UARTで通信してEEPROMに記録した値を書き換えるようにハードもPCソフトも作ればいいよ >>786
ケースに封入してしまってるので現状の設計だと厳しいですが、SDカードはアリですね
>>787
いつの日かそういうのがスッと作れるスキルを手に入れたいです
もうPC自体持ってないって人も多いんでスマホ単体で完結できるのが最もユーザーフレンドリーかなとは思ってて
さっきAPモードとWebサーバー使ってブラウザ上で設定するって手法を見つけたんでちょっとチャレンジしてみます
皆さんご意見ありがとうございます そうだよねぇ… 若者もみんなスマホっていうハンディコンピューターだもんね
卒業論文やらでPC操作に手こずってたりするみたいよ >>788
ケース加工道具一式があれば簡単な作業なんだけど、
今後も頻繁に何か作るとかで無いと、道具一式で作りたい物が余裕で買えるw
Windowsの開発環境を作るのが面倒なのは、良く分かります。
仮想PCでLinux入れる方が簡単なぐらいですから。。。
>>783 で言われてる USBメモリ には、なりませんよ > Nano
いちからブートローダー作って V-USB を遥かに超えるプログラムを
32kB で作れないから世の中に無いんだろうと思う。
USB ホストにもなれないから、USBメモリを差すこともできない。
外部記憶の唯一が microSD。
>>787 が言う UART 通信であれば、PuTTY(PCのシリアル通信ソフト) とかで、
応答形式2問ですので、PC側のプログラムは不要です。
ESP32 なら色々と方法があるので、Nano にこだわりが無いなら、マイコンを
変更するのも、今後の機能追加もやりやすいかと。。。
後者のスマホアプリなんて IoT感 があってスマートだと思われます。
https://qiita.com/tomorrow56/items/8c2dfdf61d4741ba91de
https://qiita.com/kmaepu/items/3c9c94819f8b0f6da5af >>789
そうね
先ずPCのキーボードが打てないから スマホのフリックならおじさんより高速入力するけどなあw
やっぱり指10本使ったほうが速いと思うけど かな入力に関しては
タッチタイピングに匹敵するとかしないとか… 簡単な英数字入力装置を付けるのはどう?
OLEDとボタン2つぐらいあれば出来そうじゃない? どちらもI2C接続のI/OエキスパンダとOLEDモジュールにすれば2ピンで液晶付コントローラ付けれるぜ いやプログラムも継ぎ接ぎで、動かしてると条件がある。
全くの素人で無いので、心配は皆無なんだけど。。。
エキスパンダも使えば簡単なことだけど、やりたいこと+エキスパンダのサンプルは
存在しないだろうし、全てのピン部分のコードを変更する必要がある。
OLED も Nano の動作メモリ 2k だと日時の文字列フォーマットが限界。
かなり削りまくって sprintf 使わずでカレンダーが限界だった経験。
だって 2,000文字 だぜ?
SSID/Pasd と言っても入力値、比較、結果出力、厳しいと思うよ。 起動時にSDカードが刺さってたら、特定ファイルを読み込んで1行目SSID、2行目にPASSにするとか ありがとうございます
>>777
再生できましたが2曲目スタートでした・・・
>>779
DFPlayerのLEDが一瞬点灯しましたが再生できませんでした・・・ 私なら
スイッチを追加して、スイッチ押しながら起動すると決め打ちSSIDのAPモードで起動、スマホから繋いでwebインタフェースで設定かな。 ちょっとすみません
再生mp3ファイルは書き込んだ順なの?
もう一回確認します >>783
PCと接続しないとすると、
SSIDとパスワードを入力するインタフェース持った別のマイコンMを用意する。 ターゲットは起動時、特定のプルアップしたピンAをみる。Lowなら特定のピンBを介して適当なプロトコルでマイコンMと通信。
得たSSID PASSWORDはeepromに入れる。G、A、B の3pinで済むしプロトコルによってはAB兼ねられるから最低2ピンですむ。 Arduino Microで、排他的な6個のスイッチで1セットと排他的な10個のスイッチの1セットを検出したいんだけど、これってデジタルI/Oピンに直接つないじゃっていいのかな?
内部プルアップって書いてあるけど、プルアップ回路の抵抗って用意したほうがいいの?
用途は個人使用の遊具。
排他的と言うのは、同時押しされる事のないスイッチが6個のと10個ので1つの塊になっててその内のどれか一つしかONの状態にならないって事です。
調べてると、I/Oピンがもったいないみたいなセリフが散見されて、ロジックICとかダイオードとか使うみたいな話も見かけるのですが。 勿体ないとは言うけど他に使わないなら余らせてる方が勿体ないと思わんか? >>801
押されたことだけ検出したいのかどれが押されたか知りたいのか えっと、6個(10個)のうちどれか一つが常時ONになっていて、比較的ゆるい時間精度でそれが検出出来ればいいです。
(チャタリングとか、一瞬だけ押されたのを正確に検知とかは特に気にしない)
なので後者、今どれが押されているかを物理機構ないし使い方で同時押ししないようにするので、誤検出・誤操作関係のカバーも不要です。 >>801
他に使う予定ないなら無駄に余らせてもだしそれでいいのでは? ピンが切迫してくるといろいろ考えるようになる。
排他でいいならボタンごとに違う電圧が印加されるようにすればアナログピン1つで複数個のボタンをカバーできる >>804
まず現状でピンが足りてるの?足りてるなら別に今のままでよくね
勿体ないって言って、たとえばこれ↓2つ追加で付ければ6+10ピン使ってたのを2ピンで済ますこともできるが
https://eleshop.jp/shop/g/gT11512/
16使ってたのを2にして余った14の使い道が何もないならそれこそ勿体ねえって奴では 感謝です。
正確には無くてもいいかなって言う余分なボタン(全て独立して同時押ししうる)が5個と、
10個の排他スイッチ1セットが正確には16個あって10〜16個目は使用上区別する必要がないから電極繋げちゃおうって感じです。
今回は余分なスイッチ排除・16個→10個にします。
>805
ついでで、なんですが...
ちなみに排他スイッチなら、抵抗値変えてアナログで(段階的疑似可変抵抗化)って言うのは調べてて見かけたのですが、ちょうどスイッチ切り替えてる瞬間(0Ω)の時を検出しないように何かプログラムで工夫とかするんですかね? 当初疑問だった事は全て解決しました。ピンは足ります。ありがとです。
>805
なんかこう言うチップを必ず使わないといけないもんなのかどうかがよく分からなかったんです。 >>809
これって、SW3を押してから離してSW4を押す時に、検出が
SW3→SW押下なし→SW4ではなく、SW3→SW4になるように出来ます? >>810
スイッチの状態を読むのはあなた好きなタイミングでやって好きな処理をしたらいいのでは?
そもそも>>804で「一つが常時ON」って言ってるけどセレクタスイッチなの?
それをたとえ10ピン全部1個1個つなげたとしてもスイッチ自体は「SW3→SW押下なし→SW4」という動作だけど。
スイッチの動作と読み取った時の処理をごっちゃに考えてない? 10個のモーメンタリスイッチであれば「常時ON」っていうのはソフトウェア的に持ってる情報であってスイッチの状態じゃない >>810
安定した状態がみたいなら複数回読んで比較とかすれば。 ああ、そうか人力の範疇でどれかにスイッチが入ってる(入れてるつもり)のと電気的に切り替えの時に必ず全スイッチが切れてるのは別か... >>811,>>812
SW押下なしの部分を処理的に無視するプログラム作れば良い訳ですね。 電気・電子掲示板群 ttp://x0000.net/forum.aspx?id=16
学術巨大掲示板群: アルファ・ラボ ttp://x0000.net
物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など
PS 連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0 様々なご意見ありがとうございます 全部読ませていただきました
皆さんそれぞれ手法が違うのはやはりArduinoは自分の手の届く範囲で使うものという前提なのか、
知識が無い人に渡してコンフィグをさせるインターフェースの定番は確立されてないのかなという印象です
クソだなと思ってたルーターの設定画面が急に偉大に見えてきましたね >>817
定番というか
>知識が無い人に渡してコンフィグをさせる
ようなものを作れる人は自分で作っちゃうから定番が産まれようがないだけでは もう今の時代じゃPCよりスマホの方が圧倒的に皆が持ってるもんなぁ
Androidアプリも簡単なのでよければProcessingでArduino並に簡単に作れる時代だしね Arduinoにデータを入力する方法が明確でないから何をするか分からないみたいな
状態じゃないのかな
Arduinoで動的に外部からデータを変更したいならば、まずはどんなインター
フェースでデータを渡すか考えないと話が始まらない
Arduinoは出来合いの製品と違って、外部とデータをやり取りする部分はすべて自分で
実装する必要があるので、特定のインターフェースでやり取りするノウハウはあっても、
このインターフェースに決めうちでやり取りをするアプリとかノウハウっていうのは
存在しないよ
Arduinoの閉じた世界でスイッチや出力機器を着けて使う分にはArduinoのH/WとS/Wの
知識があれば出来るけど、Arduino以外の世界と繋ぐ場合には相手側の知識もないと
どうにも出来ないよ >>822
つまり自分で作るしかないということじゃない? 「Arduinoは自分の手の届く範囲で使うものという」前提
と
「知識が無い人に渡してコンフィグをさせるインターフェースの定番は確立されてない」
は関連はないのでは。
テレビのリモコンみたいな性格のものをArduinoで作ることはできるし、
それは自分の手が届く範囲外にも拡散しうるけれど
知識のない人がコンフィグする必要はないしね。
パソコンが使えるならUSBの仮想シリアル接続で、特に障害になることはないし。
Bluetooth は少量のビジネスならしんどいけど、趣味の範囲ならわりと多くの人が
使えるI/Fかもね。 >>817
微妙に言い回しに違和感あれどそのとおり。このわずかのメモリしかないコントローラに定番のあれや定番のこれを設けたら、どんなこともできる自由度が失われちゃうからね。
ルータはルータしかやらないからその固定的インターフェースが意味があって過剰じゃないんですね。 VCPも含めてシリアル通信でマイコンと端末を接続して、ユーザーサイドで設定ができるようにするとしたら、
皆さんは端末側のプログラムをなにで組んでるでしょ。
俺はパソコン前提でいいことがほとんどなので、C#で作ってるけど。
調べてみたらProcessingは面白そうですね。 音声認識w
一般人の例えとしてルータは、問題ないと思うけど?
CISCO や YAMAHA のインターフェースを見たらびっくりするだろうな。
ルータ設定に資格があるとか業界の人しか知らない。 すみません。教えてください。
コンパイルエラーで困っています。
ソースはこれ↓です。
https://www.lions-wing.net/maker/temperature/weather-code.html
Arduino IDEは1.8.12を使用しています。
ちなみに、「#include <Time.h>」は「#include <TimeLib.h>」に変えています。
あと、センサー類のライブラリの名称は必要に応じて変えています。
(テンポラリのフルパス) In function `setup':
(スケッチファイルのフルパスと行番号) undefined reference to `setSyncProvider(unsigned long (*)())'
(テンポラリのフルパス) In function `loop':
(スケッチファイルのフルパスと行番号) undefined reference to `now()'
collect2.exe: error: ld returned 1 exit status
いろいろ調べてみたら「未定義への参照」とのことらしいのですが、皆目見当がつきません。
(ソースを書かれた方はこれできちんと動いているはずなので、間違っているとは思えないのですが…。) TimeLib.hにはsetsyncproviderが定義されてないからTime.hが必要とか >>832
Time.hのままだと、もっとたくさんエラーが出たので… >>831-832
>「#include <Time.h>」は「#include <TimeLib.h>」に変えています。
#include <TimeLib.h>で動かすことに超こだわっているんだよ
それを#include <Time.h>したら大敗北で絶対にしたくないんだよ >>833
そもそも必要なライブラリは入ってるのか >>834
あと
>あと、センサー類のライブラリの名称は必要に応じて変えています。
ここも気になる
ヘッダの名前変えただけじゃ動かないのもあるし >>833
setSyncProvider(unsigned long (*)())とnow()
を自分で作れば良いんじゃないか?
できないなら、ここの人たちに頼めば作ってくれるだろ Timeライブラリってデフォルトでは入ってない気がする ライブラリマネージャでTimeを探してインストールしろ
多分入ってない Time.hはWindows環境だとバッティングするから
TimeLib.hに替えたんだろ 皆様ありがとうございます。
Time.h、TimeLib.hどちらも入っております。
ちなみに、Time.hの中身を見たら
#include "TimeLib.h"
の1行しかありませんでした。
あとこのスケッチは、sparkfunのサンプルスケッチを基に書かれた様です。
https://learn.sparkfun.com/tutorials/weather-shield-hookup-guide
おおもとは↑これの「Example Firmware - Weather Station」なのですが、
シールドのセンサーがHTU21DからSi7021に変更になったため、
ライブラリもsparkfunの新しいサンプルスケッチに合わせて変えています。
nowとsetSyncProviderはTimeLib.hの中に書かれていたので、定義されていると思ったのですが… >>841
ライブラリのインクルードのメニューにTimeって入ってる? >>842
メニューに「Time」はありました。
いま、「#include <TimeLib.>」をコメントアウトして「#include <Time.h」のコメントアウトを外してみたところ、エラーは変わりませんでした。
「Time.hでエラーがたくさん」というのは、どうやらTimeLib.hを拾ってくる前の状態でのエラーだった様です。 ということはライブラリは入ってるのにライブラリの関数実態が見つからずにリンクに失敗してるな
ライブラリマネージャでTimeを最新バージョンにしてみるとか ぼく最近Timeライブラリ入れたけど<Time.h>のみで使えてるなあ…
ネット繋いでNTPタイムサーバーから時刻拾ってきてTimeライブラリに
設定して管理できるサンプル… Timeライブラリをリンクできるかの確認のため、ファイル→スケッチ例→Time→TimeNTPを検証ボタンでコンパイル
このスケッチ例はsetSyncProviderを呼ぶ
これで失敗するならライブラリがきちんとインストールされてない >>846
ありがとうございます。
スケッチ例にある「TimeNTP」のコンパイルを試してみたところ、同様のエラーが出ました。
ご指摘の通り、ライブラリのインストールがきちんとされていない様です。 それならライブラリマネージャでインストール
インストール済み扱いなら一旦違うバージョン入れて最新を上書き >>848
試してみましたが、TimeNTPでの状態は変わりませんでした。
ライブラリマネージャーで一度1.4.0に落とし、さいど1.6.0にしてみました。 まぁ、ボード設定が間違っているんだろう。
それかMSストアからIDEインストールしたんじゃね? ボードをArduino unoにしてTimeNTPの検証でエラーが出るなら変開発環境がおかしくなってると思うからIDEとか含めて再インストールかね ■ このスレッドは過去ログ倉庫に格納されています