03_Touch-Speaker

タッチすると音を鳴らす

タッチセンサーに触れるとスピーカーから音を鳴らします。

タッチセンサーモジュールスピーカーモジュール
1

準備する

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

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

タッチセンサーモジュール

タッチセンサーモジュール

接続先:A

スピーカーモジュール

スピーカーモジュール

接続先:B

2

サンプルコード

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

03_Touch-Speaker.ino
GitHubで開く
GitHubからコードを読み込んでいます...
3

プログラムを書き込む

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

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

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

4

動作確認

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

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

タッチセンサーに触れると、スピーカーから音が鳴るなら成功です。

動作中、シリアルモニターにはタッチセンサーに触れている間は「Touch!」、離している間は「...」と表示されます。

5

コードの解説

タッチを検出したときだけ、音を鳴らす関数を呼び出します。

03_Touch-Speaker.ino
GitHubで開く
GitHubからコードを読み込んでいます...

const int touchPin = 3;コネクタAのタッチセンサーに対応するGPIO3を、定数touchPinへ保存します。

const int spkrPin = 4;コネクタBのスピーカーに対応するGPIO4を、定数spkrPinへ保存します。

#define C4 806.964音に使用する周波数806.964を、C4という名前で定義します。周波数は1秒間の振動回数を表し、値によって音の高さが変わります。

#define D4 718.923別の音に使用する周波数718.923を、D4という名前で定義します。

void playmusic(){スピーカーからメロディーを鳴らす一連の処理を、playmusic関数にまとめます。関数にまとめることで、必要な場所から名前を指定して実行できます。

ledcWriteTone(spkrPin,C4);spkrPinからC4の周波数を出力して音を鳴らします。ledcWriteToneは、指定した端子から指定した周波数の音を出す命令です。以降も同じ方法でC4とD4を切り替え、メロディーを作ります。

delay(230);0.23秒待ちます。

ledcWriteTone(spkrPin,0);出力する周波数を0にして、音を止めます。音を鳴らす処理と止める処理を交互に並べることで、音の区切りを作ります。

void setup() {setup関数は最初に1回だけ実行されます。ここでシリアル通信、タッチセンサー、スピーカーを使う準備をします。

Serial.begin(115200);タッチの判定結果をPCへ表示するため、115200bpsでシリアル通信を開始します。

pinMode(touchPin, INPUT);タッチセンサーから届く信号を読み取れるように、touchPinをINPUT(入力)に設定します。

pinMode(spkrPin, OUTPUT);スピーカーへ信号を送れるように、spkrPinをOUTPUT(出力)に設定します。

ledcAttach(spkrPin, 12000, 8);spkrPinへ音を出すためのPWM機能を割り当てます。12000は使用できる最大周波数、8は出力を調整する細かさを表します。

void loop() {loop関数は繰り返し実行されます。タッチセンサーの状態を確認し、触れているときだけメロディーを再生します。

if (digitalRead(touchPin)==HIGH) {タッチセンサーの信号を読み取り、HIGH、つまり触れている状態かを確認します。

Serial.println("Touch!");触れていることを示す「Touch!」を表示します。

playmusic();playmusic関数を呼び出し、再生します。

} else {タッチセンサーに触れていない場合は、else以降の処理を実行します。

Serial.println("...");触れていない状態を示す「...」を表示します。

delay(500);0.5秒待ちます。