miércoles, 29 de junio de 2016

Alarma de seguridad láser con mini altavoz y LED incorporados


En este POST vamos a construir una alarma muy funcional y fácil de programar, ya que consta de unos elementos muy baratos y simples de conseguir en cualquier tienda de electrónica, bien sea la de tu ciudad o cualquiera de las tiendas online existente en la WEB, como pueden ser unos LED, resistencias, un pequeño altavoz de 8Ω y lo más importante de todo un módulo emisor láser y otro receptor (fotoreceptor).
El módulo emisor láser ya le hemos utilizado en otro POST, por lo que simplemente decir, que una vez que lo alimentamos con +5VDC y GND de Arduino, a través de sus pines “+” y “-“ respectivamente, necesitamos conectar su pin “S” a una de las salidas digitales de Arduino (pin digital 6), para que al cargar y ejecutar el programa en nuestro Arduino, el módulo emisor láser permanezca encendido de manera continua. Antes de continuar y por experiencia propia os tengo que explicar que muchos módulos láser, si los habéis adquirido en páginas chinas, suelen tener cambiados los pines “-“ y “S”, por lo que tendremos que invertir estas dos conexiones para conseguir que nos funcione. Como precaución importantísima antes de utilizar un módulo emisor láser,  os advierto de que nunca debemos apuntar directamente a los ojos de personas ni animales, puesto que este láser aunque es de baja potencia (5mW), es capaz de dañar gravemente la visión, incluso a largas distancias.

Módulos receptor y emisor láser

El módulo receptor láser, es simplemente un pequeño PCB basado en el funcionamiento de un fotoreceptor, el cuál manda una señal al detectar la luz del láser, que también tendremos que alimentar con +5VDC y GND de Arduino, a través de los pines VCC y GND respectivamente, para que en ausencia de luz en el receptor, es decir, cuando algo se interponga en la trayectoria del rayo láser, su pin “OUT” (salida), que tendremos conectado a una entrada digital de Arduino (pin digital  7), estará a nivel BAJO (LOW), y por el contrario, cuando incida el rayo láser en el receptor, su salida estará a nivel ALTO (HIGH). Para que este sistema funcione de esta manera, deberemos de alinear correctamente el rayo del emisor láser con la ventana de detección del fotoreceptor, además de proteger el receptor láser mediante una pequeña caja, para que solo sea estimulado mediante el rayo láser a través de un pequeño orificio que tendremos que realizar en la caja y de esta manera evitar las interferencias luminosas provenientes de la luz ambiente del lugar donde instalemos nuestra alarma de seguridad. A continuación os muestro un modelo de estructura que se puede crear a partir de cartón rígido o en madera para que tanto el emisor como el receptor láser queden correctamente alineados y resguardados.

Estructura para la alarma de seguridad láser

Conociendo ya el funcionamiento tanto del receptor como del emisor láser, solamente tendremos que realizar la programación y conectar tanto los LED como el altavoz para que estos se accionen cuando el rayo láser no esté enfocando al receptor, es decir, cuando exista una presencia entre el receptor y el emisor. Para ello conectaremos los terminales positivos de los LED (uno de color naranja y el otro azul),  a dos salidas digitales de Arduino (pines digitales  3 y 4 respectivamente), conectando los terminales negativos de los LED a GND de Arduino a través de resistencias de 220Ω para limitar la corriente de salida y no quemarles. Aunque yo he realizado un pequeño PCB para la conexión de los LED y las resistencias, no es necesario puesto que podemos conectarlos directamente en una Protoboard. Por otro lado el terminal positivo del altavoz lo conectaremos a otra salida digital (pin digital 5) y el terminal negativo como siempre a GND. Para mayor información sobre la instalación y funcionamiento de esta alarma de seguridad láser, deberemos repasar los comentarios realizados en el programa que tenemos listo para descargar en este POST y así poder subirlo a nuestro Arduino a través del mismo IDE que el fabricante nos ofrece como herramienta de programación de la tarjeta.



Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Módulo emisor láser.

·         Módulo receptor láser.

·         2 LED de 5mm (Azul y naranja).

·         2 Resistencias de 220Ω.

