Operácie

TSL1401 Line Sensor

Z SensorWiki

Verzia z 10:05, 13. marec 2013, ktorú vytvoril Balogh (diskusia | príspevky) (Úlohy)
TSL1401Camera.png

Základom kamery je lineárne senzorové pole 128x1 doplnené o vzorkovací obvod. Funkcia je popísaná v datasheete. Kamera okrem toho obsahuje oddelovací zosilňovač, ktorého schéma zapojenia je tu:

LineScanCameraSchematics.png


Dokumenty:


Úlohy

  1. Určte ohniskovú vzdialenosť objektívu
  2. Určte vzdialenosť kamery od 3cm pásiku, aby sa premietol na celý čip.
  3. Pomocou osciloskopu a čierneho pásiku zaostrite kameru
  4. Zistite vplyv osvetlenia zadnej steny čipu na kvalitu obrazu
  5. Pripojte kameru k PC a pomocou demonštračného programu zosnímajte jednoduchý čiarový kód
  6. Pozrite si zároveň aj signál na osciloskope (uložte na USB klúč)
  7. Zistite vplyv zmeny expozičnej doby na kvalitu snímky
  8. Zosnímajte predložený čiarový kód.
  9. Záznam z každej úlohy vypracujte vo forme technickej správy.


TSL1401chip.jpg

/* ************************************************************ */                              
/* Cvicenie so snimacom TSL1401 -- riadkovy CMOS snimac 128px   */
/*                                                              */
/* ************************************************************ */                              

                     // Sensor interface: 
#define AOpin  0     // Analog output - yellow
#define SIpin  3     // Start Integration - orange
#define CLKpin 2     // Clock - red
                     // Vcc - brown
                     // GND - black

#define NPIXELS 128  // No. of pixels in array

byte Pixel[NPIXELS]; // Field for measured values <0-255>


#define FASTADC 1   
 // defines for setting and clearing register bits
 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))



void setup(void)
{
   pinMode(SIpin, OUTPUT);
   pinMode(CLKpin, OUTPUT);
   //pinMode (AOpin, INPUT);

   digitalWrite(SIpin, LOW);   // IDLE state
   digitalWrite(CLKpin, LOW);  // IDLE state

#if FASTADC
  // set prescale to 16
  sbi(ADCSRA,ADPS2);
  cbi(ADCSRA,ADPS1);
  cbi(ADCSRA,ADPS0);
#endif

   Serial.begin (115200);
}



void loop (void)
{
   int i;
   int expTime;

   digitalWrite (CLKpin, LOW);
   digitalWrite (SIpin, HIGH);
   digitalWrite (CLKpin, HIGH);
   digitalWrite (SIpin, LOW);

   delayMicroseconds (1);  /* Integration time */

/* and now read the real image */

   for (i = 0; i < NPIXELS; i++) {
     Pixel[i] = analogRead (AOpin)/4 ; // 8-bit is enough
     digitalWrite (CLKpin, LOW);
     delayMicroseconds (1);
     digitalWrite (CLKpin, HIGH);
   }


   Serial.write ((byte)0);            // sync byte = 0
   for (i = 0; i < NPIXELS; i++) {
       Serial.write ((byte)Pixel[i]+1);  

   }
}