Hocam ldr çalışıyor lakin ışığa duyarlı değil servo da tam sizin yaptığınız gibi çalışmıyor kafasına göre hareket ediyor
 
Nasıl yani Hocam gerçekten zorladı beni daha açıklayıcı bir şekilde anlatırmısınız Hocam
Hocam ldr çalışıyor lakin ışığa duyarlı değil servo da tam sizin yaptığınız gibi çalışmıyor kafasına göre hareket ediyor
Senin orada neler yaptığını göremiyorumki.
Mantık basit. Parayı attığında Led ile Ldr arasına girip Ldr ye düşen ışığı kesecek. Bu sayede Ldr de önceden belirlediğimiz eşik değere gelince servoya 1'er derece komut vererek adım saydıracak.
Paranın büyüklüğüne göre servonun kaç adım ilerlediğini hesaplayıp para değeri ile eşleştireceksin.
Bu komutların hepsi benim paylaştığım kodların içinde mevcut. Senin tek yapman gereken analog pinden okuduğun ldr değerini serial ekrandan takip ederek gerekli değerleri benim kodlar içinde yerine yerleştirmek.
 
Son düzenleme:
HOcam LCD bağlantıları nasıl peki görsellerde yok acaba hata ordamı

LCD de I2C modül var mı? Resmini at bakalım.
Kumbara Ares lcd.PNG



Çünkü servo adım saymıyor sorun orda
Breadoard üzerinde harici bir devre kur. sadece servoyu test et. Çalışıyorsa devreye doğru bağladığına emin ol.
 
Arduino ile Para Sayan Kumbara yapmayı planlıyorum. 1tl, 50kr, 25kr, 10kr ve 5kr için 5 ayrı bölme olacak. Yani parayı attığımda hem ayıracak hem sayacak bir sistem. Bunun için paranın delikten geçtiğini görüp arduino pinine sinyal gönderecek 5 ayrı göz lazım. Ben bu gözün adını hatırlayamadım. IR alıcı mıydı, foto transistör müydü yada başka birşey miydi? Bu konuda bana yardımcı olur musunuz?

Edit: PROJEYİ BİTİRDİM

Uzun süredir üzerinde çalıştığım arduino nano kumbara projemi sonunda bitirdim. Bu kadar uzun sürmesinin nedeni parayı tanımlayacak mekanik kısmın uğraştırmasıydı. Çeşit çeşit mekanizmalar oluşturup denedim ve en sonunda güzel çalışan bir sistem yaptım.
Gerekli Tüm Dosyalar Ekteki Zip Dosyası İçindedir. Takıldığınız yeri Sorabilirsiniz.



7671 eklentisine bak7672 eklentisine bak7673 eklentisine bak7674 eklentisine bak

Arduino Nano Shield
11248 eklentisine bak


Test Aşamaları
7676 eklentisine bak

Servo, LED ve LDR Bağlantı şeması
7677 eklentisine bak


Arduino Nano Kumbara Kodları:
#include <Servo.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>

// LCD ekran bilgileri
LiquidCrystal_I2C lcd(0x27, 16, 2);

Servo myservo;
#define ldr A0
#define pil A7
#define ikaz 12
int ldr_oku;
int lldr = 0;
int adim = 106;
float para = 0;

// Pil değişkenleri
int min_deger = 988;
float yuzde = 0;
float deger = 0;
int gerilim = 0;

unsigned long simdiki_zaman = 0;
unsigned long onceki_zaman = 0;
int aralik = 32000;

// Pil Karakterleri
byte pil_yuz[8] = {
  B01110,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111
};
byte pil_yetmisbes[8] = {
  B01110,
  B11011,
  B10001,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111
};
byte pil_elli[8] = {
  B01110,
  B11011,
  B10001,
  B10001,
  B11111,
  B11111,
  B11111,
  B11111
};
byte pil_yirmibes[8] = {
  B01110,
  B11011,
  B10001,
  B10001,
  B10001,
  B11111,
  B11111,
  B11111
};
byte pil_on[8] = {
  B01110,
  B11011,
  B10001,
  B10001,
  B10001,
  B10001,
  B11111,
  B11111
};

// Kumbara değişkenleri
float toplam = 0;
float veritipi;
void setup()
{
  Serial.begin(115200);
  myservo.attach(8);

  pinMode(ldr, INPUT);
  pinMode(ikaz, OUTPUT);

  myservo.write(106);
  digitalWrite(ikaz, LOW);

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Kumbara V.1");
  lcd.setCursor(0, 1);

  float toplam = EEPROM.get(0, veritipi);
  SatirTemizle(1);
  lcd.setCursor(0, 1);
  lcd.print("Toplam: ");
  String mst = String(toplam);
  String msst = "TL";
  mst.concat(msst);
  lcd.setCursor(7, 1);
  lcd.print(mst);
}

// Pil Göstergesi Fonksiyonu
/*void PilGosterge(byte gelen_char) {
  lcd.createChar(1, gelen_char);
  lcd.setCursor(15, 1);
  lcd.write(1);
}*/

void loop()
{
  // Para Tanımlama Ve Kaydetme
  lldr = analogRead(ldr);
  ldr_oku = map(lldr, 0, 800, 0, 1);
  if (ldr_oku == 0) {
    myservo.write(adim);
    adim++;
    digitalWrite(ikaz, HIGH);
    delay(30);
    lldr = analogRead(ldr);
    ldr_oku = map(lldr, 0, 800, 0, 1);
    if ((ldr_oku == 1) && (adim >= 146)) {
      para = 1;
      Hesapla(para);
    } else if ((ldr_oku == 1) && (adim >= 137)) {
      para = 0.50;
      Hesapla(para);
    } else if ((ldr_oku == 1) && (adim >= 126)) {
      para = 0.25;
      Hesapla(para);
    } else if ((ldr_oku == 1) && (adim >= 119)) {
      para = 0.10;
      Hesapla(para);
    } else if ((ldr_oku == 1) && (adim >= 115)) {
      para = 0.05;
      Hesapla(para);
    }
  } else {
    myservo.write(106);
    digitalWrite(ikaz, LOW);
  }

  // Pil Ölçümü
  simdiki_zaman = millis();
  if (onceki_zaman >= 4294967295) onceki_zaman = 0;
  if (simdiki_zaman - onceki_zaman >= aralik) {
    onceki_zaman = simdiki_zaman;

    gerilim = analogRead(pil);
    Serial.print("Analog Read: ");
    Serial.println(gerilim);
    if (gerilim >= 1022)
      gerilim = 1022;

    if (gerilim <= 988)
      gerilim = 988;
    yuzde = gerilim - min_deger;
    //Serial.print("Yüzde: ");
    //Serial.println(yuzde);
    deger = (100.00 / 34.00) * yuzde;
    //Serial.print("Değer: ");
    //Serial.println(deger);

    if (deger >= 90.00) {
      //PilGosterge(pil_yuz);
      lcd.createChar(1, pil_yuz);
      lcd.setCursor(15, 1);
      lcd.write(1);
    } else if (deger >= 75.00) {
      //PilGosterge(pil_yetmisbes);
      lcd.createChar(1, pil_yetmisbes);
      lcd.setCursor(15, 1);
      lcd.write(1);
    } else if (deger >= 50.00) {
      //PilGosterge(pil_elli);
      lcd.createChar(1, pil_elli);
      lcd.setCursor(15, 1);
      lcd.write(1);
    } else if (deger >= 25.00) {
      //PilGosterge(pil_yirmibes);
      lcd.createChar(1, pil_yirmibes);
      lcd.setCursor(15, 1);
      lcd.write(1);
    } else {
      //PilGosterge(pil_on);
      lcd.createChar(1, pil_on);
      lcd.setCursor(15, 1);
      lcd.write(1);
    }

  }
}

