N.Yamazaki's blog

主に音声合成について思ったことを書いてみようと思います。
音声合成LSIで「オリジナルの音声時計」を作ろう!- その2 ハードウェア編
前記事では何を作るかで終わってしまいましたが、今回は「オリジナル音声時計」のハードをウェアを組み立てます。

■用意するもの

[パーツ一式]

使用する電子部品は次のとおりです。
基本、秋月電子で入手できます。なお、スピーカーにφ20mmを使うならマルツかAitendoで売ってました。

■パーツリスト
  • IC1    AVRマイコン    ATmega328P-PU
  • IC2    RTCモジュール    AE-RX-8025NR
  • IC3    音声合成LSI    ATP3011F1-PU(他の声種でもOK)
  • Q1    セラロック    muRata 8MHz
  • R1    抵抗    1MΩ
  • R2    抵抗    1KΩ
  • C1    コンデンサ    0.1uF
  • C2    コンデンサ    0.047uF
  • C3    コンデンサ    0.1uF
  • C4    コンデンサ    22uF
  • T1    トランジスタ    2SC1815または同等品
  • S1    振動(傾斜)スイッチ 丸型(AT-407)
  • -    ICソケット 28P 300milタイプ 2個
  • SP    スピーカー  8Ω (LOTTORPで使うならφ20mm)

