avatar_elektro77

Çekilen Akıma göre Buzzer sesi

Başlatan elektro77, 08 Temmuz 2020, 13:23:56

elektro77

Akım trafosundan veya şönt direncinden aldığım akım bilgisi veya geriliminin referans olarak kullanıldığı bir devre çıkışına aktif buzzer veya pasif buzzer koyup bu bilgiye göre anlık değişebilen sürekli bir biiiiiiip sesi üretmek istiyorum.Kesik kesik bip bip olmamalı. Sürekli olan biiiiiip in tonu değişmeli. İşlemci kullanarak veya kullanmadan bunu nasıl bir tasarım ile yapabilirim. Bunu yapabilecek devre şeması örneği veya teorisini paylaşırsanız sevinirim.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Burak

Bir buzzerda farklı tonlarda sesler elde etmek için , buzzer'ı farklı frekanslarda sürmelisiniz . Örneğin 1-4kHz aralığında bir PWM sinyali ile farklı tonlar elde edilebiliyor , Hatta ST'nin 8 bitlik MCU'larında bu özellik özel bir çıkış pini olarak verilmiş , size sadece bir register'ı update etmek kalıyor .

Burak
Ω Gens Una Sumus Ω

ete

Farklı tonlar elde etmek için bir defa pasif Buzzer yani devresi olmayan direk voltaj verince çalmayan buzzer olmalı.
Bu buzzer ile kullanımda farklı tonlar yaratmak için SOUND komutunu kullanman gerekiyor.
Komut formatı SOUND ÇıkışPortPini,[Nota (50-100 aralığında) , Nota çalma Süresi (1-50ms aralığında] Gerekirse arda arda birden fazla farklı nota da verilebilir. Aralarına virgül koyarak nota adedi artırılabilir ama format aynı Nota ve süre birlikte verilmelidir.
Örnek verelim SOUND PORTC.0,[95,15,70,10] şeklinde PORTC.0 pininden önce 95 notasını 15 ms süre ile çıkartıp ardından hemen 70 notasını 10 ms süre ile buzzere vermektedir.

Uygun bir sistem kurup değişik notaları ve süreleri deneyerek farklı tonlar elde edebilirsin.

Ete

elektro77

Cevaplarınız için çok teşekkür ederim. Fakat bu devreyi yaparken mcu ile değilde sadece basit bir devre olarak yapmak benim için daha avantajlı olacak. Örneğin çekilen akımı gerilime çevirdiğim bir opamp devresinin çıkışına bir 555 entegresi veya başka bir çeşit entegre kullanılarak yapılamaz mı acaba?
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

muyat

Benzer projeyle ben de uğraşıyorum.
Bu şönt direnci olayına kafam basmadıgı gibi şönt direncini de bulamıyorum her yerde.
Yükün baglı oldugu kola tel mel sar falan filan diyen de oldu onu da anlamadım hiç..
En güzel çözüm olarak ise acs712 akım sensörü aldım..Testlerini yaptım.Mükemmel çalışıyor diyebilirim..Ama henüz ana devreye baglamadım...Acs712'nin bol videoları var nette
Çekilen akıma göre voltaj veriyor.Bu voltajı adc olarak pice giriyorsunuz ona göre işlem yaptırıyorsunuz.

elektro77

Alıntı yapılan: muyat - 09 Temmuz 2020, 14:06:20Benzer projeyle ben de uğraşıyorum.
Bu şönt direnci olayına kafam basmadıgı gibi şönt direncini de bulamıyorum her yerde.
Yükün baglı oldugu kola tel mel sar falan filan diyen de oldu onu da anlamadım hiç..
En güzel çözüm olarak ise acs712 akım sensörü aldım..Testlerini yaptım.Mükemmel çalışıyor diyebilirim..Ama henüz ana devreye baglamadım...Acs712'nin bol videoları var nette
Çekilen akıma göre voltaj veriyor.Bu voltajı adc olarak pice giriyorsunuz ona göre işlem yaptırıyorsunuz.

Sayın muyat cevabın için teşekkür ederim. Ancak benim akımı ölçme ile ilgili bir sorunum yok.Çekilen akım seviyesine göre buzzerde farklı sesler oluşturmak asıl amacım.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

İşlemci kullanarak çok basit ve sade bir şekilde yapılabilecek bir işi işlemci kullanmadan yapmak deveye hendek atlatmak kadar zor bana kalırsa.
İşlemci 8 bacaklı ADC si olan bir işlemci ile direk adc den okunan değeri okunan voltaja paralel olarak 0-100 aralığında bir değer verecek şekilde ayarladıktan sonra direk adc den okunan değeri saound komutuna yerleştirdinmi güzel bir şekilde akıma göre frekansı yada tonu değişen buzzer sesi elde etmiş olursun. Kullanacağın malzeme bir işlemci 8 bacak, bir buzzer sürme transistörü ve bir kaç direnç hepsi bu.
İşi işlemci kullanmadan yapmak için VCO (voltaj kontrollü Osilatör) en uygun çözüm gibi gözüküyor. Voltaj kontrolünü Akım devresinden elde edilen voltajla sağlayacaksın gerekirse onu yükselteceksin. Osilatöründe ortalama 500 Hz ile 2Khz aralığında bir frekans üretebilmeli ki üretilen sinyalden doğru dürüst bir sinyal duyabilesin. Bu iş gerçekten çok zor ve bir sürü malzeme gerektirir. Üzerinde düşünmek bile istemiyorum. Karar senin araştır ve bul diyorum.

Ete

elektro77

Alıntı yapılan: ete - 10 Temmuz 2020, 09:48:33İşlemci kullanarak çok basit ve sade bir şekilde yapılabilecek bir işi işlemci kullanmadan yapmak deveye hendek atlatmak kadar zor bana kalırsa.
İşlemci 8 bacaklı ADC si olan bir işlemci ile direk adc den okunan değeri okunan voltaja paralel olarak 0-100 aralığında bir değer verecek şekilde ayarladıktan sonra direk adc den okunan değeri saound komutuna yerleştirdinmi güzel bir şekilde akıma göre frekansı yada tonu değişen buzzer sesi elde etmiş olursun. Kullanacağın malzeme bir işlemci 8 bacak, bir buzzer sürme transistörü ve bir kaç direnç hepsi bu.
İşi işlemci kullanmadan yapmak için VCO (voltaj kontrollü Osilatör) en uygun çözüm gibi gözüküyor. Voltaj kontrolünü Akım devresinden elde edilen voltajla sağlayacaksın gerekirse onu yükselteceksin. Osilatöründe ortalama 500 Hz ile 2Khz aralığında bir frekans üretebilmeli ki üretilen sinyalden doğru dürüst bir sinyal duyabilesin. Bu iş gerçekten çok zor ve bir sürü malzeme gerektirir. Üzerinde düşünmek bile istemiyorum. Karar senin araştır ve bul diyorum.

Ete
Haklısınız hocam. Bir ara 4046 VCO kontrollü osilatör ile yapmak istedim ama dediğiniz gibi çok malzeme gidiyor ve düşünülmesi gerekiyor.
Kararımı 12f675 kullanmak üzerine verdim. Cevabınız için teşekkür ederim. Yazılım kısmında takıldığım bir yer olursa buradan sorarım.
Saygılarımla.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#8
@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON &_MCLRE_OFF & _BODEN_OFF & _CP_ON
DEFINE OSCCAL_1K 1 
DEFINE OSC 4
GPIO=%00000000
TRISIO=%00000001
GPIO=0
'------------------------------
DEFINE ADC_BITS 10 
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50 
'-------------------------------
'OPTION_REG.7=0    ' pullup dirençler aktif  '1 ise devrede değil
CMCON = 7          ' Comparators off
ANSEL=%00100001    'AN0 PİNİ ANALOG GİRİŞ 
ADCON0=%10000000   ' adc çözünürlüğünü 10 bit yaptık
'---------------------------------
HAM VAR WORD
tone var byte
SYMBOL BUZZ=GPIO.1    
'Symbol C2 = 106
'Symbol D2 = 108
'Symbol E2 = 110
'Symbol F2 = 111
'Symbol G2 = 113
'Symbol A2 = 115
'Symbol B2 = 117
'Symbol h2 = 118
CLEAR
pause 200
'******************************************************************************
BASLA:
ADCIN 0,HAM
ham=ham+1
tone=(ham */ 1250)/100   'burada (0-5 volt) tone değeri 100 ile 122 arasında değişmeli
tone=tone*24

Sound BUZZ,[tone,1]

goto basla

Hocam yukarıdaki kodlarda formüllemeyi yapamadım.
0-5 volt aralığında, notanın da 100 ile 122 arasında değişmesini sağlamak için ne yapmalıyım. Kafam durdu yine.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

100 ile 122 arasında 22 fark var demektir. ADC den okunan değer 0-x volt aralığında sana 0-22 değer aralığında bir okuma bilgisi üretmeli. Buna sabit değer olan 100'ü eklediğin zaman istediğini almış olacaksın. Ancak 22 çok küçük bir değer. Birde ADC den hangi aralık okunacak bunuda bilmiyoruz.
Akım karşılığı okunacak voltaj 0-5V aralığında mı olacak kibu çok zor yoksa belirli bir aralıktamı olacak hesaplama bu aralığa göre yapılmalı.
Örnek vereyim.
5V için 1023 okunacak ise 0,1V için ne okunur dersek (1023 x 0,1)/5=20 birim okunacaktır.
Diyelimki senin sistemin 0-2V aralığında akıma göre bir voltaj üretecek. Bu durumda maksimum ADC okuman (2x1023)/5=409 olacaktır. Kısaca sen 0-409 aralığında bir değer okuyacaksın. Bunu şimdi 0-22 aralığına hesapla indirgeyelim. 22/409= 0,0537897310513447   Bu değeri 256  ile çarpalım. 13,77017114914425 değeri bulunur. Bunu sayıyı 100 ile çarparak 1378 olarak kullanalım ve sonucu sonra 100 e bölelim. Bu durumda formülümüz OKUNAN=(HAM */1378)/100 şeklinde olacaktır.
Şİmdi bir deneme yapalım. Diyelimki okunan değer 409 . Bu değer karşılık formülümüz bize 22 sayısını hesaplayıp vermeli.
Okunan=((409 x 1378)/256)/100 (bu işlem Pic in yaptığı işlemin karşılığıdır)
Okunan= 22 olarak bulunacaktır. Tabiiki asıl hedef olan 100-122 aralığını hesaplayabilmek için bu değere 100 eklemek gerekiyor. Bu durumda nihai formül ;
OKUNAN=((HAM*/1378)/100)+100  şeklinde olacaktır.

Ete

elektro77

#10
Alıntı yapılan: ete - 13 Temmuz 2020, 16:53:16100 ile 122 arasında 22 fark var demektir. ADC den okunan değer 0-x volt aralığında sana 0-22 değer aralığında bir okuma bilgisi üretmeli. Buna sabit değer olan 100'ü eklediğin zaman istediğini almış olacaksın. Ancak 22 çok küçük bir değer. Birde ADC den hangi aralık okunacak bunuda bilmiyoruz.
Akım karşılığı okunacak voltaj 0-5V aralığında mı olacak kibu çok zor yoksa belirli bir aralıktamı olacak hesaplama bu aralığa göre yapılmalı.
Örnek vereyim.
5V için 1023 okunacak ise 0,1V için ne okunur dersek (1023 x 0,1)/5=20 birim okunacaktır.
Diyelimki senin sistemin 0-2V aralığında akıma göre bir voltaj üretecek. Bu durumda maksimum ADC okuman (2x1023)/5=409 olacaktır. Kısaca sen 0-409 aralığında bir değer okuyacaksın. Bunu şimdi 0-22 aralığına hesapla indirgeyelim. 22/409= 0,0537897310513447   Bu değeri 256  ile çarpalım. 13,77017114914425 değeri bulunur. Bunu sayıyı 100 ile çarparak 1378 olarak kullanalım ve sonucu sonra 100 e bölelim. Bu durumda formülümüz OKUNAN=(HAM */1378)/100 şeklinde olacaktır.
Şİmdi bir deneme yapalım. Diyelimki okunan değer 409 . Bu değer karşılık formülümüz bize 22 sayısını hesaplayıp vermeli.
Okunan=((409 x 1378)/256)/100 (bu işlem Pic in yaptığı işlemin karşılığıdır)
Okunan= 22 olarak bulunacaktır. Tabiiki asıl hedef olan 100-122 aralığını hesaplayabilmek için bu değere 100 eklemek gerekiyor. Bu durumda nihai formül ;
OKUNAN=((HAM*/1378)/100)+100  şeklinde olacaktır.

Ete
Hocam aklınız ve eliniz dert görmesin. Yine harika bir açıklama. Sizi bu yüzden çok seviyorum.
Ve devre çalıştı...
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Powered by EzPortal