デジペ制作 その2 デジペをリモコンから遠隔発話(タッチスイッチ+音声再生モジュール+赤外線受信モジュール+赤外線リモコン)
※デジペ制作の基礎中の基礎については、過去記事の「ワークショップ その1 デジペ工作基礎(Lチカ+タッチスイッチ+音声再生モジュール)」にまとめられていますので、それでもって「デジペ制作 その1」に代えたいと思います。詳細は下記記事をご覧ください。
こんにちは、Ideagearの鈴木陽介です。
2024年1月27日と28日の二日間、浜松城公園で開催された屋外イベントであるアート・カルチャー・フェア(芸術文化展)にideaZeroとして出店しました。
初日の筆者(左)と浜松発明研究会の平塚会長(右)
二日目の店舗全体の様子。二日目は浜松発明研究会の例会とかぶっていることで、私一人で運営しなければならなかったこともあり、初日の強風に対して役に立っていなかったテントは初日終了時点で先に撤去。
二日目のアート・カルチャー・フェア浜松城公園2024全体の様子。二日目は天気も陽気も良かったため、特に平塚さんのビー玉アートは大人気でした。
私の方はというと、ideaZeroのグッズに加え、Ideagearのデジペ(ドジパンダの新作デジペVer.2.0とカメのデジペ)も一緒に展示し、これらパンダとカメにも集客を手伝ってもらいましたw
フェア翌日(1/29)の浜松駅メイワンのカフェでのデジペ紹介時の様子。
はじめに
今回の新作は初めて赤外線リモコンを使用しました。
そのコンセプトは、お店の前を人が通るたびにリモコン操作でデジペにしゃべらせることで、少しでも足を留めていただける方を増やし、声掛け&集客につなげようというものです。
そして、通りすがりの方や来店していただいた方にそれなりに喜んでいただいたということに手ごたえを感じましたので、今回はその作り方を解説します。
とはいえ、実態としては、デジペの基本セット(Arduino+タッチスイッチ+音声再生モジュール+microSDカード+スピーカー+リチウムイオンバッテリー)に赤外線モジュールを追加しただけで、あとは既製品のリモコンを活用することで新作デジペとしてまとめ上げただけのシンプルなものです。
ただ、これを今後のデフォルトモデルの一つとする予定ですので、記録の意味も兼ね、今回記事に残しますことにしました。どうぞ最後までお付き合いください。
参考記事
各主要部品の扱い方に関しては、下記過去記事をご覧ください。
タッチスイッチ(TTP223)
音声再生モジュール(DFPlayer Mini)
赤外線受信モジュール(VS1838B)+赤外線リモコン
配線図
Arduino Nano | TTP223 | DFPlayer Mini | VS1838B | スピーカー | バッテリー |
---|---|---|---|---|---|
5V | VCC | VCC | VCC | / | + |
GND | GND | GND | GND | / | - |
デジタル4番ピン | / | / | OUT | / | / |
デジタル6番ピン | I/O | / | / | / | / |
デジタル10番ピン | / | TX※ | / | / | / |
デジタル11番ピン | / | RX※ | / | / | / |
/ | / | SPK_1 | / | + | / |
/ | / | SPK_2 | / | - | / |
※1kΩの抵抗を挟む
ブレッドボード図
※DFPlayer MiniにはmicroSDカードを挿し込んで使用します。
ソースコード
下記はあくまでも一例です。
今回はベースモデルとして、通常は複数個使用するタッチスイッチは1つだけにしました。また、音声はSDカードの容量が許す限りいくらでも増やせますが、ボタンはタッチスイッチ1つとリモコンのON/OFFボタンの3つだけですので、ランダム変数を使うことも考慮して、9つに絞りました。
/*
0001_いらっしゃいませ1.mp3
0002_いらっしゃいませ2.mp3
0003_いらっしゃいませ3.mp3
0004_いらっしゃいませ4.mp3
0005_いらっしゃいませ5.mp3
0006_いらっしゃいませ6.mp3
0007_你好.mp3
0008_あそぼ.mp3
0009_くすぐったい.mp3
*/
//DFPlayer Mini
#include "SoftwareSerial.h"
#include "DFPlayer_Mini_Mp3.h"
SoftwareSerial mySerial(10, 11); // RX, TX
//VS1838B(赤外線受信モジュール)
#include <IRremote.h>
int receiverPin = 4; //デジタルピン番号用の変数
IRrecv receiver(receiverPin); //操作用の変数
decode_results results; //受信した信号の格納用の変数
//TTP223(タッチスイッチ)
const int TOUCH = 6; //発話用の変数
//ランダム変数
int randNumber1 = 0; //ONボタン用のランダム変数
int randNumber2 = 0; //OFFボタン用のランダム変数
void setup() {
//DFPlayer Mini
delay(2000); //モジュール起動の待機時間
mySerial.begin (9600);
mp3_set_serial (mySerial); //set softwareSerial for DFPlayer-mini mp3 module
mp3_set_volume (60);
//TTP223
pinMode(TOUCH, INPUT); //発話用の入力
//VS1838B
receiver.enableIRIn(); //赤外線受信モジュールを初期化
}
void loop() {
//タッチで発話
if (digitalRead(TOUCH) == HIGH){
mp3_play (9); //くすぐったい.mp3
delay(1000);
}
delay(1);
//赤外線リモコンで発話
if (receiver.decode(&results)) { //赤外線を受信して信号を格納
//ONボタン(赤外線識別番号 = 0xFF02FD)
if (results.value == 0xFF02FD) {
//ランダム変数 1~6:いらっしゃいませ1~6
randNumber1 = random(1, 7); // 1~6の乱数を生成
delay(500);
mp3_play (randNumber1); //いらっしゃいませ1~6
delay(1000);
//OFFボタン(赤外線識別番号 = 0xFF9867)
}else if (results.value == 0xFF9867) {
//ランダム変数 7~8:你好(ニーハオ) or あそぼ
randNumber2 = random(7, 9); // 7~8の乱数を生成
delay(500);
mp3_play (randNumber2); //你好(ニーハオ) or あそぼ
delay(1000);
}
receiver.resume();
}
delay(1);
}
赤外線識別コード
上記ソースコード内には、「0xFF02FD」や「0xFF9867」という16進数の部分があります。
具体的には以下の場所です。
if (results.value == 0xFF02FD) {
}else if (results.value == 0xFF9867) {
このresults.valueに代入する8桁の英数字については、お使いのリモコンに対応する赤外線識別コードを入れてください。赤外線識別コードの確認方法については、下記をご覧ください。
その他の補足
0001.mp3~0009.mp3までの音声ファイルは、下記記事などを参考にデータをSDカード内に保存してください。
これらの記事にも記載しておりますが、再度強調しますと、主な注意点は、
1.「mp3」というフォルダをつくる。
2.ファイル名の先頭は4桁の数字が必要。
の2つだけです。
また、音声ファイル作成の方法は、
・ネット上のフリー音声を引っ張ってくる。
・スマホで録音する。
・スマホで動画を撮って音声だけ抽出する。
・ICレコーダーで録音する。
・声優さん等、他の方にお願いして作ってもらう。
などなど、いくらでもありますので、ご自身の都合に合わせてご自由に。
動作確認
ブレッドボード上での動作確認はこちら↓
ぬいぐるみに実装した上での動作確認はこちら↓
屋外イベントでのデジペの動作状況についてはこちら↓
おまけ
深センラボでの動作テストはこちら↓
こちらはさらに一歩進んで、リモコンのボタンの一つに言語切替機能を付帯させ、そのボタンを押すたびにOLED(ミニディスプレイ)で異なる数字(最終的には発話させたい文字にする予定)を表示させるようにしています。
まとめ
いかがでしたでしょうか?
ぬいぐるみに触るとしゃべるだけでも十分楽しいですが、それだけでは芸がありません。
赤外線は無線ではなくレーザーですので、Wi-FiやBluetoothと違って電波干渉や技適・TELEC等の認証の取得も不要というメリットがあるだけでなく、何と言っても古くからある成熟された技術ですので、関連部品が安価です。
ただもちろん、デメリットもあり、赤外線はレーザーなので障害物があると透過しにくく、ぬいぐるみに実装するとブレッドボードでのテストの時と比べて反応距離が約半分になります。それに、受信モジュールには向きがあるため、360度反応してくれるわけではありません。
実際、今回のドジパンダの中には受信モジュールを前向きに設置したため、前からのリモコン操作には反応してくれますが、後ろからだと反応せず、そのため、常にお店の前から、しかも、かなり近づけて(ぬいぐるみから約30cm~50cm)リモコンのボタンを押さないと反応してくれません。
しかも、環境によっては半分近く送信エラーが発生します。
とはいえ、ロボットならこの不安定さは大問題ですが、おもちゃとしてならこれくらいのデメリットは大して気にならないでしょう。
よって、今後は、遠隔操作系に関しては、この赤外線の技術を基本とし、液晶付きのリモコンにおける言語切替&選択機能を追加したり、赤外線距離センサーを使い、わざわざリモコンで操作しなくても、人を感知したら自動でしゃべるというような新機能も研究していく予定です。
それではまた!
Discussion