May 13, 2026, 06:14 ÖS

Haberler:

Dear site friends, our aim is to inform and develop the field of electronics. All messages containing links and advertisements, and members who share them, will be banned. With respect and love, PulseQRP R&D management.


Son İletiler

Sayfa1 2 3 ... 10
1
FM-AM ALICILAR SSB ALICILAR / Ynt: BITX YENİ ŞEMA
Son İleti Gönderen Yörük - Nis 23, 2026, 11:54 ÖS
Devreye ilişkin pdf dosya ektedir.
PA katında IRF510 bias voltajını iyi ayarlamak gerekli,2n2222 yerine farklı rf transistörlerde kullanılabilir ama başlangıç açısından iyi bir devre .
2
FM-AM ALICILAR SSB ALICILAR / BITX YENİ ŞEMA
Son İleti Gönderen Yörük - Nis 23, 2026, 11:31 ÖS
Merhaba,
Güzel bir qrp devresi tamamen transistör lerden oluşuyor.
2adet FT37-43 TRİFİLER Sarılacak
Aynı zamanda4 adet T30-6 toroid trafo VFO İçin 1 adet FT50-6 toroid 
BFO için 110592 mhz kristal kullanılmış.
Yapımı gayet kolay  ve lsb / cw modu mevcıt.
3
c yazılım uygulamaları / Ynt: 1602A VE I2C YAZILIMLARI ...
Son İleti Gönderen Yörük - Nis 17, 2026, 10:21 ÖS
Merhaba ,
Buradaki yazılım yeni umarım faideli olur
I2C LCD Test ve Adres Tarayıcı Kodu
Bu kod, Arduino'ya bağlı I2C cihazlarının adresini bulur ve bulunan adresteki 2x16 LCD ekranı test eder.

Gereksinimler:

• `LiquidCrystal_I2C` kütüphanesi

• SDA -> A4, SCL -> A5 bağlantısı (Uno için)

```

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

void setup() {

  Wire.begin();

  Serial.begin(9600);

  while (!Serial); 

  Serial.println("\n--- I2C Adres Tarayici Baslatildi ---");

  byte error, address;

  int nDevices = 0;

  for (address = 1; address < 127; address++) {

    Wire.beginTransmission(address);

    error = Wire.endTransmission();

    if (error == 0) {

      Serial.print("I2C cihazi bulundu! Adres: 0x");

      if (address < 16) Serial.print("0");

      Serial.println(address, HEX);

      LiquidCrystal_I2C lcd(address, 16, 2);

      lcd.init();

      lcd.backlight();

      lcd.setCursor(0, 0);

      lcd.print("Adres: 0x");

      lcd.print(String(address, HEX));

      lcd.setCursor(0, 1);

      lcd.print("Ekran Calisiyor!");

      

      nDevices++;

    }

  }

  if (nDevices == 0) {

    Serial.println("Hicbir I2C cihazi bulunamadi.");

  }

}

void loop() {}

```
4
FM-AM ALICILAR SSB ALICILAR / 20mtre ve 40mtre vfo
Son İleti Gönderen Yörük - Nis 16, 2026, 11:36 ÖÖ
Merhaba;
#include <Wire.h>
#include <si5351.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
// Pin Tanımlamaları
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
Si5351 si5351;
// --- PARAMETRELER ---
unsigned long freq = 7000000;     
unsigned long stepSize = 1000;    
const unsigned long minFreq = 7000000;  
const unsigned long maxFreq = 14000000; 
String mode = "LSB";
int sMeterVal = 0;
unsigned long lastEepromWrite = 0;
bool needsEepromUpdate = false;
// Buton Tanımları (LCD Shield Standart)
#define BTN_RIGHT  0
#define BTN_UP     1
#define BTN_DOWN   2
#define BTN_LEFT   3
#define BTN_SELECT 4
#define BTN_NONE   5
int read_LCD_buttons() {
  int adc_key_in = analogRead(0);
  if (adc_key_in < 50)   return BTN_RIGHT; 
  if (adc_key_in < 250)  return BTN_UP;
  if (adc_key_in < 450)  return BTN_DOWN;
  if (adc_key_in < 650)  return BTN_LEFT;
  if (adc_key_in < 850)  return BTN_SELECT; 
  return BTN_NONE;
}
void setup() {
  lcd.begin(16, 2);
 
  // --- AÇILIŞ EKRANI (WELCOME SCREEN) ---
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print("PULSEQRPARGE"); // Marka İsmi
  lcd.setCursor(1, 1);
  lcd.print("pulseqrparge.com");
 
  // Görsel yükleme efekti
  delay(1000);
  for(int i = 0; i < 16; i++) {
    lcd.setCursor(i, 1);
    // İsteğe bağlı: pulseqrparge.com yazısının üzerinden blok geçirme
    delay(100);
  }
  delay(500);
  lcd.clear();
  // --------------------------------------
  // EEPROM'dan son frekansı oku
  EEPROM.get(0, freq);
  if (freq < minFreq || freq > maxFreq) freq = 7100000;
  // Si5351 Başlatma
  if(!si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0)) {
    lcd.print("SI5351 HATASI!");
    while(1);
  }
  si5351.set_freq(freq * 100ULL, SI5351_CLK0);
  updateDisplay();
}
void loop() {
  int button = read_LCD_buttons();
  unsigned long oldFreq = freq;
  unsigned long oldStep = stepSize;
  String oldMode = mode;
  if (button != BTN_NONE) {
    switch (button) {
      case BTN_RIGHT: freq += stepSize; break;
      case BTN_LEFT:  if (freq >= stepSize + minFreq) freq -= stepSize; break;
      case BTN_UP:    stepSize = (stepSize >= 100000) ? 10 : stepSize * 10; delay(250); break;
      case BTN_DOWN:  stepSize = (stepSize <= 10) ? 100000 : stepSize / 10; delay(250); break;
      case BTN_SELECT:
        mode = (mode == "LSB") ? "USB" : "LSB";
        delay(300);
        break;
    }
   
    if (freq < minFreq) freq = minFreq;
    if (freq > maxFreq) freq = maxFreq;
   
    if (freq != oldFreq) {
      si5351.set_freq(freq * 100ULL, SI5351_CLK0);
      needsEepromUpdate = true;
      lastEepromWrite = millis();
    }
    updateDisplay();
    delay(50);
  }
  // S-Metre Okuma ve Güncelleme
  static unsigned long lastSMeterUpdate = 0;
  if (millis() - lastSMeterUpdate > 150) {
    sMeterVal = analogRead(1);
    drawSMeter();
    lastSMeterUpdate = millis();
  }
  // EEPROM Kaydı (Değişimden 5 sn sonra)
  if (needsEepromUpdate && (millis() - lastEepromWrite > 5000)) {
    EEPROM.put(0, freq);
    needsEepromUpdate = false;
  }
}
void updateDisplay() {
  // Alt Satır: Frekans
  lcd.setCursor(0, 1);
  float freqMHz = freq / 1000000.0;
  if (freqMHz < 10.0) lcd.print(" ");
  lcd.print(freqMHz, 4);
  lcd.print(" MHz");
  // Step Göstergesi
  lcd.setCursor(13, 1);
  if (stepSize >= 1000) { lcd.print(stepSize/1000); lcd.print("k"); }
  else { lcd.print(stepSize); lcd.print("H"); }
 
  // Mod Bilgisi
  lcd.setCursor(13, 0);
  lcd.print(mode);
}
void drawSMeter() {
  lcd.setCursor(0, 0);
  lcd.print("S:");
  int bars = map(sMeterVal, 0, 800, 0, 9);
  for (int i = 0; i < 9; i++) {
    if (i < bars) lcd.print((char)255);
    else lcd.print(" ");
  }
}

