MTM07  いってきました @ina_ani hatena id: inajob
MTM07 Make Tokyo Meeting 07 第 7 回  12/3, 12/4 大学のころの知り合いと一緒に出展してきた
当日の話 展示してるとゆっくり他を見て回れない… 見に来てくださった方のレビュー記事とかみてます 会社の知り合い、大学時の友人との意外な出会い http://jp.makezine.com/blog/maker_faire/
展示していたもの RakuChord mobile 簡単に和音が演奏できる楽器 3 年前につくってちょいちょい改良してる Keyboard-Keyboard 新作 音のなる PC キーボードを作りたかった
バンドやろうぜ!バンド! 一度は楽器を演奏しようと思ったことあるよね?
RakuChord 楽器できません ピアノ? ギター? いずれも難しい…  -> 楽器が悪いんだ!
概要 右手でメロディ 左手で和音(コード)を抑える 中身は自作 Arduino
RakuChord ぼくのかんがえたさいきょうのがっき 曲 ⇒ メロディ  +  和音 和音のパターンはある程度限定できる ダイアトニックコード? 電子楽器はボタンと音のアサインが自由 音楽っぽい話はむしろ教えてほしい… 今日は HW 編
今日の話 Arduino で音を鳴らそう! (時間があれば) PS/2 キーボードの制御方法
Arduino で音を鳴らそう!
Arduino で音 音を鳴らす方法 ラは 440Hz だよね? 0,1 を 440Hz で流せば鳴るかな? Arduino おさらい digitalWrite(PINNO,HIGH); digitalWrite(PINNO,LOW); 音は意外と簡単? Arduino 1/440sec
Arduino で音(波形) サイン波とか三角波とかどうしよう? Arduino はデジタル出力しかできません 0/1 のどちらかしか出せない 選択肢 DAC: Digital Analog Converter PWM: Pulse Width Modulation
DAC:Digital Analog Converter シリアルでデータを送るとアナログ信号を出力 Arduino がだめなら部品を足しましょう ソフトウェアとは違うところ 無い機能はそういう IC 買ってくればいい 200 円ほど? 結局制御が間に合うかが勝負 ちょっと Arduino だとぎりぎりかなー Arduino DAC
PWM: Pulse Width Modulation 時分割方式 0/1 だって高速に切り替えればいいんだよね AVR に標準搭載 ⇒ 部品を足さなくても良い 高速に切り替えないとキャリア周波数が可聴域に入る http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%AB%E3%82%B9%E5%B9%85%E5%A4%89%E8%AA%BF
Arduino で音(波形) ということでやり方はいろいろです 要はほしい波形が耳に届けば OK http://ja.wikipedia.org/wiki/%E6%B3%A2%E5%BD%A2
Arduino で PWM analogWrite(PINNO, value); value: 0-255 使えるピンが限られているので注意 キャリア周波数はちょっとレジスタをいじる必要がある http://www.arduino.cc/playground/Main/TimerPWMCheatsheet TCCR1B = TCCR1B & 0b11111000 | 0x01;
Arduino で和音 和音ってなんだろう? 単音の波形を足せばいいのかな? ( 音 1 の波形 + 音 2 の波形 + 音 3 の波形 )/3 割とこんな感じで OK 波形生成 入力読み込み タイマ割り込み メイン処理 PWM 処理 波形生成 波形生成 波形生成 どこかで重い処理が走ると波形生成が遅れたりする 割り込みで処理する変数は volatile にしておくとよい
音プログラミングの面白いところ バグが「聞こえる」 すごく高い音になったり、変なピコピコ音になったり… 高速化が「聞こえる」 波形生成部分の処理が重いと音程が低くなる。十分に高速だと音程が高くなる。 タイマ割り込み時間 処理時間オーバー 処理時間内
高速化? counter = (counter + 1) & 0b111; if とか重い 割り算・掛け算よりビットシフト digitalWrite,digitalRead,analogWrite,analogRead は小学生まで レジスタを直接使うとかなり早くなる コアな処理だけ高速化しましょう 保守できなくなる っていうかここまできたらソフトウェアの領域
 
PS/2 キーボードの制御 keyboard-keyboard
家にあまってるよね? PS/2 ご存知? ゲーム機じゃないよ! http://ja.wikipedia.org/wiki/PS/2%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BF
ピンの役割 VCC,GND  電源  5V CLK, DATA  クロックとデータ あと 2 つはマウスで使うのでキーボードの場合は不要 DATA スタートビット、データ (8) 、偶数パリティ、ストップビット 全 11 ビット CLK データが送られるときに 1->0 する(立下りエッジ) 10KHz-16.7KHz
Arduino から読み込む 割り込み機能を使う メインループでやって間に合わない場合 割り込みが間に合わない メインループの処理や、割り込み処理が重いとキーを取りこぼす リングバッファに詰めるなどの工夫 スキャンコード ->  ASCII コード変換 とりあえず手であわせちゃった。他のキーボードはどうなってるんだろう
作ってる流れ
 
おしまい JavaScript とかもやってます 機会があればそちらもいつか

MTM07で電子楽器を展示してきた