// Para Kaydetme Fonksiyonu
void Hesapla(float gelen_para) {
  SatirTemizle(0);
  lcd.setCursor(0, 0);
  lcd.print("Son Atilan: ");
  lcd.setCursor(12, 0);
  lcd.print(gelen_para);
  Serial.print("Son Atilan: ");
  Serial.println(gelen_para);
  float toplam = EEPROM.get(0, veritipi);
  toplam += gelen_para;
  // Aşağıdaki EEPROM satırı sistem tamamen çalışır duruma gelince aktif edilecek.
  // Bu komut kapalı olduğu için sistem toplama yapmaz.
  // Sistemem tamamen hazır olduğunda aktif edilir ve toplama yapmaya başlar.
  //EEPROM.put(0, toplam);
  SatirTemizle(1);
  lcd.setCursor(0, 1);
  lcd.print("Toplam: ");
  String mst = String(toplam);
  String msst = "TL";
  mst.concat(msst);
  lcd.setCursor(7, 1);
  lcd.print(mst);
  adim = 106;
  myservo.write(adim);
  digitalWrite(ikaz, LOW);
  Serial.print("Toplam: ");
  Serial.print(toplam);
  Serial.println(" TL");
  delay(50);
}



// LCD Satır Temizleme Fonksiyonu
void SatirTemizle(int satir) {
  lcd.setCursor(0, satir);
  lcd.print("                ");
  lcd.setCursor(0, satir);
}
para atılan yerin fiziksel boyutları delik çapı v.b. özelliklerini verebilir misiniz?
 
para atılan yerin fiziksel boyutları delik çapı v.b. özelliklerini verebilir misiniz?
Paranın geçtiği yeri soruyorsanız 1tl den 2-3mm kadar büyük.
Aşağı mekanizmayı soruyorsanız hepsini en büyük para olan 1tl ye göre yaptım. Özellikle ölçü birimlerini aklımda tutmadım hiç.
Aslında hepsi 1tl baz alınarak göz kararı yapılabilir. Buradaki önemli olan tek husus paranın sort edileceği kısmın ne çok yatay nede çok dik olması lazım. Biraz dikkat isteyen bir ayar.
 
Paranın geçtiği yeri soruyorsanız 1tl den 2-3mm kadar büyük.
Aşağı mekanizmayı soruyorsanız hepsini en büyük para olan 1tl ye göre yaptım. Özellikle ölçü birimlerini aklımda tutmadım hiç.
Aslında hepsi 1tl baz alınarak göz kararı yapılabilir. Buradaki önemli olan tek husus paranın sort edileceği kısmın ne çok yatay nede çok dik olması lazım. Biraz dikkat isteyen bir ayar.
Para nasıl ayrılıyor
 
Para nasıl ayrılıyor
Paranın tanımlanması servo motorun parayı düşürene kadar adım adım ilerlemesi ve bu adımların sayılması üzerine dayanıyor.
1TL yi örnek alacak olursak, para kanala düştüğünde,
LDR ile LED'in arasına giriyor. LDR üzerine düşen ışık kesilince LDR nin direnci artıyor ve bu değeri aduino analog pininden okuyoruz.
Örneğin arduino ya diyoruz ki LDR direnci 500 olduğunda servo motor adım sayarak ilerlemeye başlasın. Bu adım sayma servonun kolu 1tl'nin önünden çekilip para düşene kadar devam ediyor.
Para düşünce LDR ye tekrar LED'in ışığı vuruyor ve LDR değeri anında düşüyor. Bu esnada da arduino ya diyoruz ki eğer LDR değeri 100'e düştüyse servo motor adım saymayı bıraksın ve kaç adım saydıysa bir değişkene aktarsın.
Mesela 1tl için 150 adım saydıysa yine arduinoya diyoruz ki eğer servo motor değeri 150 ise para_degeri değişkenine 1tl yaz.
Mesela 25 kuruş attığımızda 1tl den daha küçük olduğu için servo motor 75 adım saydığında para düşecek. Bu durumda da arduino ya diyoruz ki eğer servo motor 75 adım saydıysa para_değeri değişkenine 25krş yaz.
Tüm paraların tanımlamaları bu şekilde.

Paraların sort edilmesi (ayrılması) ise 3d yazıcıdan çıktı aldığım bir parça sayesinde oluyor.
Eğer 3d yazıcın var ise birinci mesajda stl dosyasını eklemiş olmalıyım.
Eğer 3d yazıcın yok ise karton, mukavva, dekota gibi kolay kesilen malzemelere paraların çaplarını çizip keserek aynı parçayı oluşturabilirsin.
Paraların çapları wikipedia da 1928 den günümüze kadar var. Ben senin için Günümüzdeki paraların çaplarını resimledim.

para çapları.PNG


Aşağıdaki videoyu izlersen mantığı tam olarak anlayabilirsin. Yine de aklına takılan bir şey olursa sorarsın.

 
Paranın tanımlanması servo motorun parayı düşürene kadar adım adım ilerlemesi ve bu adımların sayılması üzerine dayanıyor.
1TL yi örnek alacak olursak, para kanala düştüğünde,
LDR ile LED'in arasına giriyor. LDR üzerine düşen ışık kesilince LDR nin direnci artıyor ve bu değeri aduino analog pininden okuyoruz.
Örneğin arduino ya diyoruz ki LDR direnci 500 olduğunda servo motor adım sayarak ilerlemeye başlasın. Bu adım sayma servonun kolu 1tl'nin önünden çekilip para düşene kadar devam ediyor.
Para düşünce LDR ye tekrar LED'in ışığı vuruyor ve LDR değeri anında düşüyor. Bu esnada da arduino ya diyoruz ki eğer LDR değeri 100'e düştüyse servo motor adım saymayı bıraksın ve kaç adım saydıysa bir değişkene aktarsın.
Mesela 1tl için 150 adım saydıysa yine arduinoya diyoruz ki eğer servo motor değeri 150 ise para_degeri değişkenine 1tl yaz.
Mesela 25 kuruş attığımızda 1tl den daha küçük olduğu için servo motor 75 adım saydığında para düşecek. Bu durumda da arduino ya diyoruz ki eğer servo motor 75 adım saydıysa para_değeri değişkenine 25krş yaz.
Tüm paraların tanımlamaları bu şekilde.

Paraların sort edilmesi (ayrılması) ise 3d yazıcıdan çıktı aldığım bir parça sayesinde oluyor.
Eğer 3d yazıcın var ise birinci mesajda stl dosyasını eklemiş olmalıyım.
Eğer 3d yazıcın yok ise karton, mukavva, dekota gibi kolay kesilen malzemelere paraların çaplarını çizip keserek aynı parçayı oluşturabilirsin.
Paraların çapları wikipedia da 1928 den günümüze kadar var. Ben senin için Günümüzdeki paraların çaplarını resimledim.

12853 eklentisine bak

Aşağıdaki videoyu izlersen mantığı tam olarak anlayabilirsin. Yine de aklına takılan bir şey olursa sorarsın.

stl dosyayı bulamadım tekrar paylaşabilir misiniz?
 
stl dosyayı bulamadım tekrar paylaşabilir misiniz?
1.Mesaja ekledim.
Ayrıca thingiverse.com sitesinden çeşitli sorterlar da bulabilirsiniz.
TR Sorter için bir örnek;
 
projeyi arduino uno ile yapsam fark eder mi
Sadece kodlama sırasında pin numaralarını değiştirmen gerekebilir. Başka bir fark olmaz.
sıkıştığın noktada destek istersen yardımcı olurum buradan.
 
ldrnin önü kapandığında servo gidip gidip geliyor
Uno ile kullanırken pin numaralarına dikkat etmelisin. Eğer yanlış pine bağladıysan ve o pin normalde arduino tarafından yönetilmiyorsa (boştaysa) kafasına göre hareket edebilir. PullDown direnci kullanmak gerekir. Ayrıca devreyi breadboard üzerinde kurduysan iletişim sorunu olabilir.

Geç cevap verdiğim için kusura bakma. Nedense mesaj geldiğine dair bildirim düşmedi telefonuma.
 
Uno ile kullanırken pin numaralarına dikkat etmelisin. Eğer yanlış pine bağladıysan ve o pin normalde arduino tarafından yönetilmiyorsa (boştaysa) kafasına göre hareket edebilir. PullDown direnci kullanmak gerekir. Ayrıca devreyi breadboard üzerinde kurduysan iletişim sorunu olabilir.

Geç cevap verdiğim için kusura bakma. Nedense mesaj geldiğine dair bildirim düşmedi telefonuma.
pinleri düzeltmeme rağmen aynı şekilde devam ediyor. breadboarda kurulu değil. ldr led ve servonun yerlerinin taslağı varsa atabilir misiniz?
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,788
Mesajlar
99,000
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top