木曜日, 12月 24, 2015

Arduino: リレーを使って明かりを消す

Arduino ってのはよくできたシステムです。

Arduino がどれだけすばらしいかって「発想から実現へ」の直截さが違うわけです。

例えばですね、明かりを消したいとします。つけた明かりが消えてほしい。一定時間たったら消えてほしいと思ったとします。

どうするかっていうとまず100V電源をいじらないといけないので、リレーを使います。5V回路で100Vを操作すると壊れるのでリレーで隔離するわけです。


このリレーですが、一定以上の電流が必要となります。Arduino 出力端子そのままだと心もとないので、こういうときはたいていトランジスタなどを使って電流を操作します。信号を増幅するわけですね。

まあ面倒なわけです。トランジスタ回路を組むというだけでなんか「仕事から帰ってきてこれって」とかいう気分が襲ってくる。

でそこは Arduino の世界なわけです。これがホントよくできててリレー・モジュールなるものが売っている。しかもいい値段で売っている。

(これです→http://www.ebay.com

早い話がこれをつなぐとそれだけで明かりが消せます。そのままつなげばいい。タイマーをプログラムし、信号線をつなぐだけです。

え、これだけ?これだけで動くんだ、という感動があったわけなんですが、これちょっと考えてみてください。このモジュールの利点です。部品が少ないってことは、つまりそれだけ安全だってことです。100V使うんですから安全第一です。

まあしっかり懐中電灯など用意して動かしてみたわけなんですが、大丈夫でした。リセットボタンなど押すと明かりがついて、一時間たつと消えてくれます。

*)整数型では上限を超えてしまうので時間は long 型である必要があります。

int relayPin = 7;
int buttonPin = 3;
int ledPin = 13;
unsigned long start = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(relayPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
turnOn();
delay(60*60*1000L);
turnOff();
}
void turnOn()
{
digitalWrite(relayPin, LOW);
digitalWrite(ledPin, HIGH);
}
void turnOff()
{
digitalWrite(relayPin, HIGH);
digitalWrite(ledPin, LOW);
}
void loop() {
}
view raw lightOff.ino hosted with ❤ by GitHub

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...