Gestor de carreras de Scalextric

Os presento mi primer proyecto.
Es un gestor de carreras para mi pista de scalextric. Aún está verde, especialmente la parte electrónica. Aunque me está valiendo para aprender (hasta que empecé no tenia ni idea de electrónica ni casi de programación).

Lo que pretendo es que se puedan definir el número de vueltas, se encienda un semáforo como el de la F1 y que de la salida. Una vez dadas las vueltas definidas se muestra el tiempo de vuelta mas rápida y vuelta a empezar.

Pues sin alargarme mas, aquí os dejo el código y el esquema eléctrico que estoy usando para hacer pruebas:

Y este es el código:

/*
Cuentavueltas y crono
 
 */

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int Nvueltas = 1; //Numero de vueltas
int control = 10; //Pin de control (Boton A)
int control2 = 5; //Pin ANALOGICO de control 2 (Boton B)
int rojo1 =  6; //Pin led rojo 1
int rojo2 =  7; //Pin led rojo 2
int rojo3 =  8; //Pin led rojo 3
int verde =  9; //Pin led verde
int intervalo =  1000; //Intervalo de la secuencia
int paso = 13; //Pin de paso de vuelta
int vuelta = 0; //Contador de vueltas
unsigned long tiempoF = 0; // Tiempo de fin de vuelta
unsigned long tiempoS = 0; //Tiempo de salida de vuelta
unsigned long tiempoV = 0; //Tiempo de vuelta
unsigned long tiempoR = 99999; //Vuelta rapida



void setup()    {
  pinMode(rojo1, OUTPUT);
  pinMode(rojo2, OUTPUT);
  pinMode(rojo3, OUTPUT);
  pinMode(verde, OUTPUT);
  pinMode (paso, INPUT);
  pinMode (control, INPUT);
 // set up the LCD's number of rows and columns: 
  lcd.begin(16, 2);
  lcd.print("Vuelta:");
  lcd.setCursor(0, 1);
  lcd.print("Tiempo:");
}

 void semaforo()
  {
    digitalWrite(rojo1, HIGH); //Encendido secuencial de los rojos
    delay(intervalo);
    digitalWrite(rojo2, HIGH);
    delay(intervalo);
    digitalWrite(rojo3, HIGH);
    delay(intervalo);
  
    digitalWrite(rojo1, LOW); //Apaga los leds rojos
    digitalWrite(rojo2, LOW);
    digitalWrite(rojo3, LOW);
    digitalWrite(verde, HIGH); // Enciende el verde
    delay(intervalo*2);
    digitalWrite(verde, LOW);  //Apaga verde
    tiempoS = millis();
  }

void pasoDEvuelta(){
    vuelta = vuelta + 1; //Conteo de vuelta
    tiempoF = millis(); //Calculo de tiempo de vuelta
    tiempoV = tiempoF - tiempoS;
    tiempoS = tiempoF; //Pone el tiempo de salida nuevo
    if (tiempoR > tiempoV) {
      tiempoR = tiempoV;
    }
    delay(250); //Espera para para no contar varias veces por paso
}

void pantalla(){
  //Mostrar el numero de vuelta y tiempo
  lcd.clear();
  lcd.print("Vuelta:");
  lcd.setCursor(0, 1);
  lcd.print("Tiempo:");
  lcd.setCursor(10, 0); //Situar el cursor
  lcd.print(vuelta);
  lcd.setCursor(10, 1); //Situar el cursor
  lcd.print("   ");
  lcd.setCursor(10, 1); //Situar el cursor
  lcd.print(tiempoV/1000);
}

void fin() {
  //Muestra vuelta rapida
  lcd.clear();
  lcd.print("Vuelta rapida:");
  lcd.setCursor(0, 1);
  lcd.print(tiempoR / 1000);
  delay(5000);
  Nvueltas = 1;

}

void numeroDEvueltas() {
   lcd.clear();
   lcd.print("Cuantas vueltas?");
   lcd.setCursor(0, 1);
   lcd.print(Nvueltas);
   
  //Definir el numero de vueltas de carrera
  
 while(analogRead(control2) < 256) {


   if (digitalRead(control) == HIGH ) {
     ++Nvueltas;
     lcd.setCursor(0, 1);
     lcd.print("   ");
     lcd.setCursor(0, 1);
     lcd.print(Nvueltas);
     delay(250);
   }
 }

 lcd.clear();
 lcd.print("Preparados?"); 
 lcd.setCursor(0,1); 
 lcd.print("A");
while(digitalRead(control) == 0) {
delay(5);
}
delay(5);
}
  
void loop()  {
  lcd.clear();
  lcd.print("     BUENA");
  lcd.setCursor(0, 1);
  lcd.print("    CARRERA!");
  delay(3000);
  numeroDEvueltas();
  semaforo();
  vuelta = 0;
  //Cuenteo de vueltas y tiempos
  
 
while(vuelta < Nvueltas){
  if (digitalRead(paso) == HIGH ) {
    pasoDEvuelta();
    pantalla();
    }
    }
  
  fin();

Los planes de futuro incluyen mejorar la parte electrónica, cambiando el pulsador de paso de vuelta por un sistema de led + resistencia fotoelectrica, implementar el corte de corriente a la pista, añadir un segundo corredor y un sistema de simulacion de repostaje. Tambien le añadiré comunicacion con el PC por el puerto serie para usar programas de gestion de carreras. Y si se me ocurre algo mas tambien irá cayendo.

Gracias por leerlo y espero vuestros comentarios.

PD: Cuando pueda pongo un video del funcionamiento.

1 Like

Hola, veo que no soy el único que intenta hacer algo parecido!!!...

Yo también estoy liado en algo parecido..... si quieres ver algo o compartir información aquí me tienes.

PD. Te pongo un enlace a mi Blog: www.iceslot.tk o ice-slot.blogspot.com

Saludos!!!!

Realmente me inspiré en tu trabajo, pero lo que realmente mas me motivo fue tu última frase:

"ahora estoy liado con el programa para hacer el marcador autónomo, es decir, que no haga falta un PC para controlarlo."

Me dije a mi mismo: ¿Y si lo hago al revés? Hacerlo totalmente autónomo y mas adelante implementar la comunicacion serie. Y eso es lo que estoy tratando de hacer.

Ahora estoy puliendo el codigo que ya está hecho para que quede bonito y comentándolo. Ya veremos.

Y lo mismo te digo, aunque poco te podre ayudar. Solo tengo buenas ideas.

Gracias!!!

Veo que alguien se mira mi blog, jejejeje

Pues yo lo hice al revés, primero con un PC (por puerto paralelo, hasta que se murió y me compré un portatil sin puerto paralelo, por eso hacerlo autónomo) y ahora autónomo.....

Ya sabes, cualquier cosa me envías un email o te pones en contacto conmigo y comentamos!!!

Un saludo y de nuevo gracias!!!

Os está quedando curioso, yo estoy pensando en hacer algo similar pero para robots de línea. Quizás os interese más utilizar un sensor de efecto hall para detectar el paso de los coches que el CNY70, ya que en éste puede influir bastante la luz ambiente, yo ando buscando que sensor utilizar.

Saludos.

A mi tb me gustaria usar el efecto hall, pero no encuentro sensores en formato adecuado (muestras gratuitas).

Le he hecho algunas modificaciones:

He cambiado las entradas a los pines analógicos para liberar los digitales para futuras aplicaciones y le he añadido sonido al semáforo y al paso de vuelta.

Y otra cosita:

¿¿Como puedo desoldar componentes grandes (como un relé) de una placa?? Me veo incapaz de hacer solo con el soldador.

Hola, pues la verdad yo no tengo problemas con el CNY70 ya que el circuito puede ajustar la sensibilidad.
Las pruebas que he hecho la verdad que muy bien y no he tenido falsas "lecturas"

Por cierto Esog, a ver si muestras algunos resultados jejeje ah, y si encuentras muestras gratis de los sensores hall me lo dices....

Ah se me olvidaba , yo para desoldar uso un soldador normal, algo para hacer un poco de "palanca" y paciencia!

Lo malo es si lo usas en un sitio con luz solar (no sé si lo habrás probado en estas condiciones) o le da luz directamente, que se te puede saturar el sensor, y entonces no hay ajustes que valgan.

Pues la verdad, lo probé al aire libre y con sol.... y no me pareció que fallara.... suerte ¿? no se.
Pero lo tendré en cuenta , gracias

yo tengo pensado probar dos "sensores":

1: Mas profesional: Con un led IR y una fotoresistencias (ya "muestreadas") en cada ranura, no como Iceman en forma de pueste, sino que estara escondido debajo de la pista.

2: Parte de un sistema comercial, en concreto de Superslot. El "sendor" de paso consiste en dos plaquitas metalicas que cierran el circuito al pasar un coche. Este es el que uso ahora con los cronometros comerciales y es el que menos falla.

Tambien se podria usar un relé magnético, como en las pistas de Scalextric, pero ni todos los motores tienen mucho iman ni mis coches lo llevan. Es con diferencia el peor.

Ya veré. Hare pruebas.

El contador de vueltas de Scalextric es un simple interruptor que se activa al pasar el coche.
Lo malo es que está integrado en la pista y difícilmente se podría replicar o hacer algo similar caseramente.

Has probado de hacerlo con uno tipo ranura?

Por muchos foros de slot hay gente que lo ha hecho de esa manera, el funcionamiento es similar al del CNY70 y te ahorrarás algún que otro problemilla con la luz ambiente como comenta JMN.

Chiva.... no te puedes llegar a imaginar las maneras de hacer un cuentavueltas para slot, los hay a miles de formas y colores jejejej

Un Saludo.

No, si ya, pero nunca vienen mal ideas cuando estás en la fase de creación.

Chiva: No es tan "complejo" Solo es un interruptor bajo la pista. Lo malo es que no están bien orientados. Si se despegan y se colocan paralelos a la pista mejoran mucho, pero no lo suficiente, especialmente con algunos coches (casi todos los de otras marcas), que simplemente los ignora. Y por supuesto que las ideas son bien recibidas siempre.

Iceman: Si te refieres a colocar el led IR a un lado de la ranura y en el otro una fotorresistencia, eso es lo que voy a usar, pero la pista de Superslot, que tiene las plaquitas de metal ya la tengo "montada", e incluso adaptada al crono de scalextric ("cortar cable, soldar cable") con un jack y me seria muy facil utilizarla. Y la sensibilidad (por decirlo de alguna forma) mejoró mucho con el cambio.

De todas formas tengo pensado implementar gestion del combustible, y posiblemente use todo lo que tengo para detectar la pasicion de los coches en ciertas partes del circuito. Realmente me da igual como se cierre el circuito mientras que lo haga.

PD: Siento las faltas en el post anterior, lo escribí en el curro y me costo todo el dia poder terminarlo. Es lo que tiene la atencion al publico .....

Esog , me refiero a este tipo de sensor

encaja bastante bien entre las guias de la pista.

Si, ese es el tipo de sensor que compré. Supongo que irá bien.
De todas formas el de superslot va perfecto tambien.
Ahora estoy esperando unas cuantas muestras que he recolectado, a ver que me mandan.

A ver si tienes suerte!
Yo de 3 pedidos me han servido 2.... y la verdad perfecto!!!

Saludos.

Y mucho, mucho tiempo despues, os puedo presentar novedades.

www.juanjofrancia.homeunix.com

Ya es bastante funcional para un corredor.
Pero lo mejor lo publicaré esta semana: ya tengo casi listo el segundo corredor (que me ha costado lo mio por poner un = donde deberia poner ==, lo que me costo encontralo). Me falta pulir la informacion de pantalla, cuatro tonterias.

Tambien he modificado el hardware, varias veces, y las que quedan, por que me falta el poner / quitar la corriente de la pista, y para eso tengo intencion de usar dos optoacopladores controlados por el 595 que uso para el semáforo, y controlar cuando se activaran los pasos de vuelta y cuando no, que lo hare tb por medio del 595.

Ya me direis que os parece.

Y perdonad que no os ponga aqui toda la informacion, pero creo que es mucho para un foro y va mejor en la web. Si no es asi decidmelo y lo pongo.