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

Octopod:家庭・産業向けスマートIoTオートメーションソリューション

部品と材料

部品名数量備考
Arduino UNO1
Arduino MKR WiFi 10101入手困難なためNodeMCU ESP8266で代用
Maxim Integrated MAX32630FTHR1MAX32620FTHR、Arduino 1010、または任意のESP8266ボードで代替可。WiFiは別途必要
Raspberry Pi Zero Wireless1通常のRaspberry Pi 2/3でも可
DHT11 温湿度センサー(4ピン)1
Seeed Grove ガスセンサー MQ21
SparkFun 土壌水分センサー(ねじ端子付き)1
PIR人感センサー(汎用)1オプション
RFIDリーダー(汎用)1
リレー(汎用)12チャネル推奨
RGBディフューズLED(共通カソード)1
Raspberry Piカメラモジュール1
サーボ Tower Pro MG996R1
ブザー2
HC-05 Bluetoothモジュール1オプション
LED(汎用)4
壁面アダプター/モバイルバッテリー2
マイクロSDカード14GB以上、Class 10推奨(Raspberry Pi OS用)

必要な工具と機器

アプリとオンラインサービス

プロジェクト概要

数多くのIoTオートメーションプロジェクトがありますが、Octopodは格別です!NodeMCU(またはMAX32620FTHR/Arduino MKR 1010)、Arduino Uno、Raspberry Pi 3を組み合わせ、家庭やオフィス、工場をスマート化します。

Octopod:家庭・産業向けスマートIoTオートメーションソリューション
Octopod:家庭・産業向けスマートIoTオートメーションソリューション
Octopod:家庭・産業向けスマートIoTオートメーションソリューション

全体の仕組み

ステップ1:メインOctopod(NodeMCU)のコーディング

コードにはほぼ全行にコメントを付けています。概要:

ライブラリインクルード

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#define BLYNK_PRINT Serial

Blynk認証・WiFi設定

char auth[] = "Your Blynk Auth Key";
char ssid[] = "Your WiFi SSID";
char pass[] = "Your WiFi Password";

ピン定義と変数


#define DHTPIN 2
#define soilPin 4
#define gasPin A0
#define pirPin 12
int pirValue, soilValue, PIRpinValue, SOILpinValue;
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;

Blynkアプリからのフラグ受信(仮想ピンV0, V1)


BLYNK_WRITE(V0) { PIRpinValue = param.asInt(); }  // 動体検知ON/OFF
BLYNK_WRITE(V1) { SOILpinValue = param.asInt(); } // 土壌水分チェックON/OFF

センサーデータ送信(1秒ごと)


void sendSensor() {
  int h = dht.readHumidity();
  int t = dht.readTemperature();
  if (isnan(h) || isnan(t)) return;
  Blynk.virtualWrite(V5, h); // 湿度
  Blynk.virtualWrite(V6, t); // 温度
}

動体検知・土壌水分チェック関数


void getPirValue() {
  pirValue = digitalRead(pirPin);
  if (pirValue) { Blynk.notify("Motion detected"); }
}
void getSoilValue() {
  soilValue = digitalRead(soilPin);
  if (soilValue == HIGH) { Blynk.notify("Water Plants"); }
}

setup() / loop()


void setup() {
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  dht.begin();
  Blynk.tweet("OCTOPOD IS ONLINE!");
  pinMode(pirPin, INPUT);
  pinMode(soilPin, INPUT);
  timer.setInterval(1000L, sendSensor);
}
void loop() {
  Blynk.run(); timer.run();
  if (PIRpinValue == HIGH) getPirValue();
  if (SOILpinValue == HIGH) getSoilValue();
}

ステップ2:RFIDスマートロック(Arduino Uno)のコーディング

MFRC522ライブラリを使用。まずdumpInfoスケッチでカードUIDを取得し、コード内の "XX XX XX XX" を許可したいUIDに書き換えます。UID一致でサーボが180度回転(解錠)、5秒後に戻る(施錠)。不一致なら赤LED点滅とブザー音。Bluetooth版コードも用意しています。

Octopod:家庭・産業向けスマートIoTオートメーションソリューション
Octopod:家庭・産業向けスマートIoTオートメーションソリューション

ステップ3:Raspberry Pi 人物検知AIセットアップ

Raspberry Pi 3 + カメラV2 + OpenCVでスマート防犯カメラを構築。人物検知時にメール送信、同一WiFi内ならブラウザでライブ映像視聴可能。

前提条件

手順概要

  1. カメラ接続・有効化: sudo raspi-config でカメラ有効化、リブート
  2. ファイルシステム拡張・不要パッケージ削除: LibreOfficeとWolfram Engine削除で約1GB確保
  3. 依存パッケージインストール: cmake, libjpeg, libtiff, libavcodec, libgtk, libatlas, python-dev 等
  4. OpenCV 3.3.0 + opencv_contrib ソース取得・展開
  5. Python仮想環境構築: mkvirtualenv cv -p python3 等
  6. NumPyインストール
  7. CMake設定・ビルド: スワップサイズを1024MBに拡張して make -j4(約4時間)。完了後 sudo make install, sudo ldconfig
  8. cv2.soを仮想環境にシンボリックリンク
  9. スワップサイズを100MBに戻す(SDカード寿命対策)
  10. 動作確認: python -c "import cv2; print(cv2.__version__)"

Pythonプログラム配置・実行

Google Driveから Smart-Security-Camera リポジトリをダウンロード。mail.py でGmail SMTP設定(要「安全性の低いアプリの許可」)、main.py でメール送信間隔や検知モデル(全身/上半身/顔)を設定。python main.py で起動。ブラウザで https://<PiのIP>:5000 にアクセスするとライブストリーム表示。外部ネットワークからはngrokでトンネリング可能。

Octopod:家庭・産業向けスマートIoTオートメーションソリューション
Octopod:家庭・産業向けスマートIoTオートメーションソリューション

ステップ4:Blynkアプリインターフェース設定

  1. Blynkアプリインストール、新規プロジェクト作成(デバイス: NodeMCU, 接続: WiFi)
  2. Auth Keyをメールで受け取り、コードに反映
  3. ウィジェット追加:ゲージ×3(温度V6、湿度V5、ガスV7)、zeRGBa(RGB制御)、ボタン×4(動体検知V0、土壌水分V1、リレー1、リレー2)、SuperChart(履歴グラフ)、タブ2枚目にTwitter/Notifications/Email/Eventor
  4. 再生ボタンで動作開始
Octopod:家庭・産業向けスマートIoTオートメーションソリューション
Octopod:家庭・産業向けスマートIoTオートメーションソリューション

ステップ5:Octopod筐体製作(段ボール/木材)

警告:最も時間のかかる工程です! 3Dプリント用STLファイルも提供しているので、そちらを使えばスキップ可能。八角形を立体化したユニークなデザイン。9cm×9.5cmの長方形4枚を連結し、135度の角度で折り曲げて接着、2組を直交させて立体化、三角形の開口部にはアクリルバターペーパーを貼り付け。スプレー塗装で3コート仕上げ。

Octopod:家庭・産業向けスマートIoTオートメーションソリューション

ステップ6:ドアロック筐体製作

靴箱にスプレー塗装2-3コート、ダクトテープでチェック柄デザイン。

Octopod:家庭・産業向けスマートIoTオートメーションソリューション

ステップ7:Octopod組み立て

大型ブレッドボードにNodeMCU、ブレッドボード電源、各種センサー、LED、リレーを配線。ピン配置:

電源はモバイルバッテリーまたは壁面アダプター。Raspberry Piとカメラを筐体に固定し、開口部をアクリル板で塞ぐ(メンテ用に1-2箇所開けておく)。土壌水分センサーの突起は外に出す。

Octopod:家庭・産業向けスマートIoTオートメーションソリューション

ステップ8:ドアロック組み立て

Arduinoにコード書き込み後、配線して靴箱筐体に収納。LED用穴2つ、サーボ露出用穴を開け、RFIDリーダーとブレッドボードを固定。電源投入で動作開始。※実用ロックとしては使用しないでください(実験用)。

結論

本当に楽しいプロジェクトでした!ライトの見た目も良く、サイドランプとして作るだけでも価値あり。BlynkとOpenCVの作者たちに感謝。質問があればコメントでどうぞ。投票もよろしく!

- Saksham

アップデート

Amazon Alexaとの連携を開発中。2-3日でコード公開予定!

コード

octopod.ino (Arduino / NodeMCU用メインコード)

/***************************************************************************
 OCTOPOD: A SMART HOME AUTOMATION PROJECT MADE BY SAKSHAM
 Download latest Blynk library: https://github.com/blynkkk/blynk-library/releases/latest
 Download latest DHT Sensor library: https://github.com/adafruit/DHT-sensor-library
***************************************************************************/
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#define BLYNK_PRINT Serial

char auth[] = "Your Blynk Auth Key";
char ssid[] = "Your WiFi SSID";
char pass[] = "Your WiFi Password";

#define DHTPIN 2
#define soilPin 4
#define gasPin A0
#define pirPin 12

int pirValue, soilValue, PIRpinValue, SOILpinValue;
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;

BLYNK_WRITE(V0) { PIRpinValue = param.asInt(); }
BLYNK_WRITE(V1) { SOILpinValue = param.asInt(); }

void sendSensor() {
  int h = dht.readHumidity();
  int t = dht.readTemperature();
  if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; }
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
}

void getPirValue() {
  pirValue = digitalRead(pirPin);
  if (pirValue) { Serial.println("Motion detected"); Blynk.notify("Motion detected"); }
}

void getSoilValue() {
  soilValue = digitalRead(soilPin);
  if (soilValue == HIGH) { Serial.println("Water Plants"); Blynk.notify("Water Plants"); }
}

void setup() {
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  dht.begin();
  Blynk.tweet("OCTOPOD IS ONLINE!");
  pinMode(pirPin, INPUT);
  pinMode(soilPin, INPUT);
  timer.setInterval(1000L, sendSensor);
}

void loop() {
  Blynk.run(); timer.run();
  if (PIRpinValue == HIGH) getPirValue();
  if (SOILpinValue == HIGH) getSoilValue();
}
octopod_door.ino (Arduino RFIDドアロック - Bluetoothなし版)

/***********************************************************************************************************
 OCTOPOD: SMART HOME AUTOMATION - ARDUINO RFID DOOR LOCK
 Library Required: MFRC522
************************************************************************************************************/
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5
#define LED_R 4
#define BUZZER 2

MFRC522 mfrc522(SS_PIN, RST_PIN);
Servo myServo;

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  myServo.attach(3);
  myServo.write(0);
  pinMode(LED_G, OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  noTone(BUZZER);
  Serial.println("Put your card to the reader...");
}

void loop() {
  if (!mfrc522.PICC_IsNewCardPresent()) return;
  if (!mfrc522.PICC_ReadCardSerial()) return;

  String content = "";
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  content.toUpperCase();

  if (content.substring(1) == "XX XX XX XX") { // 許可UIDに変更
    Serial.println("Authorized access");
    digitalWrite(LED_G, HIGH);
    tone(BUZZER, 500); delay(300); noTone(BUZZER);
    myServo.write(180); delay(5000); myServo.write(0);
    digitalWrite(LED_G, LOW);
  } else {
    Serial.println("Access denied");
    digitalWrite(LED_R, HIGH);
    tone(BUZZER, 300); delay(1000);
    digitalWrite(LED_R, LOW); noTone(BUZZER);
  }
}
octopod_door_bluetooth.ino (Bluetooth版ドアロック)

/***********************************************************************************************************
 OCTOPOD: SMART HOME AUTOMATION - ARDUINO RFID DOOR LOCK (Bluetooth)
************************************************************************************************************/
#include <SoftwareSerial.h>
SoftwareSerial BTserial(0, 1); // RX | TX
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5
#define LED_R 4
#define BUZZER 2

MFRC522 mfrc522(SS_PIN, RST_PIN);
Servo myServo;

void setup() {
  BTserial.begin(9600);
  BTserial.println("Waiting for connections...");
  SPI.begin();
  mfrc522.PCD_Init();
  myServo.attach(3);
  myServo.write(0);
  pinMode(LED_G, OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  noTone(BUZZER);
  BTserial.println("Put your card to the reader...");
}

void loop() {
  if (!mfrc522.PICC_IsNewCardPresent()) return;
  if (!mfrc522.PICC_ReadCardSerial()) return;

  String content = "";
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  content.toUpperCase();

  if (content.substring(1) == "33 3E A7 E5" || content.substring(1) == "E5 36 6B 49") {
    BTserial.println("Authorized access");
    digitalWrite(LED_G, HIGH);
    tone(BUZZER, 500); delay(300); noTone(BUZZER);
    myServo.write(180); delay(5000); myServo.write(0);
    digitalWrite(LED_G, LOW);
  } else {
    BTserial.println("Access denied");
    digitalWrite(LED_R, HIGH);
    tone(BUZZER, 300); delay(1000);
    digitalWrite(LED_R, LOW); noTone(BUZZER);
  }
}

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

回路図

Octopod:家庭・産業向けスマートIoTオートメーションソリューション

Bluetooth版の場合:HC-05のRX→Arduino TX、TX→Arduino RX、5V↔5V、GND↔GND

ピン配置対応表(Arduino MKR 1010 / MAX32620FTHR使用時の参考)

ESP        MAX
A0  ------ GPIO2
A1  ------ GPIO1

Soil Sensor MAX
Analog ------ GPIO3

Gas Sensor (MQ2) MAX
Sensor ------ GPIO4

PIR Sensor MAX
Sensor ------ GPIO0

Relay MAX
1  ------ M0
2  ------ M1
Octopod:家庭・産業向けスマートIoTオートメーションソリューション

製造プロセス

  1. Raspberry Piで構築するホームオートメーションシステム:リモート制御対応
  2. スマートブラインド:Arduinoとソーラー電源で実現する自動光制御
  3. ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
  4. 1Sheeldで作るスマートホーム自動化&セキュリティシステム
  5. Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
  6. SparkFun 7セグメントディスプレイで作る信頼性の高いArduinoカウントダウンタイマー
  7. Arduinoで自作RCポルシェカー:ステップバイステップガイド
  8. ArduinoとESP8266で作るWi-Fi対応スマートドアロック — スマホで解錠
  9. 産業オートメーション4.0:生産効率に革命をもたらす
  10. スマートホームテクノロジーが日常生活をどう変えるか
  11. マルバタイジングがスマートホームIoTを脅かす:隠れた広告がデバイスを侵害する可能性