つれづれなる備忘録

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

TinkercadによるArduinoシミュレーション38 ~ チルトセンサ

 今回はチルトセンサをスイッチとして利用して、Arduinoを用いて振動モーターの入り/切りを制御する例を紹介する。

1. チルトセンサ

 チルトセンサは一般的には傾き角度を検出するセンサだが、Tinkercadで利用できるチルトセンサは傾きがないときは不通、ある程度発生したら導通するタイプでセンサというよりはスイッチに近い。スマホなどで縦から横にした場合に画面を切り替えるなどの場合にチルトセンサが使われている場合がある。TinkercadではSW200Dという2端子のチルトセンサと4端子タイプのチルトセンサ(型式不明)がある。4端子タイプのチルトセンサは、端子1と端子2, 端子3と端子4が導通しており、さらに傾きがないときは端子1と端子3は導通、傾きを検出したら端子1と端子3が不通になる。(SW200Dと動作が逆)

2. チルトセンサを用いた振動モーター制御

 傾きを検出したらデバイスを振動させて知らせるという機能をイメージして、今回はチルトセンサで傾きを検出したら振動モーターを動作させることをArduinoを用いて実現させる。具体的にはチルトセンサの出力を割り込み信号として、割り込みが発生したらArduinoの出力ピンからリレー回路の出力を切り替えて振動モーターに電源を供給することで振動させる。また傾きが水平になったら振動モーターの動作を止める。

チルトセンサにはArdunoから5Vを供給し、チルトセンサの出力にLEDを接続しセンサの出力状態がわかるようにしている。チルトセンサの出力はArduinoの2ピンに入力して割り込み番号0が利用できるようにしている。Arduinoの4ピンとリレー回路の制御端子に接続して、4ピンのLOW/HIGHによって9V電源と接続側に切り替えられるようにしている。振動モーターとリレー回路の出力の間に40Ωの抵抗を入れて、過大な電流が流れないようにしている。以下にTinkercad上での接続図を示す。下図は傾きが発生していない状態だが、チルトセンサは導通しているためLEDが点灯している。

チルトセンサによる振動モーター制御
チルトセンサによる振動モーター制御

なおリレー回路を用いたモーター制御の詳細については下記を参照。

atatat.hatenablog.com

3. スケッチ

 今回はチルトセンサが傾きを検出した場合は、振動モーターをON, 水平の場合は振動モーターをOFFとするため割り込みが発生する条件をピンの電圧が変化するときに発生するCHANGEとした。出力をHIGHにするかLOWにするかはstateを定義しておき、割り込みが発生するごとに状態を反転させる。割り込み発生時に呼び出す関数はmotor()としてstateの反転処理とstateに応じて4ピンからLOW/HIGHを出力するdigitalWrite(4, state)を実行する。

外部割り込み処理については下記を参照。

atatat.hatenablog.com

volatile int state = LOW;

void setup()
{
  pinMode(4, OUTPUT);
  pinMode(2,INPUT_PULLUP); //割り込み番号0用の入力ピン
  attachInterrupt(0, motor, CHANGE); 

}

void loop()
{

}

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

以下がTinkercadでシミュレーションを実行した図になる。シミュレーション実行時にチルトセンサをクリックしたときに現れるインジケーターを操作することで、傾きある/なしを切り替えられる。チルトセンサで傾きありの状態になると点灯していたLEDが消灯し、下図のように振動モーターが動作する。チルトセンサの傾きを元に戻すとLEDが点灯し振動モーターの動作が止まる。

チルトセンサによる振動モーター制御実行
チルトセンサによる振動モーター制御実行

3. まとめ

 今回はチルトセンサをスイッチとして利用して、Arduinoを用いて振動モーターの入り/切りを制御する例を紹介した。チルトセンサ以外のリレー回路、外部割り込む処理に関しては過去に紹介しているが、組み合わせを変えることでArduinoでできることのバリエーションを増やすことができる。