N.Yamazaki's blog

主に音声合成について思ったことを書いてみようと思います。
ミルエネのUSBドングルでスマートメーターからリアルタイムに消費電力を取得する

Keywords: Wi-SUN, HEMS, スマートメーター, ECHONET Lite

 

■概要
USBドングル「UDG-1-WSNE」を使って、スマートメーター(電力量計)から瞬時電力を習得・蓄積し、現在の消費電力などをグラフと共に表示する表示するシステムを作りました。このモニター端末をリビングに常設し、電気の「見える化」を実現。

 

表示画面

monotor-sample

スマートメーターとの接続には、920MHz帯のWi-SUN規格の無線通信で行いますので、Wi-SUN通信のハードウェアが必要です。
このWi-SUN通信デバイスとしては ROHM の BP35A1 を使った例はありますが、今回はUSBドングル「UDG-1-WSNE」を使用しましたので、はんだ付けなどの電子工作は一切ありません。
なお、この記事では、このUSBドングルを使うときの注意点のみ詳しく記述します。


■システム構成
ハードウェア

hardware
スマートメーターは、電力会社が無料で設置してくれます。スマートメータにアクセスするためのIDやパスワードの取得に、Bルートサービスの利用申し込みが必要です。

 

USBドングル「UDG-1-WSNE」は、NTT東日本の「フレッツ・ミルエネ」サービスを申し込んだときに購入しました(¥5,400)。

サーバーは何でも良いのですが、我が家では既にサーバーとして使っていたWindowsのPCを使いました。USBドングルのデバイスドライバが入れられれば、Raspberry Pi等のLinux環境でも構築できそうです。

 

表示部分は、任意のWebブラウザでOK。今回は常時表示したかったので格安の中華タブレットを購入。なお、VPNを使えば外出先から手持ちのスマホでも見れます。

 

ソフトウェア

software

毎分瞬時電力と積算電力量をファイルに書き込む「データ取得プログラム」と、そのファイル情報をグラフ等に整形してHTTP出力する「表示プログラム」の2つから構成されます。

 

データ取得プログラム

- 機能は、毎分0秒に瞬時電力と積算電力量をスマートメーターから取得し、日時と共にファイルに追加書き込む。
- プログラム側からはUSBドングルはシリアルCOMポートとして見える。
- 通信プロトコルはスカイリー・ネットワークス社のSK STACK。
- 瞬時電力等の各種情報取得にはECHONET_Liteのフォーマット。
- 今回はC++で書いたコンソールアプリ(.exe)を作って常時起動。

 

表示プログラム

- 規定のURLにアクセスすると、グラフや各種消費電力を表示し、毎分30秒になると表示を自動更新。
- WebサーバーにはIISを用い、ファイルの情報を表示用に変換する部分はPHPで記述。

 

現在、我が家では次のような項目を表示しています。

- 現在の消費電力
- 待機電力
- 今日これまでの電力量
- 分単位の消費電力グラフ
- 毎時の電力量と累積のグラフ
- 過去30日の積算電力量

 

■UDG-1-WSNEのデバイスドライバ
このUSBドングルをWindows PC(Windows7 64bit)に挿しただけでは、不明のデバイスとなりました。
「UDG-1-WSNE」のドライバーは探しても見つからなかったので、デバイス名称「USB-UART LP」からCypressのチップと想定し、CypressのUSB-SerialドライバーのPIDを以下の方法で偽装してインストールしました。

 

1.    http://www.cypress.com/sdc から USB-Serial Driver Installer - Windowsをダウンロード(アカウントが必要)
2.    ダウンロードした CypressDriverInstaller_1.exe  を実行すると以下のフォルダに展開される。
        C:¥Program Files (x86)¥Cypress¥Cypress USB-Serial Driver¥DriverBinary¥
3.    この中のCDC_Driver¥bin¥win7¥x64フォルダを任意の場所にコピー(使用するOSに応じたものを選択)
4.    CypressUsbAndBus.inf をエディタで開く。
5.    [Cypress.NTamd64]の項目に次の行を追加
        %USB¥VID_0409&PID_04C7&MI_00.Desc% = CypressUsb.NTamd64, USB¥VID_0409&PID_04C7&MI_00
6.    [Strings]の項目に次の行を追加
        USB¥VID_0409&PID_04C7&MI_00.Desc="UDG-1-WSNE CypressUsb"
7.    同様に CypressSerial.inf をエディタで開く。
8.    [Cypress.NTamd64]の項目に次の行を追加
        %CypressSerial% = CypressSerial.NTamd64,Ports¥VID_0409&PID_04C7&MI_00
9.    [Strings]の項目に次の行を追加
        CypressSerial = "UDG-1-WSNE USB Serial Port"
10.    CypressUsbAndBus.inf(USBのドライバ)、CypressSerial.inf(仮想COMポート)の順序でインストール。

 

ドライバーのインストール後、115200bps/8bit/none-parity/1stop-bit/none-flow-control のパラメータでシリアル通信が出来るようになりました。

 

■通信シーケンス
以下に、瞬時電力と積算電力量を取得したときのシリアル通信の送受信内容を示します。
コマンド体系はBP35A1と同じSK STACK IPですが、バージョンが異なるため、BP35A1と比べて使えるコマンドが少なく、フォーマットも微妙に異なっているので注意が必要です。[BINARY:XX XX...]の部分は、ASCIIでなく8bitバイナリ列として送信します。送信はバイナリで受信は16進ASCIIって仕様はちょっと違和感ありますね。なお、送信時の改行コードはCRLFです。

積算電力量は、正しくは補正係数や単位も都度取得して求めるべきですが、今回は固定としました。補正係数と単位を別途取得したところ、私の場合は積算電力量計測値(EPC:E0)の単位は0.1KWhでした。

 

SKSETPWD C  XXXXXXXXXXX ←Bルートのパスワード
OK
SKSETRBID XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ←BルートのID
OK
SKSCAN 2 FFFFFFFF 6 0 ←フォーマット注意
OK
EVENT 20 FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0
EPANDESC
Channel:2F
Channel Page:09
Pan ID:XXXX
Addr:ZZZZZZZZZZZZZZZZ
LQI:7D
Side:0
PairID:XXXXXXXX
EVENT 22 FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0
SKSREG S2 2F  ←上のChannelを指定
OK
SKSREG S3 XXXX  ←上のPan IDを指定
OK
SKLL64 ZZZZZZZZZZZZZZZZ    ←上のAddrを指定
FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX ←スマートメーターのIPアドレス取得
SKJOIN FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX ←スマートメーターのIPアドレス設定
OK
EVENT 21 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0 00
〜中略〜
EVENT 25 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FF02:0000:0000:0000:0000:0000:0000:0001 0E1A 0E1A ZZZZZZZZZZZZZZZZ 1 0 0012 108100000EF0010EF0017301D50401028801 ←node start時の基本シーケンス
SKSENDTO 1 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0E1A 1 0 000E [BINARY:10 81 00 01 05 FF 01 02 88 01 62 01 E7 00] ←E7:瞬時電力計測値 フォーマット注意
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0E1A 0E1A ZZZZZZZZZZZZZZZZ 1 0 0026 1081000102880105FF017302EA0B07R0031F0B000000000E7DEB0B07E0031F0B00000000001B
EVENT 21 FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0 00
OK
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0E1A 0E1A ZZZZZZZZZZZZZZZZ 1 0 0012 1081000102880105FF017201E70400000195	←最後の195が16進の瞬時電力計測値(W)
SKSENDTO 1 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0E1A 1 0 000E [BINARY:10 81 00 01 05 FF 01 02 88 01 62 01 E0 00] ←E0:積算電力量計測値 フォーマット注意
EVENT 21 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0 00
OK
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FE80:0000:0000:0000:YYYY:YYYY:YYYY:YYYY 0E1A 0E1A ZZZZZZZZZZZZZZZZ 1 0 0012 1081000102880105FF017201E00400000EB9 ←最後のEB9が16進の積算電力量計測値(100Wh)

 

