Arduino(アルディーノ)

Arduino便利な内部でのプルアップ機能

更新日:

IMG_1687

ほとんどの製品にはスイッチがあります。
そのスイッチをポートに入力回路として構成する場合には、プルダウンとプルアップという方法があります。

スイッチの入力を感知する2つの方式

プルダウンとは、あらかじめグランド側と接続をしておいて、入力がない場合はLOWが、スイッチをおされて入力されると5Vが供給されHIGHとなります。
その逆、プルアップとは、あらかじめ5Vと接続しておきHIGHが供給されていて、スイッチの入力でグランド側と接続するためにLOWに変化します。
この変化をポート制御によってスイッチの入力を感知します。
そのためには、外付け部品を加えた回路を用意します。

プルアップの基本的な回路と動作

プルアップ(PULLUP)の基本的な接続方法は下記となります。
Arduino(マイコン)のポートにR(抵抗)で5Vを接続し、グランドとの間にスイッチを設けます。
こうすると、通常はスイッチがOFFの状態ですから電圧がポートにかかるためHIGH(5V)が供給されています。
スイッチが押されると、ポートはGNDと接続状態となるためLOW(0V)に変化をします。

PullUp回路
プログラムは下記のようになります。

//入力ピンを5にした例
//
void setup(){
  pinMode(5,INPUT) ;
}
void loop(){
  int val;
  while(1){
    val = digitaRead(5);
    if(val==LOW){
      //SWが押されたときの処理
    }
   }
}

マイコン内部にプルアップ機能をもつArduinoはプログラムでプルアップ

ところがArduinoは下記の図のようにマイコン内部にプルアップ機能を持っているため、ポートにはスイッチを接続するだけで簡単にスイッチ入力を行うことができます。

ArduinoPullUp内臓

この機能を使う場合、何も特別な命令が必要なわけではなく、単純に pinModeでピンを設定するときに INPUT から INPUT_PULLUPと書くだけで実現できます。
実際のプログラムは下記のようになります。

//入力ピンを5にした例
//
void setup(){
  pinMode(5,INPUT_PULLUP) ;
}
void loop(){
  int val;
  while(1){
    val = digitaRead(5);
    if(val==LOW){
      //SWが押されたときの処理
    }
   }
}

注意しなくてはいけない落とし穴

これはとても便利で素敵な機能ですが、ひとつ注意しておくポイントがあります。
それは、このモード(内部プルアップモード)に設定しておいたのを忘れ、万が一、そのピンをGNDに直接つないでしまったとき、ショート状態になってArduinoを壊してしまうことになります。
運がよければCPUはもつでしょうが、壊れてしまう可能性のほうがとても高い、危険な状態となります。

とくに、前ポートをPULL_UPに設定したら大変なことになります。

最後に

Arduinoのこの便利な機能は、回路を単純化するという意味では使える機能ですが、ボード上はなにも回路がないため、そのポートがいったいどんな状態なのか見た目で確認することができません。
従来どおりのプルアップ回路であれば、抵抗を通して5Vに接続されていることが確認できますから、うかつにマイコンを壊すことはあrませんが、この方法は、プログラムを見ない限り判断がつきません。
製品開発後数ヶ月たつと技術者は過去の物件の詳細を忘れてしまいがちです。
そんなとき、もし...

そう思うと、回路は従来どおりセオリーにのっとたものが良いのかもしれません。

2016.1.28 吉川

-Arduino(アルディーノ)

Copyright© プログラミングテクニック集キヤミー , 2019 All Rights Reserved.