Güzel bir çalışma oldu detayları müsait olunca yükleyeceğim
5
VLF BFO DEDEKTORLER ŞEMALAR / Ynt: VLF DEDEKTÖR YAPIMI Tasar...
Son İleti Gönderen Yörük - Nis 09, 2026, 01:21 ÖÖ
/ ... (Kütüphane ve Pin tanımlamaları aynı kalacak)
void showWelcomeScreen() {
  display.clearDisplay();
 
  // Üst Çizgi Tasarımı
  display.drawFastHLine(0, 5, 128, WHITE);
 
  // Marka İsmi (PULSEQRPARGE)
  display.setTextSize(1);
  display.setCursor(25, 15);
  display.println("DESIGNED BY");
 
  display.setTextSize(2); // Büyük font
  display.setCursor(5, 30);
  display.println("PULSEQRP"); // Marka ismi sığması için 2 satıra bölebiliriz
  display.setCursor(45, 48);
  display.println("ARGE");
 
  // Alt Çizgi ve Versiyon
  display.drawFastHLine(0, 60, 128, WHITE);
  display.display();
 
  delay(3000); // Markanın 3 saniye görünmesini sağlar
 
  // Yükleme Animasyonu
  for(int i=0; i<128; i+=4) {
    display.fillRect(0, 58, i, 2, WHITE);
    display.display();
    delay(20);
  }
}
void runDetection() {
  // ... (Sinyal okuma kısımları aynı)
 
  display.clearDisplay();
 
  // Ana ekranda da marka ismini köşeye ekleyelim
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("PULSEQRP ARGE"); // Sol üst köşe imzası
 
  drawBattery();
  display.drawLine(0, 10, 128, 10, WHITE);
 
  // ... (Geri kalan gösterge kodları aynı)
}

Evet bazı açılış ayarlarınıda değiştirdik 
Konuya kapsamlı olarak devam edeceğiz.
6
VLF BFO DEDEKTORLER ŞEMALAR / Ynt: VLF DEDEKTÖR YAPIMI Tasar...
Son İleti Gönderen Yörük - Nis 09, 2026, 12:23 ÖÖ
6 Tüm teknik detayları, donanım mimarisini ve yazdığımız gelişmiş yazılım özelliklerini bir araya getirerek projenin tam bir özetini hazırladım. Bu metni kopyalayıp bir not dosyasına kaydedebilirsin.
🚀 PROJE NOTLARI: Arduino VLF Pro Metal Dedektörü
Proje Amacı: Arduino tabanlı, OLED ekranlı, metal ayrımı yapabilen (VLF - Very Low Frequency) ve saha ayarlarına (Menü) sahip profesyonel bir metal dedektörü geliştirmek.
1. Donanım Mimarisi (Donanım Taslağı)
Projenin fiziksel yapısı üç ana bloktan oluşmaktadır:
A. Verici (Transmitter - TX) Katmanı
  • Kontrol: Arduino Pin 9 (10 \text{ kHz} Kare Dalga).
  • Güç Katı: IRF740 MOSFET.
  • Sürücü: MOSFET'i hızlı sürmek için 2 adet BC serisi transistör (Push-Pull yapı).
  • Görevi: Arama bobinine güçlü bir manyetik alan pompalamak.
B. Alıcı (Receiver - RX) Katmanı
  • Yükseltici: OPA27, TL72 veya TL082 gibi düşük gürültülü Op-Amplar.
  • Koruma: Sinyal kırpma ve Arduino girişini koruma için 1N60 Germanyum diyotlar.
  • Görevi: Metalden dönen çok zayıf faz kaymalı sinyali yükseltip Arduino A0 pinine iletmek.
C. Kontrol ve Görselleştirme
  • İşlemci: Arduino (Nano/Uno).
  • Ekran: SSD1306 I2C OLED (128 \times 64).
  • Ses: Pasif Buzzer veya Hoparlör (D8 Pin).
  • Besleme: 2S Li-Po pil (7.4\text{V} - 8.4\text{V}), A1 üzerinden pil seviye takibi.
