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

J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント

必要な部品と材料

J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント Arduino 101 × 1
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント Arduino 4リレーシールド × 1
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント Arduino GSMシールド V2 × 1

必要な工具と機器

J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント はんだごて
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント ホットグルーガン

使用するアプリとオンラインサービス

J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント Unity
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント Android Studio
Vuforia
Adobe Illustrator
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント Arduino IDE

プロジェクトについて

なぜスマートホーム問題に取り組むのか?

新しいポイントは?

J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント

なぜこのプロジェクトを作ることにしたのか?

J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント

動作原理

デジタル電力量計

J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント

AI仮想アシスタント

信号の流れ:

  1. Androidアプリへ音声入力
  2. Androidアプリで処理
  3. 暗号化データをBluetooth経由でArduinoへ送信
  4. Arduino 101で処理
  5. リレーへデジタル信号出力

ピン接続:

J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント
J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント

電力量計の接続:

回路図

J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント

使用ハードウェアと機器

プログラミングプラットフォーム

実装詳細

動画

(動画プレースホルダー)

参考リンク

(リンクプレースホルダー)

コード

Arduino電力量計測・コスト計算コード Arduino

Arduinoに接続された家電の消費電力量を計測するコードです。
手順:
1. 接続し、Arduinoコードに携帯番号を設定
2. Arduino 101にアップロード
3. 実行
4. 任意の携帯から #任意テキスト* 形式でSMS送信
5. 消費電力量とコストが返信される

#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);

int led = 13;
#define pulsein 8
unsigned int pulse_count = 0;
float units = 0;
unsigned int rupees = 0;
unsigned int temp = 0, i = 0;
char str[70], flag1 = 0, flag2 = 0;

void setup() {
  lcd.begin(16,2);
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  pinMode(pulsein, INPUT);
  digitalWrite(pulsein, HIGH);
  lcd.setCursor(0,0);
  lcd.print("Wireless Energy");
  lcd.setCursor(0,1);
  lcd.print(" Meter ");
  delay(2000);
  lcd.clear();
  lcd.print("By ");
  delay(2000);
  lcd.clear();
  lcd.print("GSM Initializing...");
  gsm_init();
  lcd.clear();
  lcd.print("System Ready");
  Serial.println("AT+CNMI=2,2,0,0,0");
  init_sms();
  send_data("System Ready");
  send_sms();
  delay(1000);
  digitalWrite(led, LOW);
  lcd.clear();
}

void loop() {
  serialEvent();
  units = rupees / 5.0;
  lcd.setCursor(0,0);
  lcd.print("Units:");
  lcd.print(units);
  lcd.print(" ");
  lcd.setCursor(0,1);
  lcd.print("Rupees:");
  lcd.print(rupees);
  lcd.print(" ");
  read_pulse();
  if (temp == 1) check();
}

void serialEvent() {
  while (Serial.available()) {
    if (Serial.find("#")) {
      digitalWrite(led, HIGH);
      delay(1000);
      digitalWrite(led, LOW);
      while (Serial.available()) {
        char inChar = Serial.read();
        str[i++] = inChar;
        if (inChar == '*') {
          temp = 1;
          return;
        }
      }
    }
  }
}

void init_sms() {
  Serial.println("AT+CMGF=1");
  delay(200);
  Serial.println("AT+CMGS=\"INSERT MOBILE NUMBER HERE\"");
  delay(200);
}

void send_data(String message) {
  Serial.println(message);
  delay(200);
}

void send_sms() {
  Serial.write(26);
}

void read_pulse() {
  if (!digitalRead(pulsein)) {
    digitalWrite(led, HIGH);
    units++;
    rupees = units * 5;
    while (!digitalRead(pulsein));
    digitalWrite(led, LOW);
  }
}

void check() {
  if (!(strncmp(str, "units", 5))) {
    Serial.println("AT+CMGF=1");
    delay(200);
    Serial.println("AT+CMGS=\"INSERT MOBILE NUMBER HERE\"");
    delay(200);
    lcd.setCursor(0,1);
    send_data("Energy Meter Unit:");
    Serial.println(units);
    send_data("\nRupees:");
    Serial.println(rupees);
    delay(200);
    Serial.write(26);
    flag1 = 1;
    flag2 = 1;
    temp = 0;
  }
}

void message_sent() {
  lcd.clear();
  lcd.print("Message Sent.");
  delay(1000);
}

