🌏

しゃべぐるみ制作 その5(しゃべぐるみ基本セット+LED付きプッシュスイッチ+人感センサー)※実店舗に初導入

2024/10/30に公開

こんにちは、dojinosukeです。
※2024年5月までは、しゃべるぬいぐるみのことを「デジタルペット(Digital Pets) = デジぺ」と呼んでいましたが、6月より「しゃべぐるみ」に改めました。

少し時間が空いてしまいましたが、9月の敬老の日の3連休に、ドジパンダのしゃべぐるみVer3.2とチビぐるみVer1.0を現場に入り浸って作りました。今回は、これらに関する記事を連投したいと思います。

ちなみに、投稿がこのタイミングになった理由は、ここ一ヶ月半忙しかったからという理由にもならない理由ですが、

11月10日に広東省の恵州市でチビぐるみ制作のワークショップを開催
11月23日(土・祝)、24日(日)の両日開催のOgaki Mini Maker Faire 2024へ出店

と、来月に電子工作系のイベントの主催と参加を2つ控えており、どちらのイベントも先月初めて製作したこの2種類のしゃべぐるみでで乗り切る予定です。

で、もう10月末なのでいい加減準備を始める必要があるのと、特にメーカーフェアでは、できる限り基板の状態にしておきたいため、備忘と気合を入れ直す意味も兼ねて記事にまとめたいと思います。

はじめに

7/7のHMMF2004開催の翌日にOHMMF2024の申し込みをしたのも今は昔。先週10/25には、OMMF2024の公式サイトで出展者紹介がアップされました。私の紹介は下記:
https://www.iamas.ac.jp/ommf2024/maker/dojinosuke/

で、OHMMF2024で展示予定のドジパンダのしゃべぐるみVer.3.2ですが、実は、すでに三ケ日みかんで有名な三ヶ日町(静岡県浜松市浜名区)の「カラオケ喫茶スナックりりぃ」さんに置かせていただいています。

余談として、少し経緯をお話しすると、店長さんとは5月中旬の天竜区二俣でのイベントでちょうど横になり、ドジパンダのしゃべぐるみのことを覚えていてくれていました。

どうでもいい話ですが、8月下旬にお話をいただきましたが、ちょうど北海道出張で新千歳空港に着いたばかりでしたので、浜松に戻った8月末に改めて現地訪問し、打ち合わせ。

その後、9/13(金)~現地入りして、三連休中に試行錯誤しながら完成させ、9/20(金)に正式に納品させていただきました。

その後は一度故障しましたが、バッテリーにあまり充電せずに使っていたらしく、ファームウェアを書き込み直しただけで直ったため、おそらくバッテリー切れで使った際にバグったと判断しました。

参考記事

https://zenn.dev/suzuky/articles/deca20bb6e8499

https://zenn.dev/suzuky/articles/45a610071f1b98

しゃべぐるみ基本セット

https://zenn.dev/suzuky/articles/45a610071f1b98

上記は、ドジパンダのしゃべぐるみVer.2.0の記事ですが、これに搭載されているタッチスイッチ(TTP223)、音声再生モジュール(DFPlayer Mini)、赤外線リモコン受信モジュール(VS1838B)、赤外線リモコン(任意のリモコン)の4つをしゃべぐるみの「基本セット」と規定しています。

今回は、この基本セットに対して、LED付きプッシュスイッチと人感センサーを追加して使う内容となっております。

したがいまして、初めての方は、まずは上記記事をご覧いただき、DFPlayerやタッチスイッチなどに関してご理解いただいたうえで、本記事をご覧ください。

LED付きプッシュスイッチ

