Pages: [1]   Go Down
Author Topic: tutorial del acelerometro  (Read 1874 times)
0 Members and 1 Guest are viewing this topic.
Bogota-Colombia
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola a Todos,  primera vez por aqui smiley-wink, estoy completando el tutorial del acelerometro.  Y quisiera preguntar algunas cosas del codigo que no comprendo bien. Y quiero comprender >smiley-sad...No se si esta bien preguntarles aqui y si estas preguntas sean mmm demasiado ovias para algunos o  sin sentido etc...

mi primera pregunta...
que significa esta operacion a que corresponde 8 y esta operacion en general (letras azules)
abs(8 * (time1 / 10 - 500));
mi segunda pregunta:
timer = count * 18; que significa 18? ( letras rojas)
y por ultimo:
de donde sale el 5000 del if ? (color verde)

si me pueden aclarar esto seria exelente. quiero calcular velocidad distancia etc... me ayudaria entender esta parte del codigo .
Eventualmente quiero simular el movimiento del mouse.
gracias!! y espero me ayuden!

 
este es el codigo del tutorial:

int ledPin = 13;                    
 int xaccPin = 7;                  
 int yaccPin = 6;                    
 int value = 0;                      
int accel = 0;                      
 char sign = ' ';                    
 int timer = 0;                  
 int count = 0;                    

void setup() {

  beginSerial(9600);                
  pinMode(ledPin, OUTPUT);          
  pinMode(xaccPin, INPUT);        
  pinMode(yaccPin, INPUT);          
}


/* (int)operateAcceleration

 * función que calcula la aceleración
 * devuelve un entero
 */

int operateAcceleration(int time1) {

  return abs(8 * (time1 / 10 - 500));
}



void readAcceleration(int axe){

  timer = 0;
  count = 0;
  value = digitalRead(axe);
  while(value == HIGH) {                
    value = digitalRead(axe);
  }
  while(value == LOW) {                
    value = digitalRead(axe);          
  }
  while(value == HIGH) {
    value = digitalRead(axe);          
    count = count + 1;
  }
  timer = count * 18;                
  if (timer > 5000){                    
    sign = '+';
  }
  if (timer < 5000){
    sign = '-';
  }

  accel = operateAcceleration(timer);  
  if (axe == 7){                      
    printByte('X');
  }
 else {
    printByte('Y');
  }
  printByte(sign);
  printInteger(accel);
  printByte(' ');
}


void loop() {

  readAcceleration(xaccPin);            
  readAcceleration(yaccPin);            
  delay(300);
  digitalWrite(ledPin, LOW);
}

« Last Edit: March 17, 2008, 11:13:39 pm by paulavel » Logged

USA
Offline Offline
Sr. Member
****
Karma: 0
Posts: 452
Freeduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Por lo que veo el tutorial está esperando un acelerador digital (PWM).  Al ser PWM, tiene que calcular la duración de un pulso a través de un timer y las operaciones extrañas que ves, son parte de la magia.  Es mucho mas facil utilizar un acelerador analógico, ya que una simple lectura AnalogRead te alcanza para leer la salida del acelerador.  Que acelerador tienes?  Si es un ADXL320 o ADXL330, entonces la salida es analógica.
Logged

Bogota-Colombia
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola gracias por escribir,ya habia perdido las esperanzas de una respuesta. Gracias oye! smiley . Bien el acelerometro que uso es el mesmsic 2125 de doble cordenada x y. Pero tambien he probado el adxl 203 que tiene pin analogico y digital. La verdad que no he medido nada con el analogico. Estoy tratando de hacer lo mismo que hace el mouse pero con el accelerometro. Transformando la aceleracion a unidades g y luego calcualando la velocidad y la distancia usando el timer de arduino. No se si estoy perdiendo mi tiempo. Pero mi idea es poder usar esto con processing para poder dibujar. Creo que ya estoy calcualando la distancia pero todavia no logro ubicar bien el ruido que estos sensores tienen es decir el margen para poder tener datos precisos. otra cosa como podria evitar que al girar el accelerometro no marque acceleracion?
Alguna idea?
gracias por escribir!
Logged

USA
Offline Offline
Sr. Member
****
Karma: 0
Posts: 452
Freeduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Me parece que estas queriendo reinventar la rueda... digo el mouse.  El mouse utiliza un simple transmisor-receptor infrarrojo o cualquier tipo de luz y usa una rueda con aperturas que mide cuantos agujeros o pasos se mueve en cierto tiempo.  Es mucho mas facil que utilizar el acelerometro, salvo que quieras armar un mouse que funcione como el control remoto del Wii.
Logged

Bogota-Colombia
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bueno la rueda toca reinventarla de vez en cuando sobre todo cuando uno esta aprendiendo ;)Por ejemplo el otro dia fui a patinar exactamente a hacer skateboarding, y tambien estoy tratando de girar a 360 sin caerme, eso ya lo ha hecho mucha gente , bueno supongo, no se, tal vez es toda una locura smiley-razz. Si la verdad quiero hacer un objeto que pueda dibujar parecido al wii. Acelerometro + gyroscopio posiblemente. Aun tengo que probar si el accelerometro puede hacer calculos de distancia mas o menos acertados. Como funciona el wii ya que lo mencionas?
Logged

Pages: [1]   Go Up
Jump to: