QTR8RC Digital Uzaklık Sensörü Kullanımı

0J615_600

QTR 8RC Digital Uzaklık Sensörü  : Öncelikle bu yazıyı eklememin en büyük sebebi digital olarak aldığım bu sensörün aslında çok farklı bir kullanıma sahip olmasıdır.Beni çok uğraştırmıştı başkalarıda uğraşmasın diye bu yazıyı ekliyorum.

Tanım:
Bu sensör modülü 8 IR LED/fototransistör çifti 10 mm’lik alana monteli, çizgi izleyen robot için mükemmel bir dedektördür.

LED serisi mevcut tüketimi yarıya indirmek için düzenlenmiş ve MOSFET, ek hassasiyet ya da güç tasarrufu için LED’leri kapatılmasına izin vermektedir. QTR-8A Reflectance Sensor Array’den farkı her sensör ayrı bir dijital I / O ölçülebilir çıkışı sağlar.

Özellikler:

  • Boyutları: 75x 13×3 mm
  • Çalışma voltajı: 3,3-5,0 V
  • Tedarik akımı: 100 mA
  • Çıkış formatı:Dijital I/O uyumlu
  • Çıkış voltaj aralığı: 0 V gerilim ile birlikte
  • Optimal algılama mesafesi: 3 mm
  • Maksimum mesafe algılama: 9,5 mm
  • Ağırlık: 3,09 gr.

Şematik diyagramı modülün aşağıda gösterilmiştir:

 Şemadaki 10nF lik  kondansitör beni bayağı uğraştırdı.onun deşarj süresine göre işlem yapıyoruz.

Dokümanlar:

Geniş bilgi için

Aşağıda ekteki örnekler şuan kullanmakta olduğum çizgi izleyenlerim için yazmıştım.tabi sadece beyaz çizgi takibi yapıyor.gelişmeye çok açıktır.

Pic Basicde yazılmış çalışan örnek kod :

pololudeneme

CCS C de yazılmış çalışan örnek kod :

çizgi izleyen 8 sensörlü (pwm)

 

8 Yorum
  1. Profile photo of Emrah BUDAK
    Emrah BUDAK 6 sene önce

    Hocam keşke balık tutmasını öğretseydiniz. Hazır kodlar robotiğe yeni başlayanlar için pek iyi değil.

  2. Profile photo of Volkan Demircan
    Volkan Demircan 6 sene önce

    Aynı sıkıntıyı biz de yaşadık tekli olanlarda, dijital ibaresini görüp satın aldık, detaylı okumadan satın almamak gerek :)

  3. Profile photo of
    Kamer Şahin 5 sene önce

    Bende bu sensörü dijital kullanabileceğimi düşünerek aldım, Fakat iki gündür denemelerime rağmen hala değer alamıyorum. Mehmet Akif hocamın kullandığı şekilde kullanıyorum, hatta aynı kodlarla yine çıkış alamıyorum.
    Gözden kaçırdığım bir yer mi var acaba. Hatta proteusta çalışıyormuş gibi gözükmesine rağmen, araba üzerinde herhangi bir değer okuyamıyorum.

    #include
    #fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
    #use delay(clock=4000000)

    #define motorSolIleri pin_c5
    #define motorSolGeri pin_c4

    #define motorSagIleri pin_c7
    #define motorSagGeri pin_c6

    #define M1CP pin_c1
    #define M2CP pin_c2

    #define sagLed pin_c3
    #define solLed pin_c0
    #define ortaLed pin_d0

    int8 P_Deger;
    int16 kalibre;
    int i;

    void degerOku(void)
    {

    set_tris_d(0x00); // d0,d1,d2,d3,d4,d5,d6,d7 çıkış
    output_d(126); // d1,d2,d3,d4,d5,d6 lojik-1
    delay_us(100);
    set_tris_d(0x7E); // d1,d2,d3,d4,d5,d6 giriş
    delay_us(kalibre);
    P_Deger=input_d();

    }
    void kalibrasyon()
    {

    set_tris_d(0x00);
    output_d(126);
    delay_ms(100);
    set_tris_d(0xe7);

    while(P_Deger>0)
    {
    delay_us(10);
    P_Deger=input_d();
    i++;
    }
    kalibre=i*10+10;
    }

    void main()
    {
    set_tris_a(0x00); //A portunun tamamı çıkış
    set_tris_b(0x00); //B0,B1,B2,B3,B4 çıkış – B5,B6,B7 giriş
    set_tris_c(0x00); //C portunun tamamı çıkış

    output_high(M1CP); // PWM kullanana kadar çıkış 1 sabitle
    output_high(M2CP); // ” ” ” ” ” ”

    kalibrasyon();

    for(;;)
    {
    degerOku();

    if(bit_test(P_Deger,1)&&!bit_test(P_Deger,2)&&!bit_test(P_Deger,3)
    &&!bit_test(P_Deger,4)&&!bit_test(P_Deger,5)&&!bit_test(P_Deger,6)){

    output_low(sagLed);
    output_high(solLed);

    output_high(motorSolIleri); // sol ileri
    output_high(motorSagIleri); // sağ ileri
    output_low(motorSolGeri);
    output_low(motorSagGeri);
    }

    if(!bit_test(P_Deger,1)&&!bit_test(P_Deger,2)&&!bit_test(P_Deger,3)
    &&!bit_test(P_Deger,4)&&!bit_test(P_Deger,5)&&bit_test(P_Deger,6)){

    output_low(solLed);
    output_high(sagLed);
    output_low(motorSagIleri);
    output_high(motorSagGeri);
    output_high(motorSolGeri);
    output_low(motorSolIleri);
    }
    }
    }

  4. Profile photo of Mehmet Akif SÖNMEZ Yazar
    Mehmet Akif SÖNMEZ 5 sene önce

    kodları aşağıdaki gibi değiştir.

    void degeroku(void)
    {
    set_tris_d(0x00);
    output_d(255);
    delay_us(10);
    set_tris_a(0xFF);
    delay_us(kalibre);
    P_Deger=input_d();
    }
    void kalibrasyon()
    {
    set_tris_d(0x00);
    output_d(255);
    delay_us(100);
    set_tris_d(0xFF);
    P_Deger=255;
    while(P_Deger>0)
    {
    delay_us(10);
    P_Deger=input_d();
    i++;
    }
    kalibre=i*10+10;
    }

    !bit_test(P_Deger,1) // beyaz çizgi varsa
    bit_test(P_Deger,1) // beyAZ çizgi yoksa

  5. Profile photo of
    Kamer Şahin 5 sene önce

    Hocam çok teşekkür ederim, bu şekilde çalıştırabildim kodları. Fakat ben devreyi 8 adet şarjlı kalem pil ile denediğimde sonuç hiç alamıyormuşum, güç kaynağı ile çalıştırınca çıkışlarını görebildim şimdi.
    Aslında bi önceki yazdığım kodlardaki değişiklikleri yapma amacım D0 ve D7 portlarını başka amaçlarla kullanmayı istediğimden d1,d2,d3,d4,d5,d6 portlarına 6 adet sensörü bağlamıştım.

    void degeroku(void)
    {
    set_tris_d(0×00);
    output_d(126);
    delay_us(10);
    set_tris_a(0x7E);
    delay_us(kalibre);
    P_Deger=input_d();
    }

    Bu şekilde kullanabileceğimi düşünmüştüm, ama olmuyor sanırım. Bütün portları ona ayırmam gerekiyor.

    Birde ilginç bir olayla karşı karşıyayım, belki sizin de tecrübeniz vardır, 8 adet 2100mAh Varta pil ile çalıştığımda pololunun sensörlerinin çıkış vermediğini görüyorum, 12V güç kaynağı ile çok güzel çalışıyorlar.
    Pillerimde sorun yok çünkü bir çok yerde kullanıyorum bu pilleri fakat pololunun sensörlerini kullandığım arabaya takınca pic çalışıyor fakat sensörler bilgi gönderemiyor.

    16F877A 4MHz de kullanıyorum, sigorta ayarlarım da şu şekilde;

    #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
    #use delay(clock=4000000)

Kimliğiniz ile giriş yapın

veya    

Ayrıntılarınızı unuttunuz mu?

Create Account