■リトライは必須
無線を使ったシステムなので、通信プロトコルの途中でタイムアウトやエラーが生じます。データ取得プログラムでは、エラー時のリトライの回数や待ち時間、エラー時にプロトコルのどこから再開するかなど、多くの工夫が必要です。これまで数ヶ月運用して、週一程度の頻度で10分程度取得できなくないことがありますが、いまのところ連続運用しています。


■参考リンク

■あとがき
消費電力の「リアルタイムな見える化」は想像以上に面白いです。グラフから冷蔵庫の消費電力の時間パタンなどもわかるようになります。今はスマートメーターとの接続だけですが、今後HEMS家電を購入したら、これらもすぐに応用できそう。高価で融通のきかないHEMSモニター機器を購入しなくても、自由に好みに合わせた情報を表示・利用できるのが自作のよいところですね。


 

| 電子工作 | 13:50 | - | - |
ゆっくり実況で収益化するときライセンス購入は必要?

keywords: AquesTalk ライセンス YouTube 実況動画 広告収入 収益化 


最近、「YouTubeにゆっくり実況動画を広告付きで投稿するとき、ライセンスの購入が必要ですか?」という問い合わせが増えています。そこで、AquesTalkの使用ライセンスの購入についてまとめておきます。

 

本記事では「AquesTalk Win」を含んだアプリの使用について書いています。
AquesTalk2や、Mac版などその他のプラットフォーム版については当てはまりませんし、AquesTalkを使用したアプリを開発・公開する場合とも違う話です。もちろん、ゲーム実況時のゲームの版権や画像キャラ素材のライセンスに関しても本記事の対象外です。

 

■AquesTalkはそのライブラリのリリース時期でライセンス規定が異なる

AquesTalkのリリース当初は、たとえ営利目的の使用であってもライセンスを購入しないでOKでした。
しかし、2011年2月にライセンス規定が大きく変更され、それまでライセンスが必要だったMacやLinuxなどの他のOS版についても無償で利用可能になりましたが、一方で、無償利用は個人の非営利に限定され、法人や営利目的の使用ではライセンスの購入が必要となりました。
とはいえ、ライセンス規定はそのライブラリがリリースされたときの規定に従うべきとの観点から、同じAquesTalkライブラリであっても、そのライブラリのリリース時期によってライセンス規定が異なるというのが現状です。

 

■ライセンス購入の必要・不要を判定する
以下のフローにより、お使いのアプリに含まれるAquesTalkがライセンスの購入が必要かどうかを判断できます。
AquesTalkライブラリの実体は、アプリに含まれる「AquesTalk.dll」というファイルです。まずはこのファイルを探します。どのバージョンでも同じファイル名です。


【フロー図】フロー図


2011年1月以前のライブラリであるかを判断する方法として、タイムスタンプは変更される可能性があるので使えず、ここではMD5ハッシュ値で判断します。下表に2011年1月以前のライブラリのMD5ハッシュ値のリストを示しています。
お手元のAquesTalk.dllのMD5ハッシュ値がこのリストに該当すれば2011年1月以前のライブラリであり、無ければ2011年2月以降のライブラリとなります。

* ブラウザで簡単にファイルのMD5ハッシュ値を求めるサイトがあります。

 

「個人利用か?」の部分は、会社(個人事業含む)や学校(大学含む)での利用は個人利用に該当しません。これは実際に使用する場所だけでなく、業務や研究のためという目的の場合も個人利用に該当しません。

 

