Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Jumat, 06 Juli 2012

Menghitung RPM (TACHOMETER) dari Radiasi Kabel busi



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 mode
TIMSK |= (1 << OCIE0A); // Enable CTC interrupt
OCR0A = 50; // Set CTC compare value till blink disapear at 1MHz AVR clock, with a prescaler of 64
TCCR0B |= (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 mode
TIMSK |= (1 << OCIE1A); // Enable CTC interrupt 
OCR1A = 586; //compare the CTC A = 600ms =586
TCCR1B |= ((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);

kalibrasi++;

if (kalibrasi == 6) kalibrasi=1;

eeprom_write_byte((uint8_t*)10, kalibrasi);


 _delay_ms(200); 
              sei();
}


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 edge 

DDRD |= _BV(PD0) | _BV(PD1) | _BV(PD4) | _BV(PD5) ; // seg select
                    DDRD &= ~_BV(PD3) ; // tombol
DDRB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ; // seg a,b,c,d,e,f,g


init_ctr();
init_ctr1();
baca_eeprom();
sei();
while(1)

{
                    if(bit_is_clear(PIND, PD3) )
              {tombol;
                      } 
}
}


SELAMAT MENCOBA 
Share:

38 komentar:

  1. mas bro minta emailin PCB layout nya dong ke, patokan95@gmail.com

    BalasHapus
  2. mas, punyaku kok gampang nagaco ya .. rasanya kayak kena sinyal-sinyal terus ,, bisa beberapa detik terus error,, solusinya gmn ni mas ?

    BalasHapus
  3. mungkin sinyal dari busi nya gede...coba digedein resistornya ...atau dikasi pelindung biar radiasi busi nggak ngereset micro ..coba di test di motor lain

    BalasHapus
  4. oke2, tak coba sek mas..
    thx buat replynya :)

    BalasHapus
  5. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  6. mas 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

    BalasHapus
  7. microcontroller 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

    BalasHapus
  8. programnya masih ada yang eror ya mas..!!!!

    BalasHapus
  9. mas 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

    BalasHapus
  10. oalahhhh... udah muncul nol terus berarti rada apes nehh...hayo berjuang...

    BalasHapus
  11. saya 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
    (andika loverscute@yahoo.co.id

    BalasHapus
  12. Waduhh ....makjang .... proteus..aku kira udah di solder
    Proteus =sampah

    Solder bung ...minim breadboard...malu2in aja bikin tacho pake proteus.. sekalian aja bikin tv layar datar atau ipad...bisa gak?

    BalasHapus
  13. 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..

    BalasHapus
  14. mas numpang nanya, itu attiny gak perlu pake kristal ?
    trus kalo saya ganti pake atmega8 bisa kan ya ?
    thanks..

    BalasHapus
  15. 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

    BalasHapus
  16. ada rangkaian downloadernya gak mas ?
    kalo boleh minta dong. terimakasih sebelumnya.

    BalasHapus
  17. saya cuma compile pake avr studio ternyata berhasil,tetapi setelah di coba gda reaksi,apakah harus ada settingan lain mas?

    BalasHapus
  18. Mas yang diatasku .... itu cara nyambungin ke motor begimana? Kali aja salah ....

    Untuk ngetest tanpa motor coba bikin pulsa pake 555 atau kalo di laboratorium pake signal generator trus dimasukin ke input tanpa transistor ...hasilnya begimana
    ..

    BalasHapus
  19. yang kelihatan cuma angka 8 pindah2 mas..tapi belum di coba tanpa transistor,yang di hubungkan ke kabel busi melalui kawat yang digulung..

    BalasHapus
  20. mas kalo ngambil sinyalnya dari tachogenerator gimana?
    apa output kabel busi sama dengan output tacho?

    BalasHapus
  21. 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

    BalasHapus
  22. mas mohon maaf tanya, ini alat dan bahan yang dibutuhkan apa aja mas? suwun

    BalasHapus
  23. atasku : baca skematik deh bozzz

    BalasHapus
  24. mas 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

    BalasHapus
  25. buat mbak rina agar diperhatikan hubungan antara kaki segmen ...dicek lagi ABCDEFG dengan segmen 1234567

    BalasHapus
  26. mas saya menghubungkan kaki seven segment sama ic seperti ini :
    (A ke 18, B ke 17, C ke 16, D ke 15, E ke 14, F ke 13, G ke 12)

    BalasHapus
  27. kalau dengan atmega 8 dengan menggunakan CVAVR caranya gmn y?
    ada reverensinya?

    minta bantuannya.

    BalasHapus
  28. mas.., bisa upload ulang skematiknya... thanks

    BalasHapus
  29. versi lebih update dapat dibaca di http://www.aisi555.com/2014/11/tutorial-script-breakdown-rpm.html

    BalasHapus
  30. mas, saya sedang membuat takometer dari kabel busi.
    saya 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

    BalasHapus
    Balasan
    1. Sistemnya beda, saya bukan mengukur tegangan tapi menhitung pulsa.

      Mohon kalo bingung agar membaca semua sumber dengan baik. Jika salah beli sensor tentunya rugi di dana dan waktu.

      Hapus
  31. iya mas @yoman yudi, yg saya maksud adalah mengukur pulsa.
    rangkaian pengukur pulsanya seperti apa y mas ?
    tks

    BalasHapus
  32. 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...

    BalasHapus
  33. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  34. maaf mas yudi,, saya kurang paham mengenai rangkaian elektronik,, maklum saya teknik mesin mas. hehe
    . 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?

    BalasHapus
  35. izin coba gan.. smoga ilmunya bermanfaat. :)

    BalasHapus
  36. maaf nanya mas 7seg decoder 4026 bisa di buaat analog tanpa script bisa g untuk radiasi businya. terima kasih

    BalasHapus
    Balasan
    1. ada pembahasan di tulisan lain kok ... cari aja

      Hapus

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (8) arduino (25) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (25) euro2020 (13) gcc (1) iklan (1) infrared (2) Input Output (3) iot (58) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (5) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (7) radio (17) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) transistor (2) troubleshoot (3) tulisan (93) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika