Construye un Reloj SMD

Fabricación de un Reloj-Cronómetro-Temperatura, encadenando 4 módulos SMD de 7 segmentos con control serie. El controlador de este reloj está construido a partir del micro controlador AT89S52, con encapsulado TQFP de 44 pines (SMD).

Hora en el display

ESQUEMAS

CPU: Reloj SERIE

Display: Reloj SERIE

Módulo RTC: DS1302

Las comunicaciones entre el micro-controlador y el chip de reloj DS1302 se realizan mediante 3 hilos:

  1. Reloj (SCLK)
  2. Entrada/Salida de datos (I/O)
  3. Habilitación (CE)
Módulo RTC: DS1302
Módulo RTC: DS1302

El módulo RTC ya incluye el cristal de cuarzo que necesita el chip DS1302, y una pila de 3V para mantener sus datos cuando falta la alimentación. La conexión entre este módulo y la CPU es de 5 hilos, 2 de la alimentación y 3 de control.

Comunicaciones con DS1302
Comunicaciones con DS1302

Sensor de temperatura: DS18B20

El control de este sensor de temperatura es bidireccional y se realiza mediante un sólo pin, así su encapsulado sólo tiene 3 pines: VCC, GND y Datos.

Sensor: DS18B20
Sensor: DS18B20

El DS18B20 se puede comprar con encapsulado normal, su aspecto es el de un transistor, o ya montado dentro de una cápsula de acero inoxidable. El encapsulado en acero inoxidable permite sumergir el sensor en líquidos, y también es muy aconsejable para utilizarlo en el exterior.

El chip DS18B20 es un sensor temperatura digital,  su resolución es configurable entre 9 y 12 bits. Por defecto, de fábrica está configurado con 12 bits. A máxima resolución, sus últimos 4 bits se corresponden con las lecturas decimales de: 0,5°/ 0,25° / 0,125° / 0,0625°.  Puedes ver más detalles técnicos de este sensor en el siguiente artículo:

Firmware Reloj LED #2 (Temperatura, Hora de Verano)

FUENTE DE ALIMENTACIÓN

Para alimentar este reloj se necesita una fuente de alimentación de 12 VDC, con una corriente mínima de 200 mA. La solución más barata y eficaz, es incluir dentro de la caja del reloj una pequeña fuente de alimentación conmutada de 12V / 400 mA.

Fuente conmutada 12V

CONFIGURACIÓN

Para cambiar los datos de fecha, hora, cronómetro y el resto de parámetros de configuración, se utilizan dos pulsadores:

  1. MODE
  2. PLUS

Para modificar los datos del reloj, seguir el siguiente diagrama de configuración:

Configuración RELOJ SERIE

SELECCIONAR MODO: RELOJ/CRONÓMETRO

El modo de funcionamiento RELOJ/CRONÓMETRO se determina durante la fase de arranque, mientras se está mostrando en el display  un mensaje de texto rotando, en la que se muestra la versión del firmware. Si no se toca ningún pulsador, el modo de funcionamiento será: RELOJ. Para cambiar a modo CRONÓMETRO en cualquier momento, seguir los siguientes pasos:

  • Pulsar los dos botones a la vez: RESET
  • Cuando aparezca el mensaje rotante, mantener pulsado el botón 1 (MODE)

Cronómetro en el display

Una vez que que hayamos entrado en el modo CRONÓMETRO, ya podremos configurar sus parámetros de funcionamiento. Estos valores se guardarán en el chip de memoria del reloj (DS1302), y estos serán los nuevos valores de arranque del cronómetro. Al igual que sucede con los parámetros del reloj, tendremos que tener conectada la pila de tampón en el chip, si no queremos perder todos los datos cuando falte la alimentación.

Detalles de la presentación del Display

Cuando se está funcionando en modo RELOJ, es posible seleccionar entre 3 tipos de presentación. La información que muestra el display se cambia mediante una breve pulsación del botón 2 (PLUS):

  1. Hora / (*) Alterno: Hora y Temperatura
  2. Temperatura
  3. Alterno: Hora, Fecha y Temperatura

(*) El modo alterno de la presentación 1ª, se muestra en caso de que se active la alarma de temperatura en el menú de configuración. En caso contrario, la presentación 1ª mostrará la hora de forma permanente.

Temperatura en el display

Cuando se active el modo de presentación alterno, la temperatura se mostrará de forma síncrona con el reloj, y lo hará cada 5 segundos. Entre el segundo 5 y el 55 de cada minuto, nunca se mostrará en el segundo ‘0’ de cada minuto. La temperatura sólo aparecerá durante un segundo de cada 5, en total 11 veces en cada minuto.

Alarma de Temperatura

La lectura del sensor de Temperatura se realiza cada 10 segundos. De manera que entre dos presentaciones sucesivas de 5 segundos, sólo una de las lecturas será en tiempo real. Cuando está utilizando la presentación 1ª en modo alterno, los segundos acabados en ‘0’ mostrarán la temperatura leída anteriormente, excepto en el segundo ‘0’ de cada minuto que no se muestra. En el caso de que la temperatura sobrepasara alguno de los dos umbrales de alarma, el aviso acústico se realizará cuando el valor acaba de ser leído. Es decir, la alarma de temperatura sólo sonaría en los segundos acabados en ‘5’.

Alarmas horarias

El reloj permite configurar 2 alarmas horarias, sin prioridad entre ellas pero siguiendo este criterio: Cuando una de las dos alarmas se dispara, mientras permanezca en su periodo activo, la otra alarma nunca podrá dispararse. 

Las dos alarmas horarias pueden valer para los 7 días de la semana, o estar limitadas a los 5 días laborables, quedando inactivas todos los Sábados y Domingos. En modo RELOJ, el punto decimal del dígito de la derecha (esquina inferior derecha del display) esta asociado a la alarma horaria. Las alarmas horarias pueden configurarse para que suenen una sola vez (1 minuto si no se silencia antes) o con repeticiones. Las repeticiones se realizarán cada 5 segundos. Para silenciar el sonido de una alarma, realizar una breve pulsación en el botón 2 (PLUS). Si después de sonar una alarma se quieren anular todas sus repeticiones sin cambiar la configuración del reloj, es necesario pulsar los dos botones a la vez (RESET).

Estados posibles del LED indicador de alarma horaria:

  • APAGADO: No existe ninguna alarma horaria en las próximas 24 horas
  • PARPADEANDO: Existe alguna alarma horaria dentro de las próximas 24 horas.
  • FIJO: Alarma ACTIVA, sonando o dentro del periodo de repetición.

Hora: Verano/Invierno

En algunos países existen dos tipos horarios:

  1. Horario estándar, el que corresponde con el huso horario (Horario de invierno).
  2. Horario de verano:

El cambio de hora se aplica una vez al año, haciendo que del horario estándar (o de invierno) se pase al horario de verano. Aunque la primera vez que se aplicó este cambio de hora fue durante la Primera Guerra Mundial, dejo de aplicarse hasta la crisis del petróleo de 1973. El objetivo es el de aprovechar mejor la luz solar, consumiendo menos electricidad.

Cambios horarios (Invierno/Verano)
Cambios horarios (Invierno/Verano)

HORARIO DE VERANO

Último domingo de MARZO:  A las 2:00 AM  se adelanta a las 3:00 AM

… se adelante 1 hora el reloj

HORARIO DE INVIERNO

Último domingo de OCTUBRE: A las 3:00 AM  se atrasa a las 2:00 AM

… se atrasa 1 hora el reloj

FIRMWARE

El firmware de este reloj se programa una vez montado el micro controlador (AT89S52) en su circuito impreso, a través de su interface de programación serie ICSP. Lo ideal sería utilizar un programador que tuviera dicho interface, pero si no lo tienes, puedes hacerlo con ARDUINO.

Programador ICSP con ARDUINO

El archivo que necesitas para programar este reloj (firmware), lo puedes descargar de forma gratuita desde el siguiente enlace:

J_RPM_v1_RELOJ_SERIE.HEX

FABRICAR LA CAJA CON UNA CNC

Archivos para cortar la madera tipo DM de 10 mm, en una CNC, y fabricar la caja de este reloj:

Caja_CNC_RELOJ_.zip

Piezas cortadas para montar la caja

CIRCUITOS IMPRESOS (PCB)

Archivos GERBER para fabricar el PCB de la CPU:

PCB_CPU_RELOJ.zip

PCB: CPU del Reloj SERIE

Archivos GERBER para fabricar el PCB de la CPU (v2):

PCB_CPU2.zip

PCB: CPU del Reloj SERIE (Modificada)

En esta versión se corrige el tamaño de los taladros, se incluye la posibilidad de utilizar dos tipos de conector en sus salidas y se añade una toma auxiliar de +5V

Archivos GERBER para fabricar el PCB del Display ( 1 dígito de 7 segmentos):

PCB_Display_RELOJ.zip

PCB: Display 7 segmentos serie

Si quieres ver los detalles de fabricación, configuración y puesta en marcha de este reloj, echa un vistazo al siguiente video:

 

Vúmetro RGB con ARDUINO

Construcción de un vúmetro LED RGB, controlado por Arduino. Este montaje consiste en un par de tiras RGB de un metro, con 30 LED SMD de tipo inteligente (WS2812) cada una. Este tipo de diodos incluye en su interior su propio controlador. Los diodos WS2812 disponen de una entrada de datos, la salida y los dos pines de alimentación. La información se transmite en serie, desplazando los datos de un pixel hacia el siguiente, y cada pixel utiliza 24 bit de información… 8 bit por cada color (RGB). El control de este vúmetro LED se realiza con Arduino. Micrófono amplificadoEl sonido se capta mediante un micrófono amplificado, de manera que no es necesario realizar ninguna conexión eléctrica entre el reproductor de audio y el vúmetro. Para facilitar el uso de este vúmetro en cualquier lugar, la alimentación de 5V se suministra con el módulo ‘Step Down-ConverterMP1584. De esta manera es posible alimentar este vúmetro con cualquier alimentador de continua, entre 6 y 28 voltios. Así podría utilizarse también dentro del coche, alimentado desde los 12V de la batería, y mostrar los efectos luminosos al ritmo del sonido del auto radio.

Tiras LED WS2812

Existen varios tipos de tiras LED RGB, pudiendo elegir la separación entre diodos y el grado de protección IP. Cuanto mayor sea el número de diodos LED por metro, mejor será el efecto luminoso que se pretenda mostrar (mayor resolución y brillo), pero el consumo también será mayor. Dependiendo del lugar donde se vayan a instalar las tiras LED, podremos elegir un grado de protección IP. El acabado IP67 permite utilizar estas tiras LED a la intemperie, protegiendo todos sus componentes electrónicos contra el agua y el polvo. Los consumos que se muestran en la tabla siguiente, son consumos máximos (cuando se encienden los tres colores de cada pixel a máximo brillo).

Las tiras LED WS2812 necesitan 3 hilos de conexión, 2 para la alimentación y 1 para datos. Las tiras LED se pueden cortar al tamaño que se necesite, y también se pueden ampliar juntando la salida de una de ellas con la entrada de otra. Cuando se vayan a utilizar tiras de gran tamaño, es importante conectar los hilos de alimentación con cable en varios puntos. Así se evitará la caída de tensión a lo largo de la línea, lo que provocaría un cambio de color y brillo sobre el color que se pretenda mostrar.

Conexiones tiras WS812

Descripción del circuito

Este vúmetro LED no necesita una conexión eléctrica con la fuente de sonido, facilitando así su uso y pudiendo mostrar efectos luminosos al ritmo del sonido de una sala, dentro de un coche, etc.. El sonido se capta por un micrófono de tipo ‘Electret‘, el cual se amplifica con un operacional, hasta conseguir el nivel necesario para excitar la entrada analógica del micro-controlador de Arduino ATMEGA328P .

En el esquema se muestra el montaje del micrófono y el amplificador operacional, pero también podría utilizarse un módulo SMD ya montado, el cuál se vende para el uso con Arduino, y conectar su salida de audio con la entrada A0 de Arduino. Para facilitar el uso de este vúmetro en cualquier lugar, la alimentación de 5V se suministra con el módulo ‘Step Down-ConverterMP1584.

Construcción del vúmetro

El circuito de control del vúmetro lo he montado en una placa de circuito impreso de tipo universal.

CPU: Vúmetro RGB

Posteriormente fabriqué una caja con metacrilato, haciendo la serigrafía con la CNC.

Vúmetro RGB: Módulo de control

A continuación se muestra el vúmetro LED funcionando.

Vúmetro RGB en pruebas

Firmware ARDUINO

El código de Arduino que he utilizado para este proyecto lo conseguí como un comentario en Internet. No conozco el autor del código, y por eso no figura su nombre en la cabecera. Este código, junto con la librería de control necesaria para el WS2812, se puede descargar desde el siguiente enlace: Vúmetro RGB

Baliza RGB con ARDUINO

Construcción de una baliza LED RGB, controlada por Arduino. Este montaje consiste en un anillo formado por 16 LED SMD de tipo inteligente (WS2812). Este tipo de diodos incluye en su interior su propio controlador. Los diodos WS2812 disponen de una entrada de datos, la salida y los dos pines de alimentación. La información se transmite en serie, desplazando los datos de un pixel hacia el siguiente, y cada pixel utiliza 24 bit de información… 8 bit por cada color (RGB). El control de este anillo LED se realiza de forma muy sencilla, ya que Arduino dispone de unas librerías específicas para su control y además ejemplos.

Pruebas de la baliza RGB

Esquema de montaje

El esquema de montaje es muy simple, porque este módulo se controla con un solo hilo. El montaje lo podríamos realizar utilizando una placa de desarrollo de Arduino, pero es mucho más barato montar los componentes necesarios y el micro-controlador ATMEGA328P,  una vez programado, en un circuito impreso adicional.

Esquema: Baliza RGB

A continuación se puede ver el montaje del módulo de control de esta baliza RGB, utilizando un circuito impreso de tipo universal.

CPU: Baliza RGB

Montaje: Baliza RGB

Sellado de la baliza RGB

Con el fin de poder utilizar esta baliza en la intemperie, se rellena con adhesivo termo-fundible las dos placas de circuito impreso (CPU y anillo LED).  La zona central se oscurece con pintura de color negro mate en spray. El anillo LED se protege también con el mismo adhesivo, pero sin pintarlo.

Sellado de la baliza RGB

Alimentación

Esta baliza LED RGB se alimenta con 5V. El  consumo podría ser elevado, porque cada diodo LED consumo 20 mA. a máximo brillo. Si multiplicamos esos 20 mA por los 3 diodos que contiene cada pixel RGB y luego por los 16 pixeles que contiene este anillo, podríamos tener un consumo máximo de 20x3x16 =  960 mA. Este consumo nunca lo alcanzaremos, porque esta baliza produce efectos luminosos cambiando colores, y nunca estarán todos los diodos LED encendidos a máximo brillo y al mismo tiempo. No obstante, es conveniente alimentarlo con una batería externa recargable de 5 V, más conocida como Power Bank. De esta forma dispondremos de mayor autonomía, y sólo tenemos que soldar un conector USB tipo ‘A’ en el extremo del cable de alimentación. El encendido de la baliza lo realizaremos conectando el conector USB en el Power Bank, de esta manera no es necesario intercalar un interruptor.

Conexión: USB tipo A

La librería y los ejemplos que he utilizado para realizar este proyecto, se pueden descargar desde el siguiente enlace:

https://github.com/adafruit/Adafruit_NeoPixel

Bingo electrónico

Construcción de un Bingo electrónico, fabricando una matriz con 90 diodos LED de forma artesana (sin circuito impreso). Este montaje es muy adecuado para que lo pueda realizar cualquier aficionado a la electrónica.  El Bingo electrónico está construido a partir del micro-controlador AT89S52.

En la primera parte del video se muestra la fabricación de la matriz, en una carcasa de fibra plástica, y se fresan con una CNC los números en una lámina de plexiglás (PMMA) semitransparente.

En la segunda parte del video se analiza el esquema eléctrico, realizando la construcción de la lógica de control y la comprobación de funcionamiento. También se explica el sistema de multiplexación, midiendo las formas de onda con el osciloscopio. Al final, se realiza la construcción del frontal con serigrafía, y se construye una caja utilizando madera reciclada.

MULTIPLEXACIÓN

En la imagen siguiente se muestra el mapa de memoria del Bingo, necesaria para almacenar y mostrar en la matriz LED los números que van saliendo.

Mapa de memoria

La información de los 90 números del Bingo se almacena en 12 Bytes RAM del micro-controlador (12 Bytes X 8 Bit = 96). El Bit menos significativo  (LSB) del primer Byte contiene el  estado del número 1 del Bingo (LED: On/Off). El Bit más significativo del Byte 11 contiene el estado del número 88; y del Byte 12 de la memoria sólo se utilizan los 2 Bit menos significativos, asignados a los números 89 y 90 del Bingo.

Para mostrar toda la información del Bingo en el panel frontal, es necesario multiplexar en el dominio del tiempo 11 informaciones diferentes: las 9 líneas del panel numérico + 2 para el display de 7 segmentos. Como las líneas van conectadas a los ánodos de los diodos LED, el micro-controlador tiene que habilitar de forma secuencial y cíclica cada una de las 11 líneas de control, generando un impulso positivo en cada instante. Como se puede ver en el mapa de memoria, las 8 primeras líneas van conectadas al puerto 2 del AT89S52, la 9ª línea al P3.6, la 10ª línea al P1.1 y la 11ª al P1.0.

Multiplexado
Frecuencia de refresco

En este oscilograma se muestra la forma de onda de una de las 9 líneas de control del panel numérico. Con esta medida podemos conocer el tiempo que está encendido cada diodo LED (237 uSeg) y su velocidad de encendido = frecuencia de refresco (311 Hz). La frecuencia de refresco tiene que ser superior a la persistencia del ojo humano, procurando siempre que esta velocidad sea lo más alta posible, con el fin de evitar el efecto parpadeo o estroboscópico, al mezclarse dos fuentes de luz de frecuencia diferente.

¿Cómo se genera el número?

La generación del número aleatorio se basa en el modo de funcionamiento del sistema mecánico, mediante la extracción de una bola numerada del bombo. En un Bingo tradicional (mecánico), al principio hay 90 bolas numeradas dentro del bombo, y en cada extracción el número de bolas va disminuyendo de una en una.

En este Bingo electrónico, la generación del número se hace siguiendo estos pasos:

  • El micro-controlador utiliza un contador (Timer) que modifica su valor a una velocidad de 2 millones de valores por segundo aproximadamente (0,5 uSeg).
  • El valor del número máximo de este contador se limita en función a la cantidad de números que faltan por salir en el Bingo. Al principio el número máximo es 90 y va decreciendo a medida que se van extrayendo los números (igual que el número de bolas de un bombo mecánico).
  • En el momento que se pulsa el botón, el micro-controlador toma el valor del número generado por el contador, y este valor lo asigna al ‘hueco libre’ que queda en la tabla de números que faltan por salir.
  • Con ese valor, el micro-controlador busca el ‘hueco libre’ dentro de la tabla de números, empezando desde el número 1 hasta el 90, y luego asigna esta posición de ‘hueco libre’ al número real… ocupando el hueco y mostrando el número real en el display de 7 segmentos

De esta manera, las probabilidades de salir un número determinado son las mismas que en un bombo mecánico (es totalmente aleatorio). Por otra parte, se evita la generación de números ya extraídos.

Circuito de control (CPU)

Esquema BINGO

Siguiendo el esquema es muy fácil montar todos los componentes en una placa de circuito impreso de tipo universal (taladros sin conexiones). Las conexiones se pueden realizar por debajo, creando las pistas del circuito con hilo fino de cobre y estaño. Si se colocan bien los componentes, las conexiones estarán muy próximas y no será necesario realizar puentes para atravesar las pistas. Una vez finalizado el montaje, el micro-controlador AT89S52 se puede programar directamente en la placa, utilizando las conexiones ICSP que se muestran en el esquema.

El firmware de este Bingo se puede descargar de forma gratuita desde el siguiente enlace: J_RPM_v1_BINGO.HEX

Si no dispones de un programador, podrías utilizar Arduino para hacerlo:

Programador ICSP con ARDUINO

ARDUINO: Nivel de dos ejes

ARDUINO: Nivel de dos ejes – Construcción de un nivel electrónico de dos ejes, con ARDUINO y MPU-6050. Leyendo los valores que entregan los giróscopos de ambos ejes del MPU-6050, cuya resolución es de 14 bit para los 180º de cada eje. Posteriormente se calibran los valores con un inclinómetro de burbuja, obteniendo una precisión media mejor de 5º. Al mostrar la inclinación de ambos ejes de forma simultánea, este medidor puede ser muy útil para orientar paneles solares, antenas parabólicas, cubiertas de tejados, etc.

Inclinómetro
Inclinómetro

Giróscopo y acelerómetro: MPU-6050

Chip: MPU-60X0
Chip: MPU-60X0
MPU-6050
Módulo: MPU-6050

La construcción de este medidor de ángulos de 2 ejes, puede realizarse sin la necesidad de utilizar el módulo ARDUINO Uno. Aparte del módulo MPU-6050, sólo sería necesario extraer el micro-controlador ATMEGA328P (una vez programado) y montarlo en un circuito impreso aparte. Para realizar este montaje, además del micro-controlador se necesitan algunos componentes más para que el dispositivo funcione. A continuación se muestra un esquema de montaje, en el que se incluye también un circuito de alimentación, compuesto por una batería de Li-ion, junto con su módulo de carga TP4056 y un módulo Step-Up de 5v.

El código de programación para este montaje puede descargarse desde el siguiente enlace (es el denominado): Angulos.ino 

Esquema: Nivel de 2 ejes

Si se quisiera utilizar un medidor con más prestaciones, se podría añadir a este circuito el módulo BMP280, el cual incluye un sensor barométrico y un sensor de temperatura. De esta manera, el medidor podría disponer de dos funciones:

  1. Medidor de nivel de 2 ejes
  2. Altímetro barométrico + temperatura

El código de programación para este montaje puede descargarse desde el siguiente enlace (es el denominado): Alti_Nivel.ino 

Esquema: Altímetro y Nivel

Puede ver más detalles de este montaje en el siguiente video:

Programador ICSP con ARDUINO

Construcción de un programador serie (ICSP) utilizando Arduino. Si no disponemos de un programador, esta es la solución más barata. Sin embargo, tanto el código de Arduino como el software de programación, son específicos para programar el micro-controlador AT89S51/AT89S52… y no sirven para programar cualquier otro modelo.

AT89S52
AT89S52

FICHEROS

En la página del autor del proyecto: TIKTAK’S PROJECTS , encontrarás además de la información de este proyecto, el link de acceso directo a la descarga de los archivos que necesitas. El fichero que debes cargar a tu Arduino para que funcione como programador, y el programa que necesitarás para exportar el archivo hexadecimal (firmware) hacia el micro-controlador AT89S51/AT89S52.

INFORMACIÓN

He creído conveniente incorporar esta información en el blog, con el fin de ampliar un poco más los detalles de funcionamiento de este programador, y también porque en este canal tenéis otros proyectos en los que se utiliza el mismo tipo de micro-controlador. Si eres aficionado a la electrónica y no dispones de un programador, este montaje te podría ser de mucha utilidad.

Montaje ICSP
Montaje ICSP