「収益化する?」の部分は、直接間接を問わず営利を目的とする場合は収益化に該当し、投稿動画に広告をつけて収益化を図る場合もこれに該当します。

 

【AquesTalk Win 営利でも無償利用可能なライブラリのMD5リスト】
声種 タイムスタンプ MD5ハッシュ値
f1 2006/5/17 d09ba89e04fc6a848377cb695b7c227a
f1 2006/10/6 23bd3bbfe89e7bb0f92e5e3ed841cec4
f1 2006/10/12 f97a031451220238b21ada12dd2ba6b7
f2 2007/1/30 8bfacc9e1c9d6f1a1f6803739a9ed7d6
m1 2007/1/30 950cb2c4a9493ff3af7906fdb02b523b
m2 2007/1/30 d4491b6ff6aab7e6f3a19dad369d0432
r1 2007/1/30 1a69c64175f46271f9f491890b265762
dvd 2007/3/19 cd431c8c86c1566e73cbbb166047b8a9
jgr 2007/3/19 54f15b467cbf215884d29a0ad39a9df3
imd1 2007/3/19 e352165e9da54e255c3c25a33cb85aaa
dvd 2007/3/19 cd431c8c86c1566e73cbbb166047b8a9
jgr 2007/3/19 54f15b467cbf215884d29a0ad39a9df3
imd1 2007/3/19 e352165e9da54e255c3c25a33cb85aaa

ファイル名はすべてAquesTalk.dll


上記フローチャートの結果、「不要」であればAquesTalk Winの使用ライセンスの購入は不要、「必要」であれば購入が必要となります。使用ライセンスは、下記からオンラインで購入可能です。

なお、この使用ライセンスは、あくまでもAquesTalkの使用許諾であり、生成後の音声データの使い方に関しては特に制限していませんので配布も含めて自由にお使いください。

 

「AquesTalk 使用ライセンス」

http://shop.a-quest.com/?pid=49638446

 

■AquesTalk2も含むアプリの場合は?
公開されているアプリの中にはAquesTalkだけでなくAquesTalk2ライブラリを含んだものもあります。
(アプリの中に「AquesTalk2.dllまたはAquesTalk2Da.dll」ファイルの有無を確認)
このような2つのライブラリが含まれるアプリを営利目的で使用する場合には、AquesTalk2の使用ライセンスの購入が必要です。
これは、たとえ投稿動画(コンテンツ)内でAquesTalkの合成音声だけを使いAquesTalk2の声を使わなくても、AquesTalk2を含んだアプリを使用するという観点からライセンスは必要だと考えています。
ちなみに、AquesTalk2は、AquesTalkとは異なり、リリース当初から営利目的の使用にはライセンス購入が必要となっています。


■アプリ開発者の方へお願い
どうかどうか、最新のライブラリを使ってください m(_ _)m
何かご相談等ありましたら、アクエスト問い合わせ先まで、お気軽にご連絡ください。


 

| AquesTalk | 21:09 | - | - |
音声合成LSIでイヤホンを鳴らすときの回路(アンプ不要)
音声合成LSI「AquesTalk pico LSI」の出力で、アンプICを使わずにイヤホン(またはヘッドホン)を駆動するときの回路を検討しました。


■考慮すべきポイント
以下のポイントを考慮して設計します。
1. 絶対最大定格を超えないこと
  端子最大電流40mA
  端子電圧:-0.5V以上 Vcc+0.5V以下
2. 出力は出来るだけ大きく
3. 折り返し雑音やPWMキャリア成分の除去はそこそこ

■スピーカーを直接接続すると・・・
時折、AquesTalk pico LSIの音声出力端子(AOUT)に、イヤホンやスピーカーを直接接続している例を見かけますが、LSIを壊す可能性があります。
理由は、イヤホンのインピーダンスが低いため端子最大電流の絶対最大定格を超えてしまうことと、イヤホンのインダクタンスにより逆起電力が発生し、これにより端子電圧の絶対最大定格を超えるためです。
また、圧電ブザーや圧電スピーカーを直接接続する例も見かけますが、これらは駆動側からみるとコンデンサみたいなものなので、これも端子最大電流を超えてLSIを壊します。もっとも、経験上、このような使い方をしてもそう簡単には壊れませんが・・・

