avatar_elektro77

Pic ile Metal Dedektörleri

Başlatan elektro77, 21 Eylül 2019, 09:40:49

elektro77

İnternette yüzlerce var ama Özellikle kullanışlılığı ve stabilitesinin tecrübe edilmiş olması benim için çok önemli.
Çok az devre elemanı ile yapılmış ama kullanışlı bir metal dedektörü devre şemasına ihtiyacım var.
yerleşim alanım 4cmx4cm gibi küçük bir alan. metal algılama mesafesi 1 tl de 7 cm kadar olmalı. bobin çapının 10 cm olması benim için ideal olur.
Yardımcı olacak arkadaşlara şimdiden teşekkür ederim.
Özellikle pro-TR yardımcı olursan 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"

elektro77

#1
Ekteki dosyalarda ve aşağıdaki yazılımda adc voltajı 1 voltu aşmaya başladığında buzzerinde aynı simetride bib bip ses vermesini sağlamaya çalıştım ama algoritma mantığını çözemedim.
devre 12f675 ile yapılmıştır ve devre simülasyonundaki displayler sadece voltajı veya hamdeğeri okumak açısındandır. gerçek devrede olmayacaktır.
Devredeki amacım metal dedektörü osilatörü yapıp çıkışı adc ile okuyup voltaj yoğunluğuna görede bip sesini almaktır.Voltaj yükseldikçe bip sesinin hızıda artacaktır. Buzzer aktif buzzerdir.
Algoritma mantığını çözmemde yardımcı olurmusunuz.
 
@ DEVICE pic12F675                                                     
@ DEVICE pic12F675, WDT_OFF             
@ DEVICE pic12F675, PWRT_ON             
@ DEVICE pic12F675, PROTECT_OFF         
@ DEVICE pic12F675, MCLR_OFF            
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  
'------------------------------------------------------------------
DEFINE OSCCAL_1K 1  
'----------------------------------
DEFINE ADC_BITS 10 
DEFINE ADC_CLOCK 2
DEFINE ADC_SAMPLEUS 50 
'----------------------------------
GPIO=0
TRISIO=%00000001
CMCON = 7
ADCON0=%10000000
ANSEL=1
'----------------------------------
symbol DTA=GPIO.4
SYMBOL CLK=GPIO.5
SYMBOL ENB=GPIO.2
'----------------------------------
HAM VAR WORD
VOLT VAR WORD
MVOLT VAR BYTE
D0  VAR BYTE
D1  VAR BYTE
D2  VAR BYTE
D3  VAR BYTE
AL  VAR BYTE
VER VAR BYTE
I VAR BYTE
BUZZER VAR GPIO.1
BUZZER=0

PAUSE 250
'-------------------------------------------------------------------------------
BASLA:

     ADCIN 0,HAM
     HAM=HAM+1
     VOLT=(HAM */125)'/100
     Mvolt=volt//10

         IF HAM<65535 THEN
             D0=VOLT DIG 0
             D1=VOLT DIG 1
             D2=VOLT DIG 2
             D3=MVOLT DIG 3
          ELSE
            D0=12
            D1=12
            D2=12
            D3=12
          ENDIF     
    VER=D0
    GoSub YAZ
    VER=D1
    GoSub YAZ    
    VER=D2
    GoSub YAZ
    VER=D3
    GoSub YAZ
    ENB=1:PAUSEUS 10:ENB=0
    PAUSE 100
    
GOTO BASLA
'-------------------------------------------------------------------------------
YAZ:
LookUp VER,[63,6,91,79,102,109,125,7,127,111,99,88,64],AL
'          [0 ,1,2 ,3 , 4 , 5 , 6 ,7, 8 , 9 ,o ,c ,- ]
SHIFTOUT DTA,CLK,1,[AL]
Return

SESVER:
FOR I=0 TO 10
BUZZER=1
PAUSE 10
BUZZER=0
NEXT 
RETURN                                                    

END
"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"

dnaci

#2
Bence bir değişken tanımla. Sonra bu değişkeni bir for next döngüsünde kullanarak bir pic pini çıkışını 1-0 yap. Sure X  5 kadar gecikme sağlarsın. Zaten aktif buzer kullanmışsın. Şöyle bir örnek düşün:

i VAR BYTE
sure VAR BYTE

GPIO.1=1 'BUZER BİR

For i = 1 To sure 
        Pause 5      
Next

GPIO.1=0 'BUZER SIFIR

Buzer sesi hızlandırma, yavaşlatmayı, okunan adc değerine göre belirleme için if komutu kullanabilirsin. Örneğin:

if adc > 200 and adc < 220 then sure= 20

if adc > 221 and adc < 240 then sure= 15

if adc > 241 and adc < 260 then sure= 10

..........

Sure değişkeni azaldıkça ses aralığı azalacaktır. Değerleri rastgele yazdım.

1 volt altındaki değerde GPIO.1=0 ve üst limitin varsa, üst limite ulaşıldığında GPIO.1=0 yapmalısın.

Kodu denemedim, benim isis versiyonu eski olduğu için simule edemedim. Doğru çalışma ve hassasiyet için süreleri ve adc değerlerini ayarlaman gerekecektir. 10 bit okuma yaptığın için değerler 0 ile 1023 arası olacaktır. Uygun voltaj için hesaplamak gerekir. 1 volt için yaklaşık 200 değeri olabilir.

onurinci

metal dedektörü değilde ,sıva altından giden elektrik kablosu nerede diye çalışmam olmuştu,Freqout komutu için bir şeyler karalamıştım acemice...
@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT
DEFINE OSC 4
DEFINE OSCCAL_1K 1


Define ADC_BITS  8 	    ' Set number of bits in result
Define ADC_CLOCK 3 	    ' Set clock source (3=rc)
Define ADC_SAMPLEUS 50 	' Set sampling time in uS

TRISIO= %000001 : GPIO= 0
CMCON= 7 : ANSEL= %00000001   ' Set AN0 analog


                           
adval VAR BYTE 		          ' Create adval to store result

      PAUSE 500 		      ' Wait .5 second 500
Start: 
      
      ADCIN 0, adval          ' Read channel 0 to adval
      PAUSE (255-adval)*10    ' Wait .1 second
'PAUSE adval*10               ' Wait .1 second
      FREQOUT GPIO.1,150,650  ' 500, 650
      
      GOTO Start  	          ' Do it forever
END

Hattuşa

bence daha profosyenel bip bipler için 8 bitlik timer0 kesmesi aktif edilerek uygun olur, bu sayede bip bipler sonsuz döngüye alınmış olup ana programdaki diğer işlemler bip bipin tonunu ve duraklamasını engeller.
 

ete

Soru genel anlamda sorulunca mevcut bir programın parçası olacağını düşündüğüm bu bip sesi işlemini programı düşünmeden cevaplamak gerekiyor. Zira soru sorulurken bir programda kullanacağım ve programda Tmr0 - Tmr1 kullanıyorum (veya kullanmıyorum) şeklinde açıklama da vermek gerekirdi.
Her neyse ana programı etkilemeden otomatik bir pib sesi elde etmenin yolu Timer kesmesi kullanmaktan geçer. Öncelikle basit bir program yazıp hangi kısa aralığın min süre yada en hızlı bip sesi olacağını bulmak benzer şekilde bir de en uzun süreyi bulmak ve böylece adc ölçümünü bu iki aralıkta yapmak gerekir.
Önce ADC ölçümünden başlayalım. Diyelimki min süremiz (hızlı bip) 30 ms ve maksimum süremiz ise 150 ms (yavaş bip) olsun. O halde ADC den elde edeceğimiz değer 0-1023 aralığı bize 30-250 aralığını hesaplayıp vermeli.
Maksimum değerimiz 150 olduğundan bundan min değeri çıkartırız. 150-30=120 ms. demekki 0-1023 adc aralığı bize 0-120 ms yi hesaplayıp vermeli. Bu 1023 karşılığında 120 hesaplamamız anlamına gelir.
(120/1023)*256=30,029 elde edilir bu değeri 3003 alıp hesap sonucunu 100 e böleceğiz.
Hemen test edelim. (1023* 3003)/100=120 değerini verecektir.
O halde formülümüz, SURE=((HamADC*/3003)/100)+30 şeklinde olacaktır.
Böylece sistem 30 ile 150 arasında bir değer hesaplayacaktır.

Bu hesabı aslında kullanmak yanlış olur. Çünki, bize lazım olan süre değil onun TMR1 sayacına verilecek karşılığı dır. Mantığı kurabilesiniz diye önce bu hesabı gösterdim.
Şimdi TMR1 kullanarak bu süre ayarını nasıl yaparız bakalım.
Öncelikle Multicalc programını kullanarak 30 ms lik süre için TMR1 bölme oranı ve önyükleme değerine bakalım.TMR1 maksimum bölme oranı 1/8olduğundan bu bölme oranı ile bakacak olursak, Önyükleme değerimiz 30 ms için 61786 bulunur.
150 ms için ise 46786 bulunur. Benzer mantık yürütelim. 61786-46786=15000 olacak.
Bu durumda ADC miz bize 0-15000 aralığında bir değer vermesi gerekir.
Bunuda şöyle hesaplarız. (15.000/1023)*256=3754 değeri bulunmuş olur.
O halde formül, Sure=(HamADC*/3754)+46786  şeklinde olacaktır.
TMR1 sayacı aktif edilip Kesmeye bağlanır ve kesme içinde TMR1 sayacına önyükleme değeri verilerek çıkılırken,
TMR1L=SURE.Byte0
TMR1H=SURE.Byte1
şeklinde değer verilerek çıkılır. Her kesme oluştuğunda Beep çıkışı toggle edilir. Böylece adc değerine bağlı olarak 30ms ile 150 ms aralığında bir beep sesi otomatik olarak elde edilmiş olur.

Ete


elektro77

#6
Alıntı yapılan: ete - 22 Eylül 2019, 12:53:59Soru genel anlamda sorulunca mevcut bir programın parçası olacağını düşündüğüm bu bip sesi işlemini programı düşünmeden cevaplamak gerekiyor. Zira soru sorulurken bir programda kullanacağım ve programda Tmr0 - Tmr1 kullanıyorum (veya kullanmıyorum) şeklinde açıklama da vermek gerekirdi.


Ete


Aslında yukarıda anlattığınız sekilde sormayi cok isterdim. Fakat sadece tek bir picle metal dedektörü tasarlamak acısından cok yetersizim. Bu nedenle önce metale yakınlığına göre  yaklasik max 300mv volt tepki veren bir 555 ve  opamp devresi yaptım ve ardından bip sesi alcağım birşeyler tasarladım ama çok saçma sapan sesler cıktı ortaya. Sonra bunu picin adc girişini kullanip yapabileceğimi düşündüm.
Aşağıdaki linkte sadece 8 pin bir pic kullanarak bunu tam ihtiyacım olan gibi yapmış bir arkadaş ve sitesi var. Kendisine entegre talebi ile ilgili formu doldurup gönderdim ama cevap gelmedi.
 Hatta ilk mesajımda böyle bir devre cıkar belki diye düşündüm ama cıkmadı. Yine balık tutmayı öğreneceğim galiba.

http://megadevre.com/pic-v1-devre-semasi.php
"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"

Hattuşa

ya kusura bakma inan yetişemiyorum senin aradığın pinpointer devresi ekte ekledim açık şema pcb ve hex mevcut incele işine gelirse yaparsın, mantık şudur;
elinde LCR metre varsa bir bobin ölçümü sırasında o bobine demir vb metal yaklaştırırsan frekans artar, altın,bakır gibi metaller yaklaştırırsan frekans düşer ve sen bunu lcr metreden görebilirsin. bu devrede aynı mantıkta yani BFO,2 tr ile salınabilen bir frekans oluşturulmuş bobinde bobine metal yaklaştığında da 12f675 ile frekans okunmakta frekans değişimini de değerlendirmekte...

elektro77

Alıntı yapılan: pro-TR - 22 Eylül 2019, 14:28:54ya kusura bakma inan yetişemiyorum senin aradığın pinpointer devresi ekte ekledim açık şema pcb ve hex mevcut incele işine gelirse yaparsın, mantık şudur;
elinde LCR metre varsa bir bobin ölçümü sırasında o bobine demir vb metal yaklaştırırsan frekans artar, altın,bakır gibi metaller yaklaştırırsan frekans düşer ve sen bunu lcr metreden görebilirsin. bu devrede aynı mantıkta yani BFO,2 tr ile salınabilen bir frekans oluşturulmuş bobinde bobine metal yaklaştığında da 12f675 ile frekans okunmakta frekans değişimini de değerlendirmekte...
Çok teşekkür ederim. Yarın ilk iş bunu dememek olacak. Allah razı olsun.
"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

#9
Ete Hocam yazdıklarınızı 20-30 keredir okuyorum.tmr1 kesmesi ikidir karşıma çıkıyor.Ben kesme isinde zorlandigimdan ve sizin başınızı ağrıytıp durmaktan kacindigimdan kesmelerden sürekli kaçmaya çalışıyorum. Ama kaçınca olmuyor tabiki. Ana programda sorunlar oluşmaya başlıyor. Yarın bu anlattıklarınızı ve tmr1 kesmesi derslerinizi hatim etmeyi düşünüyorum. Zaman-ı geldide geçiyor bile. Aslında kesme ayarlarıni yapabilsem; ki her picte ayrı ayrı, kalan kodları yerlestirebilecegimi sanıyorum.
Mesela 12f675 'te tmr1 nasıl açılır ,nerede acilir bölme oranı nedir,ne olmalıdır, yükleme değeri nedir nerelere yerleştirilir vs.vs.
"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"

Hattuşa

Alıntı yapılan: elektro77 - 22 Eylül 2019, 15:35:21Çok teşekkür ederim. Yarın ilk iş bunu dememek olacak. Allah razı olsun.

videoda izlediğin dedektörün aşağı yukarı aynısı, youtube de bolca videosu vardı

elektro77

#11
verdiğiniz devre şeması. çalışıyor ama. ilk metalden sonra sürekli ötmeye devam ediyor.
belki dedim yeni çizdiğim pcb dendir. sonra gönderdiğiniz dosyadaki orjinal pcb yi yaptım onda da aynı şey oldu. Bobini ve frekansı %95 tutturuyorum ama malesef çok karasız çalışıyor. tamam ayrım yapıyor ama gerçekten çok sinir edici bir kararsızlığı var. Yapacak arkadaşlar boşa uğraşmasın.
"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

#12
bu devrede benim anlamadığım bobin bir nüveye sarılacakmı sarılmayacak mı? bobin işaretinin yanında birde paralel çizgi var bu nüve anlamınamı geliyor. birde bobin kesik kesik çizgi içine alınmış bu ne anlama geliyor.


aşağıdaki simgelere göre hiçbiri değil.



"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"

er-da

şemada ferrit çubuğa sarılacak dışarıdaki çizgi de ekranlanıp şaselenecek diyor.
dairesel bobin  kullanacak isen sarım şekli linkte

Hattuşa

Alıntı yapılan: elektro77 - 25 Eylül 2019, 11:45:57verdiğiniz devre şeması. çalışıyor ama. ilk metalden sonra sürekli ötmeye devam ediyor.
belki dedim yeni çizdiğim pcb dendir. sonra gönderdiğiniz dosyadaki orjinal pcb yi yaptım onda da aynı şey oldu. Bobini ve frekansı %95 tutturuyorum ama malesef çok karasız çalışıyor. tamam ayrım yapıyor ama gerçekten çok sinir edici bir kararsızlığı var. Yapacak arkadaşlar boşa uğraşmasın.

metal dedektörlerinin dış dünya ile bağlantısı bobinleridir,bobinlerinde rezonansları çok önemlidir, sinüs sinyalinde L ve C ile oluşturulduğunda endüktans ve condansator değerleri kritiktir. devrenin mesafesini ve ayrım kalitesini rezonans çok etkiler. BFO dedektörlerde kısıtlar fazla olduğundan pinpointer dışında pek kullanılmazlar

Powered by EzPortal