Archivo de la categoría: Componentes

Dispositivos optoelectrónicos programables construidos por proteínas modificadas genéticamente

Investigadores rusos y sus colaboradores internacionales desarrollan una fotocélula bioelectrónica completamente funcional utilizando una molécula de una proteína fluorescente unida a un nanotubo de carbono.

Cuando se expone a la luz, el sistema puede cambiar sus propiedades electrónicas y funcionar emitiendo luz o como una célula de memoria, dependiendo de cómo se adjunte la proteína al tubo. Los hallazgos del equipo abren la puerta a nuevos elementos electrónicos, dispositivos de memoria y células solares ecológicos.

En láseres, diodos emisores de luz (LED) y algunos dispositivos de memoria se utilizan dispositivos optoelectrónicos capaces de almacenar y transmitir información respondiendo a varias longitudes de onda de luz. Son de particular interés los sistemas híbridos que contienen biomoléculas, como proteínas, junto con elementos electrónicos. Gracias a su bajo costo, seguridad ambiental y buen desempeño óptico, los sistemas híbridos pueden usarse como componentes en electrónica molecular, LED, láseres avanzados y transistores ópticos.


Microchip con un transistor bio-optoelectrónico

Investigadores del Instituto de Tecnología Electrónica de Moscú (MIET), el Instituto de Física Lebedev de RAS y el Instituto de Ciencia y Tecnología Skolkovo (Skoltech) en Moscú y sus colegas del Reino Unido, Finlandia y Serbia, modificaron nanotubos de carbono utilizando la proteína fluorescente verde (GFP).

«En la configuración examinada, un nanotubo de carbono de pared simple (SWCNT) funciona como un conductor activo y portador de una molécula de proteína, mientras que el grupo de fenilazida proporciona un entrecruzamiento covalente para los portadores de carga comunes entre los componentes del dispositivo», explica el profesor de Skoltech Albert Nasibulin, jefe del Laboratorio de Nanomateriales.

Al observar la estructura de los compuestos resultantes, el equipo descubrió que la proteína puede ayudar a controlar el tipo de elemento optoelectrónico que resultará. Dado que el sistema puede intercambiar energía y portadores de carga con el medio ambiente, los autores aprovecharon esta capacidad para construir nuevos nanodispositivos.

“El nanotubo de carbono es indispensable para las estructuras de sensores biomímicos, ya que ayuda a registrar hasta los más mínimos cambios en la estructura y la carga de las biomoléculas individuales a las que está vinculado”, comenta Nikita Nekrasov, estudiante de posgrado en MIET.

Los nanotubos de carbono tienen muchos electrones libres que pueden migrar a la proteína GFP y regresar a través del puente de fenilazida. Los investigadores probaron diferentes opciones de fijación de la GFP, colocando el cilindro en posición vertical o lateral, para ver cómo se comportaba la fotocélula. Descubrieron que si la proteína se colocaba de lado con su lado repelente al agua unido al tubo, todo el sistema se comportaba como un foco que controlaba la conductividad del tubo. Esto sucede porque encender y apagar la luz de excitación provoca un intenso intercambio de electrones entre el nanotubo y la proteína. En cambio, si se unía al tubo la parte de absorción de agua de la proteína, la carga quedaba atrapada entre el nanotubo y la proteína, lo que permitía que el dispositivo almacenara información durante docenas de minutos. A la vez, el elemento permaneció estable durante mucho tiempo gracias a la cubierta proteica protectora.

“Nuestros hallazgos ayudarán a crear dispositivos controlados por luz potentes y compactos para el almacenamiento y transmisión de información. Además, ambas partes de nuestros elementos son biodegradables y, por lo tanto, se pueden utilizar para crear células solares amigables con el medio ambiente”, señala Ivan Bobrinetsky, Doctor en Ciencias Técnicas, director de proyectos de subvenciones de RSF e investigador principal de MIET.

________________________________________
Artículo original: La investigación, que fue apoyada por una subvención de la Russian Science Foundation (RSF), se publicó en la revista Advanced Functional Materials

Medición de temperatura y humedad con DHT11

El sensor integrado DHT11 permite obtener datos de la temperatura y humedad ambiente con facilidad. Es utilizable perfectamente en estaciones meteorológicas, locales o remotas, sistemas de control ambiental en el hogar, y equipos de monitoreo de invernaderos, cultivos o jardines.

Una de las ventajas de este sensor es que, a diferencia de otros sensores analógicos, como el LM35, nos envía la información en serie, de modo que se puede conectar a una entrada digital del microcontrolador. Así se evitan los problemas de ruido inherentes a las líneas que conducen señales analógicas.



Rangos de medición y precisión del DHT11:

  • Rango de humedad: 20-90% HR (Humedad Relativa)
  • Precisión de humedad: ±5% HR (Humedad Relativa)
  • Rango de temperatura: 0-50 °C
  • Precisión de temperatura: ±2% °C
  • Voltaje de funcionamiento: 3 V a 5,5 V.

