PIR HAREKET SENSÖRÜ KONTROLÜ NASIL YAPABİLİRİM?

Başlatan tayfun, 06 Ekim 2011, 11:54:32

tayfun

Çok teşekkürler hocam ilgileriniz için.Ben denemelerimi yaparım.İsterseniz sensör yollayabilirim sizede.

Tayfun
İnancın büyük olsun; ama inancınla büyüklük taslama!

hasanb

HOCAM ben bu sensörü gördün elimdede bol miktarda var 10 bin gibi calıştığım yerde kullanılıyor bıss0001 diye bir entegre ile bu pır sönsörünü süre biliyor.
data sehhetine bakarsanız.daha detaylı bi bilgi edinirsiniz vede pır sensörünün adı da ' D203B-e ' du galiba tam bilmiyorumda datasheet bende mevcut ekleyim
bende bu sensörü 12f675 ile sürmek istiyorum ama birtürlü calışma sistemini anlamamıştım.

ete

Hasan,
Senin sensörün analog çalışıyor. Bu nedenle çalışması için peşine data sheet de belirtilen LM324 lü devreyi yapmak gerek. Başka türlü sensör çalışmaz. Sonra şemada sonlara doğru görülen 2 adet 1N4148 diyotun birleştiği noktayı gerilm bölücü ile ayarlayarak pic Analog girişine yada digital girişi vermek gerekir. Analog girişten muhtemelen yaklaşan cisme ait yaklaşık mesafe bilgiside alabilirsin. Digital girişte ise var yok sinyali alabilirsin.

Ete

kuylus

Hocam merhaba

Maşallah  nette  hangi konuyu arasam sizin sitenize denk geliyorum  yardımlarınızın karşılıgını nasıl öderiz bilemiyorum

Pır sensörü direk olarak picle okumak için bayagı araştırdım hatta  tayfun arkadaşın elinde bulunan  pic+pır+ldr li  devreden benimde lime  geçti devre hem basit hemde   ufak  fakat  devrenin  benzerini nette hiç göremedim  tabi kod oalyınada raslamadım

biraz araştırınca  pır sensörlerin çok çeşitli oldugunu ögrendim  tür olarak 20 den fazla pır var, genelde ucuz olarak satılanlar  analog çıkışlı yani  çıkışları opmamla güçlendirilmesi gerekiyor.  Picle direk okunanlar ise  direk olarak diğital çıkış veriyor böylece  opmapa gerek kalmıyor  fakat  djital çıkışlı olanlar  da biraz pahallı  biri 0.5 sent  diyeri 1-2 dolar arasında

son olarak bu konuda bir sonuca varılabildimi bend e böyle bir devre yapmayı düşünüyorum  hazır devreler 15 tl  civarında ve bana çok pahallı geliyor

saygılarımla

kamil kaya

kukurik

Alıntı yapılan: ete - 09 Ekim 2011, 20:38:34
Veridiğin program benim açıklamama uyuyor. Ancak bir iki eksiği var bana kalırsa.
Eksiği Pic sensör pininin Çıkış yapıldığı gibi aynı zamanda giriş yapılması gerektiği göz ardı edilmiş.
Kısaca sensör pini çıkış verecekse çıkış yapılmaıl bilgi alacaksa giriş yapılmalıdır. Bu programda yalnızca birisi yapılmış.
Doğrusu aşağıdaki gibi olmalı,
ANSEL = 0                           'No AD on 12F675
CMCON = %00010111                   'Digital pins - no comparator
WPU = 0                                         'No pullups
TRISIO=0
PIRData VAR WORD                        'değişken tanımlaması eksik idi eklendi

WHILE 1                             'Do forever
    HIGH GPIO.1                     'Set a pin to time the reading
    GOSUB ReadPIR                   'Call the Sub
    LOW GPIO.1                      'Reset a pin to time the reading
    PAUSE 10                        'Just something to sync the scope
WEND
   

ReadPIR:
    INPUT DataPin                   'Let PIR control the Datapin
    PIRdata = 0                     'Use this time to let Datapin settle
    WHILE DataPin = 0 : WEND        'Wait for PIR to indicate "new data"
    PAUSEUS 25                      'Wait for PIR to fiddle with the data
    FOR i = 14 to 0 STEP -1         'Loop to get 15bits
        Output DataPin              'yeni eklendi***************
        LOW DataPin                 'Force Datapin Low
        HIGH Datapin                'Force Datapin High
        INPUT Datapin               'Let PIR control the Datapin
' You may need a short pause here if you have long wires to the PIR   
        PIRdata.0(i) = Datapin      'Sample the datapin
    NEXT
    Output DataPin                 'Yeni eklendi*******************************
    LOW DataPin                     'Force Datapin Low
    INPUT Datapin                   'Let PIR control the Datapin
    RETURN     
END


Bu işlem sonucunda elinde PIRData şeklinde 16 bitlik bir değişkende okunana digital veri olacaktır. Nasılbir değer okunduğunu ancak başka bir işlemciye LCD bağlayarak anlamak gerekir. Ona göre yine bu işlemci ile gerekirse LCD kullanmadan değerlendirme yapılabilir.

Ete
bu programda pic ten çıkış almak için nasıl bir ilave yapılması gerekiyor

muyat

Hocam konuyla ilgili sormak istediklerim var.

Öncelikle WHILE 1 ....wEND  komutu ne işe yarıyor..
Ben şimdiye kadar while komutunu kullanırken whiledan sonra mutlaka picin bir giriş pininin durumunu kontrol ettirek kullandım.
Örnegin whıle tus:0 wend gibi. fakat burda whiledan sonra 1 yazıyor.Anlamı nedir.

Son olarak ben GPIO.5 pinine bir led baglamak istiyorum..Hareket algılandıgı an bu ledi nasıl yakıcam .Aşagıdaki komutta hangi satırlar arasına eklemeliyim..
Hareket algılandıgı an
GPIO:5 pinine baglı led yanacak,
10 saniye bekleyecek ve sönecek tekrar.Bunu hangi satırlar arasına ilave etmem gerekiyor.
Bugun 2 adet pyd1998 siparişi verdim..Bakalım yapabilecek miyim deneyecegım.


@ device  pic12F675, protect_off, mclr_off

define OSC 4
DEFINE OSCCAL_1K 1             'Set OSCCAL for 1K device

DataPin     VAR GPIO.0              'DOCI on the PIR
PIRdata     VAR WORD               
i           VAR BYTE

ANSEL = 0                           'No AD on 12F675
CMCON = %00010111                   'Digital pins - no comparator
WPU = 0                             'No pullups

WHILE 1                             'Do forever
    HIGH GPIO.1                     'Set a pin to time the reading
    GOSUB ReadPIR                   'Call the Sub
    LOW GPIO.1                      'Reset a pin to time the reading
    PAUSE 10                        'Just something to sync the scope
WEND
   

ReadPIR:
    INPUT DataPin                   'Let PIR control the Datapin
    PIRdata = 0                     'Use this time to let Datapin settle
    WHILE DataPin = 0 : WEND        'Wait for PIR to indicate "new data"
    PAUSEUS 25                      'Wait for PIR to fiddle with the data
    FOR i = 14 to 0 STEP -1         'Loop to get 15bits
        LOW DataPin                 'Force Datapin Low
        HIGH Datapin                'Force Datapin High
        INPUT Datapin               'Let PIR control the Datapin
' You may need a short pause here if you have long wires to the PIR   
        PIRdata.0(i) = Datapin      'Sample the datapin
    NEXT
    LOW DataPin                     'Force Datapin Low
    INPUT Datapin                   'Let PIR control the Datapin
    RETURN
   
END

ete

while 1:wend komut satırı programı sonsuz döngüye sokar.
While 1 komutu ile  wend komut satırı arasına kod yerleştirirsen o kodlar pic çalıştıkça işlenir.
Daha açık deyimle şöyle olur
While1
....
....
...
goto while 1

Bir nevi goto kullanmamak için aslında C dilinde kullanılan sistemi buraya uygulamış arkadaş.

Ete

muyat

Peki ReadPır bölümünde
pırı okuduktan sonra değerlendirmesi nasıl yapılacak?
Yani Dijital çıkışı elde ettikten sonra gpıo.5 pinine baglı olan bir ledi nasıl yakıcaz..

ete

Bu programı ben yazmadım. Mantığını anlamakda o kadr kolay değil.
Birlikte sesli düşünelim. İşin çözümü ReadPIR isimli alt programda.

    WHILE DataPin = 0 : WEND        'Wait for PIR to indicate "new data"
    PAUSEUS 25                      'Wait for PIR to fiddle with the data
    FOR i = 14 to 0 STEP -1         'Loop to get 15bits
        LOW DataPin                 'Force Datapin Low
        HIGH Datapin                'Force Datapin High
        INPUT Datapin               'Let PIR control the Datapin
' You may need a short pause here if you have long wires to the PIR   
        PIRdata.0(i) = Datapin      'Sample the datapin
    NEXT

Data pini LOW da iken HIGH oluncaya kadar bekliyor program. Bu noktada Data Pinini LOW yapıyor.
LOW komutu o pini önce Çıkış yapar ardından o çıkışa LOW verdirir. Ardından aynı pini HIGH yapıyor ve hemen ardından Data pinini Girişe çevirip data yı alıp PIRdata değişkeninin bitlerine yazıyor.
0-15 döngüsünde bu işi yaptığına göre sonuçta 15 bitlik bir bilgi elde ediyor.
Elde edilen bilgi Sıfır olabilir . Yani PIRdata=0 ise kimseyi görmedi anlamına gelebilir.
PIRdata belirli bir sayıdan büyük ise gördüğü kişi yakında değilse uzakta gibi sonuçlar çıkarmak mümkün olabilir.
Ama sanki bu program bildiğimiz analog PIR sensörü için yazılmamış daha ziyade digital bir sensör için yazılmış gibi duruyor.
Sonuçta Programda  While1 : wend döngüsü içinde yer alan Gosub ReadPIR komutunun altına,
IF PIRdata>500 (mesela) Then git şu ledi yak gibi komutlar yazılabilir. Kısaca elindeki ip ucu PIRdata değişkeni (word cinsinden) bu değişken değerine bağlı olarak insan gördü yada görmedi şeklinde karar vereceksin.

Ete

Powered by EzPortal