Control-Medidor de Ozono en el aire, con Arduino

Construcción de un medidor de ozono en el aire con Arduino. Al mismo tiempo, este medidor se encargará de controlar el encendido y apagado del equipo generador de ozono, manteniendo así un nivel de concentración prefijado, dentro de un compartimento destinado a la desinfección de objetos. El sensor de gas ozono tipo MQ-131, de baja concentración, permite medir concentraciones de ozono en el aire comprendidas entre 0,01 y 1 ppm.

Medidor de la concentración de ozono en el aire

 

Concentración de Ozono en el aire

El ozono es muy bueno para desinfectar locales, ropa de trabajo, mascarillas y también alimentos. Debido a la situación actual, se están vendiendo generadores de ozono de todo tipo, y muchos de ellos orientados al uso doméstico.  El ozono, al igual que cualquier producto desinfectante, hay que utilizarlo con precaución. Es importante destacar que el ozono es un gas tóxico para los pulmones. Los generadores de ozono hay que utilizarlos en sitios cerrados y sin gente dentro.

Concentración máxima de ozono en el aire durante 8 horas

El problema que tiene el ozono frente a otros productos desinfectantes, es que es muy difícil de dosificar. El ozono es un gas muy inestable y no se puede envasar, debido a que las moléculas del ozono se recombinan muy rápidamente, convirtiéndose de nuevo en oxígeno. Cuando se utiliza el ozono como desinfectante, lo más importante es calcular el tiempo que debería estar funcionando el equipo generador. Ese tiempo dependerá del valor de concentración de ozono que necesitemos alcanzar (ppm), y varía en función de los metros cúbicos desinfectar (volumen) y de la potencia del generador.

Desinfectantes

Teniendo en cuenta que la producción de ozono de un generador varía en función de la calidad del aire (temperatura, humedad…) y además depende del rendimiento de su elemento reactor, el cual se envejece y no es muy lineal; la única manera de calcular ese tiempo sería mediante un equipo de medida, que a su vez controlara el encendido y apagado del equipo generador de ozono. Este interruptor funcionaría como el termostato de una calefacción, conectando y desconectando el generador en función de la concentración de ozono en el aire que se quisiera alcanzar.

Sensores de gas MQ

MQ  es una familia de sensores de gas, orientados a medir diferentes compuestos químicos dependiendo del modelo de sensor que se utilice. Los sensores MQ están compuestos por un elemento semiconductor (óxidos metálicos) sensible a cada tipo de gas, el cuál varía su resistencia en función de la concentración de gas en el aire.

Sensores de gas de la serie MQ

Estabilidad y Precisión de los sensores MQ

Para obtener una mayor estabilidad, los sensores MQ incorporan una resistencia calefactora, lo cual supone un consumo extra y una falta de precisión en las medidas que se realicen al poco tiempo de alimentar el sensor. Otro punto importante a considerar, es que cada modelo de sensor MQ tienen alta sensibilidad a un gas específico, pero en menor medida también reaccionan o otros gases, y esto provoca una mayor imprecisión. Por ejemplo, el sensor de ozono MQ-131 tiene una alta sensibilidad al ozono, pero también es sensible a otros gases oxidantes como el cloro y el dióxido de nitrógeno.

Módulo sensor de gas ozono MQ-131

Para obtener una precisión mínima, es necesario calibrar cada sensor, y almacenar su valor de resistencia sin presencia de gas, dentro del firmware encargado de calcular las medidas. La precisión de estos sensores depende muchos factores internos y externos difíciles de controlar (temperatura de trabajo, humedad, envejecimiento del sensor), y nunca deberían utilizarse como elemento de control en lugares críticos.

Detalles del módulo sensor de gas ozono MQ-131

Con la ayuda de un controlador programado, por ejemplo con Arduino, los sensores MQ los podemos utilizar para medir la concentración de un gas determinado, dependiendo del modelo de sensor que elijamos.  Los sensores de gas MQ pueden comprarse sueltos, pero es muy común conseguirlos ya montados en un pequeño PCB, en el cuál se incluye un circuito comparador que nos proporciona una salida digital extra, además de la propia salida analógica del sensor. A través de la resistencia variable (trimmer) que incluyen estos circuitos , podríamos prefijar un umbral máximo de gas, y disparar una alarma.

Esquema genérico, para utilizar con los sensores de tipo MQ

Medidor-Controlador de Ozono

En el caso del sensor MQ-131, muy sensible al gas Ozono, mediante esta salida digital podríamos controlar el encendido y apagado de un generador de ozono. Esto sería muy útil para mantener un nivel alto de ozono dentro de un compartimento cerrado (cabina, caja, etc.) con el fin de desinfectar objetos personales, utensilios de trabajo, ropa, etc.

Esquema del Medidor-Controlador de ozono.

Descargar el firmware

El firmware que necesitas para programar el ATMEGA328P (Arduino UNO),  los puedes descargar desde el siguiente enlace:  MQ-131_JR.rar

Cubierta del sensor, impresa en 3D

La cubierta de protección del sensor gas la he fabricado con PLA. El PCB del sensor se fija a esta cubierta sin tornillos,  calentando con un soldador los 4 resaltes de PLA que sobresalen por los orificios del PCB, una vez encajado en la cubierta.

Carcasa 3D, para el sensor de gas MQ

Los archivos que necesitas para imprimir esta cubierta de protección, los puedes descargar desde el siguiente enlace: Cover for MQ gas sensor

