大学では定期的に電気設備点検のため全館停電になります。
そのときに研究室のサーバー(mac mini)も事前に落とすのですが、点検終了後にリモートからサーバーを起動することができません。(Macは残念ながら普通に停止した状態からWakeup On Lanができないためです)
年に数回のことですから、出勤したときに起動すればいいのですが、システム的に何とかできたらなぁ。。。とは何となく思っていました。
夏休み中に書き物をしながら、部品を集めたり、方法を探索したりしていました。
とりあえず、今日、形になりました。
まだまだ十分とは言えませんが、とりあえず現状で動作(mac miniを起動することが)できます。
ネットワーク接続のイメージは以下のような感じです。
自宅からVPNに接続してraspiにssh接続してWiringPiのプログラムを実行します。そのプログラムの出力によってモーターを起動してmac miniの電源スイッチを押します。ただ、それだけです。
技術的というかやることの要点としては以下です。
- raspiをセットアップしてssh接続できるようにする(有線でも可能だが今回は無線で接続している)。
- raspiからモーターをドライバIC(TA7291P)を制御するプログラムを作る。
- sshでraspiに接続してそのプログラムを起動する。
- mac miniのスイッチを押すための構造(今回はLEGOを使用)を作成して設置する。
raspiの設定方法はあちこちにありますのでそれを参照ください。raspiでのDCモーターの制御はarduinoですがこちらを参考にさせていただきました。
wiringpiの導入方法はこちらの通りです。ソースは以下のような感じです。特にリミットスイッチ等での制御はしていないのでモーターの回転時間を感覚であわせた、という感じです。
#include <wiringPi.h> #include <stdio.h> #define PWM 1 #define SW1 4 #define SW2 5 int main(void) { if(wiringPiSetup() == -1) { printf("Initialize WiringPi Failed\n"); return 1; } pinMode(PWM, PWM_OUTPUT); pinMode(SW1, OUTPUT); pinMode(SW2, OUTPUT); digitalWrite(SW1, LOW); digitalWrite(SW2, LOW); pwmWrite(PWM, 1000); digitalWrite(SW1, LOW); digitalWrite(SW2, HIGH); delay(200); digitalWrite(SW1, LOW); digitalWrite(SW2, LOW); return 0; }
以下が全体。
そして以下がスイッチ周り。
そして以下が電源を入れるところです(映像には映していませんがssh接続した状態でコマンドを叩いています)