0% encontró este documento útil (0 votos)
25 vistas7 páginas

Sensores RTC y su Aplicación en Arduino

Este documento describe sensores de inclinación (tilt sensors) y cómo se usan para detectar cuando una máquina de pinball es inclinada o empujada. También describe relojes de tiempo real (RTC) y dos modelos comunes, el DS1307 y el más preciso DS3231, que se usan para medir el tiempo en proyectos electrónicos y Arduino. Finalmente, proporciona un ejemplo de código para obtener la fecha y hora actuales de un RTC conectado.

Cargado por

Marcos
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
25 vistas7 páginas

Sensores RTC y su Aplicación en Arduino

Este documento describe sensores de inclinación (tilt sensors) y cómo se usan para detectar cuando una máquina de pinball es inclinada o empujada. También describe relojes de tiempo real (RTC) y dos modelos comunes, el DS1307 y el más preciso DS3231, que se usan para medir el tiempo en proyectos electrónicos y Arduino. Finalmente, proporciona un ejemplo de código para obtener la fecha y hora actuales de un RTC conectado.

Cargado por

Marcos
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Sensores de Inclinación (Tilt Sensors)

Para los que hace ya unos años jugábamos a las maquinas, entones llamadas de
Petacos y hoy llamadas Pinball (Como cambian las cosas y los nombres) nos
acostumbrábamos enseguida a que, si te dejabas llevar por la emoción y le metías un
empujón a la máquina, rápidamente marcaba Tilt y te impedía seguir jugando.
Así que acabamos pensando que Tilt era algo así como falta, pero no. En ingles Tilt
es inclinar o ladear y se refiere a inclinar el plano de referencia sobre el que se asienta
nuestro sistema de coordenadas (Movimiento que, de no impedirse, nos
aseguraríamos de que la bola nunca llegara abajo del Pinball, ya que bastaría con
levantar de las patas más próximas al jugador).
Creo recordar que en aquellas antiguas maquinas se realizaba mediante un péndulo,
pero que podría haberse realizado mediante uno de los sensores que nos ocupan en
esta sesión: Los sensores de inclinación o Tilt Sensors.

Son sensores de unos pocos milímetros de longitud, que llevan en su interior una o
dos pequeñas bolas conductoras, capaces de cerrar el circuito con los pines metálicos
inferiores del cilindro.
Cuando hacen contacto, permiten el paso de la corriente, exactamente igual que si
fueran un interruptor (Y de hecho se manejan igual), pero que a partir de un cierto
ángulo de inclinación dejan de hacer contacto y abren.

No es una tecnología reciente, pues llevan en uso mucho tiempo, pero antes se hacían
con una gotita de mercurio líquido, que es conductor y que al desplazarse por el
interior del cilindro acababa por cerrar el circuito entre un par de contactos en el fondo.
Pero dado que el mercurio es sumamente toxico para el entorno y para las personas
que lo manejan, hace ya bastante tiempo que se han reemplazado por el modelo que
vamos a usar, aunque aún es fácil encontrarnos con que se siguen llamando
interruptores de mercurio.

Código Ejemplo

Actividad: Alarma con sensor de Inclinación


Sensor Flex
El Sensor Flex (Sensor de Flexiono o flex sensor) produce una resistencia variable en
función del grado al que esta doblada. Convierte la curvatura en distintos valores de
resistencia eléctrica.
Son por lo general en la forma de una delgada tira de 5 cm de largo que varía en
resistencia de aproximadamente 10 a 50 kOhms.

¿Cómo Funciona?
Los Sensores Flex son resistencias analógicas. Trabajan como divisores de tensión
analógica variable.
Dentro de la flexión del sensor son elementos resistivos de carbono dentro de un
sustrato flexible y delgado. (Más carbono significa menos resistencia).
Cuando se dobla el sustrato del sensor produce una salida de resistencia en relación
con el radio de curvatura.
Con un sensor típico flex, una flexión de 0° dará la resistencia de 10K, y una flexión de
90° dará entre 30 a 40 K ohmios.
Es importante mencionar, que la forma de doblarse es en la dirección que se muestra
en la imagen.

Características
• Tolerancia de la Resistencia: ± 30%.
• Potencia nominal: 0,50 Volts continuos.
• La resistencia al no estar doblada es: 25K Ohms.
• Rango de la curva de la resistencia: 45K a 125K Ohms (dependiendo del radio
de curvatura).
• Altura: 0.43 mm (0.017 ").
• Rango de temperatura: -35 ° C a +80 ° C.
• Voltaje: 5 a 12 Volts.

Código Ejemplo
Actividad 3, ejercicios complementarios.
Reloj de Tiempo Real RTC
Un reloj de tiempo real (RTC) es un dispositivo electrónico que permite obtener
mediciones de tiempo en las unidades temporales que empleamos de forma cotidiana.
El término RTC se creó para diferenciar este tipo de relojes de los relojes electrónicos
habituales, que simplemente miden el tiempo contabilizando pulsos de una señal, sin
existir relación directa con unidades temporales.
Por el contrario, los RTC son más parecidos a los relojes y calendarios que usamos
habitualmente, y que funcionan con segundos, minutos, horas, días, semanas, meses
y años.
Normalmente están formados por un resonador de cristal integrado con la electrónica
necesaria para contabilizar de forma correcta el paso del tiempo. La electrónica de los
RTC tiene en cuenta las peculiaridades de nuestra forma de medir el tiempo, como por
ejemplo el sistema sexagesimal, los meses con diferentes días, o los años bisiestos.
Aportan la ventaja de reducir el consumo de energía, aportar mayor precisión y liberar
a Arduino de tener que realizar la contabilización del tiempo. Además, frecuentemente
los RTC incorporan algún tipo de batería que permite mantener el valor del tiempo en
caso de pérdida de alimentación.
En el mundo de la electrónica casera y Arduino existen dos RTC habituales el DS1307
y el DS3231, ambos fabricados por Maxim (anteriormente Dallas Semiconductor). El
DS3231 tiene una precisión muy superior y puede considerarse sustituto del DS1307.
En el modelo DS1307 las variaciones de temperatura que afectan a la medición del
tiempo de los cristales resonadores se traducen en errores en un desfase acumulado.
Esto hace que el DS1307 sufra de un desfase temporal, que puede llegar a ser 1 o 2
minutos al día.
Para solucionarlo, el DS3231 incorpora medición y compensación de la
temperatura garantizando una precisión de al menos 2ppm, lo que equivale a un
desfase máximo 172ms/día o un segundo cada 6 días. En el mundo real normalmente
consiguen precisiones superiores, equivalente a desfases de 1-2 segundos al mes.
La comunicación en ambos modelos se realiza a través del bus I2C, por lo que es
sencillo obtener los datos medidos. La tensión de alimentación es 4.5 a 5.5 para el
DS1307, y 2.3 a 5.5V para el DS3231.
Frecuentemente estos módulos también incorporan una pequeña EEPROM AT24C32,
que puede ser empleada para almacenar registros y mediciones. En el caso del
DS3231, la medición de temperatura también está disponible, aunque tiene una
precisión baja ±3ºC, y el tiempo de adquisición puede durar hasta 1 segundo.
También incorporan una batería CR2032 para mantener el dispositivo en hora al retirar
la alimentación. Esta batería debería ser capaz de mantener alimentado durante varios
años al DS1307, y durante meses al DS3231. La tensión de alimentación de batería es
de 2.0 a 3.5 para el DS1307 y de 2.3 a 5.0 para el DS3231.
Los RTC son dispositivos ampliamente utilizados en electrónica. Todos los
ordenadores personales, servidores, tablets, y smartphone incorporan uno. También
son muy frecuentes en sistemas embebidos y, en general, en multitud de dispositivos
que requieren realizar un registro del tiempo.
En nuestros proyectos de electrónica frecuentemente necesitáramos un RTC. Por
ejemplo, podemos temporizar el encendido de luces o sistemas de riego, realizar un
datalogger, o incluso encender y apagar el propio Arduino para ahorra batería.

El DS3231, el sustituto del DS1307

Dado que el DS3231 es superior en características y tiene un precio inferior lo lógico


es que siempre preferiremos los modulos con DS3231 frente al DS1307.

Montaje
La conexión es sencilla y similar tanto para el DS1307 como el DS3231. Simplemente
alimentamos el módulo desde Arduino mediante 5V y Gnd. Por otro lado, conectamos
los pines del bus I2C a los correspondientes de Arduino.
La conexión de un módulo con DS1307 sería la siguiente,

Similar a la de un módulo que DS3213, que sería la siguiente,


En ambos casos la conexión, vista desde el lado de Arduino, es la misma, y quedaría
así.

En Arduino Uno, Nano y Mini Pro, SDA es el pin A4 y el SCK el pin A5. Para otros
modelos de Arduino consultar el pinout correspondiente.

Código Ejemplo
Para realizar la lectura del DS1307 y del DS3231 usaremos la librería desarrollada por
Adafruit válida para ambos modelos. La librería proporciona ejemplos de código, que
resulta aconsejable revisar.

Obtener Hora y Fecha


El primer ejemplo emplea el RTC para obtener los datos de fecha y hora actual.
Posteriormente se emplean estos valores para mostrarlos por puerto serie. También
se muestra como fijar la fecha y la hora, y detectar la perdida de energía.

#include <Wire.h>
#include <RTClib.h>

// RTC_DS1307 rtc;
RTC_DS3231 rtc;

String daysOfTheWeek[7] =
{ "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado" };
String monthsNames[12] =
{ "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
"Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre" };
void setup()
{
[Link](9600);
delay(1000);
if (![Link]())
{
[Link](F("Couldn't find RTC"));
while (1);
}
// Si se ha perdido la corriente, fijar fecha y hora
if ([Link]()) {
// Fijar a fecha y hora de compilacion
[Link](DateTime(F(__DATE__), F(__TIME__)));
// Fijar a fecha y hora específica. En el ejemplo, 24 de Julio
de 2022 a las 03:00:00
// [Link](DateTime(2022, 7, 24, 3, 0, 0));
}
}

void printDate(DateTime date)


{
[Link]([Link](), DEC);
[Link]('/');
[Link]([Link](), DEC);
[Link]('/');
[Link]([Link](), DEC);
[Link](" (");
[Link](daysOfTheWeek[[Link]()]);
[Link](") ");
[Link]([Link](), DEC);
[Link](':');
[Link]([Link](), DEC);
[Link](':');
[Link]([Link](), DEC);
[Link]();
}

void loop()
{
// Obtener fecha actual y mostrar por Serial
DateTime now = [Link]();
printDate(now);
delay(3000);
}

También podría gustarte