¿Necesitas fabricar un PCB?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos, pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay. Hasta un 30% de descuento para PCBs especiales, con fabricación en 24 horas.

Logo: PCBWay
Ahora el servicio de montaje en PCBWay por tan solo 30$, con tiempo de entrega rápido: https://www.pcbway.es/

 

 

 

 

Bloqueador de llamadas telefónicas

Construcción de un bloqueador de llamadas telefónicas. El decodificador de llamadas está basado en el circuito integrado HT9032, el cuál está diseñado para recibir las señales FSK, transmitidas según el protocolo Bellcore TR-NWT-000030 y especificaciones ITU-T V.23. El sistema de bloqueo de llamadas está construido con un Arduino UNO, junto con su shield LCD, el cuál incluye una botonera de control. Para almacenar la información de las llamadas entrantes y los números de teléfono que se deben bloquear, se utiliza un lector de tarjetas SD/MicroSD, especialmente diseñado para funcionar con Arduino.

Decodificador HT9032

El circuito integrado HT9032 está diseñado para identificar las llamadas telefónicas. La interfaz de señalización de datos debe cumplir con el estándar Bell 202, que se describe a continuación:

  • Sistema análogo, fase coherente, cambio de frecuencia
  • 1 lógico (marca) = 1200 + / 12 Hz
  • 0 lógico (espacio) = 2200 + / 22 Hz
  • Velocidad de transmisión = 1200 bps
  • Aplicación de datos = serial, binario, asíncrono

La interfaz debe estar dispuesta para permitir datos simples de transmisión, desde la central de telefonía hacia la CPE (Equipo de instalaciones del cliente), solo cuando CPE está en estado colgado. Los datos serán transmitidos en el período de silencio entre el primer y el segundo tono de la llamada, antes de que se establezca la comunicación de voz. El nivel de transmisión será -13.5 dBm. (+/-1 dB) y la atenuación máxima entre puntos de 20 dB. El receptor por lo tanto, debería tener una sensibilidad de aproximadamente de -34.5 dBm, para poder decodificar la información en el peor de los casos. El estándar ITU-T V.23 también utiliza la codificación FSK, sistema utilizado para transmitir datos a través de la red telefónica conmutada. Para el modo 2 del V.23, la velocidad de modulación y frecuencias características se detallan a continuación:

  • Sistema análogo, fase coherente, cambio de frecuencia
  • 1 lógico (marca) = 1300 Hz
  • 0 lógico (espacio) = 2100 Hz
  • Velocidad de transmisión = 1200 bps

Diagrama de estados: HT9032C

Dado que el filtro de paso de banda del circuito integrado HT9032 permite pasar la señal V.23,  el HT9032 también puede demodular señal V.23

Pinout: HT9032C

Detección de la llamada

Los datos de identificación de llamada se transmiten en el período de silencio, entre el primer y el segundo tono de llamada antes de establecer la comunicación de voz. El HT9032 primero debe detectar un tono válido, para luego realizar la demodulación FSK. El montaje típico a utilizar, sería rectificar primero la señal telefónica mediante un puente de diodos, y luego enviarla a una red de resistencias con el fin de atenuar el nivel de tensión entrante. Los valores de las resistencias y condensadores de desacoplo, deben elegirse para obtener un voltaje suficiente en el pin RDET1, el cuál espera recibir como mínimo 40 Vrms en la entrada de las línea cuando se reciba la señal del RING. Cuando se supera la tensión de disparo en RDET1, el transistor NMOS conducirá, descargando el condensador conectado al pin RTIME. Esto iniciará un encendido parcial, tan solo de las partes del circuito involucradas en el análisis de la señal de llamada, incluido el pin RDET2. Con el pin RDET2 habilitado, una porción de la señal alterna del RING (la que supere 1.2 V), se conducirá al circuito de análisis del RING. Una vez que se identifica la señal de llamada, el pin RDET se pondrá a nivel bajo.

Detección de llamada (HT9032C)

Normalmente, el pin PDWN y el pin RTIME controlan el modo de operación del HT9032. Cuando ambos pines están a nivel ALTO, el HT9032 quedará configurado en el modo apagado, consumiendo menos de 1uA. Cuando llega un RING válido, el pin RTIME se pondrá a nivel BAJO, y el chip quedará habilitado. Este es el modo de encendido parcial, consumiendo aproximadamente 1,9 mA. Una vez que el pin PDWN quede a nivel BAJO, el circuito quedará completamente encendido, y listo para recibir señal FSK. Durante este modo, el consumo de corriente aumentará a aproximadamente 3,2 mA. Después de recibir el mensaje FSK, se puede permitir que el pin PDWN regrese a VDD, y el circuito volverá al modo de apagado.

Identificador/Bloqueadro de llamadas (esquema)

Descargar el firmware

El firmware que necesitas para programar el ATMEGA328P (Arduino UNO),  los puedes descargar desde el siguiente enlace: Call_Ident.rar

¿Necesitas fabricar un PCB?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos, pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay. Hasta un 30% de descuento para PCBs especiales, con fabricación en 24 horas.

Logo: PCBWay

Ahora el servicio de montaje en PCBWay por tan solo 30$, con tiempo de entrega rápido.

https://www.pcbway.es/

 

 

Monitor FM-RDS v2

