見出し画像

【長期連載】C4爆弾型の目覚まし時計を作る②

前回からの続き

小さなことからコツコツと(西川きよし)
CounterStrikeシリーズに出てくる皆様お馴染みの重要アイテム、C4爆弾
これをモチーフにした目覚まし時計を作ってみようという企画です。

今回の目標はArduinoを使ってボタンを押すとテロリストが勝利する音声が流れる装置を作ることです。
とりあえず安定のGoogle先生に聞いてみます。

画像1

やっぱり偉大なる先人が居てくれました。大変助かりますありがとうございます。それでは上記サイトを参考にいってみましょう!

画像2

ああ、素晴らしいですね。
SDカードも何も使わずにArduino単体で音をならせる!
さて、手順を見ていきましょう。

①音声ファイルを作成
Audacity(フリーソフト)で音声ファイルのフォーマットを
 モノラル/8000Hz/符号なし8bitバイナリで保存
③バイナリファイルをC言語で読み込み可能な形式に変換
④Arduinoに書き込み
⑤Arduinoにスイッチとスピーカー接続

なるほど簡単?簡単だな。1つ1つやっていきましょう。

①音声ファイルを作成
Audacity(フリーソフト)をまずインストールしておきましょう。
youtubeにアップされてるCSのC4音声から爆発音を録音します。(CS:GOやCS1.6から直接録音するのがベストですが、今回は省きます)

画像3

こんな状態して、録音ボタンを押すと再生されている音が録音されます。

Audacity(フリーソフト)で音声ファイルのフォーマットを
 モノラル/8000Hz/符号なし8bitバイナリで保存
なるほど、とりあえず上記の指定形式でファイルを出力すればいいと。

画像4

よしよし、ここまでは順調や。簡単簡単

③バイナリファイルをC言語で読み込み可能な形式に変換
????

画像5

xxdコマンドってなんでしょう?ああ、Linuxコマンド…
残念ながら我が家にはLinux搭載のPC無いのですよ…

画像6

とりあえずバイナリファイルを上記みたいな0x(1バイト), のテキストに変換すれば良いという理解です。
xxdコマンドをWindowsで使う方法を調べるとbusyboxというソフトがhit。とりあえず使ってみる。

画像7

busybox -iオプション無いって!!ひどい!
仕方ないので、とりあえずバイナリを素直にテキストに変換。
コマンドプロンプトで

画像8

こんな感じでテキスト出力

画像9

よし、あとはマクロで力業や!

画像10

④Arduinoに書き込み
ということで、これをArduinoに書き込んでみます。

const unsigned char sample_raw[] PROGMEM = {
0x7f, 0x80, 0x80, 0x80, 0x81, 0x80, 0x80, 0x7f, 0x7f, 0x80, 0x7e, 0x80, 0x7f, 0x7f, 0x81, 0x7f, 0x81, 0x80, 0x80, 0x80, 0x7e, 0x7f, 0x7e, 0x80, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x7f,
0x80, 0x80, 0x7f, 0x80, 0x7e, 0x7f, 0x80, 0x80, 0x81, 0x7f, 0x81, 0x80, 0x80, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7d, 0x7f, 0x80, 0x81, 0x83, 0x80, 0x81,
・・・略
0x89, 0x81, 0x7a, 0x77, 0x7c, 0x7d, 0x80, 0x83, 0x86, 0x8c, 0x8c, 0x8a, 0x8d, 0x97, 0x9d, 0x96, 0x95, 0x9c, 0x9d, 0x9c, 0x9e, 0xa4, 0xa2, 0x9d, 0x94, 0x8f, 0x95, 0x92, 0x8b, 0x89,
0x8a, 0x8c, 0x87, 0x80, 0x79, 0x73
};
unsigned int sample_raw_len = 18576;
int sw_state = LOW;                  // switch state
                                    // HIGH: sw is closed
                                    // LOW:  sw is open

void setup() 
{
 pinMode( 2, INPUT );      //2pinを入力に設定
 pinMode(3, OUTPUT);
 TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
 TCCR2B = _BV(CS20);
 play();
}

void play() {
 for (int i = 0; i < sample_raw_len; i++) {
   OCR2B = pgm_read_byte_near(&sample_raw[i]);
   delayMicroseconds(125);
 }
} 


//{}の中の事を繰り返す
void loop() {
 sw_state = digitalRead( 2 );    //2pinの状態を読み取り、sw_stateに入力
 if ( sw_state == HIGH ) {   //もし、2pinがHIGHだったら、{}の中の事を実行する
 play();
 }
 else {        //ifの条件を満たしていなかったら{}の中の事を実行する
   digitalWrite( 13, LOW );   
 }
}

2番ピンを入力にして、スイッチをつないでいます。
3番ピンを出力にしてスピーカーを接続します。

⑤Arduinoにスイッチとスピーカー接続
回路図は…後々共有するとしてとりあえず上記のように2番ピンにスイッチをつないで、3番ピンにスピーカーを接続します。で、結果これ

よし、成功!という事で、次のステップに進みたいと思います。

続く

この記事が気に入ったらサポートをしてみませんか?