■回路図
今回設計した回路図と素子の定数を示します。
回路図
素子定数
Vcc[V] Zo[Ω] R1[Ω] C1[uF] C2[uF] 出力[mW] fc[KHz]
5.0 32 120 3.3 10 2.5 2.5
5.0 16 120 4.7 22 1.8 3.0
5.0 8 120 10 47 0.9 2.8
3.3 32 82 3.3 10 2.0 2.8
3.3 16 82 4.7 22 1.5 3.1
3.3 8 82 10 47 0.8 2.8

折り返し雑音除去用のLPFと、DC成分除去のHPFから構成されるシンプルな回路です。
電源電圧VccとイヤホンのインピーダンスZoをもとに、表から各素子の値を求めます。
ATP3011の音声帯域は4KHz、ATP3012は5KHzなので、カットオフ周波数は3KHz付近に設計しました。
本来なら折り返し雑音だけをカットするために2次のLPFを用いたいのですが、2次の構成ではどうしても音量が小さくなるので、1次のLPFでカットオフを少し下げました。

また、この回路の周波数特性の設計にはイヤホンのインピーダンスを利用しています。そのため、イヤホンのインピーダンスは固定です。もし、使用するイヤホンが変わる場合は、この回路は使えず、別途アンプを使うしかなさそうです。

この回路の音量は、イヤホンのインピーダンスが大きいほど大きく鳴らせます。一般的なアンプを使ったものとは逆ですね。
上に示した定数は音量が最大になるように設計してますが、もし、音量を下げる場合は、R1の値を大きくすればOKです。なお、R1の値を下げるのは端子最大電流を超えてしまうのでNGです。

■左右を並列接続、それとも直列?
市販のイヤホンのインピーダンスは16Ωのものが多いようです。これは片側のインピーダンスです。
左右のイヤホンをモノラルの回路で駆動するとき、通常は左右を並列に接続しますが、インピーダンスが1/2になるので音量が小さくなってしまいます。一方、直列に接続すればインピーダンスは倍になって音量的に有利ですが、左右が逆位相になるのでちょっと気持ちよくありません。しかし、実際のところイヤホンで左右逆位相で鳴らしたとき聴感上はどうなるのでしょう?スピーカーのように空間で打ち消しあうことも無いですし・・・特に問題ないのでしょうか?

■おまけ、ボリューム付き
ボリュームで音量を調整できるようにした回路例を次に示します。
最大音量は、ボリューム調整をしない場合に比べると6db程度小さくなります。
また、カップリングコンデンサ(C2)を前に移して、AOUTから出力されるDC信号成分による電力消費を削減しています。

VR付回路

■最後に
今回の検討は、ICからのPWMオーディオ出力を、アンプを使わずにCRの受動素子だけでフィルタを構成し、イヤホンから音を出すという、そんな一般的な設計にも応用できると思います。

■Link
  N.Yamazaki's blog「音声合成LSI用のオーディオアンプ(再考)」
| AquesTalk pico LSI | 17:26 | - | - |
UDG-1-WSNEを調査
WSR35A1-00や、BP35A1にUSB-Serialに類似のもの。



メーカー:NEC
電波の型式、周波数及び空中線電力: F1D 922.5〜927.9MHz(200kHz間隔28波) 0.02W
総務省HPより

ドライバー: 
Cypress USB-Serial Driver
CypressUsbAndBus.inf、CypressSerial.infの2つとも
VID/PIDは書き換え必須 VID_0409&PID_04C7&MI_00

COM:
115200bps、8bit, non-parity, 1stop-bit, no-flow

