Control de tiempos para Karting

Hola compañeros, soy nuevo en este foro, y en el uso del arduino.

El proyecto que tengo en mente, es la contrucción de un sistema para controlar los tiempos por vuelta de karts en un circuito.
Mi idea es utilizar un módulo arduino (El modelo UNO es el que tengo) y un módulo RFID (tengo el Adafruit PN530 de 13,56MHz).

Conseguí ponerlo a funcionar utilizando el siguiente código:

#include <Adafruit_NFCShield_I2C.h>

   #include <Wire.h>
   #include <Adafruit_NFCShield_I2C.h>
    
   #define IRQ (2)
   #define RESET (3) // Not connected by default on the NFC Shield
    
   Adafruit_NFCShield_I2C nfc(IRQ, RESET);

int SerialValue = 0;
int dato;
   void setup(void) {
     pinMode(13, OUTPUT);
   Serial.begin(9600);
   Serial.println("Hello!");
    
    
   nfc.begin();
    
   uint32_t versiondata = nfc.getFirmwareVersion();
   if (! versiondata) {
   Serial.print("Didn't find PN53x board");
   while (1); // halt
   }
   // Got ok data, print it out!
   Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
   Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
   Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
   // Set the max number of retry attempts to read from a card
   // This prevents us from waiting forever for a card, which is
   // the default behaviour of the PN532.
   nfc.setPassiveActivationRetries(0xFF);
   // configure board to read RFID tags
   nfc.SAMConfig();
   Serial.println("Waiting for an ISO14443A card");
   }
    
   void loop(void) {
     if (Serial.available()) {
     SerialValue = Serial.read();
 if (SerialValue==50)
 {
   digitalWrite(13, HIGH);
   }
   if (SerialValue==10)
   {
     digitalWrite(13, LOW);
     }
     }
   if (Serial.available()) {
     dato = Serial.read();
     if (dato==20)
     {
       Serial.println();
     }
   }
  
   boolean success;
   uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
   uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
   // Wait for an ISO14443A type cards (Mifare, etc.). When one is found
   // 'uid' will be populated with the UID, and uidLength will indicate
   // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
   success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
   if (success) {
   Serial.println("Found a card!");
   digitalWrite(13, HIGH);
   Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
   Serial.print("UID Value: ");
   for (uint8_t i=0; i < uidLength; i++)
   {
   Serial.print(" 0x");Serial.print(uid[i], HEX);
   }
   Serial.println("");
   // Wait 1 second before continuing
   delay(100);
   digitalWrite(13, LOW);
   }
   else
   {
   // PN532 probably timed out waiting for a card
   Serial.println("Timed out waiting for a card");
   }
   }

Me lee las tarjetas correctamente, pero no consigo que el led conectado en el Pin 13 se encienda.

Mi idea, es conectar esa salida a un relé, para que maneje el semáforo del circuito con el programa de control que irá en el PC.

Al módulo que tengo de RFID, creo que no se le puede conectar una antena externa, y aquí es donde viene una de mis dudas. Que me aconsejáis que utilize para poder enviar y recibir las señales con la antena en el circuito? La pista es de 5,50m de ancho, y los tags/transponders irán colocados a unos 25-30 cm del suelo.

La antena irá en el suelo, a lo ancho de la pista.

Leí en algún post del foro, de un compañero que estaba preparando un sistema similar, pero para maratones, y le aconsejaron que utilizase "Tiris". Tengo pensado que el dispositivo que vaya en el kart, sea Tag, tiris o el que me aconsejeis, que sea alimentado, porque parece ser que tienen mayor alcance, cierto?

Bueno, espero no haber dicho demasiadas tonterías, :wink: , ya que soy nuevo en esto del arduino :grinning:

Mi duda principal, es como puedo hacer que la antena sea de unos 5,50m de largo, y que envíe/reciba la señal hasta una altura de 25/30cm. También, si pudiera ser, colocaría la antena "doble", quiero decir, ida y vuelta, que es como la ponen algunas casa de cronometraje de karting, con una separación de unos 40 cm entre los cables

http://www.chronelec.com/supports/manuals/loop/en/How%20to%20install%20the%20loop%20on%20circuit.pdf

Muchas gracias de antemano por vuestros consejos y opiniones

Una pregunta. Sabéis que puede ser la caja negra que se ve en el enlace? entra un RG58 y sale la antena.

Por lo que veo, hay una "antena" puesta en el suelo que recoge la señal del transponder del vehículo y va a la caja negra.
De esta sale un cable RG58 (tipo muy usado por radioaficionados) que envia la señal RFID de la caja negra a una antena (que no esta representada) y que manda la señal al control.
La caja negra es un transmisor de radio frecuencia.

Creo.

