スキップしてメイン コンテンツに移動

加湿器を分解して遠隔操作してみる ~簡易IoT家電~

 

以前にロボットアームを使って制御していたのですが、運用していくうえで電源が入っていなかったことが多々あったので制御している線を引き出す確実な方法で今回は制御していきたいと思います。

使用した加湿器限定の話もあり、参考にはならない点もあると思いますが備忘録を兼ねて説明していきたいと思います。

実際に行っていることはとても単純で使用した加湿器ではボタンで物理的に接点をつなぎ電気を流すことで、ON、OFFなどの制御をしているだけだったので理解すれば(自己責任にはなりますが)だれでもできると思います。 また同じようなつくりの製品にも応用できると思います。

使ったもの

  1. +ドライバー(数種類:長い、短い、太い、細い)
  2. ESP8266
  3. ジャンパワイヤ
  4. 加湿器
  5. フォトカプラ(TLP561J)

  • 追加で用意した方が良いもの:絶縁手袋
    以下で示す画像では素手で基板などに触れていますが、分解や高電圧の感電に慣れているので注意してください。
    特に基盤を触る場合は感電の恐れがあるので、回避策として絶縁手袋の利用をお勧めします。

ESP8266とフォトカプラは備品の中にあったものを使っているので特にこだわって使っているわけではありません。

スイッチサイエンスさんの物を使用していますがHaLakeの備品を使ったのでいつ購入したものなのかわかりません。そのため現在販売しているものとは一部仕様が変わっている可能性があるので注意してください。

念のため同じようなもののリンクを貼っておきます。

ESPr® Developer(ESP-WROOM-02開発ボード)www.switch-science.com

  • 注意:前述したように仕様が違う場合がありますので注意してください。ESP8266チップを使用した物であれば問題なく動作すると思いますが、リンクの物を使用する場合は自己判断でお願いします。

分解

  • 注意:何か分解する際は自己責任でお願いします。けがなどをする場合がありますので安全に配慮して行ってください。
    家電などのコンセントから給電するタイプのものを扱う際は特に感電や、断線による火事などが起こる可能性があることに注意してください。
    損害等が発生した際、こちらは一切の責任を負いかねます。

加湿器自体の分解はとても簡単でとくに行き詰まることはありませんでした。

ねじを外す順番も見える場所から外していくだけだったので誰でも出来ると思います。
ねじの種類は、外した場所だけで4種類ありました。外していない場所があるので確実ではありませんが、いろいろ考慮すると4種が妥当だと思います。

種類や数が多い時は百均などのネオジム磁石を用意しておいて散らばらないように付けておくと良いでしょう。

キャスター付きの水受けとタンク2個はもともと取り外しが可能になっているので外し、タンクで隠れていたねじを外します。  

そうすると周りの外装がかるくパカパカになり、タンクとは逆側のねじをいくつか外すと外装が簡単に外れます。(写真ばかりになってしまうのと撮りにくいところもあったのでいくらか割愛します。)写真に写っている所以外でもいくつかねじがありました。 

このように隠れた場所にあったり、写真ではわかり辛いですがドライバーの種類によっては長すぎてうまく外せなかったり、短すぎて届かなかったりするのでいくつかの種類を用意しておくと良いでしょう。 

  • 注意:全て外さずに無理に取り外ししようとすると壊れるので注意してください。

この時よく見たら同じくねじで止まっていてもいいような場所にねじ止めがされていませんでした。強度的には十分だったので問題ありませんが、これがデフォルトなのかわかりません。

片側の外装は穴からコードが通り本体につながっているので完全に分解しないと別々にはできませんでした。
上部画像のねじを外すとコントロールパネルと本体大部分のモーター周辺で切り離せます。しかしここにも太いコードが通っているので少し厄介ですが仕方ありません。

コントロールパネルも見えるねじから外すことで簡単に基盤が見えてきます。

メイン基板とは別に湿度の測定用に小さい基盤がむき出しになっていました。メイン基板はその後ろにある白い箱に入っています。

  • 注意:基盤を触る時は電源を切り、時間を少しおいてコンデンサなどの放電を確認してから触るようにしてください。基本は素手で触らないことをお勧めします。
    二度目ですが、基盤を触る際は絶縁手袋などを使用して感電対策をしたうえで行うことをお勧めします。

小さい基盤には汎用グランドセンス オペアンプが使われています。

www.rohm.co.jp

白い箱の中のメイン基板、表です。裏側全面は配線があり撮り辛かったので要所要所撮ったので次の項で説明します。 

テスト

メイン基板で一番上に位置しているタクトスイッチが電源のON、OFFを制御しているので、まずはこちらから試してみます。