コマンド:
SK STACK IP Ver.1.0 
Ver.2と比べると、使えるコマンドが限られている。また一部のコマンドと応答が1項目(1カラム)増えてる。


Keywords:
Wi-SUN, HEMS, スマートメーター, ECHONET Lite
| 電子工作 | 14:11 | - | - |
Atmel純正コマンドライン型の書き込みツール atprogram.exe の紹介
AVRマイコンの書き込みツールとしては、Atmel Studioといった統合プログラムを使えばよいのすが、大量に書き込む場合は、GUIよりコマンドラインのほうが便利です。バッチプログラムでも使えますしね。

今まで、STK500.exe(これもAtmel純正)を使っていたのですが、昨今のAtmel Studioには含まれていないし、自分の環境で最近なぜか使えなくなった("could not connect to AVRISP mkII on USB"というエラーでAVRISP mkIIが認識されない)ため、他の方法を探すことになりました。
他にも有名どころでavrdudeもありますが、今回はAtmel Studioに付属している純正のツールatprogram.exeを紹介します。

■atprogram.exeとは
AVRマイコンなどのAtmel製マイコンに書き込むためのコマンドラインプログラムです。もちろん、実際に書き込むにはAVRISP mkIIなどの書き込み器(ハードウェア)も必要です。

以下の機能があります。必要十分な機能は揃ってます。
  • .bin .hex .elfファイルの書き込み
  • 内蔵flashの読みこみ, 書き込み, 消去
  • フューズ、ロックビット、セキュリティビット、ユーザーページ、ユーザーシグネチャの書き込み
  • 接続している書き込み器の一覧出力
  • 書き込み器とのインターフェースの選択やクロックの設定

■インストール
Atmel Studioをインストールすれば、含まれています。
AtmelStudio7.0の標準的なインストールでは、次のところにありました。

C:¥Program Files (x86)¥Atmel¥Studio¥7.0¥atbackend¥atprogram.exe


■使用方法
例えば、Arduino Unoでも使われているatmega328pに書き込む場合、次のようにします。

>atprogram -t avrispmk2 -i ISP -d atmega328p program -f hoge.hex


フューズやロックビットを書き込むときは

>atprogram -t avrispmk2 -i ISP -d atmega328p write -fs --values FFD7FF write -lb --values FC

ちなみに、フューズはLow,High,Exの順です(atmega328pの場合)。
次のように複数のコマンドを並べて一括処理することもできます。

>atprogram -t avrispmk2 -i ISP -d atmega328p program -f hoge.hex program -ee -f hoge_eeprom.hex write -fs --values FFD7FF write -lb --values FC


より詳しい使い方は、コマンドのヘルプを参照します。コマンドの一覧は次で表示されます。ちなみに、atprogramのマニュアルを探したのですが、見つかりませんでした。

>atprogram -?


これはすべてのコマンドではなく、より詳しく知るにはhelpコマンドを使います。
例えば、書き込みのコマンド詳細は次で表示されます。

>atprogram help write


以上、atprogram.exeを簡単に紹介しました。avrdudeなどに比べてまだ知名度の低いツールですが、純正のツールは安心感がありますね。
 
| 電子工作 | 09:03 | - | - |
PROFILE
Follow
CATEGORIES
LATEST ENTRIES
SEARCH THIS SITE
RECOMMEND
RECOMMEND
RECOMMEND
Arduino Uno
Arduino Uno (JUGEMレビュー »)

AquesTalk pico LSIの評価ボードとして最適
RECOMMEND
Raspberry Pi Model B+ (Plus)
Raspberry Pi Model B+ (Plus) (JUGEMレビュー »)

これと AquesTalk pi で簡単にテキスト音声合成!
RECOMMEND
RECOMMEND
RECOMMEND
SONY MDR-CD900ST
SONY MDR-CD900ST (JUGEMレビュー »)

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