hola comunidad otra vez, como estan ??... bueno lo que me trae aquí es que estoy haciendo un hardware para jugar juegos de carrera, bueno les pongo un enlace para que vean lo que intento de hacer:
esto lo voy a hacer con motores en vez de actuadores
por otro lado comento lo que tengo ya echo, y lo que me falta. pero para empezar a describir esto tengo que dejar en claro que todo lo estoy adaptando a un manubrio que ya tengo, que es el genius twin wheel f1 ya que a este ya le tengo los drive.
bueno como verán este manubrio trae 2 pedales (acelerador + freno) + el manubrio en cuestión que trae Vibration Feedback . pero como se darán cuenta les falta el pedal de embrague y la palanca de cambio además del freno de mano, además de la caja para simular todo los movimientos que se tienen en consideración a la hora de conducir. ahora bien lo que yo ya tengo echo es la palanca de cambio (les dejo unos videos de esta mas unas fotos), la cual la hice por medio de una palanca de las que se usa para jugar juegos de aviones. donde esta la desarme como verán en las fotos y solo deje la parte de adentro la que trae los potenciómetros. esta la monte en un nuevo gabinete el cual les hice las correderas que trae la palanca de cambio que es una H + otra línea paralela a la H, algo así H-I , este ya lo adapte al manubrio usando solo 2 teclas de este mismo, me explico.
mi manubrio trae 2 botones posteriores con unas palanquitas el cual servían para incrementar y bajar las marchas, ahora yo use esos 2 botones para adaptarlo a mi palanca de cambio, donde a este le puse un PIC al cual le grave una rutina, en donde este me detectaba en que cambio esta y me mandaba los pulsos necesarios a los 2 botones correspondientes de mi manubrio, ejemplo si yo quiero pasar a segunda, tengo que apretar uno de los botones para subir la marcha de parte de mi manubrio 2 beses para llegar a la segunda y para bajar a primera tengo que apretar el otro botón para bajar marcha. ahora bien lo que yo hice con el programa de mi pic es que si tengo la palanca de cambio en segunda el pic manda 2 pulsos al boton de subir marcha y si tengo que bajar la marcha por ejemplo a primera el pic nuevamente le manda una un pulso al boton de bajar marcha estos pulsos son tantos como en el cambio que esta con el cambio que quiere estar. pero bueno mejor vean el video que les dejo para que entiendan.
ahora bien el freno de mano lo voy a hacer también simulando uno real, esto lo ago por medio de un boton mas del manubrio, nada difícil, por otra parte el embrague como el drive de mi manubrio no lo tiene considerado, lo que voy a hacer es que mi pic detecte que cada ves que se pase un cambio de mi palanca de cambio se tiene que tener el embrague ya presionado, y si esto no fuere así mi pic le da un pulso al manubrio asiendo que se presione el freno deteniendo el auto de forma inmediata y desactivando el acelerador. (me e dado cuenta que los buenos juegos de auto traen la opcion de poner un boton al ambrague, es por ello que solo le voy a adaptar 1 boton a este mismo, los botones de mi manubrio me di cuenta que hacen un juego como de potenciometro a mayor presion sobre él menor es la resistencia que imponen al circuito, esto es que , cuando el boton esta sin precionar marca 10K y cuando lo preciono a full marca 100 ohm aveces asta 0 ohm, es por esto que este boton lo saco y lo cambio por un potenciometro de 10K que va situado en el ambrague.)
ahora bien la caja que va a simular los movimientos reales del auto que se conduce tengo ideas de esto pero quiero ver si ustedes saben algo que yo no, me explico mejor con mi idea:
los movimientos que se ejerce por la fuerza de inercia cuando dobla el auto en el piloto es contraria al movimiento que esta teniendo el auto, debido a que el conductor intenta seguir la trayectoria de forma recta. es por esto que cuando se dobla a la izquierda en un auto el piloto va hacia la derecha, bueno este efecto es fácil de hacer para que los actuadores o motor o lo que sea realice el movimiento contrario al manubrio, me explico el manubrio en cuestión tiene un potenciómetro, donde este revisa periódicamente en el ángulo que se encuentra el manubrio, este sensor por llamarlo de algún modo lo conecto también a mi pic el cual detecta que si el manubrio esta inclinado a la izquierda los actuadotes tienes que ir a la derecha, haciendo el movimiento contrario en la silla, pero lo que no se y ni se me ocurre es como puedo detectar los baches que están en el camino del juego para que los actuadotes repliquen este efecto en la silla. es por esto que estaba pensando que alo mejor seria mejor hacer otro software para el manubrio que pueda controlar todas sus partes, y que este se pueda conectar con los distintos juegos de auto o lo que sea que se quiera hacer con esto. es por ello que les pido ayuda para poder solucionar este embroyo ó alguna idea al respecto.
bueno por otro lado e estado diseñando la pedalera para hacerla, les dejo otro video para que opinen de como me esta quedando.
por otro lado estava pensando que hay programas que detectan el Force Feedback de los juegos, y si sera posible sacar de ahy el comando de los actuadores ó motores que controlan la "caja" ????
uf espero averme explicado bien, y bueno sino aquí estamos para aclarar las cosas, y quien sabe haber si alguien de ustedes se anima a esto y al final salimos varios con este proyectito ya echo, por que como veran es un poco engorroso lo que quiero hacer.
ademas aqui les dejo el codigo que asta el momento tiene el pic, que es solo para el control de la palanca de cambio, y ademas ya probado, y les coment oque funciona de lo mas bien.
#include <16F876a.h>
#device adc=10
#fuses HS,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=20000000) //clock=4Mhz
#define use_portb_lcd TRUE //definir portb lcd
#include<lcd.c> //libreria manejo lcd
float const resolucion= 5.0/1024.0; // Conversión con 10 bits
float rango1, rango2;
int16 V1,V2;//variables para las señales analogas
int cambios=0,estado=0,contador=0;
void main()
{
lcd_init(); //inicializa, o activa lcd
setup_port_A( ALL_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
while(TRUE){
//avilita la entrada analoga N0
set_adc_channel( 0 );//numero del puerto analogo N0
delay_us(20);
V1 = read_adc();//guarda el dato optenido de la entrada analoga
//avilita la entrada analoga N1
set_adc_channel( 1 );//numero del puerto analogo N1
delay_us(20);
V2 = read_adc();//guarda el dato optenido de la entrada analoga
rango1=V1 * resolucion;
rango2=V2 * resolucion;
lcd_gotoxy( 1, 2);
printf(lcd_putc,"r2 %1.2f-R1%1.2f", rango2, rango1 );
if((rango1>=2.50 && rango1<=2.96) && (rango2>=2.50 && rango2<=2.96)){
delay_ms(500);
contador++;
}else{
contador=0;
}
if(contador==3){
cambios=0;
lcd_gotoxy( 1, 1);
printf(lcd_putc,"Neutro");
}
else if((rango1>=4.03 && rango1<=4.26) && (rango2>=4.65 && rango2<=4.78)){
cambios=1;
lcd_gotoxy( 1, 1);
printf(lcd_putc,"Primera ");
}
else if((rango1>=1.25 && rango1<=1.66) && (rango2>=4.65 && rango2<=4.78)){
cambios=2;
lcd_gotoxy( 1, 1);
printf(lcd_putc,"Segunda ");
}
else if((rango1>=4.50 && rango1<=4.99) && (rango2>=2.79 && rango2<=2.88)){
cambios=3;
lcd_gotoxy( 1, 1);
printf(lcd_putc,"Tercera ");
}
else if((rango1>=0.50 && rango1<=0.90) && (rango2>=2.79 && rango2<=2.88)){
cambios=4;
lcd_gotoxy( 1, 1);
printf(lcd_putc,"Cuarta ");
}
else if((rango1>=4.20 && rango1<=4.49) && (rango2>=0.90 && rango2<=1.02)){
cambios=5;
lcd_gotoxy( 1, 1);
printf(lcd_putc,"Quinta ");
}
else if((rango1>=1.09 && rango1<=1.40) && (rango2>=0.87 && rango2<=1.00)){
cambios=6;
lcd_gotoxy( 1, 1);
printf(lcd_putc,"Secta ");
}
if(estado<cambios){
estado++;
output_high(PIN_C0);
delay_ms(150);
output_low(PIN_C0);
delay_ms(150);
}
if(cambios<estado){
estado--;
output_high(PIN_C1);
delay_ms(150);
output_low(PIN_C1);
delay_ms(150);
}
// lcd_gotoxy( 1, 2);
//printf(lcd_putc,"%i",estado);
}}
y aquí unas fotos de la palanca de cambio: