obniz常時稼働にラズパイを使う

obnizとリレーモジュールの組み合わせで、遠隔で家電を操作する仕組みを作りました。しかし、操作画面のブラウザを閉じたら、obnizの動作が停止し、家電の電源が切れてしまいます。苦肉の策でラズパイを導入しました。

家電の電源を保持できない

スマホで、ホットカーペットと加湿器を、ネット経由でONにできます。

しかし、操作画面のブラウザを閉じたり、スリープになると、リレーモジュールへの通電が止まり、家電の電源が落ちてしまいます。

ブラウザを常時起動

電源が落ちないようにする方法を考えなければなりません。

このプロダクト、最終的には24時間稼働して、温度・湿度センサーにより、自動でホットカーペットと加湿器の電源をON/OFF切り替えようとしています。

常時稼働はいくつか方法がありそうですが、暫定的に、ラズパイのブラウザを起動しっぱなしにする方法をとりました。最も簡単です。

スマートではないですが、これでobnizが常時動作してくれます。

obnizを使わず、ラズパイだけでよかったのでは・・・と、考えてしまいますが、開発の早さでobnizを愛用してしまいます。

obnizで電源タップのリレーBOX

リレーモジュール付き電源タップを2つobnizにつなぎ、インターネット経由で家電のON/OFFを操作できる仕組みをつくりました。ほこりがかぶらないよう、ガラスのふた付き木箱に入れています。

木箱に穴を空ける

ダイソーの100円木箱を使っています。木工用ホールソーで、電源タップを通す穴を空けます。(子供がやる場合、十分注意してください。)

左右2つずつ、計4つの穴を空けました。

リレーモジュールのスペーサー取り付け

リレーモジュールを浮かせるため、スペーサーを取り付けます。

木箱に直接取り付けるより、別の木の板を用意したほうがお勧めです。

作業がしやすく、失敗も許されます。

ダイソーの木の板(MDF材 6枚入り)を用意し、裏から穴を空け、スペーサーをねじ止めします。

ネジ穴と、ネジ皿が入る穴を、2段階で開けると良さそうです。

ネジ皿用の穴は、途中まで掘り、木材の面からネジ皿が飛び出ないようにします。

電源タップリレーモジュールを取り付け

スペーサーに電源タップリレーモジュールを取り付けます。

2つの家電を操作したかったので、2組取り付けました。

obnizとリレーをつなぐ

obnizとリレーモジュールを、ジャンパーワイヤーでつなぎます。

単純につなぐと、6つのIOピンが必要ですが、VCCとGNDを2つのリレーで共用すると、4つで済みます。

小さいブレッドボードを木材に取り付け、配線します。

obnizのIOピンは、以下のように挿しています。

VCC・・0
GND・・1
リレーその1-SIG・・2
リレーその2-SIG・・3

IOピン2、3に電流を流すと、リレーがON/OFF切り替わります。

リレー制御コード

obnizコンソール、デフォルトのHTMLを少しいじっただけです。

“obnizID”のところに自分のIDを入れ、適当なブラウザで立ち上げると動作します。

配線整理

最後に、少し配線がこんがらがって、電源タップの導線もむき出しで危なかったので整理しました。

obnizに挿すジャンパーワイヤーは、4本つづりのものに替え、電源タップの導線には、絶縁テープを巻いています。

テスト実行

地味な変化で分かりにくいですが・・・スマホで2つの家電のON/OFFを切り替えることが出来ました。

防炎スプレー「ハイショーカー」の性能確認

防炎スプレー「ハイショーカー」に、どれだけ防炎能力があるか?実際に火を付けて試します。電子工作をしていると火事になる危険があるので、防炎スプレーで予防できるか知りたいです。

防炎スプレー比較実験

木の箱を用意します。左はそのままティッシュを入れ、右には箱に防炎スプレーをかけ、さらにティッシュを入れた後も、上から防炎スプレーをかけます。

ただのティッシュに火を付けてみる

左の箱のただのティッシュに火を付けました。

ティッシュは勢いよく燃え、25秒くらいかけて燃え尽きました。

箱の底が変色しています。日本の湿度だと、この火力で箱まで燃えることはないでしょう。

防炎スプレーのティッシュに火を付けてみる

今度は右の箱、防炎スプレーをかけたティッシュが乾いてから、火を付けてみます。

効果が見られ、火の付きが悪いです。

様々な場所に火を付けてみると、スプレーのかかりが少ないところが燃えています。

スプレー量が多ければ防炎になったかもしれません。

ゆっくりゆっくり煙を上げながら、燃えていきます。

一部、白い部分を残し、2分以上かけて、だいたい燃えました。

燃焼後の箱の中比較

灰を取り除き、箱の中を見てみます。やはり防炎スプレーをかけた右の方が、焦げた跡が少ないです。

