- Kızılötesi Oluklu Optik LM-393 Hız Sensörü Modülü
- Ücreti Hesaplamak İçin Katedilen Hızı ve Mesafeyi Ölçme
Günümüzde dijital sayaçlar, elektrik sayacı veya taksi ücret ölçeri olsun, her sektörde analog sayaçların yerini alıyor. Bunun ana nedeni, analog sayaçların uzun süre kullanıldıklarında aşınma eğilimi gösteren mekanik parçalara sahip olmaları ve dijital Sayaçlar kadar hassas olmamalarıdır.
Eski motorlu bisikletlerde hız ve kat edilen mesafeyi ölçmek için kullanılan analog hız göstergesi ve kilometre sayacı buna iyi bir örnek. Tekerlek döndürüldüğünde hızölçerin pimini döndürmek için bir kablonun kullanıldığı pinyon ve kremayer denilen özel bir parçaya sahiptirler. Bu, uzun süre kullanıldığında yıpranacak ve ayrıca değiştirilmesi ve bakıma ihtiyacı olacaktır.
Dijital sayaçta mekanik parçalar kullanmak yerine hız ve mesafeyi hesaplamak için optik kesici veya salon sensörü gibi bazı sensörler kullanılır. Bu, analog sayaçlardan daha doğrudur ve uzun süre bakım gerektirmez. Daha önce farklı sensörler kullanarak birçok dijital hız göstergesi projesi oluşturduk:
- Arduino ve Processing Android Uygulamasını kullanarak DIY Hız Ölçer
- PIC Mikrodenetleyiciyi kullanarak Dijital Hız Ölçer ve Kilometre Sayacı Devresi
- LM393 Sensörü (H206) Kullanan Mobil Robotlar için Hız, Mesafe ve Açı Ölçümü
Bugün, bu öğreticide Arduino kullanarak bir Dijital Taksi Ücret Ölçer prototipini yapacağız. Bu proje taksinin tekerleğinin kat ettiği hızı ve mesafeyi hesaplayarak 16x2 LCD ekranda sürekli olarak gösterir. Ve gidilen mesafeye bağlı olarak, düğmeye bastığımızda ücret tutarı oluşturur.
Aşağıdaki resimde Digital Taxi Meter Project'in tam kurulumu gösterilmektedir
Bu prototip, bir Hız sensörü modülü ve motora bağlı bir kodlayıcı tekerleği olan bir RC araba şasisine sahiptir. Hız ölçüldüğünde, gidilen mesafeyi ölçebilir ve butona basarak ücret tutarı değerini bulabiliriz. Potansiyometre kullanarak tekerleğin hızını ayarlayabiliriz. Arduino ile LM-393 Hız Sensörü modülünü kullanma hakkında daha fazla bilgi edinmek için bağlantıyı takip edin. Hız sensörü modülünün kısa bir tanıtımını görelim.
Kızılötesi Oluklu Optik LM-393 Hız Sensörü Modülü
Bu, kodlayıcı çarklarının dönüş hızını ölçmek için kullanılabilen slot tipi bir modüldür. Bu Hız sensörü modülü, optik kaynak sensörü olarak da bilinen yuva tipi optik kesiciye göre çalışır. Bu modül 3.3V ile 5V arasında bir voltaj gerektirir ve dijital çıktı üretir. Böylece herhangi bir mikro denetleyici ile arayüz oluşturabilir.
Kızılötesi Işık sensörü, ışık kaynağı (IR-LED) ve bir fototransistör sensöründen oluşur. Her ikisi de aralarında küçük bir boşluk olacak şekilde yerleştirilir. IR LED ve fototransistör boşluğu arasına bir nesne yerleştirildiğinde, ışık demetini keserek fototransistörün geçen akımı durdurmasına neden olur.
Böylece bu sensör ile motora takılabilen yarıklı bir disk (Kodlayıcı Tekerleği) kullanılır ve tekerlek motorla birlikte döndüğünde IR LED ile fototransistör arasındaki ışık huzmesini keserek çıkışı Açık ve Kapalı hale getirir (Darbeler Oluşturma).
Böylece ürettiği yüksek çıkış (herhangi bir nesne arasına yerleştirilir) ve doğrudan kaynak ile sensör arasında kesme olduğunda düşük çıkış yerleştirilmiş bir nesne olduğunda. Modülde, neden olduğu optik kesintiyi gösteren bir LED'imiz var.
Bu modül, OUTPUT'ta doğru YÜKSEK ve DÜŞÜK sinyalleri üretmek için kullanılan LM393 Karşılaştırıcı IC ile birlikte gelir. Bu nedenle bu modül bazen LM393 Hız sensörü olarak adlandırılır.
Ücreti Hesaplamak İçin Katedilen Hızı ve Mesafeyi Ölçme
Dönme hızını ölçmek için kodlayıcı çarkında bulunan yuvaların sayısını bilmemiz gerekir. İçinde 20 yuva olan bir kodlayıcı çarkım var. Bir tam dönüş döndürdüklerinde, çıkışta 20 darbemiz olur. Bu yüzden hızı hesaplamak için saniyede üretilen darbe sayısına ihtiyacımız var.
Örneğin
Bir saniyede 40 atım varsa, o zaman
Hız = Hayır. Darbe sayısı / Yuva sayısı = 40/20 = 2RPS (Saniyede devir)
RPM (Dakikadaki Devir) cinsinden hızı hesaplamak için 60 ile çarpın.
RPM cinsinden hız = 2 X 60 = 120 RPM (Dakika Başına Devir)
Mesafe Ölçümü
Tekerleğin kat ettiği mesafeyi ölçmek çok basit. Mesafeyi hesaplamadan önce tekerleğin çevresi bilinmelidir.
Tekerleğin çevresi = π * d
D, tekerleğin çapıdır.
Π değeri 3.14'tür.
6,60 cm çapında bir tekerleğim (RC araba tekerleği) var, bu yüzden çevre (20,7 cm).
Bu yüzden gidilen mesafeyi hesaplamak için, tespit edilen darbe sayısını çevreyle çarpmanız yeterlidir.
Katedilen Mesafe = Tekerlek Çevresi x (Darbe Sayısı / Yuva Sayısı)
Yani 20,7 cm'lik bir Çevre çarkı, kodlayıcı çarkının bir dönüşü olan 20 darbe aldığında, tekerleğin kat ettiği mesafe şu şekilde hesaplanır:
Katedilen mesafe = 20,7 x (20/20) = 20,7 cm
Metre cinsinden mesafeyi hesaplamak için mesafeyi cm cinsinden 100'e bölün.
Not: Bu küçük bir RC araba tekerleğidir, gerçek zamanlı arabalarda bundan daha büyük tekerlekler vardır. Bu nedenle, bu eğitimde tekerleğin çevresinin 230 cm olduğunu varsayıyorum.
Gidilen Mesafeye Göre Ücretin Hesaplanması
Toplam ücret tutarını bulmak için, seyahat edilen mesafeyi ücret oranıyla (tutar / metre) çarpın.
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Sonra iki harici kesinti ekleyin. İlk kesinti, Arduino pin 2'yi kesme pini olarak yapar ve pin 2'de RISING (LOW TO HIGH) algılandığında ISR'yi (sayım) çağırır. Bu pin 2, hız sensörü modülünün D0 çıkışına bağlanır.
İkincisi ise Arduino pin 3'ü kesme pini olarak yapar ve pin3'te HIGH tespit edildiğinde ISR'yi (generatefare) çağırır. Bu pim, bir çekme direnci ile basma düğmesine bağlanır.
attachInterrupt (digitalPinToInterrupt (2), sayım, YÜKSELEN); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Şimdi burada kullandığımız ISR'yi görelim:
ISR1-count () ISR, pin 2'de (hız sensörüne bağlı ) bir YÜKSELME (DÜŞÜKTEN YÜKSEK) olduğunda çağrılır.
void count () // Hız sensöründen gelen sayımlar için ISR { counter ++; // sayaç değerini bir dönüş artırın ++; // Dönme değerini bir gecikme (10) artırın ; }
ISR2- timerIsr () ISR saniyede bir çağrılır ve ISR içinde bulunan hatları çalıştırır.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); şamandıra hızı = (sayaç / 20.0) * 60.0; şamandıra dönüşleri = 230 * (dönüş / 20); rotasyoninm = rotasyon / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Hız (RPM):"); lcd.print (hız); sayaç = 0; int analogip = analogRead (A0); int motorspeed = harita (analogip, 0,1023,0,255); analogWrite (5, motor hızı); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), sayım, YÜKSELEN); }
Bu fonksiyon aslında ilk önce Timer1 ve Interrupt pin2'yi ayıran satırları içerir, çünkü ISR içinde LCD baskı ifadelerine sahibiz.
RPM cinsinden SPEED'i hesaplamak için aşağıdaki kodu kullanırız; burada 20.0, kodlayıcı çarkında önceden ayarlanmış yuva sayısı değildir.
şamandıra hızı = (sayaç / 20.0) * 60.0;
Ve aşağıdaki kodun altındaki mesafeyi hesaplamak için kullanılır:
şamandıra dönüşleri = 230 * (dönüş / 20);
Burada tekerleğin çevresi 230cm olarak kabul edilmiştir (bu gerçek zamanlı arabalarda normaldir)
Daha sonra mesafeyi 100'e bölerek mesafeyi m cinsinden dönüştürün
rotasyoninm = rotasyon / 100;
Daha sonra HIZ ve MESAFE'yi LCD ekranda gösteriyoruz
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Hız (RPM):"); lcd.print (hız);
ÖNEMLİ: Sayacı 0'a sıfırlamamız gerekiyor çünkü saniyede tespit edilen artı sayısını almamız gerekiyor, bu yüzden bu satırı kullanıyoruz
sayaç = 0;
Daha sonra analog pin A0'ı okuyun ve dijital değere (0 ila 1023) dönüştürün ve bu değerleri PWM çıkışı için 0-255'e eşleyin (motorun hızını ayarlama) ve son olarak bu PWM değerlerini ULN2003'e bağlı analogWrite işlevini kullanarak yazın. Motor IC.
int analogip = analogRead (A0); int motorspeed = harita (analogip, 0,1023,0,255); analogWrite (5, motor hızı);
ISR3: generatefare () ISR, seyahat edilen mesafeye göre ücret tutarını oluşturmak için kullanılır. Bu ISR, kesinti pimi 3 YÜKSEK algılandığında çağrılır (Düğmeye basıldığında). Bu işlev, pim 2'deki kesintiyi ayırır ve zamanlayıcıyı keser ve ardından LCD'yi temizler.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); 2 Timer1.detachInterrupt () 'da pin ; lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); float rupi = rotasyon * 5; lcd.print (rupi); lcd.setCursor (0,1); lcd.print ("Metre başına Rs 5"); }
Bundan sonra gidilen mesafe 5 ile çarpılır (INR 5 / metre oranı için 5 kullandım). İsteğinize göre değiştirebilirsiniz.
float rupi = rotasyon * 5;
Miktar değeri hesaplandıktan sonra Arduino'ya bağlı LCD ekranda görüntülenir.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupi); lcd.setCursor (0,1); lcd.print ("Metre başına Rs 5");
Tam kod ve tanıtım videosu aşağıda verilmiştir.
Doğruluğu, sağlamlığı artırarak ve android uygulaması, dijital ödeme gibi daha fazla özellik ekleyerek bu prototipi daha da geliştirebilir ve bir ürün olarak geliştirebilirsiniz.