avatar_Mayhoş

IR Led Alıcı ve Verici Tasarımı

Başlatan Mayhoş, 31 Aralık 2019, 14:19:56

Mayhoş

Merhaba,

Elimde ir led alıcı ve verici var.

Pic ile 100khz'lik bir pwm sinyali verici ledime gönderiyorum. Alıcı ledim ile bu sinyali görmeye çalışıyorum. Fakat mesafe ile ilgili bir sorunum var. Yaklaşık 1-2 cm'lik bir mesafeden sinyalimi aynen görebiliyorum ama mesafe biraz daha açılınca sinyalim kesiliyor. Opamp ile yükseltmeye çalıştım ama mesafem değişmedi sadece 1-2 cm yakınlıktayken gördüğüm sinyalimi büyütebildim.

Mesafeyi arttırmak için nasıl bir yol izlemem gerekir sizce?

TSOP gibi uzak mesafelerden algılama yapmak istiyorum. Yükseltme ve filtre işlemleri yapılıyordur mutlaka tabi ama öncelikle 5-10 cm'den okunaklı bir sinyal görmek istiyorum. Sonrasında gelen sinyalimi yükseltip filtreleyeceğim. Ama 1-2 cm dışına çıkınca pwm sinyal şeklimi kaybediyorum.

fatih88

100khz neden sinyal kullanıyorsunuz ki genelde 38-40khz taşıma sinyali kullanılıyor ve alıcısı genelde kumanda alıcı gözüyle sağlanıyor 38-40khz üstünde alıcı göz sıkıntı yaratabilir bunu ne olarak kullanacağını bilmiyorum ama mesafe ne olması gerekiyor
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Mayhoş

Alıntı yapılan: fatih88 - 31 Aralık 2019, 15:19:17100khz neden sinyal kullanıyorsunuz ki genelde 38-40khz taşıma sinyali kullanılıyor ve alıcısı genelde kumanda alıcı gözüyle sağlanıyor 38-40khz üstünde alıcı göz sıkıntı yaratabilir bunu ne olarak kullanacağını bilmiyorum ama mesafe ne olması gerekiyor

Kumanda vericileriyle çakışmaması için 40 khz üzeri bir alıcı tasarlamam gerekiyor. Mesafe 50cm olacak. Kumanda alıcılarının nasıl yapıldığını araştırıyorum. O şekilde bir sensör tasarlamam gerekiyor. 100khz seviyelerinde algılayan ama tsoplar kadar da hassas güzel bir sensör yapmaya çalışıyorum. Ama henüz filtre ve yükseltme devrelerine başlamamışken ir led alıcı üzerindeki sinyallere baktığımda 2 cm'den sonra bozulma oluyor hatta sinyalim kayboluyor. Bu elemanların yalın halleriyle bile daha uzak mesafelerden alıp vermesi gerekmez mi?

fatih88

Kendi protokolün olursa neden kumanda sinyalleriyle karışsınki alıcı devre senin protokolünü bekleyecek gelen sinyal senden değilse programın başına dönüp senin sinyalini bekler hem frekans taşıyıcı sinyaldir frekans artıkça bildiğim kadar menzil artar 38khz sinyal 50cm mesafe için çok yeterli
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Mayhoş

#4
Öneriniz için teşekkürler ama amacım 100 khz'de bir algılama yapabilmek. ,Tsop türü alıcılar 38 khz ile evet gayet iyi çalışıyor bir sorun yok. Mesafe konusunda da bir sıkıntı olmuyor. Ama bu tsopları nasıl yapmışlar ki metrelerce ileriden bile algılayabiliyor? Kendi frekansıma özgü bir sensör yapmaya çalışıyorum.





İlk görselde 40khz lik bir sinyal gönderiyorum mesela, alıcım 2 cm gibi bir mesafeden sinyalimi alıyor. İkinci görselde ise mesafeyi biraz arttıyorum yaklaşık 5 cm falan yapıyorum. Sinyalim bozuluyor ve çok az bir hareket daha ettirirsem kayboluyor. Alıcımı bir opampa bağladım ve opampın çıkışını gözlemliyorum.




