Construction of the final prototype Components used The components used have been, per module: Density Bar 1 - Arduino Pro Mini 5v 4 - LDRs 4 - Resistors 1k 2 - PCB Terminal Blocks Communication bar 1 - Arduino Pro Mini 5v 1 - LM2596s DC-DC step down power supply module 2 - PCB Terminal Blocks 1 - Voltage regulator TIP220 1 - Heat Sink for TIP220 1 - Rectangular LED 6W 630lm 6500K COB 170 x 15 mm. Industruino 1 - Industruino PROTO kit 1 - Relay module Keyes_SR1 Arduino with screen 1 - Arduino UNO R3 1 - 16x2 Character LCD module with I2C 3 - Resistors 10k 2 - Resistors 220 1 - LED Red 1 - LED Green 3 - Buttons 1 - Relay module Keyes_SR1 Assembly of the circuit The Fritzing scheme is as follows: Density bar Circuit that manages the density bar This circuit is responsible for obtaining the measurements and send notifications to the communications bar for redirection. Communication bar Circuit that manages the c
Obtener enlace
Facebook
Twitter
Pinterest
Correo electrónico
Otras aplicaciones
Sistema de detección de la densidad del material usado para crear las toallitas húmedas con Arduino 2/2
Este circuito se encarga de obtener las mediciones y enviar notificaciones a la barra de comunicaciones para que las redirija.
Barra de comunicaciones
Circuito que gestiona la barra de comunicaciones
Este circuito se encarga de las comunicaciones de la barra de densidad, además de la alimentación eléctrica de la barra y todos los componentes que contiene.
Arduino con pantalla
Arduino con pantalla
Este montaje es el realizado para sustituir al Industruino que se quemó.
Software: Funcionalidad a implementar y diseño del protocolo utilizado
En este apartado se comenta la funcionalidad que cumple el software creado y el protocolo de mensajería que se ha diseñado para que la comunicación cumpla con la funcionalidad deseada.
La funcionalidad del software implementado es la siguiente:
Auto calibración de los sensores de luz. Este paso se ha de realizar automáticamente al arrancar la barra de densidad o cuando el usuario lo pida.
A partir de un valor medio de luz que se considere como válido (la calidad del producto es la correcta) se le han de indicar un porcentaje superior y uno inferior, dentro de los cuales el producto se considera que contiene la calidad deseada. El valor válido se obtendrá desde el auto calibrado.
A partir de los datos de los 2 puntos anteriores enviar una señal si el producto no está dentro de la calidad deseada.
Cada una de las barras se encarga de una o varias funcionalidades y el Industruino(y posteriormente el Arduino con pantalla) de otras, estas son:
Industruino / Arduino con pantalla:
Configuración de los porcentajes a aplicar al valor medio de calidad.
Activar la señal de aviso si recibe la notificación de que se ha encontrado algún trozo que no cumple la calidad.
Petición de configuración de la barra de densidad.
Barra de densidad
Ejecución del auto calibrado, ya sea al arrancar o cuando se le pida.
Realizar las mediciones y avisar si alguna está fuera de rango.
Barra de comunicaciones
Intermediario entre la barra de densidad y el Industruino, dentro de este rol se encarga de:
Convertir los porcentajes pasados por el Industruino a valores dentro del rango de medición y comunicárselos a la barra de densidad.
Pedir a la barra de densidad los valores requeridos por el Industruino y transformándolos si es necesario.
Filtrar los avisos de la barra de densidad al Industruino, sólo avisa al Industruino si ha habido un cambio
Para la comunicación entre las barras se diseñó el siguiente protocolo de mensajería:
Peticiones desde el Industruino
Petición de configuración actual de barra.
Datos de reconfiguración para la barra (datos modificados en Industruino y enviados a las barras).
Petición de auto calibrado de barra.
Envíos al Industruino, independientes a los anteriores como respuesta a una petición de éste
Envío de información de auto calibrado (el primer arranque de la barra siempre realiza un auto calibrado, sin que se lo pida el Industruino)
Envío de datos sobre las lecturas. Sólo se envía cuando hay un cambio entre dentro o fuera del rango.
Librerías usadas en cada Arduino:
En este apartado se enumeran cada una de las librerías que se han creado y las que se han usado para cada uno de los Arduinos que componen el proyecto.
Barra de densidad
EasyTransfer: librería usada para las comunicaciones entre barras.
Librerías internas: creadas por nosotros y usadas para facilitar la programación.
CommunicationStructures.h: usada para contener las estructuras de datos que se enviaban entre Arduinos.
U8glib: librería usada para pintar en la pantalla del Industruino. Obtenida a partir de la siguiente URL: https://github.com/olikraus/u8glib
M2tklib: librería usada para pintar los menús en la pantalla del Industruino. Obtenida a partir de la siguiente URL: https://github.com/olikraus/m2tklib
Wire: librería usada para las conexiones I2C.
EasyTransfer: librería usada para las comunicaciones.
Librerías internas: creadas por nosotros y usadas para facilitar la programación.
CommunicationStructures.h: usada para contener las estructuras de datos que se enviaban entre Arduinos.
Para comprobar la dirección I2C de los elementos que usaban este protocolo se ha usado el programa llamado Arduino I2c Scanner.
Librería interna
Esta no es una librería de Arduino, si no, es un grupo de utilidades y definición de estructuras de datos que se usan por el resto de programas de Arduino que se usan en el proyecto.
Estas clases están situadas dentro de la carpeta \\Usuario\Documentos\Arduino\libraries, en nuestro caso hemos creado una carpeta allí dentro con el nombre utilidades_barras.
Los ficheros que la componen son:
CommunicationStructures.h
Este fichero contiene las estructuras de datos que se usan para las comunicaciones entre Arduinos.
#include/*
Las operaciones que se envían entre el Industruino y las barras pueden ser los siguientes:
1 - Petición de configuración de barra.
2 - Datos de reconfiguración de barra (datos modificados en Industruino y enviados a las barras).
3 - Petición de auto calibrado de barra.
*/// Número de LDR's#define NUM_LDR 4/*
Configuración de un LDR
*/struct config_LDR
{
int valorMedio;
int valorUmbralSup;
int valorUmbralInf;
};
/*
Valores de un LDR
*/struct valores_LDR
{
int valorActual;
int valorAnterior;
};
/*
Estructura de datos para comunicación entre barra de comunicaciones y barra de densidad
*/struct datos_densidad_barraCom_barraDens
{
int operacion;
config_LDR confLDR[NUM_LDR];
int UmbralSup;
int UmbralInf;
};
/*
Estructura de datos para comunicación entre barra de densidad y barra de comunicaciones
*/struct datos_densidad_barraDens_barraCom
{
boolean saldo;
valores_LDR valLDR[NUM_LDR];
//Para cuando se auto calibra la barra
boolean cambios; // Indica si se devuelven cambios de configuración o datos.
config_LDR confLDR[NUM_LDR];
};
/*
Estructura de datos para comunicación entre Industruino y barra de comunicaciones
*/struct datos_densidad_Industruino_barraCom
{
int operacion;
int UmbralSup;
int UmbralInf;
};
/*
Estructura de datos para comunicación entre barra de comunicaciones y Industruino
*/struct datos_densidad_barraCom_Industruino
{
int tipo; //Tipo de barra.int tipoRespuesta; // Valores posibles: 1 - Respuesta a petición de configuración o a auto calibrado, 2 - Respuesta con datos.
boolean saldo;
valores_LDR valLDR[NUM_LDR];
int UmbralSup;
int UmbralInf;
};
EEPROMAnything.h
Este fichero se usa para la gestión de datos que se guardan en la EEPROM. Ha sido obtenida a partir de la información contenida en la siguiente página de la web de Arduino: http://playground.Arduino.cc/Code/EEPROMWriteAnything.
#include#include// for type definitionstemplate <class T> int EEPROM_writeAnything(int ee, const T& value)
{
const byte* p = (const byte*)(constvoid*)&value;
unsignedint i;
for (i = 0; i < sizeof(value); i++)
EEPROM.write(ee++, *p++);
return i;
}
template <class T> int EEPROM_readAnything(int ee, T& value)
{
byte* p = (byte*)(void*)&value;
unsignedint i;
for (i = 0; i < sizeof(value); i++)
*p++ = EEPROM.read(ee++);
return i;
}
void EEPROM_clear()
{
// write a 0 to all 512 bytes of the EEPROMfor (int i = 0; i < 512; i++)
EEPROM.write(i, 0);
}
I2C_Anything.h
Este fichero se usa para la gestión de lectura y escritura sobre el puerto I2C. Ha sido obtenida a partir de la información contenida en la siguiente entrada del blog de Arduino: http://forum.Arduino.cc/index.php?topic=104732.0
// Written by Nick Gammon// May 2012#include#includetemplate <typename T> unsignedint I2C_writeAnything (const T& value)
{
const byte * p = (const byte*) &value;
unsignedint i;
for (i = 0; i < sizeof value; i++)
Wire.write(*p++);
return i;
} // end of I2C_writeAnythingtemplate <typename T> unsignedint I2C_readAnything(T& value)
{
byte * p = (byte*) &value;
unsignedint i;
for (i = 0; i < sizeof value; i++)
*p++ = Wire.read();
return i;
} // end of I2C_readAnything
Barra de densidad
Los ficheros que componen este proyecto/programa son:
barra_densidad.ino: Este fichero es el fichero base del proyecto y contiene los siguientes elementos:
Métodos básicos de un programa en Arduino (setup y loop).
Declaración e inicialización de variables globales.
Declaración de estructuras de datos internas al programa.
datos_densidad.ino: Este fichero contiene las estructuras de datos con la información de la barra de densidad y la gestión de estas.
datos_LDR.ino: Este fichero contiene la gestión de configuración y acceso a datos de los LDRs, adicionalmente cuando obtiene los datos de los LDRs los procesa.
Barra de comunicaciones
Los ficheros que componen este proyecto/programa son:
barra_densidad_conector.ino: Este fichero es el fichero base del proyecto y contiene los siguientes elementos:
Métodos básicos de un programa en Arduino (setup y loop).
Declaración e inicialización de variables globales.
Declaración de estructuras de datos internas al programa.
datos_densidad.ino: Este fichero contiene las estructuras de datos con la información de la barra de densidad y la gestión de estas.
Industruino
Los ficheros que componen este proyecto/programa son:
Industruino.ino: Este fichero es el fichero base del proyecto y contiene los siguientes elementos:
Métodos básicos de un programa en Arduino (setup y loop).
Declaración e inicialización de variables globales.
Declaración de estructuras de datos internas al programa.
Industruino_I2c.ino: Este fichero contiene la gestión de las comunicaciones I2C.
Industruino_Menu.ino: Este fichero contiene el pintado y gestión del menú del programa.
Industruino_Pantalla.ino: Este fichero contiene la gestión de la pantalla.
Industruino_datos.ino: Este fichero contiene la gestión de los datos recibidos y a enviar.
Arduino con pantalla
Los ficheros que componen este proyecto/programa son:
ard_pantalla.ino: Este fichero es el fichero base del proyecto y contiene los siguientes elementos:
Métodos básicos de un programa en Arduino (setup y loop).
Declaración e inicialización de variables globales.
Declaración de estructuras de datos internas al programa.
Botones.ino: Este fichero contiene los métodos utilizados para trabajar con los botones.
conexion_I2c.ino: Este fichero contiene la gestión de las comunicaciones I2C.
Menus.ino: Este fichero contiene el pintado y gestión del menú del programa.
Pantalla.ino: Este fichero contiene la gestión de la pantalla.
gestion_datos.ino: Este fichero contiene la gestión de los datos recibidos y a enviar.
Agradecimientos
A mi amigo Fran por pensar en mí para la realización de este proyecto, sin el no hubiera tenido ningún contacto con el mundo de Arduino.
A mi hermano Raul por la creación del banco de pruebas y por darnos alguna solución ingeniosa a los problemas estructurales de las barras que nos encontramos por el camino y nos bloquearon en algún momento puntual.
A mi amigo Sergio por sus ayudas puntuales en el diseño de la electrónica.
A Mario y a Jose Antonio por ayudarme a revisar el artículo y proponerme mejoras en la redacción y la forma.
Al resto de gente que con sus ánimos y ayudas puntuales nos ayudaron a acabar este proyecto.
Construction of the final prototype Components used The components used have been, per module: Density Bar 1 - Arduino Pro Mini 5v 4 - LDRs 4 - Resistors 1k 2 - PCB Terminal Blocks Communication bar 1 - Arduino Pro Mini 5v 1 - LM2596s DC-DC step down power supply module 2 - PCB Terminal Blocks 1 - Voltage regulator TIP220 1 - Heat Sink for TIP220 1 - Rectangular LED 6W 630lm 6500K COB 170 x 15 mm. Industruino 1 - Industruino PROTO kit 1 - Relay module Keyes_SR1 Arduino with screen 1 - Arduino UNO R3 1 - 16x2 Character LCD module with I2C 3 - Resistors 10k 2 - Resistors 220 1 - LED Red 1 - LED Green 3 - Buttons 1 - Relay module Keyes_SR1 Assembly of the circuit The Fritzing scheme is as follows: Density bar Circuit that manages the density bar This circuit is responsible for obtaining the measurements and send notifications to the communications bar for redirection. Communication bar Circuit that manages the c
Barras montadas dentro del maletín de demo Barras montadas en el banco de pruebas Introducción Esta aventura comenzó cuando mi amigo Fran vino a buscarme para contarme la necesidad que había detectado en una empresa y quería que le echara una mano para llevarla a buen puerto. Aunque al final el proyecto no se aplicó en la empresa, decidimos terminarlo, habíamos dedicado demasiado tiempo en él como para no hacerlo. El proyecto consistía en crear un sistema de detección de la densidad de un material para detectar si este cumplía con la calidad esperada. En caso de no cumplirla se debía de activar un relé. La solución que se eligiera debía de aplicarse a 9 máquinas, ser capaz de estar funcionando las 24 horas del día y realizar las tareas a la velocidad de funcionamiento de la máquina. El producto a analizar consistía en las bobinas de material usado para crear las toallitas húmedas. Los casos que debían producir la activación del relé eran los siguientes: Den
Comentarios
Publicar un comentario