Veremos primero un poco sobre la Humedad. Luego estudiaremos cómo mide la humedad el DHT11. Después explicaremos cómo conectarlo a un Arduino y mostraremos un código de ejemplo para utilizar el DHT11 en tus proyectos.

¿Qué es la Humedad Relativa?

El DHT11 mide humedad relativa. La humedad relativa es la cantidad de vapor de agua en el aire ( e, o «presión de vapor real» ) respecto al punto de saturación de vapor de agua en el aire ( es , o «presión de vapor estándar», que es el valor correspondiente a 100%). En ese punto de saturación ( es ), el vapor de agua comienza a condensarse y acumularse en las superficies formando rocío.

El punto de saturación cambia con la temperatura del aire. El aire frío puede contener menos vapor de agua al saturarse, y el aire caliente puede contener más vapor de agua al saturarse.

La fórmula para calcular la humedad relativa es:



DHT11, un sensor integrado para la temperatura y humedad

El DHT11 se puede comprar en dos presentaciones: el sensor individual, que es una cápsula plástica integrada como la que se ve en la foto inicial de este artículo, o el mismo módulo básico DHT11 pero soldado en una placa de circuito impreso de base.

Hay una diferencia de precio que, a nuestro entender, no es justificada. La versión con plaqueta base (Printed Circuit Board) viene con un resistor de polarización a VCC (pull-up) y en ocasiones un LED que indica que está alimentado. La versión  sin plaqueta base tiene 4 pines y la versión con plaqueta base tenemos 3 pines.

Las conexiones son levemente diferentes, y en cada modelo hay que leer los rótulos en el borde de la plaqueta para identificar bien dónde hacer las conexiones. Lo más importante es determinar cuál es la alimentacion, VCC, generalmente +5V, y cuál es tierra o negativo. El pin de señal, identificado con S, OUT, DOUT, DATA, como es obvio queda determinado por descarte.



DHT11 sin plaqueta base

Los pines de la versión sin PCB del DHT11 son:

  • VCC: alimentación
  • I/O: transmisión de datos
  • NC: no conecta, pin al aire
  • GND: conexión a tierra



DHT11 sobre plaquetas

Los pines de la versión con PCB del DHT11 son:

  • GND: conexión con tierra
  • DATA: transmisión de datos
  • VCC: alimentación

Características técnicas del DHT11

Siempre es aconsejable dar una mirada a la hoja de características técnicas para ver detalles de funcionamiento el DHT11.

Hoja de datos del DHT11

Modelo DHT11
Alimentación de 3,5 V a 5 V
Consumo 2,5 mA
Señal de salida Digital
Temperatura  
Rango de 0°C a 50°C
Precisión a 25°C ± 2°C
Resolución 1°C (8-bit)
Humedad  
Rango de 20% RH a 90% RH
Precisión entre 0°C y 50°C ± 5% RH
Resolución 1% RH

¿Cómo envía datos el DHT11?

La señal de salida es digital, enviada en serie por una sola línea.

Hay al menos dos versiones del sensor de temperatura y humedad DHT11, veremos cómo tendríamos que conectarlo a un Arduino. En cualquiera de los casos, ingresamos a un pin digital.

La alimentación puede ser de 3,5V a 5V. No es problema al conectarlo a un Arduino estándar, ya que tenemos salida de 5V. No funcionará alimentándolo con la salida de 3,3 V, ya que el valor está por debajo de las especificación de alimentación del módulo.

Antes de conectar el sensor es conveniente ver estas consideraciones:

  • La hoja de datos recomienda un resistor de polarización (pull-up) de 5 kΩ para un cable de longitud de hasta 20 metros. No es un valor que se consiga fácil, por lo que utilizaremos un valor estándar de 4.7KΩ, o mejor 5.6KΩ.
  • Se recomienda tomar mediciones cada 5 segundos. Un periodo menor puede ocasionar que los datos no sean precisos.

Una vez leídas y entendidas las consideraciones, veremos los diagramas para los dos modelos.

Conexionado para el DHT11

Para conectar el circuito de una aplicación típica con un DHT11, debemos poner un resistor de polarización (pull-up) conectado a la salida digital.

El sensor tiene 4 pines: VCC (de 3,5V a 5V), la entrada/salida digital, un pin sin uso (NC, no conectado), y la toma de tierra GND.




El diagrama de conexión es el siguiente:



Conexionado para el DHT11 sobre una plaqueta base

El DHT11 ya soldado en un PCB posee el resistor pull-up. Puede resultar muy útil en ocasiones, pero si añadimos un cable de más de 20 metros, deberemos tener en cuenta este factor.

Este módulo con DHT11 dispone de 3 pines: la toma de tierra GND, DATA para los datos, y la alimentación VCC (de 3,5V a 5V). En la siguiente imagen se puede ver el esquema de conexión con Arduino.



Diferentes versiones del módulo DHT11 montado sobre una plaqueta

Debido a la amplia variedad de montajes que se encuentran en el mercado, todas ellas con diferentes disposiciones de señales al exterior, es importante leer la indicación impresa en la plaqueta. Por lo general se observa un signo +, un signo -, y la señal marcada como S, OUT, DOUT o DATA. Es recomendable mirar muy bien las indicaciones antes de conectar, en especial dónde se debe aplicar la alimentación: GND o tierra y VCC o 3,5 a 5V



Programando el DHT11 desde el IDE de Arduino

Mostrar Humedad y Temperatura en el Monitor Serie

Para trabajar con el DHT11 en el Arduino, lo más práctico es instalar la biblioteca DHTlib, que ya viene con todas las funciones necesarias para obtener las lecturas de humedad y temperatura del sensor.

Es fácil de instalar, simplemente descargue el archivo DHTlib.zip en el enlace a continuación y abra el IDE de Arduino. Luego vaya a Sketch > Include Library > Add .ZIP Library y seleccione el archivo DHTlib.zip

DHTlib

Una vez que se ha instalado, cargue este programa de ejemplo en Arduino y abra el monitor serie:

#include <dht.h>
dht DHT;
#define DHT11_PIN 7

void setup(){
  Serial.begin(9600);
}

void loop(){
  int chk = DHT.read11(DHT11_PIN);
  Serial.print("Temperatura = ");
  Serial.println(DHT.temperature);
  Serial.print("Humedad = ");
  Serial.println(DHT.humidity);
  delay(5000);
}

Si todo funciona correctamente, debería ver las lecturas de humedad y temperatura a intervalos de 5 segundos.

Si no desea utilizar el pin 7 para la señal de datos, puede cambiar el número de pin en la línea 5 donde dice #define DHT11_PIN 7.

Uso de los datos en otros programas

¿Qué sucede si no desea solo tomar las lecturas reales de Humedad y Temperatura, pero las necesita para calcular o controlar otras cosas? El siguiente código es el mínimo necesario para inicializar el sensor. Puede agregar esto a los programas existentes y usar DHT.humedad y DHT.temperatura como variables en cualquier función.

#include <dht.h>
dht DHT;
#define DHT11_PIN 7

void setup(){
// sin contenido
}

void loop(){
  int lectura = DHT.read11(DHT11_PIN);

// aquí líneas de código para utilizar los datos en la variable 'lectura'

  delay(1000);
}

Artículos Relacionados:



Hoja de datos del sensor de temperatura y humedad DHT11

Introducción

El módulo medidor de temperatura y humedad DHT11 posee en su interior un conjunto de detectores de temperatura y humedad con una salida calibrada de señal en formato digital.

Mediante el uso de una exclusiva técnica digital de adquisición de señales y tecnología de detección de temperatura y humedad, garantiza una alta confiabilidad y una excelente estabilidad a largo plazo.

Este sensor incluye un componente de medición de humedad de tipo resistivo, y un componente de medición de temperatura NTC conectados a un microcontrolador de 8 bits de alto rendimiento, lo que ofrece excelente calidad, rentabilidad, respuesta rápida y capacidad anti-interferencias.



Cada dispositivo DHT11 está estrictamente calibrado en laboratorio hasta que es extremadamente preciso en su medición de la humedad. Los coeficientes de calibración se almacenan como programas en la memoria OTP (One Time Programming), y son utilizados por el proceso interno de detección de señales del sensor.

La interfaz serie de un solo cable hace que la integración del sistema sea rápida y sencilla.

Su pequeño tamaño, bajo consumo de energía y capacidad de transmisión de señal de hasta 20 metros lo convierten en la mejor opción para diversas aplicaciones, incluyendo las más exigentes.

Cápsula:

El componente está integrado en una cápsula con una sola fila de 4 pines. Es práctico de conectar y el fabricante ofrece proporcionar cápsulas especiales a solicitud de los usuarios.

Especificaciones técnicas:

Datos básicos:

Especificaciones detalladas:

Uso típico:


Nota: Pin 3 no conectado. MCU = microcomputador o computador en un chip

Cuando el cable de conexión tiene una longitud inferior a 20 metros, se recomienda un resistor de polarización (pull-up) de 5K; cuando el cable de conexión tenga más de 20 metros, elija un resistor pull-up adecuado, según sea necesario.

Alimentación y salida de datos

La fuente de alimentación de DHT11 es de 3-5,5 V CC.

Cuando aplique energía al sensor, espere 1 segundo hasta que se encuentre estable.

Se puede agregar un capacitor de alrededor de 100 nF entre VDD y GND para filtrar la fuente de energía.

Proceso de comunicación: interfaz serie (un solo cable bidireccional)

