06_PhotoInterrupter-Vibration

5回通過したら振動で知らせる

フォトインタラプターが物体を5回検出すると、振動モーターを動かします。

フォトインタラプターモジュール振動モーターモジュール
1

準備する

CherryIoTとモジュールを接続する

CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。

フォトインタラプターモジュール

フォトインタラプターモジュール

接続先:A

振動モーターモジュール

振動モーターモジュール

接続先:B

2

サンプルコード

GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。

06_PhotoInterrupter-Vibration.ino
GitHubで開く
GitHubからコードを読み込んでいます...
3

プログラムを書き込む

上のサンプルコードをコピーし、Arduino IDEに貼りつけます。

ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。

初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。

4

動作確認

Arduino IDEの画面右上にあるアイコンをクリックすると、 画面下にシリアルモニターが表示されます。

Arduino IDEでシリアルモニターを表示する場所

物体を5回通過させると、振動モーターが1秒間動くなら成功です。

動作中、シリアルモニターには物体を検出するたびに「Interrupt!」、5回目には「5 items comming!」と表示されます。

5

コードの解説

検出回数を変数へ加算し、5回以上になったら振動させてカウントを0へ戻します。

06_PhotoInterrupter-Vibration.ino
GitHubで開く
GitHubからコードを読み込んでいます...

const int ruptPin = 3;コネクタAのフォトインタラプターに対応するGPIO3を、定数ruptPinへ保存します。

const int vibPin = 4;コネクタBの振動モーターに対応するGPIO4を、定数vibPinへ保存します。

int interruptCount = 0;物体を検出した回数を保存する整数型の変数interruptCountを用意し、0から始めます。

void setup() {setup関数は最初に1回だけ実行されます。ここでフォトインタラプター、振動モーター、シリアル通信を使う準備をします。

pinMode(ruptPin, INPUT);フォトインタラプターから届く信号を読み取れるように、ruptPinをINPUT(入力)に設定します。

pinMode(vibPin, OUTPUT);振動モーターへ信号を送れるように、vibPinをOUTPUT(出力)に設定します。

Serial.begin(115200);物体の検出結果と回数到達をPCへ表示するため、115200bpsでシリアル通信を開始します。

void loop() {loop関数は繰り返し実行されます。物体の通過回数を数え、5回に達したら振動モーターで知らせます。

if (digitalRead(ruptPin) == LOW) {フォトインタラプターの信号を読み取り、LOW、つまり溝が物体で遮られた状態かを確認します。

interruptCount++;物体を検出するたびに、interruptCountを1増加させます。++は変数の値を1増やす記号です。

Serial.println("Interrupt!");物体を検出したことを示す「Interrupt!」を表示します。

delay(300);0.3秒待ちます。

if (interruptCount >= 5) {interruptCountが5以上になったかを確認します。>=は左側の値が右側以上かを調べる比較記号です。

digitalWrite(vibPin, HIGH);検出回数が5回に達したらvibPinへHIGHを出力し、振動モーターを動かします。

delay(1000);1秒待ちます。

digitalWrite(vibPin, LOW);vibPinへLOWを出力し、振動モーターを停止します。

interruptCount = 0;次の5回を数えられるように、interruptCountを0へ戻します。

Serial.println("5 items comming!");5回の検出が完了したことを示す「5 items comming!」を表示します。

delay(100);0.1秒待ちます。