(https://storage.googleapis.com/zenn-user-upload/3881048818cd-20241030.jpg)
9月頭に大阪日本橋に行き、共立電子産業さんが運営する「シリコンハウス デジット」を訪問。
https://digit.kyohritsu.com/storeoffice.html


そこで、LED付きプッシュスイッチの他、測距センサーや人感センサーなどを購入しました。

で、今回はここで購入した下記スイッチを使いました。

ゲームスイッチ はめ込み 24mm 青色照光 5-12V
SWI508-24IN0512LED-BL
●カラー:青
●照光部:LED 青色/DC5~12V用(明るさは印加する電圧により異なります)
●スイッチ:1a接点(ON-OFF)/モーメンタリ型

仕様及び画像引用元:https://eleshop.jp/shop/g/gL79126/

配線図

このプッシュスイッチは配線箇所が4ヶ所あり、LEDの+側、LEDの-側、A接点(常開)のスイッチ接点が2つです。

一見複雑ですが、構造上はシンプルに、別々のスイッチ一個とLED一個がくっついているだけです。
ですので、配線上は、どれがスイッチの接点で、どれがLEDのプラスとマイナスがわかれば大丈夫ですが、問題が一つ。

プラスマイナスの刻印があるので、どちら側がプラスでどちら側がマイナスかはわかりますが、刻印が中途半端な位置にあるため、というか、むしろ刻印の位置がスイッチ接点側に近いため、私も最初、スイッチ接点側をプラスマイナと間違えて詰まりました。。。

具体的な配線は、下記を参考にしてください。
ON/OFFの判別がしやすいよう。今回はブザーも使います。

Arduino Uno LED付きプッシュスイッチ ブザー
5V 接点1 /
/ 接点2
GND
デジタル7番ピン /
デジタル13番ピン /

ソースコード

//http://drshiroshirokm.seesaa.net/article/441873352.html
//ボタンを押している時だけLEDを点灯させるプログラム

const int LED = 13; //定数LEDを13に設定
const int BUTTON = 7; //定数BUTTONに7を設定

int var = 0; //変数varを設定

void setup() {
  pinMode(LED, OUTPUT); //LEDピンを出力に設定
  pinMode(BUTTON, INPUT); //BUTTONピンを入力に設定
}

void loop() {
  var = digitalRead(BUTTON); //BUTTONピンを読み取った結果をvarに代入

              //varはHIGHか?
  if(var == HIGH){
    digitalWrite(LED, HIGH); //LEDピンにHIGHを出力
  }
  else{
    digitalWrite(LED, LOW); //LEDピンにLOWを出力
  }
 }

ブレッドボード図

後日掲載予定

動作確認


プッシュ時、つまり、接点が閉じている時だけ、ONし、スイッチのLEDが光り、ブザーが鳴ります。
https://x.com/dojinosuke/status/1834953573592871261
なお、上述の配線とソースコードは、「2. LED常時OFFで、押した時のみ点灯&機能ON」のものです。

人感センサー

当初は測距センサーを使う予定でしたが、それが上手くいかず、念のために購入した「人体赤外線感知センサー(KP-IR612)」を使用したところバッチリでした。

人体赤外線感知素子
KP-IR612
●電源電圧:3.0V~12V

仕様及び画像引用元:https://eleshop.jp/shop/g/g402287/

配線図

この人感センサーは、ピンヘッダが5ヶ所、可変抵抗器も3つあるため、一見配線が面倒そうですが、普通に使う分には下記3本を配線するだけで動きます。

GND:マイナス電源
TEST:信号
DC-INPUT:プラス電源

で、センサー自体は何か光ったり音が出たりしませんので、センサーがちゃんと反応しているかがわかりやすいよう、発光ダイオードとブザーも追加します。

具体的な配線は、下記を参考にしてください。

Arduino Uno KP-IR612 ブザー 発光ダイオード
5V DC-INPUT / ----
GND GND
デジタル2番ピン TEST / /
デジタル10番ピン / /
デジタル11番ピン / /

※1kΩの抵抗を挟む

ソースコード

#define LED_OUT 11
#define PIR_IN 2
#define BUZ_OUT 10
 
void setup() {
  pinMode(LED_OUT, OUTPUT);
  pinMode(PIR_IN, INPUT);
}
 
void loop() {
  digitalWrite(LED_OUT, HIGH);
  if (digitalRead(PIR_IN) == HIGH) {
    delay(100);
  } else {
    delay(1000);
  }
  digitalWrite(LED_OUT, LOW);
  if (digitalRead(PIR_IN) == HIGH) {
    delay(100);
  } else {
    delay(1000);
  }
  if (digitalRead(PIR_IN) == HIGH) {
    analogWrite(BUZ_OUT,70);
  } else {
    analogWrite(BUZ_OUT, 0);
  }
}

ブレッドボード図

後日掲載予定

動作確認

人感センサーが反応前:発光ダイオードがゆっくり点滅
人感センサーが反応後:発光ダイオードが高頻度で点滅&ブザー音がする

詳細は、下記を確認してください。
https://x.com/dojinosuke/status/1835308041253822628

しゃべぐるみVer.3.2

しゃべぐるみ基本セットに加え、上述のLED付きプッシュスイッチと人感センサーの使い方を理解したうえでこちらをご覧ください。

基本的にはすべて付け足すだけです。

詳細は、後日アップします。

配線図

後日掲載します。

ソースコード

/*
0001_あそぼー.mp3
0002_こんにちはー.mp3
0003_ドジパンダだよー.mp3
0004_またねー.mp3
0005_ありがとう.mp3
0006_少々お待ち下さい.mp3
0011_いらっしゃいませ1.mp3
0012_いらっしゃいませ2.mp3
0013_いらっしゃいませ3.mp3
0014_いらっしゃいませ4.mp3
0015_いらっしゃいませ5.mp3
0016_いらっしゃいませ6.mp3
0021_ぐー_2.mp3
0022_ちょき_2.mp3
0023_ぱー_2.mp3
0024_おしり_6.mp3
0025_ドジパンじゃんけんじゃんけんポン_1.mp3
0026_ドジパンじゃんけんじゃんけんポン(早め)_1.mp3
0031_うえ_1.mp3
0032_した_1.mp3
0033_みぎ_1.mp3
0034_ひだり_1.mp3
0035_あっかんべー_2.mp3
0036_15.あっち向いてホイ.mp3
0037_16.あっち向いてホイ(早め)_1.mp3
0041_ボタンを押してねー_1.mp3
0042_11.ボタンを押してねー(早め)_1.mp3
0043_カラオケは右の奥でーす_1.mp3
0044_12.カラオケは右の奥でーす(早め)_1.mp3
0045_ドジパンダと握手しよー_1.mp3
0046_13.ドジパンダと握手しよー(早め)_1.mp3
0047_右に曲がってドアを開けてねー_1.mp3
0048_14.右に曲がってドアを開けてねー(早め)_1.mp3
x0002_最初はー
x0003_じゃんけん
x0004_ぽん
x0005_あいこで
x0006_ぐー
x0007_チョキ
x0008_パー
x0013_ごめんなさい1
x0014_ごめんなさい2
*/
  
  //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 TOUCH1 = 5; //発話用のタッチスイッチ1
const int TOUCH2 = 7; //発話用のタッチスイッチ2
const int TOUCH3 = 6; //発話用のタッチスイッチ3

//ランダム変数
int randNumber1;
int randNumber2;
int randNumber3;
int randNumber4;

//プッシュボタン用変数
const int LED = 13; //LED付きプッシュボタンのLED機能を13に設定
const int BTN = 12; //LED付きプッシュボタンのボタン機能を12に設定
int var = 0; //変数varを設定

//人感センサー(KP-IR612)
#define LED_OUT 3
#define PIR_IN 8

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(TOUCH1, INPUT); //発話用のタッチスイッチ1の入力
  pinMode(TOUCH2, INPUT); //発話用のタッチスイッチ2の入力
  pinMode(TOUCH3, INPUT); //発話用のタッチスイッチ3の入力

  //VS1838B
  receiver.enableIRIn(); //赤外線受信モジュールを初期化

  //ランダム変数
  Serial.begin(9600);
  randomSeed(analogRead(0));

  //プッシュスイッチ用定義
  pinMode(LED, OUTPUT); //LEDピンを出力に設定
  pinMode(BTN, INPUT); //BTNピンを入力に設定

  //人感センサー(KP-IR612)
  pinMode(LED_OUT, OUTPUT);
  pinMode(PIR_IN, INPUT);

}

