18
Vidljivi senzori Infrared LM393 analogni foto senzor HC-SR501 senzor pokreta TCS230-prepoznavanje boja

7_vidljivi

  • Upload
    gogo-p

  • View
    213

  • Download
    1

Embed Size (px)

DESCRIPTION

v

Citation preview

  • Vidljivi senzori

    Infrared

    LM393 analogni foto senzor

    HC-SR501 senzor pokreta

    TCS230-prepoznavanje boja

  • LM393

    Dva diferencijalna pojaala

    Ulazi: 2-36V

    Napajanje 1-18V

  • LM393 A/D modul

    Napajanje VCC 5V

    GND

    D0 Digitalni izlaz

    signal nizak ako je vrijednost ispod

    predodreene (trimer) i visok ako je iznad predodreene

    A0 analogni izlaz

    toan naponski signal 0-5V

    Konkretan senzor kod nas spojen je foto dioda,

    a moe biti bilo koja osjetljiva komponenta

  • LM393-foto

    LM: VCC 5V : arduino

    LM: GND GND: arduino

    LM: A0 A0: arduino

    LM: D0 D2: arduino

    Pomiite trimer na ploici ime utjeete kada e se digitalni signal prebaciti (osjetljivost)

    Trimer ne utjee na analognu vrijednost

    int switch_state;

    int LightAnalogValue;

    void setup()

    {

    pinMode(LEDPIN, OUTPUT);

    Serial.begin(9600);

    }

    void loop()

    {

    switch_state = digitalRead(2);

    if (switch_state == LOW){

    Serial.println("Digital Signal ON ");

    }else{

    Serial.println("Digital Signal OFF ");

    }

    LightAnalogValue = analogRead(14);

    Serial.print("Analog Value (0 to 1023)");

    Serial.println(LightAnalogValue,DEC);

    delay(500);

    }

  • Passive infrared sensor (PIR sensor)

    Objekti koji su na temperaturi veoj od apsolutne nule emitiraju toplinsku energiju u formi radijacije

    Nevidljivo ljudskom oku

    NE emitira nikakvu energiju

    Biljei energetski potpis objekta ispred njega

    U jezgri je piroelektrini materijal koji biljei djelovanje vanjske energije

  • Passive infrared sensor (PIR sensor)

    Biljei promjenu energije u polju,a time i pomak

    Mora postojati gradijent promjene kako ne bi biljeio male objekte (muhu) ,a biljeio vee objekte (psa, ovjek).

    Dva senzorna elementa su poveza preko diferencijalnog

    pojaala

    Na taj nain promjena u prostoru povienje temperature prostora nee biti otkrivena

    Pojava novoga objekta nee jednako djelovati na oba senzora.

  • HC-SR501

    4.5-20V

    Logiki jedan: 3.3V ,

    logika nula: 0V,

    Dva moda kroz jumper:

    L ne ponavljaj okida

    Kada ga se okine, postavi 0 u 1 i dri vrijeme dranja, onda vraa u 0 i dri vrijeme blokiranja

    H ponavljaj okida

    Dri visoko za vrijeme pojave , nakon svake pojave dri uvijek odreeno vrijeme, nema prelaska u 0 do isteka zadnje pojave

    Vrijeme dranja: 5-200sekundi (promijenjivo)

    Vrijeme blokiranja pojave: 2.5sekundi

    Kut djelovanja

  • HC-SR501

    HC: GNDGND:Arduino

    HC: 5V5V::Arduino

    HC: PinD3 :Arduino

    int analogPin = 3;

    int val = 0;

    void setup()

    {

    Serial.begin(9600); // setup serial

    }

    void loop()

    {

    val = analogRead(analogPin); // read the input pin

    Serial.println(val); // debug value

    delay(1000);

    }

  • TCS230

    Pretvorba svjetlosti u frekvenciju

    Kombinira silikonske fotodiode sa pretvaraem frekvencije u struju

    ip sadri 4x6, 8x8 ili 16x16 fotodioda.

    Svaka fotodioda ima svoj filter

    ima plavi filter

    ima zeleni filter

    ima crveni filter

    nema filtera

    Kroz intenzitet svijetlost fotodioda na razliite filtere mogue je odrediti boju.

    Diode su ispomo da tonije osvjetle predmet

  • TCS230

    Vdd 2.7 5V

    OE omogui rad

    OUT frekvencija

    S0,S1 Skaliranje izlazne frekvencije

    S2,S3 Odabire eljenih fotodioda

  • TCS230 - algoritam OE pin na nisko (omogui rad)

    S0=1, S1=0 20% skaliranja vala

    S2=0, S3=0 -> Crvena

    Priekaj neko vrijeme

    Izmjeri period pravokutnog vala na OUT, intenzitet crvene boje

    S2=0, S3=1 -> Plava

    Priekaj neko vrijeme

    Izmjeri period pravokutnog vala na OUT, intenzitet plave boje

    S2=1, S3=1 -> zelena

    Priekaj neko vrijeme

    Izmjeri period pravokutnog vala na OUT, intenzitet zelene boje

    S2=1, S3=0 -> normalna

    Priekaj neko vrijeme

    Izmjeri period pravokutnog vala na OUT, intenzitet svjetlosti

  • TCS230

    Spajanje:

    TCS OUT D2: Arduino

    TCS S0 D6 : Arduino

    TCS S1 D5 : Arduino

    TCS S2 D4 : Arduino

    TCS S3 D3 : Arduino

    TCS OE GND: Arduino (omoguen rad)

    TCS VCC 5V : Arduino

    TCS GND GND : Arduino

  • Kako izmjeriti vrijeme perioda pravokutnog

    napona?

    Odgovor moramo ui debelo u hardware sa kojim raspolaemo

    Atmega328p ima ugraeni timer/counter koji emo upotrijebiti

    Datasheet poglavlje 17 (uglavnom je potrebno cijelo proitati)

    Ili koristiti timerOne library

  • TimerOne library

    Timer1 na Atmelu: 16MHz

    Max Period = (Prescale)*(1/Frequency)*(2^17) Time per Tick = (Prescale)*(1/Frequency)

    Library koristi D9 i D10

    Timer.initialize(mikrosekunde)

    Inicijalizacija timera (default 1s)

    Timer.setperiod(mikrosekunde)

    Minimum period=1 (1MHz), maksimum=8388480 (8.3sek)

    Timer.pwm(pin,duty,period)

    Generira pravokutni signal na pinu (D9 ili D10), duty=0-1023,opcionalno period u mikrosekundama

    Timer.attachinterrupt(funkcija,period)

    Zove funkciju nakon intervala u mikrosekundama. Prekid ne smije biti sloen da ne bi bio ponovno pozvan jer se nikada nee zavriti u main petlji ako se prekidi samo zovu.

    Timer.setPwmDuty(pin,duty)

    Postaviti duty za pin

    Timer.detachInterrupt(), Timer.disablePwm(pin) i Timer.read() (vrijeme od zadnjeg preljeva timera)

    PrescaleTime per counter

    tickMax Period

    1 0.0625 uS 8.192 mS

    8 0.5 uS 65.536 mS

    64 4 uS 524.288 mS

    256 16 uS 2097.152 mS

    1024 64uS 8388.608mS

  • TCS230 kako mjerimo Postavimo prekid na D2 (na D2 smo spojili out od senzora)

    attachInterrupt(0, TSC_Count, RISING);

    U funkciji prekida zbrajamo varijablu na svaku promjenu napona (pola periode) void TSC_Count(){ g_count ++ ; }

    Inicijaliziramo timer (1sek)

    Svake sekunde ulazimo u provjeru to smo prikupili Timer1.attachInterrupt(TSC_Callback);

    Prvi puta pokreemo crvenu,

    drugi puta itamo crvenu (pamtimo) i pokreemo zelenu

    Trei puta itamo zelenu (pamtimo) i pokreemo plavu

    etvrti puta itamo plavu (pamtimo) i pokreemo bez filtera

    Peti puta i dalje iskaemo jer ekamo da nas u glavnoj petlji resetiraju

    Loop petlja resetira varijablu na poetak mjerenja ispie vrijednosti i nakon toga eka 4 sekunde (oekivano e timer odraditi puni ciklus)

  • #include

    #define S0 6 // Please notice the Pin's define

    #define S1 5

    #define S2 4

    #define S3 3

    #define OUT 2

    int g_count = 0; // count the frequecy

    int g_array[3]; // store the RGB value

    int g_flag = 0; // filter of RGB queue

    float g_SF[3]; // save the RGB Scale factor

    void TSC_Init()

    {

    pinMode(S0, OUTPUT);

    pinMode(S1, OUTPUT);

    pinMode(S2, OUTPUT);

    pinMode(S3, OUTPUT);

    pinMode(OUT, INPUT);

    digitalWrite(S0, LOW); // OUTPUT FREQUENCY SCALING 2%

    digitalWrite(S1, HIGH);

    }

    // Select the filter color

    void TSC_FilterColor(int Level01, int Level02)

    {

    if(Level01 != 0)

    Level01 = HIGH;

    if(Level02 != 0)

    Level02 = HIGH;

    digitalWrite(S2, Level01);

    digitalWrite(S3, Level02);

    }

    void TSC_Count()

    {

    g_count ++ ;

    }

  • void TSC_Callback()

    {

    switch(g_flag)

    {

    case 0:

    Serial.println("->WB Start");

    TSC_WB(LOW, LOW); //Filter without Red

    break;

    case 1:

    Serial.print("->Frequency R=");

    Serial.println(g_count);

    g_array[0] = g_count;

    TSC_WB(HIGH, HIGH); //Filter without Green

    break;

    case 2:

    Serial.print("->Frequency G=");

    Serial.println(g_count);

    g_array[1] = g_count;

    TSC_WB(LOW, HIGH); //Filter without Blue

    break;

    case 3:

    Serial.print("->Frequency B=");

    Serial.println(g_count);

    Serial.println("->WB End");

    g_array[2] = g_count;

    TSC_WB(HIGH, LOW); //Clear(no filter)

    break;

    default:

    g_count = 0;

    break;

    }

    }

    void TSC_WB(int Level0, int Level1) {

    g_count = 0;

    g_flag ++;

    TSC_FilterColor(Level0, Level1);

    Timer1.setPeriod(1000000); // set 1s period

    }

  • void setup()

    {

    TSC_Init();

    Serial.begin(9600);

    Timer1.initialize(); // defaulte is 1s

    Timer1.attachInterrupt(TSC_Callback);

    attachInterrupt(0, TSC_Count, RISING);

    delay(4000);

    for(int i=0; i