上がメイン基板裏側の写真になります。青枠で囲まれた部分4本が電源用タクトスイッチの足に当たります。
光を当てると赤枠で囲まれた2本がスイッチの押下で導通することによって制御されていると予想できます。
しかし導通だけで出来るのか100%確定していないのでワニ口クリップなどで他の部分が導通しないように気を付けて先ほどの2点を直接つなげてみて確認します。

  • 注意:本来であればオシロスコープやマルチメータなどを使って慎重に調査する必要があるので注意してください。

見にくいですがLEDがついたり消えたりしているのがわかります。これで単純に導通させれば制御できることがわかりました。 

配線

赤枠のように適当な線をはんだ付けします。(汚いので恥ずかしいですが...)
色は適当です。

上部の赤と黄の線は右側と左側で入れ替えても問題ありません。結局は線同士が導通すればいいので向きは関係ありません。
しかしそれ以外は写真と同じ場所につないでください。表も出しておきます。

フォトカプラのデータシートもあるのでこちらも参考にどうぞ

https://akizukidenshi.com/download/ds/toshiba/TLP561J.pdf

プログラム

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

#define ON_PIN 12

ESP8266WebServer server(80);


void setup(){
  pinMode(ON_PIN,OUTPUT);

  Serial.begin(74800);
  delay(500);

  WiFi.config(IPAddress(192,168,xxx,xxx),IPAddress(192,168,xxx,1),IPAddress(255,255,255,0));
  WiFi.begin("******", "######");
  while(WiFi.status() != WL_CONNECTED){
    delay(1000);
    Serial.print(".");
  } 

  if(WiFi.status() != WL_CONNECTED){
    Serial.println("No Connection");
    ESP.restart();
  }
  else Serial.println(WiFi.localIP());
  
  server.on("/", [](){
    digitalWrite(ON_PIN,HIGH);
    delay(500);
    digitalWrite(ON_PIN,LOW);
    server.send(200, "text/html", "Change Humidifier Status!");
  });

  server.begin();
}

void loop(){
  server.handleClient();
 }

コピペしてそのまま使われる方は書き換えが必要です。

WiFi.begin("******", "######");

******を消して読者の方が使われているWi-FiSSID(名前)に、
######を消して読者の方が使われているWi-Fiのパスワードに書き換えてください。

これをesp8266に書き込んだらもう完成です。

動作確認をしていきましょう。

動作確認

後は同じ一部書き換えたプログラムを使っていれば、(esp8266と同じネットワーク内の)PCやスマートフォンなどを使って下のURLアクセスすることによってONとOFFを切り替えることが出来ます。

Change Humidifier Status!

などと帰ってくればesp8266は正常に動作していることがわかります。

接続できなかった場合はアクセスする端末とesp8266が同じネットワーク内にいないか、Wi-Fiに接続できていない可能性があります。

その時は落ち着いてシリアルモニタなどを使ってWI-Fiに接続できているかなど確認してみてください。

接続されていなければNo Conectionと表示されます。

接続されている場合はIPアドレスが表示されます。

配線にも問題ないとしっかり動作してくれます。

おまけ

電源を入れたいときに先ほどのURLに接続すれば簡単にON・OFF切り替えられますがHaLakeで運用するうえで開店と閉店時に自動で電源を入れ替えてほしいのでもうひと手間加えます。

常時稼働しているRaspberry piがあるのでそこから決まった時間に先のURLにアクセスしてもらって制御してもらおうと思います。

Raspberry piコマンドプロンプトsshなどでアクセスしたら以下の操作をしていきます。

mkdir humidifier
cd humidifier
nano cron.py

三つ目のコマンドでテキストエディタが開かれるので下のプログラムをコピペしてCTR+Xの後Enterで保存します。

import requests

URL = 'http://192.168.xxx.xxx'

res = requests.get(URL)
print(res)

その後コマンドプロンプト

crontab -e

したら、以下をコピペして最後に書き加えてました。

30 8 * * 0,1,2,4,5,6 sudo python3 ~/humidifier/cron.py

00 18 * * 0,1,2,4,5,6 sudo python3 ~/humidifier/cron.py

書き加えた内容の説明は今回省きますが、HaLakeで運用するために特化した設定なので意味などを調べて書き加える内容を書き換えて使用してください。

これでHaLakeの運営時間(定休日:水曜日 9:00~18:00)で起動、停止を自動で行ってくれます。

まとめ

  • 分解して構造を理解するのはめちゃくちゃ楽しい
  • 身の回りの家電を簡易IoT化するだけでも評判はいい
  • このレベルならだれでもできる
  • 消費電力やパーツ、機能などまだ深堀できる

どのプログラムも割と簡単なので初心者でも安心して理解できる内容になっています。

日曜大工ならぬ日曜IoTみたいな、世の中のお父さんたちに広まってほしいですね。

調べたら同じようなことを言っている人がいたのでちょっと悔しい。