·         Mini-altavoz de 8Ω (ABS-210-RC).

·         Cartón (para la estructura).

·         Silicona o pegamento de contacto.

·         Protoboard.

·         Cables de conexión.



Código del programa:



 
Video:

miércoles, 22 de junio de 2016

Panel luminoso de Matrices LED 8x8 con driver MAX7219


En este tutorial aprenderemos a controlar las matrices LED de 8×8 con Arduino, en concreto vamos a usar los módulos que llevan el driver MAX7219, y para controlarlos utilizaremos la librería “MaxMatrix.h”, que nos facilitarán enormemente el trabajo. Lo que haremos en cuestión, será mostrar un mensaje en forma de texto que se va a desplazar de derecha a izquierda (Scroll horizontal) a través de las 4 matrices LED 8x8 que conectaremos en cascada, repitiéndose constantemente. 

La Matriz LED de 8×8, está compuesta por 64 LED de 3mm, en color rojo. Internamente los LED, están montados con cátodo común dentro de un encapsulado sólido de fibra de vidrio para protegerles. Algunas de las principales características de las matrices LED 8x8 se describen a continuación: 

·         Voltaje de Trabajo: 4.7 -5.3 V
·         Tensión típica: 5 V
·         Consumo de corriente: 320mA
·         Corriente de trabajo máxima: 2A
·         Temperatura: 0 -50 °C
·         Temperatura de trabajo: 25 

El driver MAX7219 (de Maxim) que contiene cada módulo,  sirven para implementar una interfaz  SPI (Serial Peripheral Interface, que es básicamente un bus de comunicación a nivel de circuitos integrados en el que la transmisión de datos se realiza en serie, es decir un bit después de otro) en cada uno de ellos,  para que se puedan comunicar con nuestro Arduino exclusivamente por medio de 3 pines digitales de salida (DIN, CS y CLK), además de dos pines para la alimentación (+5V) y la masa (GND). A continuación se detallan sus principales características: 

·        Entrada y salida en serie, para necesitar menos pines.
·        Controla displays de 7 segmentos de hasta 8 dígitos, Bar graph displays (Barras de LED) y Matrices de 8×8 o de hasta 64 LED individuales.
·        Solo requiere una resistencia externa para los 64 LED.
·        Incluye decodificador BCD (No hay necesidad de dibujar matrices de caracteres, las lleva incluidas. Mayúsculas, minúsculas y hasta números y signos).
·        Se encarga del multiplexado de los caracteres y dígitos.
·        Incluye memoria de los caracteres.
·        Es compatible con interfaz SPI y QSPI.

Para conectar en cascada las 4 matrices LED 8x8 con driver MAX7219 (aunque por este método podríamos conectar hasta 8), que nos van a hacer falta para desarrollar este proyecto, es imprescindible conectar a nuestro Arduino la matriz LED 8x8 que se encuentra más a la derecha de todas, teniendo en cuenta que el mensaje de texto se va a mover hacia la izquierda. A continuación se muestra la relación de los pines a conectar:

Correspondencia de los pines entre nuestro Arduino y el driver MAX7219

Posteriormente necesitamos conectar las salidas del módulo situado más a la derecha (CLK, CS, DOUT, GND y VCC) a las entradas del siguiente (CLK, CS, DIN, GND y VCC) y así sucesivamente con los restantes módulos, hasta llegar al que esté situado más a la izquierda, el cual no necesita que sus salidas estén conectadas. Como en las matrices LED 8x8 con driver MAX7219 viene rotulado en la parte inferior la función de cada pin y cuales son de salida y cuáles de entrada, solo necesitaremos un poco de paciencia para poder realizar correctamente las conexiones. Un pequeño detalle a tener en cuenta es que el pin “DIN” es el correspondiente a la entrada de datos y el pin “DOUT” es el correspondiente a la salida de datos, con lo que tenemos una referencia a mayores para poder distinguir que grupo de pines son de entrada y cuáles de salida.


Conexión de las 4 matrices LED 8x8 con driver MAX7219

