"Kembali Ke Dasar Elektronika Digital ... "

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Animasi LED Dengan IC 4017

    IC 4017 adalah IC 16-pin CMOS dekade counter dari seri IC CMOS 4000. Sangat berguna jika ingin membuat animasi lampu atau LED secara sederhana seperti led berjalan, tulisan berjalan , counter/timer dan masih banyak kegunaan lainnya

  • Bermain DOT Matrix - LOVEHURT

    Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • BIKIN PCB SEDERHANA TAPI GA MURAHAN

    Bikin PCB itu ga susah kok..dengan software EAGLE CAD dan teknik sterika kamu dapat membuat PCB untuk berbagai project elektronika mu ...

Rabu, 19 November 2014

[TUTORIAL & SCRIPT BREAKDOWN] RPM - TACHOMETER HONDA dengan ATTINY2313




Akhirnya balik lagi ke blog ini setelah beberapa waktu vakum. Dan kali ini menjawab beberapa request yang masuk untuk membahas lebih lanjut mengenai RPM - TACHOMETER untuk sepeda motor yang pernah dibahas disini . Sebenernya jika selalu mengikuti perkembangan blog ini maka tidak terlalu susah asal dasar pengetahuan timer dan interupt nya lengkap. 

Intinya pada project ini adalah mendeteksi RADIASI pulsa CDI ke BUSI dan dimasukkan ke PIN INTERRUPT dan kemudian dihitung jumlah pulsa yang muncul vs waktu. Dan didapatkanlah RPM yang diinginkan. Kali ini kita juga akan membuat animasi graph / level sehingga tidak bosan dengan angka-angka saja.

Perhatikan skematik dibawah ini dan bahan2nya bisa dilihat dari gambar berikut (klik untuk gambar lebih jelas)



Jangan lupa juga untuk menyediakan motor yang akan di "HIAS" yang kali ini meminjam motor anak buah saya yaitu HONDA SUPRA VIT. Saya memiliki pengalaman jika bebek honda lebih bocor sinyal CDI nya ketimbang motor lain. Jadi jika menggunakan motor lain maka disesuaikan pemilihan resistor sebelum transistor pembaca pulsa (2N3904) dan pengalaman lainnya ketika menggunakan sepeda motor Yamaha Vega maka transistor yg digunakan adalah PNP 2N3906 dengan tanpa menggunakan resistor pada basis dan VCC ke EMITOR sedangkan INTERUPT ke COLECTOR (dibalik).





Langsung aja kita bahas script nya biar ga bingung, agak panjang tapi ga rugi kok



>>>HEADER<<

Attiny 2313 yang digunakan adalah default yg memiliki clock 1MHz. 

#define F_CPU 1000000UL // sesuaikan clock yang digunakan !!
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <inttypes.h>
#include <avr/interrupt.h>

// ini untuk animasi kata awal, ubah sesuai keinginan atau hapus jika tidak mau
uint8_t angka1=16 ;
uint8_t angka2=17 ;
uint8_t angka3=20 ;
uint8_t angka4=15 ;


uint8_t segstep=0; // untuk pindah segmen

uint8_t kalibrasi=3; // kalibrasi awal

uint8_t valid=0; // variabel untuk mengatasi noise ke tombol

int number=0; // variabel menyimpan jumlah counter



>>>PENERJEMAH ANGKA ke SEGMEN<<

7 segmen yang digunakan merupakan common Anoda sehingga untuk menyalakan segmen dibutuhkan logic "LOW" atau 0 volt / Ground. Untuk animasi dan huruf dapat dikreasikan sendiri dengan kombinasi "LOW" untuk segmen menyala dan "HIGH" untuk segmen mati.

void conv_segmen(uint8_t digit)
// Rutin ini merubah angka dan animasi ke segmen
{
    switch (digit)        
          {
//angka biasa
  case 0 :  
     {
         PORTB &= ~_BV(PB0) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB5); //PORT YG NYALA
         PORTB |= _BV(PB6) ; //PORT YG MATI 
      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 : //kosong
     {
    PORTB |= _BV(PB0) | _BV(PB1) |  _BV(PB2) |  _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ;
      break;
           }
 //11 - 14 khusus untuk animasi level       
  case 11 : 
     {
         PORTB &= ~_BV(PB4); 
               PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB5) | _BV(PB6);
      break;
           } 
   
   case 12 : 
     {
         PORTB &= ~_BV(PB4) & ~_BV(PB2); 
               PORTB |= _BV(PB0) | _BV(PB1)  | _BV(PB3) | _BV(PB5) | _BV(PB6);
      break;
           }
  case 13 : 
     {
         PORTB &= ~_BV(PB4) & ~_BV(PB2) & ~_BV(PB5); 
               PORTB |= _BV(PB0) | _BV(PB1)  | _BV(PB3) | _BV(PB6) ;
         break;
           } 
   
   case 14 : 
     {
         PORTB &= ~_BV(PB4) & ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB5); 
               PORTB |= _BV(PB0) | _BV(PB3) | _BV(PB6) ;
         break;
           }
// kebetulan nama pemilik motor seperti ini, ubah sesuai keinginan
   case 15 : //r
     {
         PORTB &= ~_BV(PB6)  & ~_BV(PB4) ; 
                       PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB3) | _BV(PB2) | _BV(PB5) ;
         break;
           }  

   case 16 : //i
     {
         PORTB &= ~_BV(PB4); 
               PORTB |= _BV(PB0) | _BV(PB1) | _BV(PB3) | _BV(PB2) | _BV(PB5) | _BV(PB6)  ;
         break;
           }   
   
   case 17 : //b
     {
         PORTB &= ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB5) & ~_BV(PB2) & ~_BV(PB6); 
               PORTB |= _BV(PB0) |_BV(PB1)  ;
         break;
           }   

   case 18 : //y
     {

         PORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB5) & ~_BV(PB6);
               PORTB |= _BV(PB4)| _BV(PB0);
      break;
           } 

   case 19 : //u
     {

         PORTB &= ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) ;
               PORTB |= _BV(PB1)| _BV(PB0) | _BV(PB5) | _BV(PB6);
      break;
           } 

   case 20 : //0
     {
         PORTB &= ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB2) & ~_BV(PB6); 
               PORTB |= _BV(PB0) |_BV(PB1) |_BV(PB5)  ;  
      break; 
     }


}

}




>>>ANIMASI LEVEL RPM<<

Nilai RPM akan diterjemahkan dari angka menjadi level / bar graph

void animasi(uint8_t posisi)

{

switch(posisi)  {  
       case 0 :{ angka4=10; angka3=10 ; angka2=10; angka1=10;
              break; }
       case 1 :{ angka4=11; angka3=10 ; angka2=10; angka1=10;
              break; }
       case 2 :{ angka4=12; angka3=10 ; angka2=10; angka1=10;
              break; }
       case 3 :{ angka4=12; angka3=11 ; angka2=10; angka1=10;
              break; }
       case 4 :{ angka4=12; angka3=12 ; angka2=10; angka1=10;
              break; }
       case 5 :{ angka4=12; angka3=12 ; angka2=11; angka1=10;
              break; }
       case 6 :{ angka4=12; angka3=12 ; angka2=12; angka1=10;
              break; }
       case 7 :{ angka4=12; angka3=12 ; angka2=12; angka1=11;
              break; }
       case 8 :{ angka4=12; angka3=12 ; angka2=12; angka1=12;
              break; }
       case 9 :{ angka4=13; angka3=12 ; angka2=12; angka1=12;
              break; }
       case 10 :{ angka4=14; angka3=12 ; angka2=12; angka1=12;
              break; }
       case 11 :{ angka4=14; angka3=13 ; angka2=12; angka1=12;
              break; }
       case 12 :{ angka4=14; angka3=14 ; angka2=12; angka1=12;
              break; }
       case 13 :{ angka4=14; angka3=14 ; angka2=13; angka1=12;
              break; }
       case 14 :{ angka4=14; angka3=14 ; angka2=14; angka1=12;
              break; }
       case 15 :{ angka4=14; angka3=14 ; angka2=14; angka1=13;
              break; }
       case 16 :{ angka4=14; angka3=14 ; angka2=14; angka1=14;
              break; }
       default :{ angka4=14; angka3=14 ; angka2=14; angka1=14;
              break; }
         }

}



>>>INISIALISASI COUNTER<<

Counter 0 adalah counter 8 bit, sedangkan Counter 1 adalah 16 bit. Silahkan membaca terlebih dahulu penjelasan mengenai counter dan timer disini.

void init_ctr(void) //COUNTER 0 8 BIT untuk pindah kolom 7 segmen
{
  
   
   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 1 untuk penghitung pulsa saat 600ms
{
   
   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

}




>>>INTERRUPT TIMER<<


ISR(TIMER1_COMPA_vect) //interrupt timer 1 (16 bit)  untuk capture jumlah pulsa 

{ uint16_t rpm,anime; //variabel

anime=0;
rpm=0;

switch(kalibrasi) {  //Pemilih 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; }
      
   case 6 :{ 
          anime=1;
    break; }
      
   case 7 :{ 
          anime=2;
    break; }

    }

  //Pemilih antara angka rpm atau animasi level
switch(anime) { 

case 0 : { //ANGKA RPM

OCR1A  = 586;
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;
  
break ; }

case 1 : {  //ANIMASI MODE 1
OCR1A  = 100;
animasi(number/10);
  
break ; }
         
case 2 : {  //ANIMASI MODE 2
OCR1A  = 100;
animasi(number/50);

break ; }

  }


number=0;

}

ISR(TIMER0_COMPA_vect) // timer 0 (8 bit) untuk pindah kolom 7 segmen
{

//tiap segmen yg akan dinyalakan akan diberikan logic High

segstep++;

  switch(segstep) {  
      case 1 :{  conv_segmen(10);
              PORTD |= _BV(PD0);
                 PORTD &= ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5)  ;  
                    conv_segmen(angka4);
     break;
                  }
 
         case 2 :{  conv_segmen(10);
              PORTD |= _BV(PD1);
                 PORTD &= ~_BV(PD0) & ~_BV(PD4) & ~_BV(PD5)  ;  
                    conv_segmen(angka3);
     break;
                  }
         case 3 :{  conv_segmen(10);
              PORTD |= _BV(PD4);
                 PORTD &= ~_BV(PD1) & ~_BV(PD0) & ~_BV(PD5)  ;  
                    conv_segmen(angka2);
     break;
                  }
         case 4 :{  conv_segmen(10);
              PORTD |= _BV(PD5);
                 PORTD &= ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD0)  ;  
                    conv_segmen(angka1);
     segstep=0;
     break; 
         }

                 }


}


>>>COUNTER INTERRUPT dari BUSI<<

SIGNAL (SIG_INT0) //INTERRUPT 0 menghitung pulsa dari radiasi CDI vs BUSI
{
number++;

}



>>>TOMBOL<<

void tombol(void)
{


if(bit_is_clear(PIND, PIND3)) //pembacaan pada pin D3

{ valid++;  //validasi penekanan
_delay_ms(10);
}

if( valid >= 50) //jika melebihi noise motor/getaran, ubah suai nilai ini
{ 

valid=0;
kalibrasi++; //ubah kalibrasi



if (kalibrasi >= 8) kalibrasi=1;

conv_segmen(10);


//Menulis nilai kalibrasi ke EEPROM 
eeprom_write_byte((uint8_t*)20, kalibrasi); 
_delay_ms(500);


  }
}


>>>MEMBACA EEPROM  nilai KALIBRASI<<

void baca_eeprom(void)
{

kalibrasi = eeprom_read_byte((uint8_t*)20);

if(kalibrasi == 0xFF) kalibrasi=3;


}



>>>MAIN PROGRAM<<

int main(void)
{

//Inisialisasi Interrupt
        GIMSK |= (1<<INT0) ; // inetrupt untuk hitung pulsa busi
   MCUCR |= (1<<ISC01)| (1<<ISC11); //fall edge 
//Inisialisasi PIN ATTINY2313 
 DDRD |= _BV(PD0) | _BV(PD1) | _BV(PD4) | _BV(PD5)  ; // segmen select / common scans
 DDRB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) ; // seg a,b,c,d,e,f,g
    
 DDRD &= ~_BV(PD3) ; // Input kalibrasi

init_ctr(); //hidupkan COUNTER0
sei();

_delay_ms(1000);


//tampilan kata ke 2, sesuaikan dengan kebutuhan atau hapus jika tidak mau

angka1=16 ;
angka2=1 ;
angka3=19 ;
angka4=18 ;


_delay_ms(1000);

init_ctr1(); //hidupkan COUNTER 1

baca_eeprom(); // baca nilai kalibrasi 



//muter terussssss
while(1)

{
tombol();

}


}




videonya....seperti dibawah ini





tips: Tegangan pada lampu depan/ langsung dari coil bisa berlebih jika akimu rusak/habis. Jadi usahakan mencari sumber tegangan yg tidak merusak regulator 7805


 Selamat Mencoba
Share:

Minggu, 17 Agustus 2014

Hobby dan Karir yang Saling Menunjang




"...GAN ....kok jarang diupdate lagi nih blognya ? di kaskus juga kok sepi-sepi aja    ? ....."

Bila dilihat perkembangan blog ini dalam 1 tahun kebelakang memang sedikit saja postingan yang ditulis oleh saya. Ya karena saya merasa ilmu dasar sudah banyak saya tumpahkan dan bila pembaca rajin mengikuti dari awal maka saya rasa kemampuannya akan tidak jauh berbeda dengan apa yang saya miliki. Walau memang jumlah posting semakin sedikit dan jarang jarang akan tetapi pertanyaan yg masih banyak diajukan via email/sms/WA dll masih saya layani disela kesibukan. Lalu kemanakah saya ?



Foto diatas saya ambil  sekitar tahun lalu setelah timnas U-19 membantai timnas U-19 korea, dan benar juga keesokan harinya saya menerima surat pemutusan hubungan kerja dari bos korea saya. Walau fotonya hanya gurauan semata tapi cukuplah buat menghibur hati yang galau....kemanakah akan melangkah dengan uang pesangon yang tanggung ? Haruskah membuka warung nasi babi guling atau beternak itik dan lele dikampung ? Orang bijak pernah menulis...."bakarlah kapalmu agar tidak ada pilihan selain berenang ke pulau tujuan" ....ishhhh ini kapal terbakar dan tenggelam bersama-sama penumpangnya. Tapi pelampung yang bernama "Hobby Solder Menyolder" mengapungkan saya kearah yang dirasa akan menuju ke tujuan. 



Apa yang terjadi selanjutnya adalah jawaban dari rahasia tuhan 5 tahun sebelumnya. Pada tulisan terdahulu saya menjelaskan perjalanan dari lulus 2003, meninggalkan dunia solder sehingga tahun 2009 dan saat itu tuhan memberikan petunjuk bahwa saya harus meneruskan hobby lama ini.  Istri pun merasa heran kenapa saya kok kembali meringkuk di ruangan penuh kabel dan komponen berserakan, mengutak atik sampai larut malam. Ya namanya juga rahasia tuhan ya saya juga tidak tahu atau sadar dan hanya berusaha melakukan yg saya memang sukai sejak kecil sehingga terasa mudah. Dari memulai kembali perkenalan dengan AVR, microprocessor dan tidak lupa komponen diskrit dan yang lainnya, juga mengumpulkan tools penunjang, mencari resource dan tulisan2 elektronika sampai troubleshooting alat-alat elektronika....sekali lagi hobby tak akan membuatmu lelah.

Ketika bos-bos korea meninggalkan kota surabaya yang di tinggalkannya adalah harta karun berupa proyek lama yang mau tidak mau harus saya ambil. Begitu pula pelanggan dan klien lama masih mengandalkan kita untuk menangani perangkat mereka. Dengan "POWER OF KEFEFET" saya dan beberapa teman senasib membentuk suatu CV kecil yg bertugas menggantikan perusahaan yang lama....dan tentu saja proyek yg mungkin nilainya dianggap kecil oleh si korea (makanya mereka pergi) bagi kami ini adalah berkah yang lumayan menggiurkan. Lalu apa hubungannya dengan Hobby Solder Menyolder ?




Perangkat yg mereka tinggalkan ada yg perlu di repair dan karena hubungan ke korea terputus ya terpaksa harus di reparasi di lokal. Ya... "ini kesempatan baik" kata teman-teman seperjuangan dan saya yang "tukang solder" ditantang untuk memperbaiki barang yg dulunya hanya bisa kita sentuh luarnya dan tidak satu mur-baut pun boleh lepas ! Duhhh barang apa pula ini....apakah komponennya umum ? apakah processornya dapat di ganti ? Bagaimana dengan komponen SMD yang aneh-aneh ? Pusing kepala dibuatnya...sampai tidur tidak nyenyak. Sebagai orang normal tentunya perasaan menyerah di awal ini adalah penyakit yang harus dibasmi. Dengan bantuan seorang rekan yg mendorong saya dengan cara yang cukup aneh...dibawanya modul ini ke tukang servis tv dan ternyata berhasil jalan seperti normal kembali.!! 

MAK JANGGG....diriku tertegun dan ....terpaksa mengakui tukang servis tv itu problem solver ....yaaa ! yang diperlukan adalah kemampuan mencari komponen rusak, tanpa perlu mengetahui fungsi rangkaian nya secara keseluruhan. Wuihhhh...saya yg sarjana dan bekerja dibidang yg sama seharusnya saya tahu cara kerjanya komponen dan rangkaian pada modul ini ...dan tak berselang lama 1..2..3...dan banyak jenis modul yg saya berhasil perbaiki hanya dengan cara belajar teknik reparasi umum. Persetan dengan FPGA dan MicroProcessor yang ternyata sesuai dengan harganya yang mahal maka kehandalannya pun tidak diragukan, berbeda dengan komponen diskrit berharga murah yang kemungkinan rusaknya besar.



Bendera perusahaan kami semakin berkibar dengan menyebarnya kabar bahwa proyek peninggalan si korea bisa jalan dengan kemampuan anak bangsa sendiri. Beberapa tawaran repair modul lain pun hadir dan mungkin saya akan meninggalkan blog ini ....ooopppsss jangannn.....oke saya akan menghaluskan kata-kata saya dengan berjanji akan terus menulis bila ada waktu. Dan saya jamin tulisan saya akan mengilhami banyak orang Indonesia lainnya bahwa kita MAMPU mengerjakan apa saja asal sesuai bidang dan apalagi sesuai hobby dan menghasilkan . Iya tidak ?

Share:

Selasa, 24 Juni 2014

[ PROJECT ] Intercom PTT untuk rumah memanfaatkan kit amplifier





INTERCOM ...jadul amat sih boz...kata salah satu teman di kantor saya yg baru. Tapi capek juga kalau mesti turun tangga atau menghabiskan urat tenggorokan 'teriak' kalau ada keperluan mendesak dari lantai 1 ke lantai 2. Masalah yang agak terlalu "gampang" bagi penggemar elektronika...tinggal beli kit intercom atau wireless handy talkie. Ehhh ternyata di toko elektronika sebelah adanya cuman kit preamp mic dan kit amplifier OCL 100 watt. kata yang jualan " Jadul amat mas cari intercom, napa ga pake HP aja ?" ...iya juga sihh..di playstore android ada juga app nya kok dengan search kata kunci "PTT (push to talk)"...masa bodooo...kita ini orang elektronika...solder aja !!




Dan gambar diatas menunjukkan daftar belanjaan kami. Ada kit preamp + mic condenser, kit amplifier, push button DPDT, speaker kecil dan adaptor 12v. Mulailah merangkai dengan sangat gampang , tujuan pertamanya mengetest mic --> preamp --> ampli --> speaker ...setelah tersambung hasilnya mengecewakan, mic condensernya kurang sensitif terhadap suara atau mungkin pre-amp nya kurang gede. Sang arsitek yg bernama deni pun ga kalah akal dengan bimbingan master aisi555 kemudian dimanfaatkanlah speaker sebagai microphone. Kok bisa bos ? ya bisa lah..wong dalemannya mic sama aja dengan speaker.





Bagaimana dengan koneksi dan perkabelan nya ? ya perhatikanlah dengan seksama gambar dibawah ini, warna-warni dari koneksi menunjukkan hubungan yang berbeda dan hanya dibutuhkan 5 buah pasang kabel. Power suply dan bagian preamp/ampli bisa diletakkan dimana saja.

Klik pada gambar dibawah biar tambah jelas





Keterangan:


  • Speaker B dan switchnya di letakkan berjauhan dengan rangkaian utama, menggunakan sambungan 5 kabel ( 12v adaptor, suply 12v ke kit, input Mic preamp, output Amplifier, dan Ground)
  • Hubungkan kabel dengan warna sama dan nama yg sama. Hanya gunakan 1 Baterai/adaptor saja, jangan salah ya ... yg kodenya panah 12V itu nyambung .
  • Tekan switch untuk berbicara didepan speaker, otomatis speaker lawan akan terdengar suara juga



Prinsipnya adalah memanfaatkan switch DPDT untuk memilih speaker apakah sebagai input atau output dan juga memutus arus supply dari adaptor ke pre-amp/amplifier (agar lebih awet). Video demonya dapat dilihat pada video youtube berikut :





Jika alat ini diberikan box yg bagus bisa dipasang di depan gerbang/ pintu disebelah bel pintu sehingga bisa menyapa tamu yang akan berkunjung dan bisa saja mengusir marketing kartu kredit yg iseng ke rumah. Kalau ditambah kamera video kecil bagus juga tuh.


TIPS :

  • Untuk menghasilkan suara lebih jernih tanpa dengung maka pada output adaptor cukup diberi regulator tegangan 78xx (dalam contoh ini 7812), kecuali adaptornya memang sudah bagus outputnya semisal adaptor switching.
  • Switch DPDT seperti contoh yg digunakan aslinya memiliki latch/kunci atau kata lain bukan toggle yg akan kembali setelah di lepas. Jadi modifikasi kawat/besi pengait dengan menariknya dan kemudian cukup diletakkan disamping untuk menjadikannya toggle switch.



SELAMAT MENCOBA !!



.
Share:

Senin, 09 Juni 2014

[Tutorial] 4 Led Matrix dengan Mega8535/16




Bahan-Bahan:


  • ATMega 8535/16/32 
  • 4 buah Led matrix 7x5
  • 3 bh Resistor 10K
  • 2 Tombol tactile switch
  • Breadboard / projectboard
  • Kabel secukupnya



Dasar yg harus dikuasai:

Dasar I/O, Led Matrix Lovehurt ,  Counter/Timer


Skematik :



Klik untuk lebih jelas, baca keterangan pada gambar


Script Jam Led matrix


#define F_CPU 1000000UL //ubah sesuai clock micro
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h> 
#include <string.h>

//ARRAY UNTUK MENYIMPAN DATA ANGKA
const char textset[] PROGMEM  = 
{0x7f, 0x41, 0x7f, //0
0x80, 0x80, 0x7f, //1
0x79, 0x49, 0x4f, //2
0x49, 0x49, 0x7f, //3
0x0f, 0x08, 0x7f, //4
0x4f, 0x49, 0x79, //5
0x7f, 0x49, 0x79, //6
0x01, 0x01, 0x7f, //7
0x7f, 0x49, 0x7f, //8
0x4f, 0x49, 0x7f, //9
};



char titik_dua = 0x14;  // :
char blk = 0x80; // BLANK
char fulltext[22] ; //ARRAY TAMPILAN led matrix
char detik,menit,jam; //variabel jam

void cleartext(void)  // MEMBERSIHKAN datanya menjadi kosong
{  uint8_t i;

     
  for(i=0 ; i <20 ; i++)
    { fulltext[i] = 0 ; }  

}

void ubah_angka(char angka1, char angka2, char angka3, char angka4)
{
//routine mengubah angka waktu ke tampilan led matrix
uint8_t a,b;
//jam
  b=angka1*3;          
  for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1); //spasi
  strncat(fulltext,&blk,1);

  b=angka2*3;          
  for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1);
  strncat(fulltext,&blk,1);   strncat(fulltext,&blk,1);

 // untuk tampilan titik dua berkedip
  if(detik%2 == 0)strncat(fulltext,&titik_dua,1);
  else strncat(fulltext,&blk,1);
  
  strncat(fulltext,&blk,1);   strncat(fulltext,&blk,1);

//menit
  b=angka3*3;          
  for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1); 
  strncat(fulltext,&blk,1);

  b=angka4*3;          
  for(a=b; a<b+3; a++) strncat_P(fulltext,&textset[a],1);

 
}


//routine untuk scanning & menulis ke led matrix
void tulis_text(void)
{
uint8_t a;
int b,speed;

a=0;
speed=5;//UBAH NILAI speed sesuai kedip dan kecerahan yg diinginkan



while(a<21)

 {


for(b=0;b<speed;b++ ) 
{
   
if(a<8 ) 

{

PORTD = ~(1<<a) ;
PORTC =0b11111111;
PORTB =0b1111;

}
 
 else if(a>=8 && a<16)
{
   
   PORTC = ~(1<<(a-8)) ;
PORTD =0b11111111;
PORTB =0b1111;

}
else if(a>=16 && a<21)
{
   
   PORTB = ~(1<<(a-16)) ;
PORTD =0b11111111;
PORTC =0b11111111;

}

PORTA=fulltext[a];
_delay_us(50);   

   PORTA=0x80;  //biar tidak berbayang


 }

a++;
 } 


  
 }


ISR(TIMER1_COMPA_vect) //vector interupt untuk 1/2 detik

{ 
detik++; //dibuat 1/2 detik agar mudah menampilkan : kedap kedip

if(detik==120) // 1 menit
  {
     menit++;

 if(menit==60) //1 jam
 {
   jam++;

if(jam==24)jam=0; // 1 hari

       menit=0;
     }
    detik=0;
} 


cleartext();
ubah_angka(jam/10, jam%10, menit/10, menit%10); //tampilkan


}


void init_timer(void)
{

 TCCR1B |= (1 << CS11)|(1 << CS10); // Set up counter dengan prescale 64
  //Baca datasheet untuk mencari konfigurasi prescaler micro yg sesuai
  TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode       
  TIMSK |= (1 << OCIE1A); // Enable CTC interrupt
  OCR1A = 7812; // nilai atas dari TCNT1, untuk perhitungan 1 detik

sei();   //hidupkan interupt


}
int main(void)
{
//bagian ini sesuaikan dengan port micro yg kamu gunakan
 DDRA = 0b11111111; // portA = data text dot matrix
 DDRC = 0b11111111; //scanning kolom
 DDRD = 0b11111111; //scanning kolom
 DDRB = 0b11001111; //scaning, PB5 & PB4 sebagai tombol
 
jam = 10; 
menit = 23;

init_timer();

while(1)
 {
    tulis_text();

  //ini untuk pembacaan tombol  
if (bit_is_clear(PINB, PINB4)) // membaca tombol jika port input B#4 di clear LOW / 0 
        {
         
           menit++;
           if(menit>=60) menit=0;
          _delay_ms(200);

        }
    
if (bit_is_clear(PINB, PINB5)) // membaca tombol jika port input B#5 di clear LOW / 0 

        {
         
            jam++;
            if(jam>=24) jam=0;
            _delay_ms(200);

        }


 }

return 0;
}



Hasil







SELAMAT MENCOBA 



.
Share:

Minggu, 08 Juni 2014

Dukun Fusebit Mengalahkan Fusebit Doctor !


Pernah mengalami masalah ic tidak response setelah mengubah fusebit clock pada microcontroler AVR ? 
Anda lupa clock yg digunakan atau Xtal yang akan disolder entah kemana ?
Duit cekak di penghujung bulan sementara tugas sudah deadline ?



DUKUN FUSEBIT AKAN MEMBANTU ANDA !



Anda tidak perlu menggunakan Fusebit Doctor yg dijual dipasaran atau rangkaian njlimet lainnya




Cukup Menggunakan Praktek dasar timer 555 yang ada disini



Dengan Menggunakan Rumus  Frequency = 1.44 / [C*(R2 + 2*R1)] 
Maka buatlah clock dengan frekuensi 500khz- 1Mhz dan hubungkan dengan kaki output (3) dari timer 555 menuju  XTAL1 pada ic microcontroller AVR anda.



Putar-putar VR/ Trimpot sehingga memiliki resistansi berkisar 20k - 30 k ohm dan hubungkan avr ke isp programmer seperti biasa ( disarankan menggunakan stk500/avrisk mk2, rangkai micro seperti biasa dan jangan lupa di beri vcc/gnd/pull up di rst). Jika Read signature berhasil maka lakukan perubahan Fusebit seperti biasa (ubah ke default internal RC saja)

Contoh ubah fusebit di avrstudio 4



Syarat dan ketentuan:

  • IC microcontroller dalam keadaan BAIK, hanya fusebit clock nya saja yg salah atau lupa
  • Port SPI masih dalam posisi ENABLE, jika tidak maka perlu HVPP (high Voltage Parallel Programming) atau menggunakan universal programmer (All-7/All-100) yg biasanya ada di toko yg melayani pengisian EEPROM Player DVD/TV




TUNGGU APALAGI ... 
SELAMAT MENCOBA !!
Share:

Sabtu, 29 Maret 2014

Elektronika Untuk Anak - Jurang Generasi Orangtua vs Anak



Senangnya melihat anak-anak ini meluangkan waktu dengan robot lego (walau berharga jutaan rupiah), si ortu pun jadi terkurangi bebannya karena anak-anak bisa menghabiskan waktu dengan lebih baik daripada menonton acara alay di tv. Salah satu teman penulis yg mempunyai 2 orang anak SD baru saja pulang dari jalan-jalan ke luar negeri dan membawakan oleh-oleh anaknya berupa robot rakitan. Dan karena kebingungan harus memulai darimana dan takut kalau mainan yang mahal ini nantinya rusak, akhirnya di kontaklah penulis dan ditodong untuk mengajarkan anaknya bagaimana cara bermain-main dengan robot ini. Tentunya bagi penulis sangat mudah karena sudah tersedia software bawaan yg cukup mudah dengan GUI yg sangat interaktif. Dan apa yg terjadi dengan si anak ? yahh karena tanpa tantangan yang berarti dalam 1 minggu mainan robot yang mahal itu hanya menjadi pajangan di lemari.


Teringat pada jaman dulu ketika penulis masih kecil di tahun 80-an, mungkin mainan dengan pelepah pisang adalah favorit penulis walau akhirnya di ujung SD lebih tertarik dengan warna warni LED, tapi tetap saja lebih asyik bermain perang-perangan bersama teman. Begitu juga dengan teman penulis yang ceritakan diatas juga menghabiskan masa kecil tahun 80-90 an dengan bermain gundu/neker/kelereng sampai dikatakan menjadi juragan gundu karena punya 1 kaleng biskuit yang berisi ratusan gundu. 



Bagaimana dengan dunia elektronika jaman 80-90an ? Seingat penulis, Indonesia pada jaman itu hanya berkutat di dunia audio dan radio (walau mungkin di lingkungan kampus era digital mulai ramai), dengan pengalaman penulis yang berlomba dengan teman sekelas untuk merakit amplifier OCL 150 watt dan mencobanya ke speaker segede gaban sampai transistor Jengkol 2N3055 mengeluarkan asap! Bagi yang mempunyai uang lebih dan kurang hobby menyolder biasanya memiliki radio break (HT/ CB) atau mungkin kalo didesa terpencil bisa tetap bercuap-cuap juga (bisa disebut moyangnya whatsapp ) menggunakan intercom dengan kabel kawat yg di bentangkan di sekeliling desa. 



Jadi dapat dibayangkan kesenjangan antara orang tua dan anak dan hal ini bisa menjadi sangat menjengkelkan bagi kedua pihak. Sang ayah masih terbayang-bayang dengan masa kecil yang hanya menunggu hari minggu pagi untuk menonton si unyil atau kartun polisi akademi, sedangkan sang anak termanjakan dengan gadget , game console, komputer dan internet yang dapat dinikmati kapan saja. Hobby elektronika pun menjadi relatif mahal dengan munculnya modul siap pakai atau robot rakitan yang  bagi beberapa orang  demi prinsip "sayang anak" akhirnya dituruti juga . 

** gambar wajah sengaja di tutup sesuai UU perlindungan anak


Berbagai prestasi "semu" dari anak-anak SD dalam hal elektronika banyak diekspose media, seperti anak SD pencipta robot , juara lomba line follower dan sebagainya. Umumnya judul berita akan dibuat hiperbola dan sedikit miris karena kalau dipikir anak SD tentu belum menguasai prinsip elektronika secara baik dan guru pembimbinglah yang lebih berperan. Lalu apakah ini salah ? Tidak ! yang salah adalah ketika guru menuntut anak didik yang terlalu berlebihan dan cenderung agak "berbohong" dengan mengatakan bahwa ini adalah kreasi ciptaan mereka. Sebaiknya (menurut pendapat penulis) tetap diberikan porsi kejujuran dengan menjelaskan bahwa anak-anak ini merakit, memprogram dan menjalankan kreasi mereka dengan bantuan guru dan diingat siswa hanya sebagai peserta lomba merakit , bukan menciptakan ! 



Seiring dengan bertambahnya umur maka kemampuan anak akan berkembang. Pada usia SD sebaiknya dimulai dengan bermain LED menggunakan IC diskrit semacam 555 + 4017 dan ini pas buat mereka. Jika ini kurang menarik cobalah orang tua mengajak anak berkreasi dengan kombinasi input dan output semisal sensor sederhana dengan limit switch yg akan mengeluarkan suara sirene atau lampu alarm kedap-kedip (Flip Flop) saat jendela terbuka. Sesuatu yg bergerak akan sangat disenangi oleh anak-anak semisal menambahkan lampu LED + sirene pada  mobil-mobilan atau pada sepeda yang anak miliki. 

Ketika sudah mencapai umur SMP-SMA ini adalah saat yg tepat untuk mengajarkan elektronika yang sudah lumayan maju. Walau penulis sangat benci dengan modul siap pakai tapi kenyataannya modul ini dapat juga menjadi "penolong" agar anak-anak tidak menjadi cepat bosan. Microcontroller sekelas AVR dan arduino cukup menjadi awal menuju ke elektronika digital jaman sekarang. Mungkin ortu yg jadul dengan IC TTL/CMOS nya dapat juga menyelipkan ilmu-ilmu lawas agar anak-anak menjadi lengkap ilmunya. Ingat bahwa anak jaman sekarang lebih gampang menyerap hal baru sehingga jangan heran mereka akan cepat bosan jika kurang tantangannya . Yah mau bagaimana lagi karena pilihan yg dimiliki anak jaman sekarang jauh lebih beragam daripada jaman 80-an ketika hanya beberapa pilihan dan itupun sudah dianggap seru sekali !


Ketika beranjak kuliah semua hal dapat terjadi bagi sang anak, mungkin dia akan menjadi pengejar wanita atau kutu buku tapi hal ini bisa dianggap sebagai perkembangan yg wajar selama masih menghargai norma -norma. Satu hal yg mungkin akan berguna bagi mereka adalah nilai " kejujuran " karena tidak jarang peserta lomba robotika di tingkat universitas lebih memalukan daripada lomba line follower tingkat SD. Tidak perlu saya sebutkan siapa yang pernah melakukan ini tapi pada intinya tetap uang yang berbicara. Siapa yg bisa belanja motor dan kontrol yg lebih mahal biasanya akan juara ! Mungkin hanya keberuntungan akan mengalahkan robot "berduit". Sekali lagi ini sah-sah saja karena kita sadar hidup di lingkungan yang seperti tidak sadar bahwa hal ini akan merusak nasib bangsa. "Toh nantinya lulus kebanyakan jadi makelar produk buatan zhensen atau beijing, bisa kaya kok !" ....tidak bermaksud menjadi sok suci, tapi kapan lagi ada sebuah lomba robot dengan tingkat komponen lokal 100 % ? Haruskah anak kita membuat mainan senapan dari pelepah pisang yang diimpor dari malaysia ?

Tentunya tulisan ini merupakan isi hati dari penulis yang mungkin saja berseberangan dengan pendapat pembaca. Jika  YA berkeberatan silahkan diskusi sehat dimulai di bagian komentar dibawah. Semoga kita dapat nyambung (terutama dalam hobby elektronika) dengan anak-anak dan menjadikan hubungan ortu-anak menjadi lebih berkualitas.



-=ditulis di STO Tandes Surabaya=-

Share:

Selasa, 18 Maret 2014

[TUTORIAL] Clinometer (pengukur ketinggian) Sederhana Memanfaatkan ADC




Persiapan sebelum memulai project :

  • Tutorial ADC dapat dibaca disini
  • Dasar menulis ke LCD dapat dilihat disini

Bahan-bahan yang dibutuhkan :
  • Minimum System / ATmega 8535/ ATmega 16
  • Display LCD 16 x 2 
  • Potensiometer linear (nickel) 10K ohm(2 buah)
  • Resistor 1K (2 buah)

Project ini adalah request dari anak SMA yang mendapatkan tugas matematika dimana gurunya cukup "Gila" untuk menantang anak didiknya membuat alat clinometer atau pengukur ketinggian. Sang murid mencari di google dan didapatkan rangkaian yg menggunakan acelerometer tapi kendalanya harga yang mahal dan dia pun kesulitan mengerjakannya. Solusi saya cukup sederhana dengan memanfaatkan putaran sudut yg dikonversikan ke putaran potensiometer (variable resistor) yang kemudian dirubah ke dalam level tegangan dan dibaca ADC.


Gambar diatas merupakan ilustrasi trigonometri dari sebuah clinometer dengan mencoba memanfaatkan rumus trigonometri. Keuntungan rumus diatas adalah tidak perlu menentukan jarak pengamat ke benda yang diukur,akan tetapi karena mengandalkan rumus tangen maka dari grafik tangen berikut terjadi sedikit anomali pengukuran jika sudut mendekati kelipatan 90 derajat, dimana tangent 90 adalah tak berhingga !.

grafik tangen yang tidak linear sedikit mempengaruhi keakuratan


Pemilihan potensiometer yang akan digunakan sebagai penerjemah dari sudut ke tegangan (menggunakan prinsip pembagian tegangan) juga perlu diperhatikan karena pada umumnya potentiometer yg dijual dipasaran adalah potentiometer audio yg bersifat logaritmik. Jadi potentiometer yang dipilih adalah berjenis "wire wound" atau yang umum di pasaran bernama "potensiometer nikel".



Output dari project kali ini menggunakan lcd 16x2 yang akan menampilkan nilai sudut alpha, beta dan nilai hasil pengukuran ketinggian.



Perputaran sudut pengukuran vs tegangan yg dihasilkan dapat menggunakan rumus pembagian 10 bit adc (0 - 1023) sehingga didapat sudut yang mewakili per bit. Tentunya potensiometer tidaklah terlalu linear karena banyak faktor dan untungnya kita hanya menggunakan sudut 0-90 derajat saja untuk alpha maupun beta. Saya mendapatkan untuk sudut 0-90 dapat menggunakan pembagian nilai bulat per bit ADC yaitu  "pembacaan adc / 3". Jadi sesuaikan dulu dengan respon nilai potensiometer yang kamu punya dengan sudut yang dihasilkan.

Untuk pengukuran tangen pada WinAvr akan digunakan library "math.h" dimana pengukuran sudut akan dirubah menjadi satuan radian. Rumus yang digunakan tentunya akan sangat memakan memory akibat nilai "float" yang digunakan. Hal ini kita akali saja dengan menggunakan unsigned integer 32 bit dengan pendekatan seperti berikut :

  • tana = tan((M_PI*adcalpha)/180)*1000;
  • tanb = tan((M_PI*adcbeta)/180)*1000;
  • tinggi= (tanb/tana) + 1 ;

Kita ingat juga konversi dari derajat ke radian digunakan rumus :


  • RADIAN = (PI * sudut ) /180 


Pengali 1000 pada rumus diatas digunakan untuk mendapatkan nilai float (pecahan / koma) menjadi ratusan sehingga pembagian menjadi agak bulat.


Skematiknya adalah sebagai berikut ini :

klik untuk memperjelas


Script selengkapnya seperti dibawah ini, diasumsikan bahwa tinggi pengamat 1 meter :


#define F_CPU 4000000UL
#include <string.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <math.h>
#include "lcd.h"

char derajat = 0xDF; // karakter derajat

void reverse(char s[]) //rutin untuk merubah angka ke ascii
   int c, i, j; 
    
   for (i = 0, j = strlen(s)-1; i < j; i++, j--){ 
      c = s[i]; 
      s[i] = s[j]; 
      s[j] = c; 
   } 
void itoa(uint16_t n, char s[]) 
//rutin untuk merubah angka ke ascii
   uint16_t i;
   
   i = 0; 
   do {   // generate digits in reverse order 
      s[i++] = n % 10 + '0'; // get next digit 
   } while ((n /= 10) > 0); // delete it 

   s[i] = '\0'; // add null terminator for string 
   reverse(s); 


void initADC() //inisialisasi ADC
{
ADMUX=(1<<REFS0);// Aref=AVcc;
ADCSRA=(1<<ADEN)|(7<<ADPS0);
}


uint16_t ReadADC(uint8_t ch) //pembacaan ADC
{
   //Select ADC Channel ch must be 0-7
   ch=ch&0b00000111;
   ADMUX|=ch;

   //Start Single conversion

   ADCSRA|=(1<<ADSC);

   //Wait for conversion to complete
   while(!(ADCSRA & (1<<ADIF)));

   //Clear ADIF by writing one to it
   ADCSRA|=(1<<ADIF);

   return(ADC);
}

int main(void)
{

uint16_t baca1,baca2,tana,tanb,tinggi;
char dum;

lcd_init(LCD_DISP_ON);//inisialisasi LCD
lcd_clrscr(); //bersihkan LCD

   while(1)
   {
      initADC(); 

      baca1=ReadADC(6) / 3; //baca alpha
      if(baca1 <90){ //jika hasil tidak lewat 90 derajat

      lcd_gotoxy(0,0);
      lcd_putc(224); //ascii alpha
      lcd_puts(" =");

          itoa(baca1,&dum);
  lcd_puts(&dum);
 lcd_putc(derajat);
 lcd_putc(' ');
 
 }

 else{ //jika lebih 90 di warning
          lcd_gotoxy(0,0);
 lcd_putc(224);
 lcd_puts(" =max");
 }


     _delay_ms(100);

initADC();


     baca2= ReadADC(5) / 3; //baca beta

     if(baca2 <90){  // jika perhitungan < 90 derajat
 
 lcd_gotoxy(8,0);
 lcd_putc(226);
          lcd_puts(" =");

          itoa(baca2,&dum);
 lcd_puts(&dum);
 lcd_putc(derajat);
 lcd_putc(' ');
      }

      else{  //jika lebih 90 di warning
          lcd_gotoxy(8,0);
 lcd_putc(226);
 lcd_puts(" =max");
 }

      _delay_ms(100);
 lcd_gotoxy(0,1);
      

      if(baca1 <90 && baca2 <90){
          //PERHITUNGAN TINGGI
          tana = tan((M_PI*baca1)/180)*1000;
 tanb = tan((M_PI*baca2)/180)*1000;
 tinggi= (tanb/tana) + 1 ;
 
 lcd_puts(" TINGGI:");
          itoa(tinggi,&dum);
 lcd_puts(&dum);
 lcd_puts(" m");
 lcd_puts("        ");
 }

         else{
          lcd_gotoxy(0,1);
 lcd_puts(" TINGGI: Error !");
 }
   }
return 0;

}


SELAMAT MENCOBA  
Share:

Rabu, 12 Maret 2014

Pengalaman Mendesain Sistem Sensor dengan Modul Siap Pakai




Sekitar 10 tahun yang lalu ketika saya baru saja lulus kuliah, mengikuti kata hati yg masih "idealis" untuk mencoba bekerja sesuai bidang keahlian yaitu dibidang elektronika. Tak lama berselang  saya pun diterima untuk bekerja di sebuah pabrik perakitan komponen elektronika di sidoarjo. Apa yg saya dapatkan disana adalah ilmu yang sangat bermanfaat walaupun saya tidak menghabiskan setahun bekerja disana. Ilmu yg saya dapatkan adalah automasi mesin-mesin produksi dilakukan dengan komponen berupa modul sensor dan kontrol siap pakai buatan pabrikan yang sudah tidak asing lagi seperti omron, autonics, dan lain sebagainya. 



Pada awalnya ketika masih dalam masa orientasi saya ditugaskan untuk berkeliling lingkungan pabrik dan melihat proses produksi. Pemikiran saya cenderung meremehkan sensor-sensor dan kontol siap jadi dengan otak saya yang masih diliputi idealisme "... begitu saja harus beli mahal-mahal, cari di pasar genteng saja pasti bisa dirakit ...". Fiuuuhhh ternyata saya salah ketika saya diminta untuk merancang automasi sebuah mesin feeder komponen sebelum di laser marking dan yang terjadi adalah alat saya selesai dalam 3 hari sedangkan anak maintenance yg hanya lulusan STM merakit modul siap pakai hanya dalam waktu 3 jam. Dan inilah yang membuka pemikiran saya bahwa kadang-kadang suatu sistem automasi tidak perlu dirancang dari nol !





Perselingkuhan saya dengan modul kontrol siap pakai tak berlangsung lama karena kemudian hampir 10 tahun saya berada di dunia telco yang sangat jauh dari bidang kontrol dan automasi. Sampai suatu hari saya dihubungi oleh pembaca blog yang ingin melakukan modifikasi terhadap dump truck yang dimilikinya. Di "culiklah" saya ke workshop pabrik ini dan ternyata yang diinginkan adalah alarm saat dump truck mengangkat bak nya sehingga operator yang terkadang lupa akan mendapatkan warning sebelum bak kembali ke posisi awal. Ahh ini mudah saja tinggal memakai limit switch, begitu awal pemikiran saya. Dan saya kembali salah karena muatan truck yg bersifat korosif akan merusak switch pada akhirnya. Dan kemudian pilihan muncul pada sensor optik berupa LED INFRA dan PHOTOTRANSISTOR. Sayangnya saya hanya diberi waktu 1 hari saja !



Sampai dirumah otak serasa mau pecah dan untung saja pengalaman dipabrik dulu itu membawa saya mencari di mbah google tentang supplier sensor siap jadi dan ternyata tidak jauh-jauh ketemunya yaitu di pusat alat teknik di jl. semarang  / raden saleh surabaya dan  pilihan saya jatuh pada sensor photoelectric keluaran autonics BA2M series. Sensor ini akan memberikan respon saat ada halangan atau tidak dengan jarak deteksi sekitar 2 meter. 



Langkah selanjutnya adalah membeli relay 24 volt karena truck menggunakan aki 24 volt. Bagaimana dengan alarmnya ? Berhubung ingin membuat tanpa menggunakan komponen diskrit larilah saya ke pusat otomotif di kedungdoro surabaya dan membeli flasher untuk lampu sein. Yang saya tidak ketahui ternyata flasher yg umum dijual untuk truck masih menggunakan flasher thermal yang prinsipnya akan memutus-sambung lampu sein berdasarkan prinsip bimetal yg akan melengkung dan memutus hubungan beban ke aki. Tapi harus diingat bahwa flasher ini tak akan berfungsi kalau bebannya kecil karena arus yg kecil tidak akan memanaskan bimetal didalam tabung flasher. Akhirnya saya harus membeli lampu 24 volt...dan saat itu waktu sudah beranjak  malam , toko di kedungdoro pun telah berubah menjadi lapak nasi bebek !



Tidak kalah akal saya berpikir bahwa beban ini bisa digantikan dengan resistor. Jika rating dari flasher menunjukkan 25 watt maka saya membutuhkan sekiranya  dengan rumus P=V x I  , maka dengan rumus ohm didapar nilai resistor sekitar 20 ohm. Dan patut diwaspadai karena arusnya tinggi maka resistor akan panas sehingga harus dalam rate watt yang lumayan sekitar 5 watt. Sensor akan dihubungkan pada coil relay (sesuai gambar koneksi sensor di gambar sebelumnya) dan kemudian secara SPDT (single pole dual throw ) akan memilih flasher (warning bak terbuka) atau indikator bebas jalan (bak sudah tertutup).

Voilaa...berhasil dengan sukses ketika di test dilapangan walau dengan perbaikan berupa panas berlebih dari resistor yang cukup melelehkan casing plastik murahan yang saya pakai. Solusinya adalah diakali dengan meletakkan resistor di luar. 

Bagaimana dengan pengalamanmu ? ayo share di komentar dibawah yaaa....

Share:

Kontak Langsung



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

ANTI SPAM !



Blog Ini Mendukung Blogger Indonesia Yang Jujur dan Memberikan Informasi Sebenarnya, Bukan Menyampah Demi $Rp$ Yang Hanya Merendahkan Blogger Indonesia

Site View

Categories

555 (6) 7 segmen (3) adc (3) amplifier (1) analog (9) android (11) attiny (1) attiny2313 (16) blog (1) bluetooth (1) cmos (1) dasar (31) display (2) gcc (1) infrared (2) Input Output (3) jam (6) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (9) komputer (3) komunikasi (1) kontrol (2) lain-lain (8) lcd (2) led (9) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (48) mikrokontroller (1) mikrotik (4) paket belajar (19) palang pintu otomatis (1) parabola (7) pcb (2) project (33) proyek (1) radio (3) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (2) sms (5) software (16) tachometer (2) telepon (7) televisi (31) transistor (1) troubleshoot (3) tulisan (36) tutorial (69) vu meter (1) vumeter (1) wav player (3) wayang (1) wifi (1)

Diskusi


kaskus
Forum Hobby Elektronika