Problem bezüglich der Freigabe von Stephen Hobley für Pixart Sensor

Ich frage mich, ob hier jemand aktiv mit der Stephen Hobley-Bibliothek für Pixart Sensor gearbeitet hätte . Ich habe die gleiche Hardwarekonfiguration wie auf Stephens Website erwähnt verwendet. Allerdings stoße ich auf dieses Problem:

Ich habe irgendwo gelesen, dass die Pixart-Kamera nur dann einen Wert zurückgibt, wenn sie einen IR-Blob sieht. Dementsprechend sollte die Pixart-Bibliothek auch nur dann Werte zurückgeben, wenn die Kamera einen IR-Blob sieht, richtig?

Aber in meinem Setup zeigt mein Monitor für die serielle Schnittstelle Folgendes an, sobald ich Arduino einschalte:

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
...

Ich zeige ihm keine IR-Quelle, aber ich bekomme das immer wieder. Wenn ich ihm eine IR-Quelle gebe, verfolgt er sie nicht und ich erhalte immer noch das gleiche Ergebnis!

Bitte um Hilfe, ich scheine nicht an die Wurzel des Problems zu kommen.

Danke

Antworten (1)

Der Autor erwähnt :

Entweder ist der Sensor defekt oder Ihre Line-Pegel-Konvertierung funktioniert nicht.

Um herauszufinden, warum, schauen wir uns den Bibliothekscode an. So erhält der Arduino die Rohdaten:
Hinweis: Ich habe mir beim Code ein paar Freiheiten genommen, um ihn zu verdeutlichen und zu verkürzen, aber er ist praktisch identisch.

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

Wie vom ursprünglichen Hacker erklärt und in der Bibliothek emuliert, haben die Daten das folgende Format:
[Top byte][Coordinate1][Coordinate2][Coordinate3][Coordinate4]
... wobei jeder Koordinatenblock 3 Bytes groß ist und die (X,Y)-Koordinaten wie folgt berechnet werden:

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

Ob der IR-Punkt erkannt wird oder nicht, wird durch diesen Code bestimmt, der für 4 "Blobs" wiederholt wird:

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

Sie erhalten (0,0) für alle, was bedeutet, dass alle Blobs erkannt werden ( blobcountist 0x00001111). Dies kann daraus resultieren, dass alle Daten Null sind, so wie sie (0x00 < 15)sind TRUE. Um es kurz zu machen: "Entweder ist der Sensor defekt oder Ihre Line-Pegel-Konvertierung funktioniert nicht."

An diesem Punkt möchten Sie Folgendes tun:

  • Überprüfen Sie Ihre Oszillatorschaltung mit einem Oszilloskop, um ihren Betrieb zu überprüfen (messen Sie den Kristall nicht direkt, da die Oszilloskopkapazität ihn verzerrt, sondern der Wechselrichterausgang).
  • Stellen Sie sicher, dass die richtigen Spannungen vorhanden sind.
  • Stellen Sie sicher, dass SDA und SCL auf der Sensorseite mit 30-kΩ-Widerständen auf 3,3 V und auf der Arduino-Seite des Pegelwandlers ( LTC4301L ) mit 1,5-kΩ-Widerständen auf 5 V hochgezogen werden.
  • Versuchen Sie, mit einem anderen 3.3VI 2 C-Gerät zu kommunizieren, um sicherzustellen, dass es ordnungsgemäß funktioniert.
    • Das Datenblatt des LTC4301L empfiehlt eine 10-nF-Kappe am Versorgungsstift.

Wenn alles überprüft wird, besteht die Möglichkeit, dass der Sensor durch Überhitzung, statische Elektrizität oder Überspannungsbedingungen beschädigt wird.