Cabe aclarar que debido a la existencia de infinidad de fabricantes de este tipo de módulos, nos podemos encontrar con el problema de que al adquirirlos, nos vengan sin soldar o que no tengan terminales de conexión en sus pines de E/S, por lo que tendremos que ingeniárnoslas para realizar las conexiones entre los módulos mediante pequeños cablecitos, un soldador, estaño y bastante paciencia, ya que precisamente es lo que a mí me ocurrió al adquirirlos a muy bajo precio en “China”, aunque viendo los resultados obtenidos, merece la pena ahorrarse un dinero aunque tengamos que desempolvar nuestras herramientas de soldadura.

Diferentes versiones de matriz LED 8x8 con driver MAX7219

Por último os comento que dentro de la programación podremos cambiar tanto el mensaje o mensajes de texto que queráis mostrar, como el brillo de los LEDS (si alimentamos el panel luminoso a través de nuestro Arduino es recomendable que esté en el nivel 1 para evitar fallos al subir el programa), el número de módulos conectados en cascada (máximo 8) o incluso la velocidad con la que se va a desplazar el texto, aunque para poder realizar todo esto es necesario recurrir al código del programa donde deberemos modificar las líneas de código necesarias, aunque no os preocupéis porque el código está comentado al detalle. Es muy importante subir el programa a nuestro Arduino sin tener alimentado el panel luminoso (pines +5V y GND), puesto que teniendo en cuenta que cada matriz LED 8x8 tiene un consumo aproximado de 350mA tendríamos un consumo total de unos 1400mA, un consumo excesivamente elevado para la salida USB de nuestro PC, lo que hará que al intentar subir el programa a nuestro Arduino, el puerto serie se nos desconecte dándonos un error en el IDE de Arduino. Después de subir el programa conectaremos nuevamente la alimentación del panel luminoso y procederemos a resetear nuestro Arduino para que los mensajes comiencen a deslizarse de derecha a izquierda a través de las matrices LED 8x8. (Es muy recomendable alimentar el panel luminoso con una fuente de alimentación de 5VDC para que esto no suceda).




Lista de Materiales:

·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         4 Matrices LED 8x8 con driver MAX7219.

·         Soldador de 30W y estaño (en el caso de que sea necesario).

·         Fuente de alimentación de 5VDC/3000mA (opcional).

·         Protoboard.

·         Cables de conexión.



Código del programa:





Video:

miércoles, 8 de junio de 2016

Monedero electrónico con display LCD 1602


Hoy os traigo un sencillísimo monedero electrónico, que dotaremos de un display LCD 1602 con comunicación I2C,  para que a través de este, Arduino nos muestre el número de créditos o monedas que vamos insertando a través de la ranura que el monedero electrónico tiene. Tomaremos como moneda de referencia la de 50 céntimos de Euro, aunque podría ser cualquier otra, por lo que si insertamos cualquier moneda diferente, esta será rechazada por el monedero electrónico y por lo tanto no se tendrá en cuenta un nuevo crédito. Además este pequeño sistema está dotado de un pulsador, mediante el cual, seremos capaces de bajar un crédito del contador de créditos que muestra el display LCD 1602, cada vez que lo pulsemos.

Monedero Electrónico

Una de las grandes ventajas de este monedero electrónico, es que rechaza las monedas falsas, monedas dobladas y arandelas, además de tener gran precisión cuando tiene que diferenciar dos monedas de tamaño muy similar pero de diferente denominación. Requiere de una fuente de alimentación regulada de 12VDC para su funcionamiento, es decir, para que su circuitería interna y el solenoide estén correctamente alimentados (Pines +12VDC y GND). El monedero nos entregará un pulso eléctrico de unos 2-3VDC a través de su pin “COIN”, cada vez que insertemos una moneda correcta en su interior, y será el encargado de habilitar la interrupción INT0 (pin digital 2) en nuestro Arduino. Este monedero también está dotado de un pin de salida denominado “COUNTER” que se encarga de enviar un pulso, que pueda ser leído por un contador electrónico externo, cada vez que insertamos la moneda correcta, aunque en este POST no lo vamos a utilizar. Mediante el interruptor NC/NO podemos seleccionar en qué niveles lógicos va a trabajar el pulso de salida del monedero, es decir, o estado normalmente abierto (NO) o normalmente cerrado (NC).  Si seleccionamos NO el monedero cuando está en espera se mantiene todo el tiempo entregando un voltaje en su salida (ALTO). Al momento que recibe una moneda correcta, el monedero corta el voltaje momentáneamente (BAJO) y vuelve a su estado NO en el que entrega voltaje (ALTO). De lo contrario si seleccionamos NC el monedero cuando está en espera, se encuentra en estado cerrado (BAJO) y no entrega ningún voltaje o pulso. Al momento de recibir una moneda correcta, entrega un pulso (ALTO) y luego vuelve a su estado NC, en el que no entrega ningún voltaje (BAJO).


