Gokrtl

Gökhan Kartal
Mesajlar
4,044
Yaş
36
Konum
Antalya
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
Nano Sheld.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: 10
Son düzenleme:

Sercan

Yönetici
Staff member
Mesajlar
1,627
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
 

taydin

Timur Aydın
Staff member
Mesajlar
8,998
O sensör zaten var sende :D

 

Gokrtl

Gökhan Kartal
Mesajlar
4,044
Yaş
36
Konum
Antalya
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.
 

taydin

Timur Aydın
Staff member
Mesajlar
8,998
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.
 

Gokrtl

Gökhan Kartal
Mesajlar
4,044
Yaş
36
Konum
Antalya
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ü
 

pwm.c

Kayıtlı Üye
Mesajlar
40
Konum
Ankara
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: 25

taydin

Timur Aydın
Staff member
Mesajlar
8,998
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
 

Endorfin35+

Apartman Kapıcısı
Mesajlar
1,502
Konum
İzmir
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.
 

Gokrtl

Gökhan Kartal
Mesajlar
4,044
Yaş
36
Konum
Antalya
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.
 

taydin

Timur Aydın
Staff member
Mesajlar
8,998
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.
 

Endorfin35+

Apartman Kapıcısı
Mesajlar
1,502
Konum
İzmir
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.
 

Gokrtl

Gökhan Kartal
Mesajlar
4,044
Yaş
36
Konum
Antalya
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.

 

Endorfin35+

Apartman Kapıcısı
Mesajlar
1,502
Konum
İzmir
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.
 

Gokrtl

Gökhan Kartal
Mesajlar
4,044
Yaş
36
Konum
Antalya
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
 
Top