Bienvenido, Invitado |
Tienes que registrarte para poder participar en nuestro foro.
|
|
|
[9DOF] Acelerómetro, giróscopo y brújula |
Enviado por: hectorri - 11-01-2014, 01:18 PM - Foro: Arduino
- Respuestas (6)
|
|
Hoy he recibido un IMU de 9 grados por menos de 8€, incluye:
ITG3205: Giróscopo de 3 ejes
ADXL345: Acelerómetro de 3 ejes
HMC5883L: Brújula de 3 ejes
Todo en un reducido espacio:
Unos buenos puntos de este IMU es que es compatible tanto en 3.3v como 5v y a través de I2C se tiene comunicación con los 3 sensores.
De momento un sketch básico para comprobar el funcionamiento:
https://github.com/hectorri/Bioloid/tree...ng/IMU9DOF
Código: #include "Wire.h"
#include "I2Cdev.h"
#include "ADXL345.h"
#include "HMC5883L.h"
#include "ITG3200.h"
#define LED_PIN 13
HMC5883L mag;
ITG3200 gyro;
ADXL345 accel;
int16_t mx, my, mz;
int16_t gx, gy, gz;
int16_t ax, ay, az;
bool blinkState = false;
void setup() {
// Iniciar BUS I2C
Wire.begin();
// Iniciar comunicación serie
Serial.begin(9600);
// Inicializar IMU
Serial.println("Inicializando dispositivo...");
accel.initialize();
mag.initialize();
gyro.initialize();
// Verificar conexión
Serial.println("Comprobando conexión...");
Serial.println(accel.testConnection() ? "ADXL345 OK!" : "ADXL345 ERROR!");
Serial.println(gyro.testConnection() ? "ITG3205 OK!" : "ITG3205 ERROR!");
Serial.println(mag.testConnection() ? "HMC5883L OK!" : "HMC5883L ERROR!");
// Led de Arduino para visualizar estado
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// Lectura de valores
accel.getAcceleration(&ax, &ay, &az);
mag.getHeading(&mx, &my, &mz);
gyro.getRotation(&gx, &gy, &gz);
Serial.print("AC: ");
Serial.print(ax); Serial.print(" ");
Serial.print(ay); Serial.print(" ");
Serial.print(az); Serial.print(" ");
Serial.print("MA: ");
Serial.print(mx); Serial.print(" ");
Serial.print(my); Serial.print(" ");
Serial.print(mz); Serial.print(" ");
Serial.print("GY: ");
Serial.print(gx); Serial.print(" ");
Serial.print(gy); Serial.print(" ");
Serial.print(az); Serial.print(" ");
Serial.println();
delay(300);
//Parpadeo LED para indicar actividad
blinkState = !blinkState;
digitalWrite(LED_PIN, blinkState);
}
Como digo, el skecth es básico para comprobar el funcionamiento de los 3 sensores, deberíais obtener una salida como esta:
Código: Inicializando dispositivo...
Comprobando conexión...
ADXL345 OK!
ITG3205 OK!
HMC5883L OK!
AC: -125 -126 -193 MA: 322 436 89 GY: 13 1 -193
AC: -126 -125 -194 MA: 322 437 88 GY: 24 -9 -194
AC: -127 -123 -194 MA: 323 435 88 GY: 25 6 -194
AC: -127 -124 -194 MA: 322 436 87 GY: 20 -4 -194
AC: -127 -124 -194 MA: 322 436 88 GY: 14 -7 -194
AC: -127 -124 -194 MA: 323 435 89 GY: 7 -8 -194
AC: -128 -123 -195 MA: 321 438 87 GY: 9 -20 -195
Necesitaréis añadir a vuestro IDE de Arduino las correspondientes librerías; descargar y descomprimir: http://www.i2cdevlib.com/usage
En mi caso la aplicación será para un robot humanoide por lo que no necesito más, pero en el mercado tenéis distintas opciones según los grados de libertad (Degrees Of Freedom). Hay placas 3DOF, 6DOF, 9DOF, 12DOF... no hay límite y hay combinaciones para todos. Además de Acelerómetro, giróscopo y brújula podéis encontrar algunos IMU's con barómetro (altímetro), sensor de humedad, GPS, etc..
De momento la primera impresión es muy positiva. El 'interfacing' se realiza con sólo 4 cables (VCC, GND, SDA y SCL). Ahora... a cacharrear!
|
|
|
[Prusa i3][Conjunta Kit] Sodsue3D |
Enviado por: Sodsue - 11-01-2014, 12:32 AM - Foro: Impresoras
- Respuestas (1)
|
|
Aquí presento mi i3 montada y lista estrenándola imprimiendo un engranaje para el extrusor, por que creo que como a muchos nos ha pasado, el engranaje no aguanta mucho y a nada que aprietas el tornillo se raja un poco y aunque sigue funcionando perfectamente por si acaso me he impreso este engranaje que he encontrado que tiene mas material y aguantara mas, aunque habrá que hacer con una broca el alojamiento para meter la cabeza del tornillo dentro por que si no rozará contra la pieza que hay rodeando al engranaje.
|
|
|
Primer proyecto propio: Display controlado mediante teclado |
Enviado por: Electromecánico - 11-01-2014, 12:15 AM - Foro: Arduino
- Respuestas (5)
|
|
Buenas a tod@s:
Ya hace algunos días que mi primer Arduino llegó a mis manos. Desde entonces ya han pasado muchas cosas, la família Arduino se ha ampliado y las horas que me he pasado delante del ordenador o en la mesa de trabajo con Arduino, investigando, leyendo, probando, mirando tutoriales, viendo proyectos cogados en la red, etc.... son incontables.
Pero todo trabajo y esfuerzo, tarde o temprano da sus frutos. Y aquí están. Puede que sean algo flojos, y que para muchos mi primer proyecto no entrañe mucha dificultad. Sin embargo, para mi es una gran victoria, ya que hasta ahora, iba aprendiendo mediante la repetición de los tutoriales y proyectos que seguía por internet y los hacía yo en casa. Para aprender como programar la placa, y entender porqué se hacía así y que quería decir cada signo, etc.
Un buen día, me vino a la cabeza la idea de controlar un display con un teclado numerico, ya que sabía hacer funcionar un display y hacía poco que había aprendido a comandar unos leds mediante la comunicación serial, y junté las dos cosas. Y de aquí salió mi primer proyecto propio. Ya que hasta entonces siempre me había respaldado de un proyecto de otra persona, para comprobar mis errores, etc.
He estado varios días peleandome ya que no me terminaba de salir. Primero no se encendía ningun segmento del display, después conseguí que se encendiesen pero no respondían a los comandos, etc... Pero finalmete salió.
A continuación os dejo el código fuente para que podéis darle una ojeada y debajo de este os dejo un vídeo a modo de demostración de mi proyecto.
Código: void setup(){
Serial.begin(9600);
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
}
void loop(){
if (Serial.available()){
int val = Serial.read();
if (val == '0')
{
digitalWrite(12,HIGH);//Encendemos el nº0
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);
digitalWrite(7,HIGH);
delay(1000);
digitalWrite(12,LOW);//Apagamos el nº0
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(8,LOW);
digitalWrite(7,LOW);
delay(1000);
}
if (val == '1')
{
digitalWrite(11,HIGH); //Encendemos el nº1
digitalWrite(10,HIGH);
delay(1000);
digitalWrite(11,LOW); //Apagamos el nº1
digitalWrite(10,LOW);
delay(1000);
}
if (val == '2')
{
digitalWrite(12,HIGH);//Encendemos el nº2
digitalWrite(11,HIGH);
digitalWrite(6,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
delay(1000);
digitalWrite(12,LOW);//Apagamos el nº2
digitalWrite(11,LOW);
digitalWrite(6,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
delay(1000);
}
if (val == '3')
{
digitalWrite(12,HIGH);//Encendemos el nº3
digitalWrite(11,HIGH);
digitalWrite(6,HIGH);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
delay(1000);
digitalWrite(12,LOW);//Apagamos el nº3
digitalWrite(11,LOW);
digitalWrite(6,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
delay(1000);
}
if (val == '4')
{
digitalWrite(7,HIGH);//Encendemos el nº4
digitalWrite(6,HIGH);
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
delay(1000);
digitalWrite(7,LOW);//Apagamos el nº4
digitalWrite(6,LOW);
digitalWrite(11,LOW);
digitalWrite(10,LOW);
delay(1000);
}
if (val == '5')
{
digitalWrite(12,HIGH);//Encendemos el nº5
digitalWrite(7,HIGH);
digitalWrite(6,HIGH);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
delay(1000);
digitalWrite(12,LOW);//Apagamos el nº5
digitalWrite(7,LOW);
digitalWrite(6,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
delay(1000);
}
if (val == '6')
{
digitalWrite(12,HIGH);//Encendemos el nº6
digitalWrite(7,HIGH);
digitalWrite(6,HIGH);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);
delay(1000);
digitalWrite(12,LOW);//Apagamos el nº6
digitalWrite(7,LOW);
digitalWrite(6,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(8,LOW);
delay(1000);
}
if (val == '7')
{
digitalWrite(12,HIGH);//Encendemos el nº7
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
delay(1000);
digitalWrite(12,LOW);//Apagamos el nº7
digitalWrite(11,LOW);
digitalWrite(10,LOW);
delay(1000);
}
if (val == '8')
{
digitalWrite(12,HIGH);//Encendemos el nº8
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);
digitalWrite(7,HIGH);
digitalWrite(6,HIGH);
delay(1000);
digitalWrite(12,LOW);//Apagamos el nº8
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(8,LOW);
digitalWrite(7,LOW);
digitalWrite(6,LOW);
delay(1000);
}
if (val == '9')
{
digitalWrite(12,HIGH);//Encendemos el nº9
digitalWrite(11,HIGH);
digitalWrite(7,HIGH);
digitalWrite(6,HIGH);
digitalWrite(10,HIGH);
delay(1000);
digitalWrite(12,LOW);//Apagamos el nº9
digitalWrite(11,LOW);
digitalWrite(7,LOW);
digitalWrite(6,LOW);
digitalWrite(10,LOW);
delay(1000);
}
}
}
http://s1243.photobucket.com/user/driver...sort=3&o=1
Muchas gracias por vuestra ayuda ya que habéis puesto vuestro granito de arena en mi proyecto, ya que vosotr@s me habéis ayudado a iniciarme en el mundo Arduino y os estoy muy agradecido, y por eso he querido publicar mi primer proyecto, a modo de homenaje a tod@s vosotr@s y como muestra de agradecimiento, y para demostraros que a lo mejor, ahora soy un ignorante en el mundo Arduino, pero que poco a poco, todos vuestros consejos, posts, tutoriales, artículos, blogs, etc. Sirven de algo, para que la gente como yo, que no sabe casi nada, pueda, poco a poco, haciendo sus propios proyectos.
|
|
|
|