Plus電子デバイス・電子工作用語集モータドライバ博士のQ&A読者よりいただいたお問い合わせを元に、ロボット製作者、エンジニアのみなさんに役に立つ技術解説を発信していきます。Plus電子デバイス・電子工作用語集モータドライバ博士のQ&A読者よりいただいたお問い合わせを元に、ロボット製作者、エンジニアのみなさんに役に立つ技術解説を発信していきます。〜Arduino+センサの開発が劇的に楽になる!ローム・センサ評価キットを試してみた前回、ホールセンサの仕組みや簡単な使い方について学びました。今回はそのホールセンサを使って、自転車などで使える簡易速度計を作ってみたいと思います。簡易速度計のプログラムまとめ1.簡易速度計の仕様を考えるまずはじめに速度計の仕様を考えてみます。自転車に設置することを例として考えてみると、前輪もしくは後輪どちらかのタイヤのフレームにホールセンサを取り付け、タイヤ側には磁石を取り付けます。することで、タイヤが回った際に磁石がホールセンサと近づいて1回転が計測される、という仕組みにします。このとき、磁石とホールセンサの距離は実際にArduinoのシリアルモニタなどの表示結果を見ながら調整するようにしてください。続いて、Arduinoとセンサ評価キット本体は7セグLEDに表記される速度を確認しながら走行できるようにするため、自転車のハンドル付近に設置できるようにします。やりたいことの想定としてはこのようなところでしょうか。今回速度表示をするために、7セグLEDを利用します。「Arduinoで作る簡易百葉箱(その2)。電光掲示板(7セグメントLED)を使って数値を表示」で取り扱っていますが、今回もっと手軽に利用できる方法として、シフトレジスタを使って7セグLEDの表示をします。シフトレジスタってなに?シフトレジスタを簡単に説明すると、Arduinoのピン数を増やすことができるICチップです。第8回の7セグLEDを表示する回路では7セグLEDのそれぞれのLEDを光らせるためにArduino側も1本ずつピンを利用していることがわかりますね。この場合だと、残りのデジタルピンは0,1,9,10,12と少なくなってしまい他に拡張したい場合はかなり窮屈な思いをしながら開発をしなければいけません。そのようなケースでシフトレジスタの出番となります。今回利用するシフトレジスタはSN74HC595Nという8ビットシフトレジスタです。8ビットというのは単純に8本出力が可能になると考えてください。8ビットシフトレジスタ(SN74HC595N)シフトレジスタの仕組みデータシートを見ながら使い方を確認します。SN74HC595Nの端子説明Arduinoで利用する場合、赤色がついたSER、RCLK、SRCLKの端子に対してArduinoから特定の信号を送ると、QA~QHから信号に応じた出力が発信される、という仕組みになっています。LOW)、SRCLK端子にHIGH信号を送って8ビット中2ビット目に移動~これを8ビット全てに繰り返しデータの入力が完了した段階で、RCLKをHIGHにするとQA~QHからデータが出力される、という仕組みになっています。この流れを全てArduinoのプログラムで実装して制御するにはかなり面倒な話なので、ArduinoにはshiftOut()という関数が用意されています。この関数を利用することで手軽にシフトレジスタを使うことができるようになっています。送信したいデータシフトレジスタを利用して、Arduinoから7セグLEDのそれぞれのLEDを表示させる「01000111」などデータを送り任意の数字を7セグLEDに表示させましょう。具体的には図4のように、シフトレジスタのQA~QHの出力端子が、7セグLEDのa~g,D.Pに対応するように接続すると、とてもわかりやすいです。/0-QE,0-QD,1-QC,1-QB,1-QA」というデータが実際に送られ、7セグLEDがそれに基づいて表示される、となります。実際の回路は下記となります。7セグLEDの配線はいつも多くなって少しわかりにくいのですが、Arduinoで利用しているピン数が少なくなっているのがわかると思います。7セグLEDとシフトレジスタ(写真では少し配線を変えています)下記のプログラムでは、シフトレジスタの8ビットのデータを1から128まで全て送信してみるテストプログラムです。実際に動かすと、順番に7セグLEDの対応する部分が光るのが確認できます。delay(20);}3.ホールセンサによる簡易速度計のプログラムシフトレジスタの使い方および7セグLEDのおさらいが完了したところで、実際に速度計のプログラムを設計していきます。具体的なプログラムの流れとしては、一定間隔(今回は1秒間)で取得した回転数をもとに、時速を算出するようなプログラムとなります。1m進んだことになりますね。それを1時間あたりで計算したときの時速を算出します。プログラムのポイントとしては、7セグLEDに関してはこれまでも扱ったように、短い時間で1~3桁目を切り替えて表示することで、3桁表示を実現していることと、millis()関数が処理されたタイミングの時間を取得して、一定時間毎に速度を計算して7セグLEDに表示するような仕組みになっています。val[s-1];}マグネットを近づけたり離したりすると、それに応じて速度が更新されているのがわかりますね。自転車につけてみる準備ができたので、実際に自転車につけてみます。今回、100円均一で購入してきた強力マグネットを自転車の後輪に取り付け(タイヤのフレームが金属なのでそのままくっつきました)、マグネットとセンサが近接するように、固定します。マグネットとセンサの距離の調整が少し必要なので養生テープでセンサを固定しています。センサの固定が完了したら実際にタイヤを回してセンサが反応するか試します。回転を早めれば表示される数値が変わるのが確認できました!ホールセンサによる簡易速度計まとめ今回、ホールセンサを使って簡易速度計を作成しました。センサ評価キットのセンサを使う場合でも、そうでない場合でも、デバイスを作りこんでいくとArduinoのピン数が少ないと思うケースが多々出てきます。そのようなときは、シフトレジスタを使うなど工夫をすることで、より拡張性の高いデバイスを作成することができます。次回はセンサ評価キットの残りのセンサについて引き続き取り上げてみたいと思います!赤川シホロ電子工作や新しいデバイスをこよなく愛するエンジニア。日常生活のちょっとしたことを電子工作で作って試して、おもしろく過ごしたいと日々考えています。