スイッチ長押しで再生!ミュージックプレイヤー

これまでの音楽が流れるスイッチ教材は、スイッチを一度入れれば音楽が再生されるというものでした。つまり、たまたまスイッチを押してしまっただけでも動作してしまいます。そして、たまたまスイッチを押しただけでずっと音楽が流れ続けてしまうということは、子どもにとって因果関係がつかみにくいと言えます。そのため、スイッチを押し続けるようにすることで子どもが意識的にスイッチを入れることを促す教材が必要であると感じ、開発したのがこのスイッチ長押しで再生!ミュージックボックスです。 

つないだスイッチを押し続けると音楽が再生され、離すと一時停止します。再度スイッチを押し続けることで音楽の続きが再生されます。

好きな音楽を聴くために頑張ってスイッチを長く押し続けるという意思と身体動作を引き出すことを目的にしています。また、音楽は複数入れられ、本体のボタンを押すことで切り替えられるとともに、内臓スピーカーで音が小さいと感じる場合は外部スピーカーを接続できるようになっています。 

動作の様子

必要部品

ケースの穴あけ位置

正面と左側面の穴あけ位置です。

使用するドリルの太さは6種類です。

2mm、3mm、5mm、6mm、8mm、12mm


左側面のスピーカーの穴はすべて大きいほうが3mmで小さいものは2mmです。

回路図

 配線は分かりやすいように色分けしているだけで、実際の導線の色は何でもOKです。

Seeeduinoのソースコード

PCとSeeeduinoを接続し、Arduino IDEというソフトウェア(無料)を使って、以下のプログラムをSeeeduinoに書き込みます。


Arduino IDEのダウンロード先:https://www.arduino.cc/en/software 


※Arduino IDEでSeeeduinoを使えるようにするには、設定をしなければなりません。

 こちらのHPを参考に、設定しました。http://zattouka.net/GarageHouse/micon/Arduino/XIAO/install.htm 


#include "Arduino.h"

#include "SoftwareSerial.h"

#include "DFRobotDFPlayerMini.h"


SoftwareSerial mySoftwareSerial(8, 9); // R T

DFRobotDFPlayerMini myDFPlayer;


// busyピンが1、スイッチが2

const int States = 1;

const int Switch = 2;


int var = 0;

int var2 = 0;

unsigned long timestart;


void setup(){

// シリアル通信開始

  mySoftwareSerial.begin(9600);

  Serial.begin(115200);


// DFPlayer初期化

  Serial.println();

  Serial.println(F("DFRobot DFPlayer Mini Demo"));

  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));

 

  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.

    Serial.println(F("Unable to begin:"));

    Serial.println(F("1.Please recheck the connection!"));

    Serial.println(F("2.Please insert the SD card!"));

    while(true){

      delay(0); // Code to compatible with ESP8266 watch dog.

    }

  }

  Serial.println(F("DFPlayer Mini online."));


// DFPlayer音量設定(0~30)

  myDFPlayer.volume(20);


// busyピン、スイッチ信号を読み取り状態に

  pinMode(States, INPUT);

  pinMode(Switch, INPUT_PULLUP);


}


void loop(){


//再生停止かつスイッチオフ状態はHIGH/HIGH

var = digitalRead(Switch);

var2 = digitalRead(States);


  // 再生停止状態 から スイッチオン継続

  if (var2 == HIGH && var == LOW) {

  myDFPlayer.start();

  delay(1000);

  }


  // 再生状態 から スイッチオフに変更

  if (var2 == LOW && var == HIGH) {

  myDFPlayer.pause();

  timestart = millis();  // オフ状態になった瞬間を0として時間を記録

  delay(1000);

  }


  // オフ状態になってから180秒間経過したら

  if(millis() > timestart + 180000) {

    //条件確認(再生停止かつスイッチオフ状態)

     if (var2 == HIGH && var == HIGH) {

     myDFPlayer.stop();

     delay(1000);  

    }

  }


}