TOP > カテゴリ > ロボット・電子工作・マイコン >

音声合成LSIの使い方 - I2C接続編 [Arduino]

テキストを音声に変換する「音声合成LSI」のI2C接続版です。

初めての方は初級編を先にご覧ください。

使用部品・材料

総額で約1,860円です。(Arduino本体の値段を除く)

※初級編と比べて4.7kΩの抵抗が2つ増えています。それ以外は同じです。

部品/材料値段備考
サンハヤト SAD-101 ニューブレッドボード¥500Amazon.com
音声合成LSI ATP3012R5-PU(小型ロボットの音声)¥900秋月電子の通販コード(I-11517)
スピーカー 8Ω8W¥100秋月電子の通販コード(P-03285)
トランジスター2SC1815Y(60V150mA)(10個入テーピング品)¥80秋月電子の通販コード(I-04268)
両端ロングピンヘッダ 1×40 (40P 6.1)¥50スピーカーの端子接続用。このピンヘッダはサイズ少し大きいのでジャンパーワイヤーで代用した方が良いかもです。

秋月電子の通販コード(C-09056)
絶縁ラジアルリード型積層セラミックコンデンサー0.1μF50V2.54mm(10個入)¥100秋月電子の通販コード(P-00090)
クリスタル(水晶発振子)16MHz¥30秋月電子の通販コード(P-08671)
絶縁型ラジアルリード型積層セラミックコンデンサー22pF50V±5%2.54mm(10個入)¥100秋月電子の通販コード(P-04060)
カーボン抵抗器数円10kΩ(1個)、4.7kΩ(2個)、1kΩ(1個)を使用。

配線図

通信モードを「I2C接続」にする為にSMOD1をHIGH、SMOD0をLOWにしています。I2C接続用のプルアップ抵抗には4.7kΩを使用しています。

次は公式データシートより(atp3012_datasheet.pdf)

ピン配置

クロックモード

動作モード

通信モード

回路図

スケッチ(プログラム)

システムを起動すると「こんにちは。」「おはよー」「お腹すいたー。」と繰り返し発声します。

#include <Wire.h>

// デバイスアドレス(スレーブ)
uint8_t DEVICE_ADDRESS = 0x2E;

// メッセージ配列
String s[] = {
  "konnitiwa.\r",    // こんにちは。
  "ohayo-\r",        // おはよー
  "onakasuita-.\r"}; // お腹すいたー。

// メッセージ数
int count = 3;

// メッセージのカウンタ用
int index = 0;

void setup() {
  // マスタとしてI2Cバスに接続する
  Wire.begin();
}

void loop() {
  // メッセージをデバイスに送信
  Wire.beginTransmission(DEVICE_ADDRESS);
    for (int i = 0; i < s[index].length(); i++) {
      Wire.write(s[index][i]);
    }
  Wire.endTransmission();

  // 次のメッセージを発声できるまでループする
  while(true){
    // デバイスへ1byteのレジスタデータを要求する
    Wire.requestFrom(DEVICE_ADDRESS, 1);    

    // 「>」(次の発声が準備OK)ならばループを抜ける
    while(Wire.available() == 0) {}
    uint8_t c = Wire.read(); 
    if(c == '>')  break;
    delay(10);
  }

  index++;
  
  if(count <= index){
    index = 0;
  }
  
  delay(1000);
}

音声合成LSIには一度に最大128byteまで送信できますが、ArduinoのWireでは一度に送信できるバッファは32byte迄です。33byte以上を送信する場合は

  Wire.beginTransmission
    Wire.write();
  Wire.endTransmission

を複数回に分けて実行してください。





関連記事



公開日:2017年09月01日
記事NO:02551