できること

第44回 Arduinoでホールセンサ! 〜Arduino+センサの開発が劇的に楽になる!ローム・センサ評価キットを試してみた

1-DSC_0562

これまでの連載を通してロームセンサ評価キットの各種センサの使い方がわかってきましたね!センサの組み合わせとアイデア次第でどんなデバイスも作れそうです。今回は、電子工作をはじめたばかりだとあまり聞きなれない「ホールセンサ」の使い方や仕組みを学んでみたいと思います!

今回の電子工作レシピ

完成までの時間目安:60分
必要なパーツ

※ロームセンサ評価キットは下記サイトから購入できます!
チップワンストップ
ザイコストア

目次

  1. ホールセンサってなんだろう?
  2. ホールセンサの使い方
  3. ホールセンサのプログラム
  4. まとめ

1.ホールセンサってなんだろう?

今回利用するホールセンサってどんな働きをするセンサでしょうか?いろいろ調べてみるとどうやらホール効果という性質を利用して、磁気を検出できるセンサのことをホールセンサと呼ぶらしいです。

ホール効果 – wikipedia
ホール効果(ホールこうか、英: Hall effect)とは、電流の流れているものに対し、電流に垂直に磁場をかけると、電流と磁場の両方に直交する方向に起電力が現れる現象。主に半導体素子で応用される。1879年、米国の物理学者エドウィン・ホール(英: Edwin Herbert Hall, 1855-1938)によって発見されたことから、このように呼ばれる。

 

ホールセンサの利用シーン

ホールセンサは、センサに触らずにセンサのオンオフを可能にする非接触型のセンサです。

  • PCやスマートフォンの開閉を認識する
  • モーターなどの回転数を測る

……などなど。電子工作で扱う場合、他のセンサと比べると少し地味な印象がありますが、上記の例以外でもホールセンサは日常のいろいろな機械の中で利用されています。

ということで、センサ評価キットに付属されているホールセンサの型番は「BD7411G」、このセンサを実際に使ってみましょう。

写真1 ホールセンサBD7411G

写真1 ホールセンサBD7411G

 

2.ホールセンサの使い方

過去の連載をご覧の方は、センサ評価キットの使い方はだいぶ慣れてきましたよね?今回も同様に、まずセンサを接続する箇所を確認します。

 

図1 センサシールドの接続方法解説

図1 センサシールドの接続方法解説

 

ホールセンサは図1のGPIO I/Fエリアなので写真2のように取り付けます。電源電圧は5Vにセットします。センサ評価キット側のピン穴は4本ありますが、ホールセンサは3本しかなく間違う場合もあるので、キット側の点線にそって配置されるようにセンサを設置してください。

 

写真2 ホールセンサの取り付け

写真2 ホールセンサの取り付け

 

取り付けが完了したら、これまたいつもと同様にArduinoでホールセンサからデータの取得ができるようにプログラム側を設定していきます。

 

3.ホールセンサのプログラム

ホールセンサのライブラリは下記の公式サイトからダウンロードしてください。ダウンロードからインストールまでの一連の流れは第42回第41回第40回の記事で詳しく紹介していますので、今回初めてセンサキットを試してみる方はそちらも参考にしてみてください。

上記サイトのページ下部から、センサ用ソフトウェアをダウンロードしたのち、Arduino IDEを開いてライブラリの追加から、ダウンロードしたファイルをそれぞれ選択してライブラリのインストールを完了してください。

写真9 ライブラリの追加

図2 ライブラリの追加

 

ライブラリのインストールが完了したら、スケッチの例から、気圧センサおよび温度センサのサンプルを開いて、Arduinoに書き込んで正常に動作するかチェックしてください。

  • ホールセンサのサンプル:「ファイル」-「スケッチの例」-「BD7411G」-「example」-「BD7411」

このサンプルプログラムは、センサが反応した場合、「BD7411G Magnet field Detect!」という表示をシリアルモニタに出力するプログラムです。Arduinoに書き込んで磁石をセンサに近づけると表示される様子を確認することができます。
※BD7411Gを利用したプログラムをArduinoに書き込む際、筆者の環境だとセンサをつけたままだとアップロードが失敗する場合がありましたので、同じような状況になる場合は、一度BD7411Gセンサをはずしてアップロードした後、アップロードが正常に完了したらセンサを取り付ける手順をお試しください。

 

ホールセンサのサンプルプログラム

/*****************************************************************************
  BD7411.ino

 Copyright (c) 2016 ROHM Co.,Ltd.

 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:

 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.

 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
******************************************************************************/
#include <BD7411.h>

int hallout_pin = 0; // use D0 pin

BD7411 bd7411;

void setup() {

  Serial.begin(9600);
  while (!Serial);

  bd7411.init(hallout_pin);

  Serial.println("BD7411G Sample");
}

void loop() {

  int hallout;

  hallout = bd7411.readoutpin();
  if (hallout == 0) {
    Serial.println("BD7411G Magnet field Detect!");
  } else {
    Serial.println();
  }

  delay(500);
}

図3 ホールセンサの出力結果

図3 ホールセンサの出力結果

回転数を計測するプログラムを作成

せっかくなので、モーターに磁石をつけて回転数を計測してみましょう。単三電池が2本直列のときで回転数をカウントアップするプログラムになります。モーターに歯車をつけて、その歯車の一部に四角形のマグネットを貼り付けました。マグネットとホールセンサは2~3mmの距離になるように土台を作成しています。
また、今回はdelay(30)としていますが、モーターの回転数が早い場合、30だと1回転に追いつかない場合がありますので、うまく数値が取れない場合は、delayの値を短く5や10などにして試してみてください。

#include <BD7411.h>


int hallout_pin = 0; // use D0 pin
int _cnt = 0;
bool _flg = false;
BD7411 bd7411;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  bd7411.init(hallout_pin);
  Serial.println("BD7411G Sample");
}

void loop() {
  int hallout;
  hallout = bd7411.readoutpin();
  if (hallout == 0 && _flg == false) {
    Serial.print("BD7411G Magnet field Detect! - ");
    _flg  = true;
    _cnt++;
    Serial.println(_cnt);
  } else {
    _flg  = false;
  }

  delay(30);
}



 

写真3 回転数計測テスト機

写真3 回転数計測テスト機

図4 回転数を表示した結果

図4 回転数を表示した結果

サンプルプログラムで表示されたメッセージのあとに現在の回転カウント数が表示されるようになりましたね!

 

まとめ

ホールセンサの簡単な使い方がわかったところで、次回は実際にこのセンサ評価キットのホールセンサを使った自転車用速度計の制作にチャレンジしたいと思います!

アバター画像

電子工作や新しいデバイスをこよなく愛するエンジニア。日常生活のちょっとしたことを電子工作で作って試して、おもしろく過ごしたいと日々考えています。

高専ロボコン2019出場ロボット解剖計画