Fråga:
Problem angående Stephen Hobleys lib för Pixart Sensor
Jayesh
2010-07-25 14:39:59 UTC
view on stackexchange narkive permalink

Jag undrar om någon här aktivt skulle ha arbetat med Stephen Hobley-biblioteket för Pixart Sensor här. Jag använde samma hårdvarukonfiguration som nämns på Stephens webbplats. Men jag stöter på det här problemet:

Jag läste någonstans att Pixart-kameran bara returnerar ett värde när den ser en IR-blob. Följaktligen bör Pixart-biblioteket också returnera värden endast när kameran ser någon IR-blob, eller hur?

Men i min inställning, så snart jag slår på Arduino, börjar min seriella portmonitor att visas:

  Blob 1 upptäckt x = 0, y = 0, storlek = 0 Blod 2 upptäckt x = 0, y = 0, storlek = 0 Blod 3 upptäckt x = 0, y = 0, storlek = 0 Blob 4 upptäckt x = 0, y = 0, storlek = 0 ...  

Jag visar den ingen IR-källa, men jag fortsätter att få den här. När jag ger den en IR-källa spårar den inte och ändå får jag samma resultat!

Snälla hjälp, jag verkar inte komma till rotens problem.

Tack

Ett svar:
tyblu
2011-01-16 04:09:30 UTC
view on stackexchange narkive permalink

Författaren nämner:

Antingen är sensorn dålig eller så fungerar inte konverteringen på linjenivå.

Till ta reda på varför, låt oss titta på bibliotekskoden. Så här får Arduino rådata:
Obs: Jag har tagit några friheter med koden för att klargöra och förkorta den, men den är praktiskt taget identisk. sup >

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

Som förklaras av den ursprungliga hackaren och emulerad i biblioteket, data är i följande format:
[Toppbyte] [Koordinat1] [Koordinat2] [Koordinat3] [Koordinat4]
... där varje koordinatblock är 3 byte och koordinaterna (X, Y) beräknas så här:

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

Huruvida IR-punkten detekteras eller inte bestäms av denna kod, som upprepas för 4 "Blobs":

  Blob1.Size = (Byte3 & 0b00001111); blobcount | = (Blob1.Size < 15)? 0x01: 0; // Är Blob.Size mindre än 0x0F?  

Du får (0,0) för dem alla, vilket innebär att alla blobar upptäcks ( blobcount är 0x00001111 ). Detta kan bero på att all data är noll, eftersom (0x00 < 15) är TRUE . För att göra en lång historia kort, "Antingen är sensorn dålig eller så fungerar inte konverteringen på radnivå."

Vid den här tiden vill du göra följande:

  • Kontrollera din oscillatorkrets med ett oscilloskop för att verifiera dess funktion (mät inte kristallen direkt eftersom "omfångskapacitansen kommer att förskjuta den, men inverterarens uteffekt).
  • Se till att det finns korrekta spänningar.
  • Se till att SDA och SCL dras upp till 3,3V med 30kΩ motstånd på sensorsidan och till 5V med 1,5kΩ motstånd på Arduino-sidan av nivåomvandlaren ( LTC4301L).
  • Försök att kommunicera med en annan 3.3VI 2 C-enhet för att säkerställa att den fungerar som den ska.

Om allt kontrolleras är det troligt att sensorn är skadad av överhettning, statisk elektricitet eller överspänningsförhållanden.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 2.0-licensen som det distribueras under.
Loading...