古い電話機をSparkFun Arduino Pro Miniで宝探しクルーシステムに改造
必要な部品と材料
| 部品 | 数量 |
|---|---|
| SparkFun Arduino Pro Mini 328 - 5V/16MHz | 1 |
| MP3/WAVトリガーボード | 1 |
| 古い電話機 | 1 |
| ブレッドボード(汎用) | 1 |
| ジャンパーワイヤ(汰用) | 1 |
| SparkFun フックアップワイヤ | 1 |
| microSDカード | 1 |
必要な工具と機器
- はんだごて(汎用)
- ヒートガン(SparkFun製)
このプロジェクトについて
古い電話機を宝探し(スキャベンジャーハント)のクルーシステムに変身させる手順を紹介します。
ステップ1: キーパッドの行と列の特定
電話機を分解してキーパッドを取り出します。キーパッドは行と列のマトリックスでキー入力を検出します。このページに、テスターの導通モードを使ってキーと行・列の対応を調べる手順が詳しく載っています。筆者のキーパッドは以下のような構造でした。



キーパッドの基盤パターンが見えていれば、どのピンがどのキーに対応するか簡単にわかります。残念ながら筆者のキーパッドはピンが綺麗な行列になっていなかったため、2枚目の画像のようにマトリックスを作成して整理しました。丸印の数字がキーパッドのピン番号、マトリックス内の数字がキー、枠囲みの「I/O」がArduinoのピン番号です。ピンマッピングをメモし、各キーパッドピンをArduinoピンに割り当てます。このキーパッドは必要以上にピンが多い変わった構造ですが、問題ありません。
3枚目の画像は、実際に使用するキーだけを抜き出した簡略マトリックスです。ここでほぼ行列らしくなっています。コードでは存在しないキーの位置をA、B、C、Dというプレースホルダで埋めています。
ステップ2: キーパッドピンへの配線延長
キーパッドピンをブレッドボードに繋ぎやすくするため、必要なピンに配線をはんだ付けします。このプロジェクトでは全キーを使う必要はないため、以下の画像は使用するピンのみを示しています。4桁のパスコードを使うため、5キー(*キー含む)だけで足ります。

ステップ3: 音声ファイルの準備
このプロジェクトでは、クルーの音声にNatural Readersの「Peter」という合成音声を使用しました。音声ファイルをダウンロードしてください。次にモールス信号の音声を用意します。オンラインのモールス信号生成ツール(SCPhillips.comのものを使用)で作成し、ダウンロードします。さらにキーパッド押下時のビープ音も用意します。
Audacityは音声編集に最適なツールです。モールス信号と音声ファイルを結合し、ビープ音を短い単一のビープに編集できます。


Audacityでプロジェクトを保存し、各トラックを別々にMP3でエクスポートします。Audacityを初めて使う場合は、LAME MP3エンコーダのインストールが必要かもしれません。
重要:このMP3トリガーボードで再生するには、ファイル名とフォルダ構成を正しくする必要があります。各MP3ファイルは001、002...という名前で、MP3ボードのトリガーピン1〜9に対応させます。また、ファイルはSDカード上の01というフォルダ内に配置しなければなりません。 他のMP3トリガーボードならもっと柔軟に扱える場合があります。
ステップ4: ライブラリのダウンロードとコードの準備
このプロジェクトにはKeypadライブラリとPasswordライブラリが必要です。これらをダウンロード・インストールし、プロジェクトのコード(後述)をダウンロードします。パスコードを任意に設定し、キーマトリックスを自分のキー配置に合わせて書き換えてください。
ステップ5: すべてを接続して収納
電話機の内部を空けて、新しい部品を詰め込みます。モバイルバッテリーも一緒に入れられるかもしれません。





このプロジェクトが気に入ったら、筆者の他のプロジェクトもチェックしてみてください!
スケッチ
#include <Password.h> //https://www.arduino.cc/playground/uploads/Code/Password.zip
#include <Keypad.h> //https://www.arduino.cc/playground/uploads/Code/Keypad.zip
Password password = Password( "7365" );
const byte ROWS = 4; // 4行
const byte COLS = 3; // 3列
// キーマップ定義
char keys[ROWS][COLS] = {
{'4','5','6'},
{'7','8','A'}, // "A"はプレースホルダ。自分のキーパッドにそんなボタンはない
{'B','2','3'}, // "B"はプレースホルダ
{'*','C','D'} // "C"と"D"はプレースホルダ
};
byte rowPins[ROWS] = { 7,5,3,8 }; // キーパッドの行をこれらのArduinoピンに接続
byte colPins[COLS] = { 6,4,2 }; // キーパッドの列をこれらのArduinoピンに接続
const int dial = 13; // MP3トリガーボードへのデジタルピン
const int morse = 12; // MP3トリガーボードへのデジタルピン
// キーパッドオブジェクト作成
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
pinMode(dial, OUTPUT);
pinMode(morse, OUTPUT);
digitalWrite(dial, HIGH); // MP3ボードはアクティブローなので、最初はHIGH
digitalWrite(morse, HIGH); // MP3ボードはアクティブローなので、最初はHIGH
Serial.begin(9600);
keypad.addEventListener(keypadEvent); // キーパッドのイベントリスナー登録
}
void loop(){
keypad.getKey();
}
// 特殊なイベント処理
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("Pressed: ");
Serial.println(eKey);
digitalWrite(dial, LOW); // ダイヤルビープ音声再生(各キー押下時)
delay(50);
digitalWrite(dial, HIGH);
switch (eKey){
case '*':
checkPassword();
break; // *キーをエンターキーとして扱う
default:
password.append(eKey);
}
}
}
void checkPassword(){
if (password.evaluate()){
Serial.println("Success");
password.reset(); // 入力クリア
digitalWrite(morse, LOW); // クルー音声再生
delay(50);
digitalWrite(morse, HIGH);
}else{
Serial.println("Wrong");
password.reset(); // 次の試行のためにクリア
}
}
回路図
製造プロセス
- Arduino UNOとMAX7219で作るUFOアタックゲーム – レトロなドットマトリクスシューティング
- DIYクラウドコスチューム: LEDストリップ、Arduino Nano & SparkFunパーツで光る雲に
- 3D RGB アルドゥクロック:Bluetooth対応LED時計(RTC内蔵)
- 川の健康を見守る:Arduinoベース水質監視システム「MyRiver」
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- Arduinoとジョイスティックでインタラクティブゲーム – LEDフィードバック付き
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduinoで作る自律走行ミニローバー
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き