« Arduino で Sonic Radar を作る | Main | プリアンプC-2aの冷却 »

07/23/2017

Arduino を使ってexercise の音楽と時間管理をしたい

Aruduinoを使ってエクササイズの音楽と時間管理をしてみたい。
先ずは、Arduinoで時間管理が出来るのか・・・試してみなければ・・・。

《リモコンで、
こんなことがしてみたい
①いわゆるラジカセの電源ON/OFF
②音楽の演奏順や演奏番号を指定
③ボリュームの増減や音量の指定

僕が現在想定しているラジカセは「東芝製 SD/USB/CDラジオ TY-CRX71(W)」で、メディアはSDカードを考えている。

この機種は、SDカードを挿入しておいて本体の電源を入れても、SDカードが認識されないので、確認不十分だが、リモコンで出来る操作はOFFのみかもしれない。
リモコンによるプログラムの手順などを確認する必要がある。
リモコンにある音量ボタンは「-/+」だけなので、Arduinoでどのようにすれば音量を変えられるか、確認する必要がある。

以上のような、確認不十分な課題があるが、とにかくArduinoで時間管理できれば、いわゆるラジカセは別のものに変更して、よりコントロールの行いやすいものにするという方法もあるだろう。

Img_20170723_171122 それで、Arduinoを使って時間管理するスケッチを作ってみることにした。

時間制御関数を調べてみると、Arduinoにはミリ秒やマイクロ秒で制御できる関数がある。この関数を使えば、開始時間からの制御が出来る。
時間関数については、Arduinoがスタートしてからの時刻のずれが問題にならないようにするため、

 millis() :Arduinoが起動してからの時間(ミリ秒)を返す

を使うことにした。また、時間をチェックするところは、ユーザー関数を作成した。

次に、エクササイズの決められた実行時間(1分間)と休憩時間(1分間)を、ほぼ正確に繰り返し(エクササイズ8回と休憩7回後、5分間の休憩を)制御するようにするため、繰り返しした際の条件判定・制御文をどうすれば良いか、随分迷った。
これに関連する制御文は、
 ① (if と) for を組み合わせた制御文
   for(初期処理;条件;変更処理){処理群}

 ② while 制御文
   while(条件){処理群}

 ③ do-while 制御文
   do{処理群}while(条件)

僕は、上記の制御文を試してみて、エクササイズの繰り返し判定には①を、時間の判定には③を用いて下記のようなスケッチを作成した。

リモコンの制御部分は、ここでは print文としてスケッチを作成してある。後で制御コードを調べた後に組み替えたい。

処理速度が速くないArduinoなので、Arduinoは2台の構成を考えている。
・ 1台は親機で、時間管理とラジカセの添付リモコンに代り、リモコンデータを送信する。
・ もう一台は、子機で、親機からの別のリモコンデータを受信して、MP3データで作成された音声を発音する。これは、以前のブログで紹介した記事「TVリモコンを使ってArduinoを喋らせる」を参考に作ることになると思う。

これらの詳細は、次回以降明らかに出来ると思う。ここでは、自分用のメモとして、下記Sketchをここに書いておく。

《時間管理のSketch案》

// Arduino を使った時間管理のための sketch
// 音量位置 Vol1:min, Vol2:med, Vol3:max
//
long i=0;
int  n=0;
int  m=0;
unsigned long atime;  // 告知時刻
unsigned long    tc;  //
unsigned long   tc2;  //
unsigned long t0 = millis();  // 時刻の初期化

