Auto RC conduccion real(consultas para desarrollo)

Hola a todos los miembros del foro.

Teniendo en cuenta las normas de Como solicitar ayuda en proyectos de electronica, que difundio el usuario @marcelo y aprobadas por el moderador general @andres-cuenca, comenzare a explicar mi proyecto.

Tema del Proyecto:
Creacion de un "Simulador" donde a travez de un volante real se pueda controlar un auto RC y la conduccion sea lo mas parecida a un auto real.

Descripción del proyecto:
Como idea principal, utilizar microcontroladores de tal manera que lean los datos del volante y luego los envien al auto RC, preferiblemente con lenguaje de programacion C.

Que busca demostrar el proyecto:
este proyecto es solo para afianzar conocimientos, y para que todos los miembros del foro puedan realizarlo.

Nivel de conocimientos de electrónica que posee:
Soy estudiante de Ingenieria electronica en Colombia, pero nunca he tenido la posibilidad de trabajar RF y comunicacion entre PIC's, el conocimiento que tengo del manejo de microcontroladores en muy basico.

Lenguaje de programación que maneja:
C++ basico, y el compilador que utilizo para programar pic es "PIC-C o CCS".

Nivel académico: Secundaria; actualmente 6° semestre de ingenieria electronica.


Mi primera idea del manejo de este proyecto la trate de implementar con este diagrama de flujo:


Para el PWM pensaba en leer la entrada analogica y dependiendo de la pocicion en la cual este la palanca de cambios hacer una division sobre el numero de la marcha.


para la reversa pensaba utilizar un "puente H" y el valor de la marcha sera 1.

Para cuando se use el freno, pensaba en restar el valor adc del freno al PWM.

y para poder realizar los cambios pensaba en que solo aumentara o disminuyera cuando el valor adc del embrague fuera mayor al 70%

los valores logicos serian las luces(freno y luces frontales), luces de giro(direccionales y estacionarias), claxon y luces de reversa.

todas las ayudas y comentarios son bienvenidos.
espero que puedan ayudarme con este proyecto, ya que solo no puedo desarrollarlo.

PS. para complementar la informacion, soy amante de los deportes que involucren autos(carreras, rallye, drifting), y corro en el simulador "Live for Speed" con licencia S1.
 
Última edición:
pues por lo rf no hay problema aqui en colombia venden unos tx y rx que en teoria alcanzan 100mts, lo de las conversiones adc pues nunca me ha ido muy bien con estas en los pics les cae una tembladera, hey que habilitar las Vref y colocar zener para tener una referencia estable, la otra es buscarse o hacer unos encoder absolutos
 
pues la idea siempre es ir mejorando el diseño con respecto a los posibles problemas que se presenten durante el desarrollo, me gustaria saber como enviar esta cantidad de datos al otro pic sin que se confundan, lo otro que no se es como manejar la pocicion del servo mediante el pic.
agradesco tu respuesta.
 
pues no he manejado servos con pic pero hay mucha informacion en la red y aqui en algunos post. lo de los datos no es una cantidad es muy facil la verdad con css yo he hecho varias veces comunicacion entre pc y pic. y hace ya algun tiempo lo hice con un transmisor rf. mira tu que estas en bogota puedes comenzar comprado Buscar en Mercadolibre: MCO-401260246-modulo-de-radio-frecuencia-rf-ask-434mhz-txrx-electronica-_JM
el transmisor y receptor en cuento a los pics puen ser dos 16f628A no hay necesidad de cristal por que tienen oscilador interno . sobre los servos segun cualquiera sirve solo hay que saber a que frecuencia trabajan.
 
Bueno ya compre los modulos de RF(el emisor y el receptor), costaron apenas 10k pesos los dos(los compre en el centro de la ciudad).
pero no consigo el HT-12e y el HT-12d; mirando he investigando en la web, encontre un HT-648L y un HT-640 que manejan 8 bits de datos, me interezaria mas utilizar estos ya que puedo enviar mas datos.
alguna idea donde pueda conseguirlos aca en bogota? o por mercadolibre?
 
