Un antiguo video de mi scalextric.

0

Posted by rdm | Posted in scalextric | Posted on 12-06-2014

http://www.youtube.com/embed?listType=user_uploads&list=ortemedder

ARDUINO & PCLAPCOUNTER & SCALEXTRIC

9

Posted by rdm | Posted in ARDUINO, scalextric | Posted on 18-03-2014

Aquí os dejo como voy llevo el código para hacer funcionar el programa que controla la información, una pista de scalextric PCLAPCOUNTER   www.pclapcounter.com  con un Arduino.

En mi caso he usado el arduino mega, 28 leds y un lcd 20×4. Este código no es definitivo, pero ya es funcional.

arduinomegapclapcounter

 

 

 

 

 

CÓDIGO ACTUAL  (19/03/2014)

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

//start
// define which pins are to be used for the various light functions
#define RED1 22// 1st red pin   1
#define RED2 23// 2st red pin   2
#define RED3 24// 3st red pin   3
#define RED4 25// 4st red pin   4
#define RED5 26// 5st red pin   5
#define RED6 27// STOP LIGT     6

#define GREEN1 30// GO LIGT     7
#define YELLOW1 31// BANDERA AMARILLA 8

#define POWER1 32// CARRIL 1 POWER
#define POWER2 33// CARRIL 2 POWER

#define FALSESTART1 34// CARRIL 1 FS
#define FALSESTART2 35// CARRIL 2 FS

#define STOPGO1 36// CARRIL 1 STOP&GO
#define STOPGO2 37// CARRIL 2 STOP&GO

#define FIRSTPLACE1 40// CARRIL 1 FIRST PLACE
#define FIRSTPLACE2 41// CARRIL 2 FIRST PLACE

#define OUTFUEL1 42// CARRIL 1 OUT FUEL
#define OUTFUEL2 43// CARRIL 2 OUT FUEL

#define LOWFUEL1 44// CARRIL 1 LOW FUEL
#define LOWFUEL2 45// CARRIL 2 LOW FUEL

#define MAXFUEL1 46// CARRIL 1 MAX FUEL
#define MAXFUEL2 47// CARRIL 2 MAX FUEL

#define PITSTOP1 48// CARRIL 1 PIT STOP
#define PITSTOP2 49// CARRIL 2 PIT STOP

int ledPin = 13;
unsigned long nextBlink;
char ledState = LOW;
const int PWRPin = 2;

String inData;
char recieved;
int charsReceived = 0;

// setup the pins for outputs, blinking and open the serial port
void setup()
{
lcd.init();                      // initialize the lcd
lcd.backlight();
digitalWrite (PWRPin, HIGH);
lcd.setCursor (3,0); lcd.print(“PC LAP COUNTER”);
lcd.setCursor (4,1); lcd.print(“ARDUINO MEGA”);
lcd.setCursor (1,2); lcd.print(“24 LEDS & LCD 20×4”);
lcd.setCursor (0,3); lcd.print(“v.19/03/2014”);
pinMode(GREEN1, OUTPUT);
pinMode(RED1, OUTPUT);
pinMode(RED2, OUTPUT);
pinMode(RED3, OUTPUT);
pinMode(RED4, OUTPUT);
pinMode(RED5, OUTPUT);
pinMode(RED6, OUTPUT);
pinMode(YELLOW1, OUTPUT);
pinMode(POWER1, OUTPUT);
pinMode(POWER2, OUTPUT);
pinMode(FALSESTART1, OUTPUT);
pinMode(FALSESTART2, OUTPUT);
pinMode(STOPGO1, OUTPUT);
pinMode(STOPGO2, OUTPUT);
pinMode(FIRSTPLACE1, OUTPUT);
pinMode(FIRSTPLACE2, OUTPUT);
pinMode(OUTFUEL1, OUTPUT);
pinMode(OUTFUEL2, OUTPUT);
pinMode(LOWFUEL1, OUTPUT);
pinMode(LOWFUEL2, OUTPUT);
pinMode(PITSTOP1, OUTPUT);
pinMode(PITSTOP2, OUTPUT);
pinMode(MAXFUEL1, OUTPUT);
pinMode(MAXFUEL2, OUTPUT);

pinMode(ledPin, OUTPUT);

ledState = LOW;
digitalWrite (GREEN1, HIGH) ;

Serial.begin(9600);

}
// look for data on the serial port and turn on/off the lights
// data is ascii strings

void loop()

{

if ( Serial.available() )
{
String b;
b = Serial.readStringUntil(‘[‘);
{ String s;

s = Serial.readStringUntil(‘]’);

if ( s == “SL010″ ) { digitalWrite(RED1, LOW);  lcd.setCursor(7,3); lcd.print(”     “); }
if ( s == “SL011″ ) { digitalWrite(RED1, HIGH); lcd.setCursor(7,3); lcd.print(”   1 “); }
if ( s == “SL020″ ) { digitalWrite(RED2, LOW);  lcd.setCursor(7,3); lcd.print(”     “); }
if ( s == “SL021″ ) { digitalWrite(RED2, HIGH); lcd.setCursor(7,3); lcd.print(”   2 “); }
if ( s == “SL030″ ) { digitalWrite(RED3, LOW);  lcd.setCursor(7,3); lcd.print(”     “); }
if ( s == “SL031″ ) { digitalWrite(RED3, HIGH); lcd.setCursor(7,3); lcd.print(”   3 “); }
if ( s == “SL040″ ) { digitalWrite(RED4, LOW);  lcd.setCursor(7,3); lcd.print(”     “); }
if ( s == “SL041″ ) { digitalWrite(RED4, HIGH); lcd.setCursor(7,3); lcd.print(”   4 “); }
if ( s == “SL050″ ) { digitalWrite(RED5, LOW);  lcd.setCursor(7,3); lcd.print(”     “); }
if ( s == “SL051″ ) { digitalWrite(RED5, HIGH); lcd.setCursor(7,3); lcd.print(”   5 “); }
if ( s == “SL060″ ) { digitalWrite(GREEN1, LOW);  digitalWrite(PWRPin, LOW);  lcd.setCursor(0,3); lcd.print(”        STOP        “) ; }
if ( s == “SL061″ ) { digitalWrite(GREEN1, HIGH); digitalWrite(PWRPin, HIGH); lcd.setCursor(0,3); lcd.print(”         GO “) ; }

if ( s == “SL070” ) { digitalWrite(RED6, LOW); } //; { digitalWrite(RED2, LOW); } ; { digitalWrite(RED3, LOW); } ; { digitalWrite(RED4, LOW); } ; { digitalWrite(RED5, LOW); } ; { digitalWrite(RED6, LOW); }
if ( s == “SL071” ) { digitalWrite(RED6, HIGH); } //; { digitalWrite(RED2, HIGH); } ; { digitalWrite(RED3, HIGH); } ; { digitalWrite(RED4, HIGH); } ; { digitalWrite(RED5, HIGH); } ; { digitalWrite(RED6, HIGH); }

if ( s == “SL080″ ) { digitalWrite(YELLOW1, LOW); digitalWrite(PWRPin, HIGH); lcd.setCursor(0,2);  lcd.print(”                    “) ; } //YELLOW FLAG OFF
if ( s == “SL081″ ) { digitalWrite(YELLOW1, HIGH); digitalWrite(PWRPin, HIGH); lcd.setCursor(0,2); lcd.print(”  BANDERA AMARILLA  “) ; } //YELLOW FLAG ON

if ( s == “PW000” ) { digitalWrite(POWER1, LOW);  digitalWrite(PWRPin, LOW);  lcd.setCursor(0,0);  lcd.print(“1 Off     “) ; }
if ( s == “PW001” ) { digitalWrite(POWER1, HIGH); digitalWrite(PWRPin, HIGH); lcd.setCursor(0,0);  lcd.print(“1 On      “) ; }
if ( s == “PW010″ ) { digitalWrite(POWER2, LOW);  digitalWrite(PWRPin, LOW);  lcd.setCursor(10,0); lcd.print(”     Off 2″) ; }
if ( s == “PW011″ ) { digitalWrite(POWER2, HIGH); digitalWrite(PWRPin, HIGH); lcd.setCursor(10,0); lcd.print(”     On  2″) ; }

if ( s == “FS010″ ) { digitalWrite(FALSESTART1, LOW); digitalWrite(PWRPin, HIGH);lcd.setCursor(0,2);   lcd.print(”            “); }
if ( s == “FS011” ) { digitalWrite(FALSESTART1, HIGH); digitalWrite(PWRPin, HIGH);lcd.setCursor(0,2);  lcd.print(“FALSE START “); }
if ( s == “FS020″ ) { digitalWrite(FALSESTART2, LOW); digitalWrite(PWRPin, HIGH); lcd.setCursor(10,2); lcd.print(”            “); }
if ( s == “FS021” ) { digitalWrite(FALSESTART2, HIGH); digitalWrite(PWRPin, HIGH);lcd.setCursor(10,2); lcd.print(“FALSE START “); }

if ( s == “SG010″ ) { digitalWrite(STOPGO1, LOW); digitalWrite(PWRPin, HIGH);  lcd.setCursor(0,2);  lcd.print(”          “); }
if ( s == “SG011” ) { digitalWrite(STOPGO1, HIGH);digitalWrite(PWRPin, HIGH);  lcd.setCursor(0,2);  lcd.print(“STOP & GO “); }
if ( s == “SG020″ ) { digitalWrite(STOPGO2, LOW); digitalWrite(PWRPin, HIGH);  lcd.setCursor(10,2); lcd.print(”          “); }
if ( s == “SG021″ ) { digitalWrite(STOPGO2, HIGH); digitalWrite(PWRPin, HIGH); lcd.setCursor(10,2); lcd.print(” STOP & GO”); }

if ( s == “FP010” ) { digitalWrite(FIRSTPLACE1, LOW); digitalWrite(PWRPin, HIGH); lcd.setCursor(0,3); lcd.print(“SEGUNDO”); }
if ( s == “FP011” ) { digitalWrite(FIRSTPLACE1, HIGH); digitalWrite(PWRPin, LOW); lcd.setCursor(0,3); lcd.print(“PRIMERO”); }
if ( s == “FP020” ) { digitalWrite(FIRSTPLACE2, LOW); digitalWrite(PWRPin, HIGH); lcd.setCursor(13,3);lcd.print(“SEGUNDO”); }
if ( s == “FP021” ) { digitalWrite(FIRSTPLACE2, HIGH); digitalWrite(PWRPin, LOW); lcd.setCursor(13,3);lcd.print(“PRIMERO”); }

if ( s == “OF010” ) { digitalWrite(OUTFUEL1, LOW); }
if ( s == “OF011″ ) { digitalWrite(OUTFUEL1, HIGH); digitalWrite(MAXFUEL1, LOW ) ; digitalWrite(PWRPin, HIGH); lcd.setCursor(0,1);  lcd.print(”   VACIO  “); }
if ( s == “OF020” ) { digitalWrite(OUTFUEL2, LOW); }
if ( s == “OF021″ ) { digitalWrite(OUTFUEL2, HIGH); digitalWrite(MAXFUEL2, LOW ) ; digitalWrite(PWRPin, HIGH); lcd.setCursor(10,1); lcd.print(”   VACIO  “); }

if ( s == “LF010” ) { digitalWrite(LOWFUEL1, LOW); }
if ( s == “LF011” ) { digitalWrite(LOWFUEL1, HIGH);  digitalWrite(MAXFUEL1, LOW ) ; digitalWrite(PWRPin, HIGH); lcd.setCursor(0,1);lcd.print(“GAS BAJO  “);  }
if ( s == “LF020” ) { digitalWrite(LOWFUEL2, LOW); }
if ( s == “LF021″ ) { digitalWrite(LOWFUEL2, HIGH);  digitalWrite(MAXFUEL2, LOW ) ; digitalWrite(PWRPin, HIGH); lcd.setCursor(10,1); lcd.print(” GAS BAJO “); }

if ( s == “MF011″ ) { digitalWrite(MAXFUEL1, LOW);  digitalWrite(PWRPin, LOW); lcd.setCursor(0,1);   lcd.print(”          “) ; }
if ( s == “MF010” ) { digitalWrite(MAXFUEL1, HIGH); digitalWrite(PWRPin, HIGH); lcd.setCursor(0,1);  lcd.print(“GAS LLENO “) ; }
if ( s == “MF021″ ) { digitalWrite(MAXFUEL2, LOW);  digitalWrite(PWRPin, LOW); lcd.setCursor(10,1);  lcd.print(”          “) ; }
if ( s == “MF020″ ) { digitalWrite(MAXFUEL2, HIGH); digitalWrite(PWRPin, HIGH); lcd.setCursor(10,1); lcd.print(” GAS LLENO”) ; }

if ( s == “PT010″ ) { digitalWrite(PITSTOP1, LOW); digitalWrite(PWRPin, HIGH); lcd.setCursor(0,2);   lcd.print(”          “); }
if ( s == “PT011″ ) { digitalWrite(PITSTOP1, HIGH); digitalWrite(PWRPin, HIGH); lcd.setCursor(0,2);  lcd.print(” EN BOXES “); }//digitalWrite (YELLOW1, HIGH) ; digitalWrite(GREEN1, HIGH ) ; }
if ( s == “PT020″ ) { digitalWrite(PITSTOP2, LOW); digitalWrite(PWRPin, HIGH);  lcd.setCursor(10,2); lcd.print(”          “); }
if ( s == “PT021″ ) { digitalWrite(PITSTOP2, HIGH); digitalWrite(PWRPin, HIGH);lcd.setCursor(10,2);  lcd.print(” EN BOXES “); }//digitalWrite (YELLOW2, HIGH) ; digitalWrite(GREEN2, HIGH ) ; }
}
}
inData = “”; // Clear recieved buffer
}
//end