Si quieres fabricarte un programador ICSP (In-Circuit Serial Programming) , solo necesitarás una placa de Arduino -no importa el modelo- y montar el circuito que se muestra a continuación:

Esquema ICSP
Esquema ICSP

El ejemplo siguiente muestra cómo puedes programar un circuito, en el que ya existe una entrada para su programación en serie:

  •  ISP (In-system programming) 
  • ICSP (In-Circuit Serial Programming)
Programador ICSP
Programador ICSP

INCONVENIENTES

Existen algunas limitaciones y desventajas si comparamos este programador con otro de tipo convencional. La primera y más importante, es que el software NO permite verificar la integridad de lo que se ha grabado. Si existiera algún error durante la escritura, el software no lo detectaría. En estos casos, lo normal es que el dispositivo programado no llegara a funcionar, pero dependiendo del tipo de error, podría funcionar de manera defectuosa.

La segunda no es tan importante, pero ha tardado 4 minutos en programar los 6.813 bytes del fichero con el que he realizado las pruebas. Con un programador convencional  el proceso completo: borrado, escritura y comprobación, se realiza en algo menos de 13 segundos.

ARDUINO: Altímetro barométrico

Construcción de un altímetro barométrico electrónico, con Arduino. La presión atmosférica: principios, unidades de medida, relación altura/presión, sistemas de medida, etc. Se utiliza el módulo BMP280, que incluye un sensor de presión piezo-resistivo de alta precisión y bajo consumo (2,7 uA / 1Hz), además de un sensor de temperatura. Descripción del código de programación con Arduino y sus librerías de control. Montaje del altímetro en una placa de circuito impreso independiente del módulo Arduino, con alimentación a baterías y módulo de carga.

Presión atmosférica

La presión atmosférica es la fuerza por unidad de área que ejerce el aire sobre la superficie terrestre, la cual está asociada a los cambios meteorológicos. La altura modifica tanto la temperatura como la presión atmosférica. La presión atmosférica disminuye con la altitud y la humedad, ya que el peso de la masa del aire disminuye.

Los primeros barómetros fueron construidos por el físico y matemático italiano Evangelista Torricelli en el siglo XVII. La presión atmosférica equivale a la altura de una columna de agua de unos 10,33 m de altura. En los barómetros de mercurio, cuya densidad es unas 13,5 veces mayor que la del agua, la columna de mercurio sostenida por la presión atmosférica al nivel del mar es de unos 76 cm.

Barómetro
Barómetro

 La presión atmosférica normalizada, 1 atmósfera, fue definida como la presión atmosférica media al nivel del mar, que se adoptó como exactamente 101.325 Pa / 1013,25 hPa / 760 Torr. (equivalente al peso de 10,33 m de agua)

Normalmente la presión atmosférica se da en milibares, y la presión normal al nivel del mar se considera igual a 1013,25 milibares. En unidades del Sistema Internacional de Unidades, la presión se mide en pascales, aunque cuando se trata de presión atmosférica se suele utilizar el hectopascal, equivalente al milibar (1 mbar = 1 hPa).

Foto_5

  • 1 bar = 100.000 Pa = 1000 hPa = 100 kPa = 100 kN/m2 = 1,01972 kgf/cm2
  • 1 bar = 14,5037738 PSI(= libras/pulgada2 = lb/in2)
  • 1 bar = 750,062 mmHg(Torr)
  • 1 bar = 0,9869 atm
  • 1 atm = 101.325 Pa = 1,01325 bar
  • 1 atm = 760 mmHg (Torr)
  • 1 mmHg = 133,28947379 Pa

El kilopascal (kPa) es una unidad de presión que equivale a 1.000 pascales. El hectopascal (hPa) es una unidad de presión que equivale a 100 pascales y es usado por su equivalencia con el milibar.

 Sensor de presión BMP280

El módulo BMP280 contiene un sensor de presión piezo-resistivo de alta precisión y bajo consumo  (2,7 uA / 1Hz), además de un sensor de temperatura.

Sensor: BMP280
Sensor: BMP280
  • Resolución: 0,0016 hPa / 0.01ºC
  • Interface: SPI / I2C
  • Dirección I2C:  76H (SDO: 0) / 77H (SDO: 1)
  • Rango de presión:   300…1100 hPa / +9000 … -500 metros sobre el nivel del mar
  • Precisión: +- 0,12 hPa / +- 1m.

Construcción de un altímetro con ARDUINO

Altímetro (esquema)
Altímetro (esquema)

El código de programación de Arduino, junto con las librerías necesarias para realizar este proyecto, se pueden descargar de forma gratuita desde el siguiente enlace: BMP280.zip

Medir las revoluciones R.P.M.

