ホームオートメーション(3)2019年10月22日

赤外線リモコンとWiFiスイッチ

ホームオートメーション(2)で赤外線リモコンのコードを学習させてMQTTなどから操作するWiFiリモコンを作成しましたが、Amazonでも2,000円以下でAlexa等に対応した赤外線リモコン商品が販売されています。最近の家電製品はリモコン操作が普通ですからWiFi赤外線リモコンで操作が可能です。住宅設備にはWiFiスイッチを設置することでリビングの照明などが操作可能になります。

赤外線コントロールハブには、AmazonでRakuby WiFi-IRリモート IRコントロールハブという製品を購入してみました。製品の条件として登録のないリモコンの学習機能があること、Alexa対応であることでした。

今回のWiFiスイッチはSONOFFと同じ機能のTuya Wifi Smart Switchという製品を選択しました。販売価格が$4.59と約500円だったのと対応しているアプリがRakuby WiFi-IRリモート IRコントロールハブと同じSmart Lifeだったのでこちらを注文しました。最安値はAliExpressでした。 e-BayやAmazonを物色しているうちにSONOFF Mini 2というたぶんSONOFFの新製品と思われるWifiスイッチを見つけました。この製品は住宅機器用に設計されているようで従来の壁スイッチにも対応しています。(もちろん3路回路にも)ということで早速注文をしました。対応アプリはSONOFFなのでeWeLinkになります。最安値はe-Bayでした。

eWeLinkとSmart LifeともにAlexaのスキルがありますのでそれを使用して音声制御を行います。
eWeLink用にはplug and play、Smart Life用には同名のスキルを使用します。

WiFiモジュール(7)2019年08月25日

環境センサー+LINE通知

今回使用したマイクロコントローラーはESP8285を使用したWeMos D1 mini Liteです。ESP-12Fとほぼ同じ大きさでUSBシリアル通信チップ(CH340Gを使用)までボード上に装備ています。
IoTで利用できる(MQTTクライアント)ネットワーク時計に環境(温度、湿度)センサーを加えて見ました。OLED表示は時間よりも温度湿度を強調した表示になっています。3.5x2cmの表示領域に128x64ドットを表示していますので小さいです。(大きいものは値段が高い)😂
2.4G WiFi機能を装備しているマイクロコントローラなので時計はインターネットで合わせますのでPC並みに正確です。センサーの違いで2種類作成しました。2つ目の方は人間を感知するとLINEに温度、湿度、気圧を通知する機能をプログラミングしてあります。こちらのマイクロコントローラーはESP-12Fを使用しています。プログラムの更新はUSBシリアル通信基盤を経由してPCと接続し行います。
「何の役に立つの?」という質問はご法度です。動機は
・面白そうだから作る。
・こんな物があるからとりあえず動かしてみる。
・「LINEに通知が送れる」なら作ってみる。
などなど😆😆😆

作ったものはそのまま動かし続けるものもあるし、大概のものはバラして再利用しています。今回のマイクロコントローラーは安価で気兼ねなく作成できる所が良いですね。

プログラムはPCでArduino開発環境というソフトウエアを使用して作っていきます。教育用ということもあって世界中の人がいじっているのでライブラリーが充実しています。ゆえにやりたいことがすぐできるというわけです。
Raspberry Piでも同じようにプログラミングしますがこちらではコンパイルが不要なPython言語を多く利用しています。
最近のプログラミング手順はゼロからプログラミングなどしません。プロトタイプあるいはライブラリーについているサンプルを利用して必要な修正を加えるプログラミングです。まさにネットワーク時代のプログラミング?(コピペ!!)😵

ホームオートメーション(2)2019年04月28日

MQTTと赤外線リモコン

赤外線リモコンの学習とWiFiリモコン化にチャレンジしています。
家にはたくさんのリモコンがあります。人が操作しなくてはいけない機器には必ず(ある程度の価格のものは)赤外線を利用した手元リモコンが付属しています。TVから始まってエアコン、扇風機、シーリングライトなど数え上げたらきりがありません。ゆえに居間のテーブルの上にはリモコンが散乱することになります。これをまとめられたらどんなに楽になるだろうと思わずに入られません。(実際にはそんな簡単なものではないのですが)

今回はその糸口になればと思いESP8266を使用して既存のリモコン信号を学習して、WiFi(MQTT経由)からの操作で機器をコントロールするリモコンを作成しました。2台作成して、学習データ作成用に1台は送受信機をつけてあります。もう1台は3.5mmプラグ付きの延長ケーブルLEDを使用して設置条件に合わせられるようにしました。

はじめてのIoT(2)2017年05月06日

家電製品の連動

家電製品の中にはある機器が動作したら合わせて動作させたい機器があります。連動させるための仕組みが用意されている場合は良いのですがそうでない場合はまず機器Aの動作を監視することで機器Bを動作させるかどうかの判断を行います。簡単には機器Aが接続されたコンセントに電流が流れているかを監視します。電流が想定されるだけ流れていた場合、機器Bの電源をONにするという仕組みで連動させることが可能です。今回はそんな連動ボックスを作成してみました。
電源連動ボックスの心臓部は、AC100Vの電流を検出するセンサーです。電流センサには U-RD社の極小型クランプ式交流電流センサー CTL-6-S32-8F-CLを使用します。このセンサーはAC100Vラインに接続した負荷の消費電流に応じて1/800の電流が出力されるのでその電流を抵抗に流し電圧に変換後、AD変換してESP8266が処理します。
ESP8266には(ESP-12Eでも)ADコンバーターが1CHしかありませんのでADコンバーターはI2Cに接続できるTI社のADS1115 ADコンバーターを使用しました。ADS1115は4チャネルの入力が可能です。今回はそのうちの2チャネルを使用してAC100Vラインの電流を監視します。残りは未使用ですがその他のアナログ入力(センサーなど)に使用できます。アナログ入力に温度センサーとして3Dプリンターで使用している100KΩのNTCサーミスターを使用しました。デジタル出力のセンサーなら値を読み取るだけで済むのですがアナログ入力の場合は電圧を読み取り、ソフトウエア(計算式)で温度への変換を行います。0~50℃で使用するB値を選択しています。

赤外線リモコンでリレーをON/OFFすることもできるように赤外線リモコン受信モジュールを付けて適当なTVリモコンのキーを割り当てるようにしました。バッファロー社のHDMI切替器に赤外線受信機が付いていたのでそれを流用しました。

出力制御にはAC100VをON/OFFするので2回路リレーモジュールを使用しました。温度湿度制御BOXのときとは異なりこのモジュールはリレー回路と制御回路がフォトカプラーでアイソレートされていますのでESP8266の3.3Vロジック電圧で直接動作します。リレー電源は5Vです。


電源連動ボックスの設定WEB画面です。
左側の2つのボックスがリレーのコントロールBOXです。右側はセンサー類を入れているツールBOXです。ツールBOX内のアイコン近くの数値は現在値を1秒間隔で表示しています。コントロールBOX内の電源アイコンは現在のリレーの状態を表示します。このスクリーンショットではコントロール1にAC電流センサー1を割り当ててしきい値は20mA以上になったらリレーをONにする。コントロール2は赤外線リモコンを割り当てるという設定です。
操作は簡単でツールBOXからアイコンをコントロールBOX内にドラッグするとしきい値設定画面が開きますので条件式と値を設定するだけです。AC電流センサーはmA単位、温度センサー(サーミスター温度センサー)は0.1℃単位でしきい値を設定できます。写真ではコントロール1の設定を温度センサーに変更してしきい値を設定しているところです。WEB画面を凝りすぎたため、PCからのみの操作になります。(スマホからではドラッグ操作ができません。)
また、電源投入時の初期値をフラッシュに保存する機能もついていますので保存時の設定で本機を起動することができます。フラッシュメモリーは書き換え限界がありますので手動セーブにしています。

WiFiモジュール(6)2017年05月05日

独立型太陽光発電システム

2011年の東日本大震災の後、非常時用にと独立型の太陽光発電システムを設置しました。もちろん今でも稼働しています。2016年9月にバッテリーを交換したくらいで特に何事もなく動作していると言えます。発電状態やバッテリーの状態はUSB経由でPCでも確認できますが、太陽光発電パネルの発電データをThingSpeak(クラウド)にアップロードする仕組みを追加しました。追加機器の構成はESP-01をコントローラーに、INA219電流センサーで電流と電圧を計測し、ThingSpeakサーバーにデータを5分間隔で送信します。INA219電流センサーでは26V3.2Aまでしか計測できませんが、太陽光パネルの増設をしない限りこれでよしとしています。太陽光パネルの増設または、交換時には電流センサーも交換です。
直近2日間の太陽光発電パネルの発電電圧と消費電流をグラフ化しています。
平均の発電電圧は晴天時20V、夜間3V程度です。

通常時は発電した電気はバッテリーの充電に使われているため(バッテリーはほぼ満充電)時々電流が流れるだけです。

はじめてのIoT(1)2017年04月23日

家電製品のON/OFF

最近良く耳にする「IoT」なる単語が気になって調べてみた。
WiKiペディアでは
モノのインターネット(英語: Internet of Things, IoT)とは、様々な「モノ(物)」がインターネットに接続され(単に繋がるだけではなく、モノがインターネットのように繋がる)、情報交換することにより相互に制御する仕組みである。それによる社会の実現も指す。「物のインターネット」と表記された例もある。
とありました。気になる文言はありますが、要はPCやスマートフォーン、タブレットなどと言った最初からインターネット接続を想定されているもの以外の機器をインターネットに接続し、その機器の持つ情報や操作できる機能を遠隔から利用しようというものです。クラウド利用が前提のような記述もありますが、なんだArduinoやESP8266ボードを利用した制御、計測コントローラーにネット接続機能を付加してあげれば良いようです。
AC100VをON/OFFする制御ボックスを作成してみました。温度湿度センサーDHT11も接続して設定温度湿度でAC100VをON/OFFできるようにしています。
ケースには市販の電源ボックスを使用し、スイッチやコンセントは家電建材用を使用しました。
ESP8266のファームウエアの中にWEBサーバー機能を内蔵し、ブラウザからリアルタイムに情報を見ることができます。また、設定温度湿度の変更と、手動でスイッチのON/OFF操作ができます。
画面はスマートフォーンからでも見やすいよう考慮しています。

WiFiモジュール(5)2017年03月27日

電圧・電流のグラフ化

リチュウムイオン電池をいろいろといじっていて電圧・電流測定をします。マルチテスターでは記録が残らず、PCをいちいち立ち上げるのも面倒です。そこでWiFiモジュールESP-01を使ってスタンドアローンでデータをロギングし、グラフ化できるWEB UIを持った電圧・電流ロガーを作ろうと思います。しかし、ESP-01(ESP8266)にはアナログ入力がありません。アナログデータを扱うにはセンサーとのインターフェースにI2Cを使用することで実現できます。TI社のINA219電流センサーは電圧・電流の測定結果をI2C接続でデジタル出力してくれます。モジュールボードに載っている電流測定用のシャント抵抗も0.1Ωなので測定値にはほぼ影響しません。e-Bayからの購入であればモジュールボードの販売価格もお手頃です。

ブレッドボードで仮作成しました。リアルタイムデータの表示用に1.3インチ128x64ドットOLEDモジュールを追加しています。写真の表示している電流はDCDCコンバーターのアイドル電流(2.1mA)です。
18650リチュウムイオン電池を使用したUSBバッテリーの電池側の電圧と電流をを計測中です。今のところリアルタイムモニターとシリアル出力のみ実装しました。やはり時系列でグラフ化しないと電圧・電流の変化がわかりません。

USBコネクターに接続した33Ωの抵抗で放電させたときのシリアル出力をPCで受信してソフトでグラフ化しました。このようにグラフ化すると大変わかりやすくなります。

12000mAh表記の中国製18650リチュウムイオン電池は実質容量が500mAh程度なことがわかります。バッテリー容量が知りたいのであればBattery Capacity Meter Discharge Testerを使用すれば測定できます。放電特性になるとやはりグラフ化するとはっきりわかります。バッテリー電圧が3.5Vを過ぎたあたりから急激に低下していることがわかり、バッテリープロテクターが正しく動作して2.5Vあたりで電流がカットされているのもわかります。
秋月で販売しているGP社のReCyko+(Ni-MHニッケル水素電池)をテストしてみました。旧タイプで使い込んでいますが結構いい結果が出ました。計測は電池を2本直列、負荷抵抗は17.5Ωで行いました。放電電流は約130mAと低めで行ったのが良い結果を出したと思われます。この電池は購入から数年が経過していますが利用頻度が低いので1976mAhという結果です。

WiFiモジュール(4)2016年10月24日

WiFi Felica リーダー

Felicaカードと言えばSuicaですが、最近は交通系のカードはあまり使用しません。その代わり買い物でnanacoやWAONカードをよく使用しますが、残高不足でレジ前でオタオタすることがままあるので残高チェッカーを作ってみました。キングジムの電子マネービュアー 「RELET(リレット)」CITIZENのpeb TWTC501(歩数計と兼用)と同じようなものです。交通系ICカード専用ですがパスケースが残高を表示してくれるnocolyなどもあります。

Felicaカードリーダーは以前Arduinoクローンで作りましたがあの時はブレッドボードによるプロトタイプで終わってしまいました。今回はWiFiモジュールを使用しますので電源電圧は3.3V(単4電池3本~4本の予定)、表示はグラッフィックス表示の128x64ドットOLEDを使用しています。WiFi接続機能は自宅以外では使えませんが、あると便利かなと思い付けようと思っています。ソフト次第ですから利用方法が思いつたら実装します。
残高照会できるカードは交通系ICカード(Suica、PASMOなど)、nanaco、WAON、楽天Edyカードです。お財布携帯については手持ちがないのでテストしていません。たぶんだめでしょう。

  • ここのサイト記事を参考にさせてもらいました。
  • 128x64ドットOLEDモジュール用ライブラリーはWiFiウエザーステーションと同じライブラリーです。
    使用ライブラリーはesp8266-oled-ssd1306です。
    このライブラリーは0.96インチと1.3インチどちらのOLEDディスプレーにも対応していますので使用するモジュールに合わせて変更します。プログラム内で記述しているイメージデータはXBM形式のイメージです。XBM形式への変換はこのサイトで作成したビットマップ画像をXBM形式イメージデータに変換できます。
  • FelicaカードリーダーのライブラリーはSONYが公開している「Arduino向けRC-S620/S制御ライブラリ」を使用しています。
    Arduino IDEのバージョンが1.0以上の場合は(ほとんどこれに当たります)RCS620S.cpp内の
    #include "WProgram.h"を#include "Arduino.h"に
    修正してからでないとコンパイルエラーが出ます。



