はじめに
UNO R4の機能を活かし、遠隔地にあるセンサーの状態を手元のパソコンのブラウザで確認する方法についてメモします。
焦電センサー
焦電センサーはHC-SR501を用いました。データシートはここにあります。このセンサーは感度調整などが難しいと感じました。



電子回路の作成
回路図は以下のようになります。

実体配線図は以下のようになります。

プログラムの作成
スケッチは以下のようになります。プログラム中の、<SSID>と<PASS>は、各自の値を設定してください。
#include "WiFiS3.h"
const int PIR_SOCKET = 2;
char ssid[] = "<SSID>";
char pass[] = "<PASS>";
int status = WL_IDLE_STATUS;
WiFiServer server(80);
void setup() {
Serial.begin(9600);
pinMode(PIR_SOCKET, INPUT);
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Failed to WiFi communication.");
while(true);
}
while(status != WL_CONNECTED) {
Serial.print("Try Connect to ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(10000);
}
Serial.print("Connected to ");
Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
server.begin();
}
void loop() {
char buf;
boolean LineBlank;
WiFiClient client = server.available();
if (client) {
LineBlank = true;
while (client.connected()) {
if (client.available()) {
buf = client.read();
if (buf == '\n' && LineBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 10");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html><body>");
if (digitalRead(PIR_SOCKET) == 1) {
client.print("<p>Someone is staying in the room.</p>");
}
else {
client.print("<p>Nobody away from room.</p>");
}
client.println("</body></html>");
break;
}
if (buf == '\n') {
LineBlank = true;
}
else if (buf != '\r') {
LineBlank = false;
}
}
}
delay(1);
client.stop();
}
}
動作確認
スケッチが入力出来たら、Arduinoへ転送します。転送終了後にシリアルモニターを開きます。すると、ArduinoがWebサーバーとして立ち上がり、そのIPアドレスが表示されます。

ブラウザでこのアドレスにアクセスします。

これで、センサーの状況がブラウザで確認できることがわかりました。


コメント