RUN AS DATE, la de problemas que te quita.

0

Posted by rdm | Posted in Programas, scalextric | Posted on 12-09-2013

Hay un problema a la hora de probar programas y es que el tiempo que te dejan no es suficiente porque es imposible dedicarle las 24 horas del día a realizar la pruebas.

Me encontré con el programa RUN AS DATE, que lo que hace es ejecutar un programa y realiza las interrupciones necesarias para que siempre se ejecute a un día y una hora determinada, con lo cual el plazo de prueba nunca caduca y puedes probar tranquilamente el programa hasta que decides comprarlo, claro. 😉

Esto me paso con el programa que uso para realizar el PITSTOP en mi scx analógico, a veces se colgaba y no dejaba realizar la prueba.

Pues el manejo es muy sencillo, lo ejecutas, buscas el programa en cuestión, le pones día y hora y ya está. Puedes crear un icono en el escritorio que con pincharlo ya hace todo solo al haberlo configurado antes. Probado y funciona perfectamente, al menos me ha valido para lo que necesitaba. No funciona cuando el programa a ejecutar pide la hora de internet.

Os dejo el enlace del creador:

http://www.nirsoft.net/utils/run_as_date.html

 

runasdate

 

 

PD: No lo uséis para prolongar el periodo de prueba es ilegal.

 

Cómo fabriqué la mesa de slot.

0

Posted by rdm | Posted in scalextric | Posted on 15-09-2009

POST EN CONTRUCCIÓN, ESTE POST ES UN ADELANTO:

 

Objetivo:Fabricar una pista de scalextric de considerables dimensiones (5×2) que se pueda subir al techo para no perder espacio en el garaje. 

 

Realización:Para realizar la pista de slot cogí 10 tableros de encofrado (los que se usan en la obras) de 1,98 x 0,5 mts, con lo que tenía ya la medidas de 5,00 x 2,00 mts, que es las que necesitaba. Cogí un angular de 3 cms, con el que hice la estructura donde meter los tableros y realizar una mesa. Los tableros se taladraron por todo el lateral de la estructura (ayuda que tengan los laterales metálicos) y por el centro se unieron con unas placas atornilladas para evitar el balanceo entre ellos ya que al subir y bajar se produciría movimiento.

  mesa1    

 

Alzado:Para subir la mesa cuyo peso estimado sin pistas es de 15 kgs por tablero (150 kgs) y el hierro menos de 50, con lo que la mesa pesa directamente 200 kgs. Las pistas, transformadores y decoración no conozco su peso, pero como margen por exceso le supuse otros 100 kgs, con lo que el conjunto pesa 300 kgs.Para alzar ese peso lógicamente hay que usar unas poleas, con lo que coloqué 10 rodillos a lo largo del tablero, 5 a cada lado a una distancia simétrica para poder subir de una forma más o menos nivelada la mesa.En el techo realicé 10 taladros en las viguetas del techo que fueron rellenados con resina Hilti HYT-HI 150 e inmediatamente metí unos espárragos del 10  con cáncamo donde sujetar las poleas del techo. Para subir todo el peso con seguridad compré un polipasto eléctrico de 400 kgs de fuerza, que es el que tira de toda la estructura. Tuve que calcular el tope automático del polipasto para evitar que tirara en exceso y arrancará la pista . (Ver nota 1.) Cuando empieza a bajar al estar el tiro en el lado contrario al polipasto para que pueda recoger cuerda ya que tiene que subir 1,5 mts y con el recorrido de poleas hace falta más espacio y para evitar que la mesa se incline de ese lado le puse en el centro del lateral dos poleas y un contrapeso de 20 kgs en ese lado, con lo que se nivela la mesa, si se inclina un poco con la mano se regula sin problemas. En la primera versión usé cuerda de seguridad para subir y bajar la mesa que es lo que se ve en el vídeo. Actualmente uso un cable de acero de 5 mm., que es infinitamente más seguro. Cuando la bajo la apoyo sobre unas borriquetas, aunque lo suyo es soltar unas patas de quita y pon, que cuando sea capaz de diseñarlas se lo pondré.

 

 

