Autor Tema: inclinometro  (Leído 13652 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado Flugplatz

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 279
    • Mi canal de YouTube
RE: inclinometro
« Respuesta #15 en: 29 de Septiembre de 2004, 10:23:00 »
Hola ...

Parece que el tema no se mueve hace una temporada, pero en fín ...

Pués casualmente, yo he estado mirando en los últimos días la forma de hacer un microbot pendular, osea, que su punto de apoyo son solo dos ruedas, moviendose por el sistema diferencial, y que a base de sensores varios y un micro mantiene la verticalidad en todo momento ...

Por si os interesa el tema aqui hay bastante información:

http://leiwww.epfl.ch/joe/joerelatives.html

http://www.geology.smu.edu/%7Edpa-www/robo/nbot/index.html

http://home.earthlink.net/%7Ebotronics/index/balibot.html


He echado un vistazo a la página que ha puesto nocturno66, y a simple vista parece que los giróscopos son un pelin dificilillos de implementar.

Hace tiempo me regaló un amiguete un giróscopo de aeromodelismo, y parece que al menos su funcionamiento es menos complicado ...

Aquí tenéis una marca que los fabrica, aunque probablemente haya clones coreanos mucho más baratos ...

http://www.ikarus.net/onlineshop/usa/onlineshop/index.html
Mi canal de YouTube

Un saludo desde Madrid

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: inclinometro
« Respuesta #16 en: 29 de Septiembre de 2004, 11:38:00 »
No creas que lo he olvidado, sigo con la idea de terminar algún día el robotito.
De hecho, pedí unos acelerómetros a Analog y ahora mismo estoy con un proyecto entre manos que consiste en realizar un nivel de albañil. Ya lo tengo funcionando en protoboard; me queda acabarlo con una PCB en condiciones.

En cuanto lo tenga funcionando, le meteré mano al robotito.

Por cierto, muy buenos esos links.

Desconectado Flugplatz

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 279
    • Mi canal de YouTube
RE: inclinometro
« Respuesta #17 en: 29 de Septiembre de 2004, 14:58:00 »
Ok Noct ...

Yo me pondré con lo del giróscopo y ya os contaré lo que voy sacando en claro ...
Mi canal de YouTube

Un saludo desde Madrid

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: inclinometro
« Respuesta #18 en: 29 de Septiembre de 2004, 15:06:00 »
Por favor, mantenme informado si encuentras un giróscopo clónico a buen precio, que me gustaría hincarle el diente.

Desconectado odukec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 174
RE: inclinometro
« Respuesta #19 en: 29 de Septiembre de 2004, 20:01:00 »
Hola...

Interesante proyecto.. solo una pregunta.. como hace para mantener el equilibrio el robot..?

De antemano gracias..

Saludos.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: inclinometro
« Respuesta #20 en: 30 de Septiembre de 2004, 00:27:00 »
Querido Carlete, los acelerómetros que yo uso están en una horquilla de precios de 4.25$ hasta 19.95$, lo puedes ver aquí:

http://www.analog.com/en/subCat/0,2879,764%255F800%255F0%255F%255F0%255F,00.html

Como imaginarás, yo no he pagado nada por ellos.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: inclinometro
« Respuesta #21 en: 30 de Septiembre de 2004, 00:34:00 »
Odukec, no he podido trastear aún con el robot, por lo que la respuesta que te voy a dar es por intuición.

Para mantener el equilibrio, el robot intentará siempre mantener el centro de gravedad justo sobre su vertical. Por ello, en reposo, el robot estará en vertical sin moverse hacia delante ni hacia atrás y permanecerá quieto (al menos en teoría).

Si tú empujas el robot hacia adelante, como las ruedas están quietas, se volcará un poco y el centro de gravedad se adelantará con respecto al centro del eje. Mediante giroscopios y/o acelerómetros, el circuito detecta esta inclinación y envía instrucciones a los motores para que avancen, intentando colocar el eje bajo el nuevo sitio del centro de gravedad.

Si combinas esta técnica con una regulación de la velocidad de los motores, podrás conseguir que el robot avance continuamente sin que las ruedas lleguen nunca a equilibrar el robot, pero lo suficientemente rápido como para que no se vuelque.

Y ya está, para volver a pararlo, un acelerón de las ruedas y a buscar el centro de gravedad.

Creo que debe ser así, como te digo, nunca lo he probado, pero al menos será así como lo intentaré hacer.

Desconectado odukec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 174
RE: inclinometro
« Respuesta #22 en: 30 de Septiembre de 2004, 09:07:00 »
Hola

Gracias nocturno por tu respuesta.. esta interesante el proyecto.. quisiera colaborarles con lo que pueda,  voy a leer mas sobre esto.. quizas no sea tan complicado , ya que tambien quisiera construir uno.

Saludos..!

Desconectado Carlete71

  • PIC18
  • ****
  • Mensajes: 433
RE: inclinometro
« Respuesta #23 en: 30 de Septiembre de 2004, 17:08:00 »
Casi cuestan lo mismo que el 16F84 en Venezuela Pensé que eran más baratos.

Gracias nocturno

Saludos,

Escrito originalmente por nocturno66
Querido Carlete, los acelerómetros que yo uso están en una horquilla de precios de 4.25$ hasta 19.95$, lo puedes ver aquí:

http://www.analog.com/en/subCat/0,2879,764%255F800%255F0%255F%255F0%255F,00.html

Como imaginarás, yo no he pagado nada por ellos.

Desconectado pendexgabo

  • PIC16
  • ***
  • Mensajes: 222
    • www.SosaGabriel.com.ar
RE: inclinometro
« Respuesta #24 en: 02 de Octubre de 2004, 20:33:00 »
buenas, yo ando con un adxl202 que me trajeron como salmple desde analog, luego de una ardua lucha con un 16f877a logre hacerlo funcionar, tengo un pequeño programita en C con alguna pedacito en ASM para la toma de datos, lo que simplemente hace es la recoleccion del dutty cycle desde el acelerometro y me da la inclinacion (ademas optimice un poco las funciones) les mando el codigo, haber si a alguien le sirve, cualquier consulta me dicen, espero poder ayudarlos en algo..


#include <16F877a.h>
#include <math.h>
#fuses XT, NOPROTECT, NOWDT, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#define XOUT 5
#define YOUT 4
#byte PORTB = 6

void start_timer(void);
float get_acel (int16 , float );

void edge1 (void);
void edge2 (void);
void edge3 (void);
void edge4 (void);

main () {
float T2,Acx,Acy;
int16 Tb,Tc,T1x,T1y,Td;
int indice;

set_tris_a (0b00000);
set_tris_b (0b00110000);
set_tris_c (0b10000000);
set_tris_d (0b00000000);
set_tris_e (0b000);


while (!kbhit()) {

   edge1 ();               //espero que este bajo XOUT
   edge2 ();               //espero el flanco de subida de XOUT
   start_timer();          //pongo a contar
   edge1 ();               //espero el flanco de bajada de XOUT
   Tb=get_timer1();        //tomo el tiempo Tb
   edge3 ();               //espero que baje YOUT
   edge4 ();               //espero el flanco de subida de YOUT
   Tc=get_timer1();        //tomo el tiempo Tc
   edge3 ();                //espero el flanco de bajda de YOUT
   Td=get_timer1();        //tomo el tiempo Td

   T1x=Tb;
   T1y= Td-Tc;
   T2= (Td-((Td-Tc)/2))-(Tb/2);
   Acx=get_acel (T1x,T2);
   Acy=get_acel (T1y,T2);

   if ( (Acx >= -1) && (Acx <= 1)) {
      printf ("Inclinación en X : %2.2f",asin (AcX)); }

   else
   Printf ("argumento de arcoseno en ACX invalido";

   if ( (Acy >= -1) && (Acy <= 1)) {
         printf ("Inclinación en Y : %2.2f",asin (Acy));

      }
   else
   Printf ("argumento de arcoseno en ACY invalido";


   delay_ms(40);

} //while



} //main



float get_acel (int16 T1, float T2) {

return ((T1/T2)-0.5)/0.125;

}


void start_timer(void) {
set_timer1 (0);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
}



void edge1 (void) {
#asm
      EDGE1:
      btfsc PORTB,XOUT //Wait for low on XOUT
      goto  EDGE1
#endasm

}

void edge2 (void) {
#asm
      EDGE2:
      btfss PORTB,XOUT //Wait for high on XOUT
      goto EDGE2
#endasm

}
void edge3 (void) {
#asm
      EDGE3:
      btfsc PORTB,YOUT //Look a low level on YOUT
      goto EDGE3
#endasm

}

void edge4 (void) {
#asm
      EDGE4:
      btfss PORTB,YOUT //Look for rising edge on YOUT
      goto EDGE4
#endasm

}

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: inclinometro
« Respuesta #25 en: 03 de Octubre de 2004, 00:30:00 »
Yo tengo uno funcionando y la parte del programa que lee el acelerómetro es más corta. Lo pego también para que podamos compararla:

Codigo:
float lee_acelerometro (int Eje) { // Según Eje sea 0 o 1 se lee el pin D0 o D1
                                                   // Decimales indica la resolución del resultado
                                                   // El resultado siempre será un porcentaje
   int32 alto=0, bajo=0, j;
   float Resultado;
   int i;
   for (i=0;i<10;++i) {                            // se lee 10 veces, para evitar márgenes de error (se puede modificar)
                                                   // si es necesaria mayor frecuencia
      if (Eje) {
            while( input(PIN_C2));                 // esperamos a que baje la señal de entrada
            while( !input(PIN_C2));                // esperamos a que suba la señal de entrada
            while( input(PIN_C2)) {                // mientras esté arriba vamos contando en alto
                        alto++;
               } ;
            while( !input(PIN_C2)) {               // y mientras esté abajo vamos contando en bajo
                        bajo++;
               };
      } else {
            while( input(PIN_C3) );
            while( !input(PIN_C3) );
            while( input(PIN_C3)  ) {
                        alto++;
               } ;
            while( !input(PIN_C3) ) {
                        bajo++;
               };
      };
   };
 return ((((float)alto/((float)alto+(float)bajo))-0.43)*10000/9);
}


Me ha sorprendido que hayas introducido parte del código en ASM, ¿porqué lo necesitaste?

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: inclinometro
« Respuesta #26 en: 03 de Octubre de 2004, 07:18:00 »
Gracias por colgar el código, estoy esperando
por mis acelerómetros y en cuanto me lleguen
los probaré con vuestro codigo, ya estoy impaciente!!!

Un saludo.

Desconectado pendexgabo

  • PIC16
  • ***
  • Mensajes: 222
    • www.SosaGabriel.com.ar
RE: inclinometro
« Respuesta #27 en: 03 de Octubre de 2004, 10:39:00 »
nocturno, la diferencia que veo con mi codigo, es que el tuyo se basa en el T2 que esta dado por la resistencia a masa que necesita el acelerometro, en el mio me baso en el aplicativo de microchip
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011712
en el cual yo tomo la medicion de T1X, T1Y y tambien de T2, con lo que puedo variar el período con facilidad sin requerir de constantes, de todas formas , vos como tomas el T2 ?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: inclinometro
« Respuesta #28 en: 03 de Octubre de 2004, 10:56:00 »
Yo no había visto esta nota de aplicación de Microchip, pero voy a examinarla de inmediato.

No sé qué es el T2. Lo que yo hago es medir el ancho del pulso en su parte alta y dividirlo por el ancho total (alto+bajo). Eso me da la relación PWM que el acelerómetro está entregando en cada momento.

Luego, con una fórmula a la que he llegado por el método de prueba y error, traduzco la información a porcentaje y finalmente a grados de inclinación.

Pero voy a mirar esa nota ahora mismo. Gracias.

Desconectado pendexgabo

  • PIC16
  • ***
  • Mensajes: 222
    • www.SosaGabriel.com.ar
RE: inclinometro
« Respuesta #29 en: 03 de Octubre de 2004, 11:05:00 »
te vas a encontrar con que es un buen método,
El T2 es el perido total del PMW que puede ser regulado mediante una resistencia externa conectada a masa
otra cosa mi codigo está en uso, las partes en assembler mejoran la velocidad de toma de datos, tambien se puede hacer uso del CCP del 16f877, pero para cuando lei de esto ya tenia todo el codigo hecho, otra cosa, en la parte de drivers del directorio del ccs, hay un libreria para manejar el acelerometro, pero la misma me parecio mas complicadad que hacer una yo mismo