Medir las revoluciones de giro de un motor en un display LCD, utilizando un interruptor óptico ranurado como sensor. Posible librería y código para realizar este medidor con Arduino (FreqCount.h). Esquema del medidor de RPM, utilizando el micro-procesador de Atmel AT89C2051 y un display LCD de 2 líneas y 16 caracteres. Comprobación de funcionamiento y medidas RPM con diferentes motores.

En un video anterior (Medir con precisión las RPM de un motor, es muy fácil) mostraba cómo se podían medir con precisión la velocidad de giro de un motor, de una forma fácil y sencilla.

Interruptor óptico ranurado
Interruptor óptico ranurado

El captador utilizado era un interruptor óptico ranurado,  posteriormente se medía la frecuencia de giro del motor y se convertía en revoluciones por minuto (RPM). La frecuencia se puede medir con un frecuencímetro, un osciloscopio o mediante una aplicación gratuita utilizando un dispositivo móvil.

Medir RPM con el móvil
Medir RPM con el móvil

En esta ocasión vamos a realizar un medidor de RPM completo, mostrando las revoluciones por minuto en un display LCD. El controlador del medidor se podría hacer con ARDUINO, utilizando la librería FreqCount.hpero deberemos tener en cuenta las limitaciones que tiene esta librería, dependiendo del modelo de Arduino que estemos utilizando

Arduino UNO & FreqCount.h

  • Pin de entrada para realizar la medida: 5
  • Deshabilitación de la sentencia  analogWrite() en pines: 3, 9, 10 y 11.
Conexiones LCD Keypad Shield
Conexiones LCD Keypad Shield

Si queremos utilizar le módulo LCD Keypad Shield con nuestro Arduino UNO, tendremos que utilizarlo sin ensamblar ambos módulos mediante sus conectores, porque coincide el pin de medida (FreqCount.h) con una de las conexiones del módulo LCD. Será necesario modificar las conexiones del LCD, ensamblando ambos módulos con cables para mover la entrada/s ocupada/s.

Con el fin de mejorar la resolución de las medidas… y después de algunos incidentes que tuve con mi Arduino, decidí hacer todo el desarrollo partiendo desde cero, y utilizar el micro-controlador de Atmel: AT89C2051.  En esta primera versión (quizás haga alguna mejora) la resolución de las medidas las determina un temporizador de 0,1 milisegundos (100 uSeg). De esta manera, la medida máxima de revoluciones por minuto que podríamos medir serán 600.000 RPM. Sin embargo, al ser un tiempo fijo, el valor inmediatamente inferior que mediríamos sería 300.000 RPM. Es decir, un salto entre medidas excesivamente grande. Por este motivo limité el valor máximo a 65.535 RPM (16 bit), aunque la medida máxima que podremos ver en el display será 60.000 RPM. Por otra parte, la medida mínima empezará a partir de 12 RPM. Esta limitación queda determinada por el tiempo máximo de espera que fijé para actualizar el valor mostrado en el display, que son 5 segundos.

Medidor R.P.M.
Medidor R.P.M.

 

Tabla RPM
Tabla RPM

En la tabla de la izquierda (click para ampliar) podemos observar los valores de RPM que podrían aparecer en el display, cuando medimos valores entre 4.000 y 60.000 RPM. Como podemos comprobar, la resolución de las medidas empeora al subir la velocidad de giro, lógico porque partimos de un temporizador de valor fijo (100 uSeg). Como en los motores de uso más frecuente la velocidad de giro no suele superar las 4.000 RPM, la resolución que se mostrará con este medidor será bastante buena.

Capacidad real de una batería con ARDUINO

Medir la capacidad real de una batería con ARDUINO. Para que este sistema pueda funcionar de forma autónoma (sin PC), se utiliza el módulo ‘LCD Keypad Shield’ para mostrar la información en su display. Midiendo la capacidad real de una batería nueva, podremos saber la fiabilidad del fabricante y además calcular el tiempo de funcionamiento que tendrá cualquier dispositivo que utilicemos con dicha batería.

LCD Keypad Shield - Esquema
LCD Keypad Shield – Esquema

El módulo ‘LCD Keypad Shield’ está diseñado para poder insertarlo encima del módulo ARDUINO, sin la necesidad de realizar ninguna conexión adicional. Como podemos ver en el esquema anterior, este módulo LCD  transfiere las entradas/salidas de ARDUINO que no utiliza (incluso el conector ICSP y el pulsador RESET) hacia su circuito impreso, permitiendo la inserción de conectores para poder utilizar estas conexiones sin tener que soldar cables en el módulo ARDUINO. LCD Keypad Shield dispone de 6 pulsadores, el pulsador Reset y 5 más para realizar maniobras, así como un diodo Led para indicar cuando está alimentada la placa. Los 5 pulsadores de maniobras están conectados a una red de resistencias alimentadas con 5V, y la salida va conectada a la entrada analógica ‘0’ de ARDUINO. Dependiendo del pulsador que se accione, aparecerá una tensión diferente en esta entrada analógica. Si leemos el valor desde ARDUINO utilizando la sentencia: analogRead(0), obtendremos un valor diferente con cada pulsación. Añadiendo una simple rutina en el código, podremos detectar la posición de cualquier botón. En la imagen anterior se muestran los valores que he medido en mi ARDUINO -tus medidas pueden variar ligeramente-, así como la rutina que podrías utilizar para detectar la pulsación de los botones.