使用モジュールはESP8266シリーズをプロセッサーに128x64ドットOLEDディスプレー、SONY製のFelicaカードリーダー(RC-S620S)です。
Felicaカードリーダー(RC-S620S)とのデータ通信はシリアルですのでProgram書き込みモード時には結線をUSBシリアルモジュールに変更しなければなりません。そこでUSBシリアルを接続する8Pコネクターで必要なジャンパーも行えるように工夫しました。また実行させるときはRunモード用を8Pコネクターに接続します。

WiFiモジュール(3)2016年10月08日

WiFiウエザーステーション

Tiny OLED full graphics controllerでも使用した0.96インチOLEDディスプレーと環境センサーBME280、Weather Underground StationのAPIを使ってWiFiウエザーステーションを作ってみました。

表示しているデータはインターネット日時->BME280データ->現在の天気->3日間予報->Raspberry Pi2がThingspeak.comにアップデートしている温度データを順に表示しています。
プロセッサーには今年から使い始めたWiFiモジュールESP8266シリーズを使用しました。OLED、BME280センサーとはI2Cインターフェースを使用しますのでGPIOは2個しか消費しないのでESP-01で作成しました。program/runモードの切替はI2CのSDA信号線を共用していますのでモード切替時はESP-01の電源ON/OFFが必要です。

BME280環境センサーは温度、湿度、気圧が計測でき、精度の高いデジタル出力が得られます。プロセッサーとのインターフェースはI2CまたはSPIです。Arduino/ESP8266用のライブラリーも豊富でI2Cの場合2本の信号線と電源ですぐに使用することができますので基板上には配置せず配線を引き出してケース内での配置の自由度を持たせました。e-Bayで安価に調達できます。インターフェース、サイズ、電源などの違いで様々なモジュールが出ています。

  • ここのサイト記事を参考にさせてもらいました。
    使用ライブラリーはesp8266-weather-stationです。
    ESP-01のソフトウエアはサンプルスケッチにあるWeatherStationDemoスケッチにBME280のデータ読み込み処理とデータ表示フレームを追加する形で作成しました。
  • 0.96インチOLEDモジュールの注文をミスってしまいSPI端子仕様を注文してしまいましたが、SSD1306ドライバーはSPIとI2C両インターフェースをサポートしていますので3箇所のジャンパーを変更し、リセット回路を追加してあげればI2C端子仕様と同じになります。SCL、SDAはそれぞれD0、D1端子になります。
    使用ライブラリーはesp8266-oled-ssd1306です。
    このライブラリーにはUi Libraryが付属しています。Ui Libraryを使用すると画面のフレーム制御とスクロールを簡単に行うことができます。今回は5フレーム構成で 時刻->BME280データ->現在の天気->3日間予報->クラウドデータ をスクロール表示させています。
  • BME280モジュールは秋月スイッチサイエンスでも販売していますが3.3V仕様です。そこで安さと5Vまで仕様、小型基板のモジュールをe-Bayから調達しました。
    使用ライブラリーはBME280_MOD_1022です。
  • その他にjson-streaming-parserが必要ですのでライブラリーに追加してください。
まずはブレッドボードでテスト運転です。回路図でもわかるようにモジュール間の結線以外に抵抗4本とコンデンサー1個ですのでユニバーサル基板でかんたんに作成できます。



OLEDディスプレーは128x64ドットのグラフィックス表示装置ですので0.96インチと表示エリアは小さいですが16桁2行キャラクターLCDなどよりも価格が安く表示能力があります。3.3V-5V両用でArduino/ESP8266には手頃な表示装置です。
0.96インチOLEDはSSD1306ドライバー、1.3インチOLEDはSH1106ドライバーになりますのでプログラムソースを若干変更することで1.3インチOLEDを使用することもできます。

OLEDとBME280モジュール共に5Vまでの使用が可能(秋月、スイッチサイエンスのモジュールは3.3V仕様です)ですが、今回は3.3Vで動作させています。それ以外の電圧で動作させる場合は1個20円のAMS1117 3.3 DCDCモジュールを使用します。

パーツ紹介(amazon)2016年06月30日

最近使用しているモジュール基板