Yine olmadı ama bu şeekildde bağlantılarınıda yaptım

7231 eklentisine bak7232 eklentisine bak
Şunu bul;
C:
lldr = analogRead(ldr);
Hemen altına şu kodları yapıştır;
C:
Serial.print("LDR Gelen Değer: ");
Serial.println(lldr);

Sonra Serial monitörü açıp baud rate kısmını 115200'e ayarla.
Sistemi çalıştır ve serial monitörü takip et bakalım LDR den veri geliyor mu?
 
Güncelleme...

1)
Kodları biraz düzenledim. Pil karakterini lcd ye yazmak için if içinde gereksiz tekrar eden kodlar vardı. Onları fonksiyona atadım.
2) Para kanaldan çıkmadan ikinci bir para atılmasın diye ikaz ledi yerleştirdim. Bu led para kanala atıldığında yanıyor, kanaldan çıktığında sönüyor.
Aslında çok gerek yoktu. En büyük para olan 1TL'nin kanaldan çıkması 2 saniye sürüyor. Diğerleri daha az. Yine de bulunsun istedim.
3) Arduino Uno da testlerini gerçekleştirdiğim sistemi Arduino Nano da kullanacağım için pinleri Nanoya göre ayarladım.
4) Son olarak gerektiğinde nanoyu söküp takabilmek için kablo bağlantılarını sabitleyebileceğim Shield Çizdim.

Nano Sheld.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(8, 1);
  lcd.print(mst);
}


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

  // 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);
    } else if (deger >= 75.00) {
      PilGosterge(pil_yetmisbes);
    } else if (deger >= 50.00) {
      PilGosterge(pil_elli);
    } else if (deger >= 25.00) {
      PilGosterge(pil_yirmibes);
    } else {
      PilGosterge(pil_on);
    }

  }
}

// 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(8, 1);
  lcd.print(mst);
  adim = 106;
  myservo.write(adim);
  digitalWrite(ikaz, LOW);
  Serial.print("Toplam: ");
  Serial.print(toplam);
  Serial.println(" TL");
  delay(50);
}

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

// LCD Satır Temizleme Fonksiyonu
void SatirTemizle(int satir) {
  lcd.setCursor(0, satir);
  lcd.print("                ");
  lcd.setCursor(0, satir);
}

@Chnshn16 Sende durum ne? Son hatayı bulabildin mi?
 
Güncelleme...

1)
Kodları biraz düzenledim. Pil karakterini lcd ye yazmak için if içinde gereksiz tekrar eden kodlar vardı. Onları fonksiyona atadım.
2) Para kanaldan çıkmadan ikinci bir para atılmasın diye ikaz ledi yerleştirdim. Bu led para kanala atıldığında yanıyor, kanaldan çıktığında sönüyor.
Aslında çok gerek yoktu. En büyük para olan 1TL'nin kanaldan çıkması 2 saniye sürüyor. Diğerleri daha az. Yine de bulunsun istedim.
3) Arduino Uno da testlerini gerçekleştirdiğim sistemi Arduino Nano da kullanacağım için pinleri Nanoya göre ayarladım.
4) Son olarak gerektiğinde nanoyu söküp takabilmek için kablo bağlantılarını sabitleyebileceğim Shield Çizdim.

7264 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(8, 1);
  lcd.print(mst);
}


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

  // 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);
    } else if (deger >= 75.00) {
      PilGosterge(pil_yetmisbes);
    } else if (deger >= 50.00) {
      PilGosterge(pil_elli);
    } else if (deger >= 25.00) {
      PilGosterge(pil_yirmibes);
    } else {
      PilGosterge(pil_on);
    }

  }
}

// 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(8, 1);
  lcd.print(mst);
  adim = 106;
  myservo.write(adim);
  digitalWrite(ikaz, LOW);
  Serial.print("Toplam: ");
  Serial.print(toplam);
  Serial.println(" TL");
  delay(50);
}

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

// LCD Satır Temizleme Fonksiyonu
void SatirTemizle(int satir) {
  lcd.setCursor(0, satir);
  lcd.print("                ");
  lcd.setCursor(0, satir);
}

@Chnshn16 Sende durum ne? Son hatayı bulabildin mi?
Abi benim telefon bozuldu yoğundum biraz telefonun yeni geldi cevap veremedim kusura bakma son attığın serial la deneyip geri dönüş yapıcam bide en son paylaştığın devre şemasını uno ile bağlayıp yapsam sıkıntı olurmu
 
Abi benim telefon bozuldu yoğundum biraz telefonun yeni geldi cevap veremedim kusura bakma son attığın serial la deneyip geri dönüş yapıcam bide en son paylaştığın devre şemasını uno ile bağlayıp yapsam sıkıntı olurmu
Son attığımı kullanma ben onu nano ya göre ayarladım. Bir öncekini kullan sen.
 
Normalde gelen değer 1 olarak gösteriyor
Ldr ile led in arasına birşey koyduğumda değer 0 a düşüyor ama ne servo motor hareket ediyor neden lcd de para ile alakalı bir değişim oluyor
IMG_20210116_144655.jpg
IMG_20210116_144702.jpg
IMG_20210116_144706.jpg
 
Last edited by a moderator:
Normalde gelen değer 1 olarak gösteriyor
Ldr ile led in arasına birşey koyduğumda değer 0 a düşüyor ama ne servo motor hareket ediyor neden lcd de para ile alakalı bir değişim oluyor7311 eklentisine bak7312 eklentisine bak7313 eklentisine bak
Void setup içinde servonun konumunu 106'ya ayarladık. Bu konumu 160 olarak değiştir ve servoyu takip et. Bak bakalım eski konumunu değiştirecek mi? Böylece servoyu da test etmiş olalım.

Şuan da servo çalışmadığı için kodun devamı işlemez. Önce servoyu çalıştıralım.
 
Void setup içinde servonun konumunu 106'ya ayarladık. Bu konumu 160 olarak değiştir ve servoyu takip et. Bak bakalım eski konumunu değiştirecek mi? Böylece servoyu da test etmiş olalım.

Şuan da servo çalışmadığı için kodun devamı işlemez. Önce servoyu çalıştıralım.
Servo belli konumda başlıyor devreye ejerji gelince 180 derece dönüyor ve adım adım tekrar geri geri başladığı konuma dönüyor bunun dışında bir hareket yok
 
Servo belli konumda başlıyor devreye ejerji gelince 180 derece dönüyor ve adım adım tekrar geri geri başladığı konuma dönüyor bunun dışında bir hareket yok
Peki enerjiyi hiç kesmeden dediğim işlemi yap.
106 olan kodu 160 yap ve karta yükle. Bu sırada enerji hep var olsun. Yükleme tamamlandığında servo anlık hareket ile 160'a dönmesi lazım. Öyle adım adım değil, bir anda dönmesi lazım.
 
Evet enerjii yi kesmeden yaptım kod yüklendiğinde 160 derece döndü tek seferde ama ilk başladığı konuma geri dönüyor yine adım adım
Peki enerjiyi hiç kesmeden dediğim işlemi yap.
106 olan kodu 160 yap ve karta yükle. Bu sırada enerji hep var olsun. Yükleme tamamlandığında servo anlık hareket ile 160'a dönmesi lazım. Öyle adım adım değil, bir anda dönmesi lazım
 
Evet enerjii yi kesmeden yaptım kod yüklendiğinde 160 derece döndü tek seferde ama ilk başladığı konuma geri dönüyor yine adım adım
Servonun çalışma mantığı şöyle;
Enerjiyi ilk aldığında 0 konumuna çeker kendini.
Herhangi bir müdahale olmazsa bekler.
Şimdi senin unoda 160 derece kod var.
Enerjiyi kesmediğine göre burada bekliyor olmalı.
Eğer enerjiyi kesmeden kodu 0 yapıp yüklersen direk 0'a çekmesi lazım.

Ama sen diyorsun ki ilk başta konuma gidiyor sonra adım adım geri dönüyor. Burada bir sorun var. Elinde başka bir servo var mı? Yada servo tester cihazın var mı?
 
Servonun çalışma mantığı şöyle;
Enerjiyi ilk aldığında 0 konumuna çeker kendini.
Herhangi bir müdahale olmazsa bekler.
Şimdi senin unoda 160 derece kod var.
Enerjiyi kesmediğine göre burada bekliyor olmalı.
Eğer enerjiyi kesmeden kodu 0 yapıp yüklersen direk 0'a çekmesi lazım.

Ama sen diyorsun ki ilk başta konuma gidiyor sonra adım adım geri dönüyor. Burada bir sorun var. Elinde başka bir servo var mı? Yada servo tester cihazın var mı?
Eski bir servo buldum ama onuda devreye bağladığımda devrenin enerjisini kesiyor servoda bir sıkıntı var heralde
 
Eski bir servo buldum ama onuda devreye bağladığımda devrenin enerjisini kesiyor servoda bir sıkıntı var heralde
Peki o zaman şöyle yapalım.
Unoyu servo tester olarak kodlayalım.
Butün kodları silip sadece tester gibi çalışacak kodları yazalım. Sen istersen kodlamayı bir dene. Olmazsa ben 19:00 gibi evde olacağım. Yazar gönderirim.
 
Ben denerim yazmayı yapabilirsem atarım sonuçları bide şu yazı dikkatimi çekti anlamadımda nedir bu gökhan abi
 

Ekler

  • 16108012723417011648872183613075.jpg
    16108012723417011648872183613075.jpg
    594 KB · Görüntüleme: 99
Ben denerim yazmayı yapabilirsem atarım sonuçları bide şu yazı dikkatimi çekti anlamadımda nedir bu gökhan abi
Eeepromun belirli bir yazma ömrü var. O ömrünü gereksiz tüketmemek için test aşamasında kapattım. Kırmızı ile çevirdiğim satırın başındaki // ları kaldırırsan kod aktif olur, kumbaraya attığın paraları eeproma yazarak toplamaya başlar.
O kodu kumbarayı tamamlayıp kapatma aşamasına gelince aktif edeceğiz.

20210116_155041.jpg
 
@Chnshn16 servo tester kodu.

Arduino servo tester:
#include <Servo.h>

Servo myservo;

void setup() {
  myservo.attach(8);
}

void loop() {
 
  myservo.write(0);
  digitalWrite(13, HIGH);
  delay(1000);           
  digitalWrite(13, LOW);
  myservo.write(180);
  delay(1000);
}
 
Benim burada bir problemim var.
"VIN" ve "GND" ye 6v 12ah aküden enerji veriyorum.
Servoyu çalıştırmak için Trimpottan gelen 5v'u kullanıyorum ama çalışmıyor.
Nano üzerindeki 5v'u kullanırsam çalışıyor. GND ler de ortak olduğuna göre sorun ne olabilir?
servoz.png
 
Son düzenleme:

Forum istatistikleri

Konular
5,891
Mesajlar
100,578
Üyeler
2,494
Son üye
yasin533

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
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 :)
Back
Top