lunes, 17 de octubre de 2016

Comunicación bidireccional entre Arduinos con módulos NRF24L01


En este POST realizaremos una comunicación bidireccional inalámbrica o “Duplex” por radiofrecuencia entre dos Arduinos, utilizando módulos NRF24L01, que como ya sabemos del POST anterior estos módulos son TRANCEPTORES, es decir,  mediante programación los podemos configurar como emisores o como receptores o configurarlos para que realicen ambas funciones, que es el caso que nos ocupa en este momento. La conexión de los módulos NRF24L01 a los Arduino se hace mediante SPI como siempre, aunque para diferenciar la programación de cada Arduino, los vamos a distinguir llamándolos Arduino “A” y Arduino “B”. La conexión del Hardware va a ser idéntica para los dos Arduinos, es decir, debemos de conectar un pulsador PULL DOWN al pin digital 7 y al mismo tiempo un LED al pin digital 6 de cada Arduino.


Montaje del sistema de comunicación bidireccional RF

A la hora de programar los dos Arduino, al ser una comunicación bidireccional,  tenemos que declarar esta vez dos canales (const uint64_t canal[2] = {0xF0F0F0F0E1LL,0xF0F0F0F0D2LL};). Por el canal “0” que es por el que escribe el Arduino “A” tiene que leer el Arduino “B”, y en contraposición, por el canal “1” que es por donde escribe el Arduino “B” tiene que leer el Arduino “A” como se muestra a continuación.

Canales para el sistema bidireccional RF

Una cosa muy importante es darle tiempo a los módulos para que reciban y emitan con un pequeño delay(20), aunque no os preocupéis demasiado porque ya está todo incluido dentro de los programas a descargar. El programa de cada Arduino lo primero que hace es escuchar a través del canal correspondiente para ver si le está llegando información mediante RF, es decir, el valor del estado del pulsador del otro Arduino para que en función de ese valor se encienda o apague el LED que tiene conectado, una vez verificado esto se deja de escuchar por el canal para proceder a enviar el valor del pulsador al otro Arduino, repitiéndose todo esto cíclicamente dentro de la función void loop(). Para más información acerca del funcionamiento de los programas os recomiendo leer los comentarios realizados dentro de la programación.



Lista de Materiales:

  
·         2 Arduinos UNO Rev.3.

·         Cable USB tipo A-B.

·         2 módulos NRF24L01.

·         2 Condensadores electrolíticos de 10µF y más de 5V.

·         2 Pulsadores.

·         2 Resistencias de 10KΩ.

·         2 LED 5mm (de cualquier color).

·         2 Resistencias de 220Ω.

·         Fuente de alimentación de 12VDC/3000mA (DC12300).

·         Protoboard.

·         Cables de conexión.



Código del programa:

           NRF24L01_Bidireccional_A:





          NRF24L01_Bidireccional_B:




Video:

jueves, 13 de octubre de 2016

Comunicación unidireccional entre Arduinos con módulos NRF24L01


En este POST realizaremos una comunicación unidireccional inalámbrica por radiofrecuencia entre dos Arduinos, utilizando módulos NRF24L01, cuyo funcionamiento está basado en el chip de Nordic semiconductor  NRF24, se pueden alimentan con la salida de 3.3V de nuestro Arduino, tienen muy bajo consumo, se comunican muy rápido y los podemos adquirir por muy poco dinero, que es lo que realmente nos interesa. A continuación os muestro algunas de las principales características de estos módulos: 

          Banda ISM de 2.4GHz de operación mundial.

          Hasta una velocidad de datos de 2Mbps.

          Operación a muy baja potencia.

          Voltaje de alimentación de 1.9 a 3.6V.

          ShockBurst™ Mejorado.

          Manejo de paquetes automático.

          Compatible con nRF2401A, 02, E1 y E2.

          Distancia de alcance de 70~100mts en espacio abierto.

Estos módulos son TRANCEPTORES, es decir mediante programación los podemos configurar como emisores o como receptores o configurarlos para que realicen ambas funciones, lo que les convierte en una de las mejores soluciones para realizar comunicaciones inalámbricas, ya sea para domótica, robótica, o lo que se os pueda ocurrir (juguetes, controles remotos, periféricos inalámbricos....). En el mercado existen varios modelos de módulos NRF24L01, de diferentes fabricantes, aunque siempre compatibles entre sí. Todos ellos operan en la banda de 2.4GHz, que es una banda libre de radiofrecuencia, por lo que no requieren de ningún permiso para usarse en ninguna parte del mundo, pero en contra, no tenemos garantía de que no haya alguien más emitiendo en esta banda en las cercanías, lo que puede producir interferencias en nuestra emisiones. Existe un modelo más completo, que aparte del NRF24L01 posee un circuito amplificador de potencia (PA), un circuito amplificador de bajo ruido (LNA) además de una antena SMA que en conjunto le permiten lograr un rango de hasta 1 Km (no os preocupéis demasiado que ya los analizaremos más a fondo en posteriores POST).

Módulo NRF24L01 básico

La distancia o alcance entre módulos NRF24L01 dependerá del modelo que están usando y del lugar en donde están trabajando, si hay muros, ruido, o si están en lugares abiertos. El módulo NRF24L01 con el que vamos a trabajar es el más básico, con un alcance aproximado del orden de una señal WIFI, es decir, por debajo de los 100 metros en espacios abiertos. Aunque estos módulos consumen muy poco cuando estamos trabajando con ellos (Stand By), pueden llegar a absorber en el arranque más de lo que la fuente de 3.3V de Arduino puede proporcionar, lo que impide que arranquen correctamente o que tengan un mal funcionamiento, especialmente en el caso del emisor. Esto lo podemos solucionar fácilmente alimentando los Arduinos mediante una batería de 12VDC/3000mA (fuente de alimentación externa) que administre a nuestros Arduinos una corriente suficiente en todos sus terminales. Además, para eliminar el ruido eléctrico, que en muchos casos hace que nuestros módulos NRF24L01 no funcionen, debemos de conectar un condensador electrolítico de 10µF entre VCC y GND de cada módulo (personalmente me volví loco hasta que conseguí que me funcionaran por este motivo). A continuación os muestro una tabla donde se puede ver la correspondencia de los pines de conexión del NRF24L01 a nuestro Arduino UNO.

Tabla de conexiones del módulo NRF24L01

Para la realización del programa he utilizado las librerías y que podéis descargar en el este enlace . Una vez descargadas las debéis de importar al IDE de Arduino,  para después cerrarlo y volverlo a abrir para que se carguen correctamente. Los pines CE y CSN son programables, es decir, les podemos configurar a nuestro antojo (RF24 radio(9,10)), en cambio el resto de los pines deben ser respetados puesto que son los que nuestro Arduino UNO tiene predeterminados para la comunicación SPI. Además debemos de subir a cada Arduino el programa correspondiente teniendo en cuenta la función que tiene que realizar, es decir, si se comporta como Emisor (tiene que tener un pulsador con conexión PULL-DOWN en su pin digital 7) o como Receptor (tiene que tener conectado un LED, a través de una resistencia limitadora de tensión de 220Ω, en su pin digital 7). 

Montaje del sistema de comunicación unidireccional RF

Con los programas que podemos descargar en este POST, controlamos el encendido y apagado de un LED con un solo pulsador mediante una conexión por radiofrecuencia (RF) entre dos Arduinos, a través de módulos NRF24L01. Cada vez que presionamos el pulsador conectado al Arduino Emisor, se envía mediante RF el valor de la variable estado_pulsador[0], si es la primera vez que lo presionamos se envía un "1" y si es la segunda vez un "0", repitiéndose el proceso continuamente, para que se encienda o apague un LED conectado al Arduino Receptor, que es el que obtiene a través de RF el valor de la variable estado_pulsador[0]. Cuando la variable estado_pulsador[0] vale  "1", se enciende el LED conectado al Arduino (receptor), y si vale "0",  el LED se apaga. En el supuesto de que nunca presionemos el pulsador del Arduino Emisor, no se enviará ningún valor mediante RF y como consecuencia el LED conectado al Arduino Receptor permanecerá apagado. Para una mayor información os recomiendo echar un vistazo a los comentarios realizados dentro de los programas.



 Lista de Materiales:
  