Alıcımın bağlı olduğu devre bu şekilde. Vericim ise doğrudan pic'in pwm'ine bağlı durumda. Bu ir alıcı ve verici ile mesafemi nasıl arttırabilirim mevcut durumumda?

fatih88




ben o skop görüntüsünde modulasyon görmüyorum skop görüntü resimdeki gibi olmalı
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Mayhoş

Alıntı yapılan: fatih88 - 02 Ocak 2020, 12:08:20

ben o skop görüntüsünde modulasyon görmüyorum skop görüntü resimdeki gibi olmalı


IR alıcı ve vericiyi bilgi göndermek için kullanmayacağım. Araya bir cisim girince bilgi almak için kullanacağım. O yüzden direkt 100khz pwm gönderiyorum. Araya bir nesne girince sinyalim kesileceği için çıkış alacağım.

Mesafe sorununu çözebilirsem eğer çalıştırmak istediğim frekanslara özel filtreler yapacağım böylece istediğim frekanslarda çalışan vericileri de yan yana koyarak alıcıların filtrelerine göre birbirinden etkilenmeden çalışmalarını sağlayacağım.

Ama tabiki mesafe sorununu aşamadım henüz.

ete

Öncelikle merak ediyorum, 100khzlik bir sinyalin varlığı yada yokluğunu nasıl anlayacaksın. Aynı işi 1 hzlik bir sinyal ile yapsan dahamı zor algılardın acaba.
Mesafe faktörüde büyük ölçüde sinyalin peryoduna ve gönderilen sinyalin gücüne bağlıdır. Modülasyon işi buradada avantaj yaratacaktır. Verici ledi 10 ohm luk seri direnç ile sür bak ne oluyor mesafe.
Ete

Dtmf

#8
Ete hocam bir aralar biyle bir alici verici yapmistim dediginiz gibi frekans filan yoktu 10ohm luk direnc ve bir adet alicida kullanilmak uzere mercek ile yaklasik 30m de calisti hatta biraz modifiye ile ses bile gondermistim alicida lm386 ile sesi gayet net almistim

fatih88

Bu mantıkta sonuç alamazsın gibime geliyor modülasyonlu bilgi yollanan gerek tk19 ile sen bi 38khz modilasyonlu veri yollamayı  başar sonra frekansı 100khz yaparsın bir kere sadece 100khz sinyali direk basarak ben sensör yapmazdım bir sürü sorun olabilir ilerde
Yapacagin cihazın muadili varsa tersine mühendislik yapderim
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Mayhoş

Alıntı yapılan: ete - 02 Ocak 2020, 16:28:10Öncelikle merak ediyorum, 100khzlik bir sinyalin varlığı yada yokluğunu nasıl anlayacaksın. Aynı işi 1 hzlik bir sinyal ile yapsan dahamı zor algılardın acaba.
Mesafe faktörüde büyük ölçüde sinyalin peryoduna ve gönderilen sinyalin gücüne bağlıdır. Modülasyon işi buradada avantaj yaratacaktır. Verici ledi 10 ohm luk seri direnç ile sür bak ne oluyor mesafe.
Ete
Alıcımda gönderdiğim sinyalin aynısını görmeye çalışıyordum. 100khz vericiden çıkan sinyal alıcıya geldiğinde alıcıda da 100khz lik bir sinyal görüyordum. Palsleri saydıdarak 100khz olup olmadığı anlayacaktım. Bunu bir kenara bıraktım şimdi 10ohmluk seri direnç ile ir ledi sürdüm. Alıcımı osiloskoba bağladım yine de mesafe 5 cm'lerdeyken tepki veriyor ir alıcı. Birçok ir alıcı verici var hepsiyle denedim farklı kombinasyonlar yaptım olmadı.

Alıntı yapılan: Dtmf - 02 Ocak 2020, 16:45:06Ete hocam bir aralar biyle bir alici verici yapmistim dediginiz gibi frekans filan yoktu 10ohm luk direnc ve bir adet alicida kullanilmak uzere mercek ile yaklasik 30m de calisti hatta biraz modifiye ile ses bile gondermistim alicida lm386 ile sesi gayet net almistim

Hocam anlayamıyorum bir yerlerde bir hata yapıyorum ama bulamadım. İşin en temeline indim frekansı, sinyalimi falan bir kenara bıraktım. 50 cm gibi bir mesafeden alıcım vericiye tepki versin yeter.

Alıcımın bir ucunu direnç ile +'ya, diğer ucunu doğrudan -'ye bağlıyorum. Direnç bağlı ucundan da pic'in pinine gidiyorum. Eğer pinde 1 var ise led yak, yok ise sönük kalsın diyorum. IR alıcıyı devreye ters bağlıyorum. Yok hiçbir şekilde alıcı pici etkileşime sokmuyor.

IR alıcıyı çıkartıp tsop bağlıyorum, ir vericiden 40khz pwm sürüyorum. Her türlü algılıyor bana mısın demiyor. Nerede hata yapıyorum çözemedim. Yaptığınız çalışma ait bir devre çizimi vs var mı hocam inceleyeyim.

Alıntı yapılan: fatih88 - 02 Ocak 2020, 16:53:42Bu mantıkta sonuç alamazsın gibime geliyor modülasyonlu bilgi yollanan gerek tk19 ile sen bi 38khz modilasyonlu veri yollamayı  başar sonra frekansı 100khz yaparsın bir kere sadece 100khz sinyali direk basarak ben sensör yapmazdım bir sürü sorun olabilir ilerde
Yapacagin cihazın muadili varsa tersine mühendislik yapderim

Hocam ne bilgisi göndereyim peki? Ben sadece 50cm aralıkta sağlıklı çalışacak bir sensör yapmaya çalışıyordum. Buradaki frekans sadece etraftan etkilenmemesi içindi. Tsoplar nasıl ki 38khz de çalışıyor bende aynı mantıkta 100khz de çalışan bir ir alıcı yapmak istemiştim. Tsop kullandığımda da 40khz direkt pwm gönderiyorum tsop ile vericinin arasına elimi koyduğum an çıkış alıyorum. Zaten amacım bilgi göndermek değil, cisim algılamaktı. Ama frekansım özel olsun istemiştim sadece. Onu da geçtim artık, en basit haliyle bile alıcı ve vericimi haberleştiremiyorum.

ete

Infrared sistemler direk kullanmak için uygun sistemler değiller. Üstelik taşıyıcı sistem de yanlız başına cisim algılamak amacı ile kullanılamaz. Tv kumandalarına bak neredeyse 5-6 m den algılama yapabiliyorlar. Öyle ahım şahım bir vericileride yok. İşin sırrı alıcı göz içindeki sinyal ayıklama ve kuvvetlendirmede gizli.
Senin mantığınla mesafe artırmak için hep vericini kuvvetlendirmek zorundasın. Öncelikle Ir ledi transistörle sürmen ve anlık değer olarak led den 50-100 ma akım akıtman gerekir. Hatta en güzeli ledi push pull olarak iki transistörle sürmendir. Böylece hem high hemde low peryodunu kuvvetlendirmiş olursun.
Ete

Ete

fatih88

kumanda sistemine modilasyon haricinde protokol oluşturman gerekir sony sırc ve philips in rc5 sistemleri bir protokoldür bu ii kumanda sistemi birbirini hic bir zaman tutmaz yani etkilenmez sen şimdi protokol oluşturmadan direk sinyal verirsen bütün 38khz veren tüm kumandalar senin sistemini etkiler hatta güneş bile sıkıntı yaratabilir
bunun için mesela 5ms uzun bir low alıcının bu uzun sinyalden sonra dataları alacağını bilmesi için
sonra senin belirleyeceğin sürelerde sinyaller mesela high için 100us high ve 50us low gönderelim low için ise 100us low ve 50us high yollyalım diyelimki sabit verin 10110011 o zaman ne oluyor uzun bir lovdan sonra 8 peryotluk veri yolluyon (16puls) aalıcında uzun low yakalıyor ve bu 16 pulsluk verilerin sürelerini ölçerek bir mi 0 mı olduğunu çözüyorsun gelen 1 ler ve0 lar senin  sabit verinle örtüşüyorsa röleyi high yapıyorsun örtüşme sağlanmadı low yapıyorsun tabi bu işlem sürekli yapıyorsun aradan biri geçince sisteme belrlenen sürede bilgi gelmeyince röle low durumuna geçireceksin

umarım anlatabilmişimdir hatam varsa düzeltilsin lütfen anlatma özürlü bir insan olarak annattıklarım belki anlaşılmamış olabilir
iyi çalışmalar
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Mayhoş

#13
---- Program üzerinde yaptığım değişiklikleri satırlarda yan tarafa belirttim.


Verici Kodu:

Alıntı Yap// Extended NEC protocol IR remote control transmitter CCS C code
 
#include <12F1822.h>                                             //16F877A olarak düzenledim
#fuses NOMCLR INTRC_IO PLL_SW                         // INTRC_IO ve PLL_SW kısımlarını sildim
#use delay(clock=32000000)                                   //20Mhz olarak düzenledim
#use fast_io(A)
#use pwm (PWM1, FREQUENCY = 38KHz, DUTY = 25, PWM_OFF)
 
void send_signal(unsigned int32 number){
  int8 i;
  // Send 9ms burst
  pwm_on();
  delay_ms(9);
  // Send 4.5ms space
  pwm_off();
  delay_us(4500);
  // Send data
  for(i = 0; i < 32; i++){
    // If bit is 1 send 560us pulse and 1680us space
    if(bit_test(number, 31 - i)){
      pwm_on();
      delay_us(560);
      pwm_off();
      delay_us(1680);
    }
    // If bit is 0 send 560us pulse and 560us space
    else{
      pwm_on();
      delay_us(560);
      pwm_off();
      delay_us(560);
    }
  }
  // Send end bit
  pwm_on();
  delay_us(560);
  pwm_off();
  delay_us(560);
}
void main() {
  setup_oscillator(OSC_8MHZ | OSC_PLL_ON);            // Set internal oscillator to 32MHz (8MHz and PLL)           // BU KISMI SİLDİM
  output_a(0);
  set_tris_a(0x3B);                                   // Configure RA2 pin as output and others as inputs
  port_a_pullups(0x3B);                               // Enable internal pull-ups for pins RA0,RA1,RA3,RA4 & RA5            // BU KISMI SİLDİM PLL YOK ÇÜNKÜ
  while(TRUE){
    while(!input(PIN_A0)){
      send_signal(0x40BF00FF);
      delay_ms(500);
    }
    while(!input(PIN_A1)){
      send_signal(0x40BF807F);
      delay_ms(500);
    }
    while(!input(PIN_A3)){
      send_signal(0x40BF40BF);
      delay_ms(500);
    }
    while(!input(PIN_A4)){
      send_signal(0x40BF20DF);
      delay_ms(500);
    }
    while(!input(PIN_A5)){
      send_signal(0x40BFA05F);
      delay_ms(500);
    }
  }
}


Alıcı Kodu:

Alıntı Yap// Extended NEC protocol IR remote control decoder using PIC12F1822 CCS C code
 
#include <12F1822.h>                                         // 16F877A olarak düzenledim
#fuses NOMCLR INTRC_IO PLL_SW                     // PLL_SW ve INTRC_IO kısımlarını sildim
#use delay(clock=32000000)                               // 20Mhz olarak düzenledim
#use fast_io(A)
#define IR_Sensor PIN_A3                                   
 
unsigned int32 ir_code;
short nec_remote_read(){
  unsigned int16 count = 0;
  unsigned int8 i;
  // Check 9ms pulse (remote control sends logic high)
  SET_TIMER1(0);
  while(!input(IR_Sensor) && (count < 9500))
    count = GET_TIMER1();
  if( (count > 9499) || (count < 8500))
    return FALSE;
  // Check 4.5ms space (remote control sends logic low)
  SET_TIMER1(0);
  count = 0;
  while((input(IR_Sensor)) && (count < 5000))
    count = GET_TIMER1();
  if( (count > 4999) || (count < 4000))
    return FALSE;
  // Read message (32 bits)
  for(i = 0; i < 32; i++){
    SET_TIMER1(0);
    count = 0;
    while(!input(IR_Sensor) && (count < 650))
      count = GET_TIMER1();
    if( (count > 649) || (count < 500))
      return FALSE;
    count = 0;
    SET_TIMER1(0);
    while((input(IR_Sensor)) && (count < 1800))
      count = GET_TIMER1();
    if( (count > 1799) || (count < 400))
      return FALSE;
    if( count > 1000)                                 // If space width > 1ms
      bit_set(ir_code, (31 - i));                     // Write 1 to bit (31 - i)
    else                                              // If space width < 1ms
      bit_clear(ir_code, (31 - i));                   // Write 0 to bit (31 - i)
  }
  return TRUE;
}
void main() {
  setup_oscillator(OSC_8MHZ | OSC_PLL_ON);            // Set internal oscillator to 32MHz (8MHz and PLL)                         // BU KISMI SİLDİM
  output_a(0);
  set_tris_a( 8 );
  SETUP_TIMER_1(T1_INTERNAL | T1_DIV_BY_8);
  while(TRUE){
    while(input(IR_Sensor));                          // Wait until IR_Sensor pin falls
    if(nec_remote_read()){
      if(ir_code == 0x40BF00FF)
        output_toggle(PIN_A0);
      if(ir_code == 0x40BF807F)
        output_toggle(PIN_A1);
      if(ir_code == 0x40BF40BF)
        output_toggle(PIN_A2);
      if(ir_code == 0x40BF20DF)
        output_toggle(PIN_A4);
      if(ir_code == 0x40BFA05F)
        output_toggle(PIN_A5);
      }
  }
}


Dediğiniz gibi oluşturulmuş bir protokolü deneyeyim dedim. Tsop kullandım ve gönderdiğim veriyi tsoptan aynen okuyorum. Bu veriye göre işlem yaptırıp etraftaki diğer sinyallerle kafasının karışmasını engelleyeceğim fakat bir sorunu aşamadım.

Kullandığım pic 16f877a ve 20mhz osilatör bağlı durumda. Programda osilatör ve pic ayarlarımı yaptım fakat alıcı tarafında tsop veriyi almasına rağmen pic işlem yapmıyor. Counter değerlerinden kaynaklandığını düşünüyorum. Uygulama 32Mhz için yapılmış. Bunu 20Mhz'e uyarlayıp test etmem için counter değerlerindeki hesapları nasıl yaparım?








Yukarıdaki hesaplamaya göre örnek uygulama alıcısındaki counter değerlerine baktığımda tutarsızlık oluyor. 9ms pulse'i kontrol etmek için count<9500 demiş mesela. Sanırım 9.5ms değer atıyor burada. Ama neye göre hesaplanmış? 20Mhz'e çevirdiğimde alıcı programı çalışmıyor.


Örnek uygulama sitesi: https://simple-circuit.com/ir-remote-control-transmitter-receiver-ccs-c/

Mayhoş

Araştırmalarım sonucu count ayarları olduğu gibi kalacak sanki. T1_INTERNAL|T1_DIV_BY_8 ile 65,5 ms'de 1 taşma alıyormuşum zaten. 65535/65,5 yapınca 1us çıkıyor. Count için 9500 yazdığımda 9,5ms alıyor olmam gerekiyor. Başka bir hata var sanıyorum. Ledleri ve tsop'u B portuna taşıdım yine sonuç alamadım. Tsop frekansı alıyor ama pic işlem yapamıyor. Sizce sorun nedir?

Powered by EzPortal