// セットアップ
void setup(){
  Serial.begin(9600);
// CD  Playerへの指示
  Serial.println("Player の 電源ON");
  Serial.println("Player の 音楽を選択する");
  Serial.println("Player の Play!");
  
// CD  Playerへの指示
  Serial.println("Player の 音量 Vol1 へ");
  
  atime =15;
  
// ここから カウンター m=0 から 3回ループする
for (m=0; m<3; m++){
  Serial.println(" ");
  Serial.print("m = ");
  Serial.println(m+1);
  
// MP3 Playerへの指示:15秒前と告知する
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  Serial.println(" ");
  Serial.println("スタート15秒前です!");

  atime = atime + 5;  // 5秒後に告知
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  Serial.println(" ");
  Serial.println("10秒前です!");
  
// ここから カウンター n=0 から 8回ループする *****基本の運動ループ部分*****
for (n=0; n<8; n++ ){
// CD  Playerへの指示
  Serial.println("Player の 音量を Vol1 へ");
  
  Serial.print("n = ");
  Serial.println(n);
  
  atime = atime + 5;  // 5秒後に告知
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  Serial.println(" ");
  Serial.println(" 5秒前です!");
  
  atime = atime + 2;  // 2秒後に告知
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  tone(8, 440);
  Serial.println(" ");
  Serial.println(" 3秒前です!");
  noTone(8);
  
  atime = atime + 1;  // 1秒後に告知
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  tone(8, 440);
  Serial.println(" ");
  Serial.println(" 2秒前です!");
  noTone(8);
  
  atime = atime + 1;  // 1秒後に告知
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  tone(8, 440);
  Serial.println(" ");
  Serial.println(" 1秒前です!");
  noTone(8);
  
  atime = atime + 1;  // 1秒後に告知
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  tone(8, 880);
  Serial.println(" ");
  Serial.print(n+1);
  Serial.println(" 回目の 1分間エクササイズ Go!!!!!!!!!!!!!!");
  noTone(8);
// CD  Playerへの指示
  Serial.println("Player の 音量を Vol3 へ");
  
  atime = atime + 55;  // 55秒後に告知
  CountTimer( atime);
// CD  Playerへの指示
  Serial.println(" ");
  Serial.println("Player の 音量を Vol1 へ");

  atime = atime + 2;  // 2秒後に告知
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  tone(8, 440);
  Serial.println(" ");
  Serial.println(" 3秒前です!");
  noTone(8);

  atime = atime + 1;  // 1秒後に告知
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  tone(8, 440);
  Serial.println(" ");
  Serial.println(" 2秒前です!");
  noTone(8);
  
  atime = atime + 1;  // 1秒後に告知
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  tone(8, 440);
  Serial.println(" ");
  Serial.println(" 1秒前です!");
  noTone(8);
  
  atime = atime + 1;  // 1秒後に告知
  Serial.print("atime=");
  Serial.println(atime);
  CountTimer( atime);
  tone(8, 880);
  Serial.println(" ");
  Serial.print(n+1);
  Serial.println(" 回目の 1分間 Brake!!!!!!!!!!!!!!!!!!!!!!!");
  noTone(8);
// CD  Playerへの指示
  Serial.println("Player の 音楽を変更する");
  
  atime = atime + 50;  // 50秒後に告知
}
// 5分間休憩の時間をセット
  atime = atime - 50;
  atime = atime + 5*60 - 15;  // 4分45秒後に告知
  Serial.println(" ");
  Serial.print(m+1);
  Serial.println(" 回目の 5分間 Brake!!!!!!!!!!!!!!!!!!!!!!!");
// CD  Playerへの指示
  Serial.println("Player の 音量を Vol2 へ");
}
// CD  Playerへの指示
  Serial.println("Player をストップさせる");
  Serial.println("Player の電源 OFF");
}
void loop() { }
int CountTimer(unsigned long tsec)
{ // 時間をカウントチェックするためのユーザー関数
  // t0   : 正となる時刻
  // tsec : このサブプログラムで秒読みする時間

  int i=0;  // millis() を読むカウンター
  unsigned long tc;  // tc  : 現時刻
  unsigned long t2 = tsec*1000;    // t2  : t0からの tsec秒経過した時刻

  tc = millis();
  
  while( tc < t2 ){
  tc = millis();
  i=i+1;
  }
 return;
}

« Arduino で Sonic Radar を作る | Main | プリアンプC-2aの冷却 »

PC and PC troubles」カテゴリの記事

Comments

Post a comment

Comments are moderated, and will not appear on this weblog until the author has approved them.

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/540128/65570900

Listed below are links to weblogs that reference Arduino を使ってexercise の音楽と時間管理をしたい:

« Arduino で Sonic Radar を作る | Main | プリアンプC-2aの冷却 »

September 2017
Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Recent Trackbacks

無料ブログはココログ