Bueno ya consegui los HT(9k pesos Col cada uno u.u)
ahora deseo empezar con el codigo para el manejo de la poscicion del servo, alguna sugerencia de por donde empezar?

me recomiendan usar un motor de disco duro para la hacer que el auto se desplaze?
 
Hola a todos.
ya pude hacer que el servo se moviera y controlar la poscicion(solo era el PWM).
pero tengo un problema y es que no se como generar dos funciones de PWM con el mismo PIC y que estas sean independientes.
la otra opcion es, generar una señal PWM con un 555 para la poscicion del Servo, y con el PIC generar un PWM basado en las lecturas de 3 entradas analogicas.

la pregunta es:¿Como leer 3 entradas analogas y almacenarlas en variables diferentes?
ejemplo=

INT Acelerador;
INT Freno;
INT Embrague;
INT Velocidad
Void main(){

SETUP_CCP1(CCP_PWM);
SETUP_TIMER_2(T2_DIV_BY_16,255,16);

Setup_adc_ports(all_analog);//todos son analogos
Setup_adc(adc_clock_div_32);//configuracion del canal de conversión
Set_adc_channel(0);// activacion de la conversión


esto es lo que no se hacer.
Acelerador=read_RA0;
Freno=read_RA1;
Embrague=read_RA2;
eso fue lo primero que se me ocurrio.

Velocidad= (Acelerador-Freno-Embrague)

IF (velocidad>>0){
SET_PWM1_DUTY(Velocidad);
}
}
 
Última edición:
hola perdona es que las notificaiones no me estan llegando al correo ya creo que lo solucione, primero que todo los decodificadores no eran necesarios con dos pic era suficiente. ahora bien si quieres los decos pues para manejar los servos depende de la marca no se si me puedes enviar la marca y modelo para ver con que tiempos trabajan. yo voy en esta semana a trabajar con unos Hextronik Hxt12k. cuando los haga funcionar te digo como me fue con esta referencia antes he utilizado unos futaba pero fue hace ya 7 años mas o menos. para lo de los pedales y eso hay un post de fogonazo que habla de como hacer un encoder



con respecto a lo de el adc

setup_adc_ports(sAN0|sAN1|sAN2|VSS_VDD); // o los todos los puertos como tu quieras
setup_adc(ADC_CLOCK_DIV_8);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);//




set_adc_channel (0);// el puerto del que quieres tomar la medida
delay_us (20);
Acelerador = read_adc ();
delay_us (20);

set_adc_channel (1);// el puerto del que quieres tomar la medida
delay_us (20);
Freno = read_adc ();
delay_us (20);

set_adc_channel (2);// el puerto del que quieres tomar la medida
delay_us (20);
Embrague = read_adc ();
delay_us (20);
 
Última edición:
Hola.
el codigo con respecto al ADC me quedo de esta manera:

VOID MAIN()
{
set_tris_a(0x00);
SETUP_CCP1(CCP_PWM);
SETUP_TIMER_2(T2_DIV_BY_16,255,16);
Setup_adc_ports(ALL_ANALOG);//selección del canal de conversión.
Setup_adc(adc_clock_div_64);//configuracion del canal de conversión
While (TRUE){
Set_adc_channel(0);// activacion de la conversión RA0
delay_us (10);
Acelerador=read_adc();

Set_adc_channel(1);// activacion de la conversión RA1
delay_us (10);
Freno=read_adc();

Set_adc_channel(2);// activacion de la conversión RA2
delay_us (10);
Embrague=read_adc();

Velocidad=(Acelerador-Freno-Embrague);
delay_us (10);
SET_PWM1_DUTY(Velocidad);
}
}

tambien me gustaria saber como activar los 10bits de conversion.
porque hay solo son 255(8bits).:unsure:

El servo que compre es un "Turnigy TG9e" de 9 gramos, a 5v(1,5kg), 60° en 0.10seg.
 
Vale muchas gracias por esta informacion, me ha sido de gran ayuda.

