2016年9月24日土曜日

Blackmagic Design ATEM Television Studio用ワイヤレスタリーランプの製作

Blackmagic Designという会社が数年前に鳴り物入りという感じで出してきた、
フルHD 1920*1080 59.94iの切り替えができる、ATEMというシリーズの低価格スイッチャー
ATEM Televisin Studioの中古を買いました。一生のうちに何度使うんですかね。

馬鹿ですね。

このスイッチャーは本体に切り替えボタンなどがなく、IP接続したパソコンや、
別売りのコントロールパネルで操作をします。
IP接続なのをいいことに、Arduinoを使って、、
コントロールパネルを自作したりするための自作キットや、
完成品のコントロールパネルなどを販売しているSKAARHOJという会社があります。

SKAARHOJ
http://skaarhoj.com/
aboutを見ると、デンマークの会社のようで、デンマーク語なんですかね?

この会社は自作キットのために、Arduinoライブラリを出してくれています。
買わなくてもダウンロードできるので、それを借りていろいろ自分でも工作ができるんです。
これがATEMを買った理由です。使うアテはなくても工作のネタになるんです。

さて、IPでスイッチャーとハードウェアをつなぐといろいろできるわけです。
ライブラリでは、Arduino Ethernet Shieldを使ってArduinoとATEMを接続し、
簡易コントロールパネルを作るサンプルスケッチが入っています。
試してみましたが、簡単にATEMをArduinoでコントロールできました!

Arduino Ethernet Shield 2を使っているので、ライブラリを少々書き換える必要がありましたが、
インクルードされている、Ethernet.hをEthernet2.hと書き換えるだけでOKでした。

ライブラリを書き換えれば他のものでも動くということがわかったので、
IP接続ができる安いマイコンである、ESP-WROOM-02で使うことはできないかと試しました。
ライブラリ内の、EthenetUDPを、WiFiUDPに書き換えて、
#include <avr/pgmspace.h>をコメントアウト、
サンプルスケッチの#include <Ethernet.h>を消去、
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <WiFiUDP.h>>
を追加、
byte mac[]={}、
IPAddress ip();
をコメントアウト(DHCP接続するため)、Serial.begin()でシリアル通信速度を115200に設定、
WiFi.begin(ssid, password);でSSIDとパスワードを入力、Wi-Fiに接続、
なぜかそのままだとコネクションできないことが多いので、
  AtemSwitcher.connect();があるところに、  AtemSwitcher.connect();を10個くらいコピペ

あとはIOピンを適当に決める
以上でサンプルのATEMbasicContro.inolをESP-WROOM-02で使うことができました。
このIOの数ではそのままではコントロールパネルを製作するのは辛いので、
タリーランプとして使ってみることにしました。
ATEMbasicContro.inoの、スイッチ部分を削除、タリー部分は、
digitalWrite(greenledpin, !AtemSwitcher.getPreviewTally(n))
digitalWrite(redledpin, !AtemSwitcher.getProgramTally(n))
で、getPreviewでn chグリーンタリー、getProgramTallyでn chの
レッドタリーを点灯させられました。
実際に動かすとこんな感じです。



最後に、ESP-WROOM-02をブレークアウトボードに付けずに、
UEW線で直配線してケースに入れました。
電源のコードだけ出ていますが、3.3VのACアダプタや、
レギュレーターを使いUSBやDVバッテリーなどで駆動させることができます。



※このままだとアレなのであとでユニバーサル基板に乗せました。
ケースには1/4”→3/8ネジ変換アダプターを底にグルーガンで固定し、
カメラネジで固定できるようにしたので、
コールドシュー→カメラネジ変換雲台でオンカメラできるようになりました。

ソーラーパネルで自立電源駆動するWi-Fi温度計の製作

今年は北陸も冬から比較的好天が続きましたね。
しかし、先日の台風で久々に天気が悪くなり、一気に気温が下がってすっかり秋模様です。

密閉度が高く、年間を通じて暖かい(暑い)自分のマンションでは、外に出てみたらもっと暑かっ
た!あるいは、寒かった!ということがままあります。