Alimentación, salidas e interruptor de niveles lógicos

Este monedero puede ser configurado instantáneamente para aceptar prácticamente cualquier denominación de moneda al tiempo que rechaza todas los demás. La configuración para la aceptación de las monedas se establece mediante la inserción de una denominación de la moneda en un espacio llamado “CUNA”, que es donde yo he insertado la moneda de 50 céntimos de Euro.

Cuna del monedero electrónico

También, mediante otro interruptor, podemos seleccionar  la velocidad correcta de aceptación de la moneda, en definitiva, la velocidad del pulso de salida (pin COIN). Esta velocidad de pulso se encuentra entre los 100 milisegundos (SLOW/ velocidad lenta / pulso largo), 50 milisegundos (MEDIUM / velocidad media / pulso medio) y 30 milisegundos (FAST / velocidad rápida / Pulso corto). En lo personal siempre trabajo con 100 milisegundos (SLOW), ya que tras varias pruebas es la velocidad más correcta para trabajar con nuestro Arduino.

Interruptor para las velocidades del pulso

Con el potenciómetro de la parte superior del monedero, se ajusta la tolerancia de aceptación de monedas, para una aceptación más o menos estricta (STRICT / más estricta o SLACK / menos estricta).
Potenciómetro de aceptación de monedas

El funcionamiento del programa es muy simple, es decir, vamos a utilizar la interrupción 0 de Arduino (INT 0), que es la que se va a producir a través del pin digital 2 de Arduino, al que le hemos conectado la señal “COIN” del monedero electrónico, por lo tanto, cada vez que se detecte en el monedero una moneda de 50 céntimos de Euro, este manda una señal de nivel alto (HIGH) a Arduino, para que se produzca la interrupción del sistema y se ejecute la Rutina de Servicio a la Interrupción (ISR) que es donde tenemos programado que se incremente en una unidad la cantidad de créditos. Por otro lado si presionamos el pulsador con conexión PULL-DOWN, es decir, cambia de nivel bajo (LOW) a alto (HIGH) cada vez que lo pulsemos (aunque a estas alturas ya hemos trabajado multitud de veces con este recurso) para disminuir en una unidad el número de créditos. Como el programa está refrescando constantemente los valores del display LCD 1602, en todo momento tendremos un valor actualizado de los créditos con los que contamos. Por último cabe decir que el display LCD 1602 le hemos conectado a nuestro Arduino a través de comunicación I2C, soldándole a sus pines el módulo LCM 1602 I2C V1 como ya hemos visto también en POST anteriores.



Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Monedero electrónico simple (marca SG).

·         Módulo LCM 1602 I2C V1.

·         Display 16x2 LCD 1602.

·         Pulsador.

·         Resistencia de 10KΩ.

·         Fuente de alimentación regulada de 12VDC.

·         Monedas de EURO de diferente denominación.

·         Protoboard.

·         Cables de conexión.



Código del programa:



Video:

jueves, 2 de junio de 2016

Balanza digital de hasta 20Kg con celda de carga y transmisor HX711


