初めてのArduino〜トレーニングマシンを作る編〜
初めまして、今月からdotstudioでお世話になる自給力です。
プログラミングスクール卒業後でフラフラしてたところを、のびすけしゃちょーから「記事を書いてみない?」と誘っていただきました。これから、バシバシ記事を書いていきますのでよろしくお願いします。
コードの書き方や手順で変なところあるかもしれませんが、許してください……!
僕はフィットネス業界での事業を考えています!せっかくなので、フィットネスに絡めて何か作って、記事にしていきたいと思います。プログラミングはかじってはいるのですが、IoTのコーディングや電子工作は初めてなので、初心者さん向けに自分の失敗の工程も含めてお伝えできればと思ってます。
そして、まず作ろうと決意したモノは……
意外とスクワットとかダンベルのトレーニングしている時って回数数えるの面倒なんですよね。
そこで、勝手に回数数えてくれるサービスがあればテレビ見ながらでも回数に気を取られずにトレーニングができる!そんな思いから、サービス作ってみようと思ったわけです。
のびすけしゃちょーに相談してみる
なるほど!!面白そうですね!!!!じゃあ加速度センサ使ってみたいです!!!
(理由:かっこいいから)
そんなこんなで、iot初心者の僕は「磁気スイッチ」を使ったカウントマシンを作ることに決まりました!!
まずは準備
今回使うのはArduino(写真左)と磁気スイッチ(写真真ん中と右)
まず、Arduinoにコードを書き込むためにArduino IDEをインストールしましょう。
こちらのドキュメントの通りにやれば簡単にインストールできます。
そして、磁気スイッチの使い方はこちらを参考にしました!
サイト内は英語で書かれていますが、ここでやることしてはArduinoのD2のピンに刺し、写真のように組み立てるのだそうです。
さぁ、数を数えよう
「数なんてすぐに数えられるわい」っと思ったのも束の間……。
「あれ?何を数えるんだ???」と、なんとも初歩的な壁にぶつかりました。
ダンベルを動かした回数を頭の中で数えるのは簡単ですが、機械に数えさせるのは訳が違う。まずは何を数えるか考えなければならないのです。
フラグが立った状態からフラグが無くなったときにカウントできるようにしてみる方法があるよ。
「フラグ」が何を指しているのかが分からなかったので、「Arduino フラグ」でググってみました。どうやらセンサの状態を変数に入れて管理することだということが分かりました。
(参考1)アイデア・ハック!! Arduinoで遊ぼう(2)
次に、「Arduino 数える」でググり、「変数でどう数えるのか」について、以下の記事を参考にしました。
(参考2)変数で回数を数える
やることとしては、
- センサの状態をフラグ(変数)として認識させる
- フラグがついてる状態から、なくなった状態に「+1」していく
- 1と2を繰り返す
なるほどなるほど。だいたい道筋が見えてきたので、作っていきます!
よし、作ろう
(参考1)アイデア・ハック!! Arduinoで遊ぼう(2)からスイッチのon/offで数を数えるためコードがあり、アレンジをしてみました。
必要なのは「グローバル変数の定義」「フラグの定義」「フラグからカウントする際のコード」の3つ。
まずは「グローバル変数の定義」です。
int G_state = FLG_OFF;
簡単ですね。
次に「フラグの定義」
フラグ立っている時は「1」、立っていない時は「0」と教えてあげます。
const int FLG_ON = 1;
const int FLG_OFF = 0;
楽勝!
それでは、最後に「フラグからカウントする際のコード」を書いてみましょう。
Void setup()の中に、
Serial.begin(115200);
を書き、 void loop()の中に、
int val = digitalRead(MAGNECTIC_SWITCH);
を書きます。
これはつまり、センサで取得した値を変数valに入れているわけです。
そして
if(G_state == FLG_OFF){
count += 1;
}
Serial.println(count);
と書き、コンパイルして、書き込みをしていきます。
ちょっとここでケアレスミスがあり、書き込みの際にエラーが何回か出ましたが、難なく解消。
よし!これで動く!
ツールの中のシリアルモニタを見てみましょう。
な、なにーーー!!
なんか勝手に数が増えてる!!!!このままじゃ数字が止まらなくなる!!!(パニック状態)
つまり、コードを日本語訳にすると、「G_stateの中のフラグがないときは、足していく」という意味。フラグが無い状態では+1され続けてしまうんです。そりゃうまくイカンわ!!!
のびさんのご指摘の通り、elseの中にif文を書いてフラグがonだったら1カウントをするコードに書き換えました。
よし!これでどうだ!!!書き込み開始!!
ちゃんと数えてくれるか検証
磁石をセンサに近づけて、、
離すと、、
そしてシリアルモニタを見ると
見事成功です。
いやぁ、一口に数を数えるとは言っても奥が深いですね!今日のところはこの辺で終わりたいと思います。
続編をお楽しみに……!