LCD Keypad Shield & ARDUINO
LCD Keypad Shield & ARDUINO

El módulo LCD utiliza su propia tabla de caracteres (ROM), pero también dispone de 8 caracteres programables (RAM). Los caracteres programables los podemos utilizar para generar cualquier carácter o símbolo que necesitemos mostrar en la pantalla y no se encuentre en la tabla de caracteres (ROM) del display. En la imagen anterior se muestran los detalles para programar estos caracteres, así como las sentencias que se deben utilizar con la librería: LiquidCrystal.h en ARDUINO.

Sistema de medida: Capacidad real de una batería
Sistema de medida: Capacidad real de una batería

Para medir la autonomía de la batería, vamos a utilizar ARDUINO como cronómetro de precisión. La conexión/desconexión del cronómetro se realiza de forma automática, utilizando una entrada digital como control. El sistema de detección del estado de la batería será el incluido dentro del módulo TP4056 (módulo de carga para 3,7V con protección). El módulo TP4056  además controlar la carga de la batería, mostrando su estado mediante dos indicadores LED, desconecta la batería de cualquier dispositivo que conectemos a su salida cuando la batería llega a umbral mínimo de tensión (<2,5V).  Entre la salida de tensión del módulo TP4056 y ARDUINO conectaremos un pequeño interface, consistente en un transistor NPN, 2 resistencias y un condensador (ver esquema). Para facilitar el cálculo y obtener precisión en la medida, utilizaremos una carga electrónica para conseguir que la corriente permanezca constante, independientemente de la tensión que tenga la batería.

El cronómetro incrementará el contador de tiempo, siempre que tengamos tensión a la salida del módulo TP5056. Cuando el cronómetro se detenga podremos calcular la capacidad real de la batería, convirtiendo el valor de tiempo medido en horas y multiplicándolo por la corriente que hayamos seleccionado en la carga (la corriente en amperios para Ah). Es importante destacar que al final del ciclo de descarga, cuando el cronómetro se detenga, la carga se desconectará de la batería… y esta empezará a recuperarse más rápido o despacio dependiendo de la carga que le hayamos desconectado. Al subir de nuevo la tensión de la batería, llegará un momento en el que se supere el umbral de reposición del módulo TP4056, se conectará de nuevo y el cronómetro seguirá incrementando el tiempo. Cuando esto suceda, se producirán ciclos intermitentes de cadencia cada vez más larga, y al final se detendrá por completo. Si queremos conocer la capacidad de la batería con bajo consumo, podemos esperar hasta el final. Pero si necesitamos comprobar la autonomía con el consumo que hemos seleccionado en la carga (porque es el consumo de nuestro dispositivo), tendremos que hacer el cálculo cuando se desconecte el cronómetro por primera vez.

En la siguiente imagen se muestran las medidas comparativas que he realizado con dos baterías de origen chino, rotuladas con una capacidad de 9800 mAh. Las dos baterías son nuevas y pertenecen al mismo lote. Las medidas las he realizado con una corriente constante de 500 mA, y el tiempo que se muestra es el de la primera desconexión. Al medir la capacidad de dos baterías iguales, nos aseguramos que la batería que hemos utilizado no está defectuosa (ambas medidas son parecidas). Al realizar dos medidas utilizando la misma batería, comprobamos la precisión del sistema de medida que estamos utilizando (valores casi idénticos).

Resumen de las medidas
Resumen de las medidas

En la última línea se muestra la capacidad que he medido en otra batería de tipo TR 14500, de una ‘supuesta’ capacidad de 1200 mAh.

Medidas con umbral de tensión ajustable

Si queremos medir la capacidad de otros tipos de batería, con tensiones diferentes, o simplemente necesitamos comprobar el tiempo de funcionamiento de cualquier batería hasta llegar a una tensión umbral determinada, podríamos montar el circuito que se muestra a continuación.

Sistema de medida opcional, con umbral de tensión ajustable
Sistema de medida opcional, con umbral de tensión ajustable

Como podemos ver, sólo tendremos que sustituir el módulo de carga TP4056 por el circuito de control que se muestra en la imagen. Mediante el potenciómetro de ajuste (22K), fijaremos el umbral mínimo de tensión a la que se debe desconectar de la carga electrónica,  y detener la cuenta del tiempo (cronómetro).

Descargar el código de ARDUINO : Crono_Battery