Go Down

Topic: Gestor de carreras de Scalextric (Read 5 times) previous topic - next topic

Esog Enaug

Jul 22, 2010, 03:52 pm Last Edit: Jul 22, 2010, 04:18 pm by Esog_Enaug Reason: 1
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:

Code: [Select]

/*
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.
La electrónica y el slot (o esos cochecitos)
http://www.juanjofrancia.es/arduslot

ICEMAN

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: http://www.iceslot.tk  o http://ice-slot.blogspot.com

Saludos!!!!

Esog Enaug

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.
La electrónica y el slot (o esos cochecitos)
http://www.juanjofrancia.es/arduslot

ICEMAN

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.

Esog Enaug

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.
La electrónica y el slot (o esos cochecitos)
http://www.juanjofrancia.es/arduslot

ICEMAN

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....


ICEMAN

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

*

#8
Jul 26, 2010, 10:04 pm Last Edit: Jul 26, 2010, 10:05 pm by JMN Reason: 1
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.

ICEMAN

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

Esog Enaug

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.
La electrónica y el slot (o esos cochecitos)
http://www.juanjofrancia.es/arduslot

chiva

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.
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

ICEMAN

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.

chiva

No, si ya, pero nunca vienen mal ideas cuando estás en la fase de creación.
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Esog Enaug

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 .....

La electrónica y el slot (o esos cochecitos)
http://www.juanjofrancia.es/arduslot

Go Up