Gokrtl

Gökhan Kartal (TeknoDay)
Staff member
Katılım
27 Şubat 2019
Mesajlar
11,180
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.



20210125_212605.jpg
20210125_212613.jpg
20210125_212626.jpg
20210125_212651.jpg


Arduino Nano Shield
Kumbara Ares.PNG



Test Aşamaları
tek_servo.png


Servo, LED ve LDR Bağlantı şeması
tinkercad_kumbara.png



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);
}
 

Ekler

  • Kumbara.zip
    137.2 KB · Görüntüleme: 366
  • Sorter_Customizer.stl
    65.5 KB · Görüntüleme: 238
Son düzenleme:
Ben çocuğa şöyle bir kumbara aldım. Arada heves edip ben de para yatırıyorum çok keyifli. Tek bir bozuk para girişi var tümünü tanıyor. Muhtemelen boyutuna göre ne kadar olduğunu tanıyor.

image.jpg
 
Bir de vakti ile şöyle birşey izlemiştim

 
O sensör zaten var sende :D

 
O sensör zaten var sende :D

Abi bu aklıma geldi de hem üstünden zaman geçince çalışma mantığını unuttum hemde daha küçük transistör gibi bir eleman vardı sanırım. Onu hatırlayamadım.
 
Abi bu aklıma geldi de hem üstünden zaman geçince çalışma mantığını unuttum hemde daha küçük transistör gibi bir eleman vardı sanırım. Onu hatırlayamadım.

Fotodiyot var, IR alıcılar var, fototransistör var. Velhasıl "foto" olan birçok elektronik komponent var.
 
Bu sensör olayları biraz fazla çeşitli sanırım. Ben tek komponent kullanarak yapmak istiyorum bu işi. Bu fotodiyotların, ır sensörlerin filan karşılıklı çalışan bir yapısı var. Verici, alıcıya ışık yansıtıyor. Eğer bu ışığı kesen bir cisim önünden geçerse iletime geçiyor.

Bunun yerine Pır sensör denilen bir hareket sensörü buldum. (Aşağıya linkini ekliyorum.)
Bu tekbaşına çalışıyor ama çalışma prensibi ortamdaki ısı değişimini algılayarak oluyor. Bu durumda madeni bir paranın ısı değişimine etkisi olur mu bilemiyorum.
Bu konuda düşünceleriniz nelerdir?

D203S PIR Hareket Sensörü
 
eskiden PIC ile yapılmış böyle bir proje vardı. sensör olarak CNY70 kullanılmış. dosyaları arşivden buldum bir incele bakalım.
devre_semasi.jpg
 

Ekler

  • dijital kumbara.zip
    815.7 KB · Görüntüleme: 220
Niye ayrı ayrı ışık kaynağı ve ışık algılayıcı arıyorsun? TCST2103 nin içinde hem ışık kaynağı var hem ışık algılayıcı. Bir de bonus olarak paranın geçeceği yarık da var :D
 
Optik yarıklı sensörün Fiyatı abartmışlar. Çok kullanılmıyor diye sanırım. Yoksa önerim o olurdu. En kötü yarık küçük geliyorsa kır ortadan yine kullan.
 
Niye ayrı ayrı ışık kaynağı ve ışık algılayıcı arıyorsun? TCST2103 nin içinde hem ışık kaynağı var hem ışık algılayıcı. Bir de bonus olarak paranın geçeceği yarık da var :D
Abi para onun arasından geçecek şekilde düşmüyor. Yan olarak düşüyor. Sercanın gönderdiği videoya bakabilirsin. Bunu kullanmak için her parayı ayrı deliğe atmam gerekir. Ama ben parayı tek delikten atıcam o gidip yolunu bulacak. Birde diğer konudan hatırlarsan bakır plaket bu elemanı tetiklemiyordu. Karton ile tetiklemiştim. Acaba madeni maddeler ile çalışmıyor mu diye düşünüyorum.
 
Abi para onun arasından geçecek şekilde düşmüyor. Yan olarak düşüyor. Sercanın gönderdiği videoya bakabilirsin. Bunu kullanmak için her parayı ayrı deliğe atmam gerekir. Ama ben parayı tek delikten atıcam o gidip yolunu bulacak. Birde diğer konudan hatırlarsan bakır plaket bu elemanı tetiklemiyordu. Karton ile tetiklemiştim. Acaba madeni maddeler ile çalışmıyor mu diye düşünüyorum.

Yok ben onu şöyle düşünmüştüm: Bu çatal sensörün arasından demir paralar geçecek. En büyük para ışığı tamamen keserken, bir sonrakinde biraz ışık geçecek. Bir sonrakinde biraz daha fazla ışık geçecek vs. Neticede ışık şiddetine göre sınıflandıracaksın.
 
Yok ben onu şöyle düşünmüştüm: Bu çatal sensörün arasından demir paralar geçecek. En büyük para ışığı tamamen keserken, bir sonrakinde biraz ışık geçecek. Bir sonrakinde biraz daha fazla ışık geçecek vs. Neticede ışık şiddetine göre sınıflandıracaksın.
Ben bu sensörden bolca kullanıyorum. Normalde Öyle çalıştırmassın. Merkezden nokta atışı yapar karışa... Yarı sağdam malzeme sokarsan araya o zaman sağdamlığa göre değer okursun.
 
eskiden PIC ile yapılmış böyle bir proje vardı. sensör olarak CNY70 kullanılmış. dosyaları arşivden buldum bir incele bakalım.
6043 eklentisine bak
Bununla ilgili aşağıdaki videoyu buldum. PIC kısmı hariç sensörü ve entegreyi çok iyi anlatmış. Ama sensör sadece siyah ve beyazı tanıyorsa parayı nasıl ayırt edecek onu anlamadım.

 
Siyah beyaz dediğine bakma. Yansımayı algılar. Kontrast renkler arasında yansıma farkı çok olduğu siyah beyaz ile sorunsuz çalışır. Senin beyaz malzeme üzerinde para parlak olduğu için rahat algılar tahminimce.
 
Siyah beyaz dediğine bakma. Yansımayı algılar. Kontrast renkler arasında yansıma farkı çok olduğu siyah beyaz ile sorunsuz çalışır. Senin beyaz malzeme üzerinde para parlak olduğu için rahat algılar tahminimce.
Deneyeceğim. Bir kaç çeşit sensör tespit edip denemeler yapacağım. Ayrıca aşağıya resmini eklediğim butonu da düşünüyorum. Bu buton ile hiç bir zahmete girmeden halledebilirim işi. Tek yapmam gereken parayı önce bunun üzerine sonrada birikeceği hazneye düşürmek.


images (3).jpeg
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,653
Mesajlar
97,278
Üyeler
2,438
Son üye
İbrahimSönmez

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