HC SR-04 u.sonic sensörlü engel algılama devresi

Başlatan overlok, 28 Aralık 2014, 00:37:26

overlok

Selamlar arkadaşlar;

Bir süredir kullanımı öğrenmeye ve basic de örnek kodlarını bulmaya çalıştığım devreyi yapmayı başardım. Sizinle paylaşmak istedim. Bi sitede kodları buldum ve kendim butonları ekleyerek algılama mesafesi butonlarla arttırıp azaltılan sensör devresi yaptım. Tabi ustalarımdan kontrol etmelerini yanlışları düzeltmesini ve/veya önerilerini bekliyorum.

Devre benim istediğim şekilde çalışıyor. ilgilenenlere kolay gelsin.

Saygılarımla



@ DEVICE INTRC_OSC_NOCLKOUT , LVP_OFF, MCLR_OFF, WDT_OFF
PORTA=0
TRISA=%00000010
PORTB=0
TRISB=%00000000
CMCON=7
OPTION_REG.7=0

DEFINE OSC 4
w var word
r var word
a var word
m var byte
tr var porta.0
ec var porta.1
m=60
w=0
low tr
tus var portb.4
tus1 var portb.5
basla:
high tr
pauseus 10
low tr
pulsin ec,1,w
r=((w*10)/58)
if r<m then
portb=%00000010
else
portb=0
endif
if tus=0 then
m=m+5
if m>=65 then
m=60
pause 50
endif
endif

if  tus1=0 then
m=m-5
if m<=0 then
m=0
pause 50
endif
endif
pause 200
goto basla
end



:100000008C28B400841780048413A201201CA20051
:10001000102003198728102003198728102087280B
:100020003408A2060130A000A10100083405220610
:10003000031D0800A00A0319A10F15280800A30139
:10004000A200FF30A207031CA307031C872803306C
:10005000A100DF302D202128A101E83EA000A10948
:10006000FC30031C3628A00703183328A0076400BF
:10007000A10F332820183C28A01C4028000040284D
:100080000800A301A20003304528A800230821028C
:10009000031D4C28220820020430031801300319E4
:1000A00002302805031DFF308728A501A401103068
:1000B000A600210DA40DA50D2208A4022308031CEF
:1000C000230FA50203186B282208A407230803188E
:1000D000230FA5070310A00DA10DA60B592820087A
:1000E00087281030A800A101A001A70CA60C031CB2
:1000F0007F282208A00723080318230FA107A10CBB
:10010000A00CA50CA40CA80B752824088728831321
:1001100003138312640008008501831602308500F2
:100120008312860183168601831207309F0083168F
:10013000811383123C30C000BE01BF01051083163D
:10014000051083120514831605100A3083122C2023
:1001500005108316051083120130A00005308400BD
:10016000023001202008BE002108BF003E08A60082
:100170003F08A7000A30A200A3017120BC00250897
:10018000BD003C08A0003D08A1003A30A200A30138
:100190005520BA002108BB003A08A0003B08A10086
:1001A00040084120031DD72802308600D828860148
:1001B0006400061AE6280530C0076400413040029A
:1001C000031CE6283C30C00032301F206400861A31
:1001D000F3280530C0026400013040020318F32800
:1001E000C00132301F20C8301F20A2286300F6282B
:02400E00583F19
:00000001FF




Hanımların dikkatine, overlok makinesi ayağınıza geldi!

overlok

Selamlar arkadaşlar;

Yukarıdaki devrede değişiklik yapmak istiyorum. tuşları kaldırıp algılanan mesafeye göre b portuna bağlı ledleri yakmaya çalışıyorum. Birkaç deneme yaptım ama sonuç alamadım.
Örneğin
@ DEVICE INTRC_OSC_NOCLKOUT , LVP_OFF, MCLR_OFF, WDT_OFF
PORTA=0
TRISA=%00000010
PORTB=0
TRISB=%00000000
CMCON=7
OPTION_REG.7=0

DEFINE OSC 4
w var word
r var word
a var word
m var byte
tr var porta.0
ec var porta.1
w=0
low tr

basla:
high tr
pauseus 10
low tr
pulsin ec,1,w
r=((w*10)/58)
if r<30 then
portb=%00000010
endif
if r<20 then
portb=%00000100
endif
if r<10 then
portb=%00001000
endif
pause 200
goto basla
end



bu şekilde sonuç alamadım.
Gosub komutuyla da denedim, malesef sonuç hüsran.
if r<30 then
gosub bir
return
.
.
.
.
.
bir:
portb=%00000010


Sizden ricam mantığı konusunda yardımcı olmanız. Yanlışım nerede.

Saygılarımla
Hanımların dikkatine, overlok makinesi ayağınıza geldi!

ete

Yanlışın mesafeler için aralık vermemiş olmanda.
Mesafe 30 dan küçük ise bir ledi yak demişsin. Hemen ardından mesafe 20 den küçük ise başka bir ledi yak demişsin.
Daha sonra Mesafe 10 dan küçük ise bir ledi yak demişsin. Şimdi diyelimki mesafe=8 birinci if satırına bakalım;
IF mesafe 30 dan küçük ise ledi yak yada 8<30 dan ise ledi yak denilince 8 , 30 dan küçük olduğu için led yanacak.
8 rakamı 20 den de küçük olduğu için diğer led de yanacak, en sonda 10 dan da küçük olduğu için son led de yanacaktır.
Halbuki bu sistemde yalnızca 10 dan küçük ledinin yanması gerekirdi.
O halde en başa,
if r<10 then
portb=%00001000
endif
komut satırlarını yazman gerekir.
Sonra
IF Mesafe>10 and Mesafe<20 then 
portb=%00000100
Endif
şeklinde satır yazman gerekiyor. Böylece mesafe 10 ile 20 arasında ise ikinci led yanacaktır.

Son led için,
IF Mesafe>20 and Mesafe<30 then 
portb=%00000010
Endif

Şeklinde komut yazman yeterlidir.

Ete

Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

overlok

Çok teşekkürler hocam, akşam deneyecem hemen.

Saygılarımla.
Hanımların dikkatine, overlok makinesi ayağınıza geldi!

pax

 bu konu hakkında iki şeyi merak ediyorum.

1-bu sensor ile mesafe net ölçümü yapılabiliyor mu? örneğin cisim 17cm mesafede gibi
2- IR sensorlerden avantajı nedir. veya IR sensorler mi daha avantajlıdır.

certy

Alıntı yapılan: pax - 29 Aralık 2014, 18:25:51
bu konu hakkında iki şeyi merak ediyorum.

1-bu sensor ile mesafe net ölçümü yapılabiliyor mu? örneğin cisim 17cm mesafede gibi
2- IR sensorlerden avantajı nedir. veya IR sensorler mi daha avantajlıdır.

Ses dalgasının gönderilip geri gelme süresini hesaplayarak mesafe ölçümü yapılabilir. (Ses hızını hesaba katarak)
TA1USS