Construcción de un pequeño receptor de radio de FM con RDS, orientado al personal de mantenimiento de los centros emisores de radio. La idea es construir un pequeño receptor de radio que decodifique la información más relevante del RDS, para poder controlar el correcto funcionamiento de la información que se está transmitiendo por la subportadora RDS de cada transmisor.

PCB: SI4703Este receptor es la segunda versión, utilizando el módulo SI4703, en lugar del RDA5807M que monté anteriormente:

Monitor FM-RDS

Módulo receptor FM-RDS: SI4703

El módulo SI4703, incluye un completo receptor de radio en FM: sintonizador, demodulador FM, decodificador estéreo, decodificador RDS y un pequeño amplificador de audio estéreo de 150mW.

Módulo receptor FM-RDS: SI4703

 

Este módulo se alimenta con una tensión continua de 3,3V, la configuración y el control se realiza mediante el bus I2C y la toma de antena está acoplada al hilo común de los auriculares. De esta forma, el cable de los auriculares hace de antena.

Receptor FM-RDS con: SI4703

Este sencillo receptor de radio está basado en el módulo SI4703, de bajo coste y altas prestaciones. Este módulo incluye en su interior todo el receptor de radio, incluso el decodificador Estéreo, el decodificador RDS y un pequeño amplificador de audio. Para controlar este módulo, he utilizado el micro-controlador ATMEGA328P (Arduino).

Esquema: Radio LCD con SI4703

Descarga de ficheros

El firmware y librerías que necesitas para programar el ATMEGA328P,  los puedes descargar desde el siguiente enlace: Radio_SI4703.rar

¿Necesitas fabricar un PCB?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos, pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay. Hasta un 30% de descuento para PCBs especiales, con fabricación en 24 horas.

Logo: PCBWay

https://www.pcbway.es/

Ahora el servicio de montaje en PCBWay por 30$, con envío GRATUITO mundial:
https://www.pcbway.es/quotesmt.aspx

Interruptor inteligente

Diseño y construcción de un interruptor inteligente, capaz de cortar la alimentación de todos los dispositivos conectados en una regleta de enchufes. El circuito detecta el consumo en una toma de red (Master), y desconecta todo (incluido el propio controlador) cuando se apaga el dispositivo conectado a la toma ‘Master’. Así en reposo (Standby), el consumo total de todo el conjunto será nulo.

Regletas de RED inteligentes

Buscando un poco por Internet, podemos encontrar regletas de alimentación inteligentes. La mayoría de ellas nos permiten conectar y desconectar la alimentación de todos los enchufes desde un dispositivo móvil, programar la hora de encendido y apagado, incluso medir el consumo y  calcular su coste.

Regletas inteligentes en Internet

El uso de regletas inteligentes podría suponer un gran ahorro energético, pero hay que tener en cuenta que estas regletas de por sí ya incorporan un consumo extra… y su circuito de control consume energía las 24 horas del día.

Interruptor inteligente

La idea de este montaje, es la de conseguir el apagado automático de una serie de dispositivos, al detectar el apagado del equipo principal (Master). Por ejemplo, si conectamos a la toma principal  de este circuito la CPU de nuestro PC,  y el resto de dispositivos (monitor, impresora, escáner, etc)  a la toma auxiliar; al desconectar la CPU se desconectaría la alimentación de todo el conjunto… incluso la del propio circuito de control. De esta manera no quedaría ningún equipo consumiendo en modo ‘Standby’, y el consumo total sería nulo.

Interruptor inteligente montado

A continuación se muestra el esquema del circuito de control, encargado de cortar la alimentación en todas las tomas de red, cuando detecte un caída de consumo en la toma ‘Master’.

Esquema: Interruptor inteligente

Las tensiones que obtendremos como muestra en la entrada del ATtiny cambiarán dependiendo de la inductancia y características del transformador que utilicemos (filtro EMI), además del tipo de carga que conectemos en la toma ‘Master’ (carga reactiva o lineal).

Principio de funcionamiento

El circuito está basado en la transferencia de tensión que aporta una de los dos  bobinas de un filtro EMI, al paso de la corriente de RED por el otro devanado.  Este montaje funciona como un transformador de corriente, entregando una tensión en el devanado secundario, proporcional a la corriente que circule por el primario. En este caso, la transferencia de tensión no es lineal con la potencia, pues dependerá del tipo de carga que conectemos en la toma ‘Master’. Si la carga se comporta como una resistencia pura,  la transferencia de tensión será menor que si tuviera una componente reactiva.

Medidas de tensión con diferentes cargas

El circuito detector de umbral está construido con Arduino, utilizando un ATtiny 85. Este pequeño micro controlador tiene sólo 8 pines y puede funcionar con un oscilador interno, lo que permite hacer uso de casi todos sus terminales.

Calibración y ajuste de los umbrales

En este montaje se han dedicado dos pines del ATtiny para poder configurar hasta 4 umbrales distintos de funcionamiento. Así podemos elegir el umbral de detección más adecuado al equipo que vayamos a conectar en la toma ‘Master’. Como es lógico suponer, los 4 umbrales los podremos calibrar y modificar con Arduino, antes de programar el ATtiny.

Ajuste y calibrado de los umbrales

Para facilitar el ajuste de los umbrales y la calibración de la escala, podemos cargar el código ‘Regleta_TEST.ino’ que se adjunta en la descarga, y utilizar la placa de desarrollo Arduino UNO. Para realizar este ajuste, colocamos un potenciómetro de 10K entre el positivo y negativo de la fuente de 5V, y conectamos el cursor del potenciómetro con la entrada A2 de Arduino UNO. El proceso a seguir para la calibración de la escala y fijación de los umbrales. se explica en el video final.

Los archivos que necesitas para programar el Arduino UNO y el ATtiny, lo puedes descargar de forma gratuita desde el siguiente enlace:

Interruptor_I.rar

¿Dónde fabricar el PCB?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos, pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.

Logo: PCBWay

https://www.pcbway.es/

PCB: Interruptor inteligente

 

Acceso a los GERBER de este PCB

PCB from PCBWay

Link of my shared project

Descarga del ficheros 3D:

Intelligent switch

Diseño 3D

 

 

 

 

 

 

 

ARDUINO a fondo… no te lo pierdas!!!

Configuración de un ATmega8A para hacerlo funcionar en un Arduino UNO. Si utilizas Arduino, te aconsejo que no te pierdas este artículo, porque encontrarás la información que necesitas para saber cómo funciona y esclarecer algunas dudas.

Programador ISP, con Arduino UNO

Contenido

Descripción comparativa entre el ATmega8A y el ATmega328P (capacidad de memoria, rango de tensiones, frecuencia máxima de trabajo). Configuración del IDE de Arduino (software de programación) y sus diferentes modos de funcionamiento. Convertir un Arduino UNO en programador ISP, cunstruyendo un ‘shield’ con zócalo de 28 pines, para programar cualquier ATmega compatible… y en el video final encontrarás las explicaciones, consejos y algunos trucos.

ATmega328P / ATmega8A

El  microprocesador ATmega8A tiene una arquitectura muy parecida al ATmega328P, ambos son AVR, aunque existen algunas diferencias en cuanto a sus prestaciones.

Esquema de bloques: ATmega8A

Esquema de bloques: ATmega328P

El ATmega8A podría utilizarse en la placa de desarrollo de Arduino UNO en sustitución del ATmega328P, siempre que se tengan en cuenta sus limitaciones.

Comparativa: ATmega328P / ATmega8A

Ambos circuitos integrados son compatibles en cuanto a su encapsulado conexiones y funcionamiento, de hecho el ATmega8A es uno de los primeros microprocesadores que se empezaron a utilizar con Arduino. Antes de montar un ATmega8A en la placa de desarrollo Arduino UNO, habría que programar su Boot Loader, y colocarlo en el lugar adecuado de su memoria Flash.

Boot Loader

El Boot Loader es el mecanismo de auto programación que permite cargar y descargar el código del programa desde el propio micro controlador. Esta característica permite que las actualizaciones del software sean controladas por el propio micro controlador, y esto lo hace  utilizando un pequeño programa de arranque, llamado Boot Loader…  y este ocupa una pequeña parte de la memoria Flash.

El Boot Loader o cargador de arranque, puede utilizar cualquier interfaz de datos y protocolo para leer y escribir el código del programa, tanto el de la memoria Flash como el de la memoria de programa.

Boot-Loader ARDUINO

El código del programa alojado en la sección del Boot Loader tiene la capacidad de escribir en toda la Flash, incluido el propio gestor de arranque de memoria. O dicho de otra manera, el Boot Loader tiene la capacidad de modificarse y borrarse a sí mismo.

El tamaño de la memoria del Boot Loader se puede configurar mediante el estado de unos bits denominados ‘fusibles’, y dispone de dos conjuntos separados, aparte de los bits Boot Lock (bits de bloqueo), los cuales permiten seleccionar los diferentes niveles de protección del micro procesador.

Fusibles en una memoria PROM

Secciones de la memoria FLASH

La memoria flash está organizada en dos secciones principales, la sección de la aplicación y la sección del cargador de arranque. El tamaño de las diferentes secciones está configurado por los fusibles BOOTSZ. Estas dos secciones pueden tener diferentes niveles de protección, ya que tienen diferentes conjuntos de bits de bloqueo.

Sección de la aplicación

La sección de la aplicación se encuentra dentro de la memoria Flash, y es la que se utiliza para almacenar el código principal del programa. Los  niveles de protección para la sección de la aplicación se configuran con los bits del Boot Lock. Dentro de la sección de la aplicación no se puede almacenar ningún código del cargador de arranque, ya que la instrucción SPM quedaría deshabilitada cuando se ejecuta esta sección.

BLS – Sección del cargador de arranque

Si bien la sección de la aplicación se utiliza para almacenar el código de principal del programa, el software del Boot Loader debe almacenarse dentro de la sección de arranque (BLS), ya que la instrucción SPM sólo puede iniciar una programación cuando se ejecuta desde el sector de arranque (BLS). La instrucción SPM puede acceder a todo el contenido de la memoria Flash, incluso al propio  sector de arranque (BLS). El nivel de protección para la sección Boot Loader puede seleccionarse mediante los bits de bloqueo del cargador de arranque.

Secciones de lectura sin escritura y sin lectura mientras se graba

Si la CPU admite la lectura mientras escribe (Read-While-Write) o si la CPU se detiene durante un software Boot Loader, la actualización depende de la dirección que se está programando. Además de las dos secciones, que son configurables mediante los fusibles BOOTSZ, la memoria Flash también se divide en dos secciones fijas: la sección leer mientras se escribe (RWW) y la sección sin lectura mientras se escribe (NRWW). El límite entre las secciones RWW y NRWW depende del modelo de micro controlador que se utilice.

