emre_kocer
Üye
- Katılım
- 11 Haziran 2021
- Mesajlar
- 14
Nasıl yani Hocam gerçekten zorladı beni daha açıklayıcı bir şekilde anlatırmısınız Hocam
Nasıl yani Hocam gerçekten zorladı beni daha açıklayıcı bir şekilde anlatırmısınız Hocam
Senin orada neler yaptığını göremiyorumki.Hocam ldr çalışıyor lakin ışığa duyarlı değil servo da tam sizin yaptığınız gibi çalışmıyor kafasına göre hareket ediyor
HOcam LCD bağlantıları nasıl peki görsellerde yok acaba hata ordamı
Breadoard üzerinde harici bir devre kur. sadece servoyu test et. Çalışıyorsa devreye doğru bağladığına emin ol.Çünkü servo adım saymıyor sorun orda
para atılan yerin fiziksel boyutları delik çapı v.b. özelliklerini verebilir misiniz?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
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); }
Paranın geçtiği yeri soruyorsanız 1tl den 2-3mm kadar büyük.para atılan yerin fiziksel boyutları delik çapı v.b. özelliklerini verebilir misiniz?
Para nasıl ayrılıyorParanın geçtiği yeri soruyorsanız 1tl den 2-3mm kadar büyük.
Aşağı mekanizmayı soruyorsanız hepsini en büyük para olan 1tl ye göre yaptım. Özellikle ölçü birimlerini aklımda tutmadım hiç.
Aslında hepsi 1tl baz alınarak göz kararı yapılabilir. Buradaki önemli olan tek husus paranın sort edileceği kısmın ne çok yatay nede çok dik olması lazım. Biraz dikkat isteyen bir ayar.
Paranın tanımlanması servo motorun parayı düşürene kadar adım adım ilerlemesi ve bu adımların sayılması üzerine dayanıyor.Para nasıl ayrılıyor
stl dosyayı bulamadım tekrar paylaşabilir misiniz?Paranın tanımlanması servo motorun parayı düşürene kadar adım adım ilerlemesi ve bu adımların sayılması üzerine dayanıyor.
1TL yi örnek alacak olursak, para kanala düştüğünde,
LDR ile LED'in arasına giriyor. LDR üzerine düşen ışık kesilince LDR nin direnci artıyor ve bu değeri aduino analog pininden okuyoruz.
Örneğin arduino ya diyoruz ki LDR direnci 500 olduğunda servo motor adım sayarak ilerlemeye başlasın. Bu adım sayma servonun kolu 1tl'nin önünden çekilip para düşene kadar devam ediyor.
Para düşünce LDR ye tekrar LED'in ışığı vuruyor ve LDR değeri anında düşüyor. Bu esnada da arduino ya diyoruz ki eğer LDR değeri 100'e düştüyse servo motor adım saymayı bıraksın ve kaç adım saydıysa bir değişkene aktarsın.
Mesela 1tl için 150 adım saydıysa yine arduinoya diyoruz ki eğer servo motor değeri 150 ise para_degeri değişkenine 1tl yaz.
Mesela 25 kuruş attığımızda 1tl den daha küçük olduğu için servo motor 75 adım saydığında para düşecek. Bu durumda da arduino ya diyoruz ki eğer servo motor 75 adım saydıysa para_değeri değişkenine 25krş yaz.
Tüm paraların tanımlamaları bu şekilde.
Paraların sort edilmesi (ayrılması) ise 3d yazıcıdan çıktı aldığım bir parça sayesinde oluyor.
Eğer 3d yazıcın var ise birinci mesajda stl dosyasını eklemiş olmalıyım.
Eğer 3d yazıcın yok ise karton, mukavva, dekota gibi kolay kesilen malzemelere paraların çaplarını çizip keserek aynı parçayı oluşturabilirsin.
Paraların çapları wikipedia da 1928 den günümüze kadar var. Ben senin için Günümüzdeki paraların çaplarını resimledim.
Türkiye Cumhuriyeti madenî paraları - Vikipedi
tr.wikipedia.org
12853 eklentisine bak
Aşağıdaki videoyu izlersen mantığı tam olarak anlayabilirsin. Yine de aklına takılan bir şey olursa sorarsın.
1.Mesaja ekledim.stl dosyayı bulamadım tekrar paylaşabilir misiniz?
Sadece kodlama sırasında pin numaralarını değiştirmen gerekebilir. Başka bir fark olmaz.projeyi arduino uno ile yapsam fark eder mi
Uno ile kullanırken pin numaralarına dikkat etmelisin. Eğer yanlış pine bağladıysan ve o pin normalde arduino tarafından yönetilmiyorsa (boştaysa) kafasına göre hareket edebilir. PullDown direnci kullanmak gerekir. Ayrıca devreyi breadboard üzerinde kurduysan iletişim sorunu olabilir.ldrnin önü kapandığında servo gidip gidip geliyor
pinleri düzeltmeme rağmen aynı şekilde devam ediyor. breadboarda kurulu değil. ldr led ve servonun yerlerinin taslağı varsa atabilir misiniz?Uno ile kullanırken pin numaralarına dikkat etmelisin. Eğer yanlış pine bağladıysan ve o pin normalde arduino tarafından yönetilmiyorsa (boştaysa) kafasına göre hareket edebilir. PullDown direnci kullanmak gerekir. Ayrıca devreyi breadboard üzerinde kurduysan iletişim sorunu olabilir.
Geç cevap verdiğim için kusura bakma. Nedense mesaj geldiğine dair bildirim düşmedi telefonuma.
pinleri düzeltmeme rağmen aynı şekilde devam ediyor. breadboarda kurulu değil. ldr led ve servonun yerlerinin taslağı varsa atabilir misiniz?
Bağlantı şeması değil kumbarada olan yerlerinin konumunun