Se utiliza un formato de datos sobre una línea única para la comunicación y sincronización entre un MCU y el sensor DHT11. Un proceso de comunicación dura aproximadamente 4 ms.

Los datos consisten de partes decimales y enteras. El bloque completo de datos consiste en 40 bits, y el sensor envía primero el bit de datos más alto.


Formato de la secuencia de 5 bytes = 40 bits

Formato de datos:

8 bits de datos enteros de Humedad Relativa +
8 bits de datos decimales de Humedad Relativa +
8 bits de datos enteros de Temperatura +
8 bits de datos decimales de Temperatura +
8 bits de Suma de verificación (check-sum).

Si la transmisión de datos es correcta, la suma de verificación debe ser igual a

los 8 bits de datos enteros de Humedad Relativa +
los 8 bits de datos decimales de Humedad Relativa +
los 8 bits de datos enteros de Temperatura +
los 8 bits de datos decimales de Temperatura.

Proceso general de comunicación (graficado en la figura a continuación)

Cuando el MCU envía una Señal de Inicio, el DHT11 cambia del Modo de Bajo Consumo de Energía al Modo de Ejecución, y espera a que termine la señal de inicio del MCU.

Una vez que ésta se completa, el DHT11 envía al MCU una señal de respuesta que contiene los 40 bits de datos con la información sobre la temperatura y la humedad relativa.

Los usuarios pueden optar por tomar solo alguno de los datos.

Sin la Señal de Inicio del MCU, el DHT11 no enviará ninguna señal al MCU.

Una vez que se han obtenido los datos, el DHT11 cambiará al Modo de Bajo Consumo de Energía hasta que reciba de nuevo una señal de inicio del MCU.


Proceso general de comunicación

El MCU envía la señal de inicio al DHT (graficado en la figura a continuación)

En Estado de Reposo, la línea única de datos (bus) está en un nivel de voltaje ALTO. Cuando comienza la comunicación entre el MCU y el DHT11, el programa del MCU pondrá el nivel de voltaje de la línea única de datos a un nivel BAJO. Esta Señal de Inicio debe durar al menos 18ms para garantizar que el DHT detecte la señal del MCU. Luego el MCU dejará la línea de nuevo libre y flotante, esperando durante 20 a 40us la respuesta del DHT.


MCU envía la Señal de Inicio y el DHT responde

Respuesta del DHT al MCU (Figura arriba)

Una vez que el DHT detecta la Señal de Inicio, enviará una señal de respuesta de nivel de voltaje BAJO durante 80us. Luego, el programa del DHT pone el nivel de voltaje de la línea única de datos de BAJO a ALTO y lo mantiene durante 80us, mientras el DHT se prepara para enviar datos.

Del lado del MCU, cuando la línea única de datos está en el nivel de voltaje BAJO significa que el DHT está enviando una señal de respuesta. Una vez que el DHT envía esa señal de respuesta, pone la línea en ALTO (flotante, convirtiendo el puerto digital en entrada) y la mantiene durante 80us. Así se prepara para la transmisión de datos.

Cuando el DHT está enviando datos al MCU, cada bit de datos comienza con un nivel de BAJO voltaje de 50us y la longitud de la siguiente señal de nivel de voltaje ALTO determina si el bit de datos es «0» o es «1» (consulte las figuras a continuación).


Transmisión de bit «0»


Transmisión de bit «1»

Una vez que el DHT detecta la Señal de Inicio, enviará un nivel de voltaje BAJO. Si la señal de respuesta del DHT siempre está en un nivel de voltaje ALTO, esto indica que DHT no está respondiendo correctamente. Verifique la conexión. Cuando se transmite el último bit de datos, el DHT11 pone un nivel de voltaje BAJO y lo mantiene durante 50us. Luego, el voltaje de la línea única de datos será fijado en ALTO por el resistor, estableciéndose el estado flotante de línea libre.

Características Eléctricas

Nota: El intervalo de muestreo no debe ser inferior a 1 segundo

Cuestiones importantes – Condiciones de funcionamiento

(1)
Rango de Trabajo

El uso del sensor DHT11 fuera del rango de trabajo indicado en esta hoja de datos puede resultar en un cambio/discrepancia de la señal de Humedad Relativa del 3 %. El sensor DHT11 puede recuperarse gradualmente al estado calibrado cuando vuelve a la condición de funcionamiento normal y funciona dentro de su rango. Consulte (3) de esta sección para acelerar su recuperación. Tenga en cuenta que operar el sensor DHT11 en condiciones de funcionamiento anormales acelerará el proceso de envejecimiento del sensor.

(2)
Atención a los materiales químicos

El vapor de los materiales químicos puede interferir con los elementos sensibles de DHT y degradar su sensibilidad. Un alto grado de contaminación química puede dañar permanentemente el sensor.

