- Gerekli malzemeler
- Hızın Hesaplanması ve Analog Hız Göstergesinde Gösterilmesi
- Devre Şeması ve Bağlantılar
- Programlama Açıklaması
Bir Aracın veya bir motorun hızını / rpm'sini ölçmek her zaman denenecek büyüleyici bir proje olmuştur. Bu projede, Arduino'yu kullanarak bir Analog Hız Ölçer inşa edeceğiz. Hızı ölçmek için IR Sensör modülünü kullanacağız. Hızı ölçmek için salon sensörü gibi bunun için başka yollar / sensörler vardır, ancak bir IR sensörü kullanmak kolaydır çünkü IR sensör modülü çok yaygın bir cihazdır ve bunu piyasadan kolayca alabiliriz ve ayrıca her tür cihazda kullanılabilir. Motorlu araç.
Bu projede hem analog hem de dijital olarak hız göstereceğiz. Bu projeyi yaparak, Arduino ve Step motor öğrenme becerilerimizi de geliştireceğiz çünkü bu proje Kesmeler ve Zamanlayıcıların kullanımını içeriyor. Bu projenin sonunda, dönen herhangi bir nesnenin kat ettiği hız ve mesafeleri hesaplayabilecek ve bunları dijital formatta 16x2 LCD ekranda ve ayrıca analog sayaçta görüntüleyebileceksiniz. Öyleyse Arduino ile bu Kilometre ve Kilometre Sayacı Devresiyle başlayalım
Gerekli malzemeler
- Arduino
- Bipolar step motor (4 telli)
- Step motor sürücüsü (L298n Modülü)
- IR sensör modülü
- 16 * 2 LCD ekran
- 2.2k direnç
- Bağlantı telleri
- Breadboard.
- Güç kaynağı
- Hız göstergesi resmi çıktısı
Hızın Hesaplanması ve Analog Hız Göstergesinde Gösterilmesi
IR Sensörü, önünde bir nesnenin varlığını algılayabilen bir cihazdır. İki kanatlı rotor (fan) kullandık ve IR sensörünü, kanatların her döndüğünde IR sensörü algılayacak şekilde yanına yerleştirdik. Ardından, motorun bir tam dönüşü için geçen zamanı hesaplamak için Arduino'daki zamanlayıcıların ve Kesintilerin yardımını kullanırız.
İşte bu projede, rpm'yi tespit etmek için en yüksek öncelikli kesmeyi kullandık ve onu yükselen modda yapılandırdık. Böylece, sensör çıkışı DÜŞÜK'ten Yüksek'e gittiğinde, RPMCount () işlevi çalıştırılacaktır. Ve iki kanatlı rotor kullandığımız için, fonksiyonun bir devirde 4 kez çağrılacağı anlamına gelir.
Alınan zaman bilindikten sonra, aşağıdaki formülleri kullanarak RPM'yi hesaplayabiliriz.Alınan 1000 / zaman bize RPS'yi (saniyede devir) verecek ve bunu 60 ile çarpmak size RPM'yi (dakika başına devir) verecektir.
rpm = (60/2) * (1000 / (milis () - zaman)) * REV / bladeInFan;
RPM'yi aldıktan sonra, verilen formülle hız hesaplanabilir:
Hız = rpm * (2 * Pi * yarıçap) / 1000
Pi = 3.14 ve yarıçapın 4.7 inç olduğunu biliyoruz.
Ama önce yarıçapı inçten metreye çevirmemiz gerekiyor:
yarıçap = ((yarıçap * 2,54) / 100,0) metre Hız = rpm * 60,0 * (2,0 * 3,14 * yarıçap) / 1000,0) kilometre / saat
Burada, rpm'yi rpm'ye (saat başına devir) dönüştürmek için rpm'yi 60 ile çarptık ve metre / saati Kilometre / saate dönüştürmek için 1000'e böldük.
Kmh cinsinden hıza ulaştıktan sonra, bu değerleri doğrudan LCD üzerinde dijital biçimde gösterebiliriz, ancak hızı analog formda göstermek için, hayır bulmak için bir hesaplama daha yapmamız gerekir. Adım adım, step motor analog metrede hızı göstermek için hareket etmelidir.
Burada analog sayaç için, devir başına 1.8 derece anlamına gelen 200 adım olan 4 telli bir bipolar step motor kullandık.
Şimdi hız göstergesinde 280 Kmh göstermemiz gerekiyor. Yani 280 Kmh step motorun 280 derece hareket etmesi gerektiğini göstermek için
Yani maxSpeed = 280'imiz var
Ve maxSteps olacak
maxSteps = 280 / 1.8 = 155 adım
Artık Arduino kodumuzda, hızı adımlara eşlemek için kullanılan harita işlevi olan bir işlevimiz var.
Adım = harita (hız, 0, Maxspeed , 0, maxSteps);
Yani şimdi sahibiz
adımlar = harita (hız, 0,280,0,155);
Adımları hesapladıktan sonra, bu adımları doğrudan step motoru hareket ettirmek için step motor fonksiyonunda uygulayabiliriz. Ayrıca verilen hesaplamaları kullanarak mevcut adımlara veya step motorun açısına dikkat etmemiz gerekir.
currSteps = Adım adım = currSteps-preSteps preSteps = currSteps
buradaki currSteps , son hesaplamadan gelen geçerli adımlardır ve preSteps son gerçekleştirilen adımlardır.
Devre Şeması ve Bağlantılar
Bu Analog Hız Ölçer için devre şeması basittir, burada hızı dijital biçimde göstermek için 16x2 LCD ve analog hız göstergesi iğnesini döndürmek için step motor kullandık.
Arduino'nun aşağıdaki analog pinlerine 16x2 LCD bağlanır.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
LCD'nin parlaklığını ayarlamak için 2,2k'lik bir direnç kullanılır. Devir / dakika değerini hesaplamak için fan kanadını tespit etmek için kullanılan bir IR sensör modülü, Arduino'nun D2 pini anlamına gelen interrupt 0'a bağlanır.
Burada L293N modülü adında bir step motor sürücüsü kullandık. Step motor sürücüsünün IN1, IN2, IN3 ve IN4 pinleri doğrudan Arduino'nun D8, D9, D10 ve D11'lerine bağlanır. Bağlantıların geri kalanı Devre Şemasında verilmiştir.
Programlama Açıklaması
Arduino Speedomete r için tam kod sonunda verilmiştir, burada birkaç önemli kısmını açıklıyoruz.
Programlama bölümünde, step motor kütüphanesi, LiquidCrystal LCD kütüphanesi gibi gerekli tüm kütüphaneleri ekledik ve bunlar için belirtilen pinleri dahil ettik.
#Dahil etmek
Bundan sonra, hesaplamaları yapmak için bazı değişkenler ve makrolar aldık. Hesaplamalar önceki bölümde zaten açıklanmıştır.
uçucu bayt REV; işaretsiz uzun int rpm, RPM; işaretsiz uzun st = 0; imzasız uzun süre; int ledPin = 13; int led = 0, RPMlen, prevRPM; int bayrak = 0; int bayrak1 = 1; #define bladesInFan 2 float radius = 4.7; // inç int preSteps = 0; float stepAngle = 360.0 / (float) stepsPerRevolution; float minSpeed = 0; float maxSpeed = 280.0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Bundan sonra, kurulum fonksiyonunda LCD, Seri, kesinti ve Step motoru başlatıyoruz.
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Hız göstergesi"); gecikme (2000); attachInterrupt (0, RPMCount, RISING); }
Bundan sonra, döngü fonksiyonunda rpm okur ve hızı elde etmek için bir hesaplama yaparız ve bunu, hızı analog formda göstermek için step motoru çalıştırmak için adımlara dönüştürürüz.
geçersiz döngü () { readRPM (); yarıçap = ((yarıçap * 2,54) / 100,0); // metre cinsinden dönüştürme int Hız = ((float) RPM * 60.0 * (2.0 * 3.14 * yarıçap) /1000.0); // 60 dakikada RPM, lastiğin çapı (2pi r) r yarıçaptır, 1000 km cinsinden dönüştürmek için int Adımlar = harita (Hız, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (Hız); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Hız:"); lcd.print (Hız); lcd.print ("Km / h"); bayrak1 = 0; } int currSteps = Adımlar;int steps = currSteps-preSteps; preSteps = currSteps; myStepper.step (adımlar); }
Burada RPM'yi hesaplamak için reapRPM () fonksiyonumuz var.
int readRPM () { if (REV> = 10 veya millis ()> = st + 1000) // HER 10 OKUMADAN SONRA veya boşta 1 saniye sonra GÜNCELLENECEK { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (milis () - zaman)) * REV / bladeInFan; zaman = milis (); REV = 0; int x = rpm; süre (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = rpm; gecikme (500); st = milis (); flag1 = 1; } }
Son olarak, nesnenin devrimini ölçmekten sorumlu olan kesinti rutinimiz var.
void RPMCount () { REV ++; eğer (led == DÜŞÜK) { led = YÜKSEK; } else { led = DÜŞÜK; } digitalWrite (ledPin, led); }
Bu, Arduino'yu kullanarak bir Analog Hız Ölçer oluşturmanın yoludur. Bu aynı zamanda Hall sensörü kullanılarak da oluşturulabilir ve hız akıllı telefonda görüntülenebilir, bunun için bu Arduino Hız Ölçer eğitimini izleyin.