ESP-WROOM-02で3軸加速度センサーから値を取得
事の発端。
先日、日本IBMさんで行われたIoT LTに参加してきました。
登壇者たちの発表を聞いて、私は思いました。
役に立たないものでもいいから何かを作ってみよう
そうだ。学生時代にずっとやっていたやり投げをIoT化してしまおう。
やりにセンサーつけて、速度とか角度が取れれば、質の高いトレーニングできるんじゃないか。
早速アキバへ。
何やら3軸加速度というのがあるらしいというのは聞いていたので、
加速度っていうんだから速度計測できるでしょ!という勢いだけです。
小さい!想像よりだいぶ小さい!
購入したのは「KXR94-2050モジュール」というもので
私のようなハンダ付けを敬遠している人でも使えるように
基盤にピンを付けてくれているものでした。
価格は850円ですが、ハンダ付けができる人は基盤だけを500円くらいで買えば良いので割安です。
電子工作開始
やりにつけるという想定なので、使用する部品は極力小さいものを選ぼうと思い、
マイコンはラズパイではなくESP-WROOM-02を使用することにしました。
まずはセンサーから値を取ってみます。
参考にしたスケッチは、先日購入したこちらの書籍に付属しているものを使わせていただきました。
ひとまずx軸だけを出力するようにして
グラフ表示させたかったのでシリアルプロッタを開き、実行してみました。
とれた!
と思ったのもつかの間。なにかおかしいことに気づきました。
デジタル入力になっとる!
そうです。それくらい私にもわかります。0 or 1になってますよね。
それをデジタルというみたいですよ。
私が想像していたのはもっとなめらかな波線でありました。
googleで調べてみました。
ESP-WROOM-02はアナログ入出力がない。
え?嘘でしょ?
このチャレンジ終わったの?
と思って何か方法はないかと調べていると、裏技的なのがありました。
ESP-WROOM-02のTOUT PINをアナログ入力として使うことができるということでした。
ESP-WROOM-02のTOUTを使用する時の注意点
ここでひとつ注意点があります。 TOUTは1V入力です。
ESP-WROOM-02は3.3V入出力ですから、抵抗を入れてやる必要があります。 入力が大きすぎると壊れちゃうみたいですよ。
詳しくは「分圧抵抗」でぐぐってみてください。
配線です。(ちょっとよくわからないw)
ではまず最初におまじないを書いてやります。
extern "C" { #include "user_interface.h" }
出力設定を書いてやります。
void setup() { Serial.begin(115200); }
ここからなんですが、TOUTから値を取得するためにsystem_adc_read()という関数を使用するそうです。
int getToutValue(){ int res = system_adc_read(); return res; }
あとは出力するだけ。
int count = 0; void loop() { int val= getToutValue(); if (count > 15 ){ Serial.println(val); } count = count + 1; delay(100); }
countしているのは、最初の10個目くらいの値までは、取得する値が不安定だったので 15回目から値を表示しています。
これで実行してみます。
アナログ出力されました!
よかったよかった。
次回は小型化してみたい。