(3)
Proceso de restauración cuando suceden (1) y (2)

    Paso uno: Mantenga el sensor DHT en condiciones de Temperatura 50~60° Celsius, humedad <10% HR por 2 horas;

    Paso dos: Mantenga el sensor DHT en la condición de Temperatura 20~30° Celsius, humedad >70%HR durante 5 horas.

(4)

Temperatura, etc.

La humedad relativa depende en gran medida de la temperatura. Aunque la tecnología de compensación de temperatura se utiliza para garantizar una medición precisa de la HR, se recomienda encarecidamente mantener los sensores de humedad y temperatura funcionando a la misma temperatura. DHT11 debe montarse en el lugar lo más lejos posible de las partes que puedan generar calor.

(5)
Efecto de la Luz

La exposición prolongada a la luz solar intensa y a los rayos ultravioleta puede degradar el rendimiento de DHT.

(6)
Cables de conexión

La calidad de los cables de conexión afectará la calidad y la distancia de la comunicación y se recomienda un cable blindado de alta calidad.

(7)
Otras precauciones

• La temperatura de soldadura debe ser inferior a 260°C y el contacto debe durar menos de 10 segundos.

• Evite usar el sensor en condiciones de rocío.

• No utilice este producto en dispositivos de seguridad o parada de emergencia o en cualquier otra ocasión en la que la falla de DHT11 pueda causar lesiones personales.

• Almacenamiento: Mantenga el sensor a una temperatura de 10-40°C, humedad <60% HR.

Módulos de relé y Arduino: Domótica (1)

En este artículo ofrecemos información para controlar dispositivos que funcionan con el voltaje de red usando un módulo de relé. Al final de este trabajo usted debería poder controlar cualquier dispositivo eléctrico con un microcontrolador como el Arduino.

Módulo de dos relés

Un relé es un interruptor mecánico operado eléctricamente que se puede encender o apagar, dejando pasar la corriente o no, y se puede controlar con voltajes bajos, como los 5V utilizados en la alimentación de un Arduino.

Nota: «NO» corresponde al inglés Normally Open (normalmente abierto) y «NC» a Normally Closed (normalmente cerrado). Un relé desactivado tiene unidos entre sí los contactos COMÚN y NC, y cuando se lo activa aplicando corriente a su bobina, quedan unidos entre sí los contactos COMÚN y NO.

Controlar un módulo de relé con el Arduino es lo mismo que controlar cualquier otra salida digital. El consumo de corriente de una de sus entradas es el mismo que se necesita para encender un led.

Aquí vemos cómo los relés están marcados en la parte de abajo, del mismo modo que se puede ver el símbolo con la disposición de los contactos del relé en la salida de alto voltaje del módulo:

Diagrama interno de los módulos de relé (se muestra para un solo relé, los circuitos se repiten)

En primer lugar veamos el esquemático que ofrece el fabricante:

El conector amarillo horizontal, el que no tiene un nombre de identificación, es el juego de pines de entrada de alimentación. Por allí ingresan al módulo tres valores:

GND, común o tierra.
VCC o alimentación positiva de 5V para la parte de la lógica de entrada: el resistor R1, la sección de emisión de luz de U1 (pines 1 y 2 del optoacoplador), N1 (led indicador) y IN0 (entrada del control).
■ Y JD-VCC, por donde ingresan 5V para alimentar el circuito de accionamiento del relé, compuesto por el fototransistor de U1 (pines 3 y 4 del optoacoplador), el resistor R2, el transistor Q1 para manejar la corriente de la bobina, D1 (diodo para eliminar la contracorriente del bobinado) y la bobina en sí del relé.

El conector J1 lleva al exterior los contactos del relé:

■ 1 es NO (Normally Open = Normalmente Abierto)
■ 2 es C, el contacto Común
■ 3 es NC (Normally Closed = Normalmente Cerrado).

Como es posible que algún lector no conozca el funcionamiento de un optoacoplador (también llamado optoacople), lo explicamos aquí.

Un optoacoplador es un chip como el de la imagen. Posee una entrada de dos pines (1 y 2 en el diagrama) que conectan a un led (diodo emisor de luz) y una salida de dos pines que conectan a un fototransistor (3 y 4 en el diagrama). El encendido del led pone en conducción al fototransistor, lo que cierra circuito entre su colector (pin 4) y su emisor (pin 3). Lo más importante del funcionamiento es que no hay contacto eléctrico entre entrada y salida. El único contacto es la luz emitida por el led, lo que implica una aislación muy elevada entre entrada y salida (en el orden de los 5000V), protegiendo las entradas (en este caso conectadas a un microcontrolador) ante cualquier riesgo de alto voltaje producido en el área de salida.

Estado desactivado del relé:

Estado activado del relé:

El módulo de relé de la foto del principio de este artículo tiene dos canales (los relé son las piezas azules). Hay otros modelos con uno, cuatro, ocho y hasta dieciséis canales. Este módulo debe ser alimentado con 5V, lo que es apropiado para usar con un Arduino. Hay otros módulos de relé que funcionan con 3,3V, ideal para ESP32, ESP8266 y otros microcontroladores, y también hay modelos de 12V.

