sábado, 29 de mayo de 2021

Sistema de reconocimiento de forma, color y lectura de códigos QR por visión artificial

Se recuerda que este Blog esta realizado con fines educativos y, a medida que vaya creciendo, se explicará con más detalle los pasos realizados por medio de guías dedicadas, actualizaciones y nuevas entradas.

Todos programas realizados pueden ser descargados y compartidos con referencia al autor.

Pincha AQUÍ para descargar todos los programas de esta entrada.

Objetivo:

Mostrar los fragmentos de los que se compone una máquina de visión artificial casera compuesta por las siguientes partes:

  • Sistema de evaluación de forma y color por visión artificial
  • Sistema de transporte de la muestra por una cinta transportadora
  • Control por voz en español e inglés y cambio de idioma dinámico
  • Acceso por niveles de seguridad, reconocimiento facial y RFID
  • Diseño y montaje de una PCB dedicada "P4_Shield"

Programas utilizados:

- Arduino IDE 1.8.12 (Enlace de descarga)
- Python3 (Enlace de descarga)
- Proteus 8 Professional 

Principio de funcionamiento:

Se muestra en la Figura 1 el esquema de funcionamiento de la máquina de reconocimiento de forma y color por visión artificial.


Figura 1: "Esquema de funcionamiento"

La figura que se acaba de mostrar representa una máquina de estados por la cual, el programa va pasando de forma controlada realizando la labor pertinente a ese estado. A continuación, se analizará y explicará cada uno de los estados.
  • En el estado INTRO comienza la presentación del programa por medio de una pantalla OLED y avisos de audio en función del argumento introducido a la hora de su ejecución. "en" para inglés y cualquier otro código para el español. En el caso de querer introducir más idiomas al programa, se podrá realizar gracias a la estructuración interna del programa y el código de idioma introducido en forma de argumento.
  • Una vez transcurrida la introducción, comenzará la identificación por radio frecuencia, en donde el reconocimiento de un transductor (13,56 MHz). Según el transductor acercado, se reconocerá si pertenece a la lista negra y se reiniciará el programa, si no está autorizado y tendrá que repetir la aproximación de otro transductor, si es un usuario y comenzará el reconocimiento facial para el acceso o, finalmente si es el administrador y se saltará la fase de reconocimiento facial.
  • En el ESTADO 1, una vez se ha realizado el reconocimiento, se pondrá la cinta en marcha hasta situarse en la posición de escucha en donde se podrán dar varias órdenes:

 En español:

- Enviar: envía la pieza a la posición de evaluación

- Salir: salida del programa

- Ingles: cambia el programa a inglés (audio y reconocimiento de voz incluido)

En ingles:

- Send: envía la pieza a la posición de evaluación

- Exit: salida del programa

- Spanish: cambia el programa a español (audio y reconocimiento de voz incluido)

  • Cuando la pieza es enviada a la zona de evaluación, una cámara IP (no se recomienda la usar IP Cam del smartphone) se encarga de detectar el movimiento de la pieza de evaluación, en el caso de no haber pieza, el sistema lo reconocerá y volverá la cinta a su posición inicial para la próxima orden.
  • Una vez el movimiento de la pieza de evaluación a sido detectado, se leerá en primer lugar si lo introducido es un código QR y, lanzará la página emergente en caso afirmativo y en segundo lugar, si no había un código QR, detectará forma y color anunciándolo a través de un mensaje de audio en el idioma seleccionado.
  • El proceso se repetirá indefinidamente hasta que se decida salir del programa.
Se muestra en la Figura 2, la maqueta fabricada para el montaje de este sistema.

Figura 2: "Maqueta de la máquina"

Se muestra en la Figura 3, otra vista del sistema abierto. Durante su funcionamiento se cierran las tapas y se introduce el smartphone para asegurarla y usarlo como IPCam.


Figura 3: "Maqueta de la máquina abierta"

En las Figuras 4 y 5 se muestra la cara Top y Botton respectivamente de la PCB diseñada para el funcionamiento del sistema. En ella se ubican las siguientes conexiones en menos de 11 x 7,5 cm:
  • Módulo de RFID
  • Display OLED
  • Raspberry Pi 4 B
  • ESP32
  • Driver TMC2130
  • Motor bipolar paso a paso
  • Conexión del ventilador
  • Módulo de relé
  • Fuente de alimentación
  • Terminal de alimentación del motor

Figura 4: "Cara Top de la PCB"


Figura 5: "Cara Botton de la PCB"

Ultima revisión 29/05/2021

Control de un servo por voz

