テクノロジー遊び

どんな複雑なプランも可能なプログラムタイマー(Macの場合)

IoTが流行っていますが、身近でコントロールしたくなるものはコンセントだったりしませんか?

ところが「プログラムタイマー」と呼ばれるものをアマゾンで探しても、単純な動きしかできません。設定もチャチなボタンをいろいろ押さなくちゃいけなくって面倒くさい。

ならば作ってみようと考えはじめました。

最も簡単にやる方法をいろいろ探して、Macに標準装備のカレンダーは時間が来たら、プログラムを起動する機能(ファイルを開く)があることに気づきました。
カレンダーならば、毎週とか土日を除くとかに応じて、スイッチをオン・オフするイベントを記録すればいいわけです。
USB経由でArduinoにポートをオン、オフする司令を出し、それをパワーコントローラーに伝えられればできそうです。

素晴らしいことにはんだ付けは必要なしでできました。

 

電源スイッチ

まず電源スイッチはこれです。なによりもしっかりしたケースに入っている点が100Vを扱う場合は安心です。


Controllable Four Outlet Power Relay Module version 2といい、AdaFruitで簡単に買えます。一週間もせずに届きました。
ちゃんと100Vで動作します。緑色に見えるところにArduinoのポートとGndをつなぎます。ここではPort8とGndに接続してあります。

Arduino

Arduinoには開発環境から[スケッチ例->Firmata->StandardFirmata]をコンパイルして書き込みます。

Firmata

FirmataとはPCからArduinoのポートをコントロールする標準のプログラムです。

テスト用サンプルプログラムがFirmata.orgにありますから、Linux,MacやWindowsなど使用しているOSに応じてダウンロードします。

試しにポートのオン、オフをして動作を確認してみてください。

Python

次にPythonプログラムを作成します。
いろいろ考えましたが、PythonはもともとMacに組み込まれています。

2.7系ですが、これでいいのであれば、

https://pip.pypa.io/en/stable/installing/

上記 URL から get-pip.py をダウンロードしターミナルから実行します。

python get-pip.py --user

実行が完了すると $HOME/Library/Python にインストールされます。

いつも使えるようにするためには、エディターnanoで.bash_profileを編集します。
次のステートメントを入れましょう。

export PATH="$HOME/Library/Python/2.7/bin:$PATH"

目的のpyfirmataパッケージをインストールします。

pip install pyfirmata

これでPythonからFirmataをコントロールする準備完了のハズ

ポートをオンにするpythonプログラムは次のとおり。

#!/usr/bin/env python
# -*- coding: utf-8 ^*-

import pyfirmata

pin = 8
port = "/dev/cu.wchusbserial1420"
board = pyfirmata.Arduino(port)

board.digital[pin].write(1)

ピン番号はお好みで、ポートはArduinoのIDEで確認した値です。

ファイルpy_on.pyなんて名前で保管。

ポートをオフにするpythonプログラムは次のとおり。

#!/usr/bin/env python
# -*- coding: utf-8 ^*-

import pyfirmata

pin = 8
port = "/dev/cu.wchusbserial1420"
board = pyfirmata.Arduino(port)

board.digital[pin].write(0)

py_off.pyなんて名前で保管。

通常、pythonプログラムは

python py_on.py

なんて感じで実行するんですが、

py_on.pyをいきなりダブルクリックしたら実行できますか?

Python Launcherが文句言ってきたら、設定してください。

いきなり実行できるようにしておかないと、カレンダーから起動できません。

 

Macのカレンダー

カレンダーを出して、「新規イベント」を指定します。

クリックして

新規イベントに適当に名前を書いて、2019。。。。と日付をクリック

通知で「カスタム」を選ぶと、ナント「ファイルを開く」なんていうものがあります。

さらに「その他」を選ぶとファイルを選ぶダイアログが出ますので、先のpythonプログラムを指定します。

もちろん実行は「イベントの開始時刻」にします。

これで「OK」すれば、あとは時間が来るのを待ってみましょう。

なお、カレンダープログラムでカレンダーがiCloud上にあるのではだめでローカルのMacにあるカレンダーでないといけない、というのをどこかで診ました。

あとは、カレンダーで好きなだけ、ON, OFFプログラムを指定してください。

ドヤ顔で聞きます。

「ええやろ?」

欠点はラッチがないので、Macが落ちるとポートも落ちることです。
そういうのが困る方はスイッチには、ポートオフでオンになるコンセントもあるので工夫するとよいと思います。

関連記事

  1. OSに関係ないアプリ

  2. M1 MacとMPLAB X

  3. MySQL覚書

  4. CodeIgniter アップデート用View

  5. 省電力一定時間点滅 スイッチ付プログラム

  6. PICでwaitのループを簡単に作る方法

  7. M5StickCを時計に

  8. CodeIgniterのScaffolding

記事をプリント