Compass sensor 2axis

Pues bien, necesito una brujula para un proyecto y me gustaria encontrar una que estuviera más o menos escalada a un cierto voltaje que signifique un cierto grado de orientacion, es decir, que por cada grado diera unos V que salieran del señal analogico de la brujula.

Si le entro 5V de tension de alimentacion pues que me diera algo asi como:

0V -. 0º (componente Norte)
2,5V -. 180º (componente Sur)
etc ...

Se que igual no habra ninguna con estos rangos, ya las escalare a mi gusto, pero por lo menos habra alguna que me salga en senyal de tension verdad? es que las que he encontrado salen en I²C y no me interesan, no estoy seguro si ni siquiera existen, alguna idea?

Gracias de antemano,

Un saludo!
 
Si gracias, era uno de los que había encontrado ;) y también había encontrado otros como estos http://www.magneticsensors.com/products.html#uPOINT

¿Realmente me dará una salida analógica en voltios alguno de estos? no lo tengo claro.

Otra cosa es por ejemplo, ¿que significa en la Sensibilidad que sea?:

Sensitivity 1.2 mV/V/gauss

Es que tengo una gran duda de lo que significa mV/V... no se a que se refiere, lo de gauss si, es una medida de campo magnético, pero aun asi no se que significa esa sensibilidad. Lo digo porque me sale en muchos sensores de este tipo, a veces tambien me sale por ejemplo:

1.2mV/V/OE, tampoco se que significa esa OE...
 
Buenos días pyrat!

mV/V significa milivolts/volts y esto quiere decir que por cada volt de alimentacion
vas a obtener una salida maxima en milivoltaje por cada Gauss que se este detectando.

Ejemplo si tu sensor dice que es 1.2mV/V/Gauss y el rango maximo de Gauss que puede
detectar es de 2, cuando alimentes el sensor con 5 volts su respuesta oscilara entre

0 mV a 6 mV, directamente proporcional a un campo magnetico de 0 a 2 Gauss

aqui tienes que poner mucha antencion, porque si planeas meter esta salida a aun ADC
de 8 bits del micro posiblemente no detecte nada, por que el rango de medicion esta
muy por debajo de la resolucion del ADC.

Gauss es la unidad de medida de la densidad de los campos magneticos
Oe significa Oersted y es la unidad de medida de la intensidad de los campos magneticos

Que estas planeado hacer con este componente?
Saludos
 
Buenos días pyrat!

mV/V significa milivolts/volts y esto quiere decir que por cada volt de alimentacion
vas a obtener una salida maxima en milivoltaje por cada Gauss que se este detectando.

Ejemplo si tu sensor dice que es 1.2mV/V/Gauss y el rango maximo de Gauss que puede
detectar es de 2, cuando alimentes el sensor con 5 volts su respuesta oscilara entre

0 mV a 6 mV, directamente proporcional a un campo magnetico de 0 a 2 Gauss

aqui tienes que poner mucha antencion, porque si planeas meter esta salida a aun ADC
de 8 bits del micro posiblemente no detecte nada, por que el rango de medicion esta
muy por debajo de la resolucion del ADC.

Gauss es la unidad de medida de la densidad de los campos magneticos
Oe significa Oersted y es la unidad de medida de la intensidad de los campos magneticos

Que estas planeado hacer con este componente?
Saludos
Gracias por tus explicaciones, me imaginaba que era algo asi, pero no estaba seguro. Sobre lo que quiero hacer con este componente es relativamente sencillo de explicar, pero creo que complicado de realizar, al menos para mi.

Resulta que tengo un robot movil que se desplaza en cualquier direccion porque tiene ruedas omnidireccionales y tambien puede girar sobre si mismo sin moverse. Pues bien, lo que me gustaria conseguir es incorporarle una brujula digital que me pueda dar los valores de orientacion, es decir, que una vez calibrada, sepa en que direccion (ejemplo: 0º Norte, 90º Este, 180º Sud, 270º Oeste) esta moviendose el robot gracias a los datos de la brujula.

Lo que pasa es que la interficie de E/S de mi robot tiene para entradas analogicas lo ideal seria en Voltios y eso es lo que quiero conseguir, asi que deberia encontrar la forma de conseguir escalar, modular o convertir los datos de la brujula mediante hardware si fuera necesario(si me lo diera directamente la brujula seria la ostia) , para conseguir programarlo respecto a un señal analogico.
 
Pues es algo mas complejo que eso, es un Procesador PC 104, compatible con MOPSlcdVE, 300 MHz, y sistema operativo Linux con kernel en tiempo real, SDRAM 128 MB


Y las ruedas son como estas:
images
 
Hi pyrat!
No importa que procesador tenga el CPU, lo importante
es el rango de Voltaje que puede aceptar el ADC,
usualmente los microcontroladores trae 10bits de ADC
para un rango de 5V, esto quiere decir
2^10 = 1024
5V/1024 = 0.0048 V o 4.8 mV
adicionalmente hay que acondicionar la señal para eliminar el ruido
y que esta sea estable.

la rueda si que esta rara, jiji
cuantas tiene el robot?
 
es de 8 bits = 256
5V/256= 0,01953125 V o 19,5 mV

y como acondicionaria el señal?, con algun filto (condensadores, etc no?)


por cierto, las ruedas tengo 3 puestas de esta manera:
Robotino_kinematics.jpg
 
Hi Pyrat!
Pues para empezar tendrías que ver cuantos grados de resolución relamente ocupas,
los movimientos de tu robot son tan precisos que realmente ocupes una sensibildad de 1 grado en 360 o es suficiente con saber donde esta el norte y el sur?

Y con eso habría que ver si con un amplificador operacional y un arreglo de filtro paso bajo te puede dar una sensibilidad que sea detectable por el ADC de 8 bits.

Si no fuera posible acondicionar la señal para el convertidor de 8 bits, existe la posibilada de usar un ADC externo de 16 bits, pero como tu robot no cuenta con entradas y salidas digitales no creo que te interese.

No tienes una foto de tu robot completo?

Bye.
 
Última edición:
Hi, pyrat!
pues si se ve muy sofisticado tu robot. jijij

Pues si tiene entradas y salidas digitales programables mas facil que
encuentres una brujula digital con la cual conectarte.
En el primer post escribiste que no te funcionana una brujula por I2C...
y por SPI o UART te serviria?

En cuanto a la resolucion de sus movimientos, quiero decir, cual seria el error maximo tolerable;
es decir si le pides que se desplaze 1 metro 35 grados al norte y el robot se mueve 1 metro pero 36 grados al norte. que sucederia?

Saludos.
 
hi unikfriend!

tengo que mirarmelo con detenimiento, desconocia por completo esos dos buses de comunicacion, en cuanto sepa algo te lo comento. Pero igualmente no seria mas sencillo lo de encontrar una brujula que diera señal analogico?

por lo de la segunda pregunta, no te preocupes por el error, por el momento me conformaria con que recibiera las señales de la brujula las supiera interpretar y actuara sobre los motores dependiendo de una señal u otra, el error ahora mismo es despreciable o casi despreciable, basicamente porque el proyecto es la mejora de las capacidades sensoriales, y lo que primero me gustaria es eso, que hubiera una integracion del sensor. Despues ya mirare que errores podria producirme y como puedo solucionarlos. O prefieres saber antes el error? yo te lo miro esto tambien pero te digo que no es mision prioritaria, ok?

te doy las gracias, aunque no lo creas me estas ayudando mucho, y mira que aun no hemos encontrado la solucion, pero me motiva tener que buscar toda la informacion que antes no consideraba del todo determinante
 
Hi pyrat!

Me alegra mucho poderte ayudar en algo. No creas yo tambien quisiera que me ayudaran jiji;
pero cada quien trae su tema y es dificil encontrar a alguien que trabaje lo mismo que una.

http://superdroidrobots.com/shop/item.aspx?itemid=128

Este sensor genera un salida por el output1 digital en forma de pulso que dependiendo de la longitud es el angulo al que esta orientado con respecto al polo magnetico.

longitu maxima de pulso 37 milisegundos
longitud minima de pulso 1 milisegundos
con incrementos de 0.1 milisegundos

(37 -1 ) / 0.1 = 360

es algo caro, pero ya no ocuparias un convertidor digital. Solo tendrían que medir el tiempo que duran los pulsos y eso lo puedes hacer con una entra digital o analoga.

Por otro lado si me preguntas a mi, preferiria hacer mi propio PCB y conseguir el circuito y con eso
se reduciria el costo considerablemente.

espero despues tengas oportunidad de poner un video de tu robot funcionando; solamente recuerdale
quien manda, no se vaya a rebelar jijij

bye...
 
Hi Pyrat!
Bueno no se como se programe el robot, pero con un microprocesador lo mas sencillo
seria conectar la señal a una interrupcion externa y contar el tiempo desde que
sube la señal hasta que baja.
Si esto no es posible y necesitas que la funcion tome siempre el mismo tiempo
haria algo como esto,

unsigned int Compass(void)
{
unsigned int TIni;
unsigned int TGap;
unsigned int TPulse;
TIni = 0; //Inicializa tiempo inicial en cero
TGap = 0; //Inicializa tiempo Gap en cero
TPulse = 0; //Inicializa tiempo pulso en cero
while(Signal && TIni<370); //espera a que pulso baje si es el caso, maximo 37ms
{
TIni++; //mide ancho de pulso inicial, si es que existe
delay_us(100); //espera 0.1 ms
}
while(!Signal && TGap<650); //espera a que pulso suba, 65ms
{
TGap++; //mide de tiempo Gap
delay_us(100); //espera 0.1 ms
}
while(Signal && TPulse<370) //espera a que pulso baje, maximo 37ms
{
TPulse++; //mide ancho de pulso
delay_us(100); //espera 0.1 ms
}
delay_us(75000 - ((TPulse+TIni)*100)); //compensar tiempo
return (TPulse); //devuelve el valor en grados
}

claro como no tengo el circuito no puedo probarlo pero esa es la idea;
no se si se posible programarlo en el lenguaje del robot.

Un filro de paso bajo lo unico que haria, seria mover el voltaje de referencia,
de ninguna manera va a eliminar el tiempo entre mediciones, ni mucho menos
transponer la frecuencia por amplitud.

Yo los he utilizado principalmente para eliminar
el ruido electrico en señales analogas, no en las digitales.

Que lenguaje de programacion utiliza tu robot?
Saludos.
 
Atrás
Arriba