En el POST de hoy vamos a trabajar con una celda de carga de 20Kg,  un transmisor de celda de carga HX711, un display LCD 1602, frecuentemente utilizado a lo largo de todo el BLOG y por último una estructura que fabricaremos en “DM”, que no es más que un tipo de aglomerado de madera muy resistente, para crear una precisa y práctica balanza digital capaz de pesar elementos de hasta 20Kg. Para comenzar este proyecto es muy interesante conocer que es y para que se utiliza la celda de carga,  además de ver por qué es necesario utilizar un transmisor de celda de carga HX711 para comunicar la celda de carga con nuestro Arduino y que mediante el mismo podamos interpretar las señales eléctricas recibidas para mostrar a través del LCD 1602 el peso real de los elementos que nos interesen.
Una celda de carga es un transductor utilizado para convertir una fuerza en una señal eléctrica. Esta conversión empieza a partir de un dispositivo mecánico, es decir, la fuerza que se desea medir, deforma la galga extensiométrica y por medio de medidores de deformación, que son pequeños patrones de resistencias utilizados como indicadores de tensión, obtenemos una señal eléctrica con la cual podemos obtener el valor de la fuerza. Los medidores están unidos a la viga que se deforma cuando se aplica peso, a su vez, deformando el indicador de tensión. Cuando se deforma el medidor de deformación la resistencia eléctrica cambia en proporción a la carga. Esto se logra por medio de un puente de Wheastone, el cual se utiliza para medir  resistencias desconocidas mediante el equilibrio de “brazos” del puente. Estos están construidos por cuatro resistencias que forman un circuito cerrado. En el caso de las celdas de carga las resistencias son los medidores de deformación. La celda de carga es ideal para poder medir variaciones sobre presión en una superficie o como simple transductor para medir un peso de algún elemento en contacto con el dispositivo, como es en nuestro caso. En este POST utilizaremos una celda de carga de 20Kg que es el valor máximo que podrá pesar nuestra balanza digital.

Celda de carga de 20Kg

El transmisor de celda de carga HX711 es una interface entre la celda de carga y nuestro Arduino, permitiendo poder leer el peso de manera sencilla. Internamente se encarga de la lectura del puente de Wheastone formado por los medidores de deformación de la celda de carga, convirtiendo la lectura analógica en digital con su conversor A/D interno de 24 bits. La comunicación con nuestro Arduino se realiza a través de los pines SCK (Reloj) y DT (Datos) que el transmisor de celda de carga HX711 tiene como SALIDAS. 

Transmisor de celda de carga HX711


Por otra parte las ENTRADAS del transmisor de celda de carga HX711 van cableadas a la celda de carga de la siguiente manera:


       -          Pin E+ del transmisor HX711 à Cable Rojo de la celda de carga de 20Kg.
-          Pin E- del transmisor HX711 à Cable Negro de la celda de carga de 20Kg.
-          Pin A- del transmisor HX711 à Cable Blanco de la celda de carga de 20Kg.
-          Pin A+ del transmisor HX711 à Cable Verde de la celda de carga de 20Kg.


Como se ha mencionado con anterioridad, toda la estructura de la balanza digital está fabricada en “DM”, que es un aglomerado elaborado con fibras de madera aglutinadas con resinas sintéticas mediante fuerte presión y calor, en seco, hasta alcanzar una densidad media, ideal para resistir grandes esfuerzos con un espesor reducido. Cabe decir que las uniones realizadas entre las tablas de DM o entre la celda de carga y las tablas de DM se realizan mediante tirafondos de 3mm de diámetro en diferentes longitudes y cabeza plana, además de aplicar adhesivo de contacto de secado rápido en todas las superficies a unir. Como se puede observar en la siguiente imagen, la celda de carga está dotada de una parte hueca (parte central de la celda de carga), que tiene que quedar en suspensión para su correcto funcionamiento, además hay que tener en cuenta que el sentido de la flecha indica la dirección de la fuerza o peso a aplicar a la hora de instalar la celda de carga dentro de la estructura de DM.

Despiece y montaje de la estructura de la balanza digital