yo quiero hacer algo parecido para maratones, pero hay cosas que me detienen igual que a ti, el tema de la antena y ademas el tema de la colision de datos, hay algoritmos pero son privados...

se puede solucionar a base de una antena direccional de largo alcance que ya tiene implementadas soluciones para todos los problemas, pero a parte de valer 300€, no tiene ningun merito, tiene una salida RS232 con los tags que van apareciendo (Hasta 500 tags/s...)

Gracias a los dos por contestar.
En mi caso, como mucho podrían entrar a la vez 5 karts (y se tendría que dar una casualidad que no ví nunca en ese circuito...), pero lo normal, es que como mucho entren 2-3 cerca, que ni siquiera sería a la par. A la par lo normal e que puedas ver pasar 2.
Con el módulo que tengo de RFID, puedo leer hasta unos 10cm de altura.
La antena que le ponga (a ese, o a otro módulo que se pueda), más que leer a mucha distancia, lo que tiene es que darme una lectura a unos 25-30cm, pero todo a lo ancho de la pista.
No sé si este módulo podrá dar la suficiente energía como para conseguir eso.
A las malas, si consigo que lea a esos 10 cm, me conformaría, porque situaría los tags más cerca del suelo. Pero claro, la longitud y sección del cable (aunque lo calcule para que coincida con la frecuencia) supongo que demandará más consumo, y a lo mejor frío la placa, no lo sé.

Al ver lo que comentas Jopapa, de que la caja negra puede ser un transmisor de RF, ví que hay módulos para arduino receptores y emisores, que no me fijara en ellos antes.

Quiero decir, que lo estoy enfocando desde el RFID, porque me pareció el mejor sistema, pero si con esos transmisores/receptores lo puedo hacer, no me importa cambiar el proyecto. Como tengo pensado usar tags activos, me daría igual tener que alimentar desde el kart un tag o un transmisor.

Los problemas que podría tener con estos, supongo que serán los mismos que los tags; que todos emiten en la misma frecuencia, y que se solapen unos a otros.

Bueno yo te arrojo otro problema y es que cuando pase el Kart a que velocidad, 60 80 90 120 km/h que tiempo tiene el lector RFID para detectar el tag?

Veamos 72 km/h son 20 m/seg entonces :

No es lo mismo un maratonista que un kart.

Sabemos que dispongo de un tiempo T para reconocer el TAG.

Asi que imagina que pasará si no lo reconoce... donde te escondes si 5 karts pasan juntos?

Primero, es lo suficientemente fiable como para detectar 1 kart a digamos 20m/seg (72km/h) en 10 mseg? Recorrerán t = d/v = 0.65 m/20m/seg = 32.5 mseg

Debes comenzar garantizando en 32 mseg puedes reconocer una tarjeta RFID para empezar, luego discriminar entre varias.

IMPORTANTE:
No olvides usar tags para todo, codigos, imagenes, enlaces. gracias.

La gente de http://www.cronolaps.es/ lo hacen poniendo unas antenas en el puente del semáforo de salida. No tengo ni idea de si usan RFID, pero creo que si, porque el transponder que te dan, es una tira adhesiva que se pega en el vehículo y que no hay que alimentar con nada.

Hola, muchas gracias a los 2.
El tema de la velocidad, me preocupa "menos", porque la meta está a la salida de una curva, y la velocidad no creo que sea más de 40 Km/h, pero lo tendré en cuenta de todos modos.
Tengo pedidos unos transmisores / receptores de 433Mhz y unos H12E y H12D, para intentarlo de otro modo.
Colocando en cada kart el transmisor de 433Mhz con el H12E, y enviando un código de 4 bits. Luego conectar el receptor con el H12D a 4 pines del puerto D del arduino, y que según el código que reciba, lo asocie con un kart y enviarlo al PC.
Lo que tendré que hacer, es limitar la transmisión para que no alcance más de unos 30cm (al revés que antes, que necesitaba más alcance).
Lo que no sé es el retardo que puede tener el arduino entre que recibe la emisión y me la envía al pc.

y si pasan dos juntos que haces con la colisión de las dos transmisiiones?

Sí, tienes razón. Lo había pensado también. Si consigo que la recepción sea lo más cercana posible entre la antena de pista y la del transponder, y sea fiable, lo siguiente será poder establecer un orden de lectura (como hace el RFID), que sea el lector el que active/desactive los emisores.
Por eso empecé con la idea de hacerlo con RFID.

que sea el lector el que active/desactive los emisores.

tiempos en los que eso puede ocurrir?

Voy a plantear una situación de peor caso pero solo para evaluar la situación.
Supongamos dos kart con 1mseg de diferencia que llegan a la linea final.
Como podrías discriminarlos y como evaluar dicha diferencia?
Tal vez dos lectores?
Me acabo de dar cuenta que por el ancho del loop es impráctico la idea que dije hace un momento.

