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.
Güzel Proje Hocam Sonuç Ne Oldu Acaba?
Mesafe nedir
Bende merak ettim ne oldu durum.
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ş.
Şimdi eklediğim dosyada arduino bağlantıları kutucukta yazıyor..
Bunu Demek İstemiştim Hocam.
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.
Ben takipdeyim. Kartı dışardan aldım Henüz elime geçmedi. Geçince bende kurcalamaya başlayacağım. Kolay gelsin...
Son Durum Nedir Ustalarım?
butonların bağlantısını ayarladım resimli olarak paylaşacağım.
Beklemedeyiz hocam :D
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.
displayi İ2c ile çalıştırın.
İ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);
}
}
Müsaitseniz devrenin son halini paylaşabilirmisiniz hocam...
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.
Çok merak ettik ustam bitince nasıl olcak size iyi çalşmalar..
eserdar ustam kolay gelsin başarılar dilerim
Teşekkür ederim arkadaşlar.
lcd normal paralel 2x16 kullansak daha pratik olur. ayrıca bu tür devreler için en uygunu arduino nano bence ;)
sadece fikirleriimi söylüyorum , sadece tavsiye,
Sağolasın ustam fikrin için, fikirleriniz bizim için çok değerli ilginiz için teşekkürler. Nano benimde aklıma gelmedi değil, pro mini daha ucuz bir modül diye onu düşündüm fakat nano içinde bir çizim yaptım ona bide glcd ks108 ile yaptım fakat yazılımda oynamak lazım zaman olmadığı için onu biraz askıya almıştım.
Devrede Son Durum Nedir Hocam?
Bir pcb üzerinde yazılım çalışması yapıyorum o yüzden zaman alıyor.
Valla pcb çok güzel görünüyor ustam elinize sağlık.
pcb yi bir yerden örnek aldım, inşallah yazılımı kendim yapacağım çalışacağım.
eserdar usta kurulum biti mi acaba deneme şansınız oldumu bende ona göre pcb yi basıp denemek istiyorum
Şu aralar bu devre ile ilgilenemiyorum nano ile uğraşıyorum.
devrenin geldiği noktayı paylaşırsanız arkadaşlar daha ileriye götürebilir. Açık kaynak yazılım felsefi ;)
Ustam Sonuçları Bizlerle Paylaşabilirmisiniz...
Ustalarım bu devre normalde felezjo isimli bir dedektöre ait, ben bu devreyi benim yazılıma uydurmayı planlamıştım fakat zaman sıkıntısı nedeni ile pek uğraşamadım.
ben bulamadım eğer elinizde varsa paylaşırsanız hazır yarı yıl tatili girmişken biraz geliştirebilirim.
Ustam devre-hex-açıklamalar ektedir.
Hocam Konuyu Hortlattık Ama Çalışmalarınızdan Bir Sonuç Alabildinizmi?
serdar usta felezjo kulanımı sınırlımı-200 kullanımlık diye duymuştum
sınırlı fakat ben altyapıyı kullanarak yazılım yapmaya çalışıyorum fakat zaman kısıtlaması var, siteye bile 1 haftadır nerdeyse giremiyorum.
Alıntı yapılan: eserdar - 31 Mart 2016, 23:37:02
sınırlı fakat ben altyapıyı kullanarak yazılım yapmaya çalışıyorum fakat zaman kısıtlaması var, siteye bile 1 haftadır nerdeyse giremiyorum.
ustam aynı devreyi bende yaptım başlık noktasında takıldım sizin revizyonu sabırsızlıkla bekliyorum yardımlarımız dokunursa elimizden geleni yapmaya hazırız
Saygılar
Ustam Çalışmanızda Son Durum Nedir?
Eserdar hocam devre bittimi bende denemek istiyorum son durum nedir qcaba ?