Arduino勉強会

2014/03/29からのアクセス回数 9261

音声合成モジュール

秋月から販売されている 音声合成モジュールATP3011F4-PU をATMegaボードに差して、動作を確認してみました。

ATP3011F4-PU.png

ちょっと乱暴ですが、圧電スピーカを以下の様に接続しました。

  • GND: 黒線
  • D6: 赤線

Arduino IDEを起動し、シリアルモニターを起動します。 改行の設定を「CRおよびLF」にし、ボーレートは9600 baudとします。

最初に、?を入力して音声合成モジュールにボーレートを調整させます。

この時">>"と返ってきます。

次に発生させたい言葉をローマ字で入力します。

「ohayou」

と入力すると、それっぽくスピーカら音声が出力され、シリアルモニターには、 "*>"と返ってきます。

SerialMonitor.png

音声合成モジュールの使い方

音声合成モジュールの使い方は、 音声合成LSI(ATP3011F4-PU)を使ってみます に詳しく紹介されています。

音声合成モジュールのピン配置を上記サイトの図を引用して説明します。

ATP3011-2.jpg

動作モード

音声合成モジュールには、4つの動作モードがあります。モードの設定は、PMOD0, PMOD1で行います。 未接続の場合には、セーフモードになっているみたいです。

動作モード意味PMOD0PMOD1
コマンド入力モード外部シリアルインタフェースを使ってメッセージを出力する11
セーフモード内部設定に関わらず、UART(9600bau)またはI2Cでのシリアル通信を使用する01
スタンドアロンモードPC0~PC3で指定されたプリセットメッセージを出力する10
デモモードプリセットメッセージを繰り返し出力する00

上記サイトのブレッドボードの配線を参考にデモモードを試してみました。

demo-mode.png

シリアル通信の指定

シリアル通信には、UART(9600bau)、I2C, SPIを使用できます。使用するシリアル通信は、SMOD0, SMOD1で設定します。 未接続の場合には、UARTが選択されるみたいです。

通信モードSMOD0SMOD1
UART11
I2C01
SPI(mode3)10
SPI(mode0)00

秋月のATMegaボードを使う

初心者にお薦めなのが、秋月のATMegaボードを使う方法です。ブレッドボードで何本も結線すると間違いも多くなります。

今回使用する部品は、以下の7点です。*1

parts.png

部品名型名値段
音声合成LSIATP3011F1-PU(ゆっくりな女声)850円
ATMEGA168/328用マイコンボード(I/Oボード)AE-ATmega328150円
丸ピンICソケット(28P)2227MC-28-0370円
ピンソケット (6P)C-0378420円x2 = 40円
ピンソケット (8P)C-0378430円x2 = 60円
プラスチックスペーサーP-01864100円/2 = 50円
スピーカーP-03285100円

組み立てると以下の様になります。*2

AE-Atmega328.png

音声合成モジュールを載せて動かしてみる

音声合成モジュールを載せて、動かしてみます。

シリアルモジュールと使って音声合成モジュールを接続します。

シリアルモジュールのピンは、右から以下のようになっています。

1DTR
2RX-I
3TX-O
4VCC
5CTS(GND)
6GND

Serial-module.png

シリアルモジュールとATMegaボードの接続は、以下の様につなぎます。

シリアルモジュールATMegaボード
GNDJ4-GND
VCCJ4-5V
RX-IJ1-1(TX)
TX-OJ1-0(RX)

スピーカーとの接続は、以下の様にします。

J1-6
GND

ATP-setting.png

動作確認

シリアルモニターを9600bauにセットして開きます。以下のように?を入力し、リターンキーを押すと

が表示されれば接続はOKです。

?
>>

つぎに好きな言葉をローマ字で入力してみましょう。ohayouと入力すると「おはよう」としゃべります。

ohayou

応答

*>

Arduinoとの接続

Arduinoと接続して、パソコンからローマ字を入力する場合には、音声合成モジュールを以下の様に設定します。

  • 動作モード:セーフモード(PMOD1=0, PMOD2=1)
  • 通信モード:UART(SMOD0=1, SMOD1=1)

さらに音声合成モジュールとArduino(Arduinoは単に電源供給とPCとの接続に使う)との接続は、以下の様にします。

Arduino音声合成モジュール
0 Rx2 RxD
1 Tx3 TxD

Arduino_safe-mode.png

音声メニューに挑戦

今度は、Arduinoから音声合成モジュールにじゃべらせてみます。

onsei-menu.png

Arduinoから音声モジュールにしゃべらせたいローマ字を出力するには、Serial.println関数を使います。 今回は、複数のボタンを使う代わりにつまみの大きな可変抵抗を使います。

ArduinoのA0を可変抵抗の真ん中のピンにセットし、両端をGNDと5Vに接続します。

音声モジュールとArduinoの接続を先ほどは、逆につなぎ替えます。

Arduino音声合成モジュール
1 Tx2 RxD
0 Rx3 TxD

スケッチは、以下の様にします。

int  led = 13;
int  tumami = A0;
int  sentaku = -1;

void setup() {
   Serial.begin(9600);
   pinMode(led, OUTPUT);
   mainMenu();
}

void mainMenu() {
  Serial.println("meinmenyudesu");
  delay(2000);
  Serial.println("eruediwo tenntousurubaaiha ichiwo");
  delay(4000);
  Serial.println("eruediwo syoutousurubaaiha niwo");
  delay(4000);
  Serial.println("mouichido menyuwo kikubaaiha sya-puwo");
  delay(4000);
  Serial.println("oshitekudasai"); 
}

void loop() {
  sentaku = map(analogRead(tumami), 0, 1023, 0, 3);
  switch (sentaku) {
    case 0:
      digitalWrite(led, HIGH);
      break;
    case 1:
      digitalWrite(led, LOW);
      break;
    case 2:
    default:
      mainMenu();
  }
  delay(1000);
}

つまみを変えるとLEDを点灯したり、消灯したり、音声メニューをしゃべらせたりできます。

ATMegaボードとArduino Pro Miniボードの接続

ブレッドボードで音声合成モジュールの設定が確認できましたので、 ATMegaボードとArduino Pro Miniボードをつないで、音声メニューを作ってみましょう。

ブレッドボードと音声合成モジュールの接続は、以下の様にします。

  • ブレッドボードの結線(両端の赤と青を接続しておく)
    ブレッドボード接続先
    ブレッドボード 赤(5V)Arduino Pro VCC
    ブレッドボード 青(GND)Arduino Pro GND
    ブレッドボード 赤(5V)可変抵抗-左
    ブレッドボード 青(GND)可変抵抗-右
    可変抵抗-中Arduino Pro A0
  • 音声合成モジュールの結線
    音声合成モジュール接続先
    J1-0RArduino Pro Mini TxD
    J1-1TArduino Pro Mini RxD
    J1-2(SMOD0)ブレッドボード 赤(5V)
    J1-3(SMOD1)ブレッドボード 赤(5V)
    J1-6スピーカ 赤
    J2-8(PMOD0)ブレッドボード 青(GND)
    J2-9(PMOD1)ブレッドボード 赤(5V)
    J4-5Vブレッドボード 赤(5V)
    J4-GNDブレッドボード 青(GND)

接続したら、こんな感じです。これで音声メニューのスケッチを動かしてみて下さい。

Mini-onsei-setting.png

音声温度計

次に、可変抵抗の代わりに温度センサーLM35DZを接続して、温度をしゃべる「音声温度計」を作ってみましょう。

LM35DZのピンを底からみたピンの配置をデータシートから引用します。

LM35DZ.png

LM35DZのラベルを見て、左のピンが5Vになるようにブレッドボードに差します。

onsei-ondokei.png

以下のスケッチを使ってLM35DZの電圧から温度を読み上げるようにします。

int  lm32 = A0;

void setup() {
   Serial.begin(9600);
   Serial.println("onsei ondokeide_su");
   delay(2000);
}

void loop() {
  float t = (float)analogRead(lm32)/1023*500.0;
  Serial.print("imano onndowa <NUMK VAL=");
  Serial.print(t, 1);
  Serial.println(">dode_su");
  delay(3000);
}

温度の部分を以下の様にすることで、数字を正しく読み上げます。

<NUMK VAL=温度>

コメント

選択肢 投票
おもしろかった 38  
そうでもない 0  
わかりずらい 2  

皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。

スパム防止に画像の文字列も入力してください。

  • 坪本さんのご指摘でJ1-1(RX)は、J1-0(RX)の誤りでした。お詫びして訂正します。 -- 竹本 浩? 2014-07-26 (土) 18:41:54
  • ATMegaボードとArduino Pro Miniボードの接続で、音声合成モジュールの結線を修正 -- 竹本 浩? 2014-08-10 (日) 14:26:06

(Input image string)


*1 すべて秋月で購入可能
*2 他の部品を追加すると単体で動くArduinoになります

添付ファイル: fileLM35DZ.png 690件 [詳細] fileonsei-ondokei.png 727件 [詳細] fileMini-onsei-setting.png 730件 [詳細] fileonsei-menu.png 848件 [詳細] fileArduino_safe-mode.png 769件 [詳細] fileATP3011-2.jpg 712件 [詳細] filedemo-mode.png 687件 [詳細] fileparts.png 603件 [詳細] fileAE-Atmega328.png 637件 [詳細] fileATP-setting.png 620件 [詳細] fileSerial-module.png 623件 [詳細] fileSerialMonitor.png 646件 [詳細] fileATP3011F4-PU.png 705件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-12-05 (火) 04:47:39 (9d)
SmartDoc