Yo no hábia advertido que el LOOP tiene 65cm de ancho, asi que no se que significa eso para dos tags que estan emitiendo/recibiendo dentro del loop con 1mseg de diferencia.

Mirando la página de la empresa que te vende el lector veo que tienen un equipo con una estabilidad asegurada de (TCXO 0.2 ppm) and a resolution at 1/10000th.
Protime Elite Pro Decoder

bueno, me quedé en la nada. Sigo analizando.
Puedes decirme que tipo de RFID usaras para poder buscar el protocolo utilizado?

buscando buscando me encontré con esta información por ahora.
Algoritmo de colisión de errores Q+

An Anti-Collision protocol of RFID Based on Divide and Conquer Algorithm

Analysis and Simulation of RFID Anti-collision Algorithms

Ante todo, muchas gracias por la ayuda.

El material del que dispongo para las pruebas son:
Arduino uno
Lector RFID Adafruit PN532 (13,56MHz)
2 tags (uno de tarjeta y uno de pegatina)
3 juegos de emisor, receptor 433Mhz + HT12D + HT12E

Estoy mirando información, para intentar enterder como funciona ese loop que está en la meta, y como transmite la información.
Lleva una resistencia de 470ohm, y lo que está en la caja negra, a donde se conecta ese loop, entiendo que es algún tipo de transformador para adaptar impedancias. ¿Puede ser?

Sin buena información de como funciona justamente ese tremendo detalle de las colisiones esta complicadito el proyecto.

Leo mucho sobre colisiones pero no veo como implementarlas.
A ver si alguien puede mirar los links que puse o buscar los suyos y desciframos como detectar dos tags cercanos?

Ok. Miré en una página (a ver si la vuelvo a encontrar y pongo el enlace), que me daba a entender, que las colisiones las solucionaba asignandole un numero de orden a cada tag. Es decir, que si llegan los dos a la vez, el emisor transmite un código para establecer el orden de quien va primero. Ese código lo leen los tags y se ordenan.
Como consiguen eso, emitiendo todos a la vez y en la misma frecuencia, es lo que no doy entendido. Y a suficiente velocidad, claro...

P.D. este es el enlace. Es un PDF

Pregunta y puedes probarlo rápidamente. Monta el loop en el piso respetando distancias e intenta pasar dos tags juntos a ver que devuelve el receptor y si pierde el segundo que es lo mas importante.
Evidentemente no hay nada porque esta implementado a nivel receptor. Creo darme cuenta de ello.

Parece ser que este es el esquema

Y acá dice como diseñar una antena
El diseño de la antena me supera. Yo generalmente cuando veo estos esquemas si los necesito los compro. Como creo que es tu caso.
Ahora como lograr que el receptor funcione con ese loop supongo que es un problema de adaptación de impedancias.

Lo probé justamente esta tarde :smiley: , pero no conseguí que me leyese con las medidas del loop del circuito.
Luego lo que hice, fue una antena del mismo tamaño que la que viene integrada en el Adafruit, y si la ponía en la mesa a modo de loop, no leía nada. Pero, ese mismo cable, si lo haces en espiral, lee perfectamente. Hasta modifiqué el tiempo del delay que viene al final del código (que está a 1seg) y lo puse a 1mseg, y el puerto a 115200, y lee perfectamente.
La prueba que hice con el cable largo (5.25 metros, 1/4 de onda de 13.56MHz) no me funcionó ni con el cable en forma de loop, ni enrrollado.
Supongo que la placa Adafruit no tendrá suficiente energía.
El cable que usé, es de 0.28mm2 de sección.

Claro que tu compraste el loop pero no la electrónica que está asociada al loop. Si es como dices y sugieres

Supongo que la placa Adafruit no tendrá suficiente energía.

entonces habría que reforzar la salida del Receptor RFID.
A investigar no te parece?
Habías puesto el modelo de receptor que estas usando? a ver si podemos encontrar un esquema electrónico. Si es Adafruit seguro que esta.

Sí, justamente. es lo que estoy tratando de encontrar. Como hacer un amplificador que me permita emitir y recibir señal.
A ver que va apareciendo.

El esquema que puse es el de tu Receptor RFID? Puedes confirmarlo?

Bueno por lo que veo esta mas que complicada la cosa.
Se trata de un circuito sintonizado a 13.56Mhz de modo que modificar algo ahi requiere de entender al pie de la letra la nota de diseño de antenas.
Como tu antena ya esta diseñada porque es tu loop comprado y ya que no recibes nada pareciera ser que tu problema esta en una adaptación de impedancias como dije antes.

Yo conectaría un osciloscopio e intentaría ver si hay actividad.