Senin, 05 Agustus 2013
Kreasi Pembaca: Vu meter Untuk Sound Level menggunakan IC LM 3914/5 (Versi Analog)
Masih ingat dengan kisah sukses mia dari aceh yang dibimbing penulis untuk tugas akhir ? Ternyata tidak hanya mia yang meminta saya untuk membimbing tugas akhirnya, ada seorang temannya mia yang juga meminta ide dari saya dan ide ini harus berhubungan dengan pengukuran suara. Awalnya saya terpikir untuk memberikan ide yang mudah saja karena jurusan kuliah yang mereka ikuti adalah jurusan fisika-mipa. Jadi kali ini saya hanya akan berkutat pada rangkaian analog.
Teringat saya ketika saya SMA pernah membuat VUmeter dengan membeli kit jadi yang berbasiskan ic vu meter yang umum yaitu LM3914 atau LM3915. Ic ini cukup populer dikalangan penghobi elektronika karena dapat mempersingkat waktu desain dengan komponen yang sangat sedikit.
LM3914 umumnya digunakan pada display vu meter - led untuk perangkat audio dan beberapa kreasi di google juga ada yg menggunakannya untuk mengukur tinggi air atau bahkan ada kreasi yang pernah saya baca digunakan sebagai pengukur isi tangki bensin kendaraan roda2. Kembali ke tugas akhir teman kita dari aceh ini, yang ingin diukur adalah level dari suara yang ditangkap oleh sebuah sensor. Sensor ini tidak lain adalah microphone dan yang saya pilih kali ini adalah microphone berjenis Mic Condenser.
Microphone jenis ini bersifat kapasitif dimana perubahan diafragma membran oleh gelombang suara akan menyebabkan kapasitansinya berubah-ubah. Untuk mengolah perubahan ini menjadi sinyal audio yang dapat diterima oleh ic LM3914 maka sinyal harus dikuatkan melalui transistor atau op-amp. Kali ini penulis memilih penguatan menggunakan op-amp LM358 (dual op-amp) yang cukup umum dipasaran walaupun response frekuensinya kurang bagus untuk diatas 5KHz.
LM358
Trus apa gunanya kalo hanya sebagai hiasan level suara dengan Led ? Ternyata rekan mahasiswi kita ini agak kebingungan karena ide yg pertama kali dia ingin capai adalah merancang alat sebagai alarm jika level suara tertentu dicapai. Semakin tidak masuk akal karena jika dilogikakan secara nalar anak SD ... apabila ada level suara yang melebihi batas itu pun sudah menjadi alarm tersendiri bagi telinga, betul tidak ? Telinga yang terhubung ke Otak merupakan sensor dan sistem alarm ciptaan Tuhan yang sangat sempurna....
Ahhh... tapi buat pembaca lainnya jangan dibuat bingung, alat ini cukup bagus kok apabila diletakkan di dekat speaker atau sound system, dengan kreasi Led warna-warni maka yang seperti di video youtube ini dapat juga dikreasikan dengan modal yang cukup murah.
Rangkaiannya cukup simple kok...ini nih saya kasi yaa...
(klik untuk memperbesar)
Kelanjutan dari tugas akhir teman dari aceh ini dilanjutkan dengan perubahan mendasar dengan menggunakan microcontroller. Yahhh..akhirnya barang yang powerful ini keluar juga karena si dosen pembimbing katanya tidak puas karena tidak ada penunjukan level dB dari suara pada suatu display. Mau tidak mau harus menggunakan microcontroller dan akan kita bahas pada tulisan selanjutnya.
SELAMAT MENCOBA
Senin, 29 Juli 2013
Tutorial: Jam 6 Digit + Kalender Dengan Attiny 2313
Siapkan bahan-bahan seperti berikut:
Attiny 2313 + downloader isp
Bagian power supply
- Trafo AC atau Adaptor yang dapat diatur tegangannya
- Jika menggunakan Trafo AC, maka ubah-ubah terminal sekunder trafo untuk V Segmen
- 7805 untuk menurunkan tegangan ke 5V
- Baterai backup 3v - 4.5 v
Dioda 1N4002 (4 + 1 )atau Dioda Bridge sebagai penyearah jika memakai Trafo AC
Capasitor 1000uF/25v , 100nF, 22pF (2buah) atau Varco 0-50pF
Resistor 10K (3 buah), 1K 2Buah
Led 4 buah sebagai pembatas digit
ULN 2003
OptoIsolator PC817 atau 4N25 atau yang sejenis (6 buah)
Xtal 4MHz atau sesuai keinginan
Push Buton tactile (2 buah)
7 segment common Anoda ukuran terserah (6 buah)
SKEMATIK
klik untuk memperjelas
Keterangan:
- Gunakan power supply berbeda (yang dapat diubah-ubah) untuk V SEGMEN sehingga dapat mengatur kecerahan dari 7 segmen
- Untuk mengkompensasi ketidak akuratan xtal, maka salah satu load cap dari xtal dibuat variabel
- Nilai Xtal yang digunakan disesuaikan dengan xtal yg tersedia dipasaran, jika berbeda maka silahkan baca pembahasan mengenai counter/timer disini.
- Baterai backup akan mencatu attiny jika listrik mati (tanpa display) sehingga time keeping tetap jalan.
SCRIPT
#define F_CPU 4000000UL //sesuaikan xtal yg dipakai
#include <avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <string.h>
uint8_t jam,menit,detik,bulan,tanggal,tahun,clock,menu,mode,blink;
uint8_t a = 0;
char bul_max[12]={31,28,31,30,31,30,31,31,30,31,30,31} ;
//tampilan 7 digit 7 segmen dan animasi
void segmen(uint8_t digit)
{
switch (digit)
{
case 0 :
{
PORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4)
& ~_BV(PB5) & ~_BV(PB6);
PORTB |= _BV(PB7);
break;
}
case 1 :
{
PORTB &= ~_BV(PB2) & ~_BV(PB3);
PORTB |= _BV(PB1)| _BV(PB4)| _BV(PB5)| _BV(PB6)| _BV(PB7);
break;
}
case 2 :
{
PORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB7) & ~_BV(PB5) & ~_BV(PB4);
PORTB |= _BV(PB3)| _BV(PB6) ;
break;
}
case 3 :
{
PORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB7);
PORTB |= _BV(PB5)| _BV(PB6) ;
break;
}
case 4 :
{
PORTB &= ~_BV(PB6) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB7) ;
PORTB |= _BV(PB4)| _BV(PB5) | _BV(PB1);
break;
}
case 5 :
{
PORTB &= ~_BV(PB1) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB7) & ~_BV(PB6);
PORTB |= _BV(PB2) | _BV(PB5);
break;
}
case 6 :
{
PORTB &= ~_BV(PB1) & ~_BV(PB3) & ~_BV(PB4) & ~_BV(PB7) & ~_BV(PB6) & ~_BV(PB5);
PORTB |= _BV(PB2) ;
break;
}
case 7 :
{
PORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3);
PORTB |= _BV(PB4)| _BV(PB5)| _BV(PB6)| _BV(PB7);
break;
}
case 8 :
{
PORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4)
& ~_BV(PB5) & ~_BV(PB6) & ~_BV(PB7);
break;
}
case 9 :
{
PORTB &= ~_BV(PB1) & ~_BV(PB2) & ~_BV(PB3) & ~_BV(PB4)
& ~_BV(PB6) & ~_BV(PB7);
PORTB |= _BV(PB5);
break;
}
case 10 :
{
PORTB |= _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4)|
_BV(PB5) | _BV(PB6) | _BV(PB7) ;
break;
}
case 11 :
{
PORTB &= ~_BV(PB1);
PORTB |= _BV(PB2) | _BV(PB3) | _BV(PB4)|
_BV(PB5) | _BV(PB6) | _BV(PB7) ;
break;
}
case 12 :
{
PORTB &= ~_BV(PB4);
PORTB |= _BV(PB2) | _BV(PB3) | _BV(PB1)|
_BV(PB5) | _BV(PB6) | _BV(PB7) ;
break;
}
case 13 :
{
PORTB &= ~_BV(PB2);
PORTB |= _BV(PB4) | _BV(PB3) | _BV(PB1)|
_BV(PB5) | _BV(PB6) | _BV(PB7) ;
break;
}
case 14 :
{
PORTB &= ~_BV(PB3);
PORTB |= _BV(PB2) | _BV(PB4) | _BV(PB1)|
_BV(PB5) | _BV(PB6) | _BV(PB7) ;
break;
}
case 15 :
{
PORTB &= ~_BV(PB5);
PORTB |= _BV(PB2) | _BV(PB3) | _BV(PB1)|
_BV(PB4) | _BV(PB6) | _BV(PB7) ;
break;
}
case 16 :
{
PORTB &= ~_BV(PB6);
PORTB |= _BV(PB2) | _BV(PB3) | _BV(PB1)|
_BV(PB5) | _BV(PB4) | _BV(PB7) ;
break;
}
}
PORTB = _BV(PB0) | ~PORTB; //khusus memakai uln2003
}
//posisi scan digit
void posisi(uint8_t pos)
{
switch (pos)
{
case 0 :
{
PORTD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) & ~_BV(PD6) ;
PORTB &= ~_BV(PB0);
break;
}
case 1 :
{
PORTD |= _BV(PD0);
PORTD &= ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) & ~_BV(PD6) ;
PORTB &= ~_BV(PB0);
break;
}
case 2 :
{
PORTD |= _BV(PD1);
PORTD &= ~_BV(PD0) & ~_BV(PD6) & ~_BV(PD4) & ~_BV(PD5) ;
PORTB &= ~_BV(PB0);
break;
}
case 3 :
{
PORTD |= _BV(PD4);
PORTD &= ~_BV(PD1) & ~_BV(PD0) & ~_BV(PD5) & ~_BV(PD6) ;
PORTB &= ~_BV(PB0);
break;
}
case 4 :
{
PORTD |= _BV(PD5);
PORTD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD6) ;
PORTB &= ~_BV(PB0);
break;
}
case 5 :
{
PORTD |= _BV(PD6);
PORTD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) ;
PORTB &= ~_BV(PB0);
break;
}
case 6 :
{
PORTB |= _BV(PB0);
PORTD &= ~_BV(PD0) & ~_BV(PD1) & ~_BV(PD4) & ~_BV(PD5) & ~_BV(PD6) ;
break;
}
}
}
void animasi(void) //animasi pindah jam-kalender
{
posisi(1);
segmen(11);
_delay_ms(50);
posisi(2);
segmen(11);
_delay_ms(50);
posisi(3);
segmen(11);
_delay_ms(50);
posisi(4);
segmen(11);
_delay_ms(50);
posisi(5);
segmen(11);
_delay_ms(50);
posisi(6);
segmen(11);
_delay_ms(50);
segmen(13);
_delay_ms(50);
segmen(14);
_delay_ms(50);
posisi(5);
segmen(12);
_delay_ms(50);
posisi(4);
segmen(12);
_delay_ms(50);
posisi(3);
segmen(12);
_delay_ms(50);
posisi(2);
segmen(12);
_delay_ms(50);
posisi(1);
segmen(15);
_delay_ms(50);
segmen(16);
_delay_ms(50);
}
void tulis(void) //tulis ke 7 segmen
{
posisi(1);
if(menu == 1 && TCNT1 < 20000) segmen(10); //edit jam
else segmen((jam/10));
_delay_ms(1);
segmen(10);
posisi(2);
if(menu == 1 && TCNT1 < 20000) segmen(10); //edit jam
else segmen((jam%10));
_delay_ms(1);
segmen(10);
posisi(3);
if(menu == 2 && TCNT1 < 20000) segmen(10); //edit menit
else segmen((menit/10));
_delay_ms(1);
segmen(10);
posisi(4);
if(menu == 2 && TCNT1 < 20000) segmen(10); //edit menit
else segmen((menit%10));
_delay_ms(1);
segmen(10);
posisi(5);
if(menu == 3 && TCNT1 < 20000) segmen(10); //edit detik
else segmen((detik/10));
_delay_ms(1);
segmen(10);
posisi(6);
if(menu == 3 && TCNT1 < 20000) segmen(10); //edit detik
else segmen((detik%10));
_delay_ms(1);
segmen(10);
}
void tanggalan(void)
{
posisi(1);
if(menu == 4 && TCNT1 < 20000) segmen(10); //edit tgl
else segmen((tanggal/10));
_delay_ms(1);
segmen(10);
posisi(2);
if(menu == 4 && TCNT1 < 20000) segmen(10); //edit tgl
else segmen((tanggal%10));
_delay_ms(1);
segmen(10);
posisi(3);
if(menu == 5 && TCNT1 < 20000) segmen(10); //edit bulan
else segmen((bulan/10));
_delay_ms(1);
segmen(10);
posisi(4);
if(menu == 5 && TCNT1 < 20000) segmen(10); //edit bulan
else segmen((bulan%10));
_delay_ms(1);
segmen(10);
posisi(5);
if(menu == 6 && TCNT1 < 20000) segmen(10); //edit tahun
else segmen((tahun/10));
_delay_ms(1);
segmen(10);
posisi(6);
if(menu == 6 && TCNT1 < 20000) segmen(10); //edit tahun
else segmen((tahun%10));
_delay_ms(1);
segmen(10);
}
//INTERUPT 1 DETIK
ISR(TIMER1_COMPA_vect)
{
detik++;
clock++;
if(detik == 60)
{
detik=0;
menit++;
if(menit == 60)
{ menit=0;
jam++;
}
if (jam == 24)
{ tanggal++; jam = 0 ; }
if(tahun%4 == 0) bul_max[1]=29;
else bul_max[1]=28;
if (tanggal > bul_max[bulan-1]) {bulan++; tanggal =1 ;}
if (bulan > 12) {tahun++; bulan=1; }
}
}
void tombol(void)
{
if(bit_is_clear(PIND, PIND2))
{
if(menu == 0) menu =1;
else if (menu == 1) menu=2;
else if (menu == 2) menu=3;
else if (menu == 3) menu=4;
else if (menu == 4) menu=5;
else if (menu == 5) menu=6;
else if (menu == 6) menu=0;
_delay_ms(200);
}
else if(bit_is_clear(PIND, PIND3))
{
if(mode==0 && menu == 0)
{ animasi();
mode=1;
clock=0; }
else if(mode ==1 && menu ==0)
{mode=0;
clock=0;
}
if(menu == 1)
{ jam ++;
if (jam == 24) jam =0;
}
else if(menu == 2)
{ menit ++;
if (menit == 60) menit =0;
}
else if(menu == 3) detik = 0;
else if(menu == 4)
{ tanggal++;
if (tanggal == 32) tanggal =1;
}
else if(menu == 5)
{ bulan++;
if (bulan == 13) bulan =1;
}
else if(menu == 6)
{ tahun++;
if (tahun == 100) tahun=0;
}
_delay_ms(200);
}
}
int main(void)
{
DDRD |= _BV(PD0) | _BV(PD1) | _BV(PD4) | _BV(PD5) | _BV(PD6) ; //scan digit
DDRB |= _BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3) | _BV(PB4) | _BV(PB5) | _BV(PB6) | _BV(PB7) ; //segment
DDRD &= ~_BV(PD2) & ~_BV(PD3); //tombol
// ------------ini untuk xtal 4Mhz----------------------
TCCR1B |= (1 << WGM12);
TIMSK |= (1 << OCIE1A);
OCR1A = 62499;
TCCR1B |= (1 << CS11)|(1 << CS10);
//------------------------------------------------------
jam = 0;
menit= 0;
detik=0;
tanggal=1;
bulan=1;
tahun=11;
clock=0; //perpindahan animasi jam dan kalender
mode=0;
menu=0;
sei();
while(1)
{
if(clock == 40 && mode == 1 && menu == 0)
{ animasi();}
else if(clock > 40 && clock <50 && mode == 1 && menu == 0)
{
tanggalan();
}
else if(clock == 50 && mode == 1 && menu == 0)
{ animasi(); clock =0; }
else if(menu == 0)
{ tulis(); }
else if(menu > 3)
{ tanggalan(); }
else
{ tulis(); }
tombol();
}
return 0;
}
ALTERNATIF UNTUK 7 SEGMEN LEBIH BESAR
Optoisolator PC817 mempunyai kekurangan yaitu dayanya kecil sehingga arus yg dapat dialirkan kecil saja. Hal ini akan menyebabkan 7 segmen besar menjadi redup sehingga perlu ditambahkan transistor yg memiliki daya lebih dan dengan rangkaian common Emiter menggunakan transistor PNP seperti BD140 dan PC817 sebagai control base nya (bisa juga transistor NPN 2N3906/2222) dengan contoh rangkaian pengganti sebagai berikut:
HASIL
SELAMAT MENCOBA
Jumat, 26 Juli 2013
Kreasi Pembaca : Metal Detector MK-2 Untuk Skripsi
Beberapa pembaca blog ada yang sms atau mengkontak saya dan bertanya-tanya mengenai metal detektor yang saya bahas di blog ini. Ada yang pencari logam rongsokan, pencari emas dan ada juga yang meminta bantuan untuk merancang pendetektor logam di makanan ringan dan nasi kotak. Berapa pembaca saya tolak untuk pembahasan lebih lanjut karena alasan terlalu komersial dan menuntut realibilitas yang tinggi, dan saya lebih memilih ketika yang meminta bantuan adalah rekan-rekan pelajar smk atau mahasiswa.
Metal Detektor SBG-PI satu-satunya yang penah dibuat dan berfungsi !
Pada tulisan kali ini yang saya angkat adalah kreasi rekan dari aceh bernama mia, yang merupakan mahasiswi D3 jurusan fisika, dasar elektronikanya sedikit akan tetapi dia bersemangat untuk menyelesaikan skripsi yang judulnya dipilihkan oleh dosennya. Beberapa desain saya tawarkan seperti pulse induction dan BFO, akan tetapi yang paling reliable adalah MK-2 yang pernah dibahas disini . Kunci dari kesuksesan perancangan dan perakitan metal detektor MK-2 adalah pada penyusunan lilitan serta pada pemilihan potensiometer yang wajib menggunakan jenis muti turn sehingga ratio pemutaran knob dengan perubahan resistansi menjadi kecil.
Mia dan teman-temannya
Dosen pembimbing dari rekan kita yang imut ini pada awalnya menuntut metal detektor yang lumayan canggih sehingga saya berpikiran mengajukan type metal detektor pulse induction yang saya dapat di forum thunting.com yaitu SBG-PI yang pernah dibahas disini. PCB yang lumayan besar saya rancang untuk memudahkan demo skripsi dan komponen pun telah dikirim,akan tetapi sang dosen pembimbing menolak dengan alasan yang kurang masuk diakal (padahal mungkin dia ga ngerti aja pulse induction itu apa). Dan bapak dosen memberikan rangkaiannya sendiri kemudian coba saya rangkai dan itupun tidak berfungsi dengan benar , mungkin karena ada komponen yang diganti sehingga respon frekuensinya tidak match.
Rangkaian BFO yang gagal total
Dan pada akhirnya kembali ke metal detector MK-2 yang menjadi penyelamat semuanya. Berikut ini hasil kreasi MK-2 yang telah di packing dan diberikan stick sehingga seperti alat penyapu ranjau.
Dan beberapa waktu lalu saya dikontak oleh mia yang menyatakan dia lulus dengan nilai "A". Wahh...selamat yaaa....
Rabu, 17 Juli 2013
Trick: Solid State Relay dengan menggunakan Triac
Ketika kita menginginkan isolasi antar input dan output maka kita akan selalu teringat dengan Relay. Perangkat elektro magnet - mekanikal ini memanfaatkan isolasi dari suatu elektro magnet yang dihasilkan oleh suatu kumparan. Ketika suatu kumparan diberikan tegangan yang sesuai maka medan magnet yang dihasilkan dapat menarik suatu saklar mekanikal yang akan memutus atau menyambung arus listrik. Relay ini merupakan komponen yang penting dalam perkembangan awal komputer sebelum transistor diciptakan
Sifat mekanik dari kontaktor ini memiliki beberapa kekurangan yang dapat disebutkan antara lainnya kecepatan kontak, kelenturan mekanisme pir, keausan pergerakan kontaktor dan yang paling berbahaya disini adalah "spark" atau percikan yang dapat berbahaya dilingkungan yang combustible seperti pada tangki kendaraan bermotor atau kilang minyak bahkan percikan ini dapat menyebabkan kebakaran pada penyimpanan biji-bijian yang menghasilkan debu " grain dust " (silahkan baca di http://en.wikipedia.org/wiki/Dust_explosion).
Solusinya adalah menggunakan perangkat semikonduktor seperti halnya transistor. Secara sederhana transistor yang berfungsi sebagai switch tidak memiliki sifat isolasi seperti halnya relay, akan tetapi solusi yang ditawarkan oleh photodioda yang ditrigger oleh cahaya menjadikannya terisolasi penuh. Alat ini dinamakan sebagai "OPTOISOLATOR"
OptoIsolator jenis 4N25
Opto isolator memiliki prinsip trigger cahaya terhadap photodioda sehingga ketika tegangan setara untuk menghidupkan LED ( 5v + resistor 1K) diberikan ke pin input maka led didalam bungkus akan mengalirkan arus dari 5 ke 4 dengan kata lain jika ohm meter dipasang maka resistansinya akan kecil (seperti tersambung). Jenis OptoIsolator yang seperti ini hanya berlaku pada beban yang bersifat DC. Bagaimana dengan beban yang AC atau beban yang tidak tentu arah alirannya? Diciptakanlah OptoTriac.
Triac sebagai perangkat semikonduktor dengan 3 layer silikon berfungsi untuk mengalirkan arus AC saat trigger diberikan. Sifat arus AC yang sangat berbeda dengan DC dengan sinusnya menyebabkan ke kompleksan dalam pengaturan switchingnya. Pada gambar diatas terdapat OptoTriac dengan zerocrossing detector yang sangat membantu saat trigger mendekati tegangan sinus 0V. MOC3041 hanya memiliki rating dengan arus yang cukup kecil, sehingga diperlukan suatu Triac yang lebih tinggi ratingnya seperti BTAXX (xx= rating arus).
*)Watt dari Resistor di bagian power disesuaikan dengan watt / arus beban
Rangkaian diatas merupakan solid stater relay dengan optotriac MOC-3104 serta power triac BTA-12 (12 Ampere). Triac jenis BTA yang ada dipasaran umumnya adalah versi SNUBBERLES yang artinya sekali tertrigger maka triac akan menyala terus. Untuk itu deperlukan rangakaian tambahan berupa snubber R-C yang cukup akan memutus junction semikonduktor pada Triac. Ketika ON, C pada snubber akan full terisisi dan bersifat open, sedangkan ketika ada gangguan akibat optotriac yang "off" maka menyebabkan C ter discharge secara pelan (sesuai besarR) dan kemudian meng "short" power triac dan triac akan menjadi OFF.
Dengan menggunakan solidstate model ini akan menghemat biaya pembelian solid state relay yang sudah dalam satu packing yang cukup mahal.
SELAMAT MENCOBA