void loop() {

//タッチで発話

  //タッチ1=じゃんけん  
  if (digitalRead(TOUCH1) == HIGH){
    //ランダム変数1 21:ぐー 22:ちょき 23:ぱー 24:おしり
    randNumber1 = random(21, 25); // 21から24の乱数を生成
    mp3_play (25); //0025_ドジパンじゃんけんじゃんけんポン_1.mp3
    delay(6000);   
    mp3_play (randNumber1); //0021_ぐー_2.mp3 / 0022_ちょき_2.mp3 / 0023_ぱー_2.mp3 / 0024_おしり_6.mp3
    delay(2000);           
 
  }  
  delay(1);

  //タッチ2=あっち向いてホイ  
  if (digitalRead(TOUCH2) == HIGH){
    //ランダム変数2 31:うえ 32:した 33:みぎ 34:ひだり 35:あっかんべー
    randNumber2 = random(31, 36); // 31から35の乱数を生成
    mp3_play (36); //0036_15.あっち向いてホイ.mp3
    delay(3000);   
    mp3_play (randNumber2); //0031_うえ_1.mp3 / 0032_した_1.mp3 / 0033_みぎ_1.mp3 / 0034_ひだり_1.mp3 / 0035_あっかんべー_2.mp3
    delay(2000);           
 
  }  
  delay(1);

/*
  //タッチ3=あいさつ
  if (digitalRead(TOUCH3) == HIGH){
    //ランダム変数3 2:こんにちはー 3:ドジパンダだよー
    randNumber3 = random(2, 4); // 2から3の乱数を生成
    mp3_play (randNumber3); //0002_こんにちはー.mp3 / 0003_ドジパンダだよー.mp3
//    mp3_play (41); //0041_ボタンを押してねー_1.mp3
    delay(1500);          
  }  
  delay(1);
*/

//赤外線リモコンで発話
  if (receiver.decode(&results)) { //赤外線を受信して信号を格納

    //(results.value == 実際のリモコンの赤外線識別番号)
    //ONボタン(0xFF02FD)
    if (results.value == 0xFF02FD) {
      mp3_play (4); //0004_またねー.mp3      
//      mp3_play (11); //0011_ありがとう.mp3                  
      delay(1000);

    //OFFボタン(0xFF9867)  
    }else if (results.value == 0xFF9867) {
      mp3_play (35); //0035_あっかんべー_2.mp3
//      mp3_play (14); //0014_ごめんなさい2.mp3               
      delay(1000);

    }  
    receiver.resume();

  }
  delay(1);

////LED付きプッシュボタン
  var = digitalRead(BTN); //BTNピンを読み取った結果をvarに代入

  //varはHIGHか?
  if(var == HIGH){
    digitalWrite(LED, HIGH); //LEDピンにHIGHを出力

    mp3_play (43); //0043_カラオケは右の奥でーす_1.mp3
    delay(5500);
    mp3_play (45); //0045_ドジパンダと握手しよー_1.mp3
    delay(5500);          

  }
  else{
    digitalWrite(LED, LOW); //LEDピンにLOWを出力
  }
//////////////////////

////人感センサー
  digitalWrite(LED_OUT, HIGH);
  if (digitalRead(PIR_IN) == HIGH) {
    delay(100);
  } else {
    delay(1000);
  }
  digitalWrite(LED_OUT, LOW);
  if (digitalRead(PIR_IN) == HIGH) {
    delay(100);
  } else {
    delay(1000);
  }
  if (digitalRead(PIR_IN) == HIGH) {

  //ランダム変数4 11~16:いらっしゃいませ1~6
    randNumber4 = random(11, 17); // 11から18の乱数を生成
    mp3_play (randNumber4); //00011_いらっしゃいませ1.mp3~0016_いらっしゃいませ6.mp3
    delay(2500); 
    mp3_play (41); //0041_ボタンを押してねー_1.mp3
    delay(3500);  

  }
  delay(1);
//////////////////////

}

ブレッドボード図

後日掲載します。

動作確認

ドジパンダのしゃべぐるみVer.3.2
• しゃべぐるみ基礎(マイコン、音声再生モジュール、他)
• プッシュボタンで発話
• 人感センサーで感知して発話
• 両腕内のタッチスイッチで発話

詳細は、下記を確認してください。
https://x.com/dojinosuke/status/1835319346643837018

まとめ

このドジパンダのしゃべぐるみVer.3.2は、しゃべぐるみの店舗版第一号で、かつまだプロトタイプですが、9/20に正式に納品し、現在も稼働しています。

残りは、後日更新します。

Discussion