La principal diferencia entre las dos secciones es:

  • Al borrar o escribir dentro de la sección RWW, la sección NRWW puede leerse durante la operación.
  • Al borrar o escribir dentro de la sección NRWW, la CPU se detiene hasta que finalice el proceso.

El software del usuario no puede leer ningún código que se encuentre dentro de la sección RWW durante la ejecución del sector de arranque.

El significado de leer mientras escribe (Read-While-Write) se refiere a cuando se borra o escribe en la memoria, es decir, cuando se está programando. Y esto no es posible hacerlo cuando se está ejecutando el gestor de arranque.

RWW – Sección de lectura mientras se escribe

Cuando se actualiza el programa con el Boot Loader y se está cargando código dentro de la sección RWW, es posible leer código del Flash, pero solo el código que se encuentra en la sección NRWW. Durante un proceso continuo de programación, el software debe garantizar que la sección RWW nunca se lea. Si a través de software se intentara leer dentro de la sección RWW durante la programación, el software podría terminar en un estado desconocido. Para evitar esto, las interrupciones tienen que deshabilitarse o moverse dentro de la sección del Boot Loader,  porque la sección Boot Loader siempre se encuentra en sección NRWW.

NRWW – Sección sin lectura mientras se escribe

El código ubicado en la sección NRWW se puede leer cuando el software Boot Loader está programando la sección RWW. Cuando el código Boot Loader programa la sección NRWW, la CPU se detiene hasta que termine la operación.

Bits de bloqueo del cargador de arranque (Boot Loader)

Cuando no se programa el Boot Loader, toda la capacidad de la memoria el Flash queda disponible para el programa. El cargador de arranque tiene dos conjuntos separados de bits de bloqueo, los cuales se pueden configurar de forma independiente y permiten diferentes niveles de protección.

Modos de protección contra una posible actualización realizada a través del micro procesador

  • Proteger la escritura en toda la memoria Flash
  • Proteger la escritura sólo en la sección del cargador de inicio (Boot Loader)
  • Proteger la escritura sólo en la sección Flash del programa
  • Permitir la actualización del software en toda la memoria Flash

Bits de bloqueo

Los bits de bloqueo o protección (Boot Lock) se pueden configurar en ambos modos de programación, tanto serie como paralelo, pero solo pueden borrarse cuando se borra toda la memoria. El bloqueo de escritura general  no controla la programación de la memoria flash mediante instrucción de auto programación (SPM). Del mismo modo, el bloqueo de lectura / escritura general no controla la lectura ni la escritura por LPM / SPM.

Si necesitas saber las posibles configuraciones de algún micro-controlador AVR, puedes consultar en esta Web: http://www.engbedded.com/fusecalc/

Desde aquí puedes realizar una configuración, calcular los valores en hexadecimal y copiar los argumentos de la cadena que le tendrías que añadir a la aplicación AVRDUDE, para programar los fusibles del micro-controlador.

SPM – Self-Programming Mode

El modo de auto programación (SPM) es una función que permite que un micro controlador programe su propia memoria flash. Usando el SPM, un micro controlador puede programarse con un nuevo código SPM. El modo de auto programación (SPM) se usa comúnmente con los códigos de cargador de arranque del micro controlador que ayudan a su programación en serie. El SPM está disponible solo para el código que se ejecuta en el Boot Loader (BLS) de la memoria flash. Con la ayuda de SPM, un código en el Boot Loader puede reescribir la memoria flash de la aplicación por completo o una parte de ella. Incluso puede reescribir su propio código en la sección BLS.

El modo de auto programación (SPM) es un factor clave del código Boot Loader, ya que su principal función es la de cargar el programa dentro de la sección destinada a la aplicación de la memoria flash. El Boot Loader puede recibir el código binario de otros chips de memoria, tarjetas SD o a través del puerto serie del micro controlador en caso de programación en serie. Es entonces con la ayuda de modo de auto programación (SPM)  que el micro controlador escribe el código binario en la sección flash de la aplicación.

Programador ISP con Arduino UNO

El IDE (Integrated Development Environment) de Arduino dispone de un código en la sección de los ejemplos: Archivo – Ejemplos – 11.ArduinoISP, que permite convertir la placa de desarrollo de Arduino en un programador ISP. Este código puede controlar el encendido de 3 diodos LED, para indicar su estado de funcionamiento durante la programación.

Esquema: Programador ISP

Funcionamiento del programador

Fluctúa la iluminación de uno de sus indicadores LED cuando el programador está disponible (LED azul), muestra otra indicación durante la  escritura (LED amarillo), y  también puede mostrar la indicación de error (LED rojo).

He añadido un cuarto LED al circuito, conectando un diodo LED en la línea SCK (LED verde). Esta señalización nos permite saber si un micro-controlador tiene cargado el Boot-Loader:

…al pulsar el botón RESET del programador, el LED verde (conectado a la línea SCK) debería parpadear durante un instante. 

Autoprogramación

La memoria del programa se actualiza  página por página (64 palabras en ATmega328P / 32 palabras ATmega8A). Antes de programar una página con los datos almacenado en el buffer de página temporal, la página debe borrarse. El buffer de página temporal se llena uno palabra a la vez usando SPM y el buffer se puede llenar antes del comando de borrado de página o entre una página borrada y una operación de escritura de página:

Alternativa 1. Llenar el buffer antes de borrar una página

  • Rellenar el buffer temporal de la página
  • Realizar un borrado de página
  • Realizar una escritura de página

Alternativa 2. Completar el buffer después de borrar la página

  • Realizar un borrado de página
  • Rellenar el buffer temporal de la página
  • Realizar una escritura de página

Analizador acústico con ARDUINO

Construcción de un analizador acústico con Arduino. La información se presenta de forma gráfica, en un display LCD de 16×2 caracteres. Como ecualizador gráfico se puede utilizar el circuito integrado MSGEQ7 o el MSGEQ5, dependiendo del número de bandas de audio que queramos mostrar. Este circuito se puede montar de forma independiente, previamente programando el ATMEGA328P con la placa de desarrollo de Arduino. Una vez programado, mediante la posición de un jumper se puede configurar para que muestre 5 o 7 bandas… montando previamente el circuito integrado ecualizador correspondiente.

Utilidad de un analizador acústico

Este analizador acústico no puede competir con un equipo profesional, pero podría ser muy útil para acondicionar la acústica de un salón de actos o sala de conciertos improvisada. Comprobando la respuesta en frecuencias y volumen de escucha en diferentes puntos, se podrían corregir los defectos reorientando los altavoces/bocinas, ecualizando la respuesta de los amplificadores, etc.   Por otra parte, como este analizador de audio es de bajo costo y no requiere de conocimientos especiales para montarlo, podría ser muy instructivo realizarlo como práctica en escuelas relacionadas con la formación en las ramas de electrónica y tecnología.

Ecualizador gráfico de 5/7 bandas

Este montaje está basado en el circuito integrado MSGEQ5 / MSEGQ7,  ecualizador gráfico de audio  de 5 y 7 bandas respectivamente.  Dentro de un pequeño encapsulado DIL de 8 pines, se encuentra todo lo necesario para obtener a su salida los valores de energía a diferentes frecuencias,  a partir de la señal de audio en su entrada (descomposición espectral).

MSGEQ5 - Analizador de 5 bandas

Como se puede ver en la imagen anterior,  el MSGEQ5  analiza los valores comprendidos entre 100 y 10.000 Hz. Este rango es más que suficiente para conocer la respuesta en frecuencias de cualquier entorno. Pero si queremos analizar con más detalle los extremos de la zona audible, graves más bajos y agudos más altos, sería mejor utilizar el MSGEQ7.

MSGEQ7 - Analizador de 7 bandas

Como se puede comprobar comparando los datos entre ambos componentes,  son compatibles tanto en conexiones como características técnicas. Lo único que cambia es la gestión de los datos,  pero el protocolo es el mismo.  Con el MSGEQ5 tendremos que tomar y asignar los valores leídos de 5 en 5, y con el  MSGEQ7 lo haremos en grupos de 7 (número de bandas). Aprovechando estas características, es muy fácil construir un circuito que permita trabajar con ambos componentes.

Analizador acústico de 5/7 bandas

 

Este montaje lo puedes hacer siguiendo el esquema anterior, o utilizando la placa de desarrollo de Arduino junto con el Shield LCD, desarrollado para Arduino UNO.

Escala gráfica

La escala de las barras gráficas que muestra el display no es logarítmica, como lo harían la mayoría de los analizadores de audio. Con el fin de obtener un efecto visual más pronunciado, la gráfica que muestra el display  traduce los valores de tensión en cada banda de forma lineal.

Escalado lineal de las medidas

Si prefieres cambiar la escala, sólo tienes que modificar los valores de la tabla (resaltadas en color  amarillo), editando el código antes de programar el microprocesador ATMEGA328P con Arduino.

Firmware

El código de programación de este analizador acústico,  se puede descargar desde el siguiente enlace: Analizador acústico

Medir la sensación térmica

Construcción de un medidor de humedad, temperatura real y la sensación térmica. Para este montaje voy a utilizar el sensor de temperatura y humedad DHT11, y como controlador utilizaré Arduino. La sensación térmica describe el grado de incomodidad que el ser humano percibe, como resultado de la combinación de la temperatura, humedad y el viento. La humedad, junto con la velocidad del aire hacen que la sensación de frío sea mayor en invierno, y la sensación de calor más intensa en verano.

Sensor DHT11

La temperatura y la sensación térmica

Es habitual que nos fijemos en la temperatura que muestra un termómetro, y rápidamente asociemos el valor que hemos leído con la sensación de frío o calor que vamos a sentir. Sin embargo, la sensación térmica varía en función de otros factores, como son la humedad relativa del aire y su velocidad.

Regulación térmica

El cuerpo humano intenta mantener su temperatura corporal a un valor constante, alrededor de los 37ºC y la piel es el principal órgano encargado de regular la temperatura:

  • Cuando aumenta la temperatura del cuerpo, se dilatan los vasos sanguíneos y aumenta el flujo de sangre por la piel, y la piel en contacto con el exterior hace de radiador y se reduce la temperatura. Si el calor es excesivo, se abren los poros y se comienza a sudar. El sudor es un método de enfriamiento muy efectivo, porque su evaporación provoca un enfriamiento mucho más rápido.

Sudor y humedad

  • Cuando el cuerpo se enfrí­a, los vasos sanguí­neos se contraen y el flujo sanguíneo se reduce. Los músculos son estimulados para generar más calor, pudiendo llegar a provocar temblores involuntarios. Así  el cuerpo puede aumentar su temperatura rápidamente en caso de necesidad.

En definitiva, la piel humana es el sensor que detecta las diferencias de temperatura entre el cuerpo y el ambiente, para reaccionar en consecuencia. Si tenemos en cuenta que la temperatura de la piel se mantiene alrededor de los 32ºC, la sensación térmica variará de forma más brusca, cuando más nos alejemos de dicho valor y dependerá de la humedad y velocidad del aire exterior.

Sensación térmica: Humedad/Temperatura

La sensación térmica describe el grado de incomodidad que el ser humano percibe, como resultado de la combinación de la temperatura, humedad  y el viento. La humedad, junto con la velocidad del aire hacen que la sensación de frío sea mayor en invierno, y la sensación de calor más intensa en verano.

Gráfica: sensación térmica

 

La humedad en verano y en invierno

  • En verano, con temperaturas altas, un exceso de humedad en el ambiente impide que el sudor se evapore de forma eficiente, provocando una sensación de calor más alta.
  • En invierno, con temperaturas bajas, un exceso de humedad en el ambiente provoca una hidratación mayor de la piel, condensando partículas de agua en la superficie como si fuera sudor, y su evaporación provoca una sensación de frío mayor que la que muestra el termómetro

Si queremos saber el grado de frío o calor, sobre todo en las regiones de climas húmedos, es mucho más útil conocer la sensación térmica que la temperatura. La humedad relativa del aire, representada con las siglas HR o la letra griega Φ (fi), es la concentración de vapor de agua en el aire.

Una vez corregido el valor de temperatura con la sensación térmica debido a la humedad, si además hay viento con una velocidad superior a 12,5 km/h, habría que aplicar al valor obtenido una nueva corrección.

Sensación térmica con viento

La corrección con el viento es mucho menor que la provocada por la humedad. Como se puede ver en la gráfica anterior,  la sensación de calor aumenta a partir de 34ºC  y también disminuye a partir de ese mismo valor.

Medir la sensación térmica

La construcción de un medidor que muestre el valor de la sensación térmica, es sencilla y de bajo costo. Con Arduino el código de programación es muy corto, y además las fórmulas de corrección ya están incluidas dentro de las librerías del sensor DHTxx. Para este montaje utilicé el sensor DHT11, pero si se requiere una mayor precisión, es mejor utilizar el DHT22. El controlador de este medidor está hecho con Arduino, y la presentación de los valores se muestra en un display LCD de 2×16 caracteres. Todo el conjunto se podría fabricar sin tener que soldar ningún componente, utilizando un Arduino UNO junto con su ‘Shield LCD‘. El sensor de temperatura/humedad se puede conectar con terminales de conexión en la tarjeta Arduino, porque el sensor DHT11 se puede comprar montado en una pequeña placa PCB, en la que lleva montada una resistencia Pull-Up y el condensador de desacoplo para la alimentación. La alimentación de todo el conjunto es de 5 VDC, por lo que se podría utilizar cualquier cargador USB que tengamos en casa.

También puedes optar por hacer un montaje independiente, sin la placa de desarrollo de Arduino.  Así  te saldrá todo más barato y su tamaño será menor:

Esquema del medidor de temperatura, humedad y sensación térmica

Firmware (v1)

El código de programación de este medidor, junto con la librería de control necesaria para el sensor DHTxx, se puede descargar desde el siguiente enlace: Temperatura y humedad

Descargar fichero .stl

Thermometer showing the thermal sensation

El medidor de temperatura y humedad lo puedes montar dentro de en una pequeña caja de plástico  (100 x 60 x 25 mm), incluyendo dentro su propia fuente conmutada de 5VDC. Los detalles de este montaje, los puedes ver en el siguiente video:

Sensación y conductividad térmica

¿Por qué tiene tan mala respuesta a la temperatura el sensor DHT11?. El problema es que el sensor de temperatura DHT11 está encerrado dentro de una jaula de plástico, por lo que su conductividad térmica entre el exterior y el sensor es mala, y esto provoca que su tiempo de respuesta sea lento. Para corregir este fallo, he montado un segundo sensor de temperatura en el termómetro. He utilizado el sensor DS18B20 con encapsulado metálico para medir la temperatura, dejando el sensor DHT11 para medir la humedad y calcular la sensación térmica.

Tiempo de respuesta de un sensor

La respuesta en el tiempo de un sensor de temperatura depende de la conductividad térmica del material utilizado entre el elemento a medir (aire, líquido) y el sensor de temperatura. Como norma general, los materiales mas conductivos eléctricamente, también lo son térmicamente.

Conductividad térmica de algunos materiales

Utilizar un sensor de temperatura con encapsulado metálico, es una buena elección cuando se necesita obtener una respuesta rápida en la medida.

Tabla: Conductividad eléctrica y térmica

Aunque esto no siempre es imprescindible y hay veces que es mejor utilizar un sensor de respuesta más lenta, con el fin de mostrar la temperatura ambiente y evitar que se muestren cambios bruscos debido a una corriente de aire frío o caliente  ocasional.

Conductividad térmica

El sensor de temperatura y humedad DHT11 es de respuesta lenta y muy válido para mostrar la temperatura en zonas abiertas, pero no es el más adecuado para medir valores en recintos pequeños (sauna, cámara frigorífica, caldera).

¿Es útil el montaje anterior?

Dependiendo del uso que le quieres dar al medidor de temperatura ambiente, tendrás que elegir el sensor de temperatura que mejor se adapte al entorno. Si quieres mostrar la temperatura en un espacio abierto, el montaje anterior te podría servir. Pero si lo quieres para hacer medidas rápidas, o para mostrar los valores dentro de en un recinto pequeño, es aconsejable añadir al esquema anterior un segundo sensor de temperatura con encapsulado metálico.

Temperatura, humedad y sensación térmica con dos sensores.

Firmware (v2)

El código de programación del medidor con doble sensor, se puede descargar desde el siguiente enlace: Temperatura y humedad (v2)

 

 

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:

ARDUINO: ENTRADAS-SALIDAS

Probaremos las entradas/salidas digitales, las salidas PWM y las entradas analógicas. Como práctica, regularemos el encendido de un diodo LED (salida PWM), dependiendo de la tensión de entrada que obtengamos en una entrada analógica. También construiremos un generador de 4 melodías, utilizando una salida digital de Arduino.

Los archivos de ejemplo que aparecen en el video, puedes descargarlos desde el siguiente enlace: ARDU_IN.rar

Arduino UNO dispone de 20 puntos de conexión: 14 Entradas/Salidas digitales, 6 de ellas podrían utilizarse como salidas PWM, y 6 entradas analógicas.

Las salidas PWM son de 8 bits, y están localizadas en los pines: 3, 5, 6, 9, 10 y 11.

Las funciones PWM hacen uso de los Timer para generar la señal de salida. Cada Timer puede controlar entre 2 y 3 de las salidas PWM. Para ello dispone de un registro de comparación por cada salida. Cuando se alcanza el tiempo correspondiente al valor del registro de comparación, la salida invierte su valor.

Cada salida conectada a un mismo temporizador comparte la misma frecuencia, aunque pueden tener distintos anchos de impulso (Duty cycle), dependiendo del valor de cada registro de comparación.

La frecuencia estándar para las salidas PWM en Arduino Uno, Mini y Nano es de 490 Hz para todos los pines, excepto para el 5 y 6 cuya frecuencia es de 980 Hz.

Al existir una asociación directa entre las salidas PWM y los Timer, es importante saber que no es posible utilizar un Timer en el programa si ya se está utilizando para controlar una salida PWM. Esta es la relación que existe entre los Timer y los controles PWM de Arduino Uno, Mini y Nano:

El Timer0 controla las salidas PWM 5 y 6
El Timer1 controla las salidas PWM 9 y 10
El Timer2 controla las salidas PWM 3 y 11

Por otra parte, la librería servo utiliza el Timer 1, de manera que tampoco podremos utilizar los pines 9 y 10 si estamos utilizando un servo.

Arduino: Entradas-Salidas

Cuando se utiliza una entrada analógica, es importante conocer el nivel de tensión máximo que vamos a muestrear. Nunca se deberían superar los  5V en las entradas, pero si podríamos utilizar umbrales máximos de menor tensión y mejorar la resolución de las medidas. Arduino dispone de la entrada AREF (pin 21 del ATmega328P) destinada para definir el nivel de tensión máximo de su conversor Analógico-Digital (ADC).

Reparación ARDUINO UNO

Sustitución del interface USB (ATMEGA 16U2) y del regulador de 5V (AMS1117), en el Arduino UNO. Localización de los componentes de Arduino UNO v3, siguiendo su esquema eléctrico. Descarga del software FLIP de ATMEL, y proceso de instalación en el PC. Recarga del fichero ‘flash’ correspondiente al Arduino UNO, en el nuevo chip (ATMEGA 16U2) que se ha sustituído. Comprobación de funcionamiento del módulo Arduino UNO, después de la reparación.

Esquema: Arduino UNO (v3)
Esquema: Arduino UNO (v3)

Para sustituir el chip ATMEGA 16U2 es necesario disponer de un soldador de aire caliente. Sin embargo, el regulador de 5V (AMS1117), a pesar de que es un componente SMD, podría sustituirse con un soldador para electrónica de tipo convencional.  Como podemos ver en el esquema anterior, el chip ATMEGA 16U2 es un micro controlador programable, y es necesario cargar un fichero  en su memoria ‘flash’ cuando se sustituye. Para programar la memoria ‘flash’ utilizaremos el software del fabricante ATMEL, el cual podemos descargar desde la página Web de MICROCHIP:

https://www.microchip.com/Developmenttools/ProductDetails/FLIP

Una vez que hayamos conectado el módulo Arduino con el PC, mediante su conexión USB. Podremos comprobar con el administrador de dispositivos de Windows si nuestro PC necesita el driver o ya lo tiene instalado. En caso de que tengamos que instalar el driver, lo haremos apuntando a la carpeta en la cuál hayamos instalado el software FLIP…

C:\Program Files (x86)\Atmel\Flip 3.4.7

Una vez que haya detectado el dispositivo nuestro PC, podremos cargar el archivo ‘flash’ que se corresponda con nuestro dispositivo Arduino (UNO, Mega, etc). El archivo que tenemos que cargar está en formato hexadecimal, y lo podemos encontrar en nuestro PC, dentro de la carpeta de Arduino

C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2\arduino-usbserial

Software: FLIP
Software: FLIP

Dentro de esta carpeta encontraremos varios ficheros, elegiremos el que se corresponda con nuestro dispositivo Arduino. Por ejemplo para el Arduino UNO, podemos cargar el fichero:

Arduino-usbserial-atmega16u2-Uno-Rev3.hex 

Puedes ver la reparación y todo el proceso de programación en el siguiente video: