Reloj GPS

A partir del curso 2019/20 contamos con las materia de Robótica como optativa en 3º y 4º de ESO.
Como proyecto final este curso no hemos propuesto diseñar y construir un reloj de gran formato (140 cm. de diámetro) ultrapreciso (1 segundo cada 300 millones de años) para instalarlo en el patio del instituto, Para conseguir esta precisión el reloj se sincronizará a través de la red de satélites GPS con el reloj atómico del Observatorio Naval de Estados Unidos en Colorado, a su vez su control, puesta en hora y programación se realizará a través de internet. Este proyecto nos permitirá aplicar todas las tecnologías que estudiamos en el proyecto STEAM-IESPV (diseño, fabricación, mecánica, electrónica, programación,…)

Simulación del reloj en su ubicación
Aquí falta un reloj
Reconociendo el terreno y tomando medidas
El mecanismo (don motores paso a paso con reducción por correa dentada
Nuestro diseño para la esfera

El pasado día 11 pusimos en marcha el nuevo reloj en el patio del Instituto. Este reloj ha sido diseñado y construido íntegramente en horario extraescolar por los alumnos del programa Proyect@ del IES Pedro de Valdivia dirigidos por el profesor y responsable TIC Pepe Pineda. Está también recogido como objetivo de nuestro programa CITE-STEAM dentro del que se ha desarrollado el circuito electrónico y el programa informático que controla el reloj.

Mecanum Robot

El robot Mecanum es un robot que se caracteriza por tener ruedas omnidireccionales del modelo Mecanum, este tipo de ruedas presentan unos cilindros o ruedas pasivas por toda la parte curva de su superficie con una orientación de 45º. Esta estructura les permite que, las cuatro ruedas en conjunto, muevan al robot en todas las direcciones, incluso diagonalmente con cualquier ángulo, además de poder girar:

Robot con Mecanum Wheel controlado por Arduino

En este documento se explica de una manera más técnica el funcionamiento de las ruedas: https://www.fing.edu.uy/inco/grupos/mina/pGrado/easyrobots/doc/SOA.pdf

En este vídeo hacen una demostración del movimiento de las ruedas y de el robot:

En este vídeo se explica el movimiento del robot partiendo del movimiento individual de cada rueda, también expone algunas fórmulas matemáticas que no creo que serán necesarias:

https://www.youtube.com/watch?v=Xrc0l4TDnyw&t=470s
Estas son las ruedas elegidas: https://es.aliexpress.com/item/4001084241161.html

Los motores utilizados son 4x12V DC de 330 rpm con encoder magnético por efecto Hall. Para el robot esos son los motores elegidos: https://es.aliexpress.com/item/4001084241161.html

CONTROLADOR DE MOTORES

El controlador de motores utilizado en este proyecto es el L298N. Debido al hecho de que cada uno de los movimientos del robot requiere una combinación específica de velocidades y direcciones es necesario utilizar un controlador por motor, es decir, utilizaremos cuatro L298N, es decir, como se ve en el esquema del apartado de ruedas omnidireccionales, en la mayoría de movimientos que puede realizar el robot: adelante, atrás, derecha, izquierda y diagonales. Los motores se activan formando dos parejas, el de arriba a la izquierda con el de abajo a la derecha y el de arriba a la derecha con el de abajo a la izquierda. Ya que todos esos tipos de desplazamientos requieren el movimiento coordinado de las dos parejas de motores. Si solo se fuesen a dar esos dos tipos de movimientos no tendría sentido el uso de más de dos controladores, debido al hecho de que, cuando el motor de arriba a la izquierda se moviese hacia adelante el de abajo a la derecha también lo haría, sin embargo, el robot también debería ser capaz de realizar movimientos de rotación para los cuales se necesita el movimiento coordinado de dos parejas, pero no las mismas de antes, sino la pareja formada por los dos motores de la izquierda y la pareja formada por los dos motores de la derecha. El movimiento de rotación, por ejemplo hacia la derecha, requiere que las dos ruedas de la izquierda giren hacia adelante y que las dos de la derecha, o bien se paren (si se quiere una rotación que tome como eje la rueda de arriba a la derecha), o bien que se muevan hacia atrás (si se quiere una rotación que tome como eje el centro del robot).

En esta página explican ampliamente el funcionamiento de los controladores de motor:

https://bricolabs.cc/wiki/guias/control_de_motores

Dentro de la página anterior explican lo que es el PWM (Pulse-Width Modulation o Mosapoconcho_fritzing_800.jpg

Enlace al blog de Luis Llamas sobre el controlador L298N, además de ejemplos de código:

https://www.luisllamas.es/arduino-motor-corriente-continua-l298n/dulación por ancho de pulso en español), pero esa información la completan con esta otra página:

https://bricolabs.cc/wiki/guias/control_de_motores

MICROCONTROLADOR

El arduino es el microcontrolador del robot, debido a la necesidad de un gran número de pines (ya que tanto los cuatro controladores de motor como los demás sensores requieren varios pines), utilizaremos el modelo de Arduino Mega

https://es.aliexpress.com/item/4000026702514.html?spm=a2g0s.9042311.0.0.671f63c0tRAW3V

Arduino Pinout (tanto arduino nano como arduino mega):

Actualmente, seguimos trabajando en el desarrollo del robot mecanum, hasta ahora hemos logrado que se mueva, sin embargo necesitamos implementar los encoder magnéticos, después intentaremos controlar su movimiento con un IMU de 9 grados de libertad, a continuación pretendemos incluir un sensor ultrasónico. Finalmente, si tenemos éxito con las anteriores fases, probaremos a actualizar el código del robot mediante OTA (Over The Air), es decir, con Bluetooth o Wifi. Para terminar, el objetivo final es poder hacer una foto y con el móvil trazar la trayectoria, enviarlo al robot y que el realice el recorrido deseado.

Módulo GPS neo-6m

Un módulo GPS recibe una cadena de datos de cada uno de los satélites de la red GPS y calcula la posición a partir de la distancia a cada uno de los satélites que recibe (trilateración).
Entre esos datos se encuentra la hora que es lo que nos sirve para corregir el RTC de nuestro proyecto del Reloj GPS y así dar la hora exacta con retraso de un segundo cada 300 millones de años.

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.

Roboreto 2021

Efectivamente, este es el interior de nuestro robot, Pedrobot, es un robot creador por los alumnos de 4º ESO del I.E.S. Pedro de Valdivia, con la finalidad de Participar en el Roboreto 2021 y aprender nuevos conceptos de robótica, y esto con trabajo y esfuerzo, a dado sus resultados.

Hemos aprendido a programar con Arduinos, y muchos otras piezas como son el «sensor ultrasonido»:

 Los sensores ultrasónicos miden la distancia mediante el uso de ondas ultrasónicas. El cabezal emite una onda ultrasónica y recibe la onda reflejada que retorna desde el objeto. Los sensores ultrasónicos miden la distancia al objeto contando el tiempo entre la emisión y la recepción.

En el primer reto tuvimos que hacer un video de presentación para nuestro robot, que nos costó un poco hacerlo, a veces la cámara no funcionaba…, ¡o a veces no nos acordábamos de lo que teníamos que decir!

Despúes de esto, el resto de retos eran con el robot, con el que tuvimos que aprender a manejarnos con los arduinos, la programación del mismo, y a conectar el arduino con el resto de artilugios y dispositivos. Para ello tuvimos que aprender tambíen a leer códigos de programación.

Estuvimos durante semanas aprendiendo conceptos que nos ayudaríana comprender y manejar todo lo que necesitábamos para la creación y utilización del robot. Despúes de unas semanas, hicimos el siguiente reto, que por supuesto, salió como más o menos esperábamos, regular. Este fue uno de los primeros intentos:

Reto 2 RoboReto

Pero después de mucho trabajo y esfuerzo, conseguimos hacer los retos, y también conseguimos otra cosa, y no menos importante, los conocimentos de robótica.

RoboToad

RoboToad es uno de nuestros robots, lo construimos para poder utilizarlo en las distintas pruebas de RoboReto y como prueba para algunas funciones como el control por encoder.

Está compuesto por las siguientes partes: Chasis, dos motores con encoder magnético, dos llantas, dos ruedas, una rueda loca, arduino, placa protoboard, un controlador de motor, una batería.

Primero preparamos el chasis y las llantas. El chasis lo hicimos con una plancha de madera agujereada con la CNC para poder sujetar los distintos componentes, las llantas las fabricamos con la impresora 3D.

Probamos el funcionamiento de un solo motor con el controlador y el arduino.

Después, con un torno apretamos las llantas en los ejes de los motores.

A continuación colocamos las ruedas en las llantas y conectamos todos los motores con el controlador, el arduino y la batería.

Una vez comprobado el funcionamiento de los motores, sujetamos todos los componentes al chasis.

Finalmente este es RoboToad montado y en funcionamiento:

Motores Paso a Paso y Drivers

El motor paso a paso es un motor de corriente continua sin escobillas en el que la rotación se divide en un cierto número de pasos resultantes de la estructura del motor. Normalmente, una revolución completa del eje de 360° se divide en 200 pasos, lo que significa que se realiza una sola carrera del eje cada 1,8º

Los motores que hemos utilizado en este caso son los Nema 17, están preparados para trabajar como motores de CNC o Impresora 3D

Reloj de Sol

Galería de fotos del proyecto de reloj de Sol del IES Pedro de Valdivia.

Aunque este proyecto lo realizamos durante el curso 2013/2014, recuperamos y publicamos algunas fotos hechas durante su construcción para usarlas como introducción al proyecto de este año «Reloj GPS». La referencia de este reloj tiene una base astronómica, el movimiento de la Tierra, la referencia del nuevo tiene una referencia atómica, la oscilación del átomo de Cesio https://es.wikipedia.org/wiki/Segundo.

Convivir con campos electromágneticos

Presentación de Juan Antonio Fernández Montaña en la que nos explica que son los campos electromagnéticos y como nos afectan. Está presentación fue elaborada para la Semana Cultural y Científica de Abril de 2020 del IES Pedro de Valdivia, que no llegó a celebrarse por la suspensión de actividades debida al COVID-19. Juan Antonio ha tenido la deferencia de grabar la narración para hacer la presentación en vídeo.

Encoder Magnético

Definición, ¿Qué es?

El sensor cuentavueltas o encoder rotativo magnético es un dispositivo que nos proporciona la posición y la velocidad angular de una acción, es decir, cuántos grados hemos girado y a qué velocidad lo hemos hecho a través del envió de pulsos a un Arduino, a partir de la detección de campos magnéticos.

Funcionamiento

El funcionamiento del encoder está basado en el efecto Hall, descubierto por Edwin Hall en 1849, este efecto consiste en que, al circular una corriente eléctrica a través de un semiconductor, en presencia de un campo magnético, los electrones se desvían por la acción de este campo magnético dando lugar una tensión perpendicular a la corriente y al campo magnético. Este campo es el que detecta nuestro sensor, como el campo magnético se produce una vez por cada vuelta, podemos contar el número de veces que el sensor detecta el campo magnético, que será igual al número de vueltas.

Además podemos saber si el giro es horario o antihorario si nuestro encoder es de cuadratura, esto significa que mide el campo magnético por dos sensores, a partir del desfase que tienen entre sí podemos averiguar la dirección de giro.

Uno de los giros (horario o antihorario, para averiguar cuál de ellos es cuestión de probarlo) producirá un flanco igual siempre, es decir, ambos sensores detectarán lo mismo, o los dos detectan campo magnético o los dos no lo detectan.

El otro giro producirá un flanco distinto, es decir, cuando un sensor detecta el campo el otro no y viceversa.

Analógico y digital

Existen sensores magnéticos analógicos y digitales.

Analógico:
Como en otros dispositivos, el encoder analógico envía pulsos proporcionales a la intensidad del campo que detecta, es decir, da valores continuos.

Digital:
El encoder digital puede enviar o no un pulso dependiendo de si detecta o no el campo magnético, en nuestro caso (contar vueltas), lo ideal es un encoder digital.

Esquema eléctrico y Conexión con Arduino

Ejemplo de Código

XXXXXXXX No se insertar el texto con formato de código.

Precio y Adquisición

El sensor Hall por sí solo se puede encontrar fácilmente por 0,5 – 0,7 €.
El motor con el sensor Hall integrado lo podemos encontrar por 8,30 €.

Motor con encoder magnético integrado: https://banggood.app.link/4dUu6QxST4

Enlaces interesantes

Blog Luisllamas encoder rotativo: https://www.luisllamas.es/arduino-encoder-rotativo/
Blog Luisllamas encoder magnético: https://www.luisllamas.es/detectar-campos-magneticos-con-arduino-y-sensor-hall-a3144/

Adquisición de motor con encoder magnético: https://banggood.app.link/4dUu6QxST4