ガイアメモリで遊ぼう!〜Arduino & Raspberry Piでガイアメモリを制御〜

th_gaia_memory

お金の工面のためにメルカリ出品物を探していたときに、自分のおもちゃ箱の底から発掘された、『仮面ライダーW』のコレクトアイテム、ガイアメモリ。

「これはいくらで売れるかしら」と思いながら動作確認していたときに、思いついてしまいました。「これをラピロに組み込められれば、ラピロに必殺技音声を喋らせたり、ラピロを変身させたりできるのではないのか?」と。

思いついてしまったからには止められないので、ガイアメモリの音声基板のラピロ組み込みにチャレンジしてみたいと思います。

あ、XBeeドア開閉センサにつきましては、ただいま、どれだけ電池がもってくれるかの検証中ですので、いましばらくお待ちください。

 

まず手持ちのガイアメモリを確認。こんな素敵なサイトにまとめられていました。

こちらによると、自分が持っているものは

  • カプセルガイアメモリ第2弾 アクセル
  • カプセルガイアメモリ第2弾 モモタロス
  • カプセルガイアメモリ第3弾 クウガ
  • カプセルガイアメモリ第4弾 トライアル

のようです。そして第2弾→第3弾で音声基板が大きく変更になっているようです。

まあ、兎にも角にも分解してみましょう。

 

!!注意!!

一度分解したガイアメモリを元に戻せる保証はありませんので、大事なガイアメモリは今回の工作に使わないことをおすすめします。実際、私の方で試したところ、第2弾の方は元に戻せる形で基板を取り出せましたが、第3弾・第4弾の方はガイアメモリの外装を破壊しなければ基板を取り出せませんでした。

 

取り出しのとき結構ネジが固かったりしますので、そのときはKURE5-56とかを吹っかけると、幾分外しやすくなります。

で、取り出してみた結果がこちらになります。

th_gaia_memory_5

左が第2弾、右が第3弾・第4弾の基板です。前者はずいぶんシンプルで、逆に後者はずいぶん複雑な基板になっていますね。ジャンパ切り替えによる音声変更も可能ですが、自分の手持ちでは

  • クウガ⇄リュウタロス⇄ウラタロス⇄キバ
  • トライアル⇄サイクロンジョーカーエクストリーム

の切り替えだったので、特に変更はせずにそのまま使います。

 

Arduinoで制御

まずはArduinoでサクッと試してみたいと思います。電源にはボタン電池LR44(1.5V)2個が直列で使われていたので、3.3V系のArduinoを使えば問題ないでしょう。

ガイアメモリの物理的な接触ボタンを電子制御に置き換えたいので、素直に考えたらリレースイッチへの置き換えになるかもしれませんが、回路を見たところ、そんな大層なことはしなくても大丈夫そうです。

th_gaia_memory_6

第2弾基板の方はこんな感じで。

th_gaia_memory_7

第3弾・第4弾基板の方はこんな感じで、Arduinoのデジタル出力(上の写真では第2ピン)のHIGH/LOW切り替えで簡単に音を鳴らすことができました。サンプルソースは以下になります。(初期状態から)キーボード入力1〜4で鳴らす音声を選択します。

#define VOICE_PIN 2

void voice(int num){
  for(int i=0;i<num;i++){
    digitalWrite(VOICE_PIN,HIGH);
    delay(17); // Type 2 ... 13, Type 3 ... 17
    digitalWrite(VOICE_PIN,LOW);
    delay(17); // Type 2 ... 13, Type 3 ... 17
  }
}

void setup() {
  Serial.begin(57600);
  pinMode(VOICE_PIN, OUTPUT);
  digitalWrite(VOICE_PIN, LOW);
}

int com = 0;
void loop() {
  if(Serial.available()){
    com = Serial.read();
    switch(com){
    case '1': Serial.println("Voice 1"); voice(1); break;
    case '2': Serial.println("Voice 2"); voice(2); break;
    case '3': Serial.println("Voice 3"); voice(3); break;
    case '4': Serial.println("Voice 4"); voice(4); break;
    }
  }
  delay(10);
}

少し注意が必要なのは、ガイアメモリが基本的にボタンを押すたびに音声1→音声2→音声3→音声4→音声1→…とループする仕組みになっていることです。なので、いきなり音声3を鳴らそうと思うとボタンを3連打しなくてはならず、どうしても音声1と音声2の音が一瞬入り込みます。また、音声3を鳴らしてから時間を空けずにまた3連打すると、こんどは音声2が鳴る、ということになります。このへんは、自分の用途に応じてうまく運用してください、という感じです。

 HIGH/LOWの切り替え(=ボタンの連打)時間間隔は、基板によって異なるようですが、20msぐらい空ければ大丈夫でしょう。何秒空ければ音声1に戻るかは、すみません、未調査です。

 

Raspberry Piで制御

さて、続いてRaspberry Piから制御してみます。といっても、同じコードをPythonで書くだけですね。ただ。PythonのGPIO制御ライブラリが入っているかどうかだけ、確認が必要です。

$ sudo apt-cache –names-only search gpio
python-rpi.gpio – Python GPIO module for Raspberry Pi
python3-rpi.gpio – Python 3 GPIO module for Raspberry Pi

こんなんが出ればOKです。なければ、

$ sudo apt-get install python-rpi.gpio

でインストールしましょう。

先ほどの音声制御ピン(Arduinoの第2ピンに挿していたもの)をRaspberry PiのPin 11(GPIO17)に繋いで、3.3VとGNDを繋いでやればOKです。以下、サンプルソースです。

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)

def voice(num):
  for i in range(num):
    GPIO.output(11,True)
    time.sleep(0.017)
    GPIO.output(11,False)
    time.sleep(0.017)

while True:
  i = int(raw_input())
  if i == 1:
    voice(1)
  elif i == 2:
    voice(2)
  elif i == 3:
    voice(3)
  elif i == 4:
    voice(4)

GPIOの制御にはroot権限が必要なので、上記のソースはsudoで実行するようにしましょう。うまく鳴ってくれない場合は、sleepの時間感覚を少し長めにしてみてください。

 

ガイアメモリの制御方法は以上です。とても簡単。気合いのある人は、第3弾・第4弾以降の基板にあるジャンパ切り替えによる音声切り替えも、電子制御してみてもいいかもしれません。

次回はラピロにガイアメモリを組み込むとどうなるかをご紹介します。個人的には、過去最高に無駄な(=過去最高に楽しい)工作になりました。