- Bahan yang Diperlukan
- Mengira Kelajuan dan Menunjukkan pada Analog Speedometer
- Diagram dan Sambungan Litar
- Penjelasan Pengaturcaraan
Mengukur kelajuan / rpm Kenderaan atau motor selalu menjadi projek menarik untuk dicuba. Dalam projek ini, kami akan membina Speedometer Analog menggunakan Arduino. Kami akan menggunakan modul IR Sensor untuk mengukur kelajuan. Terdapat cara / sensor lain untuk ini, seperti sensor ruang untuk mengukur kelajuan, tetapi menggunakan sensor IR adalah mudah kerana modul sensor IR adalah alat yang sangat umum dan kita dapat memperolehnya dengan mudah dari pasar dan juga dapat digunakan pada semua jenis motor / Kenderaan.
Dalam projek ini, kami akan menunjukkan kepantasan dalam bentuk analog dan digital. Dengan melakukan projek ini, kami juga akan meningkatkan kemahiran kami dalam mempelajari motor Arduino dan Stepper kerana projek ini melibatkan penggunaan Interrupts and Timers. Pada akhir projek ini, anda akan dapat mengira kelajuan dan jarak yang diliputi oleh sebarang objek berpusing dan memaparkannya pada skrin LCD 16x2 dalam format digital dan juga pada meter analog. Oleh itu, mari kita mulakan dengan Litar Speedometer dan Odometer ini dengan Arduino
Bahan yang Diperlukan
- Arduino
- Motor stepper bipolar (4 wayar)
- Pemandu motor Stepper (Modul L298n)
- Modul sensor IR
- Paparan LCD 16 * 2
- Perintang 2.2k
- Menyambung wayar
- Papan roti.
- Bekalan kuasa
- Cetakan gambar speedometer
Mengira Kelajuan dan Menunjukkan pada Analog Speedometer
Sensor IR adalah alat yang dapat mengesan kehadiran objek di hadapannya. Kami telah menggunakan dua rotor pisau (kipas) dan meletakkan sensor IR di dekatnya sedemikian rupa sehingga setiap kali pisau memutar sensor IR mengesannya. Kami kemudian menggunakan bantuan pemasa dan Gangguan di Arduino untuk mengira masa yang diperlukan untuk satu putaran lengkap motor.
Di sini, dalam projek ini, kami telah menggunakan gangguan prioriti tertinggi untuk mengesan rpm dan kami telah mengkonfigurasinya dalam mod kenaikan. Sehingga setiap kali output sensor turun ke RENDAH, fungsi RPMCount () akan dijalankan. Dan kerana kami telah menggunakan dua rotor pisau, Ini bermaksud fungsi akan dipanggil 4 kali dalam satu revolusi.
Setelah masa yang diambil diketahui, kita dapat mengira RPM dengan menggunakan formula di bawah, Di mana 1000 / masa yang diambil akan memberi kita RPS (revolusi sesaat) dan mengalikannya dengan 60 akan memberikan RPM (revolusi per minit)
rpm = (60/2) * (1000 / (milis () - masa)) * REV / bladesInFan;
Setelah mendapat RPM, kelajuan dapat dikira dengan formula yang diberikan:
Kelajuan = rpm * (2 * Pi * radius) / 1000
Kita tahu bahawa Pi = 3.14 dan jejari adalah 4.7 inci
Tetapi pertama-tama kita perlu menukar jejari menjadi meter dari inci:
jejari = ((radius * 2.54) / 100.0) meter Kelajuan = rpm * 60.0 * (2.0 * 3.14 * jejari) / 1000.0) dalam kilometer sejam
Di sini kita telah mengalikan rpm dengan 60 untuk menukar rpm menjadi rph (revolusi per jam) dan dibahagi dengan 1000 untuk menukar meter / jam ke Kilometer / jam.
Setelah mempunyai kelajuan dalam kmh kita dapat menunjukkan nilai-nilai ini secara langsung melalui LCD dalam bentuk digital tetapi untuk menunjukkan kepantasan dalam bentuk analog, kita perlu melakukan satu lagi pengiraan untuk mengetahui no. langkah, motor stepper harus bergerak untuk menunjukkan kelajuan pada meter analog.
Di sini kita telah menggunakan motor stepper bipolar 4 wayar untuk meter analog, yang mempunyai 1.8 darjah bermaksud 200 langkah per revolusi.
Sekarang kita harus menunjukkan 280 Kmh pada speedometer. Jadi untuk menunjukkan motor stepper 280 Kmh perlu bergerak 280 darjah
Oleh itu, kita mempunyai maxSpeed = 280
Dan maxSteps akan menjadi
maxSteps = 280 / 1.8 = 155 langkah
Sekarang kita mempunyai fungsi dalam kod Arduino kita iaitu fungsi peta yang digunakan di sini untuk memetakan kecepatan menjadi beberapa langkah.
Langkah = peta (kelajuan, 0, maxSpeed , 0, maxSteps);
Jadi sekarang kita ada
langkah = peta (kelajuan, 0,280,0,155);
Setelah mengira langkah-langkah kita dapat secara langsung menerapkan langkah-langkah ini dalam fungsi motor stepper untuk menggerakkan motor stepper. Kita juga perlu menjaga langkah semasa atau sudut motor stepper dengan menggunakan pengiraan yang diberikan
currSteps = Langkah langkah = currSteps-preSteps preSteps = currSteps
di sini currSteps adalah langkah semasa yang berasal dari pengiraan terakhir dan praSteps adalah langkah terakhir yang dilakukan.
Diagram dan Sambungan Litar
Gambarajah litar untuk Speedometer Analog ini mudah, di sini kami telah menggunakan LCD 16x2 untuk menunjukkan kelajuan dalam bentuk digital dan motor stepper untuk memutar jarum speedometer analog.
LCD 16x2 disambungkan pada pin analog Arduino berikut.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Perintang 2.2k digunakan untuk mengatur kecerahan LCD. Modul sensor IR, yang digunakan untuk mengesan bilah kipas untuk mengira rpm, disambungkan untuk mengganggu 0 bermaksud pin D2 dari Arduino.
Di sini kita telah menggunakan pemacu motor stepper iaitu modul L293N. Pemacu motor stepper IN1, IN2, IN3 dan IN4 disambungkan secara langsung ke D8, D9, D10, dan D11 dari Arduino. Sambungan selebihnya diberikan dalam Rajah Litar.
Penjelasan Pengaturcaraan
Kod lengkap untuk Arduino Speedomete r diberikan pada akhir, di sini kami menerangkan beberapa bahagian penting daripadanya.
Di bahagian pengaturcaraan, kami telah memasukkan semua perpustakaan yang diperlukan seperti perpustakaan motor stepper, perpustakaan LCD LiquidCrystal dan pin yang dinyatakan untuknya.
#sertakan
Selepas ini, kami telah mengambil beberapa pemboleh ubah dan makro untuk melakukan pengiraan. Pengiraan sudah dijelaskan di bahagian sebelumnya.
bait volatile REV; rpm int panjang yang tidak ditandatangani, RPM; panjang tidak bertanda st = 0; lama tidak ditandatangani; int ledPin = 13; int led = 0, RPMlen, prevRPM; bendera int = 0; int flag1 = 1; #define bladesInFan 2 radius apungan = 4.7; // inci int preSteps = 0; langkah apunganAngle = 360.0 / (apungan) langkahPerRevolution; float minSpeed = 0; float maxSpeed = 280.0; terapung minSteps = 0; terapung maxSteps = maxSpeed / stepAngle;
Selepas ini, kami menginisialisasi motor LCD, Serial, interrupt dan Stepper dalam fungsi persediaan
batal persediaan () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Speedometer"); kelewatan (2000); attachInterrupt (0, RPMCount, RISING); }
Selepas ini, kami membaca rpm dalam fungsi gelung dan melakukan pengiraan untuk mendapatkan kelajuan dan mengubahnya menjadi langkah untuk menjalankan motor stepper untuk menunjukkan kelajuan dalam bentuk analog.
gelung kosong () { readRPM (); jejari = ((jejari * 2.54) / 100.0); // menukar dalam meter int Speed = ((float) RPM * 60.0 * (2.0 * 3.14 * radius) /1000.0); // RPM dalam 60 minit, diameter tayar (2pi r) r adalah radius, 1000 untuk ditukar dalam km int Langkah-langkah = peta (Kelajuan, minSpeed, maxSpeed, minSteps, maxSteps); jika (flag1) { Serial.print (Speed); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Kelajuan:"); lcd.print (Kelajuan); lcd.print ("Km / j"); bendera1 = 0; } int currSteps = Langkah;int langkah = currSteps-preSteps; preSteps = currSteps; myStepper.step (langkah); }
Di sini kita mempunyai fungsi reapRPM () untuk mengira RPM.
int readRPM () { if (REV> = 10 atau milis ()> = st + 1000) // INI AKAN KEMASKINI SELEPAS SETIAP 10 BACAAN atau 1 saat dalam keadaan terbiar { if (flag == 0) flag = 1; rpm = (60/2) * (1000 / (milis () - masa)) * REV / bladesInFan; masa = milis (); REV = 0; int x = rpm; sementara (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = rpm; kelewatan (500); st = millis (); bendera1 = 1; } }
Akhirnya, kita mempunyai gangguan rutin yang bertanggungjawab untuk mengukur revolusi objek
batal RPMCount () { REV ++; jika (led == RENDAH) { led = TINGGI; } lain { led = RENDAH; } digitalWrite (ledPin, led); }
Ini adalah bagaimana anda boleh membina Speedometer Analog menggunakan Arduino. Ini juga boleh dibina menggunakan sensor Hall dan kelajuan dapat dipaparkan di telefon pintar, ikuti tutorial Arduino Speedometer ini untuk yang sama.