Arduino ile Para Sayan Kumbara

şöle göstereyim ne ekran geliyor ne servo çalışıyor

21517 eklentisine bak


Az önce bir direnç çıkardım ve şu şekil çalışmaya başladı

21519 eklentisine bak
Kabloları takip etmeye çalıştım ama tam göremedim. Devreye ekstra güç verdin mi? Vermediysen unonun gücü hem ekrana hem servoya yetmez. en azından sadece servoya harici bir 5v güç bağla. Bağladığın 5v'un GND kablosunu da arduino GND si ile birleştir ve tekrar çalıştırmayı dene.
 
Konuyu hortlatayım biraz. :)

Aşağıda gördüğünüz avuç içi kadar cihaz her türlü parayı boyutuna göre tanıyabiliyor.
Uzun zaman önce çizip 3D yazıcı ile basmıştım. Yeni bir kumbara projesine bir türlü fırsat olmadı. Bunu damacana ağzı için çizilmiş yuvarlak başka bir parça ile birleştirip kumbara yapmayı planlıyordum. Ne zaman kısmet olursa artık.

Mantık diğer kumbaradaki ile aynı. Kanala atılan para LDR ile LED arasına girince servo adım adım kapağı açmaya başlıyor.

Kanal yeterince açıldığında para düşüyor ve bu sayede LDR ile LED birbirini görünce servo başlangıç konumuna dönerek kapağı kapatıyor. Bu arada servonun gittiği son adım da parayı tanımlayan değer oluyor.

Örnek: 1₺ atıldı kanala. Servo 20 adım gitti ve başlangıç konumuna döndü. O zaman atılan 1₺ yi "20" olarak tanımlıyoruz.
if(servo == 20){ atilan_para = 1; } gibi.

Ekran görüntüsü 2024-01-05 223916.png


20240105_223037.jpg


20240105_222938.jpg


20240105_223012.jpg
 
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


Kod:
#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);
}
Hocam 1 gün içerisinde akıllı kumbara için sistem devresi kurmam lazım en son ki devre varmı veya video
 

Forum istatistikleri

Konular
7,541
Mesajlar
126,340
Üyeler
3,054
Son üye
rikvipart

Son kaynaklar

Son profil mesajları

Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
Back
Top