つれづれなる備忘録

日々の発見をあるがままに綴る

TinkercadによるArduinoシミュレーション20 ~ 人感センサによる割込み処理

1. 人感センサ

 人感センサ(人が近づくと検出する)として利用されているPIRセンサ(Passive IR)を用いて、モーターの動作を制御する方法を紹介したい。PIRセンサは赤外線を感知するセンサで、赤外線放射の変化によって動きを検知する。 (例えばhttp://www.microbot-ed.com/j_motion_sensor.html参照)PIRセンサの出力で外部割り込み処理を行いモータを停止させることを考える。割り込み処理については、以前取り上げた記事も参照。 atatat.hatenablog.com

2. PIRセンサ・モーターとArduinoの接続

 TinkercadコンポーネントからPIRセンサを選択する。仕様については次を参照。

Parallax PIRセンサー RevB: センサ一般 秋月電子通商-電子部品・ネット通販

またホビー用ギアモーター、リレー回路(リレーSPDT)、モーター用に電源を選択する。PIRセンサーの電力端子とArduinoの5V端子、信号端子は割り込み処理に使用するため2ピン(割り込み番号0)に接続する。またリレー回路の制御用の端子8とピン4を接続する。電源の正極とリレー回路の端子7,端子6はなにも接続せず、端子5とGND、出力である端子12とモーターの正極をそれぞれ接続する。(DCモーター制御の記事参照) atatat.hatenablog.com

PIRセンサ、モーター、リレー回路、電源、Arduinoすべて接続した図を下に示す。

PIRセンサ、リレー回路、モータの接続
PIRセンサ、リレー回路、モータの接続

スケッチは以下のようにした。リレー回路を制御するピン4のstateによってモーターの電源を入切するようにしている。割り込みのタイミングをCHANGEとすることで、最初に動きを検出した際に信号が変化するタイミングで電源を切り、しばらくして信号が元に戻るタイミングを検出して電源を入れることで、モーターを停止・再開するようにしている。

volatile int state = LOW;

void setup()
{
  attachInterrupt(0, detect, CHANGE);
  pinMode(4,OUTPUT);
}

void loop()
{
 digitalWrite(4,state);
}
void detect(){
  state=!state;
}

シミュレーションを実行して、PIRセンサをクリックしてセンサ前方を円を適当にドラッグすると、下のようにセンサ面が薄赤くなり動作を検出している状態になる。この間モーターは停止して、しばらくするとセンサ面が元に戻ると再びモーターが回転する。

PIRセンサ割り込み停止
PIRセンサ割り込み停止

3. まとめ

 今回は以前紹介した外部割り込み処理とDCモーターの制御の2つの記事の内容を応用して、PIRセンサ(人感センサ)を用いてモーターを停止・再開させる方法を紹介した。