ARDUINO, PYTHON Y OPENCV

Vamos a desarrollar un proyecto interesante aplicando la maravillosa placa electrónica Arduino, el lenguaje de programación número 1 en el Ranking Tiobe y la librería líder en reconocimiento facial OpenCV

Objetivo

Diseñar e implementar mediante Arduino, Python y OpenCV un sistema que permita controlar salidas digitales con el reconocimiento de patrones y gestos.

Este proyecto busca demostrar el amplio potencial que tiene Arduino para comunicarse mediante diferentes protocolos de comunicación estándar y su amplia compatibilidad con lenguajes de programación como Python.

El proyecto sienta las bases de una alta escalabilidad industrial, doméstica y en el sector IoT permitiendo la ampliación a diseños más elevados y de automatización.

Arduino Uno

Descripción: El modelo más popular, ideal para principiantes.
Microcontrolador: ATmega328P.
Pines: 14 digitales (6 PWM), 6 analógicos.
Conectividad: USB para programación y alimentación.

Arduino Nano

Descripción: Versión compacta del Uno.
Microcontrolador: ATmega328P.
Pines: 14 digitales (6 PWM), 8 analógicos.
Conectividad: Mini-USB.

¿Qué es OpenCV?

OpenCV (Open Source Computer Vision Library) es una biblioteca de software de código abierto utilizada principalmente para procesamiento de imágenes y visión por computadora. Fue desarrollada originalmente por Intel y ahora es mantenida por una comunidad de desarrolladores.

OpenCV proporciona una serie de funciones que facilitan tareas complejas de visión artificial, como detección de objetos, reconocimiento facial, procesamiento de videos, análisis de movimiento, entre otras.

En Python, OpenCV se usa a través del paquete opencv-python, lo que permite acceder a una amplia gama de herramientas para manipular imágenes y videos. Algunos de los usos más comunes de OpenCV en Python incluyen:

Lectura y escritura de imágenes/videos: Puedes abrir, manipular y guardar imágenes en varios formatos.

Procesamiento de imágenes: Realizar operaciones como filtrado, transformaciones geométricas (escalar, rotar, recortar), detección de bordes, suavizado, entre otras.

Detección de características: Herramientas para detectar características en imágenes, como bordes, esquinas, contornos, etc.

Reconocimiento de objetos: Detección de rostros, detección de objetos con modelos preentrenados (por ejemplo, usando clasificadores en cascada o redes neuronales).

Análisis de movimiento: Seguimiento de objetos en movimiento, detección de cambios en escenas.

Distribución de Pines de Arduino Uno

Digitales (0-13): Pines de entrada/salidas digitales.
Análogos (A0-A5): Pines de entrada analógica.
Pines de poder: 5V, 3.3V, GND.
PWM (Pulse Width Modulation): Pines con capacidad de PWM (~).
UART (0-1): Comunicación serie.
SPI (10-13): Interfaz de comunicación SPI.
I2C (A4, A5): Interfaz de comunicación I2C.

Distribución de Pines de Arduino Nano

Digitales (0-13): Pines de entrada/salida digitales.
Análogos (A0-A7): Pines de entrada analógica.
Pines de poder: 5V, 3.3V, GND.
PWM (3, 5, 6, 9, 10, 11): Pines con capacidad de PWM.
UART (0-1): Comunicación serie.
SPI (10-13): Interfaz de comunicación SPI.
I2C (A4, A5): Interfaz de comunicación I2C.

Tener presente que Arduino Uno y Nano usan el Microcontrolador AT-Mega 328/P

Características Técnicas del Microcontrolador AT-Mega 328/P

Arquitectura: 8 bits.
Frecuencia: 16 MHz.
Memoria Flash: 32 KB.
SRAM: 2 KB.
EEPROM: 1 KB.
Periféricos: ADC de 10 bits, PWM, UART, SPI, I2C.
Entradas/Salidas: 23 pines de E/S.
Voltaje de operación: 1.8V – 5.5V.

Y sobre todo tener presente los 3 protocolos de comunicación principales que tenemos disponibles en Arduino: UART, SPI, I2C.

¿Qué necesitaremos para este proyecto?
Recursos del Proyecto

Arduino con IA

Hardware

• Un Arduino uno o Arduino Nano y su cable de comunicación.
• 5 Leds.
• Una Resistencia de 200 Ohm.
• Un Protoboard.
• Cables Jumper.
• Un computador.

Software

• Python.
• Arduino IDE.

Librerías de Python
  • opencv-python
  • mediapipe
  • controller
  • cvzone
  • pyfirmata
Librería Firmata en Arduino (Importante)

Permite la comunicación con aplicaciones informáticas mediante un protocolo serial estándar. Para todas las placas Arduino/Genuino.

La biblioteca Firmata implementa el protocolo Firmata para comunicarse con el software en la computadora host. Esto le permite escribir firmware personalizado sin tener que crear su propio protocolo y objetos para el entorno de programación que está utilizando.

PASO 1: Descargar e instalar la última versión de Python, mediante:

Customize Installation

PASO 2: Verificar que tenemos Python instalado:

Para salir de Python ejecutar la función exit()

PASO 3: Instalar las librerías de Python

pip install opencv-python
pip install mediapipe
pip install controller
pip install cvzone
pip install pyfirmata

pip install opencv-python

pip install mediapipe

pip install controller

pip install cvzone

pip install pyfirmata

PASO 4: Instalar Arduino IDE:

Clicar en más información y check en redes públicas y privadas.

Dar clic en Confiar e instalar

PASO 5: Seleccionar placa a trabajar, en nuestro caso Arduino Nano.

• Seleccionamos Arduino Nano
• Seleccionamos el puerto
• Seleccionamos OLD BOOTLOADER para el caso de Arduino Nano.

Importante:

Verificar el puerto asignado para Arduino en hardware y dispositivos del computador.

En caso de que el computador no reconozca el puerto usb/serial será necesario instalar el driver CH340 incluido en la ruta del proyecto:

Arduino con IA

PASO 6: Cargamos Firmata en Arduino:

Grabamos StandarFirmata en el Arduino uno/nano, con ello Arduino estará listo para recibir instrucciones desde Python en el computador.

PASO 7: Configuramos los archivos en Python, en específico el archivo controller.py

Nota: De igual forma, se recomienda leer y analizar ambos archivos Python para comprender mejor su funcionamiento.

PASO8: Configuramos el puerto:

Reemplazar COM1 por el puerto asignado en su computador.

PASO 9: Iniciamos el Archivo Arduino.py.

Y listo, ahora puedes controlar las salidas mediante tu mano. Recuerda Tener una cámara conectada al computador y Arduino con el puerto y driver correctamente operativos.

Imágenes en el Laboratorio:

UPGRADE

Reemplazando los leds por relé´s podemos controlar dispositivos de voltajes superiores como lámparas, bombillas, domotizar un hogar.