PIC'e ritim (ritm) öğretme. tıklayarak kapı açmak.

Başlatan phuggy, 24 Ocak 2014, 23:10:11

phuggy

selamlar arkadaşlar. bir proje peşinde koşuyorum fakat pic konusunda çok yetersizim. projem şu.
pic'e bir ritim öğreteceğiz. (giriş ses ya da butonla olabilir.) daha sonra pic bu ritmi duyduğunda çıkış verecek.
(led ya da step motor sürebilir). projenin arduino ile yapılmış bir şekli var fakat  ben pic'le sıfırdan yapmak durumundayım.
özgün bir proje değil. "secret knock detecting door" olarak ararsanız karşınız çıkıyor zaten.

şöyle de bir videosu var.

Secret Knock Detecting Lock

kafamda onlarca soru var fakat hiç cevap bulamadım.
eğer yardımcı olabilecek arkadaşlarım varsa şimdiden teşekkür ederim.

Mr.Java

Arduinodan hiç anlamam fakat sanırım şahsi fikrim;

Çok basit sistem.Piezo sensörlerden alıp bundaki okuduğu analog verileri digital verilere dönüştürüyor ve belirlediği gizli kod veya yeni kullanıcı kodu ile kıyaslıyor.Buna göre led,motor v.s. kontrölü sağlıyor.Sistemin mekanik aksamı zorlar sizi diye düşünüyorum.Tam çözemedim çünkü mekanik aksamı pvc borularla yapmış sanırım.

phuggy

aslında mekanik yapı hiç önemli değil. asıl amaç sesi algılamak. ritmi yakalayıp bundan çıkış almak. adc mantıklı bunun için sanırım 877 kullanabilirim.
ama ritmi nasıl öğretirim nasıl karşılaştırma yaparım bunu bilemiyorum.

ipek


metaltrrocker

Fkarizmatik'in dediği gibi piezo(titreşimleri daha iyi alması açısından)  kullanıp, belirli bir eşik değeri aştığında pic'in ilgili pinine logic-1 gönderirsen halledebilirsin gibime geliyor.Sonraki kısım programlama,şifreleme(3 tık,5 tık vs) ve okuma kısmı.
Benim aklıma bu geldi.Daha pratik ve kullanışlı bir çözüm vardır elbet.

Analyzer

Selam,

Adım adım gitmekte fayda var. Öncelikle vuruşları temiz ve düzgün şekilde algılatmak lazım. Bunun için titreşimleri
kullanmış ve piezo tercih etmiş. Siz de piezo ile vuruşları alabilirsiniz. Örneğin her bir vuruşta bir ledi yakıp söndürmeyi
deneyin. Ardından her bir vuruş için maksimum aralık belirleyin. Videodan gördüğüm kadarıyla 2 saniye civarı maks aralık
bırakmış. Anlamı, 2 saniye boyunca vuruş olmaz ise giriş işlemi bitmiş gibi algılıyor. Ardından her bir vuruş aralığını bir
dizine alın program içinde. Örneğin vuruş paterni şöyle olsun:
tık-1 sn-tık-0.5 sn-tık-0.5 sn-tık-0.5 sn-tık-1 sn-tık
Burada gördüğünüz üzere 0.5 sn ler "kısa", 1 sn ler "uzun" olacaktır. Tabi ritim duygusu zayıf insanlar için vuruş aralığını
kısa veya uzun diye değerlendirirken bir aralık içerisinde değerlendirmeniz doğru olur. Onun için de ortalama alıp aralık
oluşturabilirsiniz. Son olarak kaydettiğiniz patern ile uyuşuyor mu ona bakmak gerekir. Eğlenceli ve öğretici bir proje aslında..
Sevdim konuyu.

Analyzer
Üşeniyorum, öyleyse yarın!


bozve

arkadaş bence tık tık ların arasındaki bekleme sürelerinden faydalanmış
yani sen belirlediğin tık tık ların arasındaki süreleri belirle
daha sonra css c ile if koşulu içerisine if koşulu yerleştir
ikinci if koşulunu yakalayabilmek için aradaki bekleme süresi kadar beklet süre aşılırsa döngüden çık

LukeSkywalker

#8
Fakat dikkat edilirse ilk ritimde yavaş yapsa da hizli yapsa da aciliyor kapi.

mesaj birleştirme:: 25 Ocak 2014, 09:28:57

Bence burada sureden ziyade adcden gelen degerlerin oranlari onemli.

mesaj birleştirme:: 25 Ocak 2014, 09:40:11

http://learn.adafruit.com/secret-knock-activated-drawer-lock/code
Kodlar burada;

Maxim

evet vurma paterni var
knock pattern

kapıyı hızlıda-yavaşta (aynı şekilde) çal açılıyor
zaten kodun içinde şöyle yazmış
if you do the same pattern slow or fast it should still open the door.

bir satıdaki kod şöyle mesela
timeDiff = abs(knockReadings - secretCode);

mutlaka yapılır pic le
çok karışık birşey gibi durmuyor

Mr.Java

Alıntı yapılan: phuggy - 25 Ocak 2014, 00:32:37
aslında mekanik yapı hiç önemli değil. asıl amaç sesi algılamak. ritmi yakalayıp bundan çıkış almak. adc mantıklı bunun için sanırım 877 kullanabilirim.
ama ritmi nasıl öğretirim nasıl karşılaştırma yaparım bunu bilemiyorum.

PIC 16F628A ile bile yapabilirsiniz.Siz sensör alıp deneyin kodları ekleyin yardımcı oluruz

phuggy

arkadaşlar öncelikle hepinize yardımlarınızdan dolayı teşekkür ederim. konuyla ilgili olarak önce isterseniz yazılanlarla kafamdakleri birleştirerek bir özet çıkarayım. bunun üzerine yoğunlaşalım.

*önce iki vuruş arasındaki süreyi ölçmek önemli. ben düşen kenar tetiklemeli bir sayaç ile süreyi okumanın mantıklı olduğunu düşünüyorum. çünkü bizim için gerekli olan iki tık arasındaki süre. alçalan kenar ile başlayıp yeni vuruşta yükselen kenar ile bitecek.

*sonra bu süreleri sırasıyla bir hafızaya yazmak gerektiğini düşünüyorum. sanırım eeproma.
---bu noktada şunu söyleme gerek, bende oranların önemli olduğunu düşünüyorum fakat eeproma süre mi yazarız yoksa oran mı burda kafam karışık.---

*daha sonra vuruşlarımızı okuyup bunu kaydettiğimiz sürelerle ya da oranlarla karşılaştırabilmeliyiz.

fakat pattern kavramını anlayamadım bu konuda bi bilgim yok. daha doğrusu ilk defa duydum  :)

Maxim

aradaki süreler ölçülecek ama sadece o süreye göre hareket edilirse olmazki
bu sefer kapıyı hızlı hızlı çalarsan kilit açılmaz

muhittin_kaplan


ahmetbudak