ほかに、次も必要です。
  • 基板(専用基板またはユニバーサル基板)
  • ケース(IKEAの時計「LOTTORP」¥299で購入。任意のケースでも可
  • プッシュスイッチ 2個 (ケースにあれば不要)
  • 電池ケース 乾電池2本用 (ケースにあれば不要)
  • Arduiino Uno
  • ブレッドボード

Arduiino Uno、ブレッドボードはブートローダーやスケッチの書き込みに使います。

現在のLOTTORPは、基板にスイッチと電池の電極が一体化されサイズも奥行きが8mmほど短くなってます。残念ながら今回作成した専用基板は使えません。今回使用したLOTTORPは2011年のロットでした。パネルのデザインも違うので区別できます。 比較画像 この古いほうもネットではまだ入手できるようです。

■ブートローダーの書き込みとFuse設定
この設定にセラロックを使いますので、半田付けの前にこの作業を行っておきます。

ブートローダーの書き込みは、新品のAtmega328P-PUをArduino Unoで使える(スケッチを書き込める)ようにするための儀式です。Fuseは、クロックソース選択などAtmega328P-PUデバイスの基本動作を規定するもので、デバイスのプログラムとは別の領域に設定を書き込みます。今回は乾電池2本で動かすために、Arduino Unoのデフォルトとは異なる値を設定する必要があります。

1. boards.txt 編集
Fuseの値をカスタマイズする方法はいくつかありますが、今回はArduino IDEの設定ファイルの「boards.txt」を一部追記する方法で行います。boards.txtは、通常、C:¥Program Files¥arduino¥hardware¥arduino¥avr にあります。Arduino Unoのセクション全体をコピーして次のように修正します。(今回使用したArduino IDEのバージョンは 1.6.1)


[boards.txt](一部抜粋)

2. ブレッドボード配線
boot_write_brd
図のように配線します(オレンジの部品は8MHzセラロック)。
(2015/04/27 ピン接続がずれてた間違いを修正)

3. 書き込み
  1. メニュー : ファイル > スケッチの例 > ArduinoISP
  2. メニュー : ファイル > マイコンボードに書き込む
  3. メニュー : ツール > ボード > Yukkuri Clock
  4. メニュー : ツール > 書き込み装置 > Arduino as ISP
  5. メニュー : ツール > ブートローダを書き込む
ステータスが「ブートローダーの書き込みが完了しました」になればOK。
これでスケッチが書き込めるようになります。

Atmega328PにはBODという電源電圧が規定値より下がるとソフトリセットをかけて暴走を防ぐための機能がついています。Arduino Unoは5V動作が前提なので、この電源電圧の規定値ガ2.8Vとなっているため乾電池2本動作で使うには高すぎます。そこで、今回はBODの機能を切るようにFuse設定を行います。


■ハードウェアを組み立てます

・基板の半田付け
RTCモジュールに付属の細ピン接続します。RTCモジュールのジャンパーJ1/J2/J3すべてオープンのままです。
基板にパーツをすべて半田付けします。音声合成LSIとATmega328P-PUは差し替えの可能性があるのでICソケットを使います。
注意点は、セラロックはATmega328P側に取り付けること。また、振動スイッチは、リードを2-3mm浮かせて半田付けして、その後、45度程度RTC側に傾けます。

[基板にパーツを実装したところ]

・プッシュスイッチ/スピーカー/電池ケースの配線
基板の端子INTのS(SET)とG(GND)間と、U(UP)とG(GND)間に2つのプッシュスイッチを配線します。
次に、基板の端子SPにスピーカーを配線します。極性は気にしなくてかまいません。
最後に、基板の端子BATTの+に電池ケースのプラス。もう一方にマイナスを配線します。

・LOTTORPをケースに使う場合(ロット違いに注意:上記「用意するもの」参照
LOTTORPの分解は、前面の薄いパネル(接着されている)をカッター等でゆっくり剥がせば、4本のネジが出てくるので、あとは簡単にバラせます。基板につながっている配線をすべて外し、ネジ止めされている基板も外します。LCDやLEDパネルはあとでスペーサーとして利用するので捨てません。使わないのは元の基板だけです。

ケースと基板の配線は、次のように配線しました。
    スイッチ:赤->GND 黄->SET 茶->UP
    電池:    赤->+  黄->GND

スピーカーは、微妙に収まらなかったのでケースのツメをカットして装着。その後、接着剤で固定します。
また、液晶の電極と基板の間をテープ等で絶縁します。当初、基板のランドが一部重なってLCDの一部が表示されてしまったので・・・。LED端子は未接続です。カットせずに将来のハード改良のためそのまま残します。


[ケースに配線後]

このあとは、ATmega328Pにスケッチを書き込んだ後、ケースを元通りに組めば完成です。
その3 ソフト編につづく

■LINK
音声合成LSIで「オリジナルの音声時計」を作ろう!

■参考
『簡単!ATmega328Pにブートローダを書きこむ(第2弾)』
http://blog-yama.a-quest.com/?eid=970164

 
| 電子工作 | 18:59 | - | - |
音声合成LSIで「オリジナルの音声時計」を作ろう!- その1 概要編
■オリジナルの音声時計
自由にカスタマイズ可能なしゃべる時計、オリジナルの音声時計をつくってみよう!その製作記事です。

就寝中に「今何時?」って時、目を開けずに音声で時刻がわかるのはとても便利です。
いまどきトーキングクロックなんて珍しくないのですが、これは自由にカスタマイズできるのがミソです。たとえば、記念日や曜日や時間帯に応じて、オリジナルメッセージを発声させられます。ちなみに私は朝の時間帯は曜日に応じたゴミ収集のお知らせと、記念日にはメッセージを出すようにして使ってます。

世界に1つだけのオリジナルのトーキングクロック、プレゼントにも良いんじゃないかな。

   

■特徴
  • プログラムはArduino IDEのスケッチとして記述し、後から簡単に変更できる。
  • 老眼にやさしいDIPサイズの部品だけで構成し、表面実装部品は使わない。
  • 就寝時に合わせた小さめの音量です。
  • 声種の変更は、音声合成LSIの差し替えで可能です(4種類)。
  • アラーム機能で、特定の日時に自動的にメッセージを出力
  • 低消費電力。発声頻度にもよるけど、半年-1年くらい電池交換不要
  • ハードのカスタマイズもできる。圧力センサー使ったり、LEDを光らせたり

■ハードウェア・回路図


回路図(クリックで拡大)

メインコントローラーはATmega328P-PU。ここにArduinoブートローダとオリジナルのスケッチを書き込みます。電池2本で動かすため、クロックは8MHzに下げて使います(Unoは16MHz)。

リアルタイムクロック(RTC)はDIPのものが手にいらなかいので、秋月電子のDIP化モジュールを使います。
音声合成LSIはATP3011XX−PU(XXは任意)。ジャンパ切り替えでATP3012XXも使えるようにしてますが、クロックが10Mと若干高めなので乾電池2本での動作は厳しいかも。Q2の発振子はATP3012XX用なのでATP3011XXでは不要です。
振動スイッチ(S1:TILT SW)は、通常OFFの状態で、ONで発声のトリガとします。

コントローラーとRTC、音声合成LSI間の通信はI2Cで行います。I2Cのプルアップは、ATmega328Pの内部プルアップを使いますので、RTCのジャンパーによるプルアップは不要です。

音量は小さめで良いので、アンプICなどは使わないトランジスタ1つの簡易回路です。

また、時刻設定用にスイッチ2つ使います。端子INTのUPとSETに接続し、もう片方はGNDに接続します。
IO9-IO11は拡張用のGPIOポートです。

■基板


基板写真

ユニバーサル基板でも良いのですが、今回はIKEAの時計「LOTTORP」のケースにぴったり収めたかったのでElecrowに発注した専用基板を使いました。あまった基板をプレゼントします。詳細は後ほど。


前に同様のものを作ったとき(ニコ動)、TQFP版のATmega1つにコントローラとAquesTalk picoエンジンを詰め込んだため、同じものが欲しいという意見を多数いただにもかかわらずアクエストのビジネス的に不可能でした。そこで今回は誰でも作れるをコンセプトにしてます。

ハードウェア編につづく

■LINK
| 電子工作 | 19:10 | - | - |
音声テスターを作ってみた(その2 ソフト編)
音声テスターを作ってみた(その1 ハード編)のつづきです。
制御用マイコン(ATmega328P)にファームウェアを書き込んで動作させるまでの内容です。


Arduino UnoとAVRISP mkII

開発環境

必要なもの
統合開発環境は、ArduinoIDEでも作れますが、消費電力を下げるために動作クロックを1MHzにしたかったので、AVR Studio5.0で開発しました(Arduino環境ではフューズ設定を変えられない)。
ATmega328Pへのファーム書き込みは、上記写真にあるようなAVRISP mkIIとArduino Unoの組み合わせを使いました。この組み合わせはUSBで電源もとれるので便利です。
あと、何か動作に問題があった時用にオシロスコープはあったほうが良いです。というか無いとトラブルの解決は厳しいかと...

プログラム
TalkingTester.c  ←ダウンロードできます。

main()
起動音の出力後、約1秒間隔でテスターから値を取得して(72行)、AquesTalk Pico LSIに転送します(83行)。なお、前回と同じ値の場合は読み上げしません(82行)。また、テスターの応答がないなど何らかのエラーの場合は、パワーダウンします(89行)。

my_delay()
約1秒のディレイルーチンです。省電力化のためにウォッチドッグタイマーを利用してスリープ状態で待機します。

Init()
初期化ルーチンでは、UART、I2Cの周辺回路のパラメータを設定しています。

GetData()
テスターから測定値を読み込みます。任意の1バイトとして'¥r'をテスターに向けて送信します(158行)。その後、'¥r'が来るまでのバイト列を読み込みます(161行)。

Str2Cmd()
テスターの応答を、AquesTalk pico 用の音声記号列に変換しています。数値部分はNUMKタグを利用して数値を桁読みさせます(217行)。その後、単位を付与します(227行)。
なお、計測値がマイナスの時は先頭に"mainasu/"をつけます(214行)。例えば、"DC  3.306   V"という応答の場合には、"<NUMK VAL=3.306>bo'ruto" という文字列を生成します。

Speak()
音声記号列をAquesTalk picoに送信します。制御用マイコンとAquesTalk pico との通信にはI2Cを用います。送信に先立ち、Ready状態を示す'>'が返るかチェックし(251行)、'>'が返るのを確認してから、音声記号列を送信します(256行)。


ファームの書き込み
  1. Arduino UnoのAVRマイコンを今回ファームを書き込むマイコン差し替えます。
  2. Arduino Unoに、USBを接続して電源を供給(USBは、データ転送には使いません)。
  3. Arduino Unoに、AVRISP mkII を接続。
  4. プログラムをビルドして生成したHEXファイルをAVR Studioの"AVR Programming"で書き込み。
  5. フューズバイトを、次のように書き込み(内蔵RCクロック8MHz、8分周)。EXTENDED = 0xFF、HIGH = 0xD7、LOW = 0x62
  6. ファームを書き込んだAVRマイコンを音声テスターの基板に差し替えれば、完成!
          AVR studioの使い方や、細かい書き込み方法については割愛。


動作チェック
  1. テスターに接続しない状態で、電源(3V)を供給します。
  2. 「ポン! テスターの応答なし」と聞こえればOK。
  3. その後、テスターと接続し、テスターの電源をONにして
  4. 音声テスター基板のリセットボタンを押せば、順次測定値が読み上げられます。

音声テスター基板

ファームのプログラムを変更すれば、読み上げ間隔や、読み上げ条件(今回は前回と同じ値の場合は読みあげないようにした)、メッセージの内容などを好きなようにカスタマイズできますね。


LINK

  音声テスターを作ってみた(その1 ハード編)
  テスターMAS-345の通信仕様
  紹介動画 音声テスター youtube   ニコ動
  AquesTalk pico LSI ATP3011F4-PU

| 電子工作 | 16:20 | - | - |
音声テスターを作ってみた(その1 ハード編)
デジタルマルチメータ(テスター)の計測数値を音声で読み上げるようにしてみました。
電圧を測る時に視線をテスターに移した途端、手元がズレてショートなんてことが防げるでしょう。




音声合成には AquesTalk pico LSI(ATP3011F4-PU)を使います。
初期版のATP3010F4でもセラロックなど外部クロックをつければOKです。
その他に制御用のマイコンが必要です。テスターからUARTで取り込んだASCIIテキストを、フォーマット変換してI2C通信でAquesTalk pico LSI に送るだけなので、このマイコンの選択はかなり自由です。今回はAVRマイコンのATmega328Pを用いましたが、かなりオーバースペックです(回路図ではATmega168になってます)。

回路図


とてもシンプルな回路です。オーディオアンプも簡易的なもの。
回路図上に16MHzのセラロックが2つありますが、今回はATmega328Pは内蔵RCクロックで動かし、また、ATP3011F4-PUは外付けクロック不要なので、実際には2つとも部品は載せていません。LEDは、動作確認用です。

基板
実装はユニバーサル基板でとも思ったのですが、以前から目をつけていたFusionPCBにPCB基板を注文してみました。5x5cmくらいのPCB10枚、送料込みで$14の破格!旧正月が挟まれたため納期は1ヶ月かかりましたが…




テスターは、秋月電子で購入したMAS-345です。
このテスター、RS232CでPCと接続できるものです。RS232Cといってもフォトカプラで構成され、電気的には絶縁されています。というわけでRS232Cというのは無視してマイコンのUARTのTXD/RXDを直接接続しました。なお、UARTとRS232Cの論理は反転しているので、この点は注意が必要です。
このテスターの通信仕様は後ほど別途記事にまとめておきます。


テスターとの接続コネクタには、かなり長いピンヘッダが必要です。
今回は手元にあったラッピング用ICソケットを使用しました。ラッピング、若い人は知らないだろうけど昔は結構お世話になりました。今でもラッピング用ICソケットは手に入るのか?このソケットの不要なピンをカットし、ブレッドボード用のジャンパーワイヤーを差し込みました。





電源はとりあえず3Vで動かしますが、電池が消耗してくると通信ができなくなる現象が起こりました。
テスター側の受信フォトカプラに流す電流が3Vではギリギリのようで、テスターの個体差で3Vでは動かないものもあるかもしれません。その時は、電源を4.5Vなどに高めに変更するか、テスターを改造する必要が有りそうです。テスターの改造は、内部のR57 3.3KΩを 300Ωくらいに小さくすればよいかと思います。


制御用マイコンのファームウェアは、また次回。

LINK
 音声テスターを作ってみた(その2 ソフト編)
 テスターMAS-345の通信仕様
 ATP3011F4-PU


2012/03/01 本記事のプリント基板(PCB)をプレゼント!
ご希望の方で、AQUEST OnlineStoreにてATP3011F4-PUを新規購入された、先着10名様にプレゼントします。
ご希望の方は、オンライン注文時の備考に「音声テスター基板希望」とお書きください。
ご注意:
基板に部品はついていません。先着とはお支払い手続き完了時を基準とし、銀行振込はプレゼントの対象外とさせて頂きます。また10枚無くなり次第終了し、特に当落の連絡はいたしませんので予めご了承ください。基板はATP3011F4-PUに同梱して発送します。基板に保証はありませんので使用前にパタンの導通チェックをお勧めします。
| 電子工作 | 11:31 | - | - |
PROFILE
Follow
CATEGORIES
LATEST ENTRIES
SEARCH THIS SITE
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
SONY MDR-CD900ST
SONY MDR-CD900ST (JUGEMレビュー »)

普段これで開発しています。
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND