
【長期連載】C4爆弾型の目覚まし時計を作る②
前回からの続き
小さなことからコツコツと(西川きよし)
CounterStrikeシリーズに出てくる皆様お馴染みの重要アイテム、C4爆弾
これをモチーフにした目覚まし時計を作ってみようという企画です。
今回の目標はArduinoを使ってボタンを押すとテロリストが勝利する音声が流れる装置を作ることです。
とりあえず安定のGoogle先生に聞いてみます。
やっぱり偉大なる先人が居てくれました。大変助かりますありがとうございます。それでは上記サイトを参考にいってみましょう!
ああ、素晴らしいですね。
SDカードも何も使わずにArduino単体で音をならせる!
さて、手順を見ていきましょう。
①音声ファイルを作成
②Audacity(フリーソフト)で音声ファイルのフォーマットを
モノラル/8000Hz/符号なし8bitバイナリで保存
③バイナリファイルをC言語で読み込み可能な形式に変換
④Arduinoに書き込み
⑤Arduinoにスイッチとスピーカー接続
なるほど簡単?簡単だな。1つ1つやっていきましょう。
①音声ファイルを作成
Audacity(フリーソフト)をまずインストールしておきましょう。
youtubeにアップされてるCSのC4音声から爆発音を録音します。(CS:GOやCS1.6から直接録音するのがベストですが、今回は省きます)
こんな状態して、録音ボタンを押すと再生されている音が録音されます。
②Audacity(フリーソフト)で音声ファイルのフォーマットを
モノラル/8000Hz/符号なし8bitバイナリで保存
なるほど、とりあえず上記の指定形式でファイルを出力すればいいと。
よしよし、ここまでは順調や。簡単簡単
③バイナリファイルをC言語で読み込み可能な形式に変換
????
xxdコマンドってなんでしょう?ああ、Linuxコマンド…
残念ながら我が家にはLinux搭載のPC無いのですよ…
とりあえずバイナリファイルを上記みたいな0x(1バイト), のテキストに変換すれば良いという理解です。
xxdコマンドをWindowsで使う方法を調べるとbusyboxというソフトがhit。とりあえず使ってみる。
busybox -iオプション無いって!!ひどい!
仕方ないので、とりあえずバイナリを素直にテキストに変換。
コマンドプロンプトで
こんな感じでテキスト出力
よし、あとはマクロで力業や!
④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番ピンにスピーカーを接続します。で、結果これ
よし、成功!という事で、次のステップに進みたいと思います。
続く