1Sheeldで作るスマートホーム自動化&セキュリティシステム
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | メインボード |
| 1Sheeld | 1 | スマホを40種類のシールドとして利用 |
| リレー (4チャネル) | 1 | YW Robot製など、照明制御用 |
| ブザー | 2 | 防犯アラーム・温度警告用 |
| 温度センサー (LM35DZ) | 1 | アナログ出力、キッチン等の温度監視 |
| ジャンパーワイヤー | 1セット | |
| PIR人感センサー | 1 | 侵入検知用 |
| 磁気ドアスイッチ (SparkFun) | 2 | 玄関・バルコニーの開閉検知 |
| キャラクタLCD (16x2) | 1 | ステータス表示用 |
必要な工具
- レーザーカッター (ケース加工用)
プロジェクト概要
このプロジェクトは、1Sheeldを使ってスマートフォンのセンサー・通信機能をArduinoで活用するスマートホームシステムです。音声認識、SMS、メール、テキスト読み上げ、時計などのシールドを組み合わせ、以下の機能を実現しています。
主な機能
- 音声制御: 「Jarvis」と呼びかけてから命令。「リビング オン/オフ」「寝室 オン/オフ」などで照明操作
- SMS制御: 「lights on/off」のSMSで全照明一括操作、実行後にメール通知
- 防犯システム: 「security on」で起動。磁気スイッチでドア開閉検知 → ブザー鳴動 + メール通知
- 温度監視: LM35DZで35℃以上検知 → ブザー + メール通知 (コード内ではコメントアウト)
- 時刻読み上げ: 「what time is it」で現在時刻を音声・LCD表示
- 挨拶応答: 「good morning」で挨拶+時刻読み上げ
1Sheeldのセットアップ手順
- 1SheeldをArduinoにスタックし、専用ライブラリでコード作成
- Arduino IDEでアップロード (UARTスイッチを「Uploading mode」に)
- 書き込み完了後、スイッチを「Operating mode」に戻す (重要: 戻さないと通信不可)
- スマホに1Sheeldアプリをインストール、Bluetoothでペアリング (初期コード: 1234)
- 使用シールドを選択: SMS, Voice Recognition, Text To Speech, Clock, Email
サンプルコード (抜粋・整理版)
#define CUSTOM_SETTINGS
#define INCLUDE_VOICE_RECOGNIZER_SHIELD
#define INCLUDE_TEXT_TO_SPEECH_SHIELD
#define INCLUDE_CLOCK_SHIELD
#define INCLUDE_SMS_SHIELD
#define INCLUDE_EMAIL_SHIELD
#include
#include
// ピン定義
#define RECEPTION_LAMP A1
#define BEDROOM_LAMP A2
#define BATHROOM_LAMP A3
#define KITCHEN_LAMP A4
#define MAGNETIC_RECEPTION 8
#define MAGNETIC_BALCONY 9
#define BUZZER_SECURITY A5
#define BUZZER_TEMP 10
LiquidCrystal lcd(2,3,4,5,6,7);
bool security = false;
int state = 0; // "Jarvis"検知後のコマンド待受状態
void setup() {
// リレー初期化 (Active LOW想定)
pinMode(RECEPTION_LAMP, OUTPUT); digitalWrite(RECEPTION_LAMP, HIGH);
pinMode(BEDROOM_LAMP, OUTPUT); digitalWrite(BEDROOM_LAMP, HIGH);
pinMode(BATHROOM_LAMP, OUTPUT); digitalWrite(BATHROOM_LAMP, HIGH);
pinMode(KITCHEN_LAMP, OUTPUT); digitalWrite(KITCHEN_LAMP, HIGH);
pinMode(BUZZER_SECURITY, OUTPUT);
pinMode(BUZZER_TEMP, OUTPUT);
pinMode(MAGNETIC_RECEPTION, INPUT_PULLUP);
pinMode(MAGNETIC_BALCONY, INPUT_PULLUP);
lcd.begin(16,2);
OneSheeld.begin();
// 起動メッセージ表示
lcd.print("Smart Home");
lcd.setCursor(0,1); lcd.print("Security System");
delay(4000);
lcd.clear(); lcd.print("CALIBRATING....");
delay(10000);
}
void loop() {
// 時刻取得
Clock.queryDateAndTime();
int h = Clock.getHours();
int m = Clock.getMinutes();
String noon = (h > 12) ? "PM" : "AM";
if (h > 12) h -= 12;
// SMS受信コールバック設定
SMS.setOnSmsReceive(&onSmsReceived);
// 音声認識開始 (8秒間待受)
VoiceRecognition.start();
OneSheeld.delay(8000);
if (VoiceRecognition.isNewCommandReceived()) {
String cmd = VoiceRecognition.getLastCommand();
// ウェイクワード "jarvis"
if (cmd == "jarvis") {
TextToSpeech.say("yes sir");
lcd.clear(); lcd.setCursor(8,0); lcd.write(byte(0)); // スマイル表示
state = 1;
}
// 以降、state==1 のときのみコマンド受付
if (state == 1) {
if (cmd == "reception on") { controlLamp(RECEPTION_LAMP, LOW, "reception on"); }
else if (cmd == "reception off") { controlLamp(RECEPTION_LAMP, HIGH, "reception off"); }
else if (cmd == "bedroom on") { controlLamp(BEDROOM_LAMP, LOW, "bedroom on"); }
else if (cmd == "bedroom off") { controlLamp(BEDROOM_LAMP, HIGH, "bedroom off"); }
else if (cmd == "bathroom on") { controlLamp(BATHROOM_LAMP, LOW, "bathroom on"); }
else if (cmd == "bathroom off") { controlLamp(BATHROOM_LAMP, HIGH, "bathroom off"); }
else if (cmd == "kitchen on") { controlLamp(KITCHEN_LAMP, LOW, "kitchen on"); }
else if (cmd == "kitchen off") { controlLamp(KITCHEN_LAMP, HIGH, "kitchen off"); }
else if (cmd == "good morning") { greetAndTellTime(h, m, noon); }
else if (cmd == "what time is it") { tellTime(h, m, noon); }
else if (cmd == "security on") { security = true; TextToSpeech.say("security system activated"); lcd.print("Security ON"); }
else if (cmd == "security off") { security = false; TextToSpeech.say("security system deactivated"); lcd.print("Security OFF"); }
state = 0;
}
}
// 防犯監視
if (security) {
int mag1 = digitalRead(MAGNETIC_RECEPTION);
int mag2 = digitalRead(MAGNETIC_BALCONY);
if (mag1 == HIGH || mag2 == HIGH) {
tone(BUZZER_SECURITY, 1500);
Email.send("your@email.com", "Security Alert", "Intrusion detected!");
OneSheeld.delay(3500);
} else {
noTone(BUZZER_SECURITY);
}
} else {
noTone(BUZZER_SECURITY);
}
// 温度監視 (必要ならコメント解除)
/*
int voltage = analogRead(A0) * 1100 / 1024;
int temp = voltage / 10;
if (temp >= 35) { tone(BUZZER_TEMP, 1500); Email.send(...); }
else { noTone(BUZZER_TEMP); }
*/
}
// ヘルパー関数
void controlLamp(int pin, int level, const char* msg) {
digitalWrite(pin, level);
TextToSpeech.say(msg);
lcd.clear(); lcd.print(msg);
OneSheeld.delay(2500);
}
void tellTime(int h, int m, String noon) {
TextToSpeech.say("time is"); TextToSpeech.say(String(h)); TextToSpeech.say(String(m)); TextToSpeech.say(noon);
lcd.clear(); lcd.print("Time: "); lcd.print(h); lcd.print(":"); lcd.print(m); lcd.print(noon);
}
void greetAndTellTime(int h, int m, String noon) {
TextToSpeech.say("good morning"); tellTime(h, m, noon);
lcd.clear(); lcd.print("Good Morning"); lcd.setCursor(0,1); lcd.print("Have a nice day");
}
void onSmsReceived(char* phone, char* body) {
if (strcmp(body, "on") == 0) {
allLampsOn();
Email.send("your@email.com", "System", "All lights turned ON via SMS");
} else if (strcmp(body, "off") == 0) {
allLampsOff();
Email.send("your@email.com", "System", "All lights turned OFF via SMS");
}
}
void allLampsOn() {
digitalWrite(RECEPTION_LAMP, LOW);
digitalWrite(BEDROOM_LAMP, LOW);
digitalWrite(BATHROOM_LAMP, LOW);
digitalWrite(KITCHEN_LAMP, LOW);
TextToSpeech.say("all lights on");
lcd.clear(); lcd.print("All Lights ON");
}
void allLampsOff() {
digitalWrite(RECEPTION_LAMP, HIGH);
digitalWrite(BEDROOM_LAMP, HIGH);
digitalWrite(BATHROOM_LAMP, HIGH);
digitalWrite(KITCHEN_LAMP, HIGH);
TextToSpeech.say("all lights off");
lcd.clear(); lcd.print("All Lights OFF");
}
CADデータ・回路図
- レーザーカット用DXF/DWGファイル: ケース・取り付けプレート
- 回路図: リレー・センサー・LCD・ブザーの配線
実装のポイント
- リレーはActive LOW (LOWで点灯) のモジュールを想定
- 磁気スイッチは内部プルアップ使用、ドア開でHIGH
- 1SheeldのUARTスイッチ切り替えを忘れずに
- メール送信には1Sheeldアプリ側でメールアカウント設定が必要
- 音声認識は英語コマンド前提。「Jarvis」ウェイクワードで誤動作防止
製造プロセス
- SensorflareとRaspberry Piで433MHzスマートホームコントローラーを構築
- Raspberry Piでホームセキュリティシステムを構築:PIRモーション検知+カメラメール通知
- Python連携で信頼性向上: Arduino RFID勤怠管理システム
- Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
- ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
- Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー
- スマートなArduino制御ロボットアームの製作:簡単DIYチュートリアル
- Arduino Yunとシャーププラズマクラスター連携 スマート空気清浄機システム
- スマホで家庭照明をシームレス制御 - 1Sheeld活用
- Silicon Labs、Embedded World 2019でスマートホーム&ビルオートメーション向け先進Wireless Geckoソリューションを発表
- スマートホームテクノロジーが日常生活をどう変えるか