- Modul Sensor Kecepatan LM-393 Optik Slotted Inframerah
- Mengukur Kecepatan dan Jarak Tempuh untuk Menghitung Tarif
Saat ini meter digital menggantikan meter analog di setiap sektor baik itu meteran listrik atau meteran tarif taksi. Alasan utamanya adalah meter analog memiliki komponen mekanis yang cenderung aus bila digunakan dalam waktu lama dan tidak seakurat Meter digital.
Contoh yang baik untuk ini adalah speedometer dan odometer analog yang digunakan pada sepeda motor tua untuk mengukur kecepatan dan jarak tempuh. Mereka memiliki bagian khusus yang disebut susunan pinion dan rak di mana kabel digunakan untuk memutar pin speedometer saat roda diputar. Ini akan aus saat digunakan dalam waktu lama dan juga perlu penggantian dan perawatan.
Dalam pengukur digital, alih-alih menggunakan komponen mekanis, beberapa sensor seperti optical interrupter atau sensor hall digunakan untuk menghitung kecepatan dan jarak. Ini lebih akurat daripada pengukur analog dan tidak memerlukan perawatan apa pun untuk jangka waktu yang lama. Kami sebelumnya membangun banyak proyek speedometer digital menggunakan sensor yang berbeda:
- Speedometer DIY menggunakan Arduino dan Memproses Aplikasi Android
- Speedometer Digital dan Rangkaian Odometer menggunakan Mikrokontroler PIC
- Pengukuran Kecepatan, Jarak dan Sudut untuk Mobile Robot menggunakan Sensor LM393 (H206)
Hari ini, dalam tutorial ini kita akan membuat prototipe Pengukur Tarif Taksi Digital menggunakan Arduino. Proyek ini menghitung kecepatan dan jarak yang ditempuh oleh roda taksi dan terus menampilkannya pada layar LCD 16x2. Dan berdasarkan jarak tempuh itu menghasilkan jumlah tarif ketika kita menekan tombol tekan.
Gambar di bawah ini menunjukkan pengaturan lengkap Proyek Meteran Taksi Digital
Prototipe ini memiliki rangka mobil RC dengan modul sensor kecepatan dan roda enkoder yang dipasang pada motor. Setelah kecepatan diukur, kita dapat mengukur jarak yang ditempuh dan mencari nilai jumlah tarif dengan menekan tombol. Kecepatan roda dapat kita atur menggunakan potensiometer. Untuk mempelajari lebih lanjut tentang menggunakan modul Sensor Kecepatan LM-393 dengan Arduino, ikuti tautannya. Mari kita lihat pengenalan singkat tentang modul Sensor kecepatan.
Modul Sensor Kecepatan LM-393 Optik Slotted Inframerah
Ini adalah modul tipe slot yang dapat digunakan untuk mengukur kecepatan putaran roda encoder. Modul sensor kecepatan ini bekerja berdasarkan optical interrupter jenis slot yang disebut juga sensor sumber optik. Modul ini membutuhkan tegangan 3.3V hingga 5V dan menghasilkan keluaran digital. Sehingga dapat dihubungkan dengan mikrokontroler apapun.
Sensor Cahaya Inframerah terdiri dari sumber cahaya (IR-LED) dan sensor fototransistor. Keduanya ditempatkan dengan celah kecil di antara keduanya. Ketika sebuah benda ditempatkan di antara celah LED IR dan fototransistor itu akan mengganggu berkas cahaya yang menyebabkan fototransistor berhenti mengalirkan arus.
Jadi dengan sensor ini digunakan disk berlubang (Roda Encoder) yang dapat dipasang ke motor dan ketika roda berputar dengan motor itu mengganggu pancaran cahaya antara LED IR dan fototransistor yang membuat output On dan Off (Membuat Pulsa).
Dengan demikian ia menghasilkan keluaran TINGGI ketika ada interupsi antara sumber dan sensor (Ketika ada objek yang ditempatkan di antaranya) dan menghasilkan keluaran yang RENDAH ketika tidak ada objek yang ditempatkan. Dalam modul kami memiliki LED untuk menunjukkan gangguan optik yang disebabkan.
Modul ini dilengkapi dengan IC Pembanding LM393 yang digunakan untuk menghasilkan sinyal TINGGI dan RENDAH yang akurat pada OUTPUT. Jadi modul ini kadang-kadang disebut sebagai Sensor kecepatan LM393.
Mengukur Kecepatan dan Jarak Tempuh untuk Menghitung Tarif
Untuk mengukur kecepatan putaran kita perlu mengetahui jumlah slot yang ada pada roda encoder. Saya memiliki roda encoder dengan 20 slot di dalamnya. Ketika mereka memutar satu putaran penuh, kami memiliki 20 pulsa pada output. Jadi untuk menghitung kecepatan kita membutuhkan jumlah pulsa yang dihasilkan per detik.
Sebagai contoh
Jika dalam satu detik ada 40 pulsa
Kecepatan = Tidak. Pulsa / Jumlah slot = 40/20 = 2RPS (Revolusi per detik)
Untuk menghitung kecepatan dalam RPM (Revolusi per Menit) kalikan dengan 60.
Kecepatan dalam RPM = 2 X 60 = 120 RPM (Revolusi per Menit)
Mengukur Jarak
Mengukur jarak yang ditempuh oleh roda sangat sederhana. Sebelum menghitung jarak, perlu diketahui keliling roda.
Keliling roda = π * d
Dimana d adalah diameter roda.
Nilai π adalah 3,14.
Saya punya roda (RC car wheel) dengan diameter 6,60 cm jadi kelilingnya (20,7 cm).
Jadi untuk menghitung jarak yang ditempuh, kalikan saja jumlah pulsa yang terdeteksi dengan keliling.
Jarak Tempuh = Keliling Roda x (Jumlah Pulsa / Jumlah slot)
Jadi bila suatu roda dengan keliling 20.7cm mengambil 20 pulsa yaitu satu putaran roda encoder maka jarak tempuh roda tersebut dihitung dengan cara
Jarak tempuh = 20,7 x (20/20) = 20,7 cm
Untuk menghitung jarak dalam meter bagi jarak dalam nilai cm dengan 100.
Catatan: Ini adalah roda mobil RC kecil, dalam waktu nyata mobil memiliki roda yang lebih besar dari ini. Jadi saya berasumsi bahwa lingkar roda menjadi 230cm dalam tutorial ini.
Menghitung Tarif Berdasarkan Jarak Perjalanan
Untuk mendapatkan jumlah total tarif, kalikan jarak yang ditempuh dengan tarif tarif (jumlah / meter).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Selanjutnya pasang dua interupsi eksternal. Interupsi pertama menjadikan Arduino pin 2 sebagai pin interupsi dan memanggil ISR (count) ketika ada RISING (LOW TO HIGH) yang terdeteksi pada pin 2. Pin 2 ini dihubungkan ke output D0 dari modul sensor kecepatan.
Dan yang kedua menjadikan Arduino pin 3 sebagai pin interupsi dan memanggil ISR (generatefare) ketika HIGH terdeteksi di pin3. Pin ini terhubung ke push button dengan resistor pull down.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Selanjutnya mari kita lihat tentang ISR yang kita gunakan di sini:
ISR1- count () ISR dipanggil ketika RISING (LOW TO HIGH) terjadi pada pin 2 (terhubung ke sensor kecepatan).
void count () // ISR untuk hitungan dari sensor kecepatan { counter ++; // tingkatkan nilai counter dengan satu rotasi ++; // Meningkatkan nilai rotasi dengan satu penundaan (10); }
ISR2- timerIsr () ISR dipanggil setiap satu detik dan mengeksekusi baris yang ada di dalam ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); kecepatan mengambang = (counter / 20.0) * 60.0; rotasi float = 230 * (rotasi / 20); rotasiinm = rotasi / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotasiinm); lcd.setCursor (0,1); lcd.print ("Kecepatan (RPM):"); lcd.print (kecepatan); penghitung = 0; int analogip = analogRead (A0); int motorspeed = peta (analogip, 0,1023,0,255); analogWrite (5, kecepatan motor); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Fungsi ini berisi garis-garis yang sebenarnya pertama kali melepaskan Timer1 dan Interrupt pin2 terlebih dahulu karena kita memiliki pernyataan cetak LCD di dalam ISR.
Untuk menghitung SPEED dalam RPM kami menggunakan kode di bawah ini di mana 20.0 adalah jumlah slot preset di roda encoder.
kecepatan mengambang = (counter / 20.0) * 60.0;
Dan untuk menghitung jarak di bawah kode digunakan:
rotasi float = 230 * (rotasi / 20);
Di sini, keliling roda diasumsikan 230cm (karena ini normal untuk mobil waktu nyata)
Selanjutnya, ubah jarak dalam m dengan membagi jarak dengan 100
rotasiinm = rotasi / 100;
Setelah itu kami menampilkan SPEED dan DISTANCE pada layar LCD
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotasiinm); lcd.setCursor (0,1); lcd.print ("Kecepatan (RPM):"); lcd.print (kecepatan);
PENTING: Kita harus mengatur ulang penghitung ke 0 karena kita perlu mendapatkan jumlah plus terdeteksi untuk per detik jadi kita menggunakan baris ini
penghitung = 0;
Selanjutnya membaca pin analog A0 dan mengubahnya menjadi nilai digital (0 hingga 1023) dan selanjutnya memetakan nilai tersebut ke 0-255 untuk keluaran PWM (Kecepatan pengaturan motor) dan terakhir menulis nilai PWM tersebut menggunakan fungsi analogWrite yang terhubung ke ULN2003 IC Motor.
int analogip = analogRead (A0); int motorspeed = peta (analogip, 0,1023,0,255); analogWrite (5, kecepatan motor);
ISR3: generatefare () ISR digunakan untuk menghasilkan jumlah tarif berdasarkan jarak yang ditempuh. ISR ini dipanggil ketika interupsi pin 3 terdeteksi TINGGI (Saat tombol ditekan). Fungsi ini melepaskan interupsi pada pin 2 dan pengatur waktu interupsi dan kemudian membersihkan LCD.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); pin di 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("HARGA Rs:"); rupee mengambang = rotasi dalam * 5; lcd.print (rupee); lcd.setCursor (0,1); lcd.print ("Rs 5 per meter"); }
Setelah itu jarak yang ditempuh dikalikan dengan 5 (saya sudah menggunakan 5 untuk rate INR 5 / meter). Anda bisa berubah sesuai keinginan Anda.
rupee mengambang = rotasi dalam * 5;
Setelah menghitung nilai besaran, tampilkan pada layar LCD yang terhubung ke Arduino.
lcd.setCursor (0,0); lcd.print ("HARGA Rs:"); lcd.print (rupee); lcd.setCursor (0,1); lcd.print ("Rs 5 per meter");
Kode lengkap dan Video demonstrasi diberikan di bawah ini.
Anda dapat meningkatkan prototipe ini lebih jauh dengan meningkatkan akurasi, ketahanan, dan menambahkan lebih banyak fitur seperti aplikasi android, pembayaran digital, dll dan mengembangkannya sebagai produk.