工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

1Sheeldで作るスマートホーム自動化&セキュリティシステム

必要な部品と材料

部品数量備考
Arduino UNO1メインボード
1Sheeld1スマホを40種類のシールドとして利用
リレー (4チャネル)1YW Robot製など、照明制御用
ブザー2防犯アラーム・温度警告用
温度センサー (LM35DZ)1アナログ出力、キッチン等の温度監視
ジャンパーワイヤー1セット
PIR人感センサー1侵入検知用
磁気ドアスイッチ (SparkFun)2玄関・バルコニーの開閉検知
キャラクタLCD (16x2)1ステータス表示用

必要な工具

プロジェクト概要

このプロジェクトは、1Sheeldを使ってスマートフォンのセンサー・通信機能をArduinoで活用するスマートホームシステムです。音声認識、SMS、メール、テキスト読み上げ、時計などのシールドを組み合わせ、以下の機能を実現しています。

主な機能

1Sheeldのセットアップ手順

  1. 1SheeldをArduinoにスタックし、専用ライブラリでコード作成
  2. Arduino IDEでアップロード (UARTスイッチを「Uploading mode」に)
  3. 書き込み完了後、スイッチを「Operating mode」に戻す (重要: 戻さないと通信不可)
  4. スマホに1Sheeldアプリをインストール、Bluetoothでペアリング (初期コード: 1234)
  5. 使用シールドを選択: 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データ・回路図

実装のポイント

製造プロセス

  1. SensorflareとRaspberry Piで433MHzスマートホームコントローラーを構築
  2. Raspberry Piでホームセキュリティシステムを構築:PIRモーション検知+カメラメール通知
  3. Python連携で信頼性向上: Arduino RFID勤怠管理システム
  4. Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
  5. ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
  6. Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー
  7. スマートなArduino制御ロボットアームの製作:簡単DIYチュートリアル
  8. Arduino Yunとシャーププラズマクラスター連携 スマート空気清浄機システム
  9. スマホで家庭照明をシームレス制御 - 1Sheeld活用
  10. Silicon Labs、Embedded World 2019でスマートホーム&ビルオートメーション向け先進Wireless Geckoソリューションを発表
  11. スマートホームテクノロジーが日常生活をどう変えるか