Problema relacionado con la librería de Stephen Hobley para Pixart Sensor

Me pregunto si alguien aquí habría trabajado activamente con la biblioteca de Stephen Hobley para Pixart Sensor aquí . Usé la misma configuración de hardware que 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 IR Blob. Entonces, en consecuencia, la Biblioteca Pixart también debería devolver valores solo cuando la cámara ve una mancha 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, pero sigo recibiendo esto. Cuando le doy una fuente 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

Respuestas (1)

El autor menciona :

O el sensor está dañado o la conversión de nivel de línea no funciona.

Para averiguar por qué, veamos el código de la biblioteca. Así es como Arduino obtiene los datos sin procesar:
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 explicó el hacker original y emulado en la biblioteca, los datos están 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;

Si se detecta o no el punto IR se determina mediante este código, que se repite para 4 "Blobs":

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

Obtiene (0,0) para todos ellos, lo que significa que se detectan todos los blobs ( blobcountis 0x00001111). Esto puede resultar de que todos los datos sean cero, tal (0x00 < 15)cual TRUE. Para abreviar una larga historia, "O el sensor es malo o la conversión de nivel de línea no funciona".

En este punto, desea hacer estas cosas:

  • Verifique el circuito de su oscilador con un osciloscopio para verificar su funcionamiento (no mida el cristal directamente ya que la capacitancia del osciloscopio lo sesgará, pero la salida del inversor).
  • Asegúrese de que haya voltajes adecuados.
  • Asegúrese de que SDA y SCL se suban 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 3.3VI 2 C diferente para asegurarse de que funciona correctamente.

Si todo sale bien, es probable que el sensor esté dañado por sobrecalentamiento, electricidad estática o condiciones de sobrevoltaje.