techo1polipasto1

 

Seguridad:Hay que estar tranquilo cuando andas debajo de la estructura o aparcas el coche, pero ante un fallo del cable bastante improbable ya que el peso es compartido por 6 puntos en el techo, dejé otras 4 sujecciones con cáncamo en el que una vez que subo la mesa pongo una eslinga de grúa torre por debajo del tablero y lo bajo unos centímetros para que apoye sobre la misma, así todo trabaja en conjunto, repartiendo el peso entre 10 puntos del techo más el polipasto en la pared. Para bajar subo el polipasto a tope hasta que el freno automático funciona, entonces libero las eslingas de un lateral y bajo la estructura, en ningún momento estoy debajo de la misma.   

 

Nota 1: Cuando cambié la cuerda por el acero, al ajustar los dos lados de la mesa, uno se quedó más corto que el otro y el polipasto tiró demasiado, rompiendo el anclaje del inicio de la mesa, no pasó nada ya que el resto siguió aguantando. La solución fue ajustar bien la distancias de los cables y poner los dos primeros espárragos con sus cáncamos del 12, ya que es la pieza que más trabaja de toda la mesa.

tablero encofradoeslinga

HAY QUE MANTENER SIEMPRE TODAS LAS MEDIDAS DE SEGURIDAD QUE SEAN PRECISAS Y TENER CLARO TODO LO QUE SE HACE, COLOCAR UNA ESTRUCTURA COMO ESTA SOBRE NUESTRAS CABEZAS PUEDE OCASIONAR UN GRAVE ACCIDENTE.

REALIZAR SÓLO POR PERSONAL CUALIF

ICADO Y NUNCA ESTAR DEBAJO EN LAS MANIOBRAS DE ALZADO-BAJADA.

seguridad 1

SCALEXTRIC

0

Posted by rdm | Posted in scalextric | Posted on 14-09-2009

Os dejo unas fotos de cómo es mi pista de scx.  Se puede ver el maravilloso programa PCLC( PC LAP COUNTER, gracias GUY), y el PITSTOP creado con la cámara web. Todo funciona perfecto.

scxall1 pitstop1 pitostop2 pclc1