void gsm_init() {
  lcd.clear();
  lcd.print("Finding Module..");
  boolean at_flag = 1;
  while (at_flag) {
    Serial.println("AT");
    while (Serial.available() > 0) {
      if (Serial.find("OK")) at_flag = 0;
    }
    delay(1000);
  }
  lcd.clear();
  lcd.print("Module Connected..");
  delay(1000);
  lcd.clear();
  lcd.print("Disabling ECHO");
  boolean echo_flag = 1;
  while (echo_flag) {
    Serial.println("ATE0");
    while (Serial.available() > 0) {
      if (Serial.find("OK")) echo_flag = 0;
    }
    delay(1000);
  }
  lcd.clear();
  lcd.print("Echo OFF");
  delay(1000);
  lcd.clear();
  lcd.print("Finding Network..");
  boolean net_flag = 1;
  while (net_flag) {
    Serial.println("AT+CPIN?");
    while (Serial.available() > 0) {
      if (Serial.find("+CPIN: READY")) net_flag = 0;
    }
    delay(1000);
  }
  lcd.clear();
  lcd.print("Network Found..");
  delay(1000);
  lcd.clear();
}
Arduino JARVISリレー制御コード Arduino

AndroidアプリとArduino間のシリアルBluetooth文字転送を実装

#define CH3 7
#define CH4 4
#define CH5 5
#define CH6 6

void setup() {
  Serial.begin(9600);
  pinMode(CH3, OUTPUT);
  pinMode(CH4, OUTPUT);
  pinMode(CH5, OUTPUT);
  pinMode(CH6, OUTPUT);
  digitalWrite(CH3, HIGH);
  digitalWrite(CH4, HIGH);
  digitalWrite(CH5, HIGH);
  digitalWrite(CH6, HIGH);
  delay(2000);
}

void loop() {
  delay(100);
  if (Serial.available()) {
    char c = Serial.read();
    Serial.print(c);
    if (c == 'b') { /* coffee off */ }
    else if (c == 'c') { digitalWrite(CH4, LOW); delay(100); } // light on
    else if (c == 'd') { digitalWrite(CH6, LOW); delay(100); } // fan on
    else if (c == 'k') { digitalWrite(CH5, LOW); delay(100); } // coffee on
    else if (c == 'g') { digitalWrite(CH5, HIGH); delay(100); } // coffee off
    else if (c == 'e') { digitalWrite(CH4, HIGH); delay(100); } // light off
    else if (c == 'f') { digitalWrite(CH6, HIGH); delay(100); } // fan off
    else if (c == 'z') { // goodbye
      digitalWrite(CH6, HIGH);
      digitalWrite(CH4, HIGH);
      digitalWrite(CH3, HIGH);
      digitalWrite(CH5, HIGH);
      delay(500);
      digitalWrite(CH5, LOW);
      delay(500);
      digitalWrite(CH5, HIGH);
      delay(500);
      digitalWrite(CH5, LOW);
      delay(500);
      digitalWrite(CH5, HIGH);
      delay(10000);
    }
  }
}

カスタムパーツとエンクロージャ

手順:
1. アプリをダウンロード・インストール
2. スマホがインターネット接続済みであることを確認
3. アプリ起動し、Vuforia設定済み家電にカメラを向ける (デフォルトVuforiaマーカー使用)
4. 家電が起動
5. 消す場合は、画面に表示されるバーチャルボタンをタップ

jarvisaugmented_I2zWAu2jGG.apk

回路図

J.A.R.V.I.S. - Arduino搭載スマートホーム仮想アシスタント

注意: スマホのインターネット接続が常時必要です
手順:
1. Androidスマホにアプリインストール
2. ハードウェアセットアップ完了後、アプリ起動
3. 仮想アシスタント(音声)使用時: キーワード「Listen Up JARVIS」で起動
3.1 明確にコマンドを話す
3.2 エージェントが応答
4. ARアプリ起動: 「拡張」ボタンタップでブランク画面表示
4.1 別のスマホでJarvis Augmented App起動 (JARVISアプリとは別端末必要)
4.2 JarvisAugmentedの手順に従ってAR実装

注: 1. アプリがフリーズしたら再起動
2. 「マイクを開けません」エラー時は再起動
3. HC-05 Bluetoothモジュール使用推奨 (プロジェクト範囲拡大のため)

app-release_eo3LK2AsLV.apk

製造プロセス

  1. 家庭用の低コストワイヤレスセンサーネットワークを構築
  2. 自宅で作るDIY宿題自動筆記マシン:AxiDraw風ペンプロッターの自作ガイド
  3. Web制御DMX照明システム:Arduino Megaマスターコントローラー
  4. Bluetooth操作のArduinoスパイボットを自作する
  5. Arduino、Google Cardboard、Bluetoothで作るDIY VRスケートボード
  6. 自律型ホームアシスタントロボット「O'nine」の構築 – ROS、Alexa、ロボットアーム完全ガイド
  7. Alexa対応Arduinoホームコントローラー:音声でスマートホーム自動化
  8. ワイヤレスArduinoプログラミングシールド – HC-05 BluetoothでUSBケーブル不要に
  9. Arduino Nano用 高性能2.8インチTFTシールド - 320×240 SPIディスプレイ
  10. Arduino UNO/MEGA対応 ニキシー管クロックシールド NCS314 – IN-14/IN-12互換
  11. Arduino Mega と IoT センサによる高機能ホームモニタリングシステム