Haberler:

[move]Türkiye'nin Elektronik ve Metal Dedektörlerini Buluşturan İlk Sitesi Teknoloji Ekibi'ne Hoş Geldiniz.[/move]

Ana Menü

Arduino Pulse Metal Dedektörü

Başlatan eserdar, 12 Temmuz 2015, 16:58:11

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

eserdar

Arduino ve 16x02 LCD kullanılarak tasarlanmış bir dedektör. Ruslar tarafından yapılmış Türkçeleştirmesini yaptım birde zaman bulabilirsem yazılımsal ayrımını geliştirmeyi planlıyorum.
Bir mum diğerini tutuşturmakla, ışığından hiç bir şey kaybetmez.

zgr2259

Güzel Proje Hocam Sonuç Ne Oldu Acaba?

kawizen


tivos


zgr2259

Ustam Kodları Biraz İnceledim Kodlarda Menü tuşu Ve Yön Tuşlarından Bahsediliyor. Ama Açık Şemada Yada Arduino Bağlantısından Bahsedilmemiş.

eserdar

Şimdi eklediğim dosyada arduino bağlantıları kutucukta yazıyor..
Bir mum diğerini tutuşturmakla, ışığından hiç bir şey kaybetmez.

zgr2259


eserdar

Onunla ilgili bir kodla şemayı eşleştirmeye çalışıyorum devreyi yaptım, arduino ile çalıştırdım ses geliyor görüntü yok.
Tuşların bağlantılarını arduinonun analog girişlerinden yapacağım düzenleyince foruma ekleyeceğim.
Bir mum diğerini tutuşturmakla, ışığından hiç bir şey kaybetmez.

tivos

Ben takipdeyim. Kartı dışardan aldım Henüz elime geçmedi. Geçince bende kurcalamaya başlayacağım. Kolay gelsin...

zgr2259


eserdar

butonların bağlantısını ayarladım resimli olarak paylaşacağım.
Bir mum diğerini tutuşturmakla, ışığından hiç bir şey kaybetmez.

zgr2259


eserdar

Arkadaşlar şu aralar başka bir işle uğraştığım için bu devre ile uğraşamıyorum en yakın zamanda düzenlenmiş halinin lay dosyasıyla paylaşacağım.
Bir mum diğerini tutuşturmakla, ışığından hiç bir şey kaybetmez.

xman

displayi İ2c ile çalıştırın.

xman

İmdat.

//#include <TimerOne.h>
#include "Wire.h"
#include <LiquidCrystal_I2C.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x20,16,2);


int menu = A0;
int upButton = A3;
int downButton = A5;
int menu1 = A2;
int buttonCount = 0;

#define FASTADC 1

// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

//
//#define R3_PIN       A0
#define SPEAKER_PIN  11
#define T0_WGM   0b010
#define T0_COMA  0b01
#define T0_CS    0b111

// AYAR PARAMETRELERİ