動画で燃え方比較

動画で比較すると、防炎スプレーをかけることで燃えにくくなっていることが分かります。

(手振れで見にくくてごめんなさい。三脚使い、さらに同時に火を付けて比較すればよかった・・・)

大電流を扱う電子工作の場合、収納する箱に防炎スプレーをかけて燃えにくくするのは、一定の効果が期待できそうです。

電源用USBコネクタで手軽に動作テスト

前回制作したリレーモジュールのテストではマイコンを使いました。もっと簡単にテストする方法で、電源用USBコネクタから電源を取って試す方法があります。

電源アダプタ・リレーモジュール

秋月電子の「大電流大型リレーモジュールキット」を取り付けた電源アダプタです。家庭用100Vコンセントで動く家電を、リレーで制御できるようになります。

リレーモジュールに5Vの電流を流すと、電源タップの100Vにも電流が流れます。つなぎ方を変えれば、逆に5Vの電流を流して100Vの電流を止めることもできます。

電源用USBコネクタ

テスト用の5V電源を用意するとき簡単な方法は、秋月の「電源用マイクロUSBコネクタDIP化キット」を使うことです。

ブレッドボードやターミナルと組み合わせて、汎用的に使える5V電源となります。

リレーモジュールに5V電源のジャンパーワイヤーを指すと、動作確認ができました。

電源用USBコネクタは電子工作のテストで、しばしば役立ちます。

電源タップに大電流リレーモジュールを接続

一般的な100Vで動く家電を電子工作に組み込みたいとき、マイコンの電源では無理なので、リレー回路を使います。電源タップを改造して、100Vの家電を制御してみます。

大電流大型リレーモジュールキット

秋月電子で「大電流大型リレーモジュールキット」を買いました。一般家庭の100VACを、マイコンに使われる5Vの電流で制御できるようになります。

扱う電流が大きい時は、キット製品を買った方が安心です。

リレーモジュールキット組み立て

基板に部品をはんだ付けします。

はんだ付けする間隔が広いので、比較的やりやすかったです。

0.1m電源タップを改造

エレコム製の0.1m電源タップ(ACアダプタ)を使います。

これにリレーを取り付けましょう。

ケーブルには2本の導線が入っており、片方だけペンチでむき出しにします。

なお、電源タップの改造は、電気工事士の資格がなくても可能です。

むき出しにした導線を、このままリレーモジュールに取り付けるのは難しいです。

導線の長さが足りず、深く押し込めず、中途半端な接触で高熱になる恐れがあります。

家にあった圧着端子を使うことにしました。

圧着端子を導線に付けてから、さらに、はんだで固定します。

圧着端子を付けたら、それをリレーモジュールのターミナルに差し込み、しっかり固定します。

100VACのリレーのテスト

作成したリレー付き電源タップを家庭用コンセントに挿します。

電源タップの反対側には照明を取り付け、リレーモジュールにはobnizボード(マイコン)を取り付けます。

スマホからobnizボードを操作し、リレーに電流を流します。

すると、リレー内部で「カチッ!」と電磁石がくっつき、照明が通電して光りました。

問題なく動作しています。

追記:絶縁しました

導線のむき出し部分があると怖いので、絶縁しました。

herokuでnode.jsアプリをデプロイするまで(2)

HerokuでにWebアプリのファイルをアップした時、画像が読み込めない問題が起こりました。仕様上、「public」ディレクトリに画像などの静的ファイルを入れないといけないようです。

静的ファイルが読み込めない?

自作のWebアプリをアップデートしました。ページ数も増え、画像などの依存ファイルも増えました。

これをHerokuにアップしてみます。

アップにはGitを使い、コミットは問題なく行われたようです。

しかし、Webアプリにアクセスしてみると、アップしたファイルが404エラーとなってしまい、画像などが読み込めない問題が起こりました。

「public」ディレクトリ内に格納

Herokuの仕様で「public」ディレクトリ内のファイルしか、静的ファイルにアクセスできないようです。

私の場合、node.jsのサーバーファイルと、同じ階層にWebアプリのHTMLや画像格納フォルダを作っていました。

Webアプリに使う静的ファイルを、新規作成した「public」ディレクトリに移動します。

階層の変更は簡単

静的ファイルを「public」ディレクトリに格納したことで、階層が変わりました。

1階層深くなっています。

階層の変更は、サーバー起動ファイル(index.js)を編集すれば解決できます。※expressを使っている時の例です。

publicがルートになり、階層変更前と同じように読み込めるようになりました。

以上、備忘録を兼ね、記録します。

herokuでnode.jsアプリをデプロイするまで(1)

node.jsを使いlocalhostでチャットなどのWebアプリを簡単に作ることはできます。これを他の人が見えるようデプロイする場合、herokuを使うと簡単です。ただ、2点つまづいたので、記録に残します。

ガイドを見ながらまずは学ぶ

Heroku スターターガイド (Node.js)を見ながら、アプリのデプロイ方法を学びます。

このガイドに書かれているのは、サンプルで用意されているアプリをダウンロードしてデプロイする方法でした。

今回は自分のPCにある、ローカルアプリをデプロイしたいため、とりあえず「​ローカルの変更をプッシュする」の項目までガイドを確認すればよさそうです。

しかし、「heroku open」でローカルにあったアプリを起動しようとすると、ブラウザに「Application error」と表示されます。

「heroku logs –tail」でログを見ながら解決します。

package.jsonに起動するjsの記述が必要

node.jsサーバーを起動させる命令を、package.jsonに書かないと何もできません・・・。

ログでは、startできません!とエラーが出ていました。

ローカルでは、コマンドプロントやターミナルで「node index.js」を起動していて忘れがちですが、”start”: “node index.js”を書く必要がありました。

ポートは環境変数を指定

node.jsでサーバーを立ち上げるとき、ローカルではポート3000としていました。しかし、これではエラーがでます。ガイドと同じ5000にしても、やはり下記のようなエラーがでます。

サンプルのコードは、ポートを環境変数、なければ5000と指定しているようです。

ポートを書き換えることで、無事アプリが起動しました。

node.jsバージョンアップで解決「TypeError: stream_1.pipeline is not a function」

node.js + express + socket.ioで簡単なチャットを作ろうと思ったら、「TypeError: stream_1.pipeline is not a function」というエラーが発生。node.jsを最新にすることで解決しました。

socket.ioでエラー

チャットアプリを作ろうとしたら、いきなりエラーが発生。直近でsocket.ioをバージョンアップしたのが原因だと思います。

情報を探るとsocket.ioのサイトで、下記のような記述がありました。

「This error is probably due to your version of Node.js. The pipeline method was introduced in Node.js 10.0.0.」

Node.jsのバージョンが問題のようです。

WindowsでNode.jsバージョンアップはインストーラーを使う

自分の環境のnode.jsバージョンは、8.10.0でした。

これをバージョンアップすれば解決しそうですが・・・検索ですぐに出てくる「npm install -g n」コマンドは、Windowsに対応していません。

node.jsのサイトに行き、インストーラーをダウンロードしてそのまま実行することで、Windowsの場合はnode.jsをバージョンアップできます。

node.js バージョンアップ14.15.4になり、「TypeError: stream_1.pipeline is not a function」のエラーは無事解決しました。

サブディスプレイは右側が省スペース

パソコンでデュアルディスプレイにする場合、サブディスプレイを右側に置いています。右利きのマウスを使う人に限りますが、サブディスプレイの前にマウスを置けるので省スペースです。

サブディスプレイは左右どちら?

メインディスプレイの左右どちらにサブディスプレイを置くか・・・人それぞれで、経験上はどちらでも慣れます。

慣れるのであれば、右側に置いた方が良いと思います。

サブディスプレイの前にマウスを置けば、使うスペースがコンパクトになります。

ディスプレイ間の配線に注意

ノートPCの場合、右側にケーブルが集中していると、配線が邪魔になってディスプレイ間隔があいてしまいます。

解決策の一つに、L字アダプタを使う方法があります。

斜め後ろにケーブルが行く新型

ケーブルが邪魔にならないよう、工夫されている機種もあります。

HPのSpectre x360(2020モデル)は、斜め後ろにケーブルがいき、サブディスプレイを近づける余白ができます。

デュアルディスプレイで、よりコンパクトに、より効率的に作業できればと思います。

L字Type-Cでデュアルディスプレイを近づける

USB Type-CでノートPCをデュアルディスプレイにする場合、配線が邪魔でディスプレイ間が離れてしまう場合があります。L字の変換アダプタを使うことで、ディスプレイを近づけることが出来ます。

Type-C L字変換アダプタ

AmazonでType-C L字変換アダプタは、2つセット1,000円程度で購入できます。

USB Type-Cは裏表がないため、L字を好きな方へ向けられます。

Type-AやType-Bだと、右曲がり、左曲がりのL字を買い間違えて使えなかった・・・と、失敗経験がある人もいると思います。

裏表がないことはすばらしいです。

ディスプレイの隙間

ノートPCでデュアルディスプレイにする場合、最近はType-Cが多くなっていると思います。

しかし、Type-Cのポートの場所によっては配線が邪魔になり、ディスプレイを近づけられない問題が発生します。

L字ならコンパクトに接続可能

Type-C L字変換アダプタを使うことで、USBの配線を邪魔にならない方向へ流すことができます。

デュアルディスプレイが離れてしまって、作業効率が落ちている人の参考になれば幸いです。