2. Yazılım Özellikleri (VLF Pro v3.0)
Yazılım, standart bir dedektörün ötesinde şu gelişmiş fonksiyonları içerir:
  • Hızlı ADC (Overclock): Standart örnekleme hızı, ADC Prescaler değeri 16'ya çekilerek 8 kat artırıldı. Bu, 10 \text{ kHz} sinyalin fazını yakalamak için kritiktir.
  • Dinamik Menü Sistemi: 6 adet buton ile yönetilen kullanıcı arayüzü.
  • Metal Ayrım Mantığı (VDI): Gelen sinyalin genliği ve yönüne (Pozitif/Negatif sapma) bakarak DEĞERLİ (Altın, Gümüş, Bakır) veya DEMİR ayrımı.
  • Zemin Ayarı (Ground Balance): Toprak minerallerini sıfırlayan kalibrasyon fonksiyonu.
  • Görsel Arayüz: Sinyal gücü için bar grafik, VDI sayısal değerleri ve pil seviyesi göstergesi.
3. Buton ve Pin Konfigürasyonu


[th]Pin[/th]
[th]Görev[/th]
[th]Bağlantı Şekli[/th]
D2Menü / GeriButon \rightarrow GND
D3Yukarı (+)Buton \rightarrow GND
D4Aşağı (-)Buton \rightarrow GND
D5Seç (OK)Buton \rightarrow GND
D6Ses ArtırButon \rightarrow GND
D7Ses AzaltButon \rightarrow GND
D8Ses ÇıkışıBuzzer / Amp
D9TX ÇıkışMOSFET Gate Sürücü
A0RX GirişOp-Amp Çıkışı
A1Pil ÖlçümVoltaj Bölücü (10\text{k}/10\text{k})
4. Kritik Yapım Notları (Saha İpuçları)
  • Bobin Sönümleme: TX bobinine paralel bağlayacağın bir sönümleme direnci (470\Omega - 1\text{k}\Omega arası), sinyaldeki çınlamayı (ringing) engelleyecektir.
  • Nulling (Sıfırlama): TX ve RX bobinlerini, metal yokken RX ucunda en düşük voltajı (0\text{V}'a en yakın) görene kadar hafifçe kaydırarak sabitlemelisin.
  • Hassasiyet: Yazılımdaki threshold değerini ortamdaki elektromanyetik parazite göre menüden optimize et.
Not: Bu proje, 2026 yılı güncel Arduino kütüphaneleri ve 10 \text{ kHz} VLF standartları baz alınarak dökümante edilmiştir.
7
VLF BFO DEDEKTORLER ŞEMALAR / Ynt: VLF DEDEKTÖR YAPIMI Tasar...
Son İleti Gönderen Yörük - Nis 09, 2026, 12:20 ÖÖ
Konuya devam edelim.
Yazılımımıza Pil Seviyesi (Battery Indicator), VDI Çizelgesi (Sinyal Barı altında) ve daha profesyonel bir Arayüz Tasarımı ekliyoruz.

Ayrıca, donanım tarafında belirttiğiniz IRF740 MOSFET ve BC transistörler ile kuracağınız TX katmanını, OPA27/TL072 RX katmanını ve 1N60 kırpıcı diyotlarını destekleyecek şekilde yazılımın hassasiyetini optimize ettim.
Donanım İçin Kritik Notlar:
  • Pil Göstergesi (A1 Pin): Pil voltajını ölçmek için doğrudan Arduino'ya bağlamayın. İki adet dirençle (Örn: 10\text{k}\Omega ve 10\text{k}\Omega) bir voltaj bölücü yapın. Böylece 2S Li-po (8.4\text{V}) voltajını güvenli olan 4.2\text{V} seviyesine indirip A1 pininden okuyabilirsiniz.
  • IRF740 TX Katı: MOSFET çok hızlı anahtarlama yaptığı için ısınabilir, küçük bir soğutucu takmanız iyi olur. BC transistörleriniz (BC547/557 gibi) MOSFET'in gate ucunu hızlıca şarj-deşarj etmek için idealdir.
  • 1N60 Diyotlar: Alıcı (RX) kısmında OPA27 girişine paralel bağladığınız 1N60'lar, bobin metalin üstündeyken oluşabilecek yüksek voltaj darbelerini kırparak Arduino'yu koruyacaktır.
  • Bobin için doğrusal değerler alıp tekrardan hesap layacağız
  • Anolog çatıda birkaç değişiklik yaptıktan sonra şemayı netleştirebiliriz.(opa27 elimde bol miktarda var olduğu için tercih ettim )
8
VLF BFO DEDEKTORLER ŞEMALAR / Ynt: VLF DEDEKTÖR YAPIMI Tasar...
Son İleti Gönderen Yörük - Nis 09, 2026, 12:12 ÖÖ
Merhaba
V03 pro vlf. Olarak adlandıralım
Menü ve pil seviyesi ölçme ekledik,
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Pin Tanımlamaları
const int rxPin = A0;      // RX sinyali (Op-amp çıkışı)
const int batPin = A1;    // Pil voltaj okuma (Direnç bölücü ile)
const int speakerPin = 8;
const int btnMENU = 2;
const int btnUP = 3;
const int btnDOWN = 4;
const int btnOK = 5;
const int btnVOL_UP = 6;
const int btnVOL_DOWN = 7;
// Değişkenler
int threshold = 35;
int groundValue = 512;
int volume = 6;
int menuIndex = 0;
bool inMenu = false;
bool isMuted = false;
void setup() {
  Serial.begin(115200);
 
  // Pin Modları
  pinMode(btnMENU, INPUT_PULLUP);
  pinMode(btnUP, INPUT_PULLUP);
  pinMode(btnDOWN, INPUT_PULLUP);
  pinMode(btnOK, INPUT_PULLUP);
  pinMode(btnVOL_UP, INPUT_PULLUP);
  pinMode(btnVOL_DOWN, INPUT_PULLUP);
 
  // 10kHz TX Sinyal Üretimi (D9)
  pinMode(9, OUTPUT);
  TCCR1A = _BV(COM1A0);
  TCCR1B = _BV(WGM12) | _BV(CS10);
  OCR1A = 799;
  // ADC Hızlandırma (Prescaler 16)
  ADCSRA &= ~(0x07);
  ADCSRA |= (1 << ADPS2);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) for(;;);
 
  showWelcomeScreen();
  calibrateGround();
}
void loop() {
  handleButtons();
  if (inMenu) {
    drawMenu();
  } else {
    runDetection();
  }
}
// Ana Ekran ve Algılama
void runDetection() {
  long sum = 0;
  for(int i=0; i<50; i++) sum += analogRead(rxPin);
  int currentVal = sum / 50;
  int diff = currentVal - groundValue;
  display.clearDisplay();
 
  // 1. Üst Bar: Pil ve Durum
  drawBattery();
  display.setCursor(0, 0);
  display.print("VLF PRO");
  display.drawLine(0, 10, 128, 10, WHITE);
  // 2. VDI ve Sinyal Barı
  int barWidth = map(constrain(abs(diff), 0, 500), 0, 500, 0, 128);
  display.drawRect(0, 15, 128, 12, WHITE);
  display.fillRect(2, 17, barWidth, 8, WHITE);
  // 3. Metal Ayrım Alanı
  display.setCursor(0, 35);
  display.setTextSize(2);
  if (abs(diff) > threshold) {
    if (diff > 45) {
      display.print("DEGERLI"); // Altın, Gümüş, Bakır (Pozitif Kayma)
    } else {
      display.print("DEMIR");  // Çivi, Paslı Metal (Negatif Kayma)
    }
    if(!isMuted) tone(speakerPin, map(abs(diff), 0, 600, 150, 1800 + (volume * 80)));
  } else {
    display.print("BEKLEMEDE");
    noTone(speakerPin);
  }
  // 4. Alt Bilgi
  display.setTextSize(1);
  display.setCursor(0, 56);
  display.print("T:"); display.print(threshold);
  display.print(" V:"); display.print(volume);
  display.print(" S:"); display.print(diff);
 
  display.display();
}
void drawBattery() {
  int batRaw = analogRead(batPin);
  // 2:1 direnç bölücü ile (7.4V -> 3.7V Arduino'ya)
  int batLevel = map(batRaw, 600, 850, 0, 18);
  display.drawRect(105, 0, 20, 8, WHITE);
  display.drawRect(125, 2, 2, 4, WHITE);
  display.fillRect(106, 1, constrain(batLevel, 0, 18), 6, WHITE);
}
void handleButtons() {
  if (digitalRead(btnMENU) == LOW) { delay(250); inMenu = !inMenu; }
 
  if (inMenu) {
    if (digitalRead(btnUP) == LOW) { delay(200); menuIndex--; if(menuIndex < 0) menuIndex = 2; }
    if (digitalRead(btnDOWN) == LOW) { delay(200); menuIndex++; if(menuIndex > 2) menuIndex = 0; }
    if (digitalRead(btnOK) == LOW) {
      delay(250);
      if(menuIndex == 0) calibrateGround();
      if(menuIndex == 1) { threshold += 5; if(threshold > 100) threshold = 10; }
      if(menuIndex == 2) isMuted = !isMuted;
    }
  } else {
    if (digitalRead(btnVOL_UP) == LOW) { volume++; if(volume > 10) volume = 10; delay(150); }
    if (digitalRead(btnVOL_DOWN) == LOW) { volume--; if(volume < 0) volume = 0; delay(150); }
  }
}
void drawMenu() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(35, 0); display.println("AYARLAR");
  display.drawLine(0, 10, 128, 10, WHITE);
  char* opts[] = {"Zemin Kalibrasyonu", "Esik (Hassasiyet)", "Sessiz Mod"};
  for(int i=0; i<3; i++) {
    display.setCursor(0, 15 + (i * 12));
    if(i == menuIndex) display.print("> "); else display.print("  ");
    display.println(opts);
  }
  display.display();
}
void calibrateGround() {
  display.clearDisplay();
  display.setCursor(20, 25); display.print("KALIBRASYON...");
  display.display();
  long c = 0;
  for(int i=0; i<300; i++) c += analogRead(rxPin);
  groundValue = c / 300;
  inMenu = false;
}
void showWelcomeScreen() {
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(15, 20); display.println("VLF PRO");
  display.setTextSize(1);
  display.setCursor(25, 45); display.println("Sistem Yukleniyor");
  display.display();
  delay(2000);
}
9
VLF BFO DEDEKTORLER ŞEMALAR / Ynt: VLF DEDEKTÖR YAPIMI Tasar...
Son İleti Gönderen Yörük - Nis 08, 2026, 01:04 ÖÖ
Bu Kodda Neler Değişti?İnceleyelim;
  • ADC Overclock: ADCSRA kaydı üzerinden ADC saat hızını artırdık. Bu sayede analogRead() işlemi çok daha kısa sürede tamamlanır. Bu da sinyalin tepe noktalarını (peak) kaçırmadan daha hassas bir ortalama almanızı sağlar.
  • OLED Görselleştirme: Sinyal şiddetini sadece sesle değil, ekranda dolan bir bar grafiğiyle görebilirsiniz.
  • VDI (Visual Discrimination Indication): Yazılım, sinyalin referans noktasına göre sapma yönüne bakarak ekrana "DEGERLI" veya "DEMIR" yazar.
