Jumat, 07 April 2017

Desain 3 Dimensi dengan SketchUp!



        Gambar teknik merupakan sebuah komponen penting dalam engineering. Selain merupakan alat komunikasi antara engineer, gambar teknik juga merupakan sebuah sketsa awal dalam membuat sebuah produk engineering. Jauh sebelum komputer ditemukan, gambar teknik sudah sering digunakan. Tanpa program dan bantuan komputasi digital, mereka membuat gambar teknik secara presis dengan menggunakan alat ukur analog sederhana seperti penggaris dan busur diatas sebuah kertas dengan menggunakan tinta. Gambar 3 dimensi benar-benar dibuat dengan menggunakan gambar persfektif isometrik lengkap dengan skala yang diperlukan.
         
        Sekarang, zaman sudah maju. Banyak sekali software untuk menggambar teknik, contohnya Sketch Up, Autodesk Inventor, AutoCAD, Solidworks dan masih banyak lagi. Seluruh software tersebut sudah memberikan fitur yang sangat membantu untuk melakukan sebuah desain. Mulai dari sketsa 2 dimensi, proyeksi 3 dimensi, animasi pergerakan, jenis material, estimasi berat sampai langsung membuat cetak biru dari produk engineering  tersebut. Nah, sebagai anak teknik, rasanya miris kalau kita tidak tahu minimal dasar dari software diatas. Maka dari itu, yuk kita kenal sedikit.
        
        Disini, kita mau bikin kunci pas atau wrench dengan ukuran 22mm dan 20mm. Produk asli yang akan kita tiru adalah seperti di bawah ini.




Kita buat bentuk 3 dimensinya dengan menggunakan Sketch Up. Berikut adalah langkah-langkahnya:
1.       Buat garis sepanjang 150 mm
2.       Buat lingkaran di kedua ujung masing-masing dengan radius 22,5 mm dan 20 mm
3.       Pada garis tengah, buat garis sejajar dengan ordinat Y +8 mm dan ordinat Y -8
4.       Dari tengah lingkaran dengan radius 22,5 mm, buat garis lurus dengan panjang 22 mm
5.       Buat juga garis sejajar dengan garis tengah dengan ordinat Y +11 mm dan Y -11 mm
6.       Buang bagian yang dibatasi oleh 3 garis lurus dan sebuah juring
7.       Lakukan hal yang sama pada lingkaran dengan radius 20 mm namun garis lurus yang digunakan adalah 10mm
8.       Push bagian lingkaran modifikasi sejauh 4 mm kemudian pull pada sisi lainnya sejauh 4 mm
9.       Terakhir, push bagian tengah (batang) sejauh 2 mm dan pull sejauh 2 mm

Untuk lebih jelasnya, cek video tutorial di bawah ini.




Selasa, 04 April 2017

Menampilkan Simulasi Tulisan Pada LCD dengan Proteus 8 dan Code Vision AVR



        LCD, apa sih itu? LCD merupakan komponen yang berfungsi untuk menampilkan huruf dan angka. Manfaat dari LCD ini sangat beragam, mulai dari sebatas dekorasi, penyaji data atau informasi, sampai membantu dalam memilih mode dan aksi dari suatu alat listrik. Dengan kata lain, LCD adalah alat komunikasi manusia dengan robot secara tulisan.
        Untuk membuat tulisan dalam LCD, kita perlu menggunakan beberapa perintah. Untuk itu, hari ini, mari kita simulasikan LCD dengan program kesayangan kita, Proteus 8 dan Code Vision AVR. 

Untuk memulainya, copy script berikut ke Code Vision AVR

========================================================================= 
#include <mega32.h>


// Alphanumeric LCD functions
#include <alcd.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTB=0x7F;
DDRB=0x7F;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=P State2=P State1=P State0=P
PORTC=0x0F;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTB Bit 2
// D4 - PORTB Bit 3
// D5 - PORTB Bit 4
// D6 - PORTB Bit 5
// D7 - PORTB Bit 6
// Characters/line: 16
lcd_init(16);

while (1)
      {
      if (PINC.0==0){
      lcd_gotoxy(4,0);
      lcd_putsf("CURRENCY");
      lcd_gotoxy(0,1);
      lcd_putsf("1.RUPIAH 2.DOLAR");}
     
      if (PINC.0==0){
      lcd_clear();
      lcd_gotoxy(3,0);
      lcd_putsf("10k RUPIAH");
      lcd_gotoxy(1,1);
      lcd_putsf("0,75USD 1.BACK");}
      
       else
      if (PINC.2==0){
      lcd_clear();
      lcd_gotoxy(4,0);
      lcd_putsf("CURRENCY");
      lcd_gotoxy(0,1);
      lcd_putsf("1.RUPIAH 2.DOLAR");}
      
       else
      if(PINC.1==0){ 
      lcd_clear();
      lcd_gotoxy(2,0);
      lcd_putsf("1 US DOLAR");
      lcd_gotoxy(0,1);
      lcd_putsf("13321Rp 1.BACK");}
     
      else
      if(PINC.3==0){
      lcd_clear();
      lcd_gotoxy(4,0);
      lcd_putsf("CURRENCY");
      lcd_gotoxy(0,1);
      lcd_putsf("1.RUPIAH 2.DOLAR");}
}
}

=========================================================================

Setelah berhasil di build tanpa adanya eror, mari kita buka Proteus 8 dan mulai merangkai.

Komponen yang digunakan adalah ATMega 32, LCD 2 x 16, POT-HG, Source +5V dan Ground. Setelah komponen itu di dapat, rangkailah sesuai dengan gambar ini.




Nah, setelah codingan dari Code Vision AVR di unggah ke AT Mega 32, maka akan tampil seperti video di bawah ini.


Sabtu, 01 April 2017

Membuat Simulasi LED dengan Proteus dan CVAVR



               Sekarang ini, sudah banyak aplikasi yang dapat digunakan untuk mensimulasikan rangkaian listrik. Mulai dari yang sederhana, sampai dengan yang kompleks dengan melibatkan mikrokontroller dan sebagainya. Jadi, sebelum membuat sebuah rangkaian, ada baiknya kita memanfaatkan teknologi yang tersedia dengan mensimulasikannya terlebih dahulu. Gunanya agar kita tidak salah membeli komponen, tidak merusak komponen yang sudah dibeli dan tidak salah membuat rangkaian. Semua kegunaan itu bisa kita persingkat menjadi menghemat biaya yang dikeluarkan :p (terlebih buat anak kost).
             Nah sekarang, kita lihat contoh membuat simulasi menggunakan program Proteus 8 dan Code Vision AVR. Proteus 8 digunakan untuk membuat rangkaian (hardware), sedangkan Code Vision AVR digunakan untuk membuat pemograman (software). Bahasa yang digunakan dalam Code Vision AVR adalah bahasa C. Kenapa perlu pemograman? Karena kita akan menggunakan mikrokontroller ATMega 32. Apasih mikrokontroler itu? Mikrokontroler adalah chip yag dapat digunakan untuk mengendalikan sebuah rangkaian dengan mengunggah koding ke dalamnya. Dengan demikian, rangkaian kita dapat diperintahkan sesuai dengan kemauan kita. Sebagai contoh, saat kita menekan saklar 1, maka akan menyala LED dengan urutan tertentu, saat menekan saklar 2 maka urutan nyala LED berbeda lagi, dan sebagainya. Yoks langsung aja ke prakteknya.
             Sekarang ini kita buat rangkaian dengan menggunakan 3 push button dan 8 LED. Saat kita tekan push button yang pertama, maka LED akan menyala dengan urutan 1, 2, 3, 4, 5, 6, 7, 8. Saat push button yang kedua di tekan, LED akan menyala dengan urutan 8, 7, 6, 5, 4, 3, 2, 1. Sedangkan saat push button ketiga ditekan, maka LED akan menyala dengan urutan 4 dan 5, 3 dan 6, 2 dan 7, dan 1 dan 8. Pertama, kita buat rangkaian di Proteus 8 dengan mengikuti skema sebagai berikut.




Setelah itu, kita buat koding dengan menggunakan Code Vision AVR. Masukkan kosingan seperti dibawah ini:

========================================================================
#include <mega32.h>
#include <delay.h> 
void main(void)
{
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=P State1=P State0=P
PORTC=0x07;
DDRC=0x00;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

while (1)
{
      if (PINC.0==0){
      PORTD.7=1;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);    
       
      PORTD.7=0;
      PORTD.6=1;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);
      
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=1;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);

      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=1;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50); 
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=1;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);  
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=1;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);   
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=1;
      PORTD.0=0;
        delay_ms(50);
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=1;
        delay_ms(50);
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
      }  
     
        else
      if (PINC.1==0){
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=1;
        delay_ms(50);    
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=1;
      PORTD.0=0;
        delay_ms(50);
      
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=1;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);

      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=1;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50); 
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=1;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);  
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=1;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);    
       
      PORTD.7=0;
      PORTD.6=1;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);

      PORTD.7=1;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
       } 
       
      else
        if (PINC.2==0){
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=1;
      PORTD.3=1;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);    
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=1;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=1;
      PORTD.1=0;
      PORTD.0=0;
        delay_ms(50);
      
      PORTD.7=0;
      PORTD.6=1;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=1;
      PORTD.0=0;
        delay_ms(50);
     
      PORTD.7=1;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=1;
        delay_ms(50); 
       
      PORTD.7=0;
      PORTD.6=0;
      PORTD.5=0;
      PORTD.4=0;
      PORTD.3=0;
      PORTD.2=0;
      PORTD.1=0;
      PORTD.0=0;
       
     }
}
========================================================================

Setelah itu, tinggal kita unggah deh ke mikrokontrollernya. Hasilnya adalah seperti pada video di bawah ini.