今回の記事でHaLake使ったものはHaLakeに備え付けの電子部品になっています。ご興味ある方はHaLakeに遊びにいらしてください。

コメント

このブログの人気の投稿

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その2

前回の記事 に引き続きPhaser3+Typescriptを使って RPG の基礎を作っていきます。 この記事は前回の記事を呼んだ前提で説明していきますので、ぜひそちらを先に読むことをお勧めします。 また、今回の記事は前回よりも難易度と内容量が上がっていますが、記事の最後に作業後の リポジトリ のリンクがありますので、そちらを先にダウンロードしてそちらと比較しながら学習することができます。 前回まで作成した状態のプログラムが以下の リポジトリ からダウンロードできますので前回まででうまくいっていない方は参考にしてみてください。 github.com 最終目標(再掲) ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・ゲームの作り方の断片を知る ・キャラの表示できるようにする ・キャラを移動できるようにする ・当たり判定をつける ・ NPC の追加してみる ・話しかけられるようにする 開発前提(再掲) ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール(再掲) ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 当ブログ仕様の画像素材の注意点 当ブログで使用する画像素材は『 ピポヤ倉庫 』より許可なしで無償再配布・改変が認められたものを改変して作成されたものです。 中には許可なく再配布・改変してはいけない素材もインターネット上には多く存在するのでそれらを使用するときは十分に規約を呼んでから使用しましょう。 1. キャラの表示 想定画面 今回は、はじめにキャラつまり操作

M5Stackで、においセンサー(TGS2450)を使ってみる。(LCDに表示編)

今回は、においセンサー(TGS2450)から取得したデータをM5Stackの LCD にグラフ表示をしていきます。 今回主に使用したもの M5Stack 10Ω抵抗 5本 Pch  MOSFET  2SJ334(スイッチとして利用) M5StackSideBB(ブレッドボード) M5Stackのピンはそのままだと配線するとき手間がかかるかと思いますので、今回はM5StackSideBBを利用しました。 ブレッドボードも付いているので、手軽に電子工作できるので個人的にオススメです。 SideBB for M5Stack www.switch-science.com 諸注意 本ブログのプログラムはArduinoIDEまたはPlatformIOでM5Stackの開発ができる状態であること前提のものですので、各自導入をお願いします。 過去に Windows のArduinoIDEで M5Stackの開発環境を構築する記事 があるので、参考にしてください。 においセンサー(TGS2450)について 今回使用したセンサーは 秋月電子通商 で購入できます。 http://akizukidenshi.com/catalog/g/gP-00989/ akizukidenshi.com TGS2450には4つのピンがあり、使用するのはそのうちの3本でヒーターを温めるピン、センサー情報を得るピン、GNDがあります。 ここで注意したいのは、ヒーター電圧は1.6Vと記述されているのでM5Stackで利用するときは分圧して3.3Vを1.6V近くまでに降圧することをお勧めします。 TGS2450のセンサーは可変抵抗になっており、データシートには5.62kΩ〜56.2kΩの間を抵抗が変化し、においが強いとより低くなると記述されていました。 よって、センサーの値をM5Stackで取得するにはセンサー抵抗と外部に接続する任意の値の抵抗による分圧回路によって求めることができます。 TGS2450の動作方法は、250ms周期でセンサーに電圧を5ミリ秒on、245ミリ秒offの状態にしてヒーターは8ミリ秒on、242ミリ秒offにすることで値を取得します。 配線 においセンサーとM5Stackの配線 上の図が配線図です。 30Ωの抵抗は10Ωの抵抗を三つ直列に接続して作成しました。 また、上部の抵抗10Ω二

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その1

今回はPhaser3とTypescriptを使って簡単な RPG ゲームを作る方法を紹介していきます。 内容はPhaser3およびゲーム作りについての記事なので、Nodejsの周辺モジュールなどの説明は一部省いての説明になりますのでご了承ください。 またこの記事では Phaser2 ではなく Phaser3 を使用するので注意してください。 この記事は二部構成になりますので、この記事を読んだ際はぜひ次の記事も読むことをお勧めします。 最終目標 ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・開発環境を整える ・Phaser3の開発構成を知る ・スタート画面を作る ・マップ表示をさせる 開発前提 ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 1. 最低限の開発環境の準備 今回最低限の環境を整えるために、『Typescript + Phaser3』の開発テンプレートを github リポジトリ で公開しました。 以下からZIPをダウンロードするか、 git clone コマンドで各自環境に展開してみてください。 ここから先は リポジトリ のプログラムを元に説明していきます。 github.com 展開するとファイル構造は以下のようになっているかと思われます。 注: 他にもファイルやフォルダがあるかと思われますが、表記されているのは今回使うものになっています。 - src/ (これから書くプログラムの保存領域)