Se recuerda que este Blog esta realizado con fines educativos y, a medida que vaya creciendo, se explicará con más detalle los pasos realizados por medio de guías dedicadas, actualizaciones y nuevas entradas.

Todos programas realizados pueden ser descargados y compartidos con referencia al autor.

Pincha AQUÍ para descargar todos los programas de esta entrada.

Objetivo:

Mostrar como poder controlar un servo por voz mediante una Raspberry Pi 4 y un ESP8266.

Programas utilizados:

- Arduino IDE 1.8.12 (Enlace de descarga)
- Python3 (Enlace de descarga)

Programación del ESP8266:

El ESP8266 será quien controle el servomotor y atenderá a la suscripción del broker MQTT publicada desde la Raspberry Pi 4. Como se ha expuesto en entradas anteriores, el servomotor requiere de cierta calibración para responder con mejor precisión al ángulo introducido, y eso se aplicará en los siguientes programas mostrados.

El primer programa, "servo.ino" utiliza una ecuación lineal para su calibración, esta proviene de la siguiente tabla obtenida de la calibración mostrada en la Figura 1 (Línea amarilla - Aproximación).
Figura 1: "Ecuación de calibración"


Esta ecuación se transcribe en la programación de la forma mostrada en la Figura 2.


Figura 2: "Aplicación de la ecuación en el programa"


El segundo programa, "servo2.ino" utiliza una aproximación por partes, esta proviene de una sencilla agrupación en función de la desviación lineal obtenida. La Figura 1 (Línea azul - Aproximación2) muestra cómo se realiza el ajuste manual aproximándose a la curva característica del motor. Cabe destacar que cuanto más fina se haga, mejor será el reajuste y por lo tanto, más fiel será su salida respecto de la entrada introducida.

Para transcribir esta aproximación por partes, se hace una sentencia condicional para discretizar el ángulo introducido y aplicar un reajuste directo. Como se aprecia en la Figura 3, el reajuste seleccionado para los ángulos introducidos de 0 a 21º es de 7 grados, mientras que para los ángulos introducidos de 21 a 25º es de 5 grados.




Figura 3: "Aplicación de la aproximación 2 en el programa"


Adicionalmente, para el uso de cualquiera de los programas se deberán modificar las siguientes líneas de código mostradas en la Figura 4.


Figura 4: "Cambio de configuración para la conexión Wifi"

Programación de Python3:

El programa de Python3 se ubicará en una Raspberry Pi 4 donde se conectará el sensor de ultrasonidos a los pines:

TRIGGER    GPIO 25    PIN 22
ECHO          GPIO 7      PIN 26

El programa "Ultrasonidos2.py" es una función dedicada al programa principal "Control_Servo2.py" desde el cual, se le llama para realizar una medición y registrar el resultado.
La diferencia con "Ultrasonidos.py" y "Control_Servo.py" es que, en esta ocasión, ambos se ejecutan individualmente sin la necesidad de disponer de dos terminales abiertos.
La información viaja por el broker MQTT, puede ser capturada en un Dashboard de Node-RED, donde se puede ver la información de la medición y el ángulo introducido. (Se agregará próximamente).

Ultima revisión 30/05/2021



Calibración de un servo con IDE Arduino

Se recuerda que este Blog esta realizado con fines educativos y, a medida que vaya creciendo, se explicará con más detalle los pasos realizados por medio de guías dedicadas, actualizaciones y nuevas entradas.

Todos programas realizados pueden ser descargados y compartidos con referencia al autor.

Pincha AQUÍ para descargar todos los programas de esta entrada.

Objetivo:

Mostrar como calibrar un servo con IDE Arduino de forma sencilla para guiarlo al alguno deseado con la precisión deseada.

Programas utilizados:

- Arduino IDE 1.8.12 (Enlace de descarga)
- Microsoft Excel 2016 

Proceso calibración:

Paso 1: Programación del Microcontrolador

Para realizar la calibración, se recurre al empleo de la librería servo y, a un reajuste del valor de salida para obtener el ángulo deseado.

Cuando se le envía al servo una instrucción con "miservo.write(angulo);" si se mide la salida con transportador de ángulos, comprobará que no acude al ángulo exacto indicado y debe realizarse un ajuste.

El primer paso para el reajuste, es hacer un barrido de los ángulos y anotar a que posición acude el servo. Una vez anotado, se rellenará una tabla similar a la mostrada en la Figura 1.

Puede descargar la tabla y los programas AQUÍ


Figura 1: "Tabla de anotación de resultados" 

Para rellenar la tabla, en la columna INPUT se coloca el ángulo programado en el servo y en la OUTPUT el ángulo al que ha acudido. Una vez se dispone de una gran variedad de datos haciendo el barrido de 0 a 180º (cada 5º dependiendo de la precisión que desee) se elabora una gráfica de datos y se escoge la línea de tendencia más aproximada a su resultado. 

Tras aplicar la ecuación obtenida al ángulo entregado, se podrá ver la precisión con la que responderá el servo una vez se introduzca en el código.

En los archivos de descarga, está elaborada la tabla Mostrada en la Figura 2, donde se muestra la curva característica del servo MG995 con las dos aproximaciones realizadas (Lineal y por partes). 


Figura 2: "Curva característica del Servo MG995" 


La programación incluida en los archivos ".ino" corresponden a una futura entrada de este blog, "Control de servo por voz"; en donde se controlará un servo por medio de la voz utilizando una Raspberry Pi 4 usando este proceso para su calibración.

Última revisión 30/05/2021


viernes, 28 de mayo de 2021

Lecturas de PT100 de forma inalámbrica (PT100 + LabVIEW + XBee + ESP32 + BD)

Se recuerda que este Blog esta realizado con fines educativos y, a medida que vaya creciendo, se explicará con más detalle los pasos realizados por medio de guías dedicadas, actualizaciones y nuevas entradas.

Todos programas realizados pueden ser descargados y compartidos con referencia al autor.

Pincha AQUÍ para descargar los programas de esta entrada.

Objetivo:

Mostrar como monitorizar en Real Time las lecturas de una PT100 de forma inalámbrica. Se muestra en la Figura 1 el montaje final de los dispositivos en la PCB dedicada.


Figura 1: "Montaje de los componentes"


Materiales necesarios:

- Sonda de temperatura sumergible PT100 de 3 hilos (Mostrada en la Figura 2)


Figura 2: "Sonda PT100 de 3 hilos (Platino)"

- ESP32 MINI D1 (Ambas caras mostradas en la Figura 3)


Figura 3: "ESP32 MINI D1"

- 2 XBee con adaptador USB (Mostrados en la Figura 4; XBee USB Adapter izquierda, XBee derecha)

Figura 4: "XBee"

- Fuente de alimentación +3V3 / +5V


Figura 5: "Fuente de alimentación +3V3 / +5V"

- PT100 Shield (PCB dedicada Figura 6 cara Botton y Figura 7 Cara Top)


Figura 6: "PT100 Shield cara Botton"


Figura 7: "PT100 Shield cara Top"

Programas utilizados:

- Arduino IDE 1.8.12 (Enlace de descarga)
- Proteus 8 Professional 
- LabVIEW 2019
- Microsoft Access 2016 

Proceso de diseño y fabricación:

Paso 1: Programación del ESP32

Para la programación del ESP32 se empleará el entorno de programación Arduino IDE 1.8.12. Se tendrá en cuenta no utilizar la conexión wifi (se verá en entradas posteriores) ni el puerto serie, ya que el objetivo será establecer una comunicación por UART (Transmisión - Recepción Asíncrona Universal) entre el ESP32 y uno de los XBee (Router).

Puede descargar el código explicado AQUÍ.

La parte más importante de este programa; resaltada en rojo en la Figura 8, reside en la toma de las lecturas debido a que al realizar una media de 1000 mediciones, se evitará la oscilación de la señal recibida enormemente obteniendo así una medición mucho más certera.

Figura 8: "Sistema de medición estable"

Serial1.println(suma/1000.0, 8);  //Usado para enviar 8 dígitos

Paso 2: Fabricación de PT100 Shield (PCB dedicada)

La fabricación de la PT100 Shield consiste en el diseño de una placa de circuito impreso (PCB) a doble cara (cara Top solo para serigrafia mecanizada, cara Botton conexiones) la cual, agrupará el ESP32, un XBee, un puente de Wheatstone, una fuente de alimentación y un terminal para la conexión de la PT100 de 3 hilos.

El esquema eléctrico, el Layout, los archivos CADCAM de fabricación y las librerías empleadas se pueden descargar AQUÍ

Se dejará para otras entradas posteriores las siguientes guías: (Esté atento)
- Guía de diseño de componentes en Proteus
- Guía de diseño de PCB en Proteus

Durante la selección de las resistencias a emplear, R3 de 100 ohmios del diseño en Proteus mostrado en la Figura 9, debe ser lo más exacta a su valor para obtener así, una lectura más fiable y no tener que recurrir a una calibración posterior más compleja y con más desviación.

Figura 9: "Resistencia de referencia (Muy importante)"

