RELOJ RTC

El reloj RTC o Real Time Clock es uno de los componentes que utilizamos para que el reloj funcione. Su papel consiste en marcar el año, mes, día y hora lo más exacto posible. Estos dispositivos electrónicos, tienen una fuente de alimentación, ya que si se le corta la corriente tiene que seguir con su funcionamiento, es decir, seguir marcando la hora.

Están formados por un resonador de cristal, con los circuitos necesarios para contabilizar de manera correcta el paso del tiempo. También, su electrónica cuenta con medidores sexagesimal, que es el que usamos todos, para leer horas, días, meses y años.

Estos dispositivos son muy utilizados en la electrónica para dar la hora en smartphones, ordenadores, tabletas, etc.

El código que utiliza este dispositivo es el siguiente:

#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() {
   Serial.begin(9600);
   delay(1000); 

   if (!rtc.begin()) {
      Serial.println(F("Couldn't find RTC"));
      while (1);
   }

   // Si se ha perdido la corriente, fijar fecha y hora
   if (rtc.lostPower()) {
      // Fijar a fecha y hora de compilacion
      rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
      
      // Fijar a fecha y hora específica. En el ejemplo, 21 de Enero de 2016 a las 03:00:00
      // rtc.adjust(DateTime(2016, 1, 21, 3, 0, 0));
   }
}

void printDate(DateTime date)
{
   Serial.print(date.year(), DEC);
   Serial.print('/');
   Serial.print(date.month(), DEC);
   Serial.print('/');
   Serial.print(date.day(), DEC);
   Serial.print(" (");
   Serial.print(daysOfTheWeek[date.dayOfTheWeek()]);
   Serial.print(") ");
   Serial.print(date.hour(), DEC);
   Serial.print(':');
   Serial.print(date.minute(), DEC);
   Serial.print(':');
   Serial.print(date.second(), DEC);
   Serial.println();
}

void loop() {
   // Obtener fecha actual y mostrar por Serial
   DateTime now = rtc.now();
   printDate(now);

   delay(3000);
}

Como podemos ver, que primero se tiene que identificar los días y meses con las funciones, String Days of the week [7] y String Monthnames [12].

Los Serial.begin es la comunicación que se mantiene entre el ordenador, el arduino y el Reloj RTC, con ello, hay que determinar que cantidad de información se transfiere que es el número que viene al lado.

Luego con el SerialPrint lo que hace es que registra y muestra los datos que se mandan a través de los Serial.Begin en el monitor serie.

Al final de esto, DateTime now es el tiempo que el reloj rtc está marcando.

Magnetómetro

¿QUÉ ES UN MAGNETÓMETRO?

Un magnetómetro sirve para cuantificar en fuerza o dirección de la fuerza electromagnética de la Tierra.

Hay distintos tipos de magnetómetro que son:

  1. Los magnetómetros escalares que miden la fuerza magnética de en las que están sometidos.
  2. Los magnetómetros vectoriales que tienen la capacidad de medir  el componente del campo magnético en una dirección particular, en este caso el norte magnético de la Tierra.

CÓMO MONTARLO. 

El montaje de esta brújula magnética  es muy sencillo solo tienes que alimentarlo con su propia toma de tierra y la conexión 5V, también hay conexiones de programación que son la SDA que va al  pin A4 y la conexión SCL que va al pin A5.arduino-brujula-hmc5883-gy273-esquema

arduino-brujula-hmc5883-gy273-conexion

PROGRAMACIÓN.

//GND – GND

//VCC – VCC

//SDA – Pin A4

//SCL – Pin A5

#include «Wire.h»

#include «I2Cdev.h»

#include «HMC5883L.h»

HMC5883L compass;

int16_t mx, my, mz;

void setup()

{

    Serial.begin(9600);

    Wire.begin();

    compass.initialize();

}

void loop()

{

    //Obtener componentes del campo magnético

    compass.getHeading(&mx, &my, &mz);

    Serial.print(«mx:»);

    Serial.print(mx);

    Serial.print(«tmy:»);

    Serial.print(my);

    Serial.print(«tmz:»);

    Serial.println(mz);

    delay(100);

}

//GND – GND

//VCC – VCC

//SDA – Pin A4

//SCL – Pin A5

#include «Wire.h»

#include «I2Cdev.h»

#include «HMC5883L.h»

HMC5883L compass;

int16_t mx, my, mz;

//declinacion en grados en tu posición

const float declinacion = 0.12;

void setup()

{

    Serial.begin(9600);

    Wire.begin();

    compass .initialize();

}

void loop() {

    //Obtener componentes del campo magnético

    compass .getHeading(&mx, &my, &mz);

    //Calcular ángulo el ángulo del eje X respecto al norte

    float angulo = atan2(my, mx);

    angulo = angulo * RAD_TO_DEG;

    angulo = angulo – declinacion;

    if(angulo < 0) angulo = angulo + 360;

    Serial.print(«N:»);

    Serial.println(angulo,0);  

}