5 votos

Problema con Stephen Hobley ' lib s sensor de Pixart

Me pregunto si alguien aquí habría trabajado activamente con el Stephen Hobley, biblioteca de Pixart Sensor de aquí. He utilizado la misma configuración de hardware como se mencionó en Esteban sitio web. Sin embargo, me encuentro con este problema:

He leído que la Pixart cámara devuelve un valor sólo cuando se ve a un IR Blob. Así que, en consecuencia, la Pixart Biblioteca también debe volver a los valores sólo cuando la cámara detecta IR blob, ¿verdad?

Pero, en mi configuración, tan pronto como el poder de Arduino, mi serial port monitor comienza a mostrar:

Blob 1 detected x=0, y=0, size=0
Blob 2 detected x=0, y=0, size=0
Blob 3 detected x=0, y=0, size=0
Blob 4 detected x=0, y=0, size=0
...

Yo no mostrar la fuente IR, sin embargo, sigo teniendo este. Cuando me dan una fuente de IR, no de pista y todavía sigo obteniendo el mismo resultado!

Por favor ayuda, no me parecen llegar a la raíz del problema.

Gracias

3voto

Annan Puntos 3491

El autor menciona:

El sensor es mala, o su nivel de línea de conversión no está funcionando.

Para averiguar el por qué, veamos el código de la biblioteca. Esta es la forma en que el Arduino recibe los datos en bruto:
Nota: me he tomado algunas libertades con el código de aclarar y acortar, pero es prácticamente idéntico.

while(Wire.available() && i < 16) {
    data_buf[i++] = Wire.receive();
}

Según lo explicado por el original hacker y emulado en la biblioteca, los datos en el siguiente formato:
[Top byte][Coordinate1][Coordinate2][Coordinate3][Coordinate4]
... donde cada coordenada bloque es de 3 bytes, y el (X,Y) las coordenadas se calcula de la siguiente manera:

Blob1.X = (Byte3 & 0b00110000) <<4 + Byte1;
Blob1.Y = (Byte3 & 0b11000000) <<2 + Byte2;

Si o no el IR punto es que se ha detectado es determinado por este código, que se repite de 4 "Blobs":

Blob1.Size = (Byte3 & 0b00001111);
blobcount |= (Blob1.Size < 15)? 0x01 : 0; // Is Blob.Size less than 0x0F?

Usted está recibiendo (0,0) para todos ellos, es decir, todos los blobs son detectados (blobcount es 0x00001111). Esto puede ser resultado de todos los datos a cero, como (0x00 < 15) es TRUE. Para hacer corta una larga historia, "ya Sea que el sensor es mala, o su nivel de línea de conversión no está funcionando."

En este punto quiero hacer estas cosas:

  • Compruebe su circuito oscilador con un osciloscopio para comprobar su funcionamiento (no se puede medir de cristal directamente como " ámbito de la capacitancia se tuercen, pero la salida del inversor).
  • Asegurar la correcta voltajes están presentes.
  • Asegúrese de SDA y SCL son arrastradas hasta 3.3 V con 30kΩ resistencias en el sensor del lado de 5V con 1,5 kΩ resistencias en el Arduino lado del convertidor de nivel (LTC4301L).
  • Tratar de comunicarse con diferentes 3.3 V I2C dispositivo para asegurarse de que funciona correctamente.

Si todo sale bien, es probable que el sensor está dañado desde el sobrecalentamiento, la electricidad estática o las condiciones de sobretensión.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X