·         2 Arduinos UNO Rev.3.

·         Cable USB tipo A-B.

·         2 módulos NRF24L01.

·         2 Condensadores electrolíticos de 10µF y más de 5V.

·         1 Pulsador.

·         Resistencia de 10KΩ.

·         LED 5mm (de cualquier color).

·         Resistencia de 220Ω.

·         Fuente de alimentación de 12VDC/3000mA (DC12300).

·         Protoboard.

·         Cables de conexión. 



Código del programa:

           Emisor NRF24L01:





          Receptor NRF24L01 :




Video:


jueves, 6 de octubre de 2016

Generar frío con una Célula Peltier cerámica TEC1-12706


Hoy continuamos con nuestro aprendizaje dentro del mundo de la electrónica y por supuesto siempre con ARDUINO UNO, generando frío a partir de una célula Peltier. Está célula será controlada mediante dos pulsadores, uno para su encendido/apagado en el modo manual, donde la Célula Peltier se irá enfriando paulatinamente hasta llegar a la temperatura mínima límite (depende de la potencia con la que la alimentemos la célula), y el otro pulsador para entrar en el modo PID en el que la Célula Peltier trabajará de manera automática para mantener la temperatura de su cara fría entre unos rangos predefinidos (entre 16 y 18°C aproximadamente). La medida de dicha temperatura la realizaremos mediante el sensor de temperatura DS18B20, que montaremos sobre la cara fría de la Célula, además todo el proceso podrá ser visualizado a través de un display LCD 2004. Sin más preámbulos comenzaré analizando todos los componentes de los que necesitamos para realizar este curioso proyecto, además de mostraros la manera de enlazarlos y programarlos a través de nuestro ARDUINO.

Célula Peltier cerámica TEC1-12706

Una Célula Peltier o enfriador termoeléctrico (TEC) es un dispositivo capaz de generan una diferencia de temperatura entre sus caras cuando circula una corriente a través de él, es decir, una de sus caras se enfría (absorbe calor), mientras que la otra se calienta (emite calor). El papel de cada cara depende del sentido de la corriente, de hecho, es posible invertir el flujo de calor invirtiendo el sentido de la corriente, aunque nosotros la vamos a alimentar directamente sin invertir sus polos, es decir, polo positivo de la célula al positivo de la fuente de alimentación y el negativo al negativo. En consecuencia, puede ser utilizada para enfriar, por debajo de la temperatura ambiente, a objetos que se encuentren en contacto con su cara fría, siendo ideal en controles de temperatura como el que se desarrolla en este POST. Como dato deciros que internamente está formada por múltiples celdas de materiales N y P ubicadas entre sus dos caras cerámicas. Habitualmente se emplea Telurio y Bismuto como semiconductores y óxido de aluminio para las placas cerámicas, aunque no voy a entrar a analizar su comportamiento termodinámico en profundidad el día de hoy.

Funcionamiento de la célula Peltier

Esta célula Peltier, para su correcto funcionamiento debe ser alimentada mediante una fuente de 12VDC y 8,5A (100W), puesto que tiene que generar la suficiente potencia para alimentar los 60W aproximados que consume la célula, además de poder alimentar el ventilador del disipador que también trabaja a 12V. Dado que la célula consume una cantidad considerable de corriente hay que tener en cuenta que la fuente de alimentación  tenga la corriente suficiente, si no, no va a funcionar la célula con su máxima eficiencia. Como Arduino únicamente nos suministra salidas de 5VDC y unos pocos miliamperios, tendremos que utilizar un módulo relé de 5VDC junto con Arduino para poder controlar la potencia de la fuente de alimentación y de esta manera controlar el comportamiento de la célula Peltier (ON/OFF).

Célula Peltier con disipador, ventilador y sonda de temperatura

El problema nos surge ahora, es decir, para hacer funcionar una célula Peltier debemos dar salida al calor generado en la cara caliente, para lo cual deberemos de instalar un sistema de disipación. Cómo mínimo, debemos ubicar un disipador con ventilador en el lado caliente (el lado de la serigrafía TEC1-12706, es el lado frío). No hagáis funcionar una célula Peltier sin un sistema de disipación, puesto que elevará su temperatura rápidamente y se fundirá en pocos segundos, además las temperaturas alcanzadas son suficientemente altas para ser peligrosas al contacto. Para que exista una transferencia de calor correcta entre la célula y el disipador, es muy conveniente utilizar pasta térmica entre ambos componentes. Las caras de la celda están fabricadas en un material cerámico especial, que es un buen aislante eléctrico y buen conductor del calor, pero que es relativamente frágil mecánicamente, por lo que no debe ser sometido a golpes ni grandes esfuerzos. A continuación se destacan algunas de las características más relevantes de esta célula Peltier.

Características célula Peltier TEC1-12706

Las bajas temperaturas alcanzadas en la cara fría pueden dar lugar a la condensación de agua. Esta agua puede dañar los elementos que deseamos refrigerar, sobre todo en el caso de componentes electrónicos, por eso he optado por instalar el sensor de temperatura DS18B20 puesto que resiste eficientemente la humedad y la corrosión. El sensor de temperatura DS18B20 es un dispositivo que se comunica de forma digital con nuestro ARDUINO. Cuenta con tres terminales, los dos de alimentación y el pin “DATA”.  Con Arduino podemos “leer” la temperatura que registra este sensor mediante la comunicación OneWire, que básicamente se trata de un protocolo especial que permite enviar y recibir datos utilizando un solo cable. Para una conexión correcta de este sensor, debemos de unir sus pines VCC y GND (negro y rojo) y conectar el pin DATA mediante una resistencia de 4,7KΩ a +5VDC de ARDUINO (resistencia PULL-UP), y a su vez este pin DATA debe de ir conectado al pin digital de ARDUINO por el que leemos la temperatura, que en nuestro caso es el pin digital 6 (“PIN_sensor”), para procesar los datos posteriormente mediante programación.

Sensor de temperatura DS18B20

Es importante revisar exhaustivamente las conexiones para que el sensor pueda realizar una lectura de la temperatura de manera correcta. El código requiere de la utilización de dos librerías (DallasTemperature.h y OneWire.h), que deben ser descargadas e instaladas dentro del IDE antes de cargar el código a nuestro ARDUINO. A continuación os muestro las principales características de este sensor de temperatura.

Características sensor de temperatura DS18B20

El display LCD 2004 de 4 filas y 20 caracteres por fila, además de alimentarlo correctamente (+5V y GND de Arduino) lo conectamos a nuestro Arduino mediante protocolo I²C (pines SDA y SCL), para poder visualizar el estado del sistema en todo momento (temperatura y  modos de funcionamiento). Los dos pulsadores se han de conectar a través de una resistencia de 10KΩ a GND de Arduino (resistencia PULL-DOWN), y a su vez un pulsador lo conectaremos al pin digital 8 (“Pulsador_Peltier”) de ARDUINO para el modo normal de funcionamiento ON/OFF de la célula Peltier y el otro pulsador al pin digital 7 (“Pulsador_PID”) para el modo de funcionamiento PID, donde la célula trabaja automáticamente entre un rango de temperaturas. Por último decir que el pin de control del módulo relé de 5VDC debe de ir conectado al pin digital 9 (“RELE”) de nuestro ARDUINO. Para una mayor información os recomiendo consultar el esquema de conexión y los comentarios realizados dentro del programa, que debemos de subir a nuestro ARDUINO para el correcto funcionamiento del sistema.



Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Módulo LCM 2004 I2C V1.

·         Display 20x4 LCD 2004.

·         Célula Peltier cerámica TEC1-12706 (12VDC – 60W).

·         Fuente de alimentación de 12VDC – 8,5A (modelo CD-100W).

·         Disipador de CPU con ventilador de 12VDC.

·         Pasta térmica (HY410).

·         Sensor de temperatura DS18B20 (sumergible).

·         Módulo relé de 5VDC (SRD-05VDC-SL-C).

·         2 Pulsadores.

·         2 Resistencias de 10KΩ.

·         1 Resistencia de 4,7KΩ.

·         Protoboard.

·         Cables de conexión.




Código del programa:





Video: