Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Octopod: Solución IoT Inteligente de Automatización para Hogar e Industria

Componentes y suministros

Arduino UNO ×1
Arduino MKR WiFi 1010 (o NodeMCU ESP8266 / ESP32) ×1
Maxim MAX32630FTHR (alternativa: MAX32620FTHR, Arduino 1010, ESP8266 + WiFi externo) ×1
Raspberry Pi Zero Wireless (o Pi 2/3) ×1
Sensor DHT11 Temperatura/Humedad (4 pines) ×1
Sensor Gas MQ2 (Grove Seeed) ×1
Sensor Humedad Suelo SparkFun (terminales tornillo) ×1
Sensor PIR Movimiento genérico ×1 (opcional)
Lector RFID genérico ×1
Relé genérico (2 canales preferiblemente) ×1
LED RGB Difuso Cátodo Común ×1
Módulo Cámara Raspberry Pi ×1
Servo Tower Pro MG996R ×1
Zumbador ×2
Módulo Bluetooth HC-05 ×1 (opcional)
LED genérico ×4
Adaptador pared / Power Bank ×2
Tarjeta memoria (>4GB, Class 10 para Raspberry Pi OS) ×1

Herramientas necesarias

Aplicaciones y servicios en línea

Sobre el proyecto

Existen muchos proyectos IoT, pero Octopod es único. Combina NodeMCU (ESP8266), Arduino Uno y Raspberry Pi 3. Permite:

¿Cómo funciona todo?

PASO 1: Programar Octopod principal (NodeMCU/ESP8266)

Código comentado línea a línea. Resumen:

Librerías

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

Credenciales Blynk y WiFi

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

Definición pines y variables

#define DHTPIN 2       // DHT11
#define soilPin 4      // Sensor humedad suelo
#define gasPin A0      // MQ2 gas
#define pirPin 12      // PIR movimiento
int pirValue, soilValue;
int PIRpinValue, SOILpinValue;  // Valores desde app Blynk (pines virtuales V0, V1)

BLYNK_WRITE() - Control desde app

BLYNK_WRITE(V0) { PIRpinValue = param.asInt(); }  // Activar detección movimiento
BLYNK_WRITE(V1) { SOILpinValue = param.asInt(); } // Activar sensor suelo

Enviar datos sensores (timer 1 seg)

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

Lectura PIR y Suelo con notificaciones


void getPirValue() {
  pirValue = digitalRead(pirPin);
  if (pirValue) { Serial.println("Movimiento detectado"); Blynk.notify("Movimiento detectado"); }
}
void getSoilValue() {
  soilValue = digitalRead(soilPin);
  if (soilValue == HIGH) { Serial.println("Regar plantas"); Blynk.notify("Regar plantas"); }
}

Setup y 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();
}

PASO 2: Cerradura RFID (Arduino UNO)

Dos versiones: con y sin Bluetooth. Simple:

  1. Instalar librería MFRC522 (Sketch → Include Library → Manage Libraries).
  2. Ejecutar ejemplo dumpInfo para leer UID tarjetas. Anotar UIDs autorizados.
  3. En código, reemplazar "XX XX XX XX" por UID autorizado.
  4. Si UID coincide: servo abre puerta (180°), LED verde, beep agudo, 5 seg, cierra. Si no: LED rojo, beep grave.

PASO 3: Raspberry Pi - Detección Humana con IA (OpenCV)

Guía completa para cámara de seguridad inteligente:

  1. Conectar cámara Pi: Insertar cable en conector entre Ethernet y HDMI (contactos plateados hacia HDMI). sudo raspi-config → habilitar cámara → reboot.
  2. Instalar OpenCV 3.3.0 en Raspbian Stretch:
    • Expandir filesystem (sudo raspi-config → Advanced → Expand).
    • Liberar espacio: sudo apt-get purge wolfram-engine libreoffice* && sudo apt-get clean autoremove (~1GB).
    • Instalar dependencias: build-essential, cmake, pkg-config, libjpeg, libtiff, libjasper, libpng, libavcodec, libavformat, libswscale, libv4l, libxvidcore, libx264, libgtk2.0, libgtk-3, libatlas-base, gfortran, python2.7-dev, python3-dev.
    • Descargar OpenCV y opencv_contrib 3.3.0, descomprimir.
    • Instalar pip, virtualenv, virtualenvwrapper. Crear entorno cv (mkvirtualenv cv -p python3).
    • Instalar NumPy: pip install numpy.
    • Compilar OpenCV con CMake (configurar Python 3, módulos extra). Clave: aumentar swap a 1024MB (/etc/dphys-swapfile) para compilar con 4 núcleos (make -j4). Tarda ~4 horas.
    • sudo make install && sudo ldconfig. Symlink cv2.so en entorno virtual.
    • Restaurar swap a 100MB. Probar: python -c "import cv2; print(cv2.__version__)" → 3.3.0.
  3. Programa Python (Smart Security Camera):
    • Descargar modelos y código desde Google Drive (enlace en proyecto).
    • Configurar mail.py con credenciales Gmail (remitente, destinatario, contraseña). Habilitar "apps menos seguras" en Google.
    • Ajustar main.py: intervalo emails (600s), flip cámara, clasificador (fullbody/upperbody/facial).
    • Ejecutar: python main.py. Streaming en IP_Pi:5000 (red local). Para acceso externo: ngrok http 5000.

PASO 4: Configuración App Blynk

  1. Descargar Blynk (App Store/Play Store). Crear proyecto: dispositivo NodeMCU, conexión WiFi. Copiar Auth Key al código.
  2. Añadir widgets:
    • 3 Gauges: Temperatura (V6, 0-50°C), Humedad (V5, 0-100%), Gas (V7, 0-1023).
    • zeRGBa: R→GP15, G→GP3, B→GP1 (control LED RGB).
    • 4 Botones: Control relés, activar PIR, activar sensor suelo, etc.
    • SuperChart: 3 streams (Temp, Humedad, Gas) con colores, pines, rangos.
    • Pestaña 2: Twitter, Notifications, Email, Eventor. Configurar credenciales Twitter, email, notificaciones al desconectar hardware, triggers Eventor.
  3. Pulsar Play. Interfaz lista y personalizable.

PASO 5: Estructura Octopod (Cartón / Impresión 3D)

Advertencia: Proceso más laborioso. Opcional: usar caja zapatos o imprimir en 3D (archivos .f3d incluidos).

Diseño inspirado en octágono 3D. Pasos:

  1. Cartón: rectángulos 9x9.5cm, 4 unidos (8 si cartón largo). Cortes parciales entre rectángulos.
  2. Ángulos 135° en uniones (16 total). Pegar con silicona.
  3. Unir 2 estructuras abiertas → octágono cerrado. Otras 2 perpendiculares → forma 3D.
  4. Rellenar huecos con 4 piezas 9x9.5cm. 8 triángulos abiertos → cubrir con papel vegetal (no pegar aún).
  5. Pintar: 3 capas spray en área ventilada, mascarilla/guantes. Secar 4-5h entre capas.

¡Pieza única de arte funcional!

PASO 6: Envolvente Cerradura Puerta

Caja zapatos + 2-3 capas spray + patrón cinta adhesiva (opcional).

PASO 7: Ensamblaje Octopod

Esquemático adjunto. Resumen conexiones NodeMCU en protoboard grande con fuente alimentación:

¡Encender y disfrutar! Streaming en IP Raspberry Pi.

PASO 8: Ensamblaje Cerradura Puerta

Subir código a Arduino. Conexiones según esquemático Fritzing. Caja zapatos: 2 agujeros para LEDs, servo sobresaliendo. Pegar RFID, protoboard, Arduino. Alimentar (power bank/adaptador). ¡Listo! (Solo experimento, no usar como cerradura real).

Conclusión

Proyecto muy divertido y completo. Luces RGB quedan geniales; vale la pena hacer solo como lámpara ambiental. Gracias a creadores de Blynk y OpenCV por librerías excelentes. ¡Preguntas bienvenidas!

- Saksham

Enlaces: Blog Arduino | Instructable completo

Actualización

Integrando con Amazon Alexa. Código en 2-3 días.

Código

octopod.ino (Arduino) - Código principal NodeMCU/ESP8266

/***************************************************************************
 OCTOPOD: PROYECTO AUTOMATIZACIÓN HOGAR INTELIGENTE BY SAKSHAM
 Blynk lib: https://github.com/blynkkk/blynk-library/releases/latest
 DHT lib: https://github.com/adafruit/DHT-sensor-library
***************************************************************************/
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#define BLYNK_PRINT Serial

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

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

int pirValue, soilValue;
int 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("Error lectura DHT"); return; }
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
}

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

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

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) - Cerradura RFID sin Bluetooth

/***********************************************************************************************************
 OCTOPOD: CERRADURA RFID ARDUINO - Librería 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("Acerca tarjeta al lector...");
}

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

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

  if (content.substring(1) == "XX XX XX XX") {  // Cambiar por UID autorizado
    Serial.println("Acceso autorizado");
    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("Acceso denegado");
    digitalWrite(LED_R, HIGH); tone(BUZZER, 300); delay(1000); digitalWrite(LED_R, LOW); noTone(BUZZER);
  }
}

octopod_door_bluetooth.ino (Arduino) - Cerradura RFID con Bluetooth

/***********************************************************************************************************
 OCTOPOD: CERRADURA RFID CON BLUETOOTH - Librería MFRC522
************************************************************************************************************/
#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("Esperando conexiones...");
  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("Acerca tarjeta al lector...");
}

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

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

  if (content.substring(1) == "33 3E A7 E5" || content.substring(1) == "E5 36 6B 49") {
    BTserial.println("Acceso autorizado");
    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("Acceso denegado");
    digitalWrite(LED_R, HIGH); tone(BUZZER, 300); delay(1000); digitalWrite(LED_R, LOW); noTone(BUZZER);
  }
}

Piezas personalizadas y envolventes

Esquemáticos

Configuración pines puede variar con Arduino MKR 1010.

Octopod: Solución IoT Inteligente de Automatización para Hogar e Industria

Versión con Bluetooth: Rx(HC-05)→Tx(Arduino), Tx(HC-05)→Rx(Arduino), 5V→5V, GND→GND.

Tabla equivalencias pines ESP8266 ↔ MAX32620FTHR incluida en imagen.

Octopod: Solución IoT Inteligente de Automatización para Hogar e Industria

Proceso de manufactura

  1. Construye sistema domótico con Raspberry Pi para control remoto
  2. Persianas Inteligentes: Control Automático de Luz con Arduino y Energía Solar
  3. Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
  4. Construye un sistema de automatización y seguridad del hogar inteligente con 1Sheeld
  5. Tres en raya con Arduino, matriz LED MAX7219 y carcasa de cartón
  6. Construye un Temporizador Regresivo Fiable con Arduino y Pantalla de 7 Segmentos SparkFun
  7. Construye tu Propio Coche RC Porsche con Arduino: Guía Paso a Paso
  8. Cerradura Inteligente WiFi con Arduino y ESP8266: Desbloqueo desde el Móvil
  9. Automatización Industrial 4.0: Revolucionando la eficiencia productiva
  10. Cómo la tecnología de hogar inteligente transforma la vida cotidiana
  11. Malvertising amenaza IoT de hogar inteligente: Anuncios ocultos pueden comprometer sus dispositivos