Arduino ile Para Sayan Kumbara

Adam hakkini vermis iste. Yok bu sensor okumuyo falan filan yok. Catir catir dusuyor paralar. :p:D
Ben sonradan sensörün bacağındaki direnç değeri ile oynayarak algılamasını artırmayı öğrendim ama 5 tane sensör kullanmam gerekliydi.
5 sensör 30tl para ama servo 10tl, ldr 25 kuruş. 30TL ye 5 ayrı delikten okumak mı? yoksa 10.25 TL ye tek kanaldan okumak mı?
Hem ldr yi de sen önerdin bana. Niye şimdi yan çiziyon ki :katil2:
 
merhabalar yapılan proje cok güzel olmuş herkesin eline sağlık yazılım kütüphanelerini nereden bulabilirim projeyi yapmak istiyorum
 
merhabalar yapılan proje cok güzel olmuş herkesin eline sağlık yazılım kütüphanelerini nereden bulabilirim projeyi yapmak istiyorum
Kod:
#include <Servo.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>

Servo ve LCD ekran kütüphanesini arduino programında aratarak yükleyebilirsin.
EEPROM kütüphanesi zaten arduino içinde kurulu geliyor.
 
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
7675 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 hayırlı günler kodlama da 3. satırda hata veriyor acil yardımcı olurmusuz
 
hata ilk 3. satır hocam
 

Ekler

  • hata.png
    hata.png
    76.9 KB · Görüntüleme: 124
hocam benim bu koda ihtiyacım var cok acil durumda
Bu kadar acil olan ne?
Ödev olarak mı seçtin projeyi?
Görünüşe göre kütüphaneyi eklememişsin, yada yanlış yere eklemişsin. Birinci mesajdaki zipli dosyayı indir. İçinde o kütüphane var.
BELGELERİM-->ARDUINO - - >LIBRARY içine ekle.
 
hocam şuan bir sorunum daha var ldr ile kırmızı led ışık uyuşmuyor sebebi ise ldr nin algılamaması ve servo motoru harekete geçirmemesi ayrıca ilk açıldıgında lcd ekranda bişeyler yazması lazım degilmiydi
 
hocam şuan bir sorunum daha var ldr ile kırmızı led ışık uyuşmuyor sebebi ise ldr nin algılamaması ve servo motoru harekete geçirmemesi ayrıca ilk açıldıgında lcd ekranda bişeyler yazması lazım degilmiydi
Ekran ilk açıldığında void setup kısmındaki kodlar çalışır. LDR nin çalıştığını serial ekrandan test et.
 

Forum istatistikleri

Konular
7,577
Mesajlar
126,723
Üyeler
3,070
Son üye
Fuat

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
az bilgili çok meraklı
Back
Top