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:Proyecto de automatización de la industria / hogar de IoT inteligente

Componentes y suministros

Arduino UNO
× 1
Arduino MKR WiFi 1010
Este o cualquier otro Wifi ESP8266 / ESP32 Esto no estaba disponible en mi país, así que fui con NodeMCU ESP8266
× 1
Maxim Integrated MAX32630FTHR
Puede elegir entre MAX32620FTHR, Arduino 1010 o cualquier placa ESP8266. Con esta placa necesitará WiFi externo Módulo o un chip Esp8266 para Interent
× 1
Raspberry Pi Zero Wireless
¡También puedes usar Raspi 2/3 normal!
× 1
Sensor de temperatura y humedad DHT11 (4 pines)
× 1
Seeed Grove - Sensor de gas (MQ2)
× 1
Sensor de humedad del suelo SparkFun (con terminales roscados)
× 1
Sensor de movimiento PIR (genérico)
Opcional
× 1
Lector RFID (genérico)
× 1
Retransmisión (genérico)
2 canales preferiblemente
× 1
Cátodo común difuso RGB
× 1
Módulo de cámara Raspberry Pi
× 1
Servos (Tower Pro MG996R)
× 1
Buzzer
× 2
Módulo Bluetooth HC-05
Opcional
× 1
LED (genérico)
× 4
Adaptador de pared / Power Bank
× 2
Tarjeta de memoria
más de 4 Gb y preferiblemente Clase 10 (Requerido para Raspberry Pi OS)
× 1

Herramientas y máquinas necesarias

Pistola de pegamento caliente (genérica)
Impresora 3D (genérica)
Opcional
Herramientas manuales
Alicates de punta de aguja, tijeras, cortador, etc.

Aplicaciones y servicios en línea

Blynk
OpenCV

Acerca de este proyecto

Hay muchos proyectos de automatización de IoT, pero créanme, ¡no hay nada como esto! Octopod está hecho con NodeMCU (MAX32620FTHR o Arduino MKR 1010), Arduino Uno, y Raspberry Pi 3 . Octopod te permite hacer tu hogar inteligente. Octopod te envía una variedad de datos como temperatura , humedad, y calidad del gas dentro de su hogar / oficina / industria. Octopod te envía una notificación siempre que detecte cualquier tipo de movimiento adentro y te dice cuándo necesitas regar tus plantas . También puede controlar sus electrodomésticos a través de un Blynk aplicación en su teléfono inteligente. ¡Octopod incluso permite una verdadera iluminación ambiental!

Octopod está equipado con una pequeña cámara , que le envía transmisión en vivo . Esta cámara también utiliza inteligencia artificial para detectar humanos en su vista y te envía sus imágenes . Además, cuenta con un RFID bloqueo de puerta sistema ! Impresionante, ¿verdad?

¿Cómo funciona todo?

El NodeMCU está conectado a un grupo de sensores, un módulo de relé y LED RGB. Está conectado a la aplicación Blynk en un teléfono inteligente a través de WiFi, que envía todos los datos y le permite controlar su hogar.

Raspberry Pi también está conectado a WiFi, lo que le permite ver la transmisión en vivo a través de la cámara Pi. También hemos instalado bibliotecas OpenCV en la Pi y configuramos la Pi para que detecte a cualquier ser humano a su vista y le envíe sus imágenes por correo electrónico.

La unidad de puerta inteligente utiliza un módulo RFID. Cuando la RFID permitida se pone dentro de su rango, automáticamente abre la puerta.

PASO 1:Codificación del octópodo principal

He agregado comentarios en casi todas las líneas, por lo que no solo copia, sino que comprende. Aquí, te diré lo que realmente sucede cuando el código se ejecuta en pocas palabras.

  • Incluidas las bibliotecas:

Este código utiliza 2 bibliotecas principales, la biblioteca Blynk para hacer que el código sea compatible con la aplicación Blynk y la otra biblioteca es la biblioteca de temperatura DHT11, que convierte los datos sin procesar del sensor en temperatura y humedad. Para descargar estas bibliotecas, simplemente vaya a los enlaces dados en el código y descárguelos. Luego dirígete a Arduino IDE Sketch → Incluir biblioteca → Agregar biblioteca .zip y seleccione las bibliotecas descargadas.

  #include  // Incluir Blynk Library # include  // Incluir Blynk Library # include  // Incluir biblioteca de sensores DHT # definir BLYNK_PRINT Serial  

Este es un código de Blynk que le ayuda a conectar su nodemcu a Internet y luego autenticarlo en su aplicación.

  // Debes obtener el token de autenticación en la aplicación Blynk .// Ve a la configuración del proyecto (icono de tuerca) .char auth [] ="Tu clave de autenticación"; // Tus credenciales de WiFi.// Establecer contraseña para "" para redes abiertas.char ssid [] ="Su SSID WiFi"; char pass [] ="Su pase WiFi";  
  • Definición de pines y números enteros:

En este segmento definimos los pines de nuestros distintos sensores. Puede cambiarlos según su convencimiento. También definimos algunos enteros que solemos usar durante el transcurso de nuestro código.

  #define DHTPIN 2 // A qué sensor digital de temperatura y humedad de clavija está conectado # definir sueloPin 4 // A qué clavija digital está conectado el sensor de humedad del suelo # define gasPin A0 // Qué sensor de gas con clavija analógica está conectado to # define pirPin 12 // ¿Qué sensor de humedad del suelo con clavija digital está conectado a int pirValue; // Lugar para almacenar read PIR Valueint groundValue; // Lugar para almacenar leer Valor de humedad del sueloint PIRpinValue; // Lugar para almacenar el valor enviado por Blynk App Pin V0int SOILpinValue; // Lugar para almacenar el valor enviado por Blynk App Pin V1  
  • BLYNK_WRITE ():

Con este código le decimos a la aplicación Blynk que puede usar el Pin V0 y el Pin V1 para indicarle al código si la detección de movimiento y la prueba de humedad del suelo están activadas.

  BLYNK_WRITE (V0) // El pin VO de la aplicación Blynk indica si la detección de movimiento está ACTIVADA {PIRpinValue =param.asInt (); } BLYNK_WRITE (V1) // El pin V1 de la aplicación Blynk indica si la humedad del suelo está ACTIVADA {SOILpinValue =param.asInt (); }  
  • void sendSensor ():