Para programar correctamente nuestro Arduino y poder visualizar el peso real de los elementos que nos interesen a través del LCD 1602, lo primero que tenemos que hacer es cargar el programa llamado “Balanza_digital_calibrado.ino” para calibrar la balanza digital, que consiste básicamente en hallar el valor de la escala que se usará, es decir, hallar el factor de conversión para convertir el valor de lectura en un valor con unidades de peso. La escala es diferente para cada celda y cambia de acuerdo a la forma de instalar, al peso máximo o modelo de celda de carga, incluso así se trate del mismo modelo de celdas no necesariamente tienen el mismo valor de escala. Primero necesitamos conseguir un objeto con un peso conocido, en otras palabras, debemos saber el peso real del objeto que vamos a poner sobre la balanza digital. Se recomienda que el peso conocido sea cercano al valor máximo del rango de trabajo de la celda de carga. En nuestro caso usaremos un peso de 8Kg pues nuestra celda es de 20Kg, y por mi casa no he encontrado un peso conocido mayor.


Después de poner el peso en la balanza, a través del monitor serial se mostraran las lecturas del peso, son lecturas sin escalar, por lo que les deben aparecer números grandes. Muy importante es que el programa comience a funcionar sin el peso colocado en la balanza digital, pues al inicio de programa se calcula la tara. Posteriormente tendremos que abrir el monitor serie del IDE de Arduino, esperaremos a que el programa reste la tara, para finalmente poner el objeto de 8Kg (o el peso conocido más cercano a 20Kg que encontremos por casa) y así obtener una serie de valores a través del monitor serie.
  
Monitor serie

Con uno o el promedio de estos valores, que en mi caso he utilizado el valor 858000 para redondear, calculamos el valor de la escala que utilizaremos con la siguiente formula:


Fórmula para el cálculo de la ESCALA

Con este dato ya obtenido pasamos a programar el sketch que vamos a utilizar para pesar llamado “Balanza_digital_final.ino”, únicamente tendremos que sustituir la cantidad entre paréntesis de la línea de código  balanza.set_scale(107250) por el valor que hayamos obtenido nosotros, para que la balanza digital nos pese correctamente. Una vez modificado el valor, validaremos y cargaremos el programa en nuestro Arduino. Una vez que se esté ejecutando el programa en nuestro Arduino debemos de esperar unos instantes hasta que se quite la tara, para que posteriormente aparezca a través del LCD 1602 el peso de cualquier elemento que pongamos sobre la balanza digital, siempre y cuando este no exceda de los 20Kg.
Para realizar los dos programas anteriormente mencionados nos ayudaremos de las funciones ya programadas y definidas para trabajar con el transmisor de celda de carga HX711, que vienen incluidas dentro de la librería #include”HX711.h” que os podréis descargar desde uno de los primeros POST de este BLOG. A continuación os muestro una descripción de las principales funciones con las que se trabaja:
·         HX711(byte PinData, byte PinClock): Es el constructor del objeto HX711, se puede trabajar con cualquiera de los pines.
·         void tare(byte n): Establece el peso actual como el peso de tara, n indica el número de lecturas que se realizan para obtener la tara, por defecto n=10;
·         void set_scale(float scale): Establece el valor de la escala, que es el factor de conversión para convertir valor de lectura en un valor con unidades de peso. Por defecto es scale = 1;
·         long read(): Espera hasta que el dispositivo esté listo y devuelve la lectura del ADC del HX711.
·         long read_average(byte n): Realiza n veces la lectura del ADC y devuelve el promedio.
·         double get_value(byte n): Devuelve el valor actual restando el peso de tara. Equivalente a (read_average() - OFFSET) . Si se especifica un valor de n, devuelve el promedio de n lecturas.
·         float get_units(byte n): Devuelve el valor actual restado del peso de tara y dividido por la escala. Es equivalente a (get_value()/SCALE). Si se especifica un valor de n, devuelve el promedio de n lecturas.



Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Celda de carga de 20Kg.

·         Transmisor de celda de carga HX711.

·         Módulo LCM 1602 I2C V1.

·         Display 16x2 LCD 1602.

·         Estructura de la balanza digital:
o   Tablas de DM:
§  1 de 150x200mm, 1 de 60x75mm y 1 de 60x60mm.
o   Tirafondos de cabeza plana:
§  4 de 3x20mm, 2 de 3x25mm y 2 de 3x35mm.
o   Adhesivo de contacto de secado rápido.

·         Protoboard.

·         Cables de conexión.



Código del programa:

·         Balanza_digital_calibrado:




·         Balanza_digital_final:




Video: