Arduino (IoT): Simple Tutorial RTC: Parte I – Configurar con RTClib

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial RTC: Parte I – Configurar con RTClib

Parece algo sencillo e inconsecuente pero muchas veces necesitaremos tomar el tiempo o ejecutar tareas basadas en el tiempo “real”.  Esto se refiere a la hora verdadera usada por la humanidad y no en base a un timer que iniciamos arbitrariamente hace tantos minutos o segundos.  Para esto usamos un modulo RTC.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Modulo RTC DS1307
  4. Breadboard
  5. Arduino IDE (https://www.arduino.cc/en/Main/Software)

El modulo DS1307 RTC es este:

Arduino Tutorial Real Time Clock RTC DS1307 Santiapps Marcio Valenzuela
Arduino Tutorial Real Time Clock RTC DS1307

Este modulo debe ser programado para asignar la hora “real” humana.  Una vez se hace esto, mientras tenga la batería CR2032 que trae atras, el modulo mantendrá la hora.

Primero lo que vamos a hacer es configurar el RTC para que obtenga la hora correcta. En este caso obtendrá la hora de nuestra computadora.

Las conexiones son:

SDA(rtc) – Pin Analogo 4 Uno

SCL(rtc) – Pin Analogo 5 Uno

VCC(rtc) – 5V Uno

GND(rtc) – GND Uno

Al final debería verse así:

Arduino Tutorial Real Time Clock RTC Santiapps Marcio Valenzuela
Arduino Tutorial Real Time Clock RTC

El código:

[code]
// Fecha y hora para DS1307 RTC conectado via I2C & Wire lib
#include <Wire.h>
#include “RTClib.h”
#if defined(ARDUINO_ARCH_SAMD) // para la Zero
#define Serial SerialUSB
#endif
RTC_DS1307 rtc;
void setup () {
while (!Serial); // para Leonardo/Micro/Zero
Serial.begin(57600);
Wire.begin();
rtc.begin();
if (! rtc.isrunning()) {
Serial.println(“RTC no esta configurada!”);
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// O si prefiere configurar una hora y fecha específica:
// Enero 21, 2014 a 3am:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print(‘/’);
Serial.print(now.month(), DEC);
Serial.print(‘/’);
Serial.print(now.day(), DEC);
Serial.print(‘ ‘);
Serial.print(now.hour(), DEC);
Serial.print(‘:’);
Serial.print(now.minute(), DEC);
Serial.print(‘:’);
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(” desde medianoche 1/1/1970 = “);
Serial.print(now.unixtime());
Serial.print(“s = “);
Serial.print(now.unixtime() / 86400L);
Serial.println(“d”);
// calcular una ida 7 días y 30 segundos en el futuro
DateTime future (now.unixtime() + 7 * 86400L + 30);
Serial.print(” now + 7d + 30s: “);
Serial.print(future.year(), DEC);
Serial.print(‘/’);
Serial.print(future.month(), DEC);
Serial.print(‘/’);
Serial.print(future.day(), DEC);
Serial.print(‘ ‘);
Serial.print(future.hour(), DEC);
Serial.print(‘:’);
Serial.print(future.minute(), DEC);
Serial.print(‘:’);
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
delay(3000);
}
[/code]

Ese proyecto se puede ver aquí:

Arduino Tutorial RTC Santiapps Marcio Valenzuela
Arduino Tutorial RTC

 

Para mayor información sobre este modulo, podemos estudiar esta referencia:

http://www.elecrow.com/wiki/index.php?title=Tiny_RTC

Veamos que utilidad le podemos dar a esto.  En la siguiente parte analizamos el uso de las alarmas!

Arduino (IoT): Simple Tutorial Robot Autónomo Parte I

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Robot Autónomo: Parte I

Ya sabemos controlar motores y sabemos sentir (ver).  Combinemos estas habilidades para hacer que nuestro robot se mueva.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO.
  3. Llantas (2)
  4. Motores DC (2)
  5. Sensor Ultrasonico
  6. Motor Mini Servo
  7. Arduino IDE (https://www.arduino.cc/en/Main/Software)

Primero vamos a armar el motor shield con los 2 DC motors y los vamos a hacer funcionar de forma sencilla para ver como operar los motores a través del shield.

Componentes

Arduino Robot Autonomo Movil Motor Shield Tutorial Santiapps Marcio Valenzuela
Arduino Robot Autonomo Movil Motor Shield

El sensor ultrasonico se puede pegar con silicon transparente escolar a la paleta del servo.  El alambrado es sencillo:

  • El servo se conecta a la terminal de Servo2 en la shield
  • El Sensor tiene 4 conexiones
    • Vcc al pin en la shield soldado a la fila 5V
    • GND al pin en la shield soldado a la fila GND
    • Trig al pin en la shield soldado en A5
    • Echo al pin en la shield soldado en A4
  • Luego se conectan los motores DC al shield
    • M1 en la shield al motor derecho
    • M4 en la shield al motor izquierdo
Arduino Tutorial Robot Autonomo Santiapps Marcio Valenzuela
Arduino Tutorial Robot Autonomo

Ahora solo resta conectar la shield sobre la Arduino UNO, el cable USB a la Arduino UNO y subimos la sketch.  Vamos a subir la sketch y no tendremos los motores conectados a las llantas ni mucho menos el chasis.  Solo queremos ver como funciona el sketch.  Una vez cargada a la UNO podremos ver como se mueven los motores.  Se debería mover tanto los DC como el servo.

En el sketch podemos ver:

  • setup() y loop()
  • moveStop(), moveForward() y moveBackward()

Ahora podemos desconectar la UNO y comenzar a conectar los motores a las llantas y la UNO/Shield sobre el battery pack para luego montarlo a un chasis sobre las llantas.

Arduino Tutorial Robot Autonomo Motores Llantas Shield Ultrasonic Sensor Santiapps Marcio Valenzuela
Arduino Tutorial Robot Autonomo Motores Llantas Shield Ultrasonic Sensor

El código para este proyecto seria sencillo:

#include <AFMotor.h>
#define MAX_SPEED_OFFSET 10 // Maxima separation entre motores
#define MAX_SPEED 180 // Maxima velocidad (80% de 256)
AF_DCMotor motor1(1, MOTOR12_1KHZ); // crear motor #1 en M1
AF_DCMotor motor2(4, MOTOR12_1KHZ); // crear motor #2, en M2
String motorSet = "";
int speedSet = 0;
void setup() {
Serial.begin(9600);
moveForward();
delay(2000);
moveStop();
delay(2000);
moveBackward();
delay(2000);
moveStop();
}
void loop() {
}
void moveStop() {
Serial.println("Deteniendo...");
motor1.run(RELEASE);
motor2.run(RELEASE);
} // stop the motors.
void moveForward() {
Serial.println("Avanzando...");
motorSet = "FORWARD";
motor1.run(FORWARD); // Encender hacia el frente
motor2.run(FORWARD); // Encender hacia el frente
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // Acelerar lentamente
{
motor1.setSpeed(speedSet+MAX_SPEED_OFFSET);
motor2.setSpeed(speedSet);
delay(5);
}
}
void moveBackward() {
Serial.println("Retrocediendo...");
motorSet = "BACKWARD";
motor1.run(BACKWARD); // Encender hacia atras
motor2.run(BACKWARD); // Encender hacia atras
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // Acelerar lentamente
{
motor1.setSpeed(speedSet+MAX_SPEED_OFFSET);
motor2.setSpeed(speedSet);
delay(5);
}
}

Al correr este sketch podemos ver que los motores arrancan, se detienen, retroceden y se detienen nuevamente.

Ahora vamos a agregar los ojos, el sensor ultrasonico.

Esta va para largo!