pero en internet vi un circuito externo con 555 y la poscicion del servo se controla mas facilmente(al menos deja de temblar), ahora me centrare en el manejo de la velocidad.
Con el codigo que puse en el mensaje anterior(arreglado con los 20us), funciona en la simulacion pero se mueve constantemente el motor DC solo cuando alguno de los otros analogos estan en 255 se detiene.
no se porque...
alguna idea de porque pase esto?
gracias.

otras dos preguntas ¿como manejo un motor brushless con el pic, teniendo este mismo principio de las 3 entradas analogas? y ¿es recomendable usar un motor Brushless?
gracias.
salu2
 
te acuerdas en el primer comentario que hice te hable de los encoder! fue por eso jajaja bueno lo que pasa es que si no tienes un voltaje de referencia en un pic este va a fluctuar mucho por eso el resultado de la conversión cambia tanto, si vas a seguir trabajando con potenciómetros te recomiendo que utilices un regulador que te sirva como voltaje de referencia y habilitar esta pata en el pic que como sabras tiene un pata llamada vref, en el foro aparece información sobre esto algunos utilizan un zener mira
https://www.forosdeelectronica.com/f24/adc-pic-normal-esto-5042/



con respecto a lo de esos motores no los he trajado



otra cosa que hiba a decir es que ayer maneje un servo con pic sin pwn solo con retardos y funciona perfecto no se mueve para nada
 
Última edición:
buen dia a todos.
creo que ya tengo terminado el diseño (solo el esquema), tanto del emisor como el receptor.
pero el codigo que uso para pode probarlo no me funciona.
quisiera que ojala me pudieran ayudar.

dejo la imagen de los diseños y el codigo.
espero que lo entiendan.



Código:
#INCLUDE <16F877A.H>
#DEVICE adc=10
#USE DELAY(CLOCK=4MHz)
#FUSES XT,NOWDT,NOPROTECT
//Codigo Hecho en su totalidad por Erick Arias Devia
//Bogota D.C. 2012

#bit Reversa=0x07.0
#bit Drive=0x07.2

INT Acelerador=0;
INT Freno=0;
INT Embrague=0;
INT Velocidad=0;
INT Marcha;
INT encendido;

VOID MAIN()
{
set_tris_a(0x00);
set_tris_b(0x00);
set_tris_c(0xff);
SETUP_CCP1(CCP_PWM);
SETUP_TIMER_2(T2_DIV_BY_16,255,16);
Setup_adc_ports(ALL_ANALOG);//selección del canal de conversión.
Setup_adc(adc_clock_div_64);//configuracion del canal de conversión
While (TRUE){
output_c(0x00);
encendido=read_bank(1,6);//lee el banco de memoria 1 y la posicion 6
if(encendido==2){
encendido=read_bank(1,6);//lee el banco de memoria 1 y la posicion 6
while(marcha==9||marcha==17){

Set_adc_channel(0);// activacion de la conversión RA0
delay_us (20);
Acelerador=read_adc();

Set_adc_channel(1);// activacion de la conversión RA1
delay_us (20);
Freno=read_adc();

Set_adc_channel(2);// activacion de la conversión RA2
delay_us (20);
Embrague=read_adc();

Velocidad=(Acelerador-Freno-Embrague);
delay_us (20);
if(marcha==9){
Reversa=1;//activa la velocidad en reversa
SET_PWM1_DUTY(Velocidad);
}
Drive=1;//activa la velocidad hacia adelante
SET_PWM1_DUTY(Velocidad);
encendido=read_bank(1,6);//lee el banco de memoria 1 y la posicion 6
}
}
}
}
 
hola te comento que el puente h no esta bien hecho necesitas dos transistores npn y dos pnp y dependen de la corriente que maneje el motor. trata de poner el motor a trabajar y mide corriente a ver que da, hay unos en la red hechos con tip31 y 32

circuito_puente.JPG


este maneja hasta 3A creo



otra cosa si necesitas un freno te va tocar utilizar 4 salidas o utilizar un l298 que es un puente H encapsulado creo que aguanta 2A y con este solo necesitas 3 pines
 
Última edición:
Atrás
Arriba