LRA1のBASICで、ADCをやってみた!

夏服のろらたんがLRA1基板を手に持って微笑んでいる。しゃちらぼブログ「LRA1のBASICで、ADCをやってみた!」のタイトル入りアイキャッチ画像。 LRA1実践

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番号名前入力ソースポート番号
6AN6PA066
7AN7PA077
10AN10PB0234
11AN11PB0335
16AN16PA088
17AN17PA099
24AN24CPU内部の温度センサの計測値
25AN25内部リファレンス電圧(1.00V)
26AN26CPUコア電圧(Typ:0.9~1.2V)
27AN27VDD電圧変換値(mV換算)
28AN28CPU内部の温度センサの変換値(0.1℃単位)

⚠️GPIO番号 ≠ ADC番号

この表のように、GPIO番号とADC番号はまったく一致していません
たとえば、GPIOの 34(PB02)ADC(10) に対応している、というようになっています。
また、外部のポートだけでなく、MCU内部の電圧を計測するための番号もあります。

🎀 “ポート番号=ADC番号”って思ってると、たぶん動かないよ〜!

📟 ADCの基本仕様

ポートからのアナログ入力では、
基本仕様は次のようになっています。

  • 分解能:12bit(0〜4095)
  • 0V → 0、VDD → 4095
  • 測定値はVDDに依存

🔍ポート電圧を読み取ってみた

まずは、ポートの電圧を計測してみましょう。
今回も、前回同様に、しゃちらぼ製の LRA1-ATOM を使って実験してみます。

LRA1-EBで電圧を計測している写真

この例では、電源電圧を半固定抵抗で分圧して、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の“これ分かんない!”とか、実験の失敗談も大歓迎だよ!📩お気軽にどうぞ〜」


🔗 関連リンク

しゃちらぼの最新情報や開発の様子は、こちらでも発信しています:

💬「シャチラボ」で検索してきた方も大歓迎!
ほんとは「しゃちらぼ(Shachi-lab)」なんだけど、見つけてくれてありがとう🐬

コメント

タイトルとURLをコピーしました