Conexiones del módulo de relé

La siguiente figura muestra la función de los contactos del módulo de relé.

Los seis pines en el lado izquierdo del módulo del relé controlan voltaje alto, y los pines en el lado derecho se conectan al componente que entrega bajo voltaje, como los pines digitales de un Arduino u otro microcontrolador.

Conexiones de tensión de red

El lado de alto voltaje tiene dos conectores, cada uno con tres contactos: común (COM), normalmente cerrado (NC: Normally Closed) y normalmente abierto (NO: Normally Open).

COM : pin común

NC (Normalmente cerrado): la salida normalmente cerrada se usa si es necesario que el relé cierre circuito en estado de reposo, sin alimentación incluso, de modo que la corriente fluya por estos contactos hasta que se envíe una señal por las entradas del módulo para abrir ese circuito y detener la corriente.

NO (normalmente abierto): la configuración normalmente abierta funciona a la inversa: este contacto del relé está siempre abierto, y el circuito no conduce corriente a menos que se envíe una señal por su entrada para activar el circuito.

Si solo se desea encender una lámpara ocasionalmente, lo mejor es usar la configuración de circuito normalmente abierto.




Cableado de pines

El lado de baja tensión tiene un conjunto de cuatro pines, y otro conjunto de tres pines.

El conjunto señalado con flechas de color posee las conexiones de VCC y GND para alimentación de la lógica digital del módulo (esencialmente, los leds de los optoacopladores de entrada), y la entrada 1 (IN1) y entrada 2 (IN2) para controlar los relés 1 y 2, respectivamente, aplicando un nivel lógico BAJO.

El otro conjunto de pines (señalado por flechas grises) tiene los pines JD-VCC, VCC y GND. El pin JD-VCC es la alimentación para los electroimanes de los relés, y se lo alimenta generalmente con una fuente de 5V separada. Para hacerlo se retira el puente (celeste en la imagen) que une la alimentación de los leds de los optoacopladores con la alimentación de las bobinas de los relés. Usando dos fuentes independientes se obtiene la máxima separación eléctrica entre las entradas de control y la línea controlada de 220V, u otro voltaje superior a 5V, en las salidas.

NOTA: observe que el módulo tiene un puente que conecta los pines VCC y JD-VCC; el que se muestra aquí es azul, pero el de su módulo puede ser de un color diferente. El puente permite elegir si el circuito está físicamente conectado a los 5V del Arduino o no, y se puede optar por tenerlo colocado o no. Con el puente puesto, los pines VCC y JD-VCC están unidos. Eso significa que el electroimán del relé se alimenta directamente del pin de alimentación del Arduino, de modo que el módulo de relé y los circuitos de Arduino no están físicamente aislados entre sí. Sin el puente, se debe proporcionar una fuente de alimentación independiente para activar el electroimán del relé a través del pin JD-VCC. Esa configuración aísla físicamente los relés del Arduino, gracias al optoacoplador incorporado en el módulo.

Las conexiones entre el módulo de relé y el Arduino son realmente simples:

GND : va a común o “tierra” (lado negativo de la alimentación)
IN1 : controla el primer relé (se conectará a un pin digital Arduino)
IN2 : controla el segundo relé (debe estar conectado a un pin digital Arduino si se está utilizando este segundo relé. De lo contrario, no necesita conectarlo)
VCC : va a 5V

Luego de esta introducción para familiarizarnos con los módulos, veremos algunos detalles mecánicos y electrónicos, y luego un ejemplo sencillo para controlar el relé con un programa en el Arduino.

Un relé por dentro:


Conclusión

Controlar un módulo de relé con el Arduino es tan simple como controlar una salida digital: solo se deben enviar señales ALTAS o BAJAS utilizando un pin digital de Arduino, u otro microcontrolador o circuito digital. Con el módulo de relé se pueden controlar casi todos los dispositivos caseros de corriente alterna (no solo lámparas). Si usted va a manejar motores, es conveniente utilizar un componente de potencia de mayor capacidad, por ejemplo un relé de estado sólido.

Esta recomendación se debe a que los contactos de un relé que maneja excesiva corriente con voltajes altos producen chispas al abrirse y al cerrarse, y el efecto es mucho más si la carga que manejan es inductiva (bobinados). Luego de un tiempo, los contactos metálicos pueden quedar pegados entre sí, o dejar de conducir corriente por la carbonización del metal.

En la foto que sigue se muestran a la izquierda contactos de relé en perfectas condiciones, y a la derecha cómo quedan cuando son afectados por las chispas debidas a sobrecargas de corriente.

Prueba 1:

Para visualizar de manera rápida y simple la activación de un relé con una lámpara conectada, usted puede correr el programa básico Blink que se ofrece en la lista de ejemplos del IDE de Arduino, conectando la entrada (IN1, por ejemplo) al pin digital 13, y alimentando el módulo con 5V y GND desde las salidas del Arduino. Esto solo es conveniente como experimento, una prueba simple, pero recuerde que hay que limitarse a trabajar con un solo un relé conectado y activado a la vez. El relé cerrará cada vez que el led se apague, una vez por segundo.

Diagrama para la prueba:

En el artículo que sigue, Activar relés usando línea serie: Domótica (2), mostraremos una de las maneras de comandar estos módulos para su uso en control de luces y artefactos eléctricos.

Artículos relacionados:

Módulos de relé y Arduino: Domótica (1)
Control con relés por interfaz serie: Domótica (2)
Control de relés con control remoto IR: Domótica (3)
Control de relés por enlace de 2,4 GHz – módulos NRF24L01: Domótica (4)
Descripción y funcionamiento del Bus I2C
¿Qué es la comunicación serie?



Manejo preciso de servos en Arduino: grados y milisegundos

Siendo miembro de grupos donde uno se entera de diversos problemas que se les presentaron a otros, a veces uno que resulta básico pero nunca se le ha presentado. En este caso se trató de un problema con el manejo de un servo que es el más vendido para los que se inician, y que a demás viene con los kits básicos de Arduino: el mini o micro servo SG90. El problema se presenta con la biblioteca Servo, pero también puede ocurrir con otro programa.

Me dije —ya que he manejado servos desde antes de que apareciera Arduino— que el problema debía ser una señal de posicionamiento incorrecta. Para entender bien de qué hablo, le pueden dar una mirada al artículo Servos: características básicas.

Una señal se comprueba con osciloscopio. Por suerte dispongo tanto de uno antiguo, con pantalla CRT, como de los que se pueden comprar ahora dentro de la familia Arduino, dotado de un pantalla TFT.

Después de algunas mediciones, me di cuenta de que el funcionamiento de la biblioteca Servo.h de Arduino deja un poco que desear, ya veremos por qué. Pero también ofrece una herramienta (en la función servo.attach) que, bueno, puede ser que no hayamos investigado y que por algo está disponible. Esto puede parecer algo para principiantes, pero hasta que uno empieza a tener estas complicaciones no se da cuenta, y luego de tener una comprensión mejor se logra usar la biblioteca de servo de Arduino con facilidad y dominando lo que hace.

Función write()

La razón de ser de una biblioteca es que uno se pueda desentender del manejo de programa específico de un elemento conectado a una placa de microcontrolador, y bueno, la biblioteca Servo de Arduino fue hecha para facilitar el control de los servos con un mínimo de código y complicaciones. La página de referencia de Arduino para el comando write(), que es parte de la biblioteca Servo.h, trae el siguiente código de ejemplo:

Este código de ejemplo le indica a un servo, conectado en este caso al pin 9, que se mueva a su posición central (que se define como 90°). Si se tratara de un servo de rotación continua, esto detendrá el movimiento del servo… pero este es tema para otro artículo.

Al correr este pequeño programa de demostración, los servos que se han conectado a ese pin se colocarán en sus posiciones centrales. Pero bueno, si lo consideramos desde la faceta mecánica, este punto medio puede que en algunos servos no sea exactamente el centro del arco completo del recorrido.

Un pulso con un ancho de 1.500 microsegundos debe corresponder a 90°, posición definida como el punto central del recorrido. Los servos más comunes aceptan entradas de 1.000 µs (1 ms) a 2.000 µs (2 ms), y 1.500 µs (1,5 ms) correspondientes a la posición central. Para un servo con un recorrido de 0 a 180°, esto sería 90°.





Ahora me toca aclarar que siempre utilicé valores en microsegundos para controlar servos, ya que la precisión del posicionamiento es mucho mayor. La biblioteca de servos permite usar el comando writeMicroseconds, que define el ancho de pulso exacto que se desea enviar a un servo. Los problemas comienzan cuando se usan ejemplos —ya escritos— en los que se utiliza el comando de escritura con un parámetro en grados (en el ejemplo de arriba, 90°).

Parecería lógico que un comando de escritura que instruye a un servo para que se ajuste a 90° debería enviar los mismos pulsos que un comando writeMicroseconds que envía pulsos de 1.500 µs. Es decir, write(90) y writeMicroseconds(1500) deberían enviar pulsos idénticos de 1500 µs. Pero resulta que esta suposición puede llevarnos a problemas.

Basándome en un ejemplo de internet, subí el siguiente código a un Arduino UNO R3, y visualicé las señales con osciloscopio.

Aquí es cómo se ven las salidas de los pines 3, 4 y 5:

■ El pin 3 de Arduino, fijado en 90°, da un pulso de 1,472 ms
■ El pin 4 de Arduino produce un pulso de 1.500 µs: 1,500 ms
■ El pin 5 de Arduino, fijado en 90°, da un pulso de 1,500 ms