Este código toma los datos de DHT11 para que se pueda usar y luego los envía al Pin V5 y V6 respectivamente.

  void sendSensor () {int h =dht.readHumidity (); int t =dht.readTemperature (); // o dht.readTemperature (verdadero) para Fahrenheit if (isnan (h) || isnan (t)) {Serial.println ("¡No se pudo leer del sensor DHT!"); // para comprobar si el sensor no envía ningún valor falso return; } // Puedes enviar cualquier valor en cualquier momento. // Por favor, no envíe más de 10 valores por segundo. Blynk.virtualWrite (V5, h); // enviar humedad al pin V5 Blynk.virtualWrite (V6, t); // envía la temperatura al pin V7}  
  • anular getPirValue () y anular getSoilValue ():

Lee el valor digital de los sensores, luego ejecuta una condición if-else para verificar el estado del sensor. Si el sensor está en el estado requerido, envía una notificación desde la aplicación Blynk.

  void getPirValue (void) {pirValue =digitalRead (pirPin); if (pirValue) // pin digital de PIR da un valor alto en la detección humana {Serial.println ("Movimiento detectado"); Blynk.notify ("Movimiento detectado"); }} vacío getSoilValue (vacío) {sueloValor =digitalRead (sueloPin); if (groundValue ==HIGH) // el pin digital del sensor de suelo da un valor bajo cuando la humedad es menor {Serial.println ("Plantas de agua"); Blynk.notify ("Plantas de agua"); }}  
  • anular configuración ():

En la configuración, hacemos un par de cosas que solo deben hacerse una vez. Me gusta:iniciar la comunicación en serie a una velocidad de transmisión fija, autorizar este código a la aplicación Blynk, comenzar las lecturas del sensor Dht, luego tuitear a tu cuenta de Twitter que tu proyecto de casa inteligente está en línea, luego decirle al nodo que Pir Pin y sensor de suelo El Pin está destinado a tomar solo entrada.

  void setup () {// Consola de depuración Serial.begin (9600); Blynk.begin (auth, ssid, pass); // También puede especificar server://Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442); //Blynk.begin(auth, ssid, pass, IPAddress (192,168,1,100), 8442); dht.begin (); // Comienza a leer DHT Blynk.tweet ("¡OCTOPOD ESTÁ EN LÍNEA!"); // Tuitear en tu identificador de Twitter que tu proyecto está en línea pinMode (pirPin, INPUT); // Definiendo que Pir Pin debe tomar Input Only pinMode (sueloPin, INPUT); // Definición de que el Pin del sensor de suelo está destinado a tomar solo entrada // Configure una función para que se llame cada segundo timer.setInterval (1000L, sendSensor);}  
  • bucle vacío ():

En el ciclo escribimos cosas que se deben hacer una y otra vez. Aquí, nos aseguramos de que se ejecute el código que escribimos antes de la instalación. Luego, escribimos 2 declaraciones If-Else que verifican los estados del Pin V0 y Pin V1 y luego toman los valores de los sensores en consecuencia.

  bucle vacío () {Blynk.run (); timer.run (); if (PIRpinValue ==HIGH) // El pin VO de la aplicación Blynk indica si la detección de movimiento está ACTIVADA {getPirValue (); } if (SOILpinValue ==HIGH) // El pin V1 de la aplicación Blynk indica si la humedad del suelo está ACTIVADA {getSoilValue (); }}  

PASO 2:Codificación de la cerradura inteligente RFID

Para ser honesto, este es un Código simple y fácil y no necesita mucha explicación. Pero, todavía les diré en pocas palabras lo que hace esto. Hay dos versiones del código, una es si desea conectar la caja de la unidad de la puerta a Bluetooth para que le avise cuando su puerta está abierta a través del terminal serial. Otros se envían a serie para que se pueda ver si conecta su Arduino a su computadora. Sin embargo, prefiero la versión simple sin Bluetooth. ¡Así que aquí vamos!

  • Vaya a Sketch → Incluir biblioteca → Administrar biblioteca → Escriba en la barra de búsqueda MFRC522 e instale la biblioteca. Luego vaya a Archivo → Ejemplos → Bibliotecas personalizadas → MFRC522 → dumpInfo Sketch. Al principio, puede leer cómo conectar los pines (o consulte la imagen). Luego ejecute el código y abra el monitor serial y traiga una de su Tarjeta Rfid frente al Módulo MFRC522 y espere 5 segundos. Luego, anote el UID de la tarjeta de manera similar, anote los UID de sus otras tarjetas y llaveros.
  • Luego, descargue el código que desee. Abra el código y vaya a esta línea. Aquí, en lugar de estas X, agregue el UID de la tarjeta que desea usar para abrir la puerta. Ahora que está listo, simplemente cargue el código.
  if (content.substring (1) =="XX XX XX XX") {}  

En este código hay dos cosas principales que hacemos, es decir, en la parte If-Else del código. En si le decimos al arduino que si el UID de la tarjeta coincide con el UID mencionado haga que el Servo se mueva (para que la puerta se abra) y parpadee algunos Led y haga algunos sonidos usando el zumbador. De lo contrario, si los UID no hacen parpadear algunos LED y emiten algunos sonidos mediante el zumbador.

PASO 3:Configuración de IA de detección humana Raspberry Pi

En este paso guiado, aprenderemos cómo hacer una cámara de seguridad inteligente. La cámara le enviará un correo electrónico cada vez que detecte el objeto y, si está en la misma red WiFi, puede acceder a las imágenes en vivo de la cámara escribiendo la dirección IP de su Raspberry Pi. Te mostraré cómo crear la cámara inteligente desde cero. ¡Vamos!

Requisitos:

1. OpenCV (Biblioteca de visión artificial de código abierto)

2. Raspberry Pi 3B

3. Cámara Raspberry Pi V2

Supuestos:

1. Raspberry Pi 3 con Raspbian Stretch instalado. Si aún no tiene el sistema operativo Raspbian Stretch, deberá actualizar su sistema operativo para aprovechar las nuevas funciones de Raspbian Stretch.

Para actualizar su Raspberry Pi 3 a Raspbian Stretch, puede descargarlo aquí y seguir estas instrucciones de actualización (o estas para la ruta NOOBS que se recomienda para principiantes).

Nota:Si está actualizando su Raspberry Pi 3 de Raspbian Jessie a Raspbian Stretch, existe la posibilidad de que surjan problemas. Proceda bajo su propio riesgo y consulte los foros de Raspberry Pi para obtener ayuda. Importante:¡Te recomiendo que continúes con una nueva instalación de Raspbian Stretch! No se recomienda actualizar desde Raspbian Jessie.

2. Acceso físico a su Raspberry Pi 3 para que pueda abrir una terminal y ejecutar comandos Acceso remoto a través de SSH o VNC. Haré la mayor parte de este tutorial a través de SSH, pero siempre que tenga acceso a una terminal, puede seguirlo fácilmente.

  • Paso 1:COLOCAR LA CÁMARA A RASPBERRY PI 3

1. Abre el módulo de tu cámara Raspberry Pi. Tenga en cuenta que la cámara puede resultar dañada por la electricidad estática. Antes de sacar la cámara de su bolsa antiestática gris, asegúrese de haberse descargado tocando un objeto conectado a tierra (por ejemplo, un radiador o el chasis de una PC).

2. Instale el módulo de la cámara Raspberry Pi insertando el cable en la Raspberry Pi. El cable se inserta en el conector situado entre los puertos Ethernet y HDMI, con los conectores plateados hacia el puerto HDMI.

3. Inicie su Raspberry Pi.

4. Desde el indicador, ejecute "sudo raspi-config". Si la opción "cámara" no aparece en la lista, deberá ejecutar algunos comandos para actualizar su Raspberry Pi. Ejecute "sudo apt-get update" y "sudo apt-get upgrade"

5. Ejecute "sudo raspi-config" de nuevo; ahora debería ver la opción "cámara".

COMANDO-

  $ sudo raspi-config  

6. Navegue hasta la opción "cámara" y habilítela (busque en la opción de interfaz). Seleccione "Finalizar" y reinicie su Raspberry Pi o simplemente escriba lo siguiente:

  $ sudo reboot  
  • Paso 2:ABRIR LA INSTALACIÓN DEL CV

Si es la primera vez que instalas OpenCV o recién estás comenzando con Rasbian Stretch. Este es el tutorial perfecto para ti.

Paso n. ° 1:expanda el sistema de archivos

¿Está utilizando una instalación nueva de Raspbian Stretch? Si es así, lo primero que debe hacer es expandir su sistema de archivos para incluir todo el espacio disponible en su tarjeta micro-SD:

COMANDO-

  $ sudo raspi-config  

luego seleccione el elemento de menú "Opciones avanzadas" y, a continuación, seleccione "Expandir sistema de archivos". Una vez que se le solicite, debe seleccionar la primera opción, “A1. Expanda el sistema de archivos ”, presione Enter en su teclado, presione la flecha hacia abajo hasta el botón“ ”y luego reinicie su Pi. Si está utilizando una tarjeta de 8 GB, es posible que esté utilizando cerca del 50% del espacio disponible, por lo que una cosa simple que puede hacer es eliminar tanto el motor LibreOffice como el motor Wolfram para liberar algo de espacio en su PI:

COMANDO-

  $ sudo apt-get purge wolfram-engine $ sudo apt-get purge libreoffice * $ sudo apt-get clean $ sudo apt-get autoremove  

Después de eliminar Wolfram Engine y LibreOffice, ¡puede recuperar casi 1 GB!

Paso n. ° 2: Instalar dependencias

Esta no es la primera vez que hablo de cómo instalar OpenCV en la Raspberry Pi, así que mantendré estas instrucciones en el lado más breve, lo que le permitirá trabajar en el proceso de instalación:también he incluido la cantidad de tiempo se necesita ejecutar cada comando (algunos dependen de la velocidad de Internet) para que pueda planificar su instalación de OpenCV + Raspberry Pi 3 en consecuencia (OpenCV en sí mismo tarda aproximadamente 4 horas en compilarse; más sobre esto más adelante). El primer paso es actualizar y actualizar cualquier paquete existente:

COMANDO-

  $ sudo apt-get update &&sudo apt-get upgrade  

Luego, necesitamos instalar algunas herramientas de desarrollo, incluido CMake, que nos ayuda a configurar el proceso de compilación de OpenCV:Raspbian Stretch:Instale OpenCV 3 + Python en su Raspberry Pi

COMANDO-

  $ sudo apt-get install build-essential cmake pkg-config  

A continuación, necesitamos instalar algunos paquetes de E / S de imagen que nos permitan cargar varios formatos de archivo de imagen desde el disco. Ejemplos de tales formatos de archivo incluyen JPEG, PNG, TIFF, etc .:Raspbian Stretch

COMANDO-

  $ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev  

Así como necesitamos paquetes de E / S de imágenes, también necesitamos paquetes de E / S de video. Estas bibliotecas nos permiten leer varios formatos de archivos de video desde el disco, así como trabajar directamente con secuencias de video

COMANDO-

  $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get install libxvidcore-dev libx264-dev  

La biblioteca OpenCV viene con un submódulo llamado highgui que se usa para mostrar imágenes en nuestra pantalla y construir GUI básicas. Para compilar el módulo highgui, necesitamos instalar la biblioteca de desarrollo GTK:Raspbian Stretch:Instale OpenCV 3 + Python en su Raspberry Pi

COMANDO-

  $ sudo apt-get install libgtk2.0-dev libgtk-3-dev  

Muchas operaciones dentro de OpenCV (es decir, operaciones matriciales) se pueden optimizar aún más instalando algunas dependencias adicionales:

COMANDO-

  $ sudo apt-get install libatlas-base-dev gfortran  

Estas bibliotecas de optimización son especialmente importantes para dispositivos con recursos limitados como Raspberry Pi. Por último, instalemos los archivos de encabezado de Python 2.7 y Python 3 para que podamos compilar OpenCV con enlaces de Python:Raspbian Stretch

COMANDO-

  $ sudo apt-get install python2.7-dev python3-dev  

Si está trabajando con una instalación nueva del sistema operativo, es posible que estas versiones de Python ya estén en la versión más reciente (verá un mensaje de terminal que indica esto). Si omite este paso, es posible que observe un error relacionado con el archivo de encabezado Python.h que no se encuentra al ejecutar make para compilar OpenCV. Paso # 3:Descargue el código fuente de OpenCV

Paso n. ° 3:descargue OpenCV código fuente

Ahora que tenemos nuestras dependencias instaladas, tomemos el archivo 3.3.0 de OpenCV del repositorio oficial de OpenCV. Esta versión incluye el módulo dnn que discutimos en una publicación anterior donde hicimos Deep Learning con OpenCV (Nota:a medida que se publiquen versiones futuras de openCV, puede reemplazar 3.3.0 con el número de versión más reciente):

COMANDO-

  $ cd ~ $ wget -O opencv.zip   https://github.com/Itseez/opencv/archive/3.3.0.zi ...>> p $ descomprimir opencv.zip 

Querremos la instalación completa de OpenCV 3 (para tener acceso a funciones como SIFT y SURF, por ejemplo), por lo que también necesitamos tomar el repositorio opencv_contrib:Raspbian Stretch:Instale OpenCV 3 + Python en su Raspberry Pi

COMANDO-

  $ wget -O opencv_contrib.zip   https://github.com/Itseez/opencv_contrib/archive/...>>3.3.0$ descomprimir opencv_contrib.zip  

Es posible que deba expandir el comando anterior usando el botón “<=>” durante su copia y pegado. El .zip en 3.3.0.zip puede parecer cortado en algunos navegadores. La URL completa del archivo OpenCV 3.3.0 es:https://github.com/Itseez/opencv_contrib/archive / ... Nota:Asegúrese de que sus versiones de opencv y opencv_contrib sean las mismas (en este caso, 3.3.0) . Si los números de las versiones no coinciden, es probable que se encuentre con errores en tiempo de compilación o en tiempo de ejecución. Paso # 4:¿Python 2.7 o Python 3? Antes de que podamos comenzar a compilar OpenCV en nuestra Raspberry Pi 3, primero debemos instalar pip, un administrador de paquetes de Python

COMANDO-

  $ wget    https://bootstrap.pypa.io/get-pip.py> 
>> 
> $ sudo python get-pip.py $ sudo python3 get-pip.py  

Es posible que reciba un mensaje de que pip ya está actualizado al emitir estos comandos, pero es mejor no omitir este paso. Si es un lector de PyImageSearch desde hace mucho tiempo, entonces sabrá que soy un gran admirador de virtualenv y virtualenvwrapper.

La instalación de estos paquetes no es un requisito y absolutamente puede instalar OpenCV sin ellos, pero dicho esto, le recomiendo que los instale, ya que otros tutoriales de PyImageSearch existentes (así como futuros tutoriales) también aprovechan los entornos virtuales de Python.

También asumiré que tiene virtualenv y virtualenvwrapper instalados en el resto de esta guía. Entonces, dado eso, ¿cuál es el punto de usar virtualenv y virtualenvwrapper? En primer lugar, es importante comprender que un entorno virtual es una herramienta especial que se utiliza para mantener las dependencias requeridas por diferentes proyectos en lugares separados mediante la creación de entornos Python aislados e independientes para cada uno de ellos. En resumen, resuelve el dilema "El Proyecto X depende de la versión 1.x, pero el Proyecto Y necesita la 4.x".

También mantiene los paquetes de su sitio global ordenados, ordenados y libres de desorden. Si desea una explicación completa de por qué los entornos virtuales de Python son una buena práctica, lea absolutamente esta excelente publicación de blog sobre RealPython. Es una práctica estándar en la comunidad de Python utilizar entornos virtuales de algún tipo, por lo que le recomiendo que haga lo mismo:

COMANDO-

  $ sudo pip install virtualenv virtualenvwrapper $ sudo rm -rf ~ / .cache / pip  

Ahora que se han instalado virtualenv y virtualenvwrapper, debemos actualizar nuestro archivo ~ / .profile. incluya las siguientes líneas al final del archivo:Raspbian Stretch

COMANDO-

  $ nano ~ / .profile  

Copie y pegue las siguientes líneas líneas en la parte inferior del archivo:

COMANDO-

   #  virtualenv y virtualenvwrapperWORKON_HOME =$ HOME / .virtualenvs fuente /usr/local/bin/virtualenvwrapper.sh  

O

Simplemente debe usar cat y la redirección de salida para manejar la actualización de ~ / .profile:

COMANDO-

  $ echo -e "\ n # virtualenv y virtualenvwrapper">> ~ / .profile $ echo "exportWORKON_HOME =$ HOME / .virtualenvs">> ~ / .profile $ echo "fuente / usr / local / bin / virtualenvwrapper.sh ">> ~ / .profile  

Ahora que tenemos nuestro ~ / .profile actualizado, necesitamos volver a cargarlo para asegurarnos de que los cambios surtan efecto. Puede forzar una recarga de su archivo ~ / .profile al:Cerrar sesión y luego volver a iniciar sesión.

Cerrar una instancia de terminal y abrir una nueva

O mi favorito personal

COMANDO-

  $ fuente ~ / .profile  

Nota :Recomiendo ejecutar el archivo fuente ~ / .profile cada vez que abra una nueva terminal para asegurarse de que las variables de su sistema se hayan configurado correctamente. Creación de su entorno virtual de Python A continuación, creemos el entorno virtual de Python que usaremos para el desarrollo de la visión por computadora:

COMANDO-

  $ mkvirtualenv cv -p python2  

Este comando creará un nuevo entorno virtual de Python llamado cv usando Python 2.7.

Si en su lugar desea usar Python 3, querrá usar este comando en su lugar:

COMANDO-

  $ mkvirtualenv cv -p python3 

Nuevamente, no puedo enfatizar este punto lo suficiente:el entorno virtual cv Python es completamente independiente y está aislado de la versión predeterminada de Python incluida en la descarga de Raspbian Stretch.

Los paquetes de Python en el directorio global site-packages no estarán disponibles para el entorno virtual cv. De manera similar, cualquier paquete de Python instalado en paquetes de sitio de cv no estará disponible para la instalación global de Python.

Tenga esto en cuenta cuando esté trabajando en su entorno virtual de Python y le ayudará a evitar mucha confusión y dolores de cabeza. Cómo comprobar si está en el entorno virtual "cv" Si alguna vez reinicia su Raspberry Pi; cerrar sesión y volver a iniciar sesión; o abra una nueva terminal, deberá usar el comando workon para volver a acceder al entorno virtual cv.

En publicaciones de blog anteriores, he visto a lectores usar el comando mkvirtualenv, ¡esto es completamente innecesario! El comando mkvirtualenv está destinado a ejecutarse solo una vez:para crear realmente el entorno virtual. Después de eso, puede usar workon y lo dejarán en su entorno virtual:

COMANDO-

  $ source ~ / .profile $ workon cv  

Para validar y asegurarse de que se encuentra en el entorno virtual cv, examine la línea de comandos; si ve el texto (cv) que precede al indicador, entonces se encuentra en el entorno virtual cv:asegúrese de ver el texto "(cv)" en su mensaje, lo que indica que se encuentra en el entorno virtual cv.

Otherwise, if you do not see the (cv) text, then you are not in the cv virtual environment:

If you do not see the “(cv)” text on your prompt, then you are not in the cv virtual environment and need to run “source” and “workon” to resolve this issue. To fix this, simply execute the source and workon commands mentioned above. Installing NumPy on your Raspberry Pi Assuming you’ve made it this far, you should now be in the cv virtual environment (which you should stay in for the rest of this tutorial).

Step #4 :Installing NumPy on your Raspberry Pi

Our only Python dependency is NumPy, a Python package used for numerical processing:

COMMAND-

$ pip install numpy  

the NumPy installation can take a bit of time.

Step #5:Compile and Install OpenCV

COMMAND-

$ workon cv 

Once you have ensured you are in the cv virtual environment, we can setup our build using CMake:

COMMAND-

$ cd ~/opencv-3.3.0/ $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \ -D BUILD_EXAMPLES=ON .. 

Now, before we move on to the actual compilation step, make sure you examine the output of CMake! Start by scrolling down the section titled Python 2 and Python 3 . If you are compiling OpenCV 3 for Python 2.7, then make sure your Python 2 section includes valid paths to the Interpreter, Libraries, numpy and packages

Checking that Python 3 will be used when compiling OpenCV 3 for Raspbian Stretch on the Raspberry Pi 3. Notice how the Interpreter points to our python2.7 binary located in the cv virtual environment. The numpy variable also points to the NumPy installation in the cv environment.

Again, the Interpreter points to our python3.5 binary located in the cv virtual environment while numpy points to our NumPy install.

In either case, if you do not see the cv virtual environment in these variables paths, it’s almost certainly because you are NOT in the cv virtual environment prior to running CMake! If this is the case, access the cv virtual environment using workon cv and re-run the cmake command outlined above.

Configure your swap space size before compiling Before you start the compile process, you should increase your swap space size. This enables OpenCV to compile with all four cores of the Raspberry PI without the compile hanging due to memory problems.

Open your /etc/dphys-swapfile and then edit the CONF_SWAPSIZE variable

COMMAND-

$ nano /etc/dphys-swapfile  

and then edit the following section of the file:#set size to absolute value, leaving empty (default) then uses computed value # you most likely don't want this, unless you have an special disk situation

# CONF_SWAPSIZE=100 CONF_SWAPSIZE =1024 

Notice that I’ve commented out the 100MB line and added a 1024MB line. This is the secret to getting compiling with multiple cores on the Raspbian Stretch. If you skip this step, OpenCV might not compile.

To activate the new swap space, restart the swap service:

COMMAND-

$ sudo /etc/init.d/dphys-swapfile stop $ sudo /etc/init.d/dphys-swapfile start  

Note:It is possible to burn out the Raspberry Pi microSD card because flash memory has a limited number of writes until the card won’t work. It is highly recommended that you change this setting back to the default when you are done compiling and testing the install (see below). To read more about swap sizes corrupting memory, see this page. Finally, we are now ready to compile OpenCV:

COMMAND-

$ make -j4 

The -j4 switch stands for the number of cores to use when compiling OpenCV. Since we are using a Raspberry Pi 2, we’ll leverage all four cores of the processor for a faster compilation.

However, if your make command errors out, I would suggest starting the compilation over again and only using one core

$ make clean$ make  

Once OpenCV 3 has finished compiling.Our OpenCV 3 compile on Raspbian Stretch has completed successfully.

From there, all you need to do is install OpenCV 3 on your Raspberry Pi 3:

COMMAND-

$ sudo make install$ sudo ldconfig  

Step #6 :Finish installing OpenCV on your Pi

We’re almost done — just a few more steps to go and you’ll be ready to use your Raspberry Pi 3 with OpenCV 3 on Raspbian Stretch.

For Python 2.7:

#5 Provided your Step without error, OpenCV should now be installed in/usr/local/lib/python2.7/site-pacakges . You can verify this using the ls command:

COMMAND-

$ ls -l /usr/local/lib/python2.7/site-packages/ total 1852 -rw-r--r-- 1 root staff 1895772 Mar 20 20:00 cv2.so  

Note:In some cases, OpenCV can be installed in /usr/local/lib/python2.7/dist-packages(note the dist-packages rather than site-packages ). If you do not find the cv2.so bindings insite-packages , we be sure to check dist-packages . Our final step is to sym-link the OpenCV bindings into our cv virtual environment for Python 2.7:

COMMAND-

$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/ $ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so  

For Python 3:After running make install , your OpenCV + Python bindings should be installed in/usr/local/lib/python3.5/site-packages . Again, you can verify this with the ls command:

COMMAND-

$ ls -l /usr/local/lib/python3.5/site-packages/ total 1852 -rw-r--r-- 1 root staff 1895932 Mar 20 21:51 cv2.cpython-34m.so  

I honestly don’t know why, perhaps it’s a bug in the CMake script, but when compiling OpenCV 3 bindings for Python 3+, the output .so file is named cv2.cpython-35m-arm-linux-gnueabihf.so(or some variant of) rather than simply cv2.so (like in the Python 2.7 bindings). Again, I’m not sure exactly why this happens, but it’s an easy fix. All we need to do is rename the file:

COMMAND-

$ cd /usr/local/lib/python3.5/site-packages/ $ sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so  

After renaming to cv2.so , we can sym-link our OpenCV bindings into the cv virtual environment

for Python 3.5:

COMMAND-

$ cd ~/.virtualenvs/cv/lib/python3.5/site-packages/ $ ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so  

Step #7:Testing your OpenCV 3 install

Congratulations, you now have OpenCV 3 installed on your Raspberry Pi 3 running Raspbian Stretch! But before we pop the champagne and get drunk on our victory, let’s first verify that your OpenCV installation is working properly.

Open up a new terminal, execute the source and workon commands, and then finally attempt to import the Python + OpenCV bindings:

COMMAND-

$ source ~/.profile$ workon cv $ python>>> import cv2>>> cv2.__version__ '3.3.0'>>>  

OpenCV 3 has been successfully installed on my Raspberry Pi 3 + Python 3.5 environment . Once OpenCV has been installed, you can remove both the opencv-3.3.0 and opencv_contrib-3.3.0 directories to free up a bunch of space on your disk:

COMMAND-

$ rm -rf opencv-3.3.0 opencv_contrib-3.3.0  

However, be cautious with this command! Make sure OpenCV has been properly installed on your system before blowing away these directories. A mistake here could cost you hours in compile time.

Open your /etc/dphys-swapfile and then edit the CONF_SWAPSIZE variable COMMAND-

# set size to absolute value, leaving empty (default) then uses computed value# you most likely don't want this, unless you have an special disk situation CONF_SWAPSIZE=100 #CONF_SWAPSIZE=1024 

Notice that I’ve commented out the 1024MB line and uncommented the 100MB line. As stated above, larger swap spaces may lead to memory corruption, so I recommend setting it back to 100MB. If you skip this step, your memory card won’t last as long. To revert to the smaller swap space, restart the swap service

COMMAND-

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
  • STEP 4:Setting Up Python Program

You can verify that the camera works by running.

COMMAND-

$ raspistill -o image.jpg 

which will save a image from the camera in your current directory.

After you checked the camera is working. Now download all the python files and models from below link :

LINK:

https://drive.google.com/file/d/0B98uoD6BbkpqZU9FT...

You can open up the file inspector and view the image.

Make sure you are using the virtual environment by typing the following commands:

COMMANDS-

$ source ~/.profile $ workon cv  

Next, navigate to the repository directory,

COMMANDS-

$ cd Smart-Security-Camera  

and install the dependencies for the project

COMMANDS-

$ pip install -r requirements.txt  

To get emails when objects are detected, you'll need to make a couple modifications to the mail.py file. Open mail.py with vim vim mail.py , then press i to edit. Scroll down to the following section

# Email you want to send the update from (only works with gmail)fromEmail ='[email protected]' fromEmailPassword ='password1234' # Email you want to send the update to toEmail ='[email protected]'  

and replace with your own email/credentials.

The mail.py file logs into a gmail SMTP server and sends an email with an image of the object detected by the security camera. Press esc then ZZ to save and exit.

You can also modify the main.py file to change some other properties.

email_update_interval =600 # sends an email only once in this time intervalvideo_camera =VideoCamera(flip=True) # creates a camera object, flip verticallyobject_classifier =cv2.CascadeClassifier("models/fullbody_recognition_model.xml") # an opencv classifier facial_recognition_model.xml fullbody_recognition_model.xml upperbody_recognition_model.xml 

Run the program python main.py

You can view a live stream by visiting the IP address of your pi in a browser on the same network. You can find the IP address of your Raspberry Pi by typing ifconfig in the terminal and looking for the inet address. Visit :5000 in your browser to view the stream.

Note:

To view the live stream on a different network than your Raspberry Pi, you can use ngrok to expose a local tunnel. Once downloaded, run ngrok with ./ngrok http 5000 and visit one of the generated links in your browser. Note:The video stream will not start automatically on startup. To start the video stream automatically, you will need to run the program from your /etc/rc.local file see this video for more information about how to configure that. Receiving Emails When receiving an email for the first time, you might get the following notification from Google:

By default, Google blocks apps from using SMTP without permissions. We can solve this by clicking on the allow "less secure apps" link and toggle the feature on. The next object detected will send an email.

STEP 4:Blynk App Interface Setup

This is one of the easiest and fun steps. So let's get started. Shall we?

  • Downloading the Blynk App is the first obvious step. Download it from App Store or Google Play Store. Sign Up or Login in the app to get started.
  • Click on New Project to create a new project. Name it whatever you like. In devices Choose NodeMCU. In connection type choose WiFi and click on Create.
  • Now you will get a Auth key on your Email. Make sure to copy that and add that to your code.
  • Now click on the + sign to add widgets. You may need to buy some energy!
  • Now add three Gauge's. Click on of the Gauge's, name it Temperature. Choose a color of you choice for this gauge. In the pin choose Virtual Pin V6. Set the range from 0 to 50 °C ( not sure for °F), make the label °C/ °F and keep the reading rate to Push.
  • Repeat this for other two Gauges using data as shown in the pictures.
  • Now, add a zeRGBa and set R to digital Pin GP15, B to GP3 and B to GP1.
  • Now add 4 Buttons, change there colors accordingly. Set them as shown in the pictures.
  • Add a SuperChart, add 3 data streams Temperature, Humidity and gas, set there colors, there pins, Range and Suffix.
  • Now, add tabs. Go to the second tab and add Twitter, Notifications, Email and Eventor. In Twitter add you twitter username and password. In Notifications, Switch on Notify when hardware goes off. In Email, set your Email address. In Eventor you can set many triggers, see the picture for the triggers that I have set up.
  • You are done. now click on the play button to use the interface that you have created. You can change the interface as you like. It is really simple and fun process!

STEP 5:Making Octopod Structure

Warning - This is going to be one of most time-consuming process!

NOTE:You can skip this step and 3D print the enclosure that I have provided!

Actually, this step is optional yet the most important step! You can just take a shoe box and avoid all of this hard work. But on the contrary, this hard work makes the project unique. The idea for this unique design striked me while, I was doing my math homework. This shape is inspired from an octagon. Rather, This is a 3D octagon! ¡Así que comencemos!

Making the Structure:

  • Take your cardboard and draw a rectangle of 9 cm x 9.5 cm (You can change the dimensions as per your convince). Now, joining end to end draw 4 of theses similar rectangles (8 if your cardboard is long enough).
  • Now make partial cuts (somewhat like paper creases) in between these rectangles and cut out this whole long piece. Repeat this process until you have 4 of these long pieces.
  • Now, using a D draw a 135° and cut it out as shown in the images. Make 16 of these same angles.
  • Using Glue gun glue these angles in between the small pieces. Repeat this for all the joints.
  • Now using glue gun join 2 of these open structures to make a closed structure (somewhat octagon) .
  • Now glue the other two open structure perpendicularly, making a 3-D shape.
  • Now Cut 4 More pieces of of 9 x 9.5 cm and glue them in between all the empty spaces.
  • Now you will be left with only 8 open triangles. Using Acrylic Butter paper cut 8 triangles, which will fit on these open areas, but don't glue them now.

Paint Job:

For this you need to head out towards an open area! Wear your Mask and Gloves and just make one coat over the structure that you have created. You can go to Youtube, to learn proper ways to make a perfect coat. Now let this dry for 4- 5 Hours and then apply 1 more coat. I think 3 coats will be good for this.

That's it! You have arrived with a unique piece of art.

STEP 6:Making Door Lock Enclosure

Really simple. Just take a Shoe Box and apply 2- 3 even coats of spray. And maybe for design make check pattern using duck tape like we did!

STEP 7:Assembling the Octopod

I have tried to make this step as simple as possible, by making the schematic diagram. Refer the picture or the file, and make connections accordingly. I will briefly explain all the connections!

  • We have connected the nodeMCU to a large size Solderless Breadboard. We have also connected Breadboard power supply on the breadboard. NodeMCU, all the sensors, LED's and other components are powered by the power supply.
  • Following are the sensor connections:DHT11D4 / GP2 MQ2A0 / adc00 Soil Moisture SensorD2 / GP4 PIRD6 / GP1 RGB R → D8 / GP15, G → Rx / GP3, B → Tx / GP1 RelayLn1D0 / GP16, Ln2D5 / GP14 Make the following connections.
  • For powering this you can use Power Bank or a Wall Adapter, which will be connected to the breadboard Power supply.
  • Now, take your Raspberry Pi along with the Raspberry Pi Camera. Make a small hole in one of the walls of the cardboard and glue or tape your Raspberry Camera.

Now, insert all these electronics inside, through any open triangle and close the triangle by using the cut outs of acrylic butter paper that we made. It is better to leave 1 or 2 open, in case something inside needs to be fixed! Also let the prongs of the Soil Moisture Sensor sit outside.

All done! We have completed the making process of the Octopod! Now, Just switch On the power and keep your Octopod over the dining Table or maybe on the Guest's Table and enjoy! To see the live feed from the Raspberry Pi, just open a browser and put in the IP address of the Pi. Enjoy!

STEP 8:Assembling the Door Lock

After uploading the code on your Arduino just make the connections as shown in the picture or in fritzing file! It is quite simple. Then take the handy shoe box that we made make 2 holes in it for the LED's to pop out. and allow the servo to stand out. These days mechanical locks like servo's are also available in the market, though servo works just as fine. This is just an experiment, so please so please don't use this as you actual lock! Glue the Rfid to one wall of the box and also glue the small breadboard and Arduino. You can use a wall adapter or a Power bank to power this. Just power the Arduino and you will be good to go! Done!

CONCLUSION:

This was a really fun project to do!

I was really happy how it turned out. I think the lights look really well, and i think its well worth making even one of these as a side lamp. I really can't thank creators of Blynk and OpenCV libraries enough, they are both really excellent pieces of software and made this project possible! As always, if you have any questions on any part of the process please let me know and I will be happy to try help. Thanks a lot! And Please Vote for Us!

-Saksham

Arduino Blog

Full Instructable

UPDATE:

I have been working on integrating this system with Amazon Alexa, I am almost done. Will upload the code in 2-3 days!

Código

  • octopod.ino
  • octopod_door.ino
  • octopod_door_bluetooth.ino
octopod.inoArduino
This is the main code for Arduino MKR 1010 (NodeMCU in my case)
If you are using MAX32620FTHR, download libraries for it. Then change the board in board settings. Also change the pin as given bellow
ESP MAX
AO - - - - - - - - - - - - GPIO2
A1 - - - - - - - - - - - - - GPIO1

Soil Sensor MAX
analog sensor - - - GPIO3

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

PIR Sensor MAX
sensor - - - - - - - - - - - -GPIO0

Relay MAX
1 - - - - - - - - - - - - - - - - - M0
2 - - - - - - - - - - - - - - - - - M1
/*************************************************************************** OCTOPOD:A SMART HOME AUTOMATION PROJECT MADE BY SAKSHAM Download latest Blynk library here:https://github.com/blynkkk/blynk-library/releases/latestDownload latest DHT Sensor library here:https://github.com/adafruit/DHT-sensor-library***************************************************************************/#include  //Include ESP8266 Wifi Library#include  //Include Blynk Library#include  //Include DHT sensor library#define BLYNK_PRINT Serial// You should get Auth Token in the Blynk App.// Go to the Project Settings (nut icon).char auth[] ="Your Blynk Auth Key";// Your WiFi credentials.// Set password to "" for open networks.char ssid[] ="Your WiFi SSID";char pass[] ="Your WiFi Password";#define DHTPIN 2 // What digital pin temperature and humidity sensor is connected to#define soilPin 4 // What digital pin soil moist ure sensor is connected to#define gasPin A0 // What analog pin gas sensor is connected to#define pirPin 12 // What digital pin soil moisture sensor is connected to int pirValue; // Place to store read PIR Valueint soilValue; // Place to store read Soil Moisture Valueint PIRpinValue; // Place to store the value sent by Blynk App Pin V0int SOILpinValue; // Place to store the value sent by Blynk App Pin V1// Uncomment whatever type you're using!#define DHTTYPE DHT11 // DHT 11//#define DHTTYPE DHT22 // DHT 22, AM2302, AM2321//#define DHTTYPE DHT21 // DHT 21, AM2301DHT dht(DHTPIN, DHTTYPE);BlynkTimer timer;// This function sends Arduino's up time every second to Virtual Pin (5).// In the app, Widget's reading frequency should be set to PUSH. This means// that you define how often to send data to Blynk App.BLYNK_WRITE(V0) //VO pin from Blynk app tells if Motion Detection is ON{ PIRpinValue =param.asInt(); } BLYNK_WRITE(V1) //V1 pin from Blynk app tells if Soil Moisture is ON{ SOILpinValue =param.asInt(); } void sendSensor(){ int h =dht.readHumidity(); int t =dht.readTemperature(); // o dht.readTemperature (verdadero) para Fahrenheit if (isnan (h) || isnan (t)) {Serial.println ("¡No se pudo leer del sensor DHT!"); // to check if sensor is not sending any false values return; } // Puedes enviar cualquier valor en cualquier momento. // Por favor, no envíe más de 10 valores por segundo. Blynk.virtualWrite (V5, h); // send humidity to pin V5 Blynk.virtualWrite(V6, t); // send temperature to pin V7}void getPirValue(void){ pirValue =digitalRead(pirPin); if (pirValue) //digital pin of PIR gives high value on human detection { Serial.println("Motion detected"); Blynk.notify("Motion detected"); }}void getSoilValue(void){ soilValue =digitalRead(soilPin); if (soilValue ==HIGH) //digital pin of soil sensor give low value when humidity is less { Serial.println("Water Plants"); Blynk.notify("Water Plants"); }}void setup(){ // Debug console Serial.begin(9600); Blynk.begin(auth, ssid, pass); // You can also specify server://Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442); //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442); dht.begin (); // Begins DHT reading Blynk.tweet("OCTOPOD IS ONLINE! "); // Tweating on your Twitter Handle that you project is online pinMode(pirPin,INPUT); // Defining that Pir Pin is meant to take Input Only pinMode(soilPin,INPUT); // Defining that Soil Sensor Pin is meant to take Input Only // Setup a function to be called every second timer.setInterval(1000L, sendSensor);}void loop(){ Blynk.run(); timer.run (); if (PIRpinValue ==HIGH) //VO pin from Blynk app tells if Motion Detection is ON { getPirValue(); } if (SOILpinValue ==HIGH) //V1 pin from Blynk app tells if Soil Moisture is ON { getSoilValue(); }} 
octopod_door.inoArduino
Code for Automatic Door Lock Control (NO BLUETOOTH VERSION)
/*********************************************************************************************************** OCTOPOD:A SMART HOME AUTOMATION PROJECT MADE BY SAKSHAM ARDUINO RFID DOOR LOCK CODELibrary Required - MFRC522 ************************************************************************************************************/#include #include #include  #define SS_PIN 10#define RST_PIN 9#define LED_G 5 //define green LED pin#define LED_R 4 //define red LED#define BUZZER 2 //buzzer pinMFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.Servo myServo; //define servo name void setup() { Serial.begin(9600); // Initiate a serial communication SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 myServo.attach(3); //servo pin myServo.write(0); //servo start position pinMode(LED_G, OUTPUT); pinMode(LED_R, OUTPUT); pinMode(BUZZER, OUTPUT); noTone(BUZZER); Serial.println("Put your card to the reader..."); Serial.println();}void loop() { // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Show UID on serial monitor Serial.print("UID tag :"); String content=""; byte letter; for (byte i =0; i  
octopod_door_bluetooth.inoArduino
Code for Automatic Door Lock Control (Bluetooth Version)
/*********************************************************************************************************** OCTOPOD:A SMART HOME AUTOMATION PROJECT MADE BY SAKSHAM ARDUINO RFID DOOR LOCK CODELibrary Required - MFRC522 ************************************************************************************************************/#include SoftwareSerial BTserial(0, 1); // RX | TX#include #include #include #define SS_PIN 10#define RST_PIN 9#define LED_G 5 //define green LED pin#define LED_R 4 //define red LED#define BUZZER 2 //buzzer pinMFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.Servo myServo; //define servo namevoid setup(){ BTserial.begin(9600); // Initiate a serial communication BTserial.println("Waiting for connections..."); SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 myServo.attach(3); //servo pin myServo.write(0); //servo start position pinMode(LED_G, OUTPUT); pinMode(LED_R, OUTPUT); pinMode(BUZZER, OUTPUT); noTone(BUZZER); BTserial.println("Put your card to the reader..."); BTserial.println();}void loop(){ // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Show UID on serial monitor BTserial.print("UID tag :"); String content =""; byte letter; for (byte i =0; i   

Piezas y carcasas personalizadas

This is the basic design that you can use if you want to make the enclosure out of Cardboard/ Wood like me! octopod_v2_ukTmIJ0uMl.f3dProper Enclosure that you can 3D Print! octo_2_v3_sii4tuCF7d.f3d

Esquemas

Pin configuration might be different with Arduino MKR 1010 Without Bluetooth
For Bluetooth connect Rx (HC-05) --> Tx (Arduino)
Tx (HC-05) --> Rx (Arduino)
and 5v to 5v
Ground to Ground ESP MAX
AO - - - - - - - - - - - - GPIO2
A1 - - - - - - - - - - - - - GPIO1

Soil Sensor MAX
analog sensor - - - GPIO3

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

PIR Sensor MAX
sensor - - - - - - - - - - - -GPIO0

Relay MAX
1 - - - - - - - - - - - - - - - - - M0
2 - - - - - - - - - - - - - - - - - M1

Proceso de manufactura

  1. Aplicaciones de automatización del hogar
  2. La publicidad maliciosa insidiosa se aprovecha de la IoT doméstica inteligente
  3. RASPBERRY PI HOME AUTOMATION
  4. Persianas inteligentes
  5. IOT - Smart Jar usando ESP8266, Arduino y sensor ultrasónico
  6. Sistema de seguridad y automatización del hogar inteligente con 1Sheeld
  7. Tech-TicTacToe
  8. Temporizador de cuenta atrás de Arduino
  9. RC Porsche Car (Proyecto Arduino)
  10. Cerradura de puerta inteligente usando la página de inicio de sesión de WiFi de Arduino y ESP8266
  11. Automatización en la industria 4.0