#topicpath

** もりみんアドバンスト [#lfc33146]
-- 概要:~
明るさの変化でドレミを奏でます。音量は変わりません。とっても明るいと音は鳴りませんので、あまりやかましくありません。~
2010年度に児童向けの電気工作のために作成しました。[[Arduino と CdS と圧電スピーカを使ったテルミンもどき楽器>../MoriminAdvanced]]と同様のものです。
~
~
-- ポイント~
--- 明るさを学習(というほど大袈裟ではない)して、音階を決める値を自律的に変更します。~
電源電圧が変わっても大丈夫なはずです。
--- プログラムがこなれていない。(試作ですから。)
--- 明るさを学習して、音階を決める値を自律的に変更します。~
--- 簡単(例によって。)~
--- 安い(例によって。)~
| 部品 | 値段(円) | まとめ買い個数|購入 |h
| 圧電スピーカ| 40 | 40 個入り| 秋月電子 http://akizukidenshi.com/catalog/g/gP-01709/|
| フォトトランジスタ | 50 | 2個入り| 秋月電子http://akizukidenshi.com/catalog/g/gI-02325/ |
| 電池ボックス | 50 | 10個以上 |秋月電子 http://akizukidenshi.com/catalog/g/gP-00327/|
| マイコンATmega168P | 210 | 14個以上 |秋月電子 http://akizukidenshi.com/catalog/g/gI-03033/ |
| コンデンサ 0.1μF | 4.75 | 500 個入り|秋月電子 http://akizukidenshi.com/catalog/g/gP-02182/ |
|スチレンボード | 6.56| 16枚分 | ダイソー |

~
-- マイコン~
--- [[ミニマル>../../Arduino の自作/MINIMAL]]をもとに作成。
-- 配線~
[[USBに直結するタイプ>../../Arduino の自作/USBTYPE]]をもとに作成。~
--- スピーカ  :黒-グラウンド、赤-デジタル13番(マイコンの19番ピン)
--- 抵抗10kΩ:アナログ0番(マイコンの23番ピン)と電源
--- CdSセル :アナログ0番ピン(マイコンの23番ピン)とグラウンド~
&ref(sany0126.jpg,,320x240);~
※ スケッチを流し込んでしまった後は、ツェナーダイオードや、68Ωの抵抗は要りません。外しましょう。~
~
-- ユニバーサル基板で作る~
Arduino の Duemilanove などは、なぜフラットパッケージ~
(QFP,4方に細かい足が出ているタイプ)を使わないのだろうか、~
と思っていた。DIP(太い足が2列に並んでブレッドボードや~
ユニバーサル基板に使いやすいタイプ)よりも、面積が小さいし、~
基板設計も楽だろうし、足の数も多くなるし、安いし、QFP~
(4方に細かい足が出ているタイプ)の方がより良いように思っていた。~
~
ところが、今回の試作で、DIP であることの重要性を痛感した。~
どうして DIP なのかわかったように思う。それは、おそらく、~
マイコンを抜いて、基板に挿せるからだ。言葉をかえると、~
プロトタイプを、よりプロダクトに近いものにチップを移植する~
ことで移行できるからだ。~
~
&ref(SANY0135.JPG,,320x240);~
~
-- プログラム~
Arduino 017 で [[Tone>http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation]] を使いました。~
Arduino 018 に含まれる Tone はごく一部なので、やはり Tone ライブラリを別途用意して入れる必要があります。~
 #include <Tone.h>
 #include <math.h>
 
 Tone notePlayer;
 int val = 0;
 int maxv = 0;
 int minv = 1024;
 int note[]={ 262, 294, 330, 349, 393, 440, 494, 523};
 int thre[]={minv,minv,minv,minv,minv,minv,minv,minv};
 
 void setup(void)
 {
 	notePlayer.begin(13);
 }
 
 void loop(void)
 {
 	int i;
 	val = analogRead(0);
 	
 	if ( minv > val ){
 		minv = val;
 	}
 	if ( maxv < val ){
 		maxv = val;
 	}
 	for( i = 0; i < 8; i++ ){
 		thre[i] = maxv - (int)((maxv-minv)*pow(((1.0*i+0.3)/7.5),0.1));
 	}
 	// lesser : brighter 
 	if (       val > thre[0] ){
 		notePlayer.play(note[0],100);
 	}else if ( val > thre[1] ){
 		notePlayer.play(note[1],100);
 	}else if ( val > thre[2] ){
 		notePlayer.play(note[2],100);
 	}else if ( val > thre[3] ){
 		notePlayer.play(note[3],100);
 	}else if ( val > thre[4] ){
 		notePlayer.play(note[4],100);
 	}else if ( val > thre[5] ){
 		notePlayer.play(note[5],100);
 	}else if ( val > thre[6] ){
 		notePlayer.play(note[6],100);
 	}else if ( val > thre[7] ){
 		notePlayer.play(note[7],100);
 	}
 	delay(200);
 }
~
~
-- 動作の様子([[YouTube>http://www.youtube.com/watch?v=bhNO1FlrfA8]])~
#u2b(id=bhNO1FlrfA8)~
~
*** 記録 [#h2dd6f8b]
-- 参考URL
--- [[Arduino Tone Library>http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation]]
--- [[Arduinoで遊ぼう - 圧電スピーカでチクタク/なんでもつくっちゃう、かも>http://arms22.blog91.fc2.com/blog-entry-276.html]]
--- [[MTM05 Scratch ワークショップ>http://scratch-ja.org/atmtm05/report]]
-- 履歴~
--- 2010-06-16 ユニバーサル基板化~
--- 2010-06-14 動画掲載~
--- 2010-06-11 音階を分けるAD変換された値を自動的に決めるように変更~
--- 2010-06-10 音が出る。配線もプログラムも、こんなに簡単。
以下作成中
// 
// --- スピーカ  :黒-グラウンド、赤-デジタル13番(マイコンの19番ピン)
// --- 抵抗10kΩ:アナログ0番(マイコンの23番ピン)と電源
// --- CdSセル :アナログ0番ピン(マイコンの23番ピン)とグラウンド~
// &ref(sany0126.jpg,,320x240);~
// ※ スケッチを流し込んでしまった後は、ツェナーダイオードや、68Ωの抵抗は要りません。外しましょう。~
// ~
// -- ユニバーサル基板で作る~
// Arduino の Duemilanove などは、なぜフラットパッケージ~
// (QFP,4方に細かい足が出ているタイプ)を使わないのだろうか、~
// と思っていた。DIP(太い足が2列に並んでブレッドボードや~
// ユニバーサル基板に使いやすいタイプ)よりも、面積が小さいし、~
// 基板設計も楽だろうし、足の数も多くなるし、安いし、QFP~
// (4方に細かい足が出ているタイプ)の方がより良いように思っていた。~
// ~
// ところが、今回の試作で、DIP であることの重要性を痛感した。~
// どうして DIP なのかわかったように思う。それは、おそらく、~
// マイコンを抜いて、基板に挿せるからだ。言葉をかえると、~
// プロトタイプを、よりプロダクトに近いものにチップを移植する~
// ことで移行できるからだ。~
// ~
// &ref(SANY0135.JPG,,320x240);~
// ~
// -- プログラム~
// Arduino 017 で [[Tone>http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation]] を使いました。~
// Arduino 018 に含まれる Tone はごく一部なので、やはり Tone ライブラリを別途用意して入れる必要があります。~
//  #include <Tone.h>
//  #include <math.h>
//  
//  Tone notePlayer;
//  int val = 0;
//  int maxv = 0;
//  int minv = 1024;
//  int note[]={ 262, 294, 330, 349, 393, 440, 494, 523};
//  int thre[]={minv,minv,minv,minv,minv,minv,minv,minv};
//  
//  void setup(void)
//  {
//  	notePlayer.begin(13);
//  }
//  
//  void loop(void)
//  {
//  	int i;
//  	val = analogRead(0);
//  	
//  	if ( minv > val ){
//  		minv = val;
//  	}
//  	if ( maxv < val ){
//  		maxv = val;
//  	}
//  	for( i = 0; i < 8; i++ ){
//  		thre[i] = maxv - (int)((maxv-minv)*pow(((1.0*i+0.3)/7.5),0.1));
//  	}
//  	// lesser : brighter 
//  	if (       val > thre[0] ){
//  		notePlayer.play(note[0],100);
//  	}else if ( val > thre[1] ){
//  		notePlayer.play(note[1],100);
//  	}else if ( val > thre[2] ){
//  		notePlayer.play(note[2],100);
//  	}else if ( val > thre[3] ){
//  		notePlayer.play(note[3],100);
//  	}else if ( val > thre[4] ){
//  		notePlayer.play(note[4],100);
//  	}else if ( val > thre[5] ){
//  		notePlayer.play(note[5],100);
//  	}else if ( val > thre[6] ){
//  		notePlayer.play(note[6],100);
//  	}else if ( val > thre[7] ){
//  		notePlayer.play(note[7],100);
//  	}
//  	delay(200);
//  }
// ~
// ~
// -- 動作の様子([[YouTube>http://www.youtube.com/watch?v=bhNO1FlrfA8]])~
// #u2b(id=bhNO1FlrfA8)~
// ~
// *** 記録 [#h2dd6f8b]
// -- 参考URL
// --- [[Arduino Tone Library>http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation]]
// --- [[Arduinoで遊ぼう - 圧電スピーカでチクタク/なんでもつくっちゃう、かも>http://arms22.blog91.fc2.com/blog-entry-276.html]]
// --- [[MTM05 Scratch ワークショップ>http://scratch-ja.org/atmtm05/report]]
// -- 履歴~
// --- 2010-06-16 ユニバーサル基板化~
// --- 2010-06-14 動画掲載~
// --- 2010-06-11 音階を分けるAD変換された値を自動的に決めるように変更~
// --- 2010-06-10 音が出る。配線もプログラムも、こんなに簡単。
// 
// --- スピーカ  :黒-グラウンド、赤-デジタル13番(マイコンの19番ピン)
// --- 抵抗10kΩ:アナログ0番(マイコンの23番ピン)と電源
// --- CdSセル :アナログ0番ピン(マイコンの23番ピン)とグラウンド~
// &ref(sany0126.jpg,,320x240);~
// ※ スケッチを流し込んでしまった後は、ツェナーダイオードや、68Ωの抵抗は要りません。外しましょう。~
// ~
// -- ユニバーサル基板で作る~
// Arduino の Duemilanove などは、なぜフラットパッケージ~
// (QFP,4方に細かい足が出ているタイプ)を使わないのだろうか、~
// と思っていた。DIP(太い足が2列に並んでブレッドボードや~
// ユニバーサル基板に使いやすいタイプ)よりも、面積が小さいし、~
// 基板設計も楽だろうし、足の数も多くなるし、安いし、QFP~
// (4方に細かい足が出ているタイプ)の方がより良いように思っていた。~
// ~
// ところが、今回の試作で、DIP であることの重要性を痛感した。~
// どうして DIP なのかわかったように思う。それは、おそらく、~
// マイコンを抜いて、基板に挿せるからだ。言葉をかえると、~
// プロトタイプを、よりプロダクトに近いものにチップを移植する~
// ことで移行できるからだ。~
// ~
// &ref(SANY0135.JPG,,320x240);~
// ~
// -- プログラム~
// Arduino 017 で [[Tone>http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation]] を使いました。~
// Arduino 018 に含まれる Tone はごく一部なので、やはり Tone ライブラリを別途用意して入れる必要があります。~
//  #include <Tone.h>
//  #include <math.h>
//  
//  Tone notePlayer;
//  int val = 0;
//  int maxv = 0;
//  int minv = 1024;
//  int note[]={ 262, 294, 330, 349, 393, 440, 494, 523};
//  int thre[]={minv,minv,minv,minv,minv,minv,minv,minv};
//  
//  void setup(void)
//  {
//  	notePlayer.begin(13);
//  }
//  
//  void loop(void)
//  {
//  	int i;
//  	val = analogRead(0);
//  	
//  	if ( minv > val ){
//  		minv = val;
//  	}
//  	if ( maxv < val ){
//  		maxv = val;
//  	}
//  	for( i = 0; i < 8; i++ ){
//  		thre[i] = maxv - (int)((maxv-minv)*pow(((1.0*i+0.3)/7.5),0.1));
//  	}
//  	// lesser : brighter 
//  	if (       val > thre[0] ){
//  		notePlayer.play(note[0],100);
//  	}else if ( val > thre[1] ){
//  		notePlayer.play(note[1],100);
//  	}else if ( val > thre[2] ){
//  		notePlayer.play(note[2],100);
//  	}else if ( val > thre[3] ){
//  		notePlayer.play(note[3],100);
//  	}else if ( val > thre[4] ){
//  		notePlayer.play(note[4],100);
//  	}else if ( val > thre[5] ){
//  		notePlayer.play(note[5],100);
//  	}else if ( val > thre[6] ){
//  		notePlayer.play(note[6],100);
//  	}else if ( val > thre[7] ){
//  		notePlayer.play(note[7],100);
//  	}
//  	delay(200);
//  }
// ~
// ~
// -- 動作の様子([[YouTube>http://www.youtube.com/watch?v=bhNO1FlrfA8]])~
// #u2b(id=bhNO1FlrfA8)~
// ~
// *** 記録 [#h2dd6f8b]
// -- 参考URL
// --- [[Arduino Tone Library>http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation]]
// --- [[Arduinoで遊ぼう - 圧電スピーカでチクタク/なんでもつくっちゃう、かも>http://arms22.blog91.fc2.com/blog-entry-276.html]]
// --- [[MTM05 Scratch ワークショップ>http://scratch-ja.org/atmtm05/report]]
// -- 履歴~
// --- 2010-06-16 ユニバーサル基板化~
// --- 2010-06-14 動画掲載~
// --- 2010-06-11 音階を分けるAD変換された値を自動的に決めるように変更~
// --- 2010-06-10 音が出る。配線もプログラムも、こんなに簡単。


トップ   新規 検索 最終更新   ヘルプ   最終更新のRSS