Arduino初心者熱烈大歓迎質問スレ part33
レス数が1000を超えています。これ以上書き込みはできません。
・プログラムは、レス内に直接書き込まず右記を利用しましょう。
http://codepad.org/ https://pastebin.com/
・解決したら結果報告しましょう。
・次スレは950が立てましょう。
立てられない場合はレス番で代理を指定しましょう。 質問です
もしかして手慣れてくればESP32でほぼ十分でいわゆるArduino自体はほとんど使わなくなったりしますか? 目的による
ESP32の弱点はGPIOが少ない、消費電力が大きい
IOは拡張IOやArduinoをスレイブデバイスとして配下に付ければいけど、
ラジオのコントロールやリモコンなどちょっとした事をバッテリー運用したい場合はTiny リモコン実験で使う
IRremote.h
ってのはパソコンのどのフォルダにあるのでしょうか?
C:\Program Files (x86)\Arduino
を探しても見つかりませんでした。 >>7
ESP32はCPU、Arduinoは開発環境の名前だから、比べるのが間違ってる。 最強の定義が不明確、質問がポンコツです
・回路が簡単
・消費電力が少ない
・ノイズに強い
・周辺回路と親和性が高い
・一般的で理解しやすくメンテナンスが楽
すきなものをえらべ >>10
Arduino って書かれると、
IDE のことか、特定のボードのことか
Arduino 対応してるボード一般のことか
いわゆるArduino言語のことか
何を指してるのかわからないよね。
この板でさえそうなんだから。 >>15
なぜ画面のキャプチャを貼らずにスマホで撮る?
乱れてて読めんよ
それより、エラーメッセージをコピーして貼った方が良いけど >>16
ポート番号が間違っていた様でデバイスマネージャーで位置を確認して訂正したら書込み完了しました
初歩的なミスで申し訳ありませんでした
あとは配線して動作を確認してみます >>16
3枚目の写真の
プロセッサ:"ATmega328P(Old Bootloader)"
を
プロセッサ:"ATmega328P"
に変更でどうでしょう? >>9
うちの環境では、
スケッチのあるフォルダの下のlibraries以下にIRremoteがあってその中 >>9
スケッチの場所はFile>Preferencesで確認 >>18
初歩的過ぎてすみませんでした
また動作で躓いたら相談させて下さい >>22
そのためのスレなんで質問内容は構わないけど
画面のキャプチャを取る方法は身につけてね >>15
sikiとかの専ブラ使ってハードコピー取ってimgurにアップしてほしい >>20
>>21
有りました。ありがとうござる。 >>8
おお、ありがとうございます
電力が高かったんですね、知りませんでした
ESP32のモジュールにすれば便利だわ安いわでいいとこ取りだと思ってたら盲点でした >>24
アドバイスありがとうございます
次回から活用させて頂きます >>24
画像をimgurにアップしてアドレス貼るとこまでは出来てるんだから何もSikiでなくてもええやろ
むしろ最近の人は逆にArduino IDEをスマホで使った方がいいのかも
https://togetter.com/li/943517 >>29
此方はdebianスマホ使ってるから簡単にumpc化できるけど泥iosじゃ不便なんじゃね 結線してボタンを押さずに動作する様になったのですが
スイッチが入ってから5秒くらいでスイッチOFFになりまた5秒くらいでONになるのを繰り返します
ONのまま変化させない様にするにはどこを変更すれば良いでしょうか?
void setup() {
pinMode(2, INPUT);
digitalWrite(2, HIGH);
pinMode(3, INPUT);
digitalWrite(3, HIGH);
}
void loop() {
delay(1000);
digitalWrite(2, LOW);
delay(1000);
digitalWrite(3, LOW);
delay(5000);
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(3, HIGH);
} >>32
スケッチの各行の意味はわかってる?
その辺は調べて自分で習得する気はないの?
無いなら以下のようにしてください。
void setup() {
pinMode(2, INPUT);
digitalWrite(2, HIGH);
pinMode(3, INPUT);
digitalWrite(3, HIGH);
delay(1000);
digitalWrite(2, LOW);
delay(1000);
digitalWrite(3, LOW);
delay(5000);
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(3, HIGH);
}
void loop() {
} この方が早いか
void setup() {
pinMode(2, INPUT);
digitalWrite(2, HIGH);
pinMode(3, INPUT);
digitalWrite(3, HIGH);
}
void loop() {
delay(1000);
digitalWrite(2, LOW);
delay(1000);
digitalWrite(3, LOW);
delay(5000);
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(3, HIGH);
while(1);
} 「while(1);」のかわりにArduinoをスリープさせて消費電流削減、すなわちCO2削減!
#include <avr/sleep.h> // スリープライブラリ
void setup() {
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
}
void loop() {
delay(1000);
digitalWrite(2, LOW);
delay(1000);
digitalWrite(3, LOW);
delay(5000);
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(3, HIGH);
//スリープ処理
ADCSRA &= ~(1 << ADEN); // ADCを停止(消費電流 147→27μA)
set_sleep_mode(SLEEP_MODE_PWR_DOWN); //スリープモードの設定
sleep_enable(); //スリープを有効にする
sleep_mode(); //指定したモードでスリープを開始!
} pro mini 5Vの互換機を買いました。3.3Vも買う予定です。 上の条件でUSB書き込み装置のお薦めがありましたら、教えてください。 Uno,Nano共に持っているで、当面は教えて頂いた方法を試してみます。
USBaspはpro miniに直で挿せないのが厳しいですが、安定してそうですね。
書き込み機によってはドライバやリセットの問題があるようなので、もう少し研究してみます。 >>45
USBaspとPro miniの接続はピンヘッダーのオス・メスなんかで自作できますよ
一度作れば挿せばいいだけなので後々楽ですね
pro miniは接続に使うVCC,GND,RST,MOSI,MISO,SCKピンが片側に並んでますから作りやすいかと >>45
USBasp押しの人が多いみたいだけど、これはAVR用のライターなのでややこしくなるだけなので、
個人的にはお勧めしない。もちろん使えなくは無い。
ここは普通のUSBシリアルアダプタを買った方が安いし、汎用性も高い。
ちなみにインターフェイスチップはFDTIのFT232やProlificのPL2303が有名だけど、パチ物がいっぱい
出回っていて、互換性の問題で動かないことがある。また、Windowsはパチ物を発見するとドライバを
使えないようにしてしまうことがあって、話はさらにややこしくなる。
そんなことで、個人的にはCH340系の物をお勧めする。いろんなものが売られているけど、
Aitendoなら500円くらいが相場。なお、Arduinoで使うならDTRが出ていないと自動書き込み出来ない
ので注意。
で、>>41 はPro mini のコネクタに直接挿せる物は無いか、という質問なんだと思うけど、
ごめん、ピン配置まで合っている物は判らない、というこ調べたことが無い。
うちも、>>46が書いているように変換ケーブル作って対処している。 >ここは普通のUSBシリアルアダプタを買った方が安いし、汎用性も高い。
同意
AVR用のライターを一生懸命推してる人がいるけど
Pro Mini買いましたという質問の主旨をはき違えてないか?
って気がして、俺は>>44のでいいと思う
もっとも質問者が納得しているようでそれならそれでいいんだけどねw 41です。沢山のご回答ありがとうございます。
>>44
理想的な商品です。
Arduino互換ボードの書き込みに使える、商品説明にあり、5Vと3.3Vの切り替えが出来る。
しかし現在在庫0なのが残念。新型も売り切れで入荷未定だそうです。
>>46
ケーブル自作は電子部品用の経験はありませんが、試してみたい分野です(自動車用有り)。
USBaspはArduino化など興味深い特徴があるので、研究用?に買いたいと思います。
>>47
ドライバとパチ物に関する情報、参考になります。
>DTRが出ていないと自動書き込み出来ない
これは重要な情報です。
>>48
スイッチサイエンスの商品ということで、初心者には安心感がありますね。
経済性?に難があるのと現時点では手に入らないのが悔しい。
3.3Vと5Vのどちらでも使える、直で刺したい、自動書き込み、ドライバ問題が解決済み、入手性と経済性そして信頼性等の条件を考え探しましたが、すべてを満たす商品は現時点では見つかりませんでした。
3.3Vという条件を落とすと、以下の商品が秋月にあったので、他の部品を注文するときに一緒に注文する事を検討しています。
https://akizukidenshi.com/catalog/g/gK-14745/ >>49
この方がいいんじゃない?
https://akizukidenshi.com/catalog/g/gK-09951/
5V/3.3VをDIPスイッチで切り替え
ピン配置もスイッチサイエンスのと同じ >>50
紹介ありがとうございます。
当初、これを最有力候補にしていたのですが、秋月の商品紹介の画像で横五個並びの真ん中を拡大したものを見ると、6個のピンホールの一番下がRTSになっていました。
スイッチサイエンスの商品では、このピンがDTRになっています。
確認の為、AE-TTL-232R取扱説明書の回路図を見たところ、FT232RQからRTSから6PIN HEDに配線が繋がっていて、DTRは接続が無いのです。
現在のArduinoでは、自動リセットはDTRを使いRTSは古い仕様だという情報があります。
現在でもRTSでも自動リセットがかかりそうだ、という雰囲気もあるのですが、どうも確信が持てないので候補から外した、という経緯があります。
https://ht-deko.com/arduino/usb2serial.html
全く的外れの事を書いているかもしれませんが、ご指摘、ご指導頂ければ幸いです。 >>51
https://akizukidenshi.com/catalog/g/gC-09830/
これ買えば、そもそもどんなUSBシリアル変換ボードでもピンヘッダすら無しでつながる
自分で配線しなければいけないけど汎用性は広がる 41です
再度秋月のCH340E USBシリアル変換モジュール Type−Cを確認したところ、こちらもDTRではなくRTSになっていました。
https://akizukidenshi.com/catalog/g/gK-14745/
この商品は取説でもArduino Pro Miniとピン配列が同じ、と書いてあるので、50さんからおお勧め頂いたFT232RQも使える、という事になりますね。
やはりFT232RQを3.3Vと5Vの切り替えがあるので第一候補にいたします。
https://akizukidenshi.com/catalog/g/gK-09951/ >>47です
>DTRが出ていないと自動書き込み出来ない
と書いたのは、
TXとRXしかコネクタに出てない物があるので、そういうのは使えないと言いたかった。
舌足らずですみません。RTSでもいけると思う。 >>52
リンクの画像がうまく確認出来なのですが、自作の自動車用シフトライトを作っているので、小さなケースに組み込むため書き込み用のピンヘッダは自分も付けたくない、と思っています。
>>53
これはぜひ欲しいですね。下と一緒に購入決定です。
https://akizukidenshi.com/catalog/g/gC-09831/ >>55
これは嬉しいです。調査ありがとうございます。自信を持って買えます。
>>56
情報出して頂けるだけで感謝です。 >>54
私の知る限りではピン・アサインは2種類です。
◆FTDI USBコンバーター系のピン・アサイン
真上右から下記ピン・アサイン
1 GND
2 CTS
3 VCC
4 TXD
5 RXD
6 RTS
◆SparkFun Electronics系のピン・アサイン
1 GND
2 CTS#
3 VCC
4 TXD
5 RXD
6 DTR#
RTSとDTRは同じですよ。
今、一般的にはDTRが主流です。
DTRがPro miniから見て左から始まる物と、右から始まる2種類あり
機種に合わせてAliExpressから購入してます。
https://i.imgur.com/wbWnVmi.jpg
アリでどちらも送料込みで150円前後です。 >>57
使ってるうちにバネが緩んでくるけど
ちゃんとバネ部分を直しながら使えば非常に便利
ピンヘッダ付けたくないならこれに勝る方法は無いと思う >>59
実用上、RTSとDTRは同じものと考えていいようですね。
AliExpressの存在は最近知ったのですが、国内で最近Pro Mini3.3V互換機が高いので、初回特典クーポンを利用して買おうと思っています。
>>60
今まで探していたのはコレだ!という商品ですね。
Pro Miniは小型ケースに入れて使う事を想定していますが、プログラムの書き換えがあったとしても両バネタイプが活用できそうです。 >>61
届くまで2〜3週間かかるのだけがデメリット
その間に手持ちのUNOやNanoでスケッチを練って完成度を上げときゃいいわけだけどね >>52
pogo-pin使った書き込み治具ですね。
私の場合は挟むとこは市販の洗濯バサミで作ったけど、耐久性が要る場合はこれが良いですね。 普通のICクリップの先っちょを突っ込めるからそれで間に合うのだけど AliExpressでpro mini用にいくつかシリアルコンバーターを買ったけど、
全部スケッチの書き込みが出来なかったわ。どれ買ったら良いんだろ・・・
https://i.imgur.com/iTriy4k.jpg とりあえず正規のプログラマとか評価ボードを買うもんじゃないの?
初心者ならなおさら。 >>67
何一つ成功しないなら
・やり方が間違っている
・Prominiにbootloaderが入っていない、もしくは別のものが書かれている
・Prominiがハード的に壊れている >>68
やっぱ高いけど正規品をかうのが近道ですかね
日本の販売店で買えばまず間違いないかな
>>70
ブートローダーもハード的に壊れてないから、
もしかしたらやり方が間違ってるのかもですねw 何一つ成功しないのにどういう根拠で壊れていない、ブートローダーははいっていると判断したのか不思議 これに正規品があるかどうかわからんけれど、まずは「わりと正規品に近いもの」を扱っている店で買ってみては。
https://www.switch-science.com/catalog/342/
https://www.switch-science.com/catalog/1032/
スイッチサイエンスがそういう店かw って言う人は好きにするといいです。
よくわからん人が、Aliで買ってうまく動かない場合、
自分が悪いのか、製品が悪いのか、を疑う比率って1:9ぐらいになると思う。
そういう場合、いろいろ取っ換え引っ換えしちゃう。
わりとまともだと思えるもので動かなければ、より強く自分のミスを疑えるからおすすめ。 >>72
確かにそうだね。根拠なしに決めてしまうことは良くない。 Promini328ならArduinoIDEに標準で入ってるマネージャーで書き込みできるけど
Promini168はminiCoreとかの追加のマネージャー入れないと使えなかったはず
あと328Pではなく上位互換のPBもデバイスIDが違うといって蹴られることがある
「スケッチの書き込みが出来なかった」ていうだけでエラーメッセージも何も情報がないので判断きないけどな >>72
>>74
普段はUSBasp使って運用してるんで壊れてはないだろうけど、
確かにブートローダーは書き込んでるつもりだけど、ちゃんと入ってるかどうか分からないねw nanoで試作してUSBaspでpro miniに書き込んでて、あんまり不自由を感じないから
またあの試行錯誤をやるのかと思うと気が引けるw 今までUSB−TTLは安物しか買ったことがなかったけど全てProMINIに書き込み出来た
CH340G(3種)、CH340E(かなり小さい)、CP2102、FT232RL、PL2303(当然パチ物)
HT42B534(使ったことがないし予定もないが安く売ってたら1回くらい使ってみようかな)
5Vと3.3Vと両方使う人はこれとかよさそうじゃない?
https://aliexpress.com/item/1005002810770255.html またUSBaspの人が出てきた。
その人はICSP書き込みを前提に話しをしているのてややこしくなる。 >>67
その状況でまだ自分のせいでなくモジュールのせいだと思い込んでるのが書き込めない理由 >>80
別にモジュールのせいだとは思ってないよ? 書き込めないのがモジュールのせいとは思ってないのに、「どれ買ったら良いんだろ・・・」とはこれいかに。 >>77
素朴な疑問だけど、IDEで下記Lチカは出来るの?
[ファイル]-[スケッチ例]-[01.Basics]-[Blink] nanoのバイナリをprominiに書き込むと、「俺はnanoだ」と嘘吐くprominiになるかも知れんのう >>85
そう言われてみれば、国内で正規品買ったことない、全部中華製だわw Arduino IDEって使い辛いですよね。
もう少し使い易いエディタはないのかな? >>82
水子の祟りじゃないかなぁ。
あ、僕は童貞なので無縁ですが(^p^;) Arduino IDE のバージョンとボードデータのバージョンの相性があって書き込めなかったりすることがあるな
ESP32でなにやっても書き込みできなくて、ボードデータのバージョン変えたらあっさり書き込みできて1日無駄にしたことがあるわ こんばんは
arduino同士を通信させたい場合、500mくらいだとどんな通信方式が最適ですか?速度は遅くても構いません
RS485あたりが伝送距離長くて良いかなと思っているのですが >>94
屋外で障害物がなければXBee PROとか >>94
線引けるならRS485がいいと思う。
屋外だろうから絶縁とか雷対策が必要だよ。 LoRaWANとLoRaは違う物だと知らずにWAN買ってしまった思い出 ご家庭に送信できるパラボラアンテナは無いだろ(笑) >>95
ありがとうございます!
なるほど、無線という手もありますね!検討します。
>>96
ありがとうございます!
雷対策というとシールド線とか過電圧対策でしょうか? それはEME(earth moon earth)と言って50年以上前から行われているんだけど、LoRaでやったのがちょっと面白い程度の話だと思う。 月面反射
月に跳ね返すのはムーンサルトって言うんよ
地球の裏側にだって電波届けちゃうのさ 原野か牧場か河原か知らないけど、WiFiで八木とかパラボラのアンテナでLAN組むとか、
メディコン噛ませて光ファイバーの領分ではなかろうか。 見通し良い所ならレーザー+フォトダイオードで挑戦してみたいな 月で跳ね返した電波をハゲで跳ね返し直すのさ
月の裏側との通信だぜよ atmega328pを単体で使う場合、
追加のボードマネージャのURLにURLを追加する必要があると思うんですが、
具体的にはどのURLでしょうか? >>119
Arduino IDE Board Manager ATmega328P
でググってみ UNOで書いてそのCPUを引っこ抜いて使うのじゃダメなの。
もちろんUNOには別のブートローダー入りのCPUを戻しとく。 >>120, 121, 122
ありがとうございました。 Unoとかに使われるAtmega328シリーズのスペックを見ると外部クロックで20MHzに対応しています。
ですが純正、互換機共にその大半は16MHz(若しくは半分の8MHz)になっています。
なにか意図があるのでしょうか?
16MHzのクリスタルだけ異様に安いとか? >>125
互換機でも純正品と同じにしないと互換性なくなるだろ。
何でUnoを16MHzにしたかなんて知らんけど。 >>127
3.3V は 16MHz も無理だろ。 >>125
クロックを16MHzにしておくと、タイマーの時間をきっちりした値に作り易い。
ちなみに16MHzを64分周して4usで、これがmicros()の分解能。これを250回
割込みでカウントしてmillis()の1ms。
もし20Mhzとかにするとプログラムがややこしくなって割込み性能が下がるし、
半端な値の水晶が必要になって割高になる。
だから、16Mhzの水晶の値段が安いから?という推理はあながち間違いで
はない。 オリジナルのATmega8、Arduinoは16MHzで動作しました。
これは、使用されたATmega8の最高定格クロック速度でした。
ATmega168(最高CPU速度が20MHz)に「アップグレード」されたとき、クロックは16MHzのままでした(おそらく)
設計者は、追加の25%の高速化の恩恵を受けるよりも、
新しいクロックレートでより多くの人とコードに下位互換性の問題があると考えたためです。
俺は彼らが正しかったと思います。 第二に、実際、私が聞いた最も良い理由の1つは、UARTが16MHzで実行しているときは
1Mbitと2Mbitのレートに完全に一致するが、20MHzで実行しているときは一致しないということです。 3番目のポイントは、ATmega168・ATmega328の低電力の水晶発振器が16MHzを超えて動作していないことです。
したがって、XTALピンに20 MHzの水晶を接続している場合は、
より多くの電力を消費する(または水晶をまったく使用しない)フルスイング水晶発振器を使用する必要があります。 >>131
1Mbps のUARTって標準的ではないからそこでピッタリになっても嬉しくないよね。
921600bpsならいいかな。 UARTを4個増設したいんだけど、お手軽な方法は何かありますか?
調べたところでは、i2cでunoをつなげてポーリングするかな?と思っています。
親機はxiao(3.3V)です。 横からですがソフトウェアシリアルってどうやって周波数を作るんですか?
タイマ割り込みとかで正確にできるんですか? >>135
Software Serial使えば良いかもです。
または、Serial2、Serial3と増やせるのかな? >>136
自分の理解では、多少の誤差があってもいい場合はクロックからとり、誤差が困るときは、unoだと外部にオシレータを付けられるので、そこからとるのだと思います。
xiaoで正確な周波数を生成する手段があるのかな?というのは疑問点です。 >>138
ありがとうございます。
クロックから取るというのはatmegaのタイマ割り込みで行うってことですよね。
外部発振回路を使う手もあるのですねー >>129
なるほど。
内部算数の都合なんですね。
スッキリしました! >>133
USBシリアルを使うなら1Mbps、2Mbpsぴったりが使いやすい gpioとプログラムサイズを少しだけ328pより多く使いたいのですが、atmega64aはarduinoとして使えるんでしょうか?
調べたのですが、あまり詳しい情報が無いのです。
チップのみ組み込みたいので、安価で入手しやすいチップを探しています。 AVRだし、ボード定義ファイルを作れば使えるんじゃないかな。
Arduino Pro Micro (ATmega32U4) オススメするけど。 >>144
Arduino IDEからでも使えますよ。
ボード情報
https://github.com/MCUdude/MegaCore
マニュアル
https://avr.jp/user/DS/PDF/mega64A.pdf
atmega328とタイマーとかレジスタの相違点を調べてプログラムすれば良いですよ。
ライブラリも対応してなかったり、atmega328のスケッチをコピペしただけじゃ動かないことが多いので
難易度は上がるけどね。 >>146
情報ありがとう。
何とかなりそうです。 >>145
atmega32u4はシリアルモニタが使いづらくてデバッグに手間がかかったので、やめたんです。慣れてる328pの上位verを探してます。 >>149
d
ところで、IRremoteって最近のバージョンは複雑でややこしくなってね?
昔のバージョンはサンプルもシンプルで使いやすかったのに。
ソフトウェアがバージョンアップで肥大化・複雑化する典型的パターンだな 41です。
遅くなりましたが、pro miniに使えるUSBシリアルアダプタの件、
秋月のFT232RQを購入し、問題なく書き込む事が出来ました。
沢山のアドバイスありがとうございました。 引き続き41です。
別件になりますが、5個のLEDを同時や走行点滅させるときスイッチ入力に
1、スケッチでINPUT_PULLUPで内部抵抗を使う
2、外部の回路に抵抗を入れる
以上ふたつの例で試した場合、1よりも2の方がキレ?がよく動作する感
じるのですが、いかがなものでしょうか。
1では微妙に引っかかる様に点滅するのに対し、2はテンポよく点滅する
という印象があります。
自分のスケッチがヘボだという事もありますが、ご意見ございましたら
よろしくお願いいたします。 電気の講義で習うところの積分回路で、キャパシタンスに電荷を注ぎ貯めるときに
注ぐ電流量は電流制限抵抗の大きさによって増減するんだろうから、
オンチップの内臓抵抗よりも外付け抵抗の方が小さいような場合なら
急速に動作しても不思議じゃないんじゃね?よくしらんけど(はなほじ >>152
私はそういうふうに感じたことがないというかINPUT_PULLUPしか使ったことない。
外部の抵抗は何Ω?
抵抗低いほうが接点部の表面を僅かに覆う酸化被膜が絶縁破壊しやすいとかあるかも、、
nanoとか内部は10Kだった気が、、 早速のご回答ありがとうございます。
当方電気の基礎知識は小中学校レベルですので、とんでもない事を書くかもしれませんがご勘弁ください。
pro miniは車載で利用し、エンジンの最高回転(6500〜7200rpm)付近での動作を想定しています。
その際オルタネーターは14.5V程度の電圧を発するので、スイッチ入力として5V程に減圧するために分圧抵抗の利用を考えました。
抵抗値を決めるのには以下のサイトで、手持ちの抵抗を選んで代入し計算しました。
https://keisan.casio.jp/exec/user/1316485613
入力電圧(VIN) 14.5V
R1の抵抗値 470Ω
R1の抵抗値 420Ω
出力電圧(VOUT)4.9014…V
抵抗は極力小型に収めたいために1/6Wを使っています。
手持ちではR1 8.2kΩ、R2 3.9kΩが4.67V程度なのですが1/4Wなので物体?として大きいので使うのを躊躇しています。
>>153
外付け抵抗が小さい…、という点では合致しますが、当方の場合は小さ過ぎるのでは、とも感じています。
>>154
UNOの内部抵抗は30Ω程という記述がネットでみられましたが、pro miniの資料は見つけられませんでした。プルアップやプルダウンに外部抵抗で10kΩを使う例は数例見つける事が出来たのですが…。
抵抗は初心者には難解ですね〜。 Uno も pro mini も ATmega328Pだから
プルアップ抵抗は同じでしょ。
20〜50kΩ 41です。
当方の書き込み155に間違いがありました。
誤
入力電圧(VIN) 14.5V
R1の抵抗値 470Ω
R1の抵抗値 420Ω
出力電圧(VOUT)4.9014…V
正
入力電圧(VIN) 14.5V
R1の抵抗値 470Ω
R2の抵抗値 240Ω
出力電圧(VOUT)4.9014…V
以上失礼しました。 >>156
抵抗だけではなく現時点では電子工作は全て難解ですね。
ギターで例えるとFが押さえられない、とかチューニングが出来ない、とかいうレベルだと思います。でも、そこで諦めると先に進めないという。
モノを作るのが好きななんですよ。クルマやバイクの模型はそこそこ作れます。
>>157
プルアップ抵抗はATmega328Pというマイコン自体に内包された機能なんですね。 SW入れるとGNDと電源がR1で直結するのだとすると
流れる電流量I=E/R=14.5/470=0.03085A
R1の発熱量=I*I*R=0.03085*0.03085*470=0.447W
1/6≒0.16666
オーバーしまくりやー あかんやつやー・・・(^p^;)
SW OFF時:
流れる電流I=E/R=14.5/(470+240)=14.5/710≒0.0204
R1の発熱量Q1=I*I*R≒0.0204*0.0204*470≒0.1958W
Q1 > 1/6W
OFFでもあかんやつやー・・・(^p^;) 何故分圧した5Vをわざわざ作るのか。
ポートとGNDにスイッチ入れるだけじゃダメか? 外部プルアップするにしてもarduinoのVCCですればよいのでは。 >>160
pro miniの電源、回転数のレッド、イエローの信号の合計3系統用として以下のレギュレーターを用意してあります。
https://akizukidenshi.com/catalog/g/gM-06353/
小型で発熱が少ないという事でコレを選んだんだですが、ケースのスペースがきつくて電源以外は抵抗で空間を節約しようと思いましたが…
ケースはこちらです。
https://www.marutsu.co.jp/pc/i/4742/
ダッシュ裏に収めるのを目標にしていますので、USBチャージャーから配線を引くの抑え、クルマ自体の12V配線から分岐させる事を計画しています。
>>161
やはりダメでしたか(;_;)。
ブレッドボードで15V流し指先を15秒ほどあてて、熱くならないので大丈夫だろうと安直に考えていました。入力信号は2系統で、一つは長くても数秒、もう一つは一瞬しか流れないのでアマくみていました。
もう一度勉強しなおします。
>>162
実際は上下の余裕があるようですが、5Vが信号として使う電圧だという事なので降圧の手段として考えました。
信号はタコメーターから12Vで出てきます。以下の商品の商品のポルシェ用というモノで、現在は廃盤になってしまいました。
http://www.nagaidenshi.co.jp/METER/1930.shtml
>>163
すみませんm(__)m、浅学でご指導の意図を汲みかねるのですが、電源電圧を利用せよ、との事でしょうか。
当方も制作したい物の仕様を、はっきり提示していないのがいけないのでしょう。 スイッチ入力なのか信号入力なのか。信号入力ならプルアップは不要というか入れちゃ駄目。 スイッチではなくて、12Vのパルスが入ってくるんだね。
電圧1/3にすればいいんじゃない?
手持ちの抵抗あるならこんな感じ。
PULSE
|
R
|
R
|-> PIN
R
|
GND 抵抗分圧よりツェエナーのほうが
無ければLED、Vf3.0Vの青や白とVf1.8Vの赤を直列でクリップ 沢山のアドバイスありがとうございます。
>>165
自分はスイッチ入力と信号入力の区別がついておらず、誤解を与えていた様です。
タコメーターからの12VをトリガーとしてLED動作の切っ掛けとします。
>>166
抵抗分圧の一段目?を直列で二つに分けるのですね。実装のスペースに問題無ければ利用したいので研究いたします。
>>167
ツェエナーダイオード、手持ちはありませんが以下の商品を見つけました。抵抗を入れてもスペースを取らず抵抗分圧とスペースは変らず有力な手段だという気がします。
https://akizukidenshi.com/catalog/g/gI-06000/
LEDはウインカーを自作した時に余った物が各色沢山ありますが、5oのモノだとケーススペース的にキツいかもしれません。配置を試してみます。
>>168
周波数特性は降圧回路を組んだ際にArduinoに影響を与えるものでしょうか。難しい問題です。 12Vとか14.5Vとか書いてるが
車は平気で100V超えるノイズありうるから
いろいろえろえろ考えるがいい >>150
> ところで、IRremoteって最近のバージョンは複雑でややこしくなってね?
どこかのタイミングから、サポートチップも減ったはず。。。
互換チップが軒並み動かないらしい。 >>170
エンジン運転中はオルタネーターから14.4V出てくる仕様だけど
冬季のバッテリー弱ってる状態だとかなり出てるっぽい
自作の車載リモコンで絶対規格15VのAMS1117が焼けたわ
こうやって痛い目にあって経験を積んでくんやろうなw >>172
横からですが焼けた理由が気になる。
オルタネーターからの出力の変動ですか?
ノイズ? なんでレクチファイアとかレギュレータの後じゃなくて
オルタネータなのか? という当然の問いに
交流信号として読み取って回転速度を知るためだろう、
という脳内問答を繰り広げていアナログ入力だと想定している人と、
オルタネータと言っているけれどレギュレータ通した後の直流安定化後の
電源を指しているのだろう、と考えている人との答えが混在している気が
するんやが 誰も確かめようとしないのはなんでなんや; オルタネーターの出力で回転数をカウントするなんて誰も書いてないよ。
12Vはバッテリー系の電源電圧のことでしょ。
14Vくらいに上がるって書いてるし。
>タコメーターからの12VをトリガーとしてLED動作の切っ掛けとします。 車に詳しい訳じゃないから、わかる人が詰めてくれ。元質問も信号入力なのにプルアップ云々とか変な流れだったし。
技術的なところは初心者じゃわからないんだから、構想の所をまずは詳しく話してほしい。モノがわかれば仕様は詳しい人がいるだろうし。 OBDで電圧モニターしてると15.6Vくらい出てるからな >>178
>>152 に
>別件になりますが
ってことでプルアップの話が出て来たからごっちゃになってるよね。
車速パルスを受けて何かやりたいんでしょ。
それを分圧するってだけだよ。 以前、旧車の電装系レストア時に
点火タイミング制御の機械式接点の代わりに
オルタネータの出力でタイミング制御して高速域の最適化で
元よりも早い回転数に対応することに挑戦されていたブログを拝読したことがあったし、
オルタネータからわざわざとるのだから交流波形入力を使うのだろうという
推測も合理的な気もしなくもない、のだけれど、、、
今回に限れば、内部プルアップのスイッチと外部分圧とでは
スイッチの切れが云々というハナシが冒頭にあった気がするので
スイッチの付け方を悩まれているという解釈にも妥当性を覚えるんよなぁ・・・; オルタネーターから取るのか…
似たようなことをしようとしてるけど
俺はクランクシャフトセンサーから取るつもり >>183
なにそれ、クランク回転数とかトルクセンサが付いてんの?と思って検索したら、角度センサなんだ
今は点火タイミングも電子的にやるんだな、って当たり前か。。 ライトとか普通にAC電源だから電源の変動から回転数は取ったわ 41です。
断片的な情報で幾度か質問をした事により、皆さんを混乱させて申し訳ありません。
以下は今までの自分が出した情報をまとめ、足りないと思った部分を書き足しました。
また、課題となっている点を次のパラグラフとしました。
今更ですが、自分が作りたい物は、自動車で特定回転になるとランプが光り注意喚起を促す、俗に言うシフトライトというモノです。
F1の中継などをみていると、ハンドルの上の方で十個位のLEDが意味ありげに点滅しているのを見た事があるかと思いますが、あれもシフトライトの一種です。。
クルマは1975年型ポルシェ911カレラのマニュアルシフトです。
運転席正面に大型のメーターが五個並んでおり、メーターを引き抜くと裏にいくらかのスペースがあるので、この空間にpro miniを収めた小型のケースなら入る余裕があります。
https://www.auto-direct.jp/vcsPage/stockList_457-1/detail_791.html
上記サイトに同型車の写真が載っており、横にスクロールするとメーター回りが数枚写っています。
プロミニを収めるケースはタカチのSW55Bを選びました。寸法は以下の通りですが、これ以上大きくなるとメーター裏側の収まりが厳しくなるかもしれません。
※外径 W 40 D 20 H 55 ※内径 W 35.2 D 13 H 50.2
https://www.marutsu.co.jp/pc/i/4742/
そして911には純正に替えて社外品の永井電子製タコメーターを付けており これには任意の回転で12V3Wまでの電球を光らせる機能が2系統あります。メーカーではワーニング外部出力と呼んでいます。
この12Vを電球を光らせる代わりにpro minに印加し、LEDを点滅や走行するように光らせる切っ掛けにしよう考えました。
既に廃番ですが、同等の機能を持った商品が以下になります。
http://www.nagaidenshi.co.jp/METER/1930.shtml
シフトライトにはモトサイン・ミニというカスタム・バイクのインジケータ用のLEDユニットを使います。
小型ですが高輝度のLEDが5個並んでおり、抵抗も内蔵されているので、pro miniに接続すれば直ぐに使えるユニットになっています。
装着場所はタコメータ上部のひさしになった部分に両面テープで貼り付け、ケーブルはメーター脇からダッシュボード内側に引き入れpro miniユニットに接続します。
http://www.motogadget.jp/webshop.motosign.mini.html 引き続き41です。
課題は、pro miniの電源と、タコメーターからの12Vの処理をどうケースに収められるか、です。
電源に関しては増設したシガーライターソケットにUSBチャージャーを介して5Vを得るのが手っ取り早い方法なのです。
しかし、携帯電話やナビ代わりのiPad mini、ドライブレコーダー、GPSユニット等が既にその方法で電源を取っていて、これ以上増やしたくない、という理由でこの方法を避けたい、と思っています。
クルマ本体の12V配線からアマゾンなどで手に入る外付け?降圧DC-DCコンバーターモジュールもお手軽ではありますが、補器類はなるべく少なくし、pro miniのケースに収められればスマートだと感じています。
現時点では電源としては以下のスーパー三端子レギュレータを第一候補にしています。
https://akizukidenshi.com/catalog/g/gM-06353/
ブレッドボード上での模擬回路では、20分ほど連続でLEDを点滅させた状態で触診では発熱も感じず、使えるという印象でした。
タコメーターから出て来るワーニング12Vも上のレギュレータを使おうと思っていましたが、pro mini、電源レギュレータ、配線などを含めるとケース内のスペースが足りず、抵抗を使う方法等空間節約の方法を手探りで探している状態です。
ケース外に補器を置くという妥協をすれば直ぐに解決する問題なのですが、無い知恵を絞りながら苦しみつつ楽しんでいます。
途中で余計な質問などして皆さんを混乱させてしまいましたが、アドバイスを頼りに勉強してまいります。
本来、ご指導、ご指摘にレスを返すべきですが、長文になりましたので本日はご勘弁ください。 タコメーターからの12Vは単純なオン・オフだけだから、フォトカプラが良いんじゃね?
https://akizukidenshi.com/catalog/c/cphca
フォトカプラ自体は豆粒ぐらい小さいし、2回路入り・4回路入りならさらにスペースも節約できる
外部ランプ出力が2系統だから、ちょうど2回路入りで良いんでね?
12VからArduinoを絶縁できるし、あとは抵抗を付けるだけで良いしね(チップ抵抗なら更に小さく出来る) >>188
>永井電子製タコメーター
このれのワーニング外部出力が約12V(車の動作電圧だと想定)
>モトサイン・ミニ
これの動作電圧(LEDを光らせる電圧)が9-18V
これをpro mini で点滅等の制御を加えて使いたいってことかな?
永井電子製タコメーターからの12Vの処理は
・抵抗で分圧(抵抗2本)
・抵抗+ツェナーダイオードでクリップ
・フォトカプラで入力
・抵抗+NPNトランジスタで入力
>モトサイン・ミニ
これを光らせる為の12Vの出力を用意する方が大変そう
GND側(アース側)がコモンだろうから
PNP+NPNトランジスタで12Vを制御する必要があるのでは? >>191
フォトカプラ、2回路・4回路だと小さいか? >>189
pro miniが互換品も含めて色々で回ってるから例外はあるかもだけど
ボードに小さいレギュレーター付いてるからRAWに入力すればレギュレーター不要な可能性が高い
SparkFunが製造するpro miniならMIC5205が載ってる
MIC5205なら最大16Vまで許容する(ギリギリで使うのは微妙なのでもう少し余裕が欲しいが) 質問者の言うスーパー三端子レギュレータを更に2個つけるよりマシだろw >>194
実際に自分が作るとして、車からの電源にオンボードのレギュレーター使う?
俺なら勧めないけどなぁ そうじゃなくて、「2回路入り・4回路入りならさらにスペースも節約出来る」って書いてるけど
1回路入りを2個使うより小さいのかってこと。 >>197
ああ、そういうことね。2回路のほうがちょっとデカイなw
値段はちょっと安くなるか
https://i.imgur.com/GXP6Ccn.jpg >>198
オレも設計するとしたらフォトカプラ使うよ。
555を勧める香具師はおらんのか? そのLEDユニットお高いね。アルミとか防水とかのコスト分かな。 >>188
911カレラか、いいですね。そういう車にArduinoで作った小物を載せるのはおしゃ
れだと思う。
古い車だと12Vの電圧の調節にかなり野蛮な方法が使われているし、スターター
からのキックバック電圧も大きそう。そんなことで電源の耐圧は要注意。
シガーライターに挿す物は最初からそう言う考慮がされているけど、自分で三端子
レギュレーターを選ぶ時は充分耐圧が大きな物、目安は35V以上を選んだ方が良い。
あと、安全対策で1Aのヒューズを入れ、基板上にはポリスイッチを入れとくと安心。
あと、>>199 ポルシェに555は貧乏臭すぎだろう、w >>202
そこは「555 はスバルだろ!」と言って欲しかった。 41です。
沢山のアドバイス、ありがとうございます。文章簡潔纏める才無く、長文失礼しております。
ご指導が重層化?しており間違いや見逃しでレス漏れありましたらご勘弁ください。
>>191,192,193,197,198
タコメーターからの12Vは、フォトカプラが扱いやすさや省スペースの面で良さそうだと思いました。ツェナーダイオードも予備として入手いたします。
>>194,195,196
pro miniの互換品に関しては、自分のものは裏にthe Simpieと書かれたものです。
ボード上のレギュレーターの仕様がわからないのですが、SparkFun製とはリセットボタンやピン配置が異なる様です。
直で16V入れられるのなら大きな問題の一つは解決するんですが。
>>192,201
モトサイン・ミニは、輸入元の仕様には動作電圧9-18Vとありますが、Arduinoのデジタルピン出力で動作する事を確認しています。
輝度は落ちているかもしれませんが、実用上問題ありません。
価格は結構高いですが、かなり以前に別用途で購入し仕様変更で取り外したあとストックしていたものをリユースしました。
実物は小さいものですが、削り出し加工なのか仕上げは良く高級感があります。元はバイク用途なのでケーブル基部はシールがしてあり防水になっている様です。
>>202
三端子レギュレーターは自分の選んだものは入力:7~28Vとあり、35Vには足りない様です。
35Vまでのものは通常の78シリーズだと放熱板?ネジ止め板?を含めると高さが15o程あり、ケース内に収めるのに足を曲げたとしても無理があります。再考いたします。
https://akizukidenshi.com/catalog/g/gM-13769/
これが使えそうですが、少々高価(許容範囲です)
ヒューズに関してはクルマから12Vを引き入れる間にヒューズを噛ませる予定です。 久しぶりに覗いたら
ポルシェとか555とか三端子レギュレーターとか話題になっているが
質問者さんは何をどうしたいの?
誰か簡潔にまとめてくれ。 Yahoo天気のRSSが今年度で終わるそうだけど代替ってあります? >>207
ありがとうございます!
気象庁のAPIは情報量が多いので色々活用出来るけどその分データ量も多いんでメモリーきついかなぁと思いました
どうでしょうか? 概要だけの取得だとデータ量は少ないけど、「晴」とか「晴のち雪」みたいな感じじゃなくて「日本の東に低気圧があって、東北東へ進んでいます。\n\n 東京地方は、おおむね晴れています。以下略」みたいな文章なので使いにくいかなって >>205
既成品のタコメータに既製品のタイミングライトLEDを
直結したらシフトタイミングなど事足りるのだが
ハイテクな何かを感じる別の方法で実装したい
目的とする事や実現したい事が曖昧なままポルシェとかタコとか
キラキラワードでつられてご親切丁寧に次々と勝手に回答してるだけで
質問者は責められないね 長文にしないで簡潔に頼む!
に対して
長文で全員に返事しながら全方向に喧嘩売る
質問者の人面白いw
詳しく説明しようとするあまり、冗長に蛇足で
三倍くらい解りづらくしてくれるウチの設計さんソックリw 初心者で何を説明していいか分からないこともあるだろ
雑談場所じゃねーんだから、ブツブツ言わずに質問に答えろ
そして初心者は熱烈大歓迎しろ そんなにイライラして暴言吐かないでよ
質問者さんもね
いつもこの流れになるのワンパタン過ぎて飽きたよ 初心者相手ならワンパターン化も致し方なし
飽きたら一度ここから出ていって気が向いたら戻ってくればいい ADCとI2Cのピンが被ってるので両方使いたい場合はアナログマルチプレクサで切り替えればokですか?
I2C側にはバスバッファ的なものが必要ですか? i2c は随時通信しているので、単独で使用してください どのarduino使ってるのか知らんけどADC足りなくなる使ってるのか。i2cピンは動かせないからADCを別で用意するしかないかな。 I2CのADCって駄目なのかぉ?
親切な人が秋月のアドレス貼ってくれるかも ありがとうございます。ADC追加の方向で調べてみます。 >>217
そんなもん、何をつないでるかによるだろ。
Arduino がマスターだろうし。 >>206
API便利なんだろうけど、普通に URL 叩くだけだよ。
ネットワークアクセスできるチップなら、文字列処理でメモリ足らないことは無い。
regex でも Stringクラス でも好きなの使えば良い。
https://qiita.com/yukity/items/dcb66b8ca91df4159271 >>210
さんきゅう。
でも、ますます分からなくなった。 タコメーターの出力をリレーのコイルに入れて
接点をarduinoの入力に入れる
arduinoの出力からリレーのコイル(フォトカプラとか)に入れて
もっと大きいリレーを駆動してLEDにつなぐ
雑多なものはあるだろうが
やる事はただこれだけだよね
arduino使いたいなら リレーだけなら
リレーのコイルにタコの出力入れて
接点にLEDつなくだけだよ
2系統あればリレー2個だけ
電圧を安定化する何かは必要かも知れないが
ディレイ入れたりピカピカ点滅させたりしたいの? マイコンが繋がってると1000RPMから7000RPMまで何ミリ秒掛かったか計測できるしグラフも出せる
吹けが良いというのを具体的な数字で出せるからキャブやマフラーの評価に便利そうだけどな 英単語の短縮系だからSI単位みたいな統一表記はないのでは。 単位を決めている期間によりことなるニダ
たとえば、国際単位系、計量法(経済産業省) Arduinoで作るシフトライトの発言者です。
秋葉原で部品を買い、ブレッドボードで仮組し、動作の検証をしています。 構想中の資料集め段階で見つけたのですでが、本格的なArduino Nanoを使ったシフトライトのキットが既に売られています。
構成部品やスケッチ、その他資料が公開されているので、詳しい方なら同じものをリプロダクト?する事が出来るかもしれません。
しかし、それは自分には全く手に負えるものではなく、また今の制作過程を楽しんでいます。
https://www.chippernut.com/#/ 知識がないならそれ買ってキット組むだけでも勉強になるけど
初歩の電気工学も分からないなら別スレ立てた方が良いと思う 一定の回転数になったら点滅するだけかな
作ってみるか 単純に発電機からパルス取って計算してLED光らせるだけだよね タコメータ見る暇もないくらい前方やハンドル操作に集中してる状況なら必要なのかもね(知らんけど)
まあ、カラーLED使ってタコメータをレベルメータやバーグラフみたいな表示にしてあるレベルになったらド派手に点滅や色変化させたいっていう人は車オタの中にはいるんでしょう クラシックポルシェにド派手なLEDは似合わないでしょ 1速は5500回転でタイミングライトがフラッシュ
2足は5700回転でタイミングライトがフラッシュ
とかなら面白いかなと昔考えた
効果の程はしらんけど
同じコースで10周もすればリズムで覚えてしまうけどね
ポルシェなら1速→2速が60km/hぐらいだから
こんな姑息なもの要らんかな レースなら便利だけど
一般道や高速で限界まで使うことなんてないし 初心者です
ArduinoIDE繋げましたが、シリアルポートが非活性で接続できず・・・。なぜでしょうか・・・。
ArduinoUNO本体あピカピカいているので、起動していると思われます。
(環境はwin11です。Dellノート G3です。)
https://imgur.com/SqYOgwZ >>245
・OSにドライバが入ってない
・ケーブル不良 >>248
そのタイプの互換品ならデバイスマネージャーでArduino UNO (COMxx)として認識してると思うから確認してみて
https://i.imgur.com/knUYXje.png >>249
COMが見当たりませんでした・・・(1つ怪しそうなのがありました)
https://imgur.com/SYpfT1S >>250
PC本体のUSBコントローラーが正常に機能してないかも・・・
(ドライバーがうまく適用されてない?)
UNOをつなげたUSBポートに他に持ってるUSB2.0or1.1の機器をつなげたら動く? >>251
UNO繋げたUSBポートにLogiマウスをつなげると普通にマウス動きました。
USB3ポートあるので、全部にUNO繋げてみましたが全滅です。(Logiマウスは3ポート全て動きました) >>250
USBコネクタの近くにある黒い正方形のチップの拡大写真か、
表面になんと書いてあるか一字一句正確にここに書くと誰かが助けてくれるかもしれない。 >>250
!の付いてる他のデバイスが沢山あって、aruduino以前の問題に見える
最低限windows updateしてメーカが配布しているデバドラ類のインストールの漏れがないから確認が必要と思う
それ自体はスレ違いなので自力でなんとかしてくれ >>252
ありきたりだけど
ケーブルを変えてみるとか別PCに接続してみるぐらいしか思いつかない・・・
あとはATmega16U2(USB↔シリアル変換)のファームウェアに問題があるかもしれない
DFUモードで認識するか試してみては?
1.写真1のようにジャンパピンを取り付けてPCに接続
2.その状態でジャンパピンを取る
3.デバイスマネージャーで写真2のように認識されてるか確認
https://i.imgur.com/TJJme40.jpg (写真1)
https://i.imgur.com/ON9q9vG.png (写真2) >>256
回答できるところから回答します。
こちらは認識できているようです。
https://imgur.com/ri1MxKv.png >>253
小さくて読みづらいですが、以下に見えます
MEGA16U2
2108 TH
21087B2 こんにちは、M5Stackライブラリ内のM5.Lcd.drawJpg()関数の説明で、
「メモリからJPEGデータを読み込み、描画します。」とあるのですが、
Jpegデータとは具体的にどのような構造のデータなのでしょうか?
(動作しているサンプルプログラムの引数(frame.buf)を調べると、[255,216,255,224]という配列が常に入っていました。)
↓サンプルプログラム
https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/UNIT_CAM/CAM2CORE
具体的にやりたいこととしては、カメラから送られてくるjpegデータを整数の1次元配列にして、
グレースケール化やサイズ変更などの操作を施して、関数に与えたいです。 jpegファイルの形式は膨大な情報量になるのでここでは回答できないよさすがにぐぐれとしか
BMP,PNG,TIFFなどの非圧縮なら4lineずつ読み込んで処理とかできるけど
jpegは圧縮ファイルなので全体を一度展開する必要がある
M5で画像処理はメモリ足りないんじゃね
フルHD=1920x1080x24bit=6.2MB
VGA=640x480x24bit=922KB
QVGA=320x240x24bit=230KB ←これでギリギリ
こういうのはメモリ512MB以上搭載してるラズパイが有利 理由はわかりませんが・・
以下を「デバイスのアンインストール」したところ
https://imgur.com/ri1MxKv.png
Arduino UNO(COM3)が表示されました。無事、前に進めそうです。ありがとうございました。お騒がせしました。
https://imgur.com/rthDkUA libusb-win32 devices ATmega32U4
これが何だったのかは知りたいところ
どういう状況でこれが認識されるのか詳しい人教えてください zadigというツールでUSBドライバーの割付を変えればそうなるけど
このツールは差し込んだポートのドライバしか変更してくれないので戻し忘れが発生する事が多い
infいじりまくるのはトラブルの元 >>269
プログラマブルキーボードではないかな。
Corsair RGBゲーミングキーボードもstudioとかICEで
トラブルの原因となってた気がする。 ArduinoIDE v2.0もいつの間にかRC3に
日本語化も進んでる
https://github.com/arduino/arduino-ide/blob/main/i18n/ja.json
ところで、これって誰が翻訳してんの?
暇だから翻訳手伝おうかな 以前試した時はライブラリマネージャが使い物にならなかったがマシになったのかな >>274
library manager・・・司書さん(Librarian)のコトかーっ!!
arduinoだけに、擬人化するとやっぱイタリア美女なのかなぁ。。。ふひひ! う、海蛇がArduinoで制御されてるんですか!? Σ(・∀・ こんにちは。
赤外線の信号を読み取って0と1に変換する事は出来たのですがそれを2進数に並べ替えて10進数にするやり方がわかりません。
例えば下記のようにaからhまで0か1が入っていてそれを最終的に10進数の数値(13)にしたいです。どのようなプログラムにすればいいのでしょうか?
a=0
b=0
c=0
d=0
e=1
f=1
g=0
h=1 扱いやすいように配列にいれておく
d[0]=0
d[1]=0
d[2]=0
d[3]=0
d[4]=1
d[5]=1
d[6]=0
d[7]=1
uint8_t dat=0;
for (uint8_t i=0;i<8;i++){
dat=dat | (d[0] & 1); //LSBにbit set
dat=dat<<1; //右にシフト
} まちごうた
for (uint8_t i=0;i<8;i++){
dat=dat<<1; //右にシフト
dat=dat | (d[0] & 1); //LSBにbit set
} 僕はコピペ派だ(^p^)
>>282
char cTemp=0;
cTemp |= {a? '\x80' :'\x00'};
cTemp |= {b? '\x40' :'\x00'};
cTemp |= {c? '\x20' :'\x00'};
cTemp |= {d? '\x10' :'\x00'};
cTemp |= {e? '\x08' :'\x00'};
cTemp |= {f? '\x04' :'\x00'};
cTemp |= {g? '\x02' :'\x00'};
cTemp |= {h? '\x01' :'\x00'};
// これでchar型に変換完了
{int nTemp = (int)cTemp;
printf ("十進数:%d\n", nTemp);} ああ あと、老婆心ながら、
最上位ビット立った時は負の数だ、という前提になってるので
0-255ならアンサインドにしないと ですぞぃ。 C言語、ビット演算子でググるほうが先だな。理解すれば後は好きに書けるだろう。 >>282
ビットシフトとか辛ければこれで(;´・ω・)
uint8_t moemoe = a*128 + b*64 + c*32 + d*16 + e*8 + f*4 + g*2 + h
Serial.print(moemoe,DEC);
Serial.print(moemoe); >>282
int x = a*128 + b*64 + c*32 + d*16 + e*8 + f*4 + g*2 + h*1;
これが考え方の基本で、もちろんこのままで動く。念のために
Serial.println(x);
とでもやって確かめると良い。
これではみっともないと思ったら、前の人がレスしたように
ループとビット処理を使って計算すれば良いけどやってるこ
との意味は同じ。 uint8_t a_h[] = {0, 0, 0, 0, 1, 1, 0, 1};
uint8_t result = 0;
for(uint8_t i = 0; i < 8; i++) {
result += a_h[i] << (7 - i);
} >>283-290
こんなにも沢山のレスありがとうございます!
無事に出来ました。全部メモして今は理解できない物もありますがゆっくり理解していこうと思います。 >>288
これでいいじゃん
これのビットシフト版でもいいけど
ループはややこしいからベタ書きしたい 赤外線の信号だから32bitとか64bitになるけどベタ書きすんの? >>282
a-h のテンポラリ変数に保存するのではなく、
赤外線受信とバイト変換を並列にしても良いと思います。
>>283さんのコードを拝借して、仮に受信関数名をread_IR() とするとこうなります。
unit8_t dat = 0;
for (uint8_t i=0;i<8;i++){
dat=dat<<1; //右にシフト
dat=dat | (read_IR() & 1); //LSBにbit set
// 必要なら受信エラーを判定してbreak
}
受信エラー処理が必要なら、read_IR()でセットしたエラーフラグを判定してforループを脱出 >>297
なるほどその時は、282の質問からやり直すという事ですね!(節子!そのループとちゃう!! >2進数に並べ替えて10進数に
>10進数の数値(13)
BCDですかね?
ハイ題意により全員やり直し(鬼) 「にっちもさっちもいかない」は「二進も三進も行かない」と書くらしい うーん。。。 バイナリデータをdSrcとすると、
arduinoの開発環境の演算ライブラリに割り算とかモジュロ演算があるという想定のもとでは
char cBcdNNxx =((dSrc/1000)<<4) | ((dSrc%1000)/100);
char cBcdxxNN = (((dSrc%100)/10)<<4) | (dSrc%10);
かなぁ・・・。モジュロが無ければ商をテンポラリに保存して減算でどぞー。 単体の1チップマイコンと違ってキリキリしなくて良いから楽なモンだ… StaticJsonDocumentとしんみちもにそJsonDocumentってどうちがうの? arduinoで携帯時計を作っています。
追加でストップウォッチの機能をつけました。そこで質問です。
arduinoより正確な精度を求めてRTCからの信号でストップウォッチを動かそうと考えたのですが、RTCの32khzでは1秒単位迄しか測れませんでした。
0.1や0.01秒を正確に測る良い方法はありますでしょうか?
またRTCの電源は3端子レギュレータではなく、抵抗分圧て作っても問題は無いでしょうか? >>309
arduinoだろうがRTCだろうがクォーツ使ってる限りは精度は大して変わらない、しかも素子温度とかでも精度は変わる
電源を抵抗だけで作るのは無理、 >>310 の言うとおり燃える恐れがあるし、そもそも安定しない
大して高い部品でもないから降圧レギュレータを買って使うべき 横だけど5Vから0.5Vに落とせるレギュレーターいいのありますか? >>309
32.768kHzから きれいな1/100秒、1/10秒 は作れない。
でも多くの腕時計のストップウォッチも32.768kHzで動作しているし。
Arduinoでできるかどうかわからないけど、
32.768kHzから1024Hzのパルスを作る。
欲しいのは10m秒。10カウントだと9.77m秒。11カウントだと10.74m秒ときっちりにはならないけれどこれは我慢する。
10カウントで19回と11カウントで6回を交ぜて繰り返すと、ぶれ(ジッター)はあるけれど
全体としては累積誤差のない1/100秒、1/10秒が作れる。
最大で1m秒ぐらいの前後があるけれど、手動のストップウォッチなら問題にはならないでしょね。
もっと精度が必要なら、100で割り切れる周波数のオシレータを用意することになる。
Arduinoは多くが内蔵オシレータやセラミックオシレータで動作している。
それらを使って計時したら高い精度にはならない。 >>314
用途と想定電流容量は?
0.5Vってあまり聞かないレンジだけど >>316
アナログセンサーに使います
電圧で判断するので電流はごく微小で大丈夫だけど
でも抵抗入れないと無限に電流流れてしまいますね スリットセンサー2点で開始と終了計測するとかなら精度必要だけど
人が手で押す時点で0.3-0.1秒のばらつきがあるから正確に出しても意味無いんでわ?
同じ人が押すなら少し安定はすると思うけど
RTCで秒割り込み掛けてタイマーリセット、RTC読み出しにタイマー値を演算して1秒未満の値とするという方針でいけるはず
1秒割り込み時にカウンター最大値を保存しておけば自動スケーリングもできる >>314
>横だけど5Vから0.5Vに落とせるレギュレーターいいのありますか?
特別な保護回路が不要で
・電流量が要らないなら(10mA程度まで)オペアンプでボルテージフォロワ
・ある程度電流が要るなら(数100mA程度)、上にトランジスタで電流増幅
レギュレータICを使いたいなら、
Digikey で、製品索引
集積回路(IC)-> PMIC 電圧レギュレータ - リニア
を選んで、
出力構成 → ポジティブ
出力タイプ → 可変
電圧 - 出力(最小/固定) → 0.5V以下をすべて選ぶ
で検索。 私も5Vから分圧でいいやと思ってましたが
燃えるという事なので >>314
レギュレータは多分ありません。
電圧リファレンスならADR130とか。 >>317
基準電圧が欲しいならLDOじゃなくて定番のTL431を分圧するのがいいんじゃないかな >>319
ありがとうございます
助かります
電流量がいらないならオペアンプでフォロワーが分かりません
すいません みなさんいろんな回答ありがとうございます
できたら分かりやすいよう統一していただけたら助かります >>323
わからないなら「オペアンプでボルテージフォロワ」そのままでGoogle。
5Vから抵抗で0.5Vを作るには、9:1(たとえば18kと2k)で分圧したらいいけれど、
その場合は、0.5Vの電源に、18kと2kの並列抵抗相当の抵抗が直列につながったものになる。
電源の供給を受ける側が電流を引いたら、そのぶん電圧降下がおきる。
たとえば、電源の供給を受ける側がマイクロアンペアみたいな微小な電流しか引かず、
少々の電圧変化が問題にならないならこのままでもいい。
でも、電圧変化を嫌うなら、分圧したポイントをオペアンプのボルテージフォロワの入力に繋いで出力を電源として使う。
燃えるか燃えないかは計算するべき。「分圧で燃える」を鵜呑みにしちゃだめ。
>電圧で判断するので電流はごく微小で大丈夫だけど
>でも抵抗入れないと無限に電流流れてしまいますね
これの意味がわかりにくい、0.5Vを何に繋ぐのか開示した方がいいと思う。
0.5Vの電圧を求めるセンサーがあるなら、それが「抵抗を入れないと無限に流れる」のもちょっと変だ。 >>324
>できたら分かりやすいよう統一していただけたら助かります
5chはいろいろな意見の人が集まってくる場所。まとまるほうが奇跡。誰かに統制を求めても、荒れるもと。
いろいろな意見を聞いて自分で取捨選択するようにして。 目的をはっきりかかないから、回答もはっきりしない。 >>317
既出だけど電流がそんなに要らないなら
オペアンプのボルテージフォロワー回路で作るのが一番楽じゃないかなと思います >>323
「電流が要らないなら」
≒「オペアンプで直に取り出す場合
電流量に制約があるけれど
その電流量でも大丈夫なら」
という意味だと思うず 0.5VだったらIC内蔵センサーの電源では無さそうだから多くてもせいぜい1桁mAだろうと予想
それならボルテージフォロワーでもいいかな、と みなさんありがとうございます
大変感謝します
用途的に精度が欲しいので>>322が良いと思いました
みなさんのご意見今後の参考にさせていただきます
ありがとうございます ボルテージフォロワググってきました
驚きました
こんな事できるんですね
ありがとうございます >>334
0.1測るには1pps毎のmillisを控えておいて適切に計算すりゃいいでしょ? 元の質問者へ向けた話じゃ無いけど、millisの値を信じている人
が多いみたいだから書き込んでおくと、
millisの値は1msでは無く1.024ms毎に更新されている。
それでは時計に対して遅れてしまうので42回毎に値を2つ飛ばし
にして辻褄を合わせている。
そういうズルをしているので、ミリセカンドの精度が必要な
場合はmillisは使わないほうが良いよ。
たぶんmicroseconds()なら大丈夫。 100均のストップウォッチを見てみろ!誤差だらけだぞ!
それをみんな信じ込んで使ってるんだ! >>337
マジかよ!?
俺の認識だと250us+命令サイクル分の誤差しかないと思ってた
( *`ω´) >>315
説明いただいた通り、ズレが開いていくのも嫌だったのです。このやり方なら私でも出来そうです。
早速試してみたいと思います。
ありがとうございました。 >>315
そう言えばRTCのクロックってなんで32.768kHzなんだろうね
2^nがいいなら65.536kHzでも良さそうなのに 1Hzでいいだろ
技術とコストのバランスで許されるならな 周波数が上がる→分周段が増える、消費電流が増える
周波数が下がる→水晶が大きくなる
1969年セイコー「セイコー クオーツ アストロン 35SQ」は8192Hzだった(当時45万円)ICを使わずセラミック基板上にトランジスタを並べた構成だったため分周段を少なくしたくてこの周波数になった後に16384Hzとなる
小型化と消費電流を考えると32768Hzあたりがバランスがいいらしい aitendoとかで売ってるラジオモジュールに32.768kHzの水晶を使ってるね
あれも消費電力の絡みで採用してるのかな?
20MHzの素性不明の水晶発振器を使ったら20mA位電流消費してて泣きたくなった いろんな理由があるから一概には言えないけど大量に生産されていて入手性がよく安価で小型みたいな理由もあるだろうな(Arduinoのおかげで最近は16MHzが安くなったとか)
あと高い周波数が必要でも最近はIC内部でPLLとか使って簡単に高い周波数にできたりもするし(同一IC内でも一部分だけ高い周波数が必要で他の大部分はそうでもないみたいなことがあったり) 32.768k水晶は安くて低消費電力。だから数十kHzが欲しいって時はこれ。 量産品だと、水晶は売れ筋のものを使えるように設計するのが原則だしね。
昔は3.58MHzもよく使ったな。 べつに個人で数個使う程度なら水晶屋で切ってもらっても大したことない
むかしクロックアップ用に特注で作ってもらった ゲームボーイにパソコンのマザーボードから外した水晶付けてポケモン高速化したな >>351
いや、そういう意味じゃなくて、特に細かい周波数指定はないが数十kHz位のクロックが欲しいな、って時。 水晶1個から作ってくれるのかいくらくらいするんだろう 特にロジック回路に使う用途なら、今は特別な理由がないなら、
PLLで作るだろうし、水晶をオーダーすることも少なくなってると思う。 ダイナミック点灯の8セグメントLED3桁を8ピンデジタルINPUTで読み取る方法をキボンヌ。 後出しですまんが、できるだけスマートで低コストなのがギボンす >>361
桁側の3ピンをダイオードorしてint0割り込み
割り込みが発生したら11bit読み込んでデコード
AT90S2313みたいな安いのでもOK(秋月で100円、俺はaliで29円で買った) >>361
ダイナミックが不灯にも時間割り当てる明るさ一定タイプなら、桁には1ピンずつ割当て、ホカは大きめの抵抗介して1ピンに集約して桁on起点にタイミングを読めばOnOffシーケンスからわかる、、のでは? >>363
マルチプレクサ繋いで読み込めるチャンネル増やしたら?
(秋月30~40円位) >>368
ねんのため検証してみた。7segのcomを220Ω介してGNDへ
各segのピンをそれぞれ10K介してnanoのD2へD2を100K介してGNDへ(pulldown)
D2にRISINGで割り込み設定。
任意のseg一つに5V印加で他のsegは光らず割り込み期待通り発生。 Arduinoでエアコンが操作できません
とりあえずの実験として
https://qiita.com/SnowDango/items/a699e4afd1fcf37a397c
このページの中段にある回路とソースをほぼ完全にそのまま使って(PanasonicHeatpumpIR.hのところだけ私のエアコンはHitachiなのでHitachiHeatpumpIR.hにしました) ボタンを押すとちゃんと"air off"などと出るのですがエアコンは全く動きません
Panasonicのエアコンの方はちゃんと動きました
動かない原因は何が考えられるでしょうか? >>370
使用したライブラリが出力する送信コードとエアコンの受信コードが合ってない
エアコンの場合は同じメーカーでも年式・機種で複数のコードパターンが有ったりする >>371
ありがとうございます
そもそも合ってない感じですね
エアコンは複雑とは聞いていたけど大変ですね…
できるか分からないけど解析を考えてみます 受信ユニットも実装して学習型リモコンにすれば、対象メーカーなんか関係無く使える
(エアコンだけでなくテレビや天井灯なども)
・・・まぁ、コピペするだけのArduinoユーザーには難しすぎるか エアコンを買い換えるのも1つの手。
IRemoteライブラリなどは、送受信が実装されてて、
受信したコードを表示するサンプルなどが付いている。
ってことが、あなたが見てるページの最初に書かれてる。
手を抜かずに、解析って所をやりなはれ!
厳しい言い方だけど、その考えだと先は無いよ。 >>375
学習型リモコンは解析なんか必要ないよ。
どこのメーカーだろうと、何の器具だろうと、
受信したパルス列を記憶し、再生して送信するだけ。 >>374
>>377
エアコンのリモコン作ったことないだろw 想像で書くなってw
日立のエアコンのリモコン送信機作ったけど、1つのRAWデータだけで500byte以上、
ATMega328の1KBのEEPROM、2KBのSRAMじゃ1個の操作しか記憶できねーよw
俺はFlashメモリに格納したけど、データを解析するかメモリ拡張しないと使い物にならんぜ 「できませーん」言ってたヤツがまだ実行に移して頑張ってて
「は?w頭悪すぎw俺は学習にさせてるけどw」言ってる奴がエアプで何もしてなかったっていうオチか 単純にONOFF時間を記録するrawデータだと1bitが数byteになるんだから、送信側はきちんと考えないとそりゃ入らんでしょーよ。 >>380
テレビや照明リモコンならrawでも小さいからある程度複数個メモリに入る
「エアコンは別、特に日立のコードは独特」と覚えていたほうが良いよ 東芝エアコンは72bitだった
ナショナルは糞長かった 配列へのアクセスをしやすくするために、
配列の順番を変えた配列を定義したいのですが、どうすればよいのでしょうか?
たとえば、以下のdd という配列に対し
byte dd[2][3] = {
1, 1, 1,
2, 2, 2
};
参照用の配列
byte gg[2][3];
を定義して
配列そのもののメモリを重複して持つのではなく、意味的には
以下のイメージで配列へのポインタを共有するようにしたいのです
gg[0]=dd[1];
gg[1]=dd[0];
実際にはこんなにシンプルではなく、100程度の二次元配列の順番を
一定の演算に基づいて並べ替えるのですが、動的にやる必要は無いので
処理中に演算しないで、記入側の配列と参照用の配列を作って
参照用の配列は記入側の配列への『順番を適切にした』参照を持つだけにしたいのです。
&をつけてみるとか、typedefでなんとかできないかも試したのですがなかなかうまくいかず、、 リモコン解析はESPとかPCでやるのが楽なんじゃね、メモリーMega328の1000倍以上あるし >>383
インデックス参照するしかないんじゃね
マイコンの場合はメモリリソース食うからどれくらい有用なのか検討してね >>383
全体像が見えてないんだけど
ポインタ型にポインタ入れれば良いのでは? >>384
メモリー32MBとかPC-9801でも使ってんの? >>383
2次元配列が突然1次元配列の例に変わっているので、どうしたいのか今一つ
わからないのだけど
byte dd[2][3] = {
1, 2, 3,
4, 5, 6
};
に対してgg[1][1]が「5」でなく「3」を指したいとかだと、ggをポインタ配列で定義して
byte *gg[][] = {
NULL, NULL, NULL,
NULL, NULL, NULL
};
gg[1][1]=dd[0][2];
みたいに対応を羅列するしかないと思うのだけど
ただし保存されるデータはbyteじゃなくてアドレスになるので、メモリがddの分
プラスdd×2(かな)必要になるけど
対応を羅列しないで定義したいだとforループでddを回して計算でggの添え字を
変えていくとかになるのかな
メモリ使いたくなくて計算してよいならば#defineで取り出す擬似関数定義する
とかはできるかな
#define gg(x, y) dd[x + 1][y + 1]
呼び出さない分関数よりCPUコストは下がるかもしれないけどどうだろう >>383
1次元の配列にして好きに演算するなり変換テーブル作るなりすればいいんじゃね
byte gg[2*3]; >>385
インデックスの配列を作る、、ですね。ありがとうございます。 >>387
そうだと思いますがエレガントな方法あるのかなと。 >>394
シリアルsramがいいでしょう。SDカード追加して仮想メモリっぽく使うのもありですね。 >>390
アドバイスいただいた方法今は検証できないので、何をしたいかのイメージだけ説明します。二次元配列を行データ(一次元配列)の一次元配列とみなしたとき、データを書き込む時は行が順番に並んでた方がいいのですが、参照するときは行の順番がある規則で入れ替わっていると参照時に演算が減ってありがたいのです。
行の先頭ポインタを好きな順番に並べた配列を用意してキャストしながらやればいいんだろうとは思うのですが、もともと配列はポインタだろうから私が知らないだけでエレガントな方法あるんじゃないかなと 配列は通常アクセスでもアドレス演算すると思うけど。
アドレス演算が本当にボトルネックならclock上げればいい。 SDカードの読み書きはすごく遅いと聞いたけど大丈夫なんだろうか シリアルSRAMググってきた
こんなのあるのか
もうなんでもありみたいな
やっぱ世界で使われてる物はすごいね
日本だけだとこうはいかないよね >>398
C言語リストでぐぐると幸せになれるかも
生徒名簿があって、名前順の参照、成績順の参照などが行える
データの挿入、削除が一瞬で終わる<配列だとずらさないと挿入できない、削除したら詰める処理がいる >>402
昔からのスマートなやり方で、それ以降も以上の方法がないから、ベストな解。
先頭からの参照のみなら、次のポインタをメンバに揃えた構造体、
逆順に参照したいなら、前のポインタも必要。
数が大きく増減するような処理の場合は、削除用のリストを用意しておいて、
そちらでまとめて、暇な時にメモリ解放(ガーベージコレクション)。 >>404
ramが1kとか2kのマイコンではちょっと厳しいかもね
今回のケースでは前後のリンクポインタ無くしてインデックスだけで足りるでしょ サーモスタットのサーミスタからICに入るところの信号をみるとこんな温度で方形波の中が窪んで温度によって下降の度合いが変わる感じになっててよく分からない
なんでこんな風になっているのでしょうか。
>>406
サーモスタットの型番とか配線方法とか信号を観測した方法とか
使用したライブラリとかの情報が無いと答えにくい
サーモスタット(バイメタル式)>温度で金属が歪んで接点が接触したり離れたりするやつ?
サーミスタ>温度で抵抗値が変化する奴
そのグラフだとバイメタル式のサーモスタットかな? 基板上の見えるところだけみた勘だとこうなってる
温度センサーはNTCサーミスタ(10k)
測定は数千円のオシロ
>>403
この例ですとメモリを別個に確保していますよね? 参照だけできれば良いのです。 >>402 >>404
リストは機能としては要求に合致して居ますが>>405 のおっしゃるとおりです。
行ごとに順番を入れ替えるので、行のインデックスを配列に持つのがメモリsaving的には一番良さそうです。
因みに行と言ってるのは
byte [3][10]
を 長さ10を3行というイメージです。 スピーカーのマグネットがarduinoに近すぎるんだけど
なにか影響はありますか? 9時間ずれるだけだから俺時間でいいならおっけーにゃ CPUがESP32なら磁気センサー入っているので、もしそのセンサーを使っていれば影響はある。
それ以外のCPUはマグネットの影響は無いはず。
RTCと言ってる人いるけど、なんでだろう?まさか機械式のRTCとかあるのかな? >>409
デジタル表示サーモスタットの定番品のxh-W1209タイプがNTCセンサー込で1個300円〜600円で売ってる
アルドやパイでサーモスタットを自家実装してもコストの割に面倒だなと思ってxh-W1209を3個買ってしまったw
(温度制御用、温度警告ランプ用or予備)
Cは0.1μ〜1μ程度かな?
バイパスコンデンサーが放電してるだけで
計測上の意味ないのでは?
その回路で積分型ADCとも思えないし >>418
このサーモスタットも市販品です。
間違えてArduinoのスレに質問してしまってすみません。
コンデンサがない場合はこのようになると思うですが、なぜそのようになるのでしょうか。
>>419
下がりきる前にパルスがきてるだけっぽいから、OFF時間が長くなれば0vまで下がる。その図の中間電圧出力は出てない。 流石に>>409のカーブがゼロに収束するようには見えんが 2.0RCって使い易いの?
デバッガがあるらしいけど。 >>420
ありがとうございます
ちなみに何故ICからパルス波が出たり入力読み取りになったりしているのでしょうか エスパーするぞ
>>423
温度読み取りをA/D入力ではなく、
デジタル入力でhigh→low変化までの時間計測で代用してる
その後highとlowのパルス出してるのは
抵抗やコンデンサが故障してないかのチェック動作だな >>424
はえーそんな手法があるんか
デジタル入力しかなくてもADCとして使えるのは知らんかったわ 温度によって沈み込む深さが違うって言ってるんだから違う気がするが >>426
横レスすまん
温度(⇒サーミスタの抵抗値)によって最終的な値は変わるから、H→Lのエッジ検出 >>427
エッジ検出のタイムラグのオーバーシュート分だけ下限値が変わって見えるんじゃないかな >>423
仕様です。というかサーミスタのモジュール名もどこの電圧かも答えてくれないから想像で回答してるだけ。 >>429
市販品のサーモスタットなのでモジュールではないです。
測っているのはICに入るところです。
3桁7セグのコモン端子に繋がるICのピンを測ったときも同じ感じに温度によって窪みの深さが変化します。
何故でしょうか。
https://i.imgur.com/SXEinzp.jpg 他の桁のコモン端子には普通のダイナミック点灯のパルスのようなものがでています。
意味不明です。
https://i.imgur.com/Pceh5dw.jpg >>432で測った端子とサーモスタットの端子を導通確認したところ導通していました。
同じピンで読み取りとダイナミック点灯を兼ねているのかも知れません。 商品名を隠す理由が謎だけど。
元電源かIC用のレギュレータが壊れてんじゃないの。 Amazonとかにもあるws1209とかその辺のやつなら温度検知は5Vを抵抗とサーミスタで分圧した電圧を測ってるだけっぽいが。 >>437
ちゃんと動作しているので壊れてはいないようです。
>>439
商品名はXH-W3002というやつです。
これも普通に分圧で読み取っているようです。
ダイナミック点灯の隙間で読み取りも行っているようです。 すみません、確認です。xiaoって電源が3.3Vなんですが、digital in/outも3.3Vですか?もし、5Vのin/outをつなげる時は電圧変換をかませるという方法しかありませんか? yes, you will need to level shift from 5V to 3.3V. >>441
一般的なI/Oピンの場合: MCUの動作電圧は3.3 Vである。一般的なI/Oピンに接続された電圧入力は、3.3 Vより高い場合にはチップ損傷を引き起こす恐れがある。
電源ピンの場合: 5 V電圧を3.3 Vに変えることができる内蔵DC - DCコンバーター回路は、Vin - PINと5 V - PINを通して5 Vの供給で装置に充電することができます。 使用に気をつけてください。シールドカバーを外さないでください。 結局サーミスタの人の不具合は何だったんだろう?
誤差というなら
NTCの誤差が自称1%とあるが、実際1度〜2.5度程度の誤差らしいので
脳内補正するかパラメータ(P4)で補正すればよろし
ちなW1209もW3002も同じセンサで同じ制御ソフト使ってるもよう
チップはSTM8S003F3P6らしいからArudinoのIDEでハック(以下略・・・ >>446
「温度センサー」がそもそもサーミスタじゃなかったんじゃない?
世の中には容量性の温度センサーってのがあるらしい
それなら放電→5Vに充電→電源オープンして一定時間後の電圧を測って温度算出、という挙動だと仮定すればありえなくはない
これも想像の範疇を超えないけどな
写真とるならせめてICの型式をが読める写真にしてくれと なんで既に答え出てるのに延々と的外れな議論してるんだ? サーミスタじゃない云々とか言い出すのは、商品名か商品説明に虚偽があるってことだからさすがに穿ち過ぎというか妄想のレベル。 >>451
でも悔しいことに役に立つ情報が出てきたりする事もあるんだよな。
発達障害が存在するのはこういう事なんだろうね。 配列変数の要素の数がが多すぎて、コンパイルが通らない場合、逃げ道としてはEEPROMへの保存かな?他に方法はある? >>464
そんなのもあるんですね。
それぞれの特性があるみたいなので、調べてみます!!
こちらの要件は書き込み回数の制限があっても大丈夫なので、それ良さそうです。 >>458
配列が自動変数、スタティク変数、ヒープ(ポインタ)で容量の上限が異なると思う
RAMの容量を超えることはできないが
デカブツはヒープ(かスタティック)において自分でメモリ管理すれば最大限リニアなアドレスを利用できるのと思う
最後は関数をフラットに呼んで自動変数を削ってスタックは極力ケチるw >>458
配列が自動変数、スタティク変数、ヒープ(ポインタ)で容量の上限が異なると思う
RAMの容量を超えることはできないが
デカブツはヒープ(かスタティック)において自分でメモリ管理すれば最大限リニアなアドレスを利用できるのと思う
最後は関数をフラットに呼んで自動変数を削ってスタックは極力ケチるw >>466
ソフト的な解決方法ですね。
メモリー管理を自分ですればという事ですね。
Arduinoでは、例えばここはユーザー管理アドレスだから、勝手に使わないでね!みたいな宣言が可能でしょうか。 for(int i=0;i<10;i++){
kansuu(値, i==5);
}
このkansuu(int, bool)の第2引数を、
i=5のときにtrue、それ以外をfalseにしたいときに
if文をkansuuの()内で書くとき、どう書くんですか?
kansuu(値, i==5);これだとダメみたい・・・ if文を追加すれば良いんだけど、もっとスマートに書きたい あ、すいません、kansuu(値, i==5);で出来てましたw 質問です。
jtag2updi?
というArduinoを書き込み装置として使う方法で書き込んでいたのですが、
突然うまくいかなくなりました。
全く同じ回路とプログラムで、
予備の新品のATtiny1614に書き込むことはできるので、
古い方のATtiny1614は壊れてしまったんでしょうか?
解決策のご教授願います >>468
原則としてアドレス解決はリンカの仕事だから自分でやろうとすると機種依存になって面倒だと思う
ATmegaの場合だと確かAVR-gccだからそれ用のリンカスクリプトをごにょごにょするとかセクション指定して変数を確保するんじゃないかな、たぶん ArduinoIDEのビルド速度が遅いです
WinAVRなんかめちゃ速いです ArduinoIDEの代替で、UECIDEっていうの見つけた。なんか良さそう
https://uecide.org/
でもあまり有名じゃないIDEなのかな? >>474
どのぐらい遅いか不明だけど俺のは2〜4秒位でビルドできる(UNO)
PCのスペックやら対象のArduinoの機種を書けば近い環境の人がレスくれると思う
>>475
ArduinoIDEに不満がある人におすすめ
・vscode + PlatformIO
・vscode + Visual Studio Code Extension for Arduino (Microsoft) ビルドが遅いのってArduinoIDEのせいなの?
ArduinoはGCC呼ぶ前にいろいろやることがあるからしょうがないんだと思ってた
それともVScodeとか使うとGCC呼ぶ前の処理とかがかなり最適化されて速くなってるとか tempに展開するからそこがHDDよりSSDのが早い
SSDよりiramのがもっとはやい platform.txt に書かれてる GCC のオプションが、実行速度に依存する
最適化もりもりになってる。メモリも最小になるように。
非力な PC だと、そこそこ重いよ。
テスト的にオプティマイズ外すとか? 同じコードをWinAVRでビルドしたら速いからArduinoIDE特有なんだろね
オブジェクトファイルの出力先を固定しても劇的には変わらないし・・・
>>480
やっぱりビルドオプションがそういう事になってるんですね
ちなみに、UECIDE試したけど、これ結構良いんだけどw
コンパイル速度も速いし、起動も速い。ArduinoIDEのお手軽さもあるし
開発環境としてはかなり整ってる。メインでも使えそうな感じ ファミコンのカセットのSRAMをFRAMに交換して
セーブデータのロストを防ぐのは常識 RTCとかEEPROMのライブラリの
コンストラクタの中で好き勝手に
Wire.begin()呼んでるのが多いけど
何回も呼んでもいいの? おれ環だとArduinoIDEのほうがVSCや+PlatformIOより
ビルドと書き込み速いんだが。。。 シフトレジスタ74HC595を使った4桁7セグモジュールって
LEDの電流制限抵抗が入ってないけど、電源は5Vで良いのかな?
https://www.aitendo.com/product/13451
プログラムはダイナミック点灯で一瞬だけ光らせてるんだけど、
赤色LEDだからVfが2Vぐらいだろうから、3Vぐらいの方がいいのかな?
3Vだとちょっと暗い、5Vだと明るい。LEDは切れないけど5Vだとちょっと不安で・・・。
電流をテスターで測ったら、5Vだと20mAぐらい、3Vだと10mAぐらいです。 74HC595は全体で75mA以上流すとIC壊れるよとデータシートに書いてあるよ やっぱり3.3Vでいいんですかね。
でも赤色LEDにしてみれば3.3Vでも高いんで、抵抗も入れたほうが良いのかな。
こことか読んでると、5Vにしろとか言ってる人もいるし・・・
https://forum.arduino.cc/t/4-digit-7-segment-serial-led-module-tm74hc595/305600/
ダイナミック駆動をすれば抵抗つけるのを回避できるとも書いてる外人もいるし 発熱で破損というメカニズムに関しては
瞬間的にしか電流を流さず 熱がたまる前に切るわけで
抵抗省略も可能でしょう。なにがおきても自己責任!自己責任!(^p^) この絶対最大定格を超えて使いまくった74HC595がどうなるかというと
焼ききれるとかはほぼ無くて、ビット送ってるのにONにならない、指でちょっと触れると点いたり消えたりするとか病的な動作をするようになる
そうなるともうプログラムが悪いのかデバイスが悪いのかわからない迷路に迷い込んでしまう >>494
東芝のもIC全体(ICC)は75mAと書いてるね
それで各ポートの方(QA-QH)は35mAじゃね? 電流なら瞬間的に超えても大体セーフ、電圧は一瞬でも超えたら一発で終わる >>487
ダイナミック点灯時の電流をどうやってテスターで測ったの?
スタティックな状態で5Vで20mAだったら抵抗入っているかCOB LED?じゃないとおかしい 74HCは広範囲の電源電圧はタイプだから出力Hの電圧降下、
出力Lの電圧上昇が少ない
この回路の
VCCとLEDの差、3.3V-2V=1.3Vだから
出力HとLの電圧を考慮すれば1V弱が本来抵抗の電圧降下分であるべきだが
ここではチップが発熱して負担することになる
ファンアウトがLS換算で10あるとしても
プログラムバグで止まったら確実に定格外の連続動作を強いることになりそう
あんまり無人で使ったりしないなら別に良いんだが >>500
パルスで駆動しているところを、デジタルテスターで測定したらそれくらいの数字が出たんじゃない?、知らんけど。 データシート通りにはいかないけれど【かなりザックリした目安】として
https://i.imgur.com/gU2AgPI.png
の図5.1を回転反転して重ねると
https://i.imgur.com/e7XZ6pO.jpg
こうなる
Vcc=4.5Vで片方をH出力もう片方をL出力した時その差が0.75Vで30mA、2.5Vで20mA、3.5Vで10mAといったところか…
LEDのVfが2.0Vと仮定すると23mAくらいか(25℃の場合)?
温度によってかなり変化があることがわかる、個体差も結構あるだろう こんにちは。
少し取り留めのない相談になりますが教えて下さい。
ArduinoNano(互換)使っています。
最終的にやりたい事は、交流電圧や電流波形(基本波60Hz)の解析で、一定間隔でサンプリングした瞬時値を記憶媒体に記録したいです。
サンプリング周期は20μs(50kH)ほどにしたいのですが、SDライブラリを使い試しにSDカードに書き込む時間を測ってみたら、「100,」という文字列を書き込む為に約14000μsもの時間を要するようで、処理時間があまりにも長すぎます。
何か良い解決方法はありますでしょうか?
私の考えた限りでは
@ライブラリを使用せずにSDカードを操作してどのくらい時間が縮むか試す
Aより高性能なマイコンを使用する
B別の記録媒体を使用する
を試してみようと思っているのですがA、Bに関しては具体的な目処が立っていないので、その辺も含めて何か助言していただけると助かります。 >>504
SD以前にanalogRead()に100us以上にかかる 空き時間が20μSしかなくて記録したいって不可能なんじゃない? ADC最速で20usだよ、レジスタにコマンド送ってデータ回収してたらその分遅れるし
ADC変換待ちでwaitせずに前回データを外部SRAMに保存とかやってもギリ間に合わない メモリ豊富なESP32でメモリにロギングしてサンプリングが終わったらSDに吐き出しが現実的 >>505
ありがとうございます。
デフォルトだとそのようですね。
直接ADCのレジスタを操作して、変換速度を上げればいけると思っていたのですが、今もう一度調べたらデフォルトより速度を上げると精度が落ちるようですね… >>506
>>507
やはりAtmega328Pでは不可能でしょうか
>>508
持ち運びがしたいからです。
これ例えばラズパイとかだとマシンパワー足りそうですかね。
>>509
>>510
なんかATmegaだと厳しそうですね…。
ESP32を今調べてみたら、32ビットで160MHzもクロックがあるのですね。良さそうですね。SRAMが512KiBなので16ビットのデータだと20万ポイント以上は記録できますね。 単純に気になるんだが60Hzをそこまで詳細に調べて何に使うの?
記録媒体も限りあるから短時間だと思うけど 単に波形を見るだけならarduinoIDEで表示できるけど
それじゃダメなんだろうね >>512
50Kspsだと4秒でいっぱいだよ。
Raspberry Pi Pico のフラッシュに書き込むとか便利だけどね。 >>517
DAT なら 48ksps 16bit だしな。 ラズパイのPICOって安いのにarduinoよりかなり性能が良さそうでいいですね。
皆さんいろいろ意見ありがとうございました。 >>530
すごく簡単だけど?
公式のリファレンス読めない(理解出来ない)かわいそうなやつか? 英語読めない
キャリブレってなに?
これなんて書いてあるの? >>532
ダニエル>ESP32のADコンバータの誤差が大きいお前ら助けろ
ルイ>仕様だあきらめろん
ROSW>真ん中の値は良い感じだから真ん中だけ使えばよくね?
サラ>有益な情報ありがとん
ステフ>馬鹿どもよ公式読め つ「Espressifのリファレンス」
ROSW>↑馬鹿なので理解できませんでした キャリブレというのはね、遠く離れた較正の国から
誤差を撲滅するためにやってきた美少女戦士の名前だよ
めんどくさがって下手な測定をしてると、ここぞとばかりに
釘バットで本気で殴りかかってくるから
気をつけような!・・・という都市伝説上の妖精だよ(^p^) I2CとかSPIとかの外部ADCを使うってのは駄目なの? I2C over DMA とかになってめんどくさいからじゃね ・・・だって、外部センサだとノイズ吸収用のパスコンや
較正・換算処理や、マルチサンプリングからの平均化などをしなくても
高精度な測定が可能になるん?
結局やるのなら、すなおに内部の使えばいいんじゃね? >>540
> 結局やるのなら、すなおに内部の使えばいいんじゃね?
すなおにオシロを使いましょう。DSO-SHELLで充分かと、 >>536
条件による
内蔵ADCで事足りるならその方がシンプルで良い >>541
レコード長、データ出力、電圧と電流値の同時取得
改造前提なの? 内蔵ADCはアッテネータを経由させずに0-1Vレンジで変換させれば誤差が小さくなるってどこかで聞いたような気がするんだけど実際どうなん? >>544
ESP32なら100 mV ~ 950 mV
(リファレンスマニュアル通りに使用する場合)
自分は充分な精度が出てると判断したが
ネットの情報は間違いが多いのでデータシートをよく読むか、気の済むまで自分で試験した方が良いよ >>540
ちゃんとやっても内部ADCじゃ精度出ないよ。
精度というよりリニアリティが問題かな。 リニアじゃなくても実際の電圧と測定結果を各電圧で細かく測定して多項式でフィッティングすればいい >>542
キャリブレーションが必要なんでしょう?
それをソフト的にもハード的にもどうにか自分で出来ればいいんだけど、出来なければ素直に外部ADC使ったほうがいいでしょう?
なんか変なこと言ってる? 信号源→適当な電源を可変抵抗で分圧
測定器→安いマルチメーターで充分? スマホの音声入力ってDC成分残るのかな
フィルター入ってる? >>548
リファレンス読めればソフトウェア的(簡単)な対応で出来る
つーか、ソースいるん?(´・ω・`) >>551
DCカットしてない音声入力なんてあるの? ESP32のADCは数十mV以下は0になる仕様だからそこに関してはソフトでは補正しようがない。 交流を測定したいみたいだから、ACカップルにしてADCの中央を使えば非線形の問題は回避出来ると思う。
ただ、ESP32のADCで10usのサンプリングは無理じゃ無かったっけ。
レジスタ叩いてDMAでもやれば出来るんだろうけど、やり方がわからん。 ADCの誤差を修正しないと使えないよ
過渡特性見たいみたいだから >>556
レジスタ叩かなくても出来る
DMAで2Msps動作させた事ある
試してないけどWi-Fi停止なら2Msps*2chできるかも >>559
え、2Mspsは凄い。
良かったらやり方、ヒントだけでも教えて下さい。 >>560
丸ごと貼れるソースが無いので参考に出来そうなURL貼る
https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP32/examples/I2S/HiFreq_ADC/HiFreq_ADC.ino
(DMAを使ったADCのサンプル【注意】バグあり)
https://github.com/gustavollps/esp32TTGO_i2s_scope/tree/master/I2S_adc_esp32
(ESP32を使った1Mspsのオシロらしい ←でも500kspsでしか動いてない上に同じ値を2回使用してるバグあり)
※↑どちらもメモリのデータの扱いに間違いが有るので要注意!
(どちらも32ビット幅のデータを16ビット幅で扱ってる?)
これを2Mspsで動かす方法はi2s_config_t i2s_config = ・・・を修正するんだけど
sample_rateを変更するだけでは対応できなくて
.use_apll = true, // D2_CLK → APLL_CLKに変更 (周辺モジュールのクロックソースの変更)
.sample_rate = 2000*1000 / 8, // APLL_CLKに対応したサンプルレートに設定(2Mspsの例)
ESPスレでは誰にも聞かれなかった(;´・ω・) 情報ありがとうございます。
なるほど、driver/i2s.h てのがあるのか。これなら速そうですね、知らなかったです。 サンプリングレートって指定しなきゃいけない?
なんも指定してない
ループで回してるだけ UNO初心者です。
入出力ピンはDigital PinとかAnalog Input Pinなどに
分れていますが、Analog Input PinでもLチカ出来たのですが
なぜですか? >>566
Analogピンにもデジタルの入出力機能が有るからです
(どちらかと言えばUNOでは汎用入出力ピンでアナログ入力機能を持ってるピンをアナログ用と表示してる) アマで買った999円のpro microすぐにUSB認識しなくなった
返品だコノヤロー ELEGOO UNO R3を使って「Lesson 28 Four Digital Seven Segment Display」のプログラムを実行したところ、意図しない表示となるのですが何が悪いのかよくわかりません。コード上は4桁すべてに1〜15(10〜15はA〜Fで表示)までを500msごとに切り替え順番に表示をさせようとしているのに、数字が1つ飛ばしで進みます。1,3,5,7,9,11,13,15,2,4〜という感じです。
プログラムも配線もチュートどおりにやっていますが、配線に関してはチュートが雑なので微妙です。 ループのインクリメント処理を+1のかわりに+2にした場合に症状はどうなります?
+3で進むのか、それとも(+2の二倍で)+4で進んでいくのか・・・ 読むのめんどくさいかもしれないから一応文章はっとく
>最初、表示が点滅してしまってうまく動きませんでした。
>なんでかと思って、Lesson 27の回路と比較してみたら、74HC595の10番ピン(MR)に5Vが入ってませんでした。 >>571
ありがとう。+2にすると4ずつ増えました。
>>572
ありがとう。Lesson27はやってなくて5Vは刺さってます。 チュートリアルに書かれたプログラムではなく、
実際にあなたが入力したプログラムを提示するべき。話はそこから。 >>575
チュートのプログラムを変更してないのに正しく動かないので質問してるんです。 >>573
すみませんっ!解決しましたっ!
10番ピンと5V繋いだらちゃんとインクリメントされましたっ!
ありがとうございましたっ!!!
しかしなんでそんな動きになんのかさっぱりですが。
これ初心者は自力で解消とか絶対ムリだ。 https://www.bing.com/videos/search?view=detail&mid=0BE1F4D3D4B2784FDB750BE1F4D3D4B2784FDB75&q=Lesson 28 Four Digital Seven Segment Display&shtp=GetUrl&shid=3c58d690-5f81-4712-b009-c85bb6c38de4&shtk=TGVzc29uIDI4IC0gNCBEaWdpdCA3IFNlZ21lbnQgRGlzcGxheQ%3D%3D&shdk=Rm91ciBEaWdpdCBTZXZlbiBTZWdtZW50IERpc3BsYXkgTW9kdWxlLiBEZW1vbnN0cmF0ZSB0aGUgRWxlZ29vIHNrZXRjaCBwcm92aWRlZCBpbiB0aGUgdHV0b3JpYWwgY292ZXJpbmcgdGhlIGRpc3BsYXkgbW9kdWxlLCBzaG93IGl0IHNob3J0Y29taW5ncyBhbmQgcHJvdmlkZSBhIHJldmlzZWQgc2tldGNoIHRvIHByb3Blcmx5IGNvbnRyb2wgYSA0LWRpZ2l0IDctc2VnbWVudCBkaXNwbGF5IHdpdGggNzRIQzU5NSBzaGlmdCByZWdpc3RlciBJQyBhbmQgZm91ciBQTjIyMjIgdHJhbnNpc3RvcnMuIEEgYmVnaW5uZXIncyBndWlkZSB0byB0aGUgTW9zdCAuLi4%3D&shhk=mIYuZKcTDAMjK31acnwa2HeaxQC237n0d5YwQ24g0Qg%3D&form=VDSHOT&shth=OVP.lxV5zIrUVzy5dDJuyW0UoQIIEk
いまいち意味が解りませぬが、なんか5:00頃に、初期値変えられてますな・・・
latch 9 → 11
clock 10 → 9
data 8 → 13 >>578
その動画も視聴済でした。チュートにケチをつけながら解説しててオモシロイ。
まあつけたくもなるよね。 チュートリアルのプログラムも質問者のプログラムも配線も一切なしの闇鍋をつついて
ただエスパーにすがってるだけの奴が偶然解決したからといって
そこからいったい何を得られるのだろう そもそも他人の書いたコードは気持ち悪いから手続きだけ参考にして書き直す 助けてください(´;ω;`)
ATtiny1614に、
ArduinoNanoをjtag2updi?ていうやつの
書き込み機にして、マイコンにプログラムを書いてました。
が、突然書き込みが出来なくなりました....
3つほど同じATtinyを買っていて、
どれも
最初のうちは動く
→ある日突然書きこみ不可に
→まだ使っていない新しいマイコンに変えると動きだす
→でもやはりある日突然(ry
ということが起こっています
失敗するときは決まって
下のようなエラーがずっと出てます↓
avrdude: jtagmkII_getsync(): sign-on command: status -1 Nanoがリセットしてるんじゃないの?
Resetピンの対策した? つかNanoやめてATtiny1614にjtag2updi書き込めばライターになるしリセット問題も無いからそっちのがいいよ
UPDI-OUTは9pinね >>587
resetとGNDのあいだに電解コンデンサをかまして
リセット対策をしています >>588
Attinyにjtag2updiを書きこもうとしても
それ自体がそもそもできない状態です。
現状Nano以外のライターが手元にはありません >>590
USBシリアルが有ればpyupdiと言う手もあるかな。 >>591
あいにくそれも持ってないんです。
自分で改造して作れる代物ではないですよね?
百均のケーブルなんかを改造....
とかできないですよね... 回路は合っているのかな。
俺は回路定数違っててはまったことがある >>592
秋月さんとこでUSBシリアル基板買えば百均ケーブル使って実装できるお >>593
あ!抵抗値がちょっと違いました!
4.7kのとこが5.1k?になってます。
これってやっぱり合わせるべきですか? >>585
あってる部分も有るけど間違ってる部分もあるね >>596
俺は合ってると思ったけど、どこが間違ってる? > ADC = (Vin / Vref) * 1024
ADC=((Vin / Vref) * 1024)-1
じゃねえの?よう知らんけど(はなほじ VinがVref-1LSBの電圧の時に1023になる。
まあ実際にはVinにVrefの電圧入れても1024は表現出来ないので、ADCの値は1023になる。でもそれは線形な範囲を越えてるということだと思う。 >>597
ゲイン誤差、オフセット誤差が無い逐次比較型ADCの出力を1023と1024で計算した場合の誤差は
最大値付近で約−0.5LSBか+0.5LSBの差だと思うのでどちらで計算しても変わらない
現実世界では実測するとオフセット誤差の影響で1023で計算した方が近い値になる >>600
まあそういう考え方もあるけど、プログラムの中で1023で割るのは抵抗がある。
やはりここは1024じゃないと気持ち悪いです。 1024にすべきかと
/1024 ならコンパイラがシフト演算に置き換えてくれるはず(たぶん) ADC = Vin*1024/VREF ( Vin = ADC*VREF/1024 )
ADC = Vin*1023/VREF ( Vin = ADC*VREF/1023 )
どちらで計算するのかって話かと
ADC = (Vin*1024/VREF)-0.5 (Vin = (ADC+0.5)*VREF/1024)
↑非線形性・オフセット誤差・ゲイン誤差が無いならこれが良いんじゃない? これってアナログリファレンスがデフォルトかインターナルなら1023で問題ないんだよね?
エクスターナルの問題だよね? ADCは整数だから0.5足しても値は変わらないけど気持ちは判る。あと、1024で割るのに異存は無いってことだよね。
ちなみに、>>585のリンク先はトラ技に記事書いてる人のブログだから、そこらへんの素人では無いよ >>607
ん、入れ違いになった。
インターナルだろうが何だろうが、10ビットのADCの量子化感度は1024で割って求めるてことだよ。 1023のとき測定電圧がVREFよりLSB一つ分小さいってデータシートに書いてあるんで常に1024にするのがメーカーの指示なんだろう 約0.1パーセントの誤差か
ADCにも誤差はあるし
ノイズは乗るし
気が付かないよね
でもより正確なデータは必要だしやってみるかな
なんか変だなと思う事は多々あったから ぐぐった
LSB:Least Significant Bit, 最下位ビット≒量子化単位
・・・初めから量子化単位って言ってくれた方が判りやすいんじゃアルマイカ; 0以上1量子化単位未満→0
1量子化単位以上2量子化単位未満→1
1023量子化単位以上1024量子化単位未満→1023
1024量子化単位以上→オーバーフロー→1023
それだけのことだろ。
0未満→0があるか。 VREF 5VでUNOのADCが1022を出力する電圧範囲
理論値 4.99023〜4.99511V
実測値 4.99003〜4.99535V (試験電圧約100uVで可変)
Vin = ADC*VREF/1024 だと4.99023V
Vin = ADC*VREF/1023 だと4.99511V
Vin = (ADC+0.5)*VREF/1024だと4.99267V
※小数点一部切り捨て そりゃ10bitADなんやから2^10で割らにゃぁあかんでソ・・・ 最上位ビットは、参照電圧の半分以上かどうかだ。
第二位は、そのまた(残りの端数が)更に半分以上かどうかだ。
第三位は、そのまた(残りの端数が)更に半分以上かどうかだ。
・・・
第n位は、(上位桁を差し引いた)残りの端数が(1/2)^n 以上かどうかだ。 >>615
analogRead()の値から電圧を求めるとき
1023か1024の2択なら理論上1023の方が誤差が少ない
analogReadで取得した数値に0.5足して1024で割るのが理想
例えば基準電圧5VのUNOに4.5000Vを入力する
理論上analogRead()は921を出力する(921 = 4.49707〜4.50195V)
921*5/1023 = 4.50147(誤差 0.00147)
921*5/1024 = 4.49707(誤差 −0.00293)
(921+0.5)× 5 / 1024 = 4.49951(誤差 −0.00049)
※小数点第六位を四捨五入
おまけ http://codepad.org/Lmpcbid6 (誤差を乱数で計算) アマで買った中華のProMicro返品して
再注文したら今度はなかなか届かないぞコノヤロー 公式のサンプルが1023になってるから1023じゃないの >>621
入力が4.5Vの時にADCの値が921になる理屈が判んない。計算式らしきものが文字化けしてるし。
ちなみに、入力2.5VならADCの値は512(0x200)になるはずだけど、これはどう説明するの?
なお、ADCの階段の位置を0.5LSBシフトする考え方は一理あるとは思う。 うーん・・・(´〜`;)
>analogReadで取得した数値に0.5足して1024で割るのが理想
もしそうなら、analogReadの戻り値自体を、
AD化のしきい値をおのおの+0.5した値でADすればいいと思うし、
そうなっているんじゃないか(図のb)と期待したくなるんだががが・・・
ていうか0.000000001V入力時に1(=最小値0+LSB)が返るという解釈(図のa)なん?
>>622
春節ってしってるかい?
やつら何よりもこれ、優先するんだぜ。
つまりそういうことよ。 少ない解像度で考えりゃわかる。2bit4階調0−3出力とかで。
あと、数値じゃなくて範囲で考えるとわかりやすい。 m5stackだったかもしれないが
データシートにADCの誤差のグラフがあった
多分このグラフに沿って補正すれば理論通り1023でいいんじゃないかな 2bitとかの低分解能A/Dコンバータで考えてみたらいいのでは。
5Vをリファレンスとして使うラダー型D/Aとコンパレータで逐次変換型A/Dを構成するとして、
D/Aに与える値と電圧の関係は、
0-0V
1-1.25V
2-2.5V
3-3.75V
になる。
入力電圧と、D/Aの電圧を比較して超える一番低い値がA/D結果になる。 >>625
文字化けすまん (921 = 4.49707〜4.50195V)
>>入力2.5VならADCの値は512(0x200)になるはずだけど、これはどう説明するの?
入力電圧により1023で計算した方が正解に近い時と1024で計算した方が正解に近い時が存在する
2.5000V入力時にADCが512を出力すれば1024で計算すると誤差が0になり正確とも言える
しかし2.5000Vを入力した場合のADCは計算上512だけど以下を見てほしい
511 ( 2.495117 〜 2.500000 )
512 ( 2.500000 〜 2.504882 )
丁度境目なんだよね、つまり511と512の可能性が半々・・・・
512*5/1023 = 2.502443 , 511*5/1023 = 2.497556
512*5/1024 = 2.500000 , 511*5/1024 = 2.495117
(512+0.5)×5/1024 = 2.502441 , (511+0.5)×5/1024 = 2.497558
1024で計算すると誤差が0になる可能性半分、誤差が最大になる可能性が半分
ADCの計算方法は最大誤差を少なくする事が重要だと思うのよ(;´・ω・) >>630
0も含めた1024だから
0から1023だから理論的には
5/1023が1デビになる >>632
ADCの変換特性を、階段のステップの先の延長線がゼロボルトになるイメージで考えてるみたいだけど、それではオフセットが発生する。
そこで、普通は階段の踏面の中央の延長線がゼロボルトになるように作られてる。(オフセット誤差ゼロなら)
先の例のADC結果が0x200となった場合で説明すると、この時のアナログの真値は2.5V±0.5LSBとなる。つまり1024で割って何ら問題無いよ。 >>634
0から1023(の1024種の結果が得られる。)だから理論的には
5/1023が1デビになる?
この考え方だと1ビットのA/Dコンバータは、
0〜1だから理論的には
5V/1=5Vが1分解能ってことになるのかな?
1023説の人に聞きたいけど、一般的な、リファレンス5Vの電圧出力D/Aコンバータは、
デジタル値がNのときに
Vout = 5V×N/256
それとも
Vout = 5V×N/255 よく考えてみたら10bitの最下位を扱うスキルなんて無いやw >>638
1ビットのA/Dって早い話、HかLかなんだけど、
あなたの考え方だと、
2.3Vは0?それとも1?
2.7Vは0?それとも1?
もし、分解能が5Vなら、0は何Vから何Vで、1は何Vから何Vなんだい?
1024説で、5Vリファレンスの1ビットのA/Dを説明するなら、
1分解能は、5÷2=2.5Vで、
0V〜2.5VでA/D変換結果は0
2.5V〜5VでA/D変換結果は1
ということになるよ。 区間の端を代表値にするから0かVrefのどっちかだけ現れて気持ち悪さが発生するのよな 5Vリファレンスの1ビットのD/Aとなると、0Vか5Vという認識になってもいいはず。
(1ビットでラダー抵抗を組むことはなさそうだし)
A/D、D/Aを対称で考えるなら、やっぱり8ビットとかの多ビットで考えないと混乱を招くかもしれないな。
なんにしても、この問題って、1024説が正しいことはみんなわかっていて、
わからないふりをしている人に対して、納得できるように説明しようと試みる人を困らせてるんだよね?
説明する側も、ほどほどでいいのでは。 理想のD/A変換は、リファレンス電圧とD/A値から一つの電圧値が算出できるけれど、
理想のA/D変換においては、リファレンス電圧とA/D値をもとに算出できる元の電圧は
1分解能を持つ範囲だよ。 >>637
2ビットだともっと分かりやすいかな
4種類数えられる
0から3まで数えられる
33パーセント
33パーセント
33パーセント
ゼロ
4種類あるが最初はゼロしか数えられない
数えられるのは3つしかない
だから理論的には/3
/1024の人はADCでスケッチ書いたことあるの? 328Pのデータシートだと、
24.6.3 ADC Accuracy Definitions
An n-bit single-ended ADC converts a voltage linearly between GND and VREF in 2n steps (LSBs).
The lowestcode is read as 0, and the highest code is read as 2n-1.
つまり10ビットのA/Dコンバータでは、
GND〜VREFを1024ステップで直線的に変換し、最小コードは0で最大コードは1023だ、となってるよ。 2ビットで/4だと0が25パーセントなのでゼロにはならないよ >0から3まで数えられる
>33パーセント
>33パーセント
>33パーセント
>ゼロ
>4種類あるが最初はゼロしか数えられない
>数えられるのは3つしかない
>だから理論的には/3
理論の展開がおかしい。/3を前提にしているから、33%がでてきてる。
>4種類あるが最初はゼロしか数えられない
「最初」が変換値0を表すのだとしたら、だけど、理想の10ビットA/D変換器があるとして
そこに現実的な信号をつないだら、マイナス値でも与えない限り、変換結果0は得られないですね。 >>647
理論的にはと前置きしています
現実的な話はしていません >2ビットで/4だと0が25パーセントなのでゼロにはならないよ
5Vリファレンスの正電圧入力の2ビットA/Dコンバータに
0V以上の電圧を与えたとき、変換結果として0が得られたら、
入力値は0V〜1.25Vなのだといえるよ。
A/D変換結果が0のときに、入力が0Vだと言うのはそもそもおかしい。
正確には範囲で表現するべきこと。 >>648
>理論的にはと前置きしています
いやー。理論になってない、ってことを↓と書いてるんだけど。
>理論の展開がおかしい。/3を前提にしているから、33%がでてきてる。 そもそも、なんで4段階のうちのひとつだけを不平等にして考えるんだろう。
>33パーセント
>33パーセント
>33パーセント
>ゼロ ID:LrHT+Scpさんの考え方は、>>645の英語部分に照らして整合性はあるのかな? 整数(int)にアナログ(5V)的な整合性を追及してもキモイことになるだけ
10ビットでアナログ的な辻褄合わせしたいなら
float/double使って1023でオペレーションするべきかな
どうせ量子化ノイズが-60デシベル程度あるんだし
気にしない気にしない 1ビットに話を戻します
0はゼロ
0の範囲は0から4.9V
1の範囲は5V
量子化の段階でこうなると思います
1は5Vに達しないと1になりません
確かに0だからといって0Vとは限らないのは分かりました
正確さを帰すなら/1ではないでしょうか?
/2で2.5Vで1とするのは精度的に問題ではないですか?
アナログだからわざと曖昧にするために/2である必要があるのでしょうか >>656
そこまで突っ込む必要があるのでしょうか
桁数が変わるだけで5.00000000000Vで1に達する事には変わりありません >>654
> 1ビットに話を戻します
> 0はゼロ
> 0の範囲は0から4.9V
> 1の範囲は5V
ネタだよな。その仮定だと1の範囲は5以上10未満になるけど10はどっから出てきた? >>654
4.9Vを超えて5V未満のときはどうなるんだってばよ?? >>660
量子化なのに0と1で量子単位が違うの? >>663
私はど素人のズブの初心者なので
私の言ってる事が正しいかどうか分かりません
どなたかズバっと答えていただけませんか 1ビットは2値。その2値が等しい電圧範囲を持つなら、5Vリファレンスなら
A/D変換値0は0〜2.5V。1は2.5V〜5.0Vですよ。
>/2で2.5Vで1とするのは精度的に問題ではないですか?
上記の電圧範囲であることの、どこに精度の問題があるのでしょうか。
ID:LrHT+Scpさん
「逐次変換A/Dコンバータ」の仕組みはわかりますか?
>1023説の人に聞きたいけど、一般的な、リファレンス5Vの電圧出力D/Aコンバータは、
>デジタル値がNのときに
>Vout = 5V×N/256
>それとも
>Vout = 5V×N/255
↑これについては、どう考えますか?
いくつかの8ビットD/Aコンバータのデータシートを見た上で考えてほしいです。
>>652でも書きましたが、328Pのデータシートに書かれていることと、あなたの説の整合性は
取れていますか?
>どなたかズバっと答えていただけませんか
2ビットなら4段階なのでVref/4ですよ。 >>636
>>ADC結果が0x200...の真値は2.5V±0.5LSB
これは間違いだと思う>632でも書いたがx200(512)を出力する電圧範囲は2.500000〜 2.504882
Vin = ADC * VREF / 1024 で計算してしまうと最大0.004882(1LSB)の誤差が生じる可能性がある >>665
2bit だと
0〜1.25Vで0
1.25〜2.5Vで1
2.5〜3.75Vで2
3.75V〜5Vで3
なので、
変換値x1.25+0.625 ± 0.625 ですかね。
でも、電圧に変換して表示したときに
最低が0Vでなくて0.625Vってのは気持ち悪い。 気持ち悪いかどうかで、A/Dコンバータの性質を決めちゃだめです。 ググってグラフを見てきたらなんとなく分かってきた
文字だけ見てると分からない
実験して実際に波形を見てみる
みなさんありがとう ADCの精度に夢見過ぎな奴多いな
例えば10bitADCならよい製品でも諸々込みで±2LSBくらいの変換誤差は有る前提で考えないと、安物だともっと悪化する
実はVrefの精度も検討してなかったりして >>670
元のURL
http://ww1.microchip.com/downloads/en/appnotes/atmel-8456-8-and-32-bit-avr-microcontrollers-avr127-understanding-adc-parameters_application-note.pdf
これを見て昨日のID:MSkrqMQwを修正します。
Figure 2-8. Perfect ADC in Single-ended Mode (Adjusted Quantization)
だと、実際の値に合わせるために、0.5LSBずらしています。
これを2ビットのADCにあてはめると (面倒なのでリファレンス4Vにします)
変換値0:0〜0.5V
変換値0:0.5〜1.5V
変換値0:1.5〜2.5V
変換値0:2.5〜4V
こういうふうに作られているADCもある、ですかね。
https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf
Figure 24-13を見ると、変換値0の部分はアナログ値の範囲が半分になっています。
アナログデバイセズのAD7813だと、この0.5LSBの補正は意図していないように見えます。
https://www.analog.com/media/en/technical-documentation/data-sheets/AD7813.pdf
Figure 7. Transfer Characteristic
A/Dコンバータによってこのあたりの考え方は違うのでしょう。
実際の回路では、オフセットエラーを含め、電源レールに近いところは、ADCをドライブする回路も含めて直線性も
悪くなるので、ここの0.5LSBがどうなっているのか突き詰めても益は少ないと思います。
いずれにしても、分解能は Vref/1024 ですけど。 >>674
>これを2ビットのADCにあてはめると >(面倒なのでリファレンス4Vにします)
>変換値0:0〜0.5V
>変換値0:0.5〜1.5V
>変換値0:1.5〜2.5V
>変換値0:2.5〜4V
>こういうふうに作られているADCもある、ですかね。
ねーよ
元の資料をどう解釈したらそんなことになるんだ >>674
話が本質に近付いて来たね。ADCのオフセットをどう捉えるかがポイントだと思う。
元のURLとしてリンク貼ってくれた資料で説明すると、
https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf
の Fig24-10 Offset error がそのオフセットに該当すると思うんだけど、
その値はTable 29-15. の Offset error で規定されていて、
スペックでは 2LSB Typ. となっている。(1LSB Typ.となっている資料もある)
つまり。0.5LSBとか言ってる場合じゃないくらい大きなオフセットが現実にはある。
.たぶんこれは前段のアナログ回路も含んだ値だろうから、ADC自体のオフセットでは無さそうだけど
これくらいのオフセットは覚悟しなさいと言うことなんだろう。
そんなことで、正確な入力電圧を推定するためにはゲインとオフセットの補正は必須と言うことだね。
話を戻すと、ADCの感度は Vref/1024で計算すればOK。
これを1023とか言ってる人は、ゲインとオフセットの区別が付いていない人。まあよくいるんだけどね。 >>675
おめえ文句ばっかり垂れてねえで説明しろやクソが UNO(ATMEGA328)のADCを実測してみました
VREF 5000mV
1 > 11.25~16.12
2 > 16.12~21.01
3 > 21.01~25.97
2020 > 4980.16~4985.02
2021 > 4985.02~4990.01
2022 > 4990.01~4995.02
VREF 2000mV
1 > 4.14~6.09
2 > 6.09~8.03
3 > 8.03~10.07
2020 > 1991.15~1993.12
2021 > 1993.12~1995.10
2022 > 1995.10~1997.19 難しいことは良くわからないのだけど
328Pのデータシートに書いてある10bitADCの説明だとADC=Vin×1024/Vrefなんで、
誤差とか無視した理想電圧でvinMAX=Vref=5Vってすると、5Vを1024で割った値に
VinとVrefの比率を掛けた値がADCに出てきますってことだよね
で、ADC=1024は10bitじゃ表せないので、ADCに実際に上がってくる値の最大は1023
この値は5V-5V/1024から5V以上の間を表すってことなので、ADCの値1に付き何Vかを
計算するのは5/1024で、値が0なら0から4,88mV、値が1なら4.89mvから9.77mV・・・
値が1023ならば4.99512V以上ってコードで作りこむことになるんだよねぇ? >>678
すごい助かる
ありがとう
つまり0は0Vではなく他と同じように幅があるから/1024ですね 0〜100を0〜1024に変換するにはどうすればいい? 市販の測定器とかは厳密な数値が出ると思うんだけど
arduinoとかとはなんか違うの? >>682
変換後(0-1024) = 変換元(0-100) × ( 1024 / 100 )
出力には小数点が含まれるので整数に直すには四捨五入するのが理想 >>681
ゼロの幅だけ広くない?
他の2倍くらいあるよね。 >>686
確かに広いですね
厳密な測定は補正が必要なのでしょう
とりあえず私は1024でざっくり行く事にしました
よほどの時間がないと全部の補正なんてできないし そうかだから+0.5なんだね
オフセット誤差補正で >>689
それは表示数値を下限値じゃなくてレンジの中間値で見せてるだけ。オ UNO(atmega328)のanalogRead値から電圧を求めるとして
atmega328の内部で量子化補正が「有り・無し」場合
【量子化補正有り】
Vin = ADC * VREF / 1024 (誤差 小)
Vin = ADC * VREF / 1023 (誤差 大)
Vin = (ADC+0.5) * VREF / 1024 (誤差 中)
【量子化未補正】
Vin = ADC * VREF / 1024 (誤差 大)
Vin = ADC * VREF / 1023 (誤差 中)
Vin = (ADC+0.5) * VREF / 1024 (誤差 小)
実測値をみてると量子化未補正に思えるけど、データシート見てもその項目が発見できてない(俺の馬鹿!)
PICとかのデータシートはわかりやすいのに・・・( https://i.imgur.com/JOZ6gsx.png ) >>678さんがやっているような実測をもって、この0.5LSBの補正がなされているかどうかの
検証をすることには、ほぼ意味がないと思う。それ以上のオフセットエラーがある。
それに入力電圧が0Vのときに変換値が0にならないようなオフセットエラーはハードでも
ソフトでも補正が効かないので、素子自体は変換値0となる電圧範囲は広く取られることが
多いのでは。 >>696
DeepLをGoogle検索するぐらいはやったうえで、分からん、って言ってるのかな? >>698
最初の質問(>>585)の結論を出すことが目的だとして
現状結論を出せていない
0.5LSBの補正が「有る・無し」が答えのカギとなると思う >>700
>結論:ADCからVinへのスケーリングは「1/1024」で計算しなけ
> ればならない。
> 「1/1023」は間違いである。
これは、明白なことなので、ここでやっているような議論をする意味がない。
誤差のある現実世界のデバイスを実測してみても、あまり意味はない。
様々なエラーを含んだデバイスを、誤差のある測定を行って、仮に
「得られた結果は1LSBは1/1023に近いものだ」
となったとしても、1LSBが1/1024であることに変わりはない。
>>698の主旨は、実験で判断してはいけない、ということなのは理解してもらってるだろか?
こういうことはデータシートかメーカーの公式資料を引用して議論するか、
個人的に納得したいなら、メーカーか公式フォーラムに尋ねるのがいい。
実測で判断したいなら、誤差のないデバイスを持ってくるべき。(数を増やして平均してもだめだよ) UNO(atmega328)の場合
Vin = ( ADC + Offset Error ) * VREF / ( Resolution -1 + Gain Error )
※Gain Error = 2LSB Typ , Offset Error = 2LSB Typ
つまり
Vin = ( ADC + 2 ) * VREF / 1025
これかもしれない・・・(;´・ω・)
詳しい人助けて( ;∀;) >>701
実機は理論通りには動かないってことだな。 >>701のまとめに同意だな。
>>678 が測定してくれたVref5000mVの場合で説明すると、
近似直線は、Vin = 4.8776 * ADC + 7.4907 となっている。
傾きの理論値は 5000/1024=4.8828 なので、実際には少し小さな値で計算しないといけない
ことが判る。そこで、コードは、
#define KA 0.998932 // 感度補正係数
#define KB 7.4907 // オフセット補正量
Vin = KA * ADC * 5.0 / 1024.0 + KB; // 電圧の計算式 (mV)
と書くのが判り易くて良いと思う。
なお、式の中で定数になる部分はコンパイラがあらかじめ計算してくれるので、実際には何度も
計算が必要になる訳では無い。 あと、オフセットの話だけど、
片電源のオペアンプは入力電圧ゼロ付近に30mVくらいの不感帯、つまりオフセットがある。
それに比べるとATmaga328Pのアナログ回路は優秀だと思うよ。 正確な実測データがあるならそれ使って校正するのは測定器なら普通のことだしなぁ。個体のクセは実測データでしか補正できないし。まぁ、正確な実測データを得るのが難しいんだけど。 Vref=5Vのとき
1LSB=5/1024=0.0048828125[V]
(Vrefー1LSB)が1023(0x3ff)になるのだから
5-0.0048828125=4.995117188[v]が0x3ff
最大値が3ffだから1023で割るのかな?と思っちゃった人は
「植木算」を思い出そうず(^p^)
(1〜3ffじゃなくて)0起算だから1024段階、という単純なハナシかとおもいきや、
なんかみんなえらく難しそうなこと話してるなぁ・・・ 1bit DAC は、0Vと2.5Vを出すのだろうか?
0Vと5Vを出すのが自然ではないか。 デジタルとアナログの区別がつかないからDACが成立しないのでは?
1chステレオサウンドといってるようなもの >>710
だがしかしラダー抵抗で解説されているページが検索でヒットしたので
ざっと拝読したところ三ビット出力111で4.375Vだそうですよん(5Vではなかった)。
http://mitt.la.coocan.jp/pic/pic7_16.html DACでもvrefがどの値に対応してるかによる。秋月で売ってるやつ何個か見てみたけど
vrefと2^n(nはビット分解能)
が対応。出力は2^n―1までってのが多かった。microchipとLTだけだから他のところのまではわからんけど。 >>710
どういう回路構成のD/Aを想定してる?
今、話題になっている逐次変換型A/Dの場合は、ラダーD/A+コンパレータの構成をとるものが
多いので、必然的に1LSBの電圧がどうなのかについてはラダーD/Aを前提に考えることになる。
ところが、1ビットD/AだとラダーD/Aにする意味がほぼない。
ラダーを1ビットにすると、単なる分圧になるので2.5V。
でも意味が乏しいからラダーにしないので1ビットなら0-5Vとなると思う。 10ビットA/DでVref/1023考えると精度が要らないから2ビット無視して
8ビットA/Dとして使うときVref/255になるのかVref*4/1023になのかと
考えると1023というのがおかしいことが分かる。
10ビットでVref/1024
8ビットでVref/256
となるのが自然な考え。 ◆Offset
The deviation of the first transition (0x000 to 0x001) compared to the ideal transition (at 0.5 LSB). Ideal value: 0 LSB.
0>1に変化する理想の場所は0.5LSBの位置と有るのでこの説明だと量子化補正の有る理想ADCとの比較が前提となってる
◆Gain error:
After adjusting for offset, the gain error is found as the deviation of the last transition (0x3FE to0x3FF) compared to the ideal transition (at 1.5 LSB below maximum). Ideal value: 0 LSB
1022>1023に変化する理想の位置は最大値(VREF)から-1.5LSBの位置と有るので量子化補正の有る理想ADCとの比較が前提となってる
データシート読むとゲインエラーはオフセット補償をした後の値と有るので
Arduino(UNO)はこれが正解じゃないだろうか・・・
Vin = ( ADC + Offset ) * Vref / ( 1024 + Offset + ( Offset - Gain error ) )
Vin = ( ADC + 2 ) * Vref / ( 1024 + 2 + 2 - 2 )
Vin = ( ADC + 2 ) * Vref / 1026
(※オフセット・ゲインエラーはデータシートの標準値を適応)
参考資料
ATmega48A/PA/88A/PA/168A/PA/328/P(Data Sheet)
AVR120: Characterization and Calibration of the ADC on an AVR (APPLICATION NOTE)
AVR127: Understanding ADC Parameters (APPLICATION NOTE) >>717
328PのデータシートのADCのエラーは、2LSBって書いてあったら、それは±2LSBだよ。(おそらく常識的に)
あと、実回路ではA/D変換に入るまでの回路の誤差もついてくる。
Vref/1024は理屈での話にすぎない。(理屈の話において、Vref/1023は誤り)
オフセットもゲインも実際のセットではリテラル値ではなく、ファームまたは
ハードウェアで作られる変数にするわけだしね。
(ファームならEEPROM、ハードウェアなら半固定抵抗などですね)
入力電圧がいくらなのか、って話をするときに、理屈の話なのか、実際の電圧を知りたいんだ、なのかは
切り分けないといけない。
Vref/1023かVref/1024かは、結果的にはゲインエラーとして効いてくるけど、1024と1023とを取り違えた
ところで、ここで発生する誤差は0.1%にすぎない。でもそのもとのVrefの誤差のほうがはるかにでかい(ことが多い)。
議論の中でVref=5Vがたびたび出てきたけれど、回路内で完結する何かの電圧が同じ5Vから分圧して得られている
ケースをのぞけば、この5Vの誤差がそのままゲインエラーにつながる。
7805みたいなレギュレータで作った5Vなら、数%の誤差があるよね。
328Pには1.1V内蔵リファレンスもある。こっちは正確かなw >>713
3bit程度なら電流加算型にすればいいじゃん 出力の時に1024とか4096で計算すると振り切らない? 使わないボードを選択する一覧から消したいのですが、どこを消せばいいのでしょうか?
promicro,promini5v,promini3.3v
この3つを頻繁に切り替えるので他のやつを非表示にしたいです。 >>718
最初は自分もデータシートの誤差は±2LSBって意味だと思ってた
でもデータシートでは数値は以下の様に明確に区別されてるので±ではないと思われる(たぶん・・・)
https://i.imgur.com/SyzxuYu.png
もう一つの理由としてオフセット誤差・ゲイン誤差の数値がMaxではなくTypとして表記されてる事もある
±2等の誤差で有ればTypではなくMaxの方に記載されてるもしくは(Min>-2LSB MAX +2LSB)の様な表記になるはず
以上の事から自分は±ではなく2LSBの誤差を標準値として考慮する必要があると判断した
議論の中心はanalogReadから入力電圧を求める正しい式は何か?だと思ってる
機種の話は直接的には出てないけどArduino UNO(atmega328)を前提に考えてる
個体差での誤差は考慮出来ないので標準的な誤差はデータシートのTypを元に補償する場合での正しい式を求めようとしてる
ついでに混乱の原因としてAVRのデータシートでも2種類の計算式が記載されてる
https://i.imgur.com/sWKwOtU.png
https://i.imgur.com/GvoiOZ4.png (ATmega4809)
UNO(ATmega328) -> 1024
Micro,Leonardo,(ATmega32U4) -> 1023
Nano Every(ATmega4809) ->1023 >>723
もし標準的に+2LSBになるようにデバイスを製造できるのなら、標準的に0LSBに合わせて製造すればいいのに
なんでそうしなかったんでしょね。
>議論の中心はanalogReadから入力電圧を求める正しい式は何か?だと思ってる
現実の入力電圧を求めるのはハードウェアかソフトウェアの個別チューニングですよ。あくまで理屈の話でしかありません。
「Vref/1024で計算しているから」あるいは「データシートに書かれた標準誤差を含めた計算をしているから」という根拠で
「この装置は正しい入力電圧を得ている」と言えることなんてないです。
それより、>723で興味深いのは、1023と書いているデータシートです。
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf
これの310ページで、たしかにADC=VIN*1023/VREFとなっています。
でも差動チャンネル(10ビットを±9ビットで使う)だと511ではなくて、512なんですね。
一方で、307ページには、
An n-bit single-ended ADC converts a voltage linearly between GND and VREF in 2^n steps (LSBs).
「シングルエンドの10ビットのADコンバータは、GNDからVREFを1024ステップで直線的に変換する」とあります。
また、1023と書かれている310ページにも
0x000 represents analog ground, and 0x3FF represents the selected reference voltage minus one LSB.
変換値0は、アナロググランド、変換値1023は、[選択したリファレンス電圧]-[1LSBの電圧]
となっています。記述に矛盾がありますので、どこかが間違っている可能性が高いと思います。 電池駆動のとき電源電圧が変動すると思うんですが、
例えば、4.8V-3.3Vに変動したとき、処理速度とかAD変換とか
何か弊害が出ることはありますか? >>725
16MHz動作は5V付近でしか保証されなかったような。 できるだけ変動しないようにすればいいんじゃないの? >>725
A/D変換のリファレンス電圧が電源電圧からとられたものだったら、その分狂うね。
ただし、たとえば電源電圧とGNDをサーミスタと抵抗で分圧して温度を測るような
しくみだったら、実害は小さいだろうね。 >>722
ttps://programresource.net/2020/02/28/3015.html
boards.txt を編集して、非表示にしたいボードに .hide=true を設定すればおk int raw = analogRead(A0);
map(raw, 0, 1024, 0,5000);
ってするとえわわわに届かない アドバイス求む
Arduino Pro miniをピンヘッダーを設置と同時に「ヒューズビット」及び
「.hex」ファイルの書換えを行いました。
ユニバーサル基板に「Arduino Pro mini」「USB to TTL converter」「ICSP端子」「その他必要配線」を設置したので
動作確認の為、AVRライターでPro miniと通信しようとしたが、何故かエラーで通信できない?
◆試した事
・デジタルマルチメーターでの導通test -> 問題無し
・ポリウレタン銅線を2度の取替 -> 改善せず
・配線ミスの確認
・本体「Arduino Pri mini」は問題無く動作確認済
●先人の方に何か見落とし等がありましたらアドバイス願います。 >>732
そりゃ〜最大ぬわふあまでなんだからそうなるでしょ お騒がせ致しました。
PCのUSB端子口を変えたら問題無く通信出来ました。 ∧_∧ / ̄ ̄ ̄ ̄ ̄
( ´∀`)< オマエモナー
( ) \_____
| | |
(__)_) わたい江戸っ子だんねん
生まれはかみたと申しますえ 「変ちきなジジイがおりましてさ、百二十畳敷きの紙に大達磨を描いてみたり、かと思えば米一粒に雀を二羽描いてみたり」 nanoにUSBコネクタに繋いで
5Vピンからも5V注入したら壊れる? >>741
Arduino nano は USB 付いてるだろ。 電池駆動だとどこから電源供給するのが良いの?
VINだと6Vから12V
余分な電圧は熱になるが5Vは安定しそう
5Vから入力だと5Vピッタリじゃないとダメなので電池の電圧が瞬間的にちょっと下がっても無理そうだし 電池駆動だとnanoじゃなくpro-miniにするよな >>744
すいませんこれいきなり質問しました
ものは問いません何でもいいです
とりあえずUNOとかm5stackとかは気になります UNOはNanoと同じ、これをバッテリー運用しようとはあまり思わないだろう
M5はバッテリー内蔵をチョイスする uint8_t id[8]
char buf[17];
snprintf(buf, sizeof(buf), "%02X%02X%02X%02X%02X%02X%02X%02X", id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7]);
これってもっと短く書けない?
速度も重視な感じで。 >>748
sprintfを使わない分メモリ使わないし早い。
見かけの行数は増えるけどね。
uint8_t id[8];
char buf[17];
const char *hex = "0123456789ABCDEF";
for (int pos = 0; pos < 8; pos++) {
buf[pos*2] = hex[(id[pos] >> 4) & 0x0f]; // マスクは不要だが符号ありにも対応するため
buf[pos*2+1] = hex[id[pos] & 0x0f];
}
buf[16] = '\0';
動かしてないからミスがあったらゴメン 短くというよりもっとスマートに書けないものかという要望だと思われ
特に[0]-[7]まで並べる部分が生産性低そうでアホっぽく見えるな sprintfはバッファオーバーフロー起こすからsnprintfやsprintf_s使った方がいいよ バッファオーバーフローなんて起こさないようにプログラムすればいいだけ 気をつければ済む話、というのはだんだん廃れていってる考え方だね。 >>756
組み込みで自分で作って自分で使うものなら問題ない
ファンクションのバッファオーバーフローが問題になってるのはプロジェクトが大きくなってそこでバッファオーバーフローが起こるか起こらないかを把握する事が難しくなったからCPUパワー使ってもファンクション側でチェックすれば安全という考え
絶対にオーバーフローしないような実装ならチェックするだけ無駄 関数の呼び出しコストや
ビットオーダーの問題考えたら考えると
sprintfでよくね? %sで何が突っ込まれるかわからないみたいな状況じゃなきゃ問題は起こらないし
そもそも↑の様な状況を作ってはいけないからな >>753
Arduino に sprintf_s() あるの? >>761
c++で使える関数全部使えるんじゃなかったっけ? すいませんここで聞いていいのか分かりませんが
オペアンプを8個ボルテージフォロワで使いたいのですが
小さくなったICとかでありますか?
用途はアナログセンサーの基準電圧に使いたいです >>763
別にここでもいいけど初心者質問スレの方が適切。あと基準電圧ならボルテージフォロア必要ないと思うが。センサーと言ってもいろいろあるんだから型番ぐらい先に出しとけ。 ド素人の質問です。
elegoo unoにEthernet2Shieldを載せてWebSerberのサンプルスケッチを実行しているのですが、
PCからブラウザでunoのipを入力しても見ることができません。
環境はWiFiルータにunoを有線接続し、PCは無線接続しています。
WebServerのスケッチのMACアドレスをEthernet2Shieldに記載のものにし、
IPはPCと同じセグメントでホストだけ変えています。
何が悪いのかさっぱりわかりません。 例えばDHCPクライアントでもないのに
勝手に無線有線間でルーターのAP機能がオンになるんだろうか?
結局適切なテスト環境でっち上げてピング撃ちまくらないと
原因究明できない気がする >>765
ブラウザで接続を試みた直後、PC側のarpキャッシュにエントリーは出来てない?
あとはPCにwireshark入れてパケットキャプチャ >>766,768,769
なんか朝イチでやってみたところつながりました。
単に入力IPを間違えていたか、Arduinoの電源を入れてからLANケーブル差していたかも。
ボケててすみませんでした。 実はもう一つ質問があります。
あるサイトでEthernet2Shieldは10,11,12ピンを使用するので、
それらのピンは使用できなくなると書いてありましたが、そうなのでしょうか?
そうだとしたらShield自体にもそれらのピンを差すところがありますが、
なんの意味があるのでしょうか?
実際にそれらのピンを使用する回路で、Shield有りの場合は正常動作しませんでした。
Shieldを使用したい場合、それらのピンの使用は諦めて代替手段を考えるべきでしょうか?
なおShieldのSDカード利用は考えていません。 >>752
ループで何回も関数呼ぶよりまとめてスタックに積んだほうが合理的だけどな >>748
じゃあ僕は速度重視だだだ!(^p^)
inline uint16_t Int2Ascii02x(uint8_t uArg){
switch(uArg){
default: return 0x0; // error code.
case '\x00': return 0x3030;
case '\x01': return 0x3031;
... // 中略、全256パターン列挙
case '\xff': return 0x6666;
}
}
を使って直にバッファに書こうぜ!(^p^)(展開後何行だよ・・・) >>771
SPIで通信に使っちゃってるんだから仕方ない
ヘッダがそのピン用にも付いてるのは複数のSPIスレーブデバイスをぶら下げるためか、そこだけ削るのが面倒か >>771
10,11,12ピンはSPIインターフェイスだけど、チップセレクトでデバイスを適切に選択すれば他のSPIからでも使えるはず。
でも、そんなに色々やるとRAMが足らなくなりそうな気が、 嗚呼成程グローバル変数に変換テーブルとして配列を宣言しておいて、
unsigned char ucAscii[]={
'\x3030', //00
'\x3031', //01
'\x3032',//02
...
'\xfe',//254
'\xff'//255
};
buf[0]=ucAscii[id[0]];
buf[1]=ucAscii[id[1]];
...
buf[7]=ucAscii[id[7]];
か。
(※ buf[i]=ucAscii[id[i]];でループ回すより7パターンぐらいなら並べた方が展開後ステップ数は短く早いかも) あぁぁぁあ やってもうた(^p^;)
'\x6665',//0xfe
'\x6666'//ff
でしたな、さーせん><; >>774,775
SPIのスレーブ用ということで理解しました。
Shield以外での当該ピンの使用は諦めてI2Cモジュールでも使います。
ありがとうございました。 inline void byte2str(const uint8_t (&num)[8], char (&str)[17])
{
static const char *hex = "0123456789ABCDEF";
char *ps = str;
for (uint8_t i = 0; i < 8; i++)
{
*ps = hex[num[i] >> 4];
ps++;
*ps = hex[num[i] & 0x0f];
ps++;
}
*ps = '\0';
} v(ブイ) v(ブイ) v(ブイ) ビクトリーコンパイル出撃だー
たとえ最適化がこようとも、たとえ割り込みこようとも いや、さすがのこんばとらーVolatile(?)も、割り込みがかかったら勝たんやろ・・・w 電池駆動で自身の電源電圧を読んで電圧によって動作を変えたいのですが、調整する時にPCとSerial接続していると読み取り値が微妙にずれてしまいます。
スマートに調整する方法は無いでしょうか? >>790
>PCとSerial接続していると、
これを文面通りに解釈するとTX,RX を接続したことになるけど、これで電源電圧の変化は測定できないくらい僅かなはず。
ひょっとしたら、PCとUSBコネクタで接続した場合を言ってるんだろうか。 回路もスケッチも具体的な数値変動も不明だと正常か異常な動作かもわからん。答えようがない。 >>795
USBコネクタを挿すとPCから5Vが供給されるので勝手に電源が切り替わっちゃうので困るって話か。
それはUSBコネクタ使わないで調整するしか無いね。
ボードのTxに情報出してるみたいだから、PCに接続したUSBシリアルモジュールを使って、ターミナルソフトでその情報を読むのが普通だと思う。
別にUNOのボードがあればArduino IDEのシリアルモニタでも同じことができる。 >>796
USBシリアルモジュールでやってみます。
ありがとうございました。 Arduinoを使ったNi-MH電池充電器の定番ってある?
別にマイコンを使わなくてもいいけど、シンプルな部品構成でできたら良いな 高速充電対応のNiMHワンチップコントローラーが
今の時代でも在庫あると思うけど・・・
足も8本くらいじゃないかな
NiMHの終了条件は電圧の変化率(dV/dt)が多いと思うが
妥当な設計と試験を考えたら難しいよ
それから充電中の本体稼働の余分の電流こと考えたら既成のパッケージしかないかな
あと簡単というなら市販のLi充電モジュールではだめなんかな? というかNi-MHの充電って、抵抗で電流制限してタイマーで適当に止めればいいだけなのね >>802
0.1cまでならそれで良かったはず、ニカドも似たような感じだったよな確か
1cとかで充電する場合は充電終期の温度上昇が大きくなるんで温度を直接測る代わりに-儼検出するんだった気がするよ
充電中は監視を怠らずご安全に MAXIMはかつてMAX712/MAX713とかいうのを出してて当然-ΔV/ΔV=0も見てるし温度監視用サーミスタ接続端子も付いてた、ただ16ピンだったしすでに入手が困難、それがDS2715になったのかな
中華では8PinのIC(型番不明)が乗ったモジュールが売られてる、充電電流とかセル数とか設定できるらしいが充電完了(満充電)をどこまで見てるかはよくわからん ArduinoでRCプロポのPWM出力エミュレータみたいなものを考えています。
出力先はESC基板です。
スティックを動かしたときに
パルス幅がmin1000〜1500〜max2000
と変化するのですが、
パルス幅2000で5秒
パルス幅1000で2秒
と出力したい。
digitalWrite(CH4_PIN, HIGH); // ピン4をHIGHに
delayMicroseconds(2000); // パルス幅分停止させる
digitalWrite(CH4_PIN, LOW); // ピン4をLOWに
delay(20);
digitalWrite(CH4_PIN, HIGH); // ピン4をHIGHに
delayMicroseconds(1000); // パルス幅分停止させる
digitalWrite(CH4_PIN, LOW); // ピン4をLOWに
delay(20);
と考えたのですが、時間軸が・・・・・。
ご教授お願いします。 パルス幅の単位はusなのか?
Lのパルスは20us固定なのか?
仕様をきちんと書け。
5秒/(2000us + 20us) で回数求まるだろり >>808
>>809
パルス幅の単位はμs
LOWは20μs固定です。
ソースの書き方がわから人です。 >>809
>>811
ありがとうございます
やってみます ID:1kSFPvNs お前優しいな
でもぐるぐる回さんほうがエエと思うで >>808
https://qiita.com/suzukinori/items/939cc9f49e535c4eadd7
例えばこういうの見ろや。
808スタイルで行くと応用効かないぞきっと。
808スタイルはこんな感じ?
まずはこれやって
次これやって
その次なんだっけ?
って地図もなくエベレスト登るやり方
理想は
市販装備品どんなのあるか網羅的に把握
対象の場所の先遣隊が残した地図をもらい受ける
今回のでは
一定パルス出す方式バリエーション調査
特定の時間を得る方法の調査 をまずやるべき
で、調査の結果これとこれの組み合わせがベスト?って他人に聞けば良い。 >>814
そんなことしてるからいつまでも登れないんだよ。
ベストの方法なんて探しても無駄。 >>816
やってみてトライするから中途半端なのよ
どうせこんなことメインでしつづけるわけないだろ?最短のベスト解すぐに探せる。一行ずつ実践なんて不要
>>808はこう聞けばよかったんよ
ArduinoでRCプロポのPWM出力エミュレータみたいなものを作りたい。(これが目的)
スティックを動かしたときに
パルス幅1000で2秒
パルス幅2000で5秒
パルス幅1000で2秒
と出力したい。
コードの書き方はやったことがない(これが目的じゃ無い、色々別のものもやる予定なし)
ですが、どんなコーディングするのがスマートですかね?
digitalWrite(CH4_PIN, HIGH);や
delayMicroseconds(2000); や
delay(20);はかろうじて理解したレベルです。
ご教授いただけたら嬉しいです。 >>815
パルス出すだけならそれでいいけど
最終目標はプロポの出力エミュレータなんだから
要求が複雑化するとすぐついていけなくなるぞ
すぐにおもいつくのは
・PWM周波数の微調整
・スティックのリニアリティ(BカーブなのかAかCか
・ヘッドアップ、ヘッドレススイッチ(上下左右方向の逆転
・センサーを追加して脱調検出 あと8chとかだとマイコンなら1個で済むけど、555なら8回路いる 更にそれぞれが同期しない問題もあるけど、トリガでうまいことやればそこは解決しそうな気もするけど
捨て案を育てても無駄なので放棄
555は本当にニッチな場面でしか出番が無いよ 更にそれらの設定をプロファイルとして記憶して簡単に呼び出し
フタバxxx型のエミュレーション
タミラxxx型のエミュレーション
と切り替えられるようにと要求があがってくると、ボリュームで設定してた555はお手上げだろう ベースのノコギリ波をひとつ発振させて
後はチャンネル分のコンパレータを用意して
D/A繋いでパルス幅の電圧を出力してノコギリ波とコンペアすればいい 555でできるのは簡単なサーボテスターまで
プロポのエミュレーターとか無理ゲー >>817
だから、「パルス幅2000」って何だよ?w
スティックの動きを検出したら
2秒間パルス幅1000
5秒間パルス幅2000
2秒間パルス幅1000
終わり
にしたいの?
そうじゃない気がする。 シリアルモニタの起動時のウインドウサイズは
変更不可ですか?preferences.txtを弄っても
起動後にデフォ値に戻ってしまいます arduino ide下部のメッセージ出力ウインドウも消せない あれはOutputペイン左上の[Serial Monitor X]の[X]をクリックで消す。
Outputペイン自体は、ペイン右下のウインドウマークアイコンクリックで消す(トグル)。
何にせよ、シリアルモニターが別ウインドウでないのは非常に使いづらい。 >>833
32bitラズパイに入れてみたいのに残念 >>819
何をそんなに必死になってるんだ?
まあ、Bカーブ使うなり、AやCなら二連にしたらどうだ?とか、
まてよ、オペアンプ対数掛けてやったらどうだ?とか、
微調整とか逆転とかは、半固定やスイッチで実現できるかもな
とか、シリーズに送るなら、FETで切り替えてパルス生成部は一個で間に合わせられないかな?
とか、考えてみるのもいとをかし。
どうせ趣味なんだら
PSoCだったら、そういうアナログ併用の遊びもマイコン内部でできたんだろうな。 555の等価回路観てるとあれは神が人類に与えたものだと思っちゃうよね。
アナログも数値計算でできてアナログよりも正確に簡単に等価な事がプログラマブルになってる今を観てるとあれは神が人類に与えたものだと思っちゃうよね。
天地創造の2つのシーンに生きてる幸せだわ vsコードでUploadの時ワークスペース内のスケッチが全部選択に現れるのはどうにかなりませんか? >>835
Ubuntuを使えw
Raspberry Pi 4に対応してるのは20.10からだけど
俺はLTSじゃないと使いたくないのでUbuntu Server 20.04入れてる
今年の4月か5月ごろに22.04LTSが出るはずだからそれでもいいかもね
デスクトップはMateにしてる Arduino Nano 33 BLEがスイッチサイエンスで売ってるけど
ピンヘッダ実装済みの方はあるけど、もうピンヘッダなしの方は在庫0になってるね
Arduino Nano 33 BLE Senseはまだあるけど Arduino Nano 33 BLEのチップのnRF52840はCortex-M4なんだね
nRF52840のページみたらCortex-M4 with FPUになってるので
単精度のFPUがついてるCortex-M4だと思われる WiFiが使えるArduino Nano 33 IoT待ちの人も多いのかな? なんだArduino Nano 33 IoTは
SAMD21でCortex-M0+でFlashもRAMも少ないのか
Arduino Nano 33 BLEと同じマイコンかと思ってた 表面実装の328pや328pbはいつになったら購入できるんだろう。
一年かけてやっと基板作ったのに、どこにも売ってないよ( ノД`)… ATMEGA16U2-MUなら、digi-key に在庫たくさん リードタイム52週ってのがぜんぜん消えないなー
3月くらいには40週とかになってると思ってたのに すいません。間違いました。
初投稿です。
Maker nano(秋葉原の秋月電子で購入したArduino nanoの互換機)とHC-05(amazonで購入したBluetooth通信モジュール)の通信、接続がうまくいかず困っています。
・やりたいこと
→AndroidスマホとArduinoで通信してラジコンを作りたい
・やっていること
まずピンを接続し、ATモードで親機、子機の設定(今回は子機に設定)、通信速度の設定を完了させました。空スケッチをArduino側に送ってシリアルモニタを表示させ、androidスマホのBluetoothコントローラーアプリをいじると、スマホ側で入力した内容がPC上のシリアルモニタに表示するのは確認できました。
さらにArduinoのTXの表示LEDが、スマホで送信するたびに点灯する様子も確認できました。
Bluetoothコントローラーアプリはgoogle playで入手した“Arduino Bluetooth”を使用しています。
次に試験としてandroidスマホ側で0を送信したらLEDが消灯し、1を送信したらLEDが点灯するようなスケッチを作りました。そうするとスマホで送信した内容は一切シリアルモニタに表示されないどころか、TXも光らず、接続できていないように思いました。
試しにArduinoに接続したPCのシリアルモニタの送信欄に0や1を入力すると、LEDが点灯したり消灯したりしました。
・聞きたいこと
接続の方法がおかしいのか、スケッチの内容がおかしいのか知りたいです。空スケッチの状態ではスマホで入力した内容がPC上のシリアルモニタに表示されていたため、つながってはいると思いますが、これ以上調べても何も出てきませんでした。
以下、試験用で使用したスケッチの内容です。
#include <SoftwareSerial.h>
SoftwareSerial MYport(0, 1);
int BTdata;
void setup() {
pinMode(12, OUTPUT);
Serial.begin(38400);
MYport.begin(38400);
Serial.println("Connect-Complete");
}
void loop()
{ if (MYport.available() > 0) {
BTdata = MYport.read();
if (BTdata == '0') {
digitalWrite(12, LOW);
Serial.println("LED消灯");
}
if (BTdata == '1') {
digitalWrite(12, HIGH);
Serial.println("LED点灯");
}
}
delay(10);
}
接続はhttps://novicengineering.com/arduino%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6hc-06%E3%81%A7android%E3%81%A8bluetooth%E9%80%9A%E4%BF%A1%E3%82%92%E3%81%99%E3%82%8B/の「手順」の方法でやっています。
よろしくおねがいします。 スマホ側(androidスマホの
Bluetoothコントローラーアプリ)→ PC(シリアルモニタ)
の確認に使ったソースはどのようなものですか? 今回のはAndroidとモジュールの間の問題だろうけど、デバッグ用にBTの受信生データは全部シリアルに流した方が良いと思う。 https://imgur.com/EvZkCJE
これがandroid側で設定した送信アプリです。
緑が1、赤が0になるようにしています。
https://imgur.com/m0uvYSl
これがarduinoに空スケッチを送った時のシリアルモニタです。
ボタンを押すたびに0,1を繰り返しています。 >>856
後者の動作をされた時のソースコードは
どういう内容になっていますか?
空スケッチ コピペ元のURLでも構いませんが。 https://imgur.com/Rto4Eap
この動画のように、PC上のシリアルモニタの送信欄で0,1を入れれば
LEDが点灯したり消灯したりしますが、スマホのアプリ上で操作しても
何も変わらないです。
スマホからの送信データをシリアルモニタに書き込んでいないのが問題でしょうか? 後者のコードは以下の通りです。
void setup() {
}
void loop() {
} >>858の動画は>>853の試験用のコードを入れたときの動作です。 >>856の二つ目の図は、com4になっています。
859のソースコードの他に、com4を指示する情報に
心当たりはありませんか?どちらで定義されましたか? ループバックするわけないだろとコードよく見たらソフトシリアルでハードシリアルと同じピン使ってるっぽい。BTモジュールに繋がってるピン指定しろよ。 応答文字列がBTモジュールに送られても良いなら、ソフトシリアル消してハードシリアルでBTモジュールと通信。 SoftwareSerial MYport(0, 1);
そのまんまじゃん
Bluetoothの接続どこ? btもじうる って使ったことないんやけど
btもじうる のTXをあるづいののrxに繋げるの?txどうしがただしいの?(^p^;) >>865
Arduino TX - レベルシフター - HC-05 RX
Arduino RX - レベルシフター - HC-05 TX >>866
ありがとうございます!!!!!!
866さんのように接続したら
スマホの操作がarduinoに送信されました!!!
初歩的なミスでした。
みなさんありがとうございました。 解決してよかったよかった(^p^)
しかしあれか。「PC上のシリアルモニタ」が
シリアルターミナル(通信の主体)じゃなくて、
機器同士の通信を傍受して観察 = モニタリングするソフトだったってことか。
開発環境にそんな機能まで備わっているとは いろいろ便利そうですな、
活用すればデバッグも捗りそうです。
Arduino、なかなか洗練された環境ですなぁ・・・ ぼくくらいになってくるとVSCもPIOも経由して
Arduino IDEに回帰して+コンソールにメッセージ出力さ 初歩的な質問ですが、2進表記はマニュアルには"B********"となっていますが、
"0b********"とかでも使えるみたいです。正式に対応していないだけなのでしょうか。 >>871
回答有難うございます。
0bはArduinoでは使えないのかと思ったのですが
使えるようなので、どうしてマニュアルに記載されて
いないのかなと思いまして。
0bに関してはCの正式な表記では無いのでちと古いCでは
対応して無いものが多いと思います。 Cの表記ではないよ。GCCローカル。
あるいはC++14から。 >>875
そう。なんでCで2進表記を定義しなかったのか。BASICでもそうだけど、MSX BASICは&Bとかいう方言はあったけど。
ペリフェラルの設定とか、基本は2進で書いたほうが分かりやすい。 >>875
高級アセンブラに定義が無いとは思えんが? 気のせいだよ。実際には、1と0がずらずら並ばれるより
16進の方が読み易いし、判りやすいよ。(慣れれば) バイトマシンだしね。ヘキサとオクタルがありゃ、十分でしょ?と。
コンパイラもなるべくコンパクトに。エラーチェックや最適化も最小限でプログラマの意思がなるべく尊重されるようにしようっていうスタンスだったしね。
だから昔はlintがお友達だったし、b++;とb=b+1;とb+=1;は意味が違っていたりして。 Arduinoで0bの方で使って見たけど別に問題出て無いようなので
使っていきます。有難うございました。 C++で使えてarduinoで使えないものはないと思うよ
知らんけど arduinoではsprintfで小数点使えないとかなかったっけ >>885>>886
ArduinoっていうよりArduinoIDEが使っているコンパイラはGCCそのものなので、
構文レベルではC++が当たり前に使える
ただし、sprintfなんかはライブラリ関数(stdcかな)なので、リンクするライブラリに
応じて使える/使えないや使い方が違ったりする Arduino IDEになんで「ビルド停止」が無いんだろ?
2.0もついてないし、みんな使わないの?
「あ、コード間違えた」と思っても、書き込み終了まで待たなきゃいけないし
そういうときはタスクマネージャーでarduino-builder.exeを強制終了させてるんだけど 桁合わせでゼロ入れたいのに
8進数扱いになるのがつらい
0xに合わせて0oにでもすりゃよかったのに 8進数なんて要らないのにな。
4進数も追加とか訳分からん。 プログラムでは使ったことないな。UNIXのchmodぐらいでしか見ないし。 ロングタイムアゴー
語長12bit、18biの世界がありました
4ビット縛りよりむしろ3ビット縛りの方が自然に見えるかも
実際見たことないが 質問なんですが、一つのピンだけ内部プルアップ抵抗が壊れるケースってあります?
今そんな状態なんですが 16進が普及する前に瞬間的に8進が使われたが
結局3bit単位はコンピュータと親和性が低くてすぐ廃れたんだろうな。 >>896
昔は3の倍数のワードのマシンが主流だったから。
pdp-8が12bit/word pdp-7が18bit、
NECのacos-6はバイト9ビット、36bit/word >>897
36bitのPDP-10がないのはなぜ?
TCP/IPになる前のARPANETでは最も接続数の多かったマシンがPDP-10らしいよ >>886
ARMのArduino互換機だとSerial.printf使えるの多いね
そしてARMの場合、%fで倍精度浮動小数点が使えたりする ちなみにビルゲイツがBASICを開発するのに使ったコンピュータは
大学にあったPDP-10で
ビルゲイツの相方のポールアレンは死ぬまで
実際に動作するPDP-10の互換機を所有してたらしい あと、vsprintfやvnsprintfが使えるやるならSerial.printfは簡単に作れる
#include<stdarg.h>
char str_buff01[256];
void printf1(const char* format, ...)
{
va_list ap;
va_start(ap, format);
vsnprintf(str_buff01, 1024, format, ap);
va_end(ap);
Serial.print(str_buff01);
} あ、
vsnprintf(str_buff01, 1024, format, ap);
ここ、1024ではなくて256ね
直すの忘れてた finger思い出した
おじいちゃんですいませんねえ 8080の機械語が2bit+3bit+3bitだったな
http://my-web-site.iobb.net/~yuki/wp-content/uploads/2018/04/201804_sa20_Instruction-code1.jpg >>908
3の倍数のbitの話題だし、PDP-11は16bitだから除外されてるんだろうね
PDP-11は16bitの頃のUNIXのターゲットマシンだったから有名だね
ちなみにUNIXを開発したケン・トンプソンは
現在標準になってきてる文字コードのUTF-8も開発してる 8bitPC時代には既にメモリダンプと言えば16進数だった。
3bitの倍数のマシンのメモリダンプは8進数だったんか? 暗記の得意だった人は16進でハンドアセンブル、理論的思考が得意な人は233でハンドアセンブルだったな(おれのまわり) そういえばUNIXのダンプコマンドはdumpじゃなくてodだったな(デフォルト8進) で、知らずにdumpコマンド何度も打って「オマエ何しようとしてるんだ?」っていわれた遠い昔… 質問失礼します
ドローン用のA2212モーターとESCを買ってarduinoで回してみたんですけど、ドローン用なので買ってから逆回転出来ないことに気づいてしまったんですが、アルディーノで両回転とも制御できるお勧めの安いesc、モーターなどありますでしょうか?3セル(11.1v)で探してます かつてメモリや磁気ストレージが何よりも貴重だったのだろう
メモリ数キロワードくらいなら12ビットアドレシングの方が僅かだけど有利なる
12ビットCPUには存在意義があったんだろうな
intとかポインターが12bitというのもアレだけど
6502(AppleII ファミコン)、6809はネィティブに
8bitのアドレシングモードがある
昔のコンパイラとか苦しめた事だろう(しらんけど)
ASCIIコードが7bit/8bitだから3bit 倍数が消える原因の一つになったかな arduino, RDA5807, SSD1306でFMラジオを作ってます。
これにダイソーの300円スピーカーのアンプ部分(8002A)を
arduinoからトランジスタS8050(500k〜10kΩで試しました)でオンオフしています。
質問ですが、アンプを繋げるとarduinoが暴走?してしまいます。音はならないし、ボタン入力も効きません。
アンプを別電源、またはarduinoに繋げない(音は鳴りませんが)と正常に動きます。
症状としては、起動時にピンをHIGHにしてトランジスタ経由でアンプの電源をONにしてますが
テスター計測で100mA近く流れています。アンプ単体で通常は6〜20mA、
FMモジュールが20mAぐらいだと思うので、何かの原因で流れ過ぎかなと思います。
アンプの電源部には470uFの大きいコンデンサが付いてます。これに最初に100mAぐらい流れるのかな?
回路図は表示部が違いますがこのサイトのように、特段変わったつなぎ方はしていません。
https://xn----7sbhgu4ahbanfnng.xn--p1ai/%D0%B1%D0%BB%D0%BE%D0%B3/fm-%D0%BF%D1%80%D0%B8%D0%B5%D0%BC%D0%BD%D0%B8%D0%BA-%D0%BD%D0%B0-arduino-%D0%B8-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5-rda5807/
FMラジオモジュール・SSD1306にはarduinoからI2Cの2本、電源から各線2本
FMラジオモジュールからアンプに音声出力 Pentium〜Core2なんかもメモリバス節約されてたりするからな
32ビット分フルで実装されていなかった >>909
PDP-11も8進数体系でしたね11/34のコンソールキーパッドの数字は0-7だし。
トグルスイッチのある機種(11/40)は3桁ごとに色が分けられてきれいだった。 >>916
どのピンから電源とってんの?arduinoの種類は? >>916
電源を別にすれば動くなら、答えはもう出てると思うけど
Arduinoの3V3を供給してるパーツの定格を調べてみたら?
リンク先の回路図と違うならそれも示さないと詳細は不明 3.3vのpro miniです
arduino, RDA5807, SSD1306はそれぞれバッテリーから直で取ってます
アンプは+がバッテリー直、GNDがS8050のコレクタ、
ベースはarduinoのデジタルピン、エミッタはバッテリーのマイナスです 回路図書けない人か。
電源と言ったりバッテリーと言ったり、まさにそこがボトルネックだと思うけど
そのあたりの重要性が分からない人のようだ。 >>923
言葉尻はいいですから、原因はわからないんですね? >>922
アンプのGNDレベルが0.7V上がってしまっているので不都合が生じてるんじゃないかな
S8550でプラス側をスイッチしたほうがいいよ 電源だ言うとるやろ
なのにあんたときたら回路図も出さない上に電源と言ったりバッテリーと言ったり
肝心な情報がブレブレじゃねえかと言ってんのに言葉尻だと?
馬鹿はそこで1人で吠えてなよ なぜ回路図書け言われると逆切れする奴が多いいんだろうね>>924
それともいつも同じ奴なのかな? >>925
あ!なるほど!PNPを使ってみます!ありがとうございました
>>926
原因がわからないなら私と同レベルじゃないですか。仲良くしましょうよ >>927
回路図ではキレてないですよ。
全体的な文章を見て反論いたしました。 横からだけど
ほとんどの人は>>916のリンク先見て3V3だなと思う
そのあと>>922に字面でごちゃごちゃ書かれてもいちいち見ないよ
後出し、回路図出さないの典型的な悪質問 >>932
その上逆切れのおまけつき>>924
最近こんなんばっかだよな 最初の質問で情報全部出せる人は稀だし、そんな人は自力で解決出来るだろう。質問しても答えてくれないと妄想で変な想定して的外れな回答する人が出て来たりするから、結局解決しないんだよね。 で、回路図はまだなの?
何を回答しても後出ししてきそうだから回路図が出るまではみんな傍観するよねw 別に悔しくはないんだろ
大部分の人は>>922の返答の仕方を見て回答する気にならなかっただけ >>937
で、解決したのか?
吠えてないで、ちゃんと事後報告しろよ 変なやつなんてゴロゴロ居るんだから気に入らなきゃNGして関わらなきゃ良いのに >>941
正論だけど、5chの楽しみ方からはズレてる。 初心者質問以前に明らかに人格おかしいぞw
解答得られない事が明白になったから
IDころころの荒らしパターンなんだろうな >>916が貼ったロシアのサイトは販売店で、場所はウクライナのすぐ東じゃん。
その店に罪はないんだろうけど、何だか複雑だな。 >>944
暇つぶしか何か知らんがでっちあげの質問みたいなのがたまにあるよね >>945
それは大賛成だけどさ、問題は解決したのかい? なんか荒れてるな
原因わかっちゃったかも、NPNをPNPに変えても同じだと思う
足りないものを足すかトランジスタをMOSFETに変えれば解決かな… まあ自分で作れそうにないものを人に聞きながら作ろうとする時点で
センス無いよ おれは極力教えてもらわないで作る 癖になるからね >>951
このスレ覗いてマウンティングすることが癖になってますよ。 アンプの電源のハイサイドスッチにp-MOS FET入れ、そのゲートを100kΩで入力電圧にプルアップ。
さらに、そのゲートをNPNトランジスタのオープンコレクタでGNDへ引っ張る。トランジスタのベースは47kΩでGNDに引っ張ると同時に10kΩでArduinoのポートへ接続てな感じかな。
Arduinoが5VならNPNトランジスタは省略可能だったけど、3.3Vなら入れといた方が良いだろうね。 >>953
そもそもそのMOSFETって何のために必要なの? >>954
電源電流の逆流防止じゃないの?
電圧が2-3V?以上だとMOSがオンして電流が流れ、それ以下ならMOSがオフしてボディダイオードで繋がってる状態になり、逆流を阻止する 8002Aの電源のスイッチングをArduinoのポートでしてるんだよね?
その必要性が分からない。
そもそも私が何か勘違いしてるのかな? >>916
バッテリーの電力不足だと思うよ。
これくらい説明あれば回路図はいらんと思うし、無いとイメージできないなら黙ってたほうがいいな。 > アンプを別電源、またはarduinoに繋げない(音は鳴りませんが)と正常に動きます。
なので電力不足では無いだろ
音が出ないのに政情という判断基準がよくわからんが
バッテリーからの電力供給がマイコンとアンプに分岐する前にパワースイッチ入れれば、アンプのパワー制御なんて不要だと思うんだけど
ヘッドホンを接続時の省電力化とか何か理由があるんだろう
CKE8002Bのデータシート見たら1pin Shut-down Logical Control, ‘1’ is active.になっているから
これを10kでpull-downしてマイコンに繋げばスイッチ回路は省略できると思う、待機時0.5uA >>959
別電源にすれば動くと書いてるのになんで電力不足ではないと思った? 8002を直接使っているならシャットダウンピンを使う手もあるけど、ダイソーのUSBスピーカーの状態で使いたいみたいだから電源を直接制御したいんだろう。
あと、Pro mini使ってるのは消費電流を最小限にしたいんだろうね。 言われた回路図も出さずに回答者をバカにする質問者
それでも回答するマヌケ回答者。。。 大人になっても漫画とかアニメとか見てる人たちは文字から読み取る能力が低いんだろうな。 >>959
>CKE8002Bのデータシート見たら
だよね
何余計なことやってんだ感しかない >>962
>ダイソーのUSBスピーカーの状態で使いたいみたい
あ、そか
ならその回路図も出さなきゃだな >>964
ぴこーん)マニュアルを漫画にすればいいんじゃね? >>964
出た、図表の存在意義の完全否定
お前はただ回路図が書けないだけだろが
こういう低学歴ってスキルを身につける努力は一切しないのに
なぜか自分にスキルが無いことの言い訳だけは用意してある >>967
・・・何の脈絡もなく解説者の美女が脱衣しながら解説するというサービス精神あふれる漫画で
概説が終わるあたりで残り一枚、というペース、そして決まり文句の「続きはwebで!」。
該当URLをクリックすると 一枚の絵もなく該当範囲の詳細な説明が文字だけでビッチリなされている(しかも英文) >>964
漫画・アニメに対する昭和生まれのステレオタイプな認識そのまま
化石の様な思考回路のヤツに限って持論の稚拙さに気づかずに生きていて迷惑 >>951
作れそうだと思って始めたんだろ
問題はそこじゃなく回答者からの質問にまともに答える努力と誠意がこの質問者に皆無なこと
そして毎度のように質問者はとんずらで
経過報告もクソもあったもんじゃない低民度w RDA5807は面白そうだし、いつか通る道かもと思って眺めてたけど
よく考えたらうちはFMの電波がまともに入らないんだったわw 昨今の漫画・アニメは異世界物が多い、「小説家になろう」という投稿サイト原作のものが40%以上だ
なので漫画・アニメを見て続きが気になって小説サイトの原作を読むようになって、漫画版・アニメ版は見なくなるというのが最近の流れ
活字離れどころか活字寄りになってきている
ところが、誰でも投稿できて校正する人もいないまま原文でアップされているので、文章能力の無さが露骨に表れてる >>972
うちも電波状況悪くてまともにはいるのは2局だったけど
アンテナ入力の前にS9018で一石アンプ入れたらすごく高感度になって5局入るようになった お前らここでなに期待してるんだ?
リアルで会話できる人間居るのか? たまに電子工作ネタ拾えるからなあ
リアルだと木工やレザークラフトやバイクのエンジンいじってるやってる奴はいるが電子工作は俺だけだな >>974
テッコンキンクリートなので1局も入らないです。
RDA5807で遊ぶためだけにアンテナ立てるのもなあという怠け者です。 >>977
アンテナは1辺92cmの四角いループアンテナを天井に張ってるよ、リード線なので100円もしない
ベランダに出すだけでもかなり違うと思うけど
ローカルFM放送はネットでも聴けるしそこまでやる価値あるのかと言われるとアレだよねw >>968
完全否定なんてしてないが?
やっぱこうなっちゃうんだよなwww 実際の所、何処が最も有利なのだろう・・・
1)天井
2)窓枠
3)窓開口部の一部
3案は、ループ外面積も逆相で実は重要なのでは?という発想(^p^;)
>>980
室内は壁や天井に電線通ってるからそれに結構左右されるよ
子供の頃深夜放送聴くために壁の電線通ってるとこにロッドアンテナ並行に近づけてたわ
ナツイわー
ベランダにタープとかシェード張って4隅にワイヤー這わせると目立たずいい感じに偽装できるかも
arduinoとどんどんかけ離れてくなw >>979
図表はそれ単独で用が足りる場合もあるが文字による説明を補う存在でもある
したがって図表はあった方がいいに決まっていて無い方がいいケースなど存在しない
人に質問を投げる立場ならなおさらのことだ
そういう意味でお前のは認識の甘さから生じた図表の完全否定 初心者が質問して初心者レベルの中級者が回答するスレw >>982
引用元のような実体図でいいわけよ
やらない理由探しばかりするのやめなよ
自分でみじめじゃないの? まあ、俺のスタンスとしては
図を出さないから解決策が得られなくて損してるのは質問者本人
だから基本どうでもいいんだけど
向学のためにとここをのぞいてる身としては実につまらん展開ですよ そうか、壁裏に配線されている電灯線や配水管が導体だから電磁場に影響を与えてしまうんですな・・・
ん? って事は逆に考え性能を活用する方向で見直すと・・・フィルタで周波数成分を取捨選択すれば、
屋内配線をコンセント経由でアンテナとして用いる術があり得るのかな!(^p^)ふひひ! 互いの利害が拮抗してるなら「張り合い」なわけだけど
回答しなくても回答者側には何のデメリットも無いので
情報出さなけりゃ回答しないだけのこと >>980,991
ダイソーの太さ3mmのアルミワイヤーと4個入りだったかな小さいパーツケースでダイポール作った
https://i.imgur.com/6rUoXz2.jpg
それで家中向きを変えながら歩き回って見たけど窓際より玄関(スチールのドアがあるのに)の近くのほうがよく受信できたのは意外だった
屋根の上に出せれば一番いいんだろうけど家の中はやってみないとどこが一番いいかはわからないってことかな 自宅にFMアンテナ建てましたよ
マイコン式ラジオで聞いています >>994
ほえー・・・ Arduinoでフォックスハンティング的な
電波強度の数値化or視覚化ツールを組めれば
最適位置探しも楽しそうですな(^p^)
>玄関
八木アンテナは後ろから二番目が本体で、前方に並んでいる骨は
電気的にはつながってなくて 導体が存在する事で何故か感度が強くなる実験的事実を応用した導波器 らしいですから
もしかすると、ドアが導波器的にふるまっていてくれていたのかもしれませぬですな・・・
>>995 おお! また車輪の再発明をしてしまっていたんですな・・・(^p^;)ご教示ありがとうございまする! アンテナ端子をアースし、電源トランスの浮遊容量を利用して配電線をアンテナ代わりに使うのが電灯線アンテナのオリジナルの姿なんだけどは。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 87日 6時間 30分 30秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。