なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Arduinoと音声合成ICでしゃべる温度湿度計

Posted by arms22 on 2014年11月27日 0  0

久しぶりのArduinoネタです。Arduinoと音声合成IC「AquesTalk pico」を使ってしゃべる温度湿度計を製作しました。

IMGP0189

LCDは使わずボタンを押すと音声で温度と湿度を通知するという仕組みにしてみました。取りあえず動作確認用にブレッドボードに組んで余っていたMDF板に固定。



動いている様子。若干語尾が聞き取り辛いですが「22.0度、70%なり」と言っています。


ハードウェア・回路図



しゃべる温度湿度計回路図

メイン基板はArduino Duemilanove、音声合成ICにATP3010、温度湿度センサはSHT11、スピーカ駆動に秋月のD級アンプモジュールを使用しています。

ArduinoとATP3010はI2Cで接続します。ATP3010の4番端子を10K抵抗でプルダウンさせることでI2Cで通信ができます。SCL/SDAは10K抵抗でプルアップします。ATP30xxは声種が異なるものがいくつか販売されており、外部クロックが不要なICもあります。その場合16MHzの発振子は接続不要です。

SHT11はI2Cのような通信方式を採用していますが互換性がありません。Arduinoの2番にDATA、3番にCLKを接続します。DATAは10K抵抗でプルアップします。

回路図上ではD級アンプモジュールは省略しています。可変抵抗の出力端子をアンプモジュールのIN+に接続し、IN-はGNDに接続します。


ライブラリ


Arduino用 音声合成LSIライブラリ
http://blog-yama.a-quest.com/?eid=970151

Arduino Playground - Bounce
http://playground.arduino.cc/Code/Bounce

Arduinoで遊ぼう - デジタル温度・湿度センサー「SHT11」
http://arms22.blog91.fc2.com/blog-entry-489.html

Sleepライブラリ - github
https://github.com/arms22/Sleep


スケッチ



#include <AquesTalk.h>
#include <Wire.h>
#include <Sensirion.h>
#include <Bounce2.h>
#include <Sleep.h>

// 端子定義
const uint8_t dataPin = 2;
const uint8_t clockPin = 3;
const uint8_t speakPin = 6;

// 温度・湿度・露点温度格納用変数
float temperature;
float humidity;
float dewpoint;

// SHT1xデバイス
Sensirion tempSensor = Sensirion(dataPin, clockPin);

// 音声合成デバイス
AquesTalk atp;

// 発声ボタン
Bounce spkbtn;

void setup()
{
  // シリアルポート初期化
  Serial.begin(9600);

  // ボタン初期化
  pinMode(speakPin, INPUT);
  spkbtn.attach(speakPin);
  spkbtn.interval(20);
}

void loop()
{
  String str;

  spkbtn.update();

  if(spkbtn.fell())
  {
    // 温度・湿度・露点温度を計測し、変数に格納する
    tempSensor.measure(&temperature, &humidity, &dewpoint);

    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.print(" C, Humidity: ");
    Serial.print(humidity);
    Serial.print(" %, Dewpoint: ");
    Serial.print(dewpoint);
    Serial.println(" C");

    str = "<NUMK VAL=" + String(temperature, 1) + " COUNTER=do> ";
    str+= "<NUMK VAL=" + String((int)humidity) + " COUNTER=pa-se'nto>nari";
    Serial.println(str);

    // 発声開始
    atp.Synthe((const char*)&str[0]);

    // 自己発熱で精度が落ちないよう十分な時間を待って次の計測を行うこと(4秒以上)
  }

  sleep(10);
}



PAM8012使用2ワットD級アンプモジュール
http://akizukidenshi.com/catalog/g/gK-08217/

音声合成LSI ATP3011F4-PU(かわいい系の女声)
http://akizukidenshi.com/catalog/g/gI-05665/

音声合成LSI 「AquesTalk pico LSI」
http://www.a-quest.com/products/aquestalkpicolsi.html

Ads by Google

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。