int pMID=0;
int pMAX=0;
int pMIN=0;
int Sensv = 0; //(0 - MAKSİMUM HASSASİYET DEĞERİ 100 OLMALIDIR.)
int LastData[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int SetupData[200];
void delayms(int ms) {
  for (int i=0;i<ms;i++) delayMicroseconds(1000);
}
void setup() {
  //set port/pin  mode
  //DDRD = 0xFF;//all outputs
  //DDRC = 0x0F;//all inputs
  //DDRD = 0xFF;//all outputs
  //DDRC = B11111110;
  //TIMER INTERRUPT SETUP
 
  DDRD = DDRD | B00001110;
  PORTD = B00001110;

  //PORTD = 0;
 
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("START  ");
 
#if FASTADC
// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif

 


  //YORUMLAYICI
cli();

TCCR0A = 0;
TCCR0B = 0;
OCR0A = 0;

  TCCR0A = (T0_COMA << 6) | (T0_WGM & 0b011);
  TCCR0B = ((T0_WGM & 0b100) << 1) | T0_CS;
  OCR0A = 18;
  // pinMode(R3_PIN, INPUT);
// pinMode(SPEAKER_PIN, INPUT); 
// pinMode(SPEAKER_PIN, OUTPUT);
  //noInterrupts();
  sei();
 
  //Timer1.initialize(1000000);
  //Timer1.attachInterrupt( timerIsr );
 
  beep(100);
  delayms(100);
  beep(100);
  delayms(100);
  beep(100);
  delayms(1000);
  //BOŞTA DARBE GÖNDERMEK İÇİN
  //
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("YÜKLENİYOR...  ");
  //while (1)
 
   
  for (int i=0;i<200;i++) { 
  int t = SendPulse(); 
  delayMicroseconds(6500);
  }
  //AYARLAMAK İÇİN 200 PULSE GÖNDERİYOR
  for (int i=0;i<200;i++) {
  int t = SendPulse();
  SetupData=t;
  delayMicroseconds(6500);   
  }
  int tmin=1024;
  int tmax=0;
  unsigned long tnak=0;
  for (int i=0;i<200;i++) {
    tnak=tnak+SetupData;
    if (SetupData>tmax) tmax = SetupData;
    if (SetupData<tmin) tmin = SetupData;
  } 
pMID = tnak/200;
pMIN = tmin;
pMAX = tmax;
lcd.clear();
lcd.setCursor(0,1);
lcd.print(pMIN);
lcd.setCursor(5,1);
lcd.print(pMID);
lcd.setCursor(10,1);
lcd.print(pMAX);
/* //for test
for (int i=0;i<200;i++)
lcd.setCursor(0,0);
lcd.print(SetupData);
delayms(1000);
lcd.setCursor(0,0);
lcd.print("           ");
*/
beep(500);

}
//SONUÇLARI 1602 DE GÖRÜNTÜLER



 
void beepOn() {
  pinMode(SPEAKER_PIN, OUTPUT);
}
void beepOff() {
  pinMode(SPEAKER_PIN, INPUT);
}

void beep(int msec) {
beepOn();
delayms(msec);
beepOff();
}

int lmax = 10;
int mmax = 80;
int mmaxDefault = 80;
int lmaxDefault = 10;
int LL=lmax; //SİNYAL UZUNLUĞU
int MM=mmax; //SESSİZLİK DÖNGÜLERİ

     int vo = 0;
     int vi = 0;
     int vod = 0;
     int vid = 0;
     unsigned long v1 = 0;
int SendPulse() {
    //--------------------------
    //BAŞLAT
    //AÇMA / KAPAMA
    PORTD = B00000010;
    //-------------------------
    //100MCS BEKLEME
    delayMicroseconds(100);
    //KAPAT
    PORTD = B00001010;
    //AÇIK
    delayMicroseconds(12); //KORUMA ARALIĞI
    PORTD = B00001110;
    delayMicroseconds(7);
    PORTD = B00001100;
    delayMicroseconds(100);
    PORTD = B00001110;
    int r = analogRead(1);
    return r;
}
int tControl = 0; //0-15 ARASI DEĞER GİRİLEBİLİR
int maxControl = 10; //ÖLÇÜM SAYISI
                    //KARARLILIK İÇİN 12-15 ARASI DEĞER GİRİN.
                   

int getMidControl() {
  int gm = 0;
  for (int i=0;i<maxControl;i++) {
    gm = gm+LastData;
  }
  int res = gm/maxControl;
  return res;
}

char Str2[11] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,'\0'};
int V;
void(* resetFunc) (void) = 0; //RESET
int setupcount = 150;



void loop() {
  /*
     if (!(digitalRead(menu))) {///////////////////////////////////////////////
  buttonCount++;
  if ( buttonCount > 5) buttonCount = 0;
    }
            if (!(digitalRead(menu1))) {
  buttonCount--;
    if (buttonCount ==-1) buttonCount = 5;
  } 
  */
ISR(TIMER0_COMPA_vect){
 
   //void timerIsr()


  PORTD = B00001110;
  delayms(2000);
  int ssl=0;
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("      ");
    lcd.setCursor(12,1);
    lcd.print("    ");
    lcd.setCursor(12,1);
    lcd.print(Sensv);
    int a = 0;
    int val;
    LL=9;
   
 
      //k = getKey();
     
          if (!digitalRead(upButton)) {
    tControl++;
    if (tControl > 15) tControl = 0;////////////control++--
  }
if (!digitalRead(downButton)){
    tControl--;
   if (tControl ==-1) tControl = 15;   
  }
  //lcd.clear();
   lcd.setCursor(9,0);
      lcd.print(tControl,DEC);
     
     
     if(tControl>=maxControl) tControl=0;
    int t = SendPulse();
    LastData[tControl] = t;
    int s = getMidControl();
    tControl++;
    //TEST
    //pMID = 781;
    //s = 520;
    //==================
    //==================================
    // AMAÇ
    //==================================
    if (LL<lmax && LL>0) LL--;
    if (LL==0 && MM>0) MM--;
    if (MM==0) {
      LL = lmax;
      MM = mmax;
    }
    if (setupcount>0) {
      if (s<=pMID) pMID = pMID-1;
      setupcount--;
    }
    int signal=(pMID-Sensv)-s; //ORTALAMA DEĞERLER
    //int signal=(pMIN-Sensv)-s; //EN AZ
    if (signal>0 && LL==lmax) {
      beepOn();
      //if (signal<50) slevel = 2-
      int slevel = 200-signal; //400 E KADAR DEĞERLİ GERİSİ GICIRDAMA ŞEKLİNDE
      if (slevel<5) slevel = 5;
      mmax = slevel/5;
      MM = mmax;
      LL--;
    }
    if (signal<0 && LL==lmax) {
      mmax = mmaxDefault;
      MM = mmax;
    }
    int ssk = signal;
    signal = signal/5;
    if (signal<0) signal = 0;
    for (int i=0;i<10;i++) {
    if (i<signal) Str2 = 0xff;
    else Str2 = ' ';
    }
    if (LL==0) beepOff();
    //==================================
    //==================================
    //if (a==0) val = s;
    lcd.setCursor(0,1);
    lcd.print(Str2);
    a++;
   
    if (!digitalRead(menu)) {
    Sensv++;
    if (Sensv > 100) Sensv = 0;
  }
if (!digitalRead(menu1)){
    Sensv--;
   if (Sensv ==-1) Sensv = 100;   
  }                                     // sensv için ++ --
      //lcd.setCursor(12,1);
     // lcd.print("   ");
      lcd.setCursor(12,1);
      lcd.print(Sensv,DEC);
      beep(100);
      delayms(100);
     
     
      pMID = t; 
      setupcount = 150;
 
    delayMicroseconds(1000);

    lcd.setCursor(0,0);
    lcd.print(vi);
    lcd.print('.');
    lcd.print(vid);
    lcd.print("V  ");
    lcd.print(ssl);
    lcd.print(' ');
        if (a>200) {
      a = 0;
     //200 DEFA AKÜ VOLTAJINI GÖSTERİR
     V = analogRead(4);
     //V = V-73; //VOLTMETRE KALİBRASYONU
     unsigned long vt = V*125l;
     vt = vt/64l-140;
     vi = vt/100;
     vid = vt/10%10;
     ssl = ssk/10;
     //vi = v1*4;
    }
    //lcd.print(vid);   

    //lcd.print(vi);       
  }
}

zgr2259

Müsaitseniz devrenin son halini paylaşabilirmisiniz hocam...

eserdar

arduino pro mini ile bir pcb çiziyorum onu paylaşacağım yakında hem uno versiyonu hem pro mini versiyonu olarak lcd de i2c kullandım butonları analoğ girişten header olarak ekledim butonların yerinede rotary encode eklemeye çalışıyorum. Az kaldı fakat işler güçler o nedenle fazlada zaman ayıramıyorum.
Bir mum diğerini tutuşturmakla, ışığından hiç bir şey kaybetmez.

zgr2259

Çok merak ettik ustam bitince nasıl olcak size iyi çalşmalar..

türkelli

eserdar ustam kolay gelsin başarılar dilerim

eserdar

Bir mum diğerini tutuşturmakla, ışığından hiç bir şey kaybetmez.