Páginas

Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas

miércoles, 25 de febrero de 2015

150225 - Eran los cables... también la programación!

Seguí los pasos de conexión tal como indica esta página:

Y, siguiendo los consejos de Martín Matus, fui probando los diferentes códigos de ejemplo que vienen con la librería AcceleroMMA7361 para arduino, haciendo pequeñas modificaciones y luego, cuando todo comenzó a funcionar agregué los renglones de código faltantes para que encendiera las tres luces.

Aquí va entonces el video de muestra:

Conecté el acelerómetro con cables comprados macho-hembra de 20cm, empalmándolos de a 2, para tener una mayor extención respecto del resto del circuito en arduino y poder manipular con más comodidad el sensor; que, para quien esté buscando hacer algo similar, parece que es mejor el que es giroscopio y acelerómetro 2 en 1, cuesta un poco más pero mide los ángulos en que se produce el movimiento y no sólo el shock de movimiento o aceleración del mismo.

Código que va:

#include <AcceleroMMA7361.h>

AcceleroMMA7361 accelero;
int x;
int y;
int z;

//asignacion de pines pwm para los Leds:
int rojo = 3;
int verde = 5;
int azul = 6;

void setup(){
  //adjudica el modo de los pines LED
  pinMode(rojo, OUTPUT);
  pinMode(verde, OUTPUT);
  pinMode(azul, OUTPUT);
  //establece la velocidad del puerto serial
  Serial.begin(9600);
  //declara los pines del acelerometro
  accelero.begin(13, 12, 11, 10, A0, A1, A2);
  //establece el voltaje AREF en 3.3V
  accelero.setARefVoltage(3.3);    
  //establece la sensibilidad en +/-1.5G          
  accelero.setSensitivity(HIGH);   
  //calibra el acelerometro            
  accelero.calibrate();
}

void loop(){
  //Inicializa el acelerómetro:
  x = accelero.getXAccel();
  y = accelero.getYAccel();
  z = accelero.getZAccel();

 //escribe los valores de x, y, z pero mapeados para los leds
 Serial.print("\nx: ");
  x = map(x, 0, 511, 0, 255);
  Serial.print(x);
  analogWrite(rojo, x);
  Serial.print(" \ty: ");
  y = map(y, 0, 511, 0, 255);
  analogWrite(verde, y);
  Serial.print(y);
  Serial.print(" \tz: ");
  z = map(z, 0, 511, 0, 255);
  analogWrite(azul, z);
  Serial.print(z);
  Serial.print("\tG*10^-2");
  //retardo de lectura para leer los valores de monitor y mejorar la respuesta
  lumínica 
  delay(150);       
}

Ahora viene la parte interesante!!!
Comenzaré a montar los leds en el prototipo: PELOTEDRA!


Fotógrafa: Eugenia Romero

domingo, 22 de febrero de 2015

150223 - Acelerómetro funcionando!!!

Aun hay errores, entre ellos, los cables que soldé hoy para conectar el acelerómetro:

Ante esta situación me veo obligado, para descartar errores y fallas a comprar unos cables para protoboard hembra-macho!!

De todos modos, gracias a unos mails y links que me mandó Andrés Rodriguez (mi director de tesis) modifiqué algunas cosas en la conexión del acelerómetro y en la programación de arduino:
Aunque sin el cable que conecta 3.3V out con ARef porque hasta el momento no afecta en nada perceptible a la vista.


Codigo:
/*Tesis 02_ Acelerometro y leds, lectura analogica y escritura pwm
*/


//Asignacion de pines analogicos del acelerometro

float analogPinX = 0;
float analogPinY = 1;
float analogPinZ = 2;
float valX = 0; 
float valY = 0;
float valZ = 0;

//Asignacion de pines digitales del acelerometro
boolean sleep = 7;
boolean selfTest = 2;
//pwm:
float ogDetect = 9;
float gSelect = 10;


//Asignacion de pines pwm para los leds

int Rojo = 3;
int Verde = 5;
int Azul = 6;

void setup(){
  //Leds rojos
  pinMode(Rojo, OUTPUT);
  //Leds verdes
  pinMode(Verde, OUTPUT);
  //Leds azules
  pinMode(Azul, OUTPUT);
  //Pines digitales Acelerometro:
  pinMode(sleep, INPUT);
  pinMode(selfTest, INPUT);
  pinMode(ogDetect, INPUT);
  pinMode(gSelect, INPUT);
  Serial.begin(9600);
}

void loop(){
  //Deteccion de actividad en el Acelerometro:
  if(sleep == LOW){
    digitalWrite(Rojo, LOW);
    digitalWrite(Verde, LOW);
    digitalWrite(Azul, LOW);
  }else{
  //Traduccion a luces de las lecturas axiales del Acelerometro
  valX = analogRead(analogPinX);
  analogWrite(Rojo, valX / 4);
  valY = analogRead(analogPinY);
  analogWrite(Verde, valY / 4);
  valZ = analogRead(analogPinZ);
  analogWrite(Azul, valZ / 4);
  delay(100);
}
//
}

sábado, 21 de febrero de 2015

150221 - arduino y acelerómetro, primer prueba con fallas

Hoy estuve haciendo pruebas con arduino y el acelerómetro... dadas las fallas incomprensibles para mí, mañana haré pruebas con potenciómetros para saber si es el código lo que está mal o si hay alguna falla en el acelerómetro, si falta conectar algún cable extra o qué.

Esta es la conexión que utilicé:
con un acelerómetro MMA7361:
Y el código de arduino:
/*Tesis 01_ Acelerometro y leds, lectura analogica y escritura pwm
*/


//Asignacione de pines analogicos del acelerometro
int analogPinX = 0;
int analogPinY = 1;
int analogPinZ = 2;
int valX = 0;
int valY = 0;
int valZ = 0;

//Asignacion de pines pwm para los leds
int Rojo = 3;
int Verde = 5;
int Azul = 6;

void setup(){
  //Leds rojos
  pinMode(Rojo, OUTPUT);
  //Leds verdes
  pinMode(Verde, OUTPUT);
  //Leds azules
  pinMode(Azul, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  /*Lecturas del acelerometro y su traduccion en luces,
  * curva lineal inicial de prueba.
  */

  valX = analogRead(analogPinX);
  analogWrite(Rojo, valX / 4);
  valY = analogRead(analogPinY);
  analogWrite(Verde, valY / 4);
  valZ = analogRead(analogPinZ);
  analogWrite(Azul, valZ / 4);
}

Compila y carga perfectamente pero luego, muevo el sensor y no pasa nada, los leds prenden siempre al 100%, pareciera no estar funcionado el sensor o como si faltara conectar algo.

Para esta primer prueba quiero hacer una lectura lineal de los valores analógicos del sensor, simplemente para corroborar que todo funcione bien y luego complejizar el código para que la lectura siga una curva logarítmica de intensidad lumínica.