Problema relacionado con la liberación de Stephen Hobley para Pixart Sensor

5

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

Leí en alguna parte que la cámara Pixart devuelve un valor solo cuando ve un blob IR. Entonces, en consecuencia, la Biblioteca de Pixart también debería devolver valores solo cuando la cámara ve algún blob IR, ¿verdad?

Pero, en mi configuración, tan pronto como enciendo Arduino, mi monitor de puerto serie 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
...

No le muestro ninguna fuente de IR, sin embargo, sigo recibiendo esto. Cuando le doy una fuente de IR, no la rastrea y aún así sigo obteniendo el mismo resultado.

Por favor ayuda, parece que no estoy llegando a la raíz del problema.

Gracias

    
pregunta Johnny

1 respuesta

3

El autor menciona :

  

El sensor está dañado o su conversión de nivel de línea no está funcionando.

Para averiguar por qué, veamos el código de la biblioteca. Así es como Arduino obtiene los datos en bruto:
Nota: Me he tomado algunas libertades con el código para aclararlo y acortarlo, pero es prácticamente idéntico.

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

Como se explica en el pirata informático original y emulado en la biblioteca, los datos son en el siguiente formato:
[Top byte][Coordinate1][Coordinate2][Coordinate3][Coordinate4]
... donde cada bloque de coordenadas es de 3 bytes, y las coordenadas (X, Y) se calculan así:

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

Este código determina el hecho de que se detecte o no el punto IR, que se repite para 4 "Blobs":

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

Obtienes (0,0) para todos ellos, lo que significa que se detectan todos los blobs ( blobcount es 0x00001111 ). Esto puede resultar de que todos los datos sean cero, ya que (0x00 < 15) es TRUE . Para resumir, "O el sensor es malo o la conversión de nivel de línea no funciona".

En este punto quieres hacer estas cosas:

  • Verifique su circuito del oscilador con un osciloscopio para verificar su funcionamiento (don 'No mida el cristal directamente como' la capacitancia del alcance lo sesgará, pero la salida del inversor).
  • Asegúrese de que estén presentes los voltajes adecuados.
  • Asegúrese de que la SDA y la SCL estén subiendo a 3.3 V con resistencias de 30 kΩ en el lado del sensor y a 5 V con resistencias de 1.5 kΩ en el lado Arduino del convertidor de nivel ( LTC4301L ).
  • Intente comunicarse con un dispositivo diferente de 3.3V I 2 C para asegurarse de que funciona correctamente.

Si todos los controles de salida, es probable que el sensor esté dañado por sobrecalentamiento, electricidad estática o condiciones de sobretensión.

    
respondido por el tyblu

Lea otras preguntas en las etiquetas