VLF (VERY LONG FREQUENCY)dedektör yazılımı geliştirmek ,hem sinyal işleme hem de donanım kontroluı gerektiren oldukça teknik bir süreçtir.
Bu tür cihazlar gegenellikle 3khz ile 30 khz arasındaki frekanslarda çalışır ve faz kayması (phase shift)prensibiyle metal ayrımı yaparlar.
bir VLF dedektör yazılımının bileşenlerini şu şekilde özetleyebiliriz;
1-Sinyal üretimi(transmitter-tx)
PWM kullanımı,mikro denetleyicinin PWM (darbe genişlik modülasyonu)birimi kullanılarak belirli frekansta bir sinyal üretilir.
Frekans kararlılığı;Yazılım çevresel parazitlerden etkilenmemek içim bu frekansı çok hassas şekilde sabit tutmalıdır.
2-Sinyal okuma ve örnekleme (receiver -RX)
Hızlı örnekleme sinyalin fazını yakalamak için saniyede binlerce örnek alınması gerekir.
senkron demodulasyon ;gelen sinyal gönderilen sinyal ile karşılaşrılır bu aşama metalin cincini belirleyen faz kaytması nın hesaplandığı kritik noktadır.
3-DİJİTAL SİNYAL İŞLEME ;Filitrileme;toprakminerallerinden kaynaklanan gürültüyü(ground noise)temizlemek için high pass;ve low pass filitreler uygulanır.
VDI (visual discrimination hesaplama metalin iletkenliğine göre bir değer atanır.örneğin altın demir ve gümüşün faz kaymaları farklıdır .
Eşik değeri Threshold Yazılım sadece belirli şiddet in üzerindeki sinyalleri metal olarak kabul edecek şekilde programlanır.
kulllanıcı arayüzü ;Ses sentezleme sinyal şiddetine göre değişen frekansta VCO ses üretilir.Ekran kontrolü VDI değerinin ve pil durumunun LCD /OLED VB. EKRANA YANSITILMASIDIR.
Konuya algoritma ve akış şeması ile devam edeceğiz.
merhaba ;
Basit bir Algoritma şeması ile başlayalım ;
1-TX_Pin :10 khz sinyal gönder;
2-RX _Pin :ADC ile gelen veriyi oku
3-Faz farkı:giden sinyal ile gelen sinyal arasındaki gecikmeyi hesapla
4-Ayrım;faz farkı düşük ise_Demir (Ferrous) Faz farkı yüksek ise Değerli Metal (non Ferrous)
5-Ses; sinyal genliği(amplitude)yüksek ise hoporleri aktif et.
Çalıştığımız diller C Veya C++ hız ve düşük sinyal seviyeleri için şarttır
platform yani işlemci seçimin de ise STM serisi dsp kütüphaneleri ve hızlı adc birimleri ile Arduinodan çok daha verimlidir .
bu yazılımın en zor kısmı ise toprak ayarı GROUN BALANCE kodlamasıdır çüünkü toprak metal gibi davranarak cihazı yanıltabilir yazılımın bu sabit toprak etkisini matematiksel olarak sinyalden çıkarması gerekmektedir aksi takdirde hiç susmayan bir dedektörümüz olur.bir sonraki konumuzda yazılımı işleyeleyeceğiz,
*ARDUINO VLF METAL DEDECTOR- FULL SYSTEM
*Hedef:10 khz sinyal üretimi ve faz Analizi
*/
const int rxpin=A0;
const int speakerpin =8;
const int ledpin =13;
int threshold =30;
int ground value =0;
void setup(){
Serial.begin(115200);
pinMode(speakerPin, OUTPUT);
pinMode (ledpin ,OUTPUT);
//TIMER1 Ayarı:Pin 9 üzerinden 10khz karedalga üretimi
pinMode(9, OUTPUT);
TCCR1A= _BV(COM1A0);
TCCCR1B=BV(WGM12) | _BV(CS10);
OCR1A =799;
//ADC Hızını artırma (prescler 16 ya çekilerek örnekleme hızlandırlır)
ADCSRA&= -(0X07)
ADCSRA |=(1<<ADSP2);
Serial.print(''SistemHazır.Kalibrasyon baslıyor...'');
}
voidloop() {
long sum 0;
//Sinyal ortalaması alarak gürültüyü azaltma
for(int i=0; i<50; i++){
sum += analogread(rxPin);
}
int currentVal =sum / 50;
int diff = currentVal - ground value;
if (abs(diff) > threshold) {
digitalwrite(ledPin;HIGH);
int pitch =map(abs(diff), 0, 400,200, 2500);
tone(spekaerPin, pitch),
//seriport üzerinden izleme
Serial.print(''Sinyal:'');
Serial.print(diff);
if(diff>50)Serial.printIn('' _>DEGERLI'');
else Serial.printIn('' ->DEMIR'');
}else{
digitalWrite(ledPin, LOW);
noTone(speakerPin);
}
}
void calibrate() {
long cSum = 0;
for(int i=0; i<200; i++) {
cSum += analogRead(rxPin);
delay(2);
}
groundValue = cSum / 200;
Serial.Print(Kalibrasyon Tamam.Esik Degeri : '');
Serial.PrintIn(groundValue);
}
dosya IDE üzerind serial monitörden izleyebilirsiniz ,yazılımımızın basitleştirilmiş bir hali oldu ,
daha kapsamlı bir yazılım hazırlayacağim devre şeması ile birlikte paylaşalım ,umarım sizlere bir fikir verir ,