RPM ( round per minute ) adalah angka yang menunjukkan banyaknya putaran suatu system dalam 1 menit. Biasanya dimanfaatkan sebagai penunjuk putaran mesin pada kendaraan bermotor, sehingga mempermudah dalam pengaturan tenaga dan bahan bakar. Alat pengukur ini lazim disebut TACHOMETER.
Pada sebuah kendaraan roda 2, putaran mesin dapat diperoleh dengan menghitung pulsa pada dinamo, tetapi hal ini susah karena harus membuka blok mesin. Cara paling mudah adalah dengan memanfaatkan radiasi dari CDI ke BUSI yang dapat dihitung jumlah pulsanya. Jadi dengan menggunakan prinsip radiasi elektromagnet, cukup dengan melilitkan kawat tembaga/email/enamel/kabel dinamo ke kabel di dekat ujung tutup busi, maka tegangan yang konstan (pulsa) dapat diperoleh. Jumlah lilitan tidaklah penting, cukup dikira-kira saja sampai tegangan yg dihasilkan dapat mengaktifkan transistor sebagai switch penghitung.
Tidak perlu menunggu 1 menit untuk mengeluarkan nilai RPM, dengan memanfaatkan fasilitas counter pada microcontroller maka nilai RPM dapat diperoleh. Semisal kita melakukan sampling pengambilan data RPM per 1 detik. Maka RPM didapat melalui rumus :
RPM = Jumlah Pulsa x 60
jika ingin lebih cepat, semisal 0,5 detik, maka nilai RPM didapat dengan mengalikan jumlah pulsa yg terjadi dengan angka 120.
Skematik dibawah ini memanfaatkan microcontroller attiny2313, dan menggunakan transistor sebagai switch pulsa.
klik biar lebih jelas
sedangkan scriptnya seperti berikut ini (revised version):
#define F_CPU 1000000UL // frek clock internal#include <avr/io.h>#include <util/delay.h>#include <avr/eeprom.h>#include <avr/interrupt.h>#include <avr/pgmspace.h>uint8_t angka1=10 ;uint8_t angka2=10 ;uint8_t angka3=10 ;uint8_t angka4=10 ;uint8_t segstep=0;uint8_t kalibrasi=3;int number=0;void conv_segmen(uint8_t digit)//nampilin segmen{switch (digit){case 0 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB5);PORTB |= _BV(PB6) ;break;}case 1 :{PORTB &= ~_BV(PB1) & ~_BV(PB2) ;PORTB |= _BV(PB0) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ;break;}case 2 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB6) ;PORTB |= _BV(PB2) | _BV(PB5) ;break;}case 3 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB6) ;PORTB |= _BV(PB4) | _BV(PB5) ;break;}case 4 :{PORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB5) & ~_BV(PB6) ;PORTB |= _BV(PB0) | _BV(PB3) | _BV(PB4) ;break;}case 5 :{PORTB &= ~_BV(PB0) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB5) & ~_BV(PB6) ;PORTB |= _BV(PB1) | _BV(PB4) ;break;}case 6 :{PORTB &= ~_BV(PB0) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB5) & ~_BV(PB6) ;PORTB |= _BV(PB1) ;break;}case 7 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) ;PORTB |= _BV(PB3) | _BV(PB4) | _BV(PB5)| _BV(PB6) ;break;}case 8 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB5) & ~_BV(PB6);break;}case 9 :{PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB5) & ~_BV(PB6);PORTB |= _BV(PB4) ;break;}case 10 :{PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ;break;}}}void init_ctr(void) //counter tampilan{TCCR0A |= (1 << WGM01); // Configure timer 0 for CTC modeTIMSK |= (1 << OCIE0A); // Enable CTC interruptOCR0A = 50; // Set CTC compare value till blink disapear at 1MHz AVR clock, with a prescaler of 64TCCR0B |= (1 << CS01)|(1 << CS00); // Start timer at Fcpu/64}void init_ctr1(void)//counter perhitungan 600ms sampling{TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC modeTIMSK |= (1 << OCIE1A); // Enable CTC interruptOCR1A = 586; //compare the CTC A = 600ms =586TCCR1B |= ((1 << CS10) | (1 << CS12)); // Start timer at Fcpu/1024}ISR(TIMER1_COMPA_vect) //timer capture RPM counter{ uint16_t rpm;switch(kalibrasi) {case 1 :{rpm=number/100;break; }case 2 :{rpm=number/10;break; }case 3 :{rpm=number;break; }case 4 :{rpm=number*10;break; }case 5 :{rpm=number*100;break; }default: rpm=0;}angka1 = rpm%10;if(rpm>9) angka2 = ((rpm%100) - (rpm%10)) /10 ;else angka2=10;if(rpm>99) angka3 = ((rpm%1000) - (rpm%100)) /100 ;else angka3=10;if(rpm>999) angka4 = ((rpm%10000) - (rpm%1000)) /1000 ;else angka4=10;number=0;}ISR(TIMER0_COMPA_vect) // timer pindah kolom{segstep++;switch(segstep) {case 1 :{ conv_segmen(10);PORTD |= _BV(PD0);PORTD &= ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) ;conv_segmen(angka1);break;}case 2 :{ conv_segmen(10);PORTD |= _BV(PD1);PORTD &= ~_BV(PD0) & ~_BV(PD4) & ~_BV(PD5) ;conv_segmen(angka2);break;}case 3 :{ conv_segmen(10);PORTD |= _BV(PD4);PORTD &= ~_BV(PD1) & ~_BV(PD0) & ~_BV(PD5) ;conv_segmen(angka3);break;}case 4 :{ conv_segmen(10);PORTD |= _BV(PD5);PORTD &= ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD0) ;conv_segmen(angka4);segstep=0;break;}}}SIGNAL (SIG_INT0){number++;}void tombol(void){cli();conv_segmen(10);
sei();kalibrasi++;if (kalibrasi == 6) kalibrasi=1;eeprom_write_byte((uint8_t*)10, kalibrasi);_delay_ms(200);
DDRD &= ~_BV(PD3) ; // tombol}void baca_eeprom(void){kalibrasi = eeprom_read_byte((uint8_t*)10);if(kalibrasi == 0xFF) kalibrasi=3;}int main(void){GIMSK |= (1<<INT0);MCUCR |= (1<<ISC01)| (1<<ISC11); //fall edgeDDRD |= _BV(PD0) | _BV(PD1) | _BV(PD4) | _BV(PD5) ; // seg select
if(bit_is_clear(PIND, PD3) )DDRB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ; // seg a,b,c,d,e,f,ginit_ctr();init_ctr1();baca_eeprom();sei();while(1){
{tombol;
}
}}
SELAMAT MENCOBA
mas bro minta emailin PCB layout nya dong ke, patokan95@gmail.com
BalasHapusmas, punyaku kok gampang nagaco ya .. rasanya kayak kena sinyal-sinyal terus ,, bisa beberapa detik terus error,, solusinya gmn ni mas ?
BalasHapusmungkin sinyal dari busi nya gede...coba digedein resistornya ...atau dikasi pelindung biar radiasi busi nggak ngereset micro ..coba di test di motor lain
BalasHapusoke2, tak coba sek mas..
BalasHapusthx buat replynya :)
Komentar ini telah dihapus oleh pengarang.
BalasHapusmas sya menggunakan read51 untuk compile scripts di atas menjadi hex tapi tidak bisa.ada error di scriptnya,gmna urutan kerja scripts di atas supaya bisa di download ke mikrokontrollernya.mf mas msih awam banget he
BalasHapusmicrocontroller yg dipakai adalah berbasis AVR, compilernya avrstudio + winavr , sedangkan read51 itu untuk varian microcontroler yg berbeda. silahkan baca-baca lebih lanjut di posting2 yang ada di blog ini
BalasHapusprogramnya masih ada yang eror ya mas..!!!!
BalasHapusmas sudah saya compile menjadi hex pake winavr.avr studio..tpi knpa pas di pasang di rangkaian gada perubahan cuma angka nol aja yang muncul?..apkh compilenya salah ato program dari mas..ato mungkin pas setting di programmernya kurang pas..setelan fuse bit?input outputnya? aku jga gtwu ap yg salah..mnta dbantu mas saya masih awam dn pngen belajar ampe bisa..he
BalasHapusoalahhhh... udah muncul nol terus berarti rada apes nehh...hayo berjuang...
BalasHapussaya juga lgi belajar proteus..saya coba simulasikan rangkaian tachometer itu,hasilnya memang ga sperti yg dihrapkan..hadjuh,klo bleh mnta file hex nya mas dn settingan lainnya..krim aj ke
BalasHapus(andika loverscute@yahoo.co.id
Waduhh ....makjang .... proteus..aku kira udah di solder
BalasHapusProteus =sampah
Solder bung ...minim breadboard...malu2in aja bikin tacho pake proteus.. sekalian aja bikin tv layar datar atau ipad...bisa gak?
udah mas,udah di solder dn udah nyala tpi gda penampakan naik ato turunnya dri sinyal busi ke rngkain cma yg jdi mslhnya diem terus gda reaksi..mf y mas he..
BalasHapusmas numpang nanya, itu attiny gak perlu pake kristal ?
BalasHapustrus kalo saya ganti pake atmega8 bisa kan ya ?
thanks..
secara default, attiny memiliki clock RC internal 8mhz yg dibagi 8 melalu register CLK_DIV8 sehingga keluar pabrik clocknya=1MHz. Jika kelas AT mega sama aja keluar pabrik memiliki clock internal 1MHz, nah karena RC itu tidak stabil maka diperlukan yg lebih akurat yaitu xtal. untuk merubah menjadi pakai xtal perlu diatakan perubahan di fusebit di bagian register SUT_CKSEL
BalasHapusada rangkaian downloadernya gak mas ?
BalasHapuskalo boleh minta dong. terimakasih sebelumnya.
saya cuma compile pake avr studio ternyata berhasil,tetapi setelah di coba gda reaksi,apakah harus ada settingan lain mas?
BalasHapusMas yang diatasku .... itu cara nyambungin ke motor begimana? Kali aja salah ....
BalasHapusUntuk ngetest tanpa motor coba bikin pulsa pake 555 atau kalo di laboratorium pake signal generator trus dimasukin ke input tanpa transistor ...hasilnya begimana
..
yang kelihatan cuma angka 8 pindah2 mas..tapi belum di coba tanpa transistor,yang di hubungkan ke kabel busi melalui kawat yang digulung..
BalasHapusmas kalo ngambil sinyalnya dari tachogenerator gimana?
BalasHapusapa output kabel busi sama dengan output tacho?
tachogenerator biasanya mengubah putaran mesin/mekanis ke sinyal listrik, jadi berbeda dengan mendeteksi radiasi pulsa pada busi. Jadi semisal tachogenerator diletakkan satu poros dengan system mesin, maka dapat dipastikan outputnya berbanding lurus dengan busi, dan ingat 1 pulsa busi disesuaikan dengan jumlah "Tak" (langkah) dari mesin
BalasHapusmas mohon maaf tanya, ini alat dan bahan yang dibutuhkan apa aja mas? suwun
BalasHapusatasku : baca skematik deh bozzz
BalasHapusmas saya sudah bikin itu alat tapi masih ada masalah pas di coba kok tampilan di seven segmentnya gk berbentuk angka ya apa masalahnya tolong di bantu
BalasHapusbuat mbak rina agar diperhatikan hubungan antara kaki segmen ...dicek lagi ABCDEFG dengan segmen 1234567
BalasHapusmas saya menghubungkan kaki seven segment sama ic seperti ini :
BalasHapus(A ke 18, B ke 17, C ke 16, D ke 15, E ke 14, F ke 13, G ke 12)
kalau dengan atmega 8 dengan menggunakan CVAVR caranya gmn y?
BalasHapusada reverensinya?
minta bantuannya.
mas.., bisa upload ulang skematiknya... thanks
BalasHapusversi lebih update dapat dibaca di http://www.aisi555.com/2014/11/tutorial-script-breakdown-rpm.html
BalasHapusmas, saya sedang membuat takometer dari kabel busi.
BalasHapussaya menggunakan national instrumen sebagai counternya.
tp saya masih bingung membuat hardwere pembagi tegannya yang menjadi pulsa mas..
kira2 pembagi tegangan yang dibuat sama mas seperti apa y? boleh dishare ke email saya mas? karyadipuji@gmail.com
tks
Sistemnya beda, saya bukan mengukur tegangan tapi menhitung pulsa.
HapusMohon kalo bingung agar membaca semua sumber dengan baik. Jika salah beli sensor tentunya rugi di dana dan waktu.
iya mas @yoman yudi, yg saya maksud adalah mengukur pulsa.
BalasHapusrangkaian pengukur pulsanya seperti apa y mas ?
tks
rangkaiannya hanya transistor yg basisnya di radiasi oleh busi, jadi tiap pulsa akan meng ON OFF kan transistor, dan diubah logicnya menjadi digital kemudian dibaca microcontroller. GAMPANG BANGET...
BalasHapusKomentar ini telah dihapus oleh pengarang.
BalasHapusmaaf mas yudi,, saya kurang paham mengenai rangkaian elektronik,, maklum saya teknik mesin mas. hehe
BalasHapus. kebetulan tugas akhir saya membuat takometer seperti ini mas.
. maksud sy kalo tidak keberatan sy mnta gmbr rankaian elektronikanya mas.. gmn mas?
saya pernah mnta orang untuk buat rangkaian elektronikanya.. tp bnyak noisnya.. pengukuranya tdk stabil. kira2 solusinya gmn y mas?
izin coba gan.. smoga ilmunya bermanfaat. :)
BalasHapusmaaf nanya mas 7seg decoder 4026 bisa di buaat analog tanpa script bisa g untuk radiasi businya. terima kasih
BalasHapusada pembahasan di tulisan lain kok ... cari aja
Hapus