そこで、スマートフォンの機能で、
現在地付近の気象台の気温や天気が表示される機能を使ったりするのですが、
ときどき全然違う場所の天気が表示されたりと不便です。




自宅の外の気温が分かれば一番正確な情報がつかめ、
遠隔地から帰宅するさいにも自宅周辺の気温を知れるように、
自宅の外に気温を測定するデバイスを設置してみることにしました。
しかし、自宅マンションは、屋外に電源を取れるコンセントなどがありません。
隙間ケーブルで窓からPoE給電(できるのか?)や、電池駆動などさまざま考えましたが、
ここは以前からやってみたかった太陽光発電を使ってみることにしました。

PoE給電なら、イーサネットで測定したデータを送ることができますが、
太陽光発電の場合は屋内へデータを送り入れることができません。
そこで、隙間ケーブルを通してしまえば太陽光発電の意味がないので、
データも無線で屋内へ送ることにしました。

無線でデータを送るとなると、Zigbeeを使った通信モジュールである、
XBee、TWE-LITEなどをまず思い浮かべます。

TOCOS TWE-LITE DIP

しかし、これらは屋内に受信機を要します。せっかく送信側がソーラー発電なのに、
屋内では受信機が商用電源で常時駆動しているのはどうだろう…と思い、
Wi-Fiルータならすでに常時稼働しているということで、Wi-Fiでデータを送ることにしました。

Wi-Fiでデータを送るのに手っ取り早い方法として、
5,600円で購入できる工事設計認証済みのWi-Fi内蔵のマイコンがすでに出ています。
Espressif Systems 社製、ESP-WROOM-02というものです。

ESP-WROOM-02
以前であればこのようなマイコンは自分のような素人の手には負えないのですが、
実はこのマイコン、海外ですでにESP8266というシリーズとして、
すでにDIYに広く使われているものベースであるため、
Arduino IDEで開発するためのパッケージが登場しています。

DIYに一般的な2.54mmピッチユニバーサル基板やブレッドボードで使うための
ブレークアウトボードにESP-WROOM-02が実装されている状態で売っているものもあり、
誰でも使える状態のものが手にはいります。

Wi-Fiモジュール ESP-WROOM-02 DIP化キット: 
無線、高周波関連商品 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gK-09758/

Arduino IDEで開発できて、DIPになっていれば自分でも使える!
ということで自分も昨年夏ごろからちびちびいじっています。

さて、これが決まれば部品発注です。
マイコンの消費電力は低いので、6Vのシールドバッテリーを軸に、ソーラー発電のシステムを組みました。
3Wのソーラーパネルに、6Vバッテリー用のソーラー充電コントローラー、
6Vのシールドバッテリーだけでシステムは完結します。

筐体は防水性の高い、未来工業のウオルボックスというものを使用しました。
住宅の屋側配線によく使われているもので、工具レスで開閉できます。
仮設電気工事のブレーカーボックスとして見かける機会も多いです。




マイコンはDC3.3V駆動なので、
LDOレギュレーターを入れて充電コントローラーの負荷側に接続して3.3Vをつくりました。

肝心の温度計ですが、I2Cの温度計を以前からよくいじっていたので馬鹿のひとつ覚えで同じものを使いました。Analog Devices社製 ADT7410というもので、これをDIPにするブレークアウトボードが秋月電子通商から出ているのでこれを使っています。

ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール: 
センサ一般 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gM-06675/

ESP-WROOM-02では、ArduinoスケッチでWire.Begin(SDA,SCL)のように初期化してあげると
SDA,SCLが指定したピンに設定されて、I2C通信が使用できました。
センサはブレークアウトボードとピンヘッダを取り付けたユニバーサル基板を丸く切断し、
VE管用コネクタに押し込んで固定しました。



これでウオルボックスに熱がこもっても、
外に近い位置にセンサがあるため外の気温が測定できるのではとの淡い期待を込めています。
また、ウオルボックスにセンサ用の穴を直接開けるのに比べ、防水性が高まっています。

設置場所のベランダへの固定は、工事用の垂直突っ張り棒を使いました。
少し短かったので、コンクリートブロックで嵩上げをしています。
ソーラーパネルは自作のアングルで、ウオルボックスはパイプ用金具でこれに取り付けています。




あとはセンサで気温を測定し、自室のWi-Fiルータに無線LAN接続し、データをIPで送ればいいだけです。
しかし、サーバーやAPIを作る技術がありません。そこで、
IFTTT Maker Channelというものを使用しています。
https://ifttt.com/maker

IFTTTはさまざまなWebサービス同士の橋渡しをして、連携させてくれるWebサービスです。
https://ifttt.com/

Maker Channelは、名前のとおり自作のアプリやハードウェアで、
別のWebサービスに対して司令を行えるための機能のようです。

簡単な方法として、Maker Channelの使用を開始すると、ユニークなAPIキーが発行され、
それと任意の設定した文字列を含むURLへアクセスするとトリガーを放つというものがあります。
技術的にはURLに対してHTTPリクエストのGETリクエストを送信するということのようで、
ブラウザでURLを開く以外にもCUIやマイコンでGETリクエストを送ればそれができるようです。

さて、Maker Channelの放ったトリガーをなんのトリガーにするかと眺めていたら、
Google Docsのスプレッドシートにも対応していることがわかりました。

https://maker.ifttt.com/trigger/{event}/with/key
/APIキ-?{"value1":"aaa","value2":"bbb","value3":"ccc"}

というURLへGETリクエストを送信すると、
上のURLの場合aaa,bbb,cccという文字が
それぞれスプレッドシートに行を追加して書き込むことができます。
aaaの部分に測定した気温を入れて送信すれば気温をスプレッドシートに書き込めます。
これで、サーバーを立てずにクラウドで測定値を確認できます!
そのため、外出先からでも測定値が確認できます。

スプレッドシートではエクセルライクなUIで表計算ができます。
グラフも作成できるため、気温推移のグラフも作れます。



早速グラフを作ってみましたが、なんだか変な感じです。
データが増えれば増えるほどグラフが小さくなっていってしまいます。

データを古いものから消して、新しいものが表示されるようにならないものか…
といろいろ調べていたら、スプレッドシートには、
Google Apps Scriptというものが使えることを知りました。

Apps Scriptは、Googleのさまざまサービスで任意の処理を実行できるスクリプト機能で、
組んだスクリプトを一定時間間隔で実行することも可能です。

気温のデータは10分間隔でスプレッドシートに書き込まれてくるので、24時間分データが貯まったら、一番上の行を消して、測定データを1行ずつ上の行へ繰り上げていけば過去24時間のデータがグラフ化されるはずです。
任意のセルに数値が入っているとき…◯◯するのってどうやるんだろう?
選択範囲のセルを移動するのはどうするんだろう?
と調べつつスクリプトを組んだらうまくいきました。
(なぜか時々スクリプトの実行が失敗するので、そのときは手動で修正しています…。)

スプレッドシートで数値やグラフを確認するのはいまひとつスマートじゃないということで、
もうちょっと見栄えするページを作ってみることにしました。
Googleのサービス、Google サイトは、簡易ポータルサイトを作るのが容易で、
スプレッドシートのグラフやスプレッドシート自体の埋め込みもできます。
ちょちょいっとスプレッドシートのグラフをGoogleサイトに貼り付けたら
簡単に気温確認ページが作れました。

ソーラーWi-Fi百葉箱の測定値
https://sites.google.com/site/solarhyakuyobako/





あとは管理者として遠隔地からも充放電状況が知りたいので、
電流電圧センサを取り付け、そのデータも送信するようにし、
本体内部にも安い電圧系を取り付け、タクトSWを押すとバッテリ電圧を表示できるようにしました。


気温などの気象データの公開には、検定済みの装置を使い、
規定の設置要件、申請が必要であることなどが求められているようです。
そのため、この装置はあくまでもマイコンと小型のソーラー発電システムの実験目的で、
センサの出力数値をマイコンが送信したものを表示しているに過ぎないということを明記しています。
実際、マンションのベランダにあるという設置要件からして、正確性には乏しいはずです。
数値の変化を見て楽しむこと、
また前後の数値を比較して季節の移ろいや前日比の気温差などを参考にする
程度の使い方をするようにしています。