El ancho de pulso se mide con el programa del osciloscopio. Por las dudas de que sea un problema técnico del osciloscopio, midiendo con un papel superpuesto sobre la pantalla se puede observar que sí existe la diferencia.

Y también al superponer señales, se observa la diferencia.

Esta diferencia entre 1.472 µs y 1.500 µs es pequeña y puede ser que ni siquiera implique diferencias en las posiciones del servo.

Si se observa la señal de servo3, que también programa el movimiento del servo con el parámetro de colocarse en posición de 90°, se nota que el ancho del pulso es correcto, 1.500 µs, el mismo que para servo2, para el que se fijó el pulso en forma directa en 1.500 µs.

El comando write(90) es el mismo en la primera y la tercera señal de servo, así que… ¿por qué uno envía un pulso de 1,472 ms y el otro 1,500 ms?

Arduino attach()

La respuesta está en el comando attach de la librería Servo. La página de referencia de Arduino enumera dos formas del comando:

La primera versión es el código mínimo que requiere un programa para designar un pin de E/S para el control de un servo. El segundo formato incluye dos parámetros muy importantes, pero opcionales, que determinan el rango mínimo y máximo de ancho de pulso para el programa. Es posible que en el ejemplo de arriba, el uso de límites en el segundo servo haya acomodado los valores de tiempo para que el tercero reciba un pulso correcto; pero al volver el bucle al principio y correr la función para 90º sin topes definidos, se vuelve a desacomodar.

Tanto en la página de referencia del comando attach en arduino.cc como en la propia biblioteca Servo, se establece claramente que las configuraciones mínimas y máximas predeterminadas son 544 y 2.400 µs, respectivamente. Pero como hay servos con diferentes extremos de carrera, se pueden fijar estos límites “opcionales” de ancho de pulso, que en realidad —para evitar dolores de cabeza y roturas de los servos— sería bueno acostumbrarse a usar.

Si uno está habituado a usar el comando writeMicroseconds en lugar de write, es posible que nunca haya pensado en los parámetros de ancho de pulso mínimo y máximo. Pero si se usa el comando write y se establecen las posiciones de los servos con ángulos y grados, entonces DEBEMOS definir explícitamente estos parámetros en los programas de Arduino que usan Servo.h, previa lectura de los datos indicados en la hoja de datos del servo utilizado. O si no, definiéndolos experimentalmente; porque hasta existen diferencias entre servos del mismo modelo.

Para definir los valores correctos de extremos de recorrido de un servo, puede utilizar un montaje como el que sigue, que se trata de una cartulina impresa y una aguja señaladora de cartón en el eje del servo, y enviar comandos con writeMicroseconds() hasta lograr el valor para el ángulo cero y el ángulo 180. El disco lo imprimí con un programa on-line muy útil para crear imágenes de discos de encoder.

Ingrese a esta página y pruebe primero con los siguientes parámetros:

Luego puede jugar con los valores hasta lograr el dibujo que usted necesite. Hay otras opciones en internet, incluso hay generadores de código postscript que se puede leer en Corel y que corren en Windows. Es cuestión de buscar.

Solución para la librería Servo

En el código de ejemplo, para la tercera señal de servo no dejaremos los anchos de pulso predeterminados y fijaremos los límites con los valores 1.000 y 2.000 µs. Esta es la razón por la que las señales del primero y tercer servo envían pulsos diferentes aunque se utilicen comandos idénticos.

Además de que no lograremos posicionamientos correctos de los servos con señales ligeramente descentradas, un servo podría interpretar de manera impredecible los anchos de pulso por encima o por debajo de los límites para los que fue diseñado. Los pulsos por debajo y por encima del límite también pueden dañar físicamente un servo.

Si un servo con recorrido de 0 a 180° está diseñado para responder a pulsos de 1.000-2.000 µs, interpretará 1.000 µs como 0°, y 2.000 µs como 180°. Pero, con un rango de límites de ancho de pulso predeterminado de 544 a 2.400 µs, el Arduino enviará una señal de ~1.000 µs para un ángulo de 44°. Un rango de pulsos de 1.000 a 2.000 µs se convertirá en un recorrido mecánico total de ~90° del eje del servo en lugar de 180°. Este y otros problemas potenciales pueden evitarse si se usan microsegundos en lugar de ángulos en grados, o si los parámetros opcionales de ancho de pulso para los extremos se definen en la configuración de pines para cada servo.

Es muy común que se dé por sentado que las bibliotecas de Arduino funcionan correctamente con sólo unos simples parámetros. La próxima vez que sus servos actúen de forma impredecible en un nuevo proyecto, vuelva a verificar que ha establecido los límites de ancho de pulso en la configuración del pin. Puede que con esto sea suficiente y se ahorre gran cantidad de tiempo.