Önemli Bir Hatırlatma: Analog Katman
Bu kodun çalışması için alıcı (RX) bobininden gelen sinyalin şu aşamalardan geçmesi gerekir:
  • Pre-Amp: Sinyali yükseltmek için (Örn: TL072 veya LM358).
  • Full Wave Rectifier: AC sinyali DC'ye çevirerek Arduino'nun okuyabileceği bir formata sokmak.
  • Bias Devresi: Eğer sinyal negatif bölgeye iniyorsa, Arduino'ya zarar vermemek için 2.5 \text{V} seviyesine taşınmalıdır.
10
VLF BFO DEDEKTORLER ŞEMALAR / Ynt: VLF DEDEKTÖR YAPIMI Tasar...
Son İleti Gönderen Yörük - Nis 08, 2026, 12:06 ÖÖ
/*
* ARDUINO VLF PRO - ADVANCED ADC & OLED DISPLAY
* Özellikler: Hızlı ADC (1MHz clock), 10kHz TX, OLED Görselleştirme
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// OLED Tanımlamaları
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Pinler
const int rxPin = A0;
const int speakerPin = 8;
// Değişkenler
int groundValue = 0;
int threshold = 25;
char* metalType = "Taniyor...";
void setup() {
  Serial.begin(115200);
  // 1. OLED Başlatma
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("OLED hatasi!"));
    for(;;);
  }
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0,0);
  display.println("VLF PRO BASLIYOR...");
  display.display();
  // 2. TIMER1: 10kHz Kare Dalga (D9 Pin)
  pinMode(9, OUTPUT);
  TCCR1A = _BV(COM1A0);
  TCCR1B = _BV(WGM12) | _BV(CS10);
  OCR1A = 799;
  // 3. İLERİ SEVİYE ADC AYARI (Prescaler 16)
  // Standart 128 olan böleni 16'ya düşürerek ADC'yi 8 kat hızlandırıyoruz.
  ADCSRA &= ~(0x07); // Temizle
  ADCSRA |= (1 << ADPS2); // Sadece ADPS2'yi 1 yaparak 16 bölenini seç (1MHz ADC Clock)
  delay(1000);
  calibrate();
}
void loop() {
  long sum = 0;
  const int samples = 60; // Hızlı ADC sayesinde daha çok örnek alabiliyoruz
 
  for(int i=0; i < samples; i++) {
    sum += analogRead(rxPin);
  }
 
  int currentVal = sum / samples;
  int diff = currentVal - groundValue;
  updateDisplay(diff);
  handleAudio(diff);
 
  delay(20); // Ekran tazeleme hızı için uygun bekleme
}
void calibrate() {
  long cSum = 0;
  for(int i=0; i<300; i++) {
    cSum += analogRead(rxPin);
  }
  groundValue = cSum / 300;
}
void handleAudio(int val) {
  if (abs(val) > threshold) {
    int p = map(abs(val), 0, 512, 100, 3000);
    tone(speakerPin, p);
  } else {
    noTone(speakerPin);
  }
}
void updateDisplay(int val) {
  display.clearDisplay();
 
  // Başlık ve Sinyal Çubuğu
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("SINYAL GUCU:");
 
  // Görsel Bar
  int barWidth = map(constrain(abs(val), 0, 500), 0, 500, 0, 128);
  display.fillRect(0, 12, barWidth, 10, WHITE);
 
  // Ayrım Bilgisi
  display.setCursor(0, 30);
  display.setTextSize(2);
  if (abs(val) < threshold) {
    display.print("TEMIZ");
  } else if (val > 40) {
    display.print("DEGERLI"); // Pozitif faz kayması (Altın, Gümüş, Bakır)
  } else {
    display.print("DEMIR");   // Negatif/Düşük faz kayması (Çivi, Atık)
  }
  // Değer Gösterimi
  display.setTextSize(1);
  display.setCursor(0, 55);
  display.print("VDI: ");
  display.print(val);
 
  display.display();
}

Buradaki kodumuz bir öncekinden biraz daha kapsamlı olup bunu biraz daha geliştireceğiz
Dikkat ederseniz henüz bir menümüz yok 
Menü içerisine threshold sensivity hasdaslık ve ground balance yani toprak ayarı ses açma kapama gibi özellikler ekleyeceğiz buna batarya kontrolünüde dahil edebiliriz .
Sorularınız için konu üzerinden yada pulseqrparge@gmail.com mail ilede paylaşabilirsiniz.
İlerleyen günlerde STM 32 Tabanlı arduino yada direkt STM32 ile vlf konusuna devam edeceğiz
Sayfa1 2 3 ... 10