Şimdi yazarak önümü görmeye çalışacağım.

millis() fonksiyonu tam olarak 47,5 gün sonra sıfırlanıyor. Bu rakam milisaniye cinsinden 4294967295 ms yapıyor.
Benim simdiki_zaman değişkenim bu rakama ulaştığında 0'a dönüyor.
Bu işlem gerçekleştiği anda şimdiki_zaman = 0 onceki_zaman = 4294967295 oluyor.
O zaman if bloğum şu hale geliyor if(-4294967295 >= 32000)
Bu durum da koşul sağlanamadığından if bloğuna girmeden sistem devam edip başa dönüyor.
Sistem if bloğuna girmediği için simdiki_zaman = onceki_zaman ataması gerçekleşmediği için onceki_zaman değişkenimin içinde hala 4294967295 rakamı var. Bu durumda da simdiki_zaman değişkenim 47,5 gün sonra bu rakama ulaşacağı için if bloğuna bu süre zarfında hiç girmeyecek. Ve zamanı geldiğin de if bloğu if(4294967295 >= 32000) haline gelip bloğun içine girecek ve bu vesile ile de 47,5 günde bir dönen kısır döngü oluşacak.
O zaman yapmamız gereken simdiki_zaman değişkeni sıfıra döndüğün de onceki_zaman değişkenini de sıfıra döndürmek. Beynim yandı yine. Yazmasam hayatta içinden çıkamazdım. Hoş şuanda da emin değilim ya. :katil2:
 
millis unsigned long döndürüyor, sen de doğru veri türü olan unsigned long olarak saklıyorsun. İkisinin farkı yine unsigned long olacak. 0UL - 4294967295UL işlemi 1UL döndürecek. Tek dikkat etmen gereken şey karşılaştırma işleminin sağ tarafındaki sayının da unsigned long olduğuna emin olmak. Yani kod "if (simdiki_zaman - onceki_zaman >= 10000UL)" şeklinde ise hiçbir sorun yok.
 
millis unsigned long döndürüyor, sen de doğru veri türü olan unsigned long olarak saklıyorsun. İkisinin farkı yine unsigned long olacak. 0UL - 4294967295UL işlemi 1UL döndürecek. Tek dikkat etmen gereken şey karşılaştırma işleminin sağ tarafındaki sayının da unsigned long olduğuna emin olmak. Yani kod "if (simdiki_zaman - onceki_zaman >= 10000UL)" şeklinde ise hiçbir sorun yok.
C:
 simdiki_zaman = millis();
  if(onceki_zaman >= 4294967295) onceki_zaman = 0; //Bu satırdaki kod çözer mi sorunu?
  if (simdiki_zaman - onceki_zaman >= aralik) {
    onceki_zaman = simdiki_zaman;
 
Dün biraz bu konu ile de ilgilendim. LDR ile para tanımlama kısmında, paranın kayabilmesi için kabinin eğimli olması gerekiyor. LDR boşta 800 analog değer okurken 1tl para geçişi sırasında sadece 779'a düşüyor. 50 krş geçişinde ise 778 oluyor. Oysa bu iki para arasında neredeyse yarım boy fark var.

Farkettim ki burada önemli olan paranın geçiş hızı. Eğimden dolayı para hızlı geçince LDR direncini düşüremeden tekrar ışığa kavuşuyor.
Eğimi de zaten minimum seviyede tutmuştum. Biraz kaldırsam para kaymıyor içeride.
Tam bu noktada tıkandım ve fikirlere açığım.
 
Bu kodu denedin mi?

{... loop

int nihai_tespit =1024;
int okunan_deger=0;

while (analog_read < 800) // 800 den küçük okuma yakalandı while döngüsüne gir.
{
okunan_değer =analogread; // okuma yap
if ( okunan_deger < nihai_tespit ) nihai_tespit =okunan_deger; // yeni okunan değer daha küçükse onu referans al.
} // 800 den büyük okuyor artık para geçti gitti en küçük okumayı tespit ettik.

if ( 550 > nihai_tespit and nihai_tespit > 450 ) serialprint("okunan 50 kuruş");
if ( 750 > nihai_tespit and nihai_tespit > 650 ) serialprint("okunan 1TL");


loop ...}


Sürekli serial print yaparsan sistem yavaşlar. Bence LDR nin direnci düşüyordur aslında sadece onu yakalayamıyorsun.
 
Bu kodu denedin mi?

{... loop

int nihai_tespit =1024;
int okunan_deger=0;

while (analog_read < 800) // 800 den küçük okuma yakalandı while döngüsüne gir.
{
okunan_değer =analogread; // okuma yap
if ( okunan_deger < nihai_tespit ) nihai_tespit =okunan_deger; // yeni okunan değer daha küçükse onu referans al.
} // 800 den büyük okuyor artık para geçti gitti en küçük okumayı tespit ettik.

if ( 550 > nihai_tespit and nihai_tespit > 450 ) serialprint("okunan 50 kuruş");
if ( 750 > nihai_tespit and nihai_tespit > 650 ) serialprint("okunan 1TL");


loop ...}


Sürekli serial print yaparsan sistem yavaşlar. Bence LDR nin direnci düşüyordur aslında sadece onu yakalayamıyorsun.
Denedim 5 farklı madeni para geçişi sırasında komple ldr direnci 779 ile 776 arasında oynadığı için sağlıklı bir aralıkta tespit yapamadım.
Anlamadımki delay koyunca beklediği için yakalayamıyoruz, delay koymayınca çok hızlı akış olduğu için okuyamıyoruz. Nasıl olacak bu iş?
 
Şöyle bir şey olabilir mi? Biz analog okumaya 800 den küçük değeri oku diyoruz. O da para geçişi sırasın da 800 den küçük olan ilk değeri okuyup alıyor. Geri kalan daha küçük değerler ise yok oluyor arada. Eğer durum böyleyse bizim ilk küçük değeri değil en küçük değeri almamız lazım.
 
Gerçi senin kodlar en küçük değeri alana kadar while dönsün diye kodlanmış...

Kafama takılan 3 farklı konu daha var.
Birincisi bendeki ldr yaklaşık 1 kuruş büyüklüğünde. Acaba daha küçük ldr mi kullanmak lazım?
İkincisi bu ldr ye 10k direnç takılıyor. Acaba direncin değeri mi farklı olmalı?
Üçüncüsü led. Acaba küçücük bir kutu için çok mu parlak yanıyor? Direnç ile biraz düşürsek mi?
 
Son düzenleme:
Bak sana güzel bir prensip
Bozuk para ne kadar büyükse o kadar büyük direnç okunur.

Vaay bunu çok beğendim ama mekanizmayı yapabilecek kadar kabiliyetli miyim bilmiyorum. Ama gerçekten çok iyi sistem.
 
LDR nin tepki hızı bu uygulama için yeter de artar. Başka temel bir problem var gibi.
 
Last edited by a moderator:
Valla aklıma yukarıdaki 3 maddeden başka birşey de gelmiyor abi.

Daha önce delay'leri kaldırınca geçiş anı için onlarca değer okumuştun. Demekki gene bir yerlere büyük bir delay koydun.
 
Yanlış anlamazsanız birşey soracağım.
Bu LDR ile parayı algılamanın mantığı ne ? Paranın üstündeki parlaklık seviyesimi algılanmaya çalışılıyor ?
Ben hala anlamadım
 
Daha önce delay'leri kaldırınca geçiş anı için onlarca değer okumuştun. Demekki gene bir yerlere büyük bir delay koydun.
Yok abi kodları tamamen sildim. Hiç delay yok. Sadece şuanda endorfinin kodları var. Onları evirip çevirdim bir sonuca ulaşamadım. Akşama kurcalamaya devam edicem. Omega abinin videodaki mekanizma çok hoşuma gitti. Belki son çare o mekanizmaya yoğunlaşırım.
 
Yanlış anlamazsanız birşey soracağım.
Bu LDR ile parayı algılamanın mantığı ne ? Paranın üstündeki parlaklık seviyesimi algılanmaya çalışılıyor ?
Ben hala anlamadım
Abi ldr yi bir çukura gömdük. Karşısına da led koyduk. Para geçerken ldr ile led arasından geçiyor ve paranın geçişi sırasında ldr karanlıkta kalıyor. Bu sayede ldr nin aldığı değeri okumaya çalışıyoruz. Daha küçük bir para atarsak ldr nin çukuruna bir miktar ışık sızıyor ledden. Ona göre değer alıyor. Mantık bu.
 
Gölgeye göre tespit
Yav gölgeye göre nasıl tespit edilecek .Işık kaynağının şiddeti sabit.Hani deseniz ki iki tane LED 2 tane LDR var karşılarında aralarındada mesafe 2 cm Işığın kesildiği andan ışıığın geldiği ana kadarki süreyi tutuyor.Buna göre ne kadar uzun süre kesilmişse para o kadar büyüktür ne kadar azsa küçüktür .Tamam o çalışır da böyle algılaması çok zor
 
Yav gölgeye göre nasıl tespit edilecek .Işık kaynağının şiddeti sabit.Hani deseniz ki iki tane LED 2 tane LDR var karşılarında aralarındada mesafe 2 cm Işığın kesildiği andan ışıığın geldiği ana kadarki süreyi tutuyor.Buna göre ne kadar uzun süre kesilmişse para o kadar büyüktür ne kadar azsa küçüktür .Tamam o çalışır da böyle algılaması çok zor

LDR dijital birşey değil. Işık şiddetine göre farklı direnç değeri alıyor. Oradan anlaşılıyor paranın türü.
 

Forum istatistikleri

Konular
6,209
Mesajlar
105,818
Üyeler
2,583
Son üye
Efe Ali Bozkurt

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top