Se debe guardar especial cuidado al configurar la fuente de alimentación utilizada respetando las tensiones mostradas en las Figura 10 y 11.

Figura 10: "Configuración de la fuente (Esquema)"


Figura 11: "Configuración de la fuente (Dispositivo real)"


Paso 3: Programación de los XBee

La configuración que se realizará en los XBee se hace mediante el Software XCTU. Ambos usarán distinta configuración ya que, uno estará conectado a la PCB y, el otro a cualquier puerto USB del ordenador para su futura comunicación con LabVIEW (ambos se conectarán al PC durante su programación).

Se dejará para otras entradas posteriores la siguiente guía: (Esté atento)
- Guía de configuración de XBee con XCTU

Se muestra en las Figuras 12 y 13 respectivamente las configuraciones requeridas para establecer la comunicación entre XBee conectado al PC (Coordinador) y el XBee conectado a la PT100 Shield.

Figura 12: "Configuración de XBee Coordinador"

Figura 13: "Configuración de XBee Router"


Paso 4: Programación de LabVIEW

Una vez realizados todos los pasos anteriores, solo falta realizar la programación en LabVIEW donde se visualizará en tiempo real la información transmitida desde la PT100 Shield. Este paso se realizará en dos etapas, una la programación de LabView y la otra la configuración de los enlaces de comunicación con la base de datos.

Puede descargar el código AQUÍ

El programa mostrado tiene adjunto varios archivos ".vi" que deberán ser ubicados en la misma carpeta que el programa principal "Práctica1_PT100.vi". De la misma forma, la carpeta "Varios" se ubicará en la misma dirección que el resto de archivos.

La funcionalidad del programa desarrollado alberga desde una explicación de uso detallada, la demostración de los cálculos reales realizados para tomar la medición de una PT100 de 3 hilos con el sensor de platino, la monitorización en tiempo real de la medición de la sonda PT100 y la consulta a los registros de la base de datos que se registra con cada nueva lectura.

Se muestra en las Figuras 14, 15, 16 y 17 los diversos paneles mencionados previamente con el fin de motivar su descarga y consulta del código realizado, aun así, se mostrarán los fragmentos más llamativos o importantes del código.


Figura 14: "Panel de información"


Figura 15: "Panel de demostración"


Figura 16: "Panel de mediciones"


Figura 17: "Panel de Historial"

Uno de los fragmentos más llamativos de este programa, es la posibilidad de hacer emerger un documento PDF con solo hacer Click en un botón. Esto se logra gracias al programa desarrollado (el subVI mostrado en la Figura 18) capaz de reconocer la ubicación del archivo escogido. Si quiere observar su código únicamente tiene que doble Click en el área remarcada en rojo (en el Block Diagram CTRL +E).

Figura 18: "SubVI Open pdf.vi"

El otro fragmento a mencionar; es el mostrado en la Figura 19, gracias al cual se evitará el parpadeo de la tabla que muestra los registros de la base de datos. Esto se logra ya que se evita con una simple comparación si se ha solicitado un nuevo acceso a la base de datos, de caso contrario, el bucle seguiría en ejecución realizando nuevas lecturas cada segundo.

Figura 19: "Evitar parpadeos en el muestreo"


Para poder comenzar a utilizar el programa, primero se deben crear los archivos de la base de datos ejecutando el programa CrearDB.vi. Con su ejecución, comenzarán a crearse tablas indexadas diarias organizadas por Día y Mes para los próximos 10 años reunidas en 10 archivos indexados por año. Se obtendrá un resultado como el mostrado en la Figura 20.

Figura 20: "Base de datos preparada"


El paso final es la creación de los ficheros .udl que permitirá a LabVIEW leer y escribir datos en las tablas generadas. Para ello, el proceso de obtención de estos archivos de enlace se realiza mediante la siguiente secuencia mostrada a continuación en las Figuras 21, 22 y 23.


Figura 21: "Crear udl Tools/Create Data Link..."



Figura 22: "Crear udl Selección de Proveedor"


Figura 23: "Crear udl Prueba de conexión"


La ruta seleccionada para el udl debe ser la misma que los archivos de la base de datos generada y escogida para realizar el enlace. Esta tarea se deberá realizar con cada archivo de la base de datos (10 veces en total). Las rutas .udl no se pueden transferir, ya que algún intento de modificación para acelerar la tarea romperá el enlace establecido.

Por último, ya está todo listo para comenzar a tomar lecturas y monitorizarlas.

Última revisión 29/05/2021


Fabricación de PCB con CNC

  Se recuerda que este Blog esta realizado con fines educativos y, a medida que vaya creciendo, se explicará con más detalle los pasos reali...