LRA1のBASICで、ADCをやってみた!
この記事について
LRA1のBASICが便利すぎる…という話の続々編です。
前回は、I2CとPWMについての記事でしたが、今回は ADC についてになります。
一般的なLoRaモジュールって、ADCも外部に マイコン(MPU)を別で用意する必要 があるんですよね。
でも、LRA1はADCも自前でやれるんです。
これ1つで、ADCで計測した値をLoRaで送信できちゃう。
しかもBASICで!
🎀 あ、今日から夏服バージョンに衣替えしちゃった!ちょっと涼しげになってる…かも?
ADCの読み取り
ADC(アナログ・デジタル変換)を使うと、電圧の“強さ”を数値に変換して読むことができます。
スイッチみたいなON/OFFだけじゃなくて、「どのくらいの電圧か」を調べたいときに便利な機能です。
🎀 アナログ信号を“数字で見える化”してくれるのが、ADCなんだよ〜!
ポートからアナログ値を読み取るためには、ADC関数
を使用します。
この関数の引数には、ADC番号を指定します。
ADC番号とポート番号
LRA1は一部のポートで アナログ入力(ADC) が可能です。
すべてのポートではないので注意してください。
ADC番号 | 名前 | 入力ソース | ポート番号 |
---|---|---|---|
6 | AN6 | PA06 | 6 |
7 | AN7 | PA07 | 7 |
10 | AN10 | PB02 | 34 |
11 | AN11 | PB03 | 35 |
16 | AN16 | PA08 | 8 |
17 | AN17 | PA09 | 9 |
24 | AN24 | CPU内部の温度センサの計測値 | – |
25 | AN25 | 内部リファレンス電圧(1.00V) | – |
26 | AN26 | CPUコア電圧(Typ:0.9~1.2V) | – |
27 | AN27 | VDD電圧変換値(mV換算) | – |
28 | AN28 | CPU内部の温度センサの変換値(0.1℃単位) | – |
⚠️GPIO番号 ≠ ADC番号
この表のように、GPIO番号とADC番号はまったく一致していません。
たとえば、GPIOの 34(PB02)
が ADC(10)
に対応している、というようになっています。
また、外部のポートだけでなく、MCU内部の電圧を計測するための番号もあります。
🎀 “ポート番号=ADC番号”って思ってると、たぶん動かないよ〜!
📟 ADCの基本仕様
ポートからのアナログ入力では、
基本仕様は次のようになっています。
- 分解能:12bit(0〜4095)
- 0V → 0、VDD → 4095
- 測定値はVDDに依存
🔍ポート電圧を読み取ってみた
まずは、ポートの電圧を計測してみましょう。
今回も、前回同様に、しゃちらぼ製の LRA1-ATOM を使って実験してみます。
この例では、電源電圧を半固定抵抗で分圧して、ADC10(PB02) に接続しています。
ここで、以下のようにBASCIコマンドを入力してみましょう。
>? ADC(10) 1234 Ok
半固定抵抗の位置によって、0~4095 に変化するのが分かると思います。
この実行例では ADCの値が 1234 だったので、電源電圧が3.3Vの場合は
3.3[V] x 1234 / 4095 = 0.9944[V]
ということになります。
🎀 この1行で、アナログ電圧が読み取れちゃうなんて便利すぎ〜!
🧪 電源電圧も測れる!
>? ADC(27) ' VDD電源電圧 3305 Ok
これだけで、電源電圧がmV単位で読めちゃうんです。
3305 だったら 3.305[V] です。
LRA1を電池で運用しているときなどに便利です。
🎀 「電源電圧も読めちゃうなんて、超便利〜!
これを使えば、VDDの変化に合わせてADC結果をmV単位に換算 することもできます。
>? ADC(10)*ADC(27)/4095 2034 Ok
この例では、ポートAN10(PB02)の電圧が 2.034[V] となります。
🎀 つまり、“電源電圧がズレても合わせられる”ってことなんだね!
🧪 内部の電圧や基準電圧も測れる!
>? ADC(26) ' 内部コア電圧 914 Ok
MCU内部のコア電圧です。
電源電圧と同じように mV単位 です。
これは、あまり使うことはなさそうですよね。
🎀 マイコンがちゃんと動いてるか“健康チェック”するための数値なんだって!ふだんはあまり使わないけど、もしもの時の安心材料かな?
>? ADC(25) ' 内部リファレンス(バンドギャップ) 1244 Ok
MCU内部の基準電圧をADCの生データ(0~4095)で取得します。
この基準電圧の計測値を基にして、実際の電圧などに変換します。
🎀 測定の精度アップに役立つんだよ〜
📝補足:バンドギャップってなに?
バンドギャップリファレンス(Bandgap Reference) とは、温度や電源電圧の変化にほとんど影響されない「安定した基準電圧」のことです。
マイコンの中には、このバンドギャップを利用して
- 電源電圧(VDD)の変化を検出したり
- ADCの精度を保つための補正に使ったり
といった仕組みが組み込まれています。
🎀 かんたんに言うと、“すごく安定した1.0Vみたいなもの”を内蔵してるってことだね!
🧪CPU内部の温度も測れる!
実は、LRA1に搭載されているMCU(マイコン)には、CPU内部に温度センサーがあって、
その温度も ADC 関数で読み取ることができます。
>? ADC(24) ' CPU内部の温度センサ生データ 824 Ok >? ADC(28) ' センサ値を0.1℃単位に補正した値(=温度換算済み) 362 Ok
- ADC(24) は、チップ内蔵の温度センサからの生の測定値です。
- ADC(28) は、MCUにあらかじめ書き込まれている 補正値(キャリブレーション) を使って、摂氏0.1℃単位で変換された値です。
🎀 えっ!温度まで測れちゃうの?目安でよければ外部のセンサーいらないよ〜!
ただし、これはチップ内部の温度を測っているので、実際の外気温や周囲の温度とはズレることがあります。
あくまで参考値(目安)として使うのが前提です。
🎀 正確な温度が必要なら、前回のI2Cセンサ(DHT20)とかを使ってね〜!
✅まとめ
今回はちょっとコンパクトめな内容だったけど、その分サクッと読めた…はず。
LRA1のBASICだけで、外付けマイコンや難しい配線も不要、1行コマンドで電圧や温度まで読めてしまうのは超便利!
LRA1の「オールインワン感」がますます実感できましたか?
これからも、ちょっとした実験やDIYにもどんどん使っていきたいところです。
🎀 アナログ計測がこんなに身近になるなんて、わくわくするね!他にも“こんな使い方あるよ”ってアイデアがあれば、ぜひ教えてほしいなっ!
…ちなみに、ろらたんの服装も夏仕様にチェンジしてみました(笑)
🎀 季節ごとに衣替えするの、ちょっと憧れだったんだ〜
🌱あとがき
…本当はプランターの水分量をADCで測って、「IoT水やりシステム」みたいなのも作ろうと思ったんだけど、途中でバテて今回はここまで!
とりあえず、土壌センサー(M5Stack用のEARTH UNITっていうやつ)は買ってきて用意したんだけど…
まあ、これが使えるかどうかも含めて実験する感じです。
次回、気が向いたら続編やるかも。
🎀 無理せずのんびりがいちばん!ゆるく実験続けてこ〜
📪 お問い合わせなど
技術的なご相談やご質問などありましたら、
📩お問い合わせフォーム
または、
📮info@shachi-lab.com までお気軽にどうぞ。
🎀 ADCの“これ分かんない!”とか、実験の失敗談も大歓迎だよ!📩お気軽にどうぞ〜」
🔗 関連リンク
しゃちらぼの最新情報や開発の様子は、こちらでも発信しています:
- 🌐しゃちらぼ公式サイト
- 🐦 X(旧Twitter):@shachi_lab
- 📗 Qiita:@shachi-lab
- 🐙 GitHub:@shachi-lab
- 📸 Instagram:@shachi_lab
ほんとは「しゃちらぼ(Shachi-lab)」なんだけど、見つけてくれてありがとう🐬
コメント