- Modul Sensor Kelajuan LM-393 Optik Slotted Slotted
- Mengukur Kelajuan dan Jarak yang Dilalui untuk Mengira Tambang
Hari ini meter digital menggantikan meter analog di setiap sektor sama ada meter elektrik atau meter tambang teksi. Sebab utama ialah meter analog mempunyai bahagian mekanikal yang cenderung memakai apabila digunakan dalam jangka masa yang panjang dan tidak setepat Meter digital.
Contoh yang baik untuk ini adalah speedometer analog dan odometer yang digunakan dalam basikal motor lama untuk mengukur kelajuan dan jarak perjalanan. Mereka memiliki bahagian khas yang disebut susunan pinion dan rak di mana kabel digunakan untuk memutar pin speedometer ketika roda diputar. Ini akan haus apabila digunakan untuk jangka masa panjang dan juga memerlukan penggantian dan penyelenggaraan.
Dalam meter digital, bukannya menggunakan bahagian mekanikal, beberapa sensor seperti interupter optik atau sensor ruang digunakan untuk mengira kelajuan dan jarak. Ini lebih tepat daripada meter analog dan tidak memerlukan penyelenggaraan untuk jangka masa yang panjang. Kami sebelum ini membina banyak projek speedometer digital menggunakan sensor yang berbeza:
- Speedometer DIY menggunakan Arduino dan Memproses Aplikasi Android
- Litar Speedometer Digital dan Odometer menggunakan PIC Microcontroller
- Pengukuran Kelajuan, Jarak dan Sudut untuk Robot Bergerak menggunakan Sensor LM393 (H206)
Hari ini, dalam tutorial ini kita akan membuat prototaip Digital Teksi Meter menggunakan Arduino. Projek ini mengira kelajuan dan jarak yang dilalui oleh roda teksi dan terus menerus memaparkannya pada paparan LCD 16x2. Dan berdasarkan jarak yang ditempuh ia menghasilkan jumlah tambang ketika kita menekan butang.
Gambar di bawah menunjukkan penyediaan Projek Meter Teksi Digital yang lengkap
Prototaip ini mempunyai casis kereta RC dengan modul Sensor kelajuan dan roda pengekod yang dipasang pada motor. Setelah kelajuan diukur, kita dapat mengukur jarak perjalanan dan mencari nilai jumlah tambang dengan menekan butang tekan. Kita boleh mengatur kelajuan roda menggunakan potensiometer. Untuk mengetahui lebih lanjut mengenai penggunaan modul Sensor Kelajuan LM-393 dengan Arduino, ikuti pautan. Mari lihat pengenalan ringkas modul sensor Speed.
Modul Sensor Kelajuan LM-393 Optik Slotted Slotted
Ini adalah modul jenis slot yang boleh digunakan untuk mengukur kelajuan putaran roda pengekod. Modul sensor kelajuan ini berfungsi berdasarkan interrupter optik jenis slot yang juga dikenali sebagai sensor sumber optik. Modul ini memerlukan voltan 3.3V hingga 5V dan menghasilkan output digital. Oleh itu, ia boleh dihubungkan dengan mikrokontroler mana pun.
Sensor cahaya inframerah terdiri daripada sumber cahaya (IR-LED) dan sensor fototransistor. Kedua-duanya diletakkan dengan jurang kecil di antara mereka. Apabila suatu objek diletakkan di antara jurang IR LED dan fototransistor ia akan mengganggu pancaran cahaya menyebabkan phototransistor berhenti melewati arus.
Oleh itu dengan sensor ini digunakan cakera slotted (Encoder Wheel) yang dapat dilekatkan pada motor dan ketika roda berputar dengan motor ia mengganggu pancaran cahaya antara LED IR dan fototransistor yang menjadikan output Hidup dan Mati (Membuat Pulse).
Oleh itu ia menghasilkan output TINGGI apabila terdapat gangguan antara sumber dan sensor (Apabila ada objek diletakkan di antara) dan menghasilkan output RENDAH apabila tidak ada objek yang diletakkan. Dalam modul kami mempunyai LED untuk menunjukkan gangguan optik yang disebabkan.
Modul ini dilengkapi dengan LM393 Comparator IC yang digunakan untuk menghasilkan isyarat TINGGI dan RENDAH tepat pada OUTPUT. Oleh itu modul ini kadang-kadang dipanggil sebagai sensor Kecepatan LM393.
Mengukur Kelajuan dan Jarak yang Dilalui untuk Mengira Tambang
Untuk mengukur kelajuan putaran, kita perlu mengetahui bilangan slot yang terdapat pada roda pengekod. Saya mempunyai roda pengekod dengan 20 slot di dalamnya. Apabila mereka memutar satu putaran lengkap, kita mempunyai 20 denyutan pada output. Jadi untuk mengira kelajuan kita memerlukan bilangan denyutan yang dihasilkan sesaat.
Sebagai contoh
Sekiranya terdapat 40 denyutan dalam satu saat, maka
Kelajuan = Tidak. Nadi / Jumlah slot = 40/20 = 2RPS (Revolusi sesaat)
Untuk mengira kelajuan dalam RPM (Revolusi per Minit) kalikan dengan 60.
Kelajuan dalam RPM = 2 X 60 = 120 RPM (Revolusi per Minit)
Mengukur Jarak
Mengukur jarak yang dilalui roda sangat mudah. Sebelum mengira jarak, lilitan roda harus diketahui.
Lingkaran roda = π * d
Di mana d adalah diameter roda.
Nilai π ialah 3.14.
Saya mempunyai roda (roda kereta RC) berdiameter 6.60 cm sehingga lilitannya (20.7 cm).
Oleh itu, untuk mengira jarak yang dilalui, gandakan bilangan denyutan yang dikesan dengan lilitan.
Jarak Perjalanan = Lingkaran Roda x (Bilangan Denyut / Bilangan slot)
Jadi apabila roda Lingkaran 20.7cm mengambil 20 denyutan yang merupakan satu putaran roda pengekod maka jarak yang dilalui oleh roda dikira oleh
Jarak perjalanan = 20.7 x (20/20) = 20.7cm
Untuk mengira jarak dalam meter bahagi jarak dalam nilai cm dengan 100.
Catatan: Ini adalah roda kereta RC kecil, dalam masa nyata kereta mempunyai roda yang lebih besar daripada ini. Oleh itu, saya menganggap bahawa lilitan roda menjadi 230cm dalam tutorial ini.
Mengira Tambang Berdasarkan Jarak Perjalanan
Untuk mendapatkan jumlah tambang, kalikan jarak yang ditempuh dengan kadar tambang (jumlah / meter).
Pemasa1. inisialisasi (1000000); Timer1.attachInterrupt (timerIsr);
Seterusnya pasangkan dua gangguan luaran. Interupsi pertama menjadikan pin Arduino 2 sebagai pin interrupt dan memanggil ISR (kiraan) apabila terdapat RISING (RENDAH HINGGA TINGGI) pada pin 2. Pin 2 ini disambungkan ke output D0 dari modul sensor kelajuan.
Dan yang kedua menjadikan pin Arduino 3 sebagai pin interrupt dan memanggil ISR (createfare) apabila HIGH dikesan pada pin3. Pin ini disambungkan ke butang tekan dengan perintang tarik ke bawah.
attachInterrupt (digitalPinToInterrupt (2), hitung, RISING); attachInterrupt (digitalPinToInterrupt (3), menjana harga , TINGGI);
5. Seterusnya mari kita lihat mengenai ISR yang kita gunakan di sini:
ISR1- hitungan () ISR dipanggil ketika RISING (RENDAH HINGGA TINGGI) berlaku pada pin 2 (disambungkan ke sensor kelajuan).
kiraan kekosongan () // ISR untuk kiraan dari sensor kelajuan { pembilang ++; // tingkatkan nilai pembilang dengan satu putaran ++; // Tingkatkan nilai putaran sebanyak satu kelewatan (10); }
ISR2- timerIsr () ISR dipanggil setiap saat dan melaksanakan garis-garis yang terdapat di dalam ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Pemasa1.detachInterrupt (); lcd.clear (); kelajuan apungan = (kaunter / 20.0) * 60.0; putaran apungan = 230 * (putaran / 20); rotationinm = putaran / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Kelajuan (RPM):"); lcd.print (kelajuan); pembilang = 0; int analogip = analogRead (A0); int motorspeed = peta (analogip, 0,1023,0,255); analogWrite (5, kelajuan motor); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), hitung, RISING); }
Fungsi ini mengandungi garis yang pertama kali melepaskan Timer1 dan Interrupt pin2 terlebih dahulu kerana kami mempunyai pernyataan cetak LCD di dalam ISR.
Untuk mengira SPEED dalam RPM, kami menggunakan kod di bawah di mana 20.0 adalah bilangan slot yang telah ditetapkan di roda pengekod.
kelajuan apungan = (kaunter / 20.0) * 60.0;
Dan untuk mengira jarak di bawah kod digunakan:
putaran apungan = 230 * (putaran / 20);
Di sini, lilitan roda dianggap 230cm (kerana ini biasa untuk kereta masa nyata)
Seterusnya ubah jarak dalam m dengan membahagi jarak dengan 100
rotationinm = putaran / 100;
Selepas itu kami memaparkan SPEED dan DISTANCE pada paparan LCD
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Kelajuan (RPM):"); lcd.print (kelajuan);
PENTING: Kita harus menetapkan semula kaunter ke 0 kerana kita perlu mendapatkan bilangan tambah yang dikesan untuk sesaat sehingga kita menggunakan baris ini
pembilang = 0;
Seterusnya baca pin analog A0 dan ubah menjadi nilai digital (0 hingga 1023) dan petakan lagi nilai tersebut ke 0-255 untuk output PWM (Menetapkan kelajuan motor) dan akhirnya tuliskan nilai PWM tersebut menggunakan fungsi analogWrite yang disambungkan ke ULN2003 IC Motor.
int analogip = analogRead (A0); int motorspeed = peta (analogip, 0,1023,0,255); analogWrite (5, kelajuan motor);
ISR3: menghasilkan tambang () ISR digunakan untuk menjana jumlah tambang berdasarkan jarak perjalanan. ISR ini dipanggil ketika pin interupsi 3 dikesan TINGGI (Apabila butang tekan ditekan) Fungsi ini melepaskan gangguan pada pin 2 dan pemasa mengganggu dan kemudian membersihkan LCD.
tidak sah generatefare () { detachInterrupt (digitalPinToInterrupt (2)); pin pada 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); apungan rupee = rotationinm * 5; lcd.print (rupee); lcd.setCursor (0,1); lcd.print ("Rs 5 per meter"); }
Setelah itu jarak yang dilalui dikalikan dengan 5 (saya telah menggunakan 5 untuk kadar INR 5 / meter). Anda boleh berubah mengikut kehendak anda.
apungan rupee = rotationinm * 5;
Setelah mengira jumlah nilai paparkan pada paparan LCD yang disambungkan ke Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupee); lcd.setCursor (0,1); lcd.print ("Rs 5 per meter");
Video kod dan demonstrasi lengkap diberikan di bawah.
Anda boleh meningkatkan lagi prototaip ini dengan meningkatkan ketepatan, ketahanan dan menambahkan lebih banyak ciri seperti aplikasi android, pembayaran digital dan lain-lain dan mengembangkannya sebagai produk.