Kamis, 18 Mei 2017

Analog to Digital Converter

Analog to digital converter merupakan rangkaian yang berfungsi untuk menerjemahkan keadaan secara fisik menjadi sebuah sinyal listrik yang datanya dapat diolah untuk menjadi keluaran yang lain. Aplikasi dari ADC ini dapat digunakan untuk membuat voltmeter. Dalam pembuatannya, ADC melibatkan Atmega untuk memproses konversi tersebut.

Dalam membuat ADC, atmega hanya mampu menerima sinyal maksimum sebesar 5V. jika terjadi kelebihan voltase masuk, maka atmega akan rusak dan terbakar. jadi, bagaimana kalau kita ingin membuat voltmeter yang dapat mengukur voltase sampai lebih dari 5V?

Di sini, kita memerlukan rangkaian tambahan agar voltase masukan tetap 5V. rangkaian ini hanyalah terdiri dari 2 resistor yang di susun secara paralel. Untuk menentukan resistoryang akan digunakan, kita bisa menggunakan peramaan ini:





Setelah menambahkan rangkaian tersebut, maka listrik yang di berikan aman untuk atmega sesuai dengan ambang batas yang mampu di tahan oleh resistor. Sehingga, rangkaian ini menjadi seperti gambar di bawah ini.



Simulasi Motor Driver

Driver motor merupakan sebuah rangkaian yang biasa digunakan untuk mengendalikan motor agar dapat bergerak sesuai dengan yang kita inginkan. Driver ini biasanya digunakan pada motor DC. Tanpa menggunakan driver motor ini sebenarnya kita dapat dengan mudah merubah arah putaran motor DC, yaitu dengan merubah polaritas catu daya sehingga aliran arusnya berubah arah. Dengan demikian, kita bisa mendapat motor dengan putaran clockwise dan dapat pula berputar secara anti-clockwise. Namun tentunya hal ini tidaklah efektif saat digunakan dalam instrument otomatis seperti robot. Perubahan arah puataran tentunya harus dilakukan secara otomatis sesuai dengan keadaan yang telah ditentukan sebelumnya. Dengan demikian, robot akan bekerja dengan efektif dan sesuai dengan keinginan kita.

Untuk membuat driver motor ini, biasanya digunakan rangkaian H-Bridge. Rangkaian ini sukup sederhana dengan memanfaatkan 4 transistor saja. kemudian H-Bridge ini dihubungkan pada atmega untuk selanjutnya mendapatkan perintah sesuai dengan keadaan yang diinginkan. Rangkaian H-Bridge sederhana tampak seperti gambar di bawah ini.



Untuk mensimulasikan pergeraknnya, kita akan menggunakan CvAVR seperti biasa. Coding yang dimasukkan pada CvAVR adalah sebagai berikut:

========================================================================
#include <mega16.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=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=T State1=T State0=T
PORTC=0x00;
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: 10.800 kHz
// Mode: Fast PWM top=0x00FF
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// 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=0xA1;
TCCR1B=0x0D;
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)
      {
        PORTD.0 = 1;
        PORTD.3 = 1;
        OCR1B = 128;  
       
      }
}
========================================================================


Video di bawah ini adalah hasil dari simulasi driver motor.



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.