Reloj de agujas manejado a distancia para enseñar la hora analógica en el colegio
Este reloj de agujas se puede poner en la pared para mostrar cómo se ajusta y corresponden la hora digital y la analógica.
El ajuste se realiza de a distancia y será usado por el alumno para experimentar cómo funciona un reloj analógico real mientras los compañeros observan.
Además se pueden programar juegos educativos para que el alumno coloque las agujas del reloj analógico según la propuesta en el mando con reloj digital.
El reloj está diseñado para imprimirlo en una impresora 3D excepto la corona será realizada a parte con madera o PVC impreso. Usará un solo motor paso a paso para las dos agujas y un sensor de infrarrojos para indexar el paso de inicio.
El terminal de control será mínimo pues contará solo con una pantalla led de 7 segmentos y 4 dígitos, un potenciómetro encoder para variar la hora hacia delante o hacia atrás y usará una pila de 9v enviando la información por Bluetooth.
Materiales:
- 1 Motor paso a paso Nema 17 (de impresora HP)
- 2 Arduino
- 1 Driver para motor paso a paso A4988
- 1 Display de 7 segmentos TM1637
- 2 Bluetooth HC-05
- 1 Sensor infrarrojo (de impresora HP)
- 2 Interruptores
- Resistencias
- 1 Conexión entrada DC.
- Rodamientos (opcional)
- 2 Placas de soldaduras.
- 1 Encoder rotativo
- 1 Pila de 9V
- 6 tornillos M5 de 30mm y tuercas
- 2 tornillos M3 de 10mm y tuercas
- Conectores USB hembra u miniUSB macho (opcional).
Electrónica
El sistema está compuesto por un aparato emisor que contará de un simple encoder rotativo y poco más que será alimentado por una pila de 9V y el aparato receptor que será el reloj de pared.
Receptor: Reloj
La parte más trabajosa de este proyecto ha sido el diseño de los engranajes para que con un solo motor paso a paso pudiéramos manejar las dos agujas del reloj.
Hay mucha información sobre este asunto en internet. El diseño se ha basado en proyectos ya iniciados ahorrándonos ciertos cálculos, aunque la complejidad para realizar un diseño compacto es patente.
Sensor barrera IR
Añadiremos este pequeño sensor que para el proyecto inicial no tiene demasiado sentido, pero para añadir futuras funcionalidades puede resultar imprescindible para poner a hora el reloj o para saber exactamente la hora que marca.
Como ejemplo, podrían ser juegos que requieran colocar una hora dada, o simplemente para usarlo como reloj real.
Para este fin, he colocado en el engranaje de la aguja de las horas una pequeña pestaña que hará las veces de reset y así poder calibrar el reloj.
Emplearé un sensor que extraje de una impresora HP para reutilizarlo.
El sensor irá conectado al pin analógico D2 de Arduino lo que nos permitirá usarlo como interrupción si fuese necesario.
Motor paso a paso
Este elemento también lo recuperé del una impresora HP para reutilizarlo. Se trata de un motor paso a paso bipolar robusto de 40mm de lado.
Para su funcionamiento es necesario un driver que en mi caso usaré el conocido L298N, que tiene como inconveniente de tener un gran tamaño, pero no es un problema en este proyecto. Una de las ventajas que tiene este módulo es que posee un regulador de tensión que emplearemos para alimentar el Arduino a 5 voltios. El motor se alimentará a 12 voltios o menos. Usaremos en este caso el módulo A4988 para controlar el motor paso a paso de cuatro cables.
Para el control del motor usaremos los pines digitales D4, D5, D6, D7, D8, D9 del arduino que se conectarán a IN1, IN2, IN3 e IN4 respectivamente. Nótese que mantendremos puenteados con un puente a 5V la entrada ENA (activación de la etapa A) y ENB (activación de la etapa B). Además, dejaremos otro jumper colocado entre 12V y GND, lo que nos permitirá usar el regulador de tensión para alimentar el microcontrolador con 5 voltios a través de la salida así marcada. Por último recordar que las masas de las alimentaciones deben ser compartidas para evitar daños en la electrónica.
Usaremos la opción de micropasos que nos ofrece el pequeño driver A4988, el que debemos ajustar el nivel de corriente mediante el potenciómetro que trae incorporado.
Estos micropasos nos permiten un movimiento más fluido y preciso, ya que consiguen incrementar los 200 pasos del motor PaP por 64, lo que nos permite manejar 3200 pasos por vuelta.
Tener en cuenta los dientes de la rueda de tracción del motor, en mi caso 15. Usaremos un eje de metal de 3mm que irá a presión con la rueda roja de tracción aunque podemos usar algo de pegamento para asegurar la fijación.
Bluetooth
El módulo BT será el conocido HC-05, que permite trabajar como master y esclavo. Además permite cambiar muchas más configuraciones a través del comando AT en comparación con su hermano el HC-06.
Para poder acceder al modo AT es necesario activar el pin EN en el momento de alimentar el módulo, por este motivo, he decidido alimentar el módulo usando un pin de salida del arduino. Esto permitirá entrar en modo configuración sin tener que trastear en el interior del reloj.
Para conectarlo al módulo microcontrolador usaremos los pines A2, A1, D12 y A0, que se emparejarán con RX, TX, Vcc y EN respectivamente. La masa se conectará a la masa del sistema.
A continuación vemos el esquema completo del reloj con todos sus módulos.
Emisor: Mando de control
Funcionará alimentado con una pila de 9V. Para ello se ha diseñado una cavidad especial con tapadera de fácil acceso. La pila durará relativamente poco pues debe alimentar a la pantalla led, un BT HC-05 y un arduino que recibirá la alimentanción pasando por un regulador de voltaje L7805 que como sabemos es equivalente a despilfarro. Por este motivo aconsejaría usar un convertidor de voltaje menos consumista.
Pondremos un interruptor de encendido y apagado.
La pila alimentará arduino a través del pin VIN que acepta hasta 12V(gracias al L7805). Los demás módulos que funcionan a 5V serán alimentados por arduino.
En el interior tendremos una pantalla led de 7 segmentos controlada por el chip TM1637 conectada a los pines D2 y D3, CLK y DIO respectivamente.
El encoder rotativo que incorpora un interruptor pulsador irá conectado a D7, D8, D9, a SW, DT, y CLK respectivamente.
El bluetooth usará los pines D6, D10, D11, D12 conectados a RX, EN, +5V y TX. Nótese que la alimentación dependerá del pin D11. Esto será así para poder encender el módulo a nuestro antojo en caso de tener que activar el modo AT de configuración como hicimos en el reloj (cambiar contraseñas, etc).
USB exterior de fácil acceso
Como norma general en los artefactos que tienen un difícil acceso para insertar un USB para programar Arduino intento añadirles un puerto USB hembra en el exterior.
La disposición de los cables es la siguiente y evita desmontar cajas bien cerradas porque olvidé programar algo o porque necesitan alguna actualización de software.
En el diseño de la caja hay un lugar dispuesto para este puerto que irá sujeto con tornillos M3.
Programación
Bibliotecas
Usaremos:
- SoftwareSerial.h : ya incorporada en el IDE de arduino, que servirá para comunicar con el módulo de bluetooth sin ocupar el puerto serie natural (Rx-TX). Pudiendo así usar cualquier pin para ello.
- Button2.h : Se encargará de la presión del botón pulsador del encoder.
- TM1637Display.h: Se encargará de controlar la pantalla LED de forma sencilla.
- ESPRotary.h : Se ocupará de controlar el uso del encoder rotativo.
En cuanto al motor paso a paso, preferí no usar ninguna librería para controlarlo aunque existe gran variedad a este respecto.
A continuación puedes descargar las librerías mencionadas.
Programación del reloj
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 |
/************************************************ Nombre del proyecto: Relog didáctico analógico. Programado por Juan Carlos Pedrajas del Molino Https:\\www.geniero.es pedrajas@geniero.es afelio11@hotmail.com Fecha de inicio: 21/04/21 Fecha de finalización: 08/05/21 ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | | 5V/MISO2 [ ][ ] A4/SDA[ ] | | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| Enable | [ ]3V3 +---+ 10[ ]~| M0 | [ ]5v -| A |- 9[ ]~| M1 | [ ]GND -| R |- 8[ ] | M2 | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | Reset | -| I |- 6[ ]~| Sleep EN BT | [ ]A0 -| N |- 5[ ]~| Step Tx BT | [ ]A1 -| O |- 4[ ] | Dirección Rx BT | [ ]A2 +---+ INT1/3[ ]~| driver Vcc (modificado) | [ ]A3 INT0/2[ ] | IR sensor | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ */ #include <SoftwareSerial.h> int A4988on = 3; int dirPin = 4; int pasoPin = 5; int sleepPin = 6; int resetPin = 7; int M0 = 8; int M1 = 9; int M2 = 10; int enablePin = 11; //int pasos = 2400; int pausa = 600; int desfase = 297; bool para; int posicion = 0; float angulo = 0; int minuto = 0; int pasos = 0; int incremento = 0; int banderita = 0; boolean sincro = 0; int TX = A1; int RX = 12; int Status = A3; boolean conectado; String cmd; boolean x = 0; SoftwareSerial BT1(TX, RX); // RX | TX void setup() { pinMode (A4988on, OUTPUT); pinMode (sleepPin, OUTPUT); pinMode (resetPin, OUTPUT); pinMode (M0, OUTPUT); pinMode (M1, OUTPUT); pinMode (M2, OUTPUT); pinMode (enablePin, OUTPUT); pinMode (Status, INPUT); pinMode (dirPin, OUTPUT); pinMode (pasoPin, OUTPUT); digitalWrite (A4988on, HIGH); pinMode (2, INPUT); // digitalWrite (sleepPin, HIGH); delay (10); digitalWrite (M0, HIGH); digitalWrite (M1, HIGH); digitalWrite (M2, HIGH); // digitalWrite (sleepPin, LOW); Serial.begin(9600); Serial.println(F("Inicio Reloj")); BT1.begin(38400); digitalWrite (sleepPin, HIGH); digitalWrite (resetPin, HIGH); digitalWrite (enablePin, LOW); } void loop() { conectado = digitalRead (Status); //Estado del BT if (conectado == 0) { //Si existe desconexión x=0; x = 0; digitalWrite (sleepPin, LOW); } if (conectado == 1 && x == 0) { //Si se conecta... recalibra. x = 1; digitalWrite (sleepPin, HIGH); para = digitalRead(2); if (para == 1) { //Si está la pestañita en sensor IR Mover a la derecha un tramo largo for (int k = 0; k < 450; k ++) { digitalWrite(dirPin, LOW); // dirección a la derecha digitalWrite(pasoPin, HIGH); delayMicroseconds(400); digitalWrite(pasoPin, LOW); delayMicroseconds(400); } delay (100); para = 0; while (para == 0) { //Recolocar en posición pestañita en IR para = digitalRead(2); digitalWrite(dirPin, HIGH); // dirección a la izquierda digitalWrite(pasoPin, HIGH); delayMicroseconds(400 ); digitalWrite(pasoPin, LOW); delayMicroseconds(400 ); } for (int k = 0; k < desfase; k ++) { //Desfase en mi caso (ajustable dependiendo de la rueda impresa). digitalWrite(dirPin, HIGH); digitalWrite(pasoPin, HIGH); delayMicroseconds(400); digitalWrite(pasoPin, LOW); delayMicroseconds(400); } } else //Si no se encuentra la pestañita en el sensor IR. { while (para == 0) { //Mover a la izquierda hasta pestañita en IR. para = digitalRead(2); conectado = digitalRead (Status); digitalWrite(dirPin, HIGH); // dirección a la izquierda digitalWrite(pasoPin, HIGH); delayMicroseconds(400 ); digitalWrite(pasoPin, LOW); delayMicroseconds(400 ); } for (int k = 0; k < desfase; k ++) { //Desfase en mi caso (ajustable dependiendo de la rueda impresa). digitalWrite(dirPin, HIGH); digitalWrite(pasoPin, HIGH); delayMicroseconds(400); digitalWrite(pasoPin, LOW); delayMicroseconds(400); } posicion = 0; minuto = 0; banderita = 0; angulo = 0; incremento = 0; pasos = 0; sincro = 1; } } if (BT1.available() > 0) { char c = BT1.read(); digitalWrite (sleepPin, HIGH); if (c == '2') { digitalWrite(dirPin, LOW); // dirección a la derecha minuto++; banderita = incremento; angulo = minuto * 6; incremento = (angulo / 0.1125); pasos = incremento - banderita; for (int k = 0; k < pasos; k ++) { digitalWrite(pasoPin, HIGH); delayMicroseconds(pausa); digitalWrite(pasoPin, LOW); delayMicroseconds(pausa); } /* Serial.print("minuto= "); Serial.println (minuto); Serial.print("angulo= "); Serial.println (angulo); Serial.print("incremto= "); Serial.println (incremento); Serial.print("banderita= "); Serial.println (banderita); Serial.print("pasosssss a pasar= "); Serial.println (pasos); Serial.println("_____________________"); */ } if (c == '1') { digitalWrite(dirPin, HIGH); // dirección a la isquierda minuto--; banderita = incremento; angulo = minuto * 6; incremento = (angulo / 0.1125); pasos = banderita - incremento; for (int k = 0; k < pasos; k ++) { digitalWrite(pasoPin, HIGH); delayMicroseconds(pausa); digitalWrite(pasoPin, LOW); delayMicroseconds(pausa); } } if (c == '3') { /////// mete un paso más, debe suceder cada 3 minutos. (se programa en el Master) } if (c == '4') { para = digitalRead(2); if (para == 1) { for (int k = 0; k < 450; k ++) { //Desfase en mi caso (ajustable dependiendo de la rueda impresa). digitalWrite(dirPin, LOW); digitalWrite(pasoPin, HIGH); delayMicroseconds(400); digitalWrite(pasoPin, LOW); delayMicroseconds(400); } delay (100); para = 0; while (para == 0) { para = digitalRead(2); digitalWrite(dirPin, HIGH); // dirección a la izquierda digitalWrite(pasoPin, HIGH); delayMicroseconds(400 ); digitalWrite(pasoPin, LOW); delayMicroseconds(400 ); } for (int k = 0; k < desfase; k ++) { //Desfase en mi caso (ajustable dependiendo de la rueda impresa). digitalWrite(dirPin, HIGH); digitalWrite(pasoPin, HIGH); delayMicroseconds(400); digitalWrite(pasoPin, LOW); delayMicroseconds(400); } } else { while (para == 0) { para = digitalRead(2); conectado = digitalRead (Status); digitalWrite(dirPin, HIGH); // dirección a la izquierda digitalWrite(pasoPin, HIGH); delayMicroseconds(400 ); digitalWrite(pasoPin, LOW); delayMicroseconds(400 ); } for (int k = 0; k < desfase; k ++) { //Desfase en mi caso (ajustable dependiendo de la rueda impresa). digitalWrite(dirPin, HIGH); digitalWrite(pasoPin, HIGH); delayMicroseconds(400); digitalWrite(pasoPin, LOW); delayMicroseconds(400); } } posicion = 0; minuto = 0; banderita = 0; angulo = 0; incremento = 0; pasos = 0; sincro = 1; BT1.print(5); //envía "5" al mando para que sepa que ya está a 0:00 } } } /* ///******************************** if (BT1.available()) { Serial.write(BT1.read()); } if (Serial.available()) { BT1.write(Serial.read()); } } ///////////////////////////// */ |
Programación del mando de control
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
/************************************************ Nombre del proyecto: Mando a distancia para controlar relog didáctico analógico. Programado por Juan Carlos Pedrajas del Molino Https:\\www.geniero.es pedrajas@geniero.es afelio11@hotmail.com Fecha de inicio: 21/04/21 Fecha de finalización: 08/05/21 ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | | 5V/MISO2 [ ][ ] A4/SDA[ ] | | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | TX BT | [ ]RST MOSI/11[ ]~| 5V BT | [ ]3V3 +---+ 10[ ]~| EN BT | [ ]5v -| A |- 9[ ]~| CLK enconder | [ ]GND -| R |- 8[ ] | DT encoder | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | SW encoder | -| I |- 6[ ]~| RX BT | [ ]A0 -| N |- 5[ ]~| | [ ]A1 -| O |- 4[ ] | | [ ]A2 +---+ INT1/3[ ]~| DIO TM1637 | [ ]A3 INT0/2[ ] | CLK TM1637 | [ ]A4/SDA RST SCK MISO TX>1[ ] | | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] | | [ ] [ ] [ ] | | UNO_R3 GND MOSI 5V ____________/ \_______________________/ */ #include <Button2.h> #include <TM1637Display.h> #include <SoftwareSerial.h> #include "ESPRotary.h"; SoftwareSerial BT1(12, 6); // RX | TX #define ROTARY_PIN1 8 #define ROTARY_PIN2 9 #define BUTTON_PIN 7 ESPRotary r = ESPRotary(ROTARY_PIN1, ROTARY_PIN2, 4); //el 4 es por la peculiaridad de mi encoder, que cuenta 4 pasadas en cada salto. Button2 b = Button2(BUTTON_PIN); #define CLK 2 #define DIO 3 TM1637Display display(CLK, DIO); int EN = 10; int VCC = 11; boolean pulsado = 0; boolean selec; int hora = 12; int minuto = 0; int total; int mando; const uint8_t SEG_DONE[] = {SEG_G, SEG_G, SEG_G, SEG_G}; uint8_t data[] = { 0xff, 0xff, 0xff, 0xff }; uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 }; void setup() { pinMode (EN, OUTPUT); pinMode (VCC, OUTPUT); // digitalWrite (EN, HIGH); //AT modo delay (500); digitalWrite (VCC, HIGH); //On BT display.setBrightness(0x0f); Serial.begin(9600); Serial.println(F("Inicio MANDO")); BT1.begin(38400); // r.setChangedHandler(rotate); b.setTapHandler(click); b.setLongClickHandler(resetPosition); r.setLeftRotationHandler(showDirection); r.setRightRotationHandler(showDirection); total = hora * 100 + minuto; display.showNumberDecEx(total, (0x80 >> 1), true); } void loop() { /* /////////////////////// Programación comandos AT para el bluetooth if (BT1.available()) { Serial.write(BT1.read()); } if (Serial.available()) { BT1.write(Serial.read()); } } */ /////////////////////////// r.loop(); b.loop(); } //cuando se rota void rotate(ESPRotary& r) { Serial.println(r.getPosition()); } // Cuando se gira a izquierda=255, cuando se gira a derecha=1 void showDirection(ESPRotary& r) { // Serial.println(r.getDirection()); if (r.getDirection() == 255) { //////////////////hay que eter 3,3,4 pasos por cada 3 minutos para tener 10 pasos por cada 3 minutos. esto haría 100 pasos cada 30 min y 200 pasaos cada 60 min. minuto--; mando = 1; } if (r.getDirection() == 1) { minuto++; mando = 2; } if (minuto > 59) { minuto = 0; hora++; } if (minuto < 0) { minuto = 59; hora--; } if (hora > 12) { hora = 1; } if (hora < 1) { hora = 12; } total = hora * 100 + minuto; display.showNumberDecEx(total, (0x80 >> 1), true); //(0x80>>1) corresponde a los dos puntos del reloj. True corresponde a llenar los huecos con 0 BT1.print(mando); mando = ' '; } //click corto void click(Button2& btn) { Serial.println("Click!"); BT1.print(3); } // click largo void resetPosition(Button2& btn) { r.resetPosition(); //////a ver si puedo cambiar esto, proboca inxactitud en la rotacion. Serial.println("Reset!"); BT1.print(4); display.setSegments(SEG_DONE); while (BT1.available() == 0) { } char c = BT1.read(); if (c == '5') { Serial.print ("ok"); } hora = 12; minuto = 00; total = hora * 100 + minuto; display.showNumberDecEx(total, (0x80 >> 1), true); delay (100); } |
Conexiones Bluetooth
Es momento de empaparse algún tutorial de comandos AT para bluetooth. En esencia, hay configurar el bluetooth del reloj como esclavo y el del mando como master.
Recordar que debemos descomentar la línea que pone en HIGH el pin EN del módulo BT para entrar en modo de comandos AT. Otro recordatorio fundamental es que el terminal serie debe estar funcionando con el retorno de carro y línea nueva al final de línea.
Usaremos AT+ROLE=0 para esclavo y AT+ROLE=1 para Master.
AT+NAME=CRONOS_RELOJ para el reloj y AT+NAME=CRONOS_MANDO para el control (cambia el nombre).
AT+PSWD=1234 para ambos. (asigna el password de acceso).
AT+ADDR? solicita la dirección MAC del módulo esclavo que usaremos después para vincularlos. Responde una MAC parecida a esto: 1234:56:7890
El proceso de configuración del esclavo ha terminado. Debe ser reiniciado y comentar de nuevo la línea del código que activa el EN.
Seguimos con el master al que pondremos en modo de vinculación obligatoria.
AT+CMODE=0
Posteriormente, vincularemos al esclavo conocido.
AT+BIND=1234,45,7890
Nótese el cambio de los «:» por la coma «,».
Ahora debemos resetear el master, comentando también la línea del código que lo pone en modo AT.
Diseño 3D.
El proyecto está compuesto de dos artefactos que se comunican entre sí por radiofrecuencia.
Diseño del reloj.
Constará de 4 engranajes, dos de ellos simples y uno doble. La rueda amarilla estará prisionera por un eje de metal (usé un tornillo de 3mm aunque valdría cualquier eje fijo).
La rueda roja recibe la tracción directamente del motor y el eje metálico se pega a esta rueda por presión. Será el eje de la aguja de las horas. Este eje cuenta con una ranura que facilita y coloca la aguja de las horas en la posición correcta.
La rueda verde será traccionada por la amarilla y será el eje de la aguja de los minutos. Esta aguja ha de ajustarse con un tornillo teniendo la precaución de que coincidan las dos agujas en la posición vertical lo más perfectamente posible.
Se pueden añadir rodamientos para mejorar el rozamiento de las piezas.
Los engranajes se colocarán con sus respectivos ejes en el interior de una estructura sujeta por 6 tornillos M5.
El motor, la electrónica se colocarán en la parte trasera. Se añade un interruptor y una toma de DC.
Por último se coloca la corona del reloj anclada con 5 tornillos.
Modelo real montado.
Impresión de la corona
Se ha impreso en PVC de 5mm de grosor y el tamaño es de 60×60 cm pues las agujas no superan los 23 cm de largo.
Diseño del control
El mando debe ser compacto, robusto y simple. Consta de una caja que contiene el display, un encoder rotativo, un Bluetooth HC-05 para el enviar los comandos de control, una cavidad para una pila de 9V con tapadera y un puerto USB de programación de fácil acceso.
La tapadera de atornillará al cuerpo de la caja con 6 tornillos de 2,5×10 mm.
Conclusiones y problemas encontrados.
Uno de los problemas es que una vez inmerso en el proyecto y casi acabando me dí cuenta que el motor paso a paso no admitía números decimales lo que supone un grave problema a la hora de sincronizar los relojes analógico y digital.
Seguramente habrá una manera mejor de solucionar este asunto. Pero lo solucionaremos haciendo algo de trampa.
El motor que tengo es de 200 pasos por revolución. Esto hace que cada paso complete 1.8º (360º:200 pasos).
Para el reloj necesitaba que la aguja horaria completara una vuelta cada…………………………………………..
(Longitud de la aguja y potencia del motor
ajuste de AMPerios del driver del motor
Problemas con la aceleración del motor y vibración en aguja de minutos
problemas con microsteps
Consumo de la pila 9V)
…………………………………………..