Monday, 5 December 2016

Mengakses LCD 16x2 dengan Arduino

    Pada postingan sebelumnya kita sudah membahas tentang mengakses lcd 16x2 dengan atmega16. Kali ini saya akan berbagi tutorial cara mengakses lcd 16x2 dengan Arduino UNO. Arduino UNO adalah papan sirkuit dengan mikrokontroller atmega328 yang memiliki 14 pin I/O yang dimana 6 pin sebagai output PWM dan 2 pin untuk koneksi serial, 6 pin analog yang biasa dihubungkan ke sensor, clock speed 16MHz, koneksi USB, jack DC, tombol reset dan pinheader.
    Secara umum, arduino terdiri dari dua bagian, yaitu :
1. HARDWARE berupa papan PCB input output (I/O) yang open source
2. SOFTWARE berupa aplikasi Arduino IDE. Dapat di unduh disini


Spesifikasi Arduino UNO


Gambar Arduino UNO

Gambar rangkaian

Program:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //konigurasi pin
void setup() {
  lcd.begin(16, 2);
}
void loop() {
lcd.setCursor(3,0);         //mengatur kursor pada kolom 3, baris 0
lcd.print("LCD ARDUINO");   //menampilkan karakter "LCD ARDUINO"
lcd.setCursor(1,1);         //mengatur kursor pada kolom 1, baris 1
lcd.print("TEKNIK ELEKTRO");//menampilkan karakter "TEKNIK ELEKTRO"
}


Gambar hasil


Mengakses LCD 16x2 menggunakan ATMega16

    Pada tutorial kali ini saya akan berbagi ilmu tentang cara mengakses lcd 16x2 dengan atmega16. LCD (Liquid Cristal Display) adalah salah satu jenis display elektronik yang dibuat dengan teknologi CMOS logic yang bekerja dengan tidak menghasilkan cahaya tetapi memantulkan cahaya yang ada di sekelilingnya terhadap front-lit atau mentransmisikan cahaya dari back-lit. Fungsi LCD sebagai penampil data baik dalam bentuk karakter, huruf, angka maupun grafik.

Konfigurasi Pin LCD 16x2
No
Kaki
Deskripsi
1
Vss
0V (GND)
2
Vcc
+5V
3
VLC
LCD Contrast Voltage
4
RS
Register Select; H: Data Input; L: Instruction Input
5
RD
H:Read; L: Write
6
EN
Enable Signal
7
D0
Data Bus 0
8
D1
Data Bus 1
9
D2
Data Bus 2
10
D3
Data Bus 3
11
D4
Data Bus 4
12
D5
Data Bus 5
13
D6
Data Bus 6
14
D7
Data Bus 7
15
V+BL
Positive Backlight Voltage
16
V-BL
Negative Backlight Voltage

*      DDRAM
DDRAM adalah merupakan memori tempat karakter yang ditampilkan berada. Contoh, untuk karakter ‘A’ atau 41H yang ditulis pada alamat 00, maka karakter tersebut akan tampil pada baris pertama dan kolom pertama dari LCD. Apabila karakter tersebut ditulis di alamat 40, maka karakter tersebut akan tampil pada baris kedua kolom pertama dari LCD. Posisi ini ditunjukkan dalam Gambar 5.2.

*      CGRAM
CGRAM adalah merupakan memori untuk menggambarkan pola sebuah karakter di mana bentuk dari karakter dapat diubah-ubah sesuai keinginan. Namun memori ini akan hilang saat power supply tidak aktif, sehingga pola karakter akan hilang.

*      CGROM
CGROM adalah merupakan memori untuk menggambarkan pola sebuah karakter di mana pola tersebut sudah ditentukan secara permanen dari HD44780 sehingga pengguna tidak dapat mengubah lagi. Namun karena ROM bersifat permanen, maka pola karakter tersebut tidak akan hilang walaupun power supply tidak aktif. Pada Gambar 6.3, tampak terlihat pola-pola karakter yang tersimpan dalam lokasi-lokasi tertentu dalam CGROM. Pada saat HD44780 akan menampilkan data 41H ke DDRAM, maka HD44780 akan mengambil data di alamat 41H (0100 0001) yang ada pada CGROM yaitu pola karakter A.

Gambar bentuk LCD

Gambar rangkaian

    Pada rangkaian diatas, menggunakan Proteus Professional 7 sebagai software simulasi (dapat di unduh disini).  Chip atmega16, lcd 16x2 terhubung pada port C. Dibawah ini adalah contoh programn bahasa C menggunakan compilier CodeVisionAVR.

#include <mega16.h>
#include <delay.h>
#include <alcd.h>

void main(void)
{
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(16);
lcd_gotoxy(0,0);                                  //menempatkan kursor pada kolom 0, baris 0
lcd_putsf("DISPLAY LCD 16X2");         //menampilkan karakter "DISPLAY LCD 16x2"
lcd_gotoxy(1,1);                                  //menempatkan kursor pada kolom 1, baris 1
lcd_putsf("TEKNIK ELEKTRO");          //menampilkan karakter "TEKNIK ELEKTRO"
delay_ms(100);                                   //tunda waktu 100 mili detik

while (1)
      {
      
      }
}

Gambar hasil

    Sekian tutorial tentang cara mengakses LCD 16x2 menggunakan atmega16. Kunjungi tutorial sebelumnya dan nantikan tutorial selanjutnya. . . 



Daftar referensi :
  1. http://elektronika-dasar.web.id/lcd-liquid-cristal-display/
  2. Modul Praktikum Mikroprosesor S1 Pendidikan Teknik Elektro, Universitas Negeri Malang







Wednesday, 30 November 2016

Robot Pengikut Dinding Berbasis ATmega16


Assalammu'alaikum...
Hai teman elektro. gimana kabarnya hari ini ? sehat ? alhamdulillah...

    Kali ini saya akan post informasi tentang robot pengikut dinding dengan atmega16. Robot pengikut atau wall follower adalah sebuah robot yang telah diprogram untuk menelusuri dinding atau labirin. Biasanya robot ini digunakan pada konter robot indonesia (KRI) pada divisi pemadam api beroda (KRPAI Beroda) untuk mencari titik api pada suatu labirin. 
    Untuk mendeteksi jarak antara robot dan dinding, digunakan sensor ultrasonik. Banyak tipe sensor ultasonik dipasaran. Tapi disini saya menggunakan sensor ultrasonik HC-SR04 sebagai sistem navigas robot. Karena ini hanya prototype, maka saya gunakan satu sensor yang terletak pada sisi kanan robot. Baiklah langsung saja dibawah ini adalah blok diagram dari robot yang saya buat.

BLOK DIAGRAM & PENJELASAN


Keterangan
   ·         Input dari robot ini berupa sensor ultrasonik HC-SR04 dengan range jarak >= 3m. Sensor ini terletak pada bagian sisi kanan robot.
   ·         Mikrokontroller ATmega16 sebagai device pemroses I/O.
   ·         Driver motor digunakan untuk mendriver atau memberi sinyal dari mikrokontroller ke motor DC Driver motor yang digunakan sudah dalam bentuk IC yaitu L293D.
   ·         Outputnya menggunakan motor DC 12V 12000 RPM dengan system gearbox.
   ·         Baterai 12V digunakan untuk mensuplai kerja system robot.
   ·         IC 7805 digunakan untuk menkonversi tegangan 12V dari baterai menjadi 5V yang kemudian di arahkan ke mikrokontroller dan I/O.

Prinsip kerja Robot Wall Follower
Algoritma jalan robot:
   ·         Jika robot berjarak  sama dengan 30 cm atau lebih kecil atau sam dengan 25 cm, maka motor kanan akan berputar searah jarum jam dan motor kiri berputar berlawanan arah jarum jam dengan kecepatan yang sama. Dalam kondisi ini robot bergerak maju.
   ·         Jika tidak terdapat objek atau halangan lebih dari 30 cm, maka motor kiri akan berputar berlawan arah jarum jam dengan pwm 190 dan motor kanan berhenti. Dalam kondisi ini robot belok kanan.


RANGKAIAN MINSIS





Penjelasan rangkaian minsis:
   1.      PORTA sebagai port input yang dihubungkan pada sensor ultrasonic HC-SR05.
   2.      PORTB sebagai port untuk downloader dan fungsi lainnya untuk lcd 16x2.
   3.      PORTD sebagai port output yang dihubungkan pada driver motor.
   4.      Kemudian terdapat juga rangkaian regulator 5V yang berfungsi untuk menurunkan tegangan 12V dari baterai menjadi 5V yang dibutuhkan untuk mengaktifkan mikrokontroller. Rangkaian terdapat beberapa komponen yaitu, switch on/off, diode 1N4002, elco 100uf/16v, IC 7805, resistor 220 Ohm, dan led.
   5.      Pada bagian reset terdapat beberapa komponen yaitu, push button, resistor 1k, dan elco 100uf/16.


RANGKAIAN DRIVER MOTOR L293D

Penjelasan rangkaian driver motor L293D:
   1.      Komponen yang digunakan sebagai driver motor adalah L293D. Komponen ini dalam bentuk IC yang lebih mudah dalam instalasinya. Di IC ini terdapat 1A, 2A, 3A, 4A,  1-2EN, 3-4EN. 1A, 2A, 3A, 4A dihubungkan ke PORTD.1, PORTD.2, PORTD.3, PORTD.4 ATmega16 sebagai output dan 1-2EN, 3-4EN dihubungkan ke PORTD.5, PORTD.6 yang digunakan untuk mengatur kecepatan putaran motor.
   2.      Diode 1N4004 digunakan untuk pengaman untuk mikrokontroller jika ada ada tegangan balik dari motor.


FLOWCHART

Keterangan:
   1.      Void kanan(){…} berisi script program untuk mendeteksi jarak.
   2.      Void maju(){…} berisi script program untuk gerak robot maju.
   3.      Void nganan(){…} berisi program untuk robot belok kanan

Penjelasan:
   1.      Memulai program robot wall follower
   2.      Scanning data (dalam bentuk jarak), keadaan awal robot maju.
   3.      Jika sensor ultrasonik mendeteksi ada dinding pada jarak sama dengan 30cm dan lebih kecil atau sama dengan 25cm, maka robot akan bergerak maju mengikuti dindig.
   4.      Jika sensor ultrasonik tidak mendeteksi adanya dinding lebih dari 30cm, maka robot akan belok kanan dengan ketentuan (motor kanan berhenti dan motor kiri berputar berlawanan arah jarum jam).
   5.      Selesai.

Video :





untuk listing program dapat diunduh disini



Sunday, 18 September 2016

Robot Omni Wheel Arduino

Robot Omni Arduino :









Dan ini videonya saat masih menggunakan 1 sensor ultrasonik dibagian depan




Mengakses Seven Segment dengan Atmega16

Assalammualaikum wr. wb . .
Baiklah pada kesempatan kali ini kita akan belajar membuat program seven segment yang nantinya terdapat counter up dan counter down 1 digit sampai 2 digit dengan menggunkan mikrokontroller ATmega16.

untuk skematiknya seperti dibawah ini :


Pada skematik diatas dapat kita tentukan bahwa PORTB.6 dan PORTB.7 sebagai selector yang nantinya digunakan untuk menghidupkan seven segment, kaki kolektor dari kedua transistor BD140 dihubungkan ke pin COM pada seven segment . Kemudian PORTD digunakan untuk  pin LED pada seven segment yang terdiri dari 8 pin yaitu a, b, c, d, e, f, g, dan dp. Namun pada skema diatas hanya 7 pin yang terhubung pada mikrokontroller.

Saatnya kita membuat program, program dibawah ini untuk menampikan angka 3 pada seven segment digit pertama, sementara digit kedua off.

//---------------------------------------------------------------------------------------------//
// Program menampilkan angka 3 pada digit pertama seven segment
//---------------------------------------------------------------------------------------------//
#include <mega16.h>
#include <delay.h>
void main(void){
PORTB=0xc0  //mengatur portb sebagai output, 0b11000000, nilai awal 1
DDRB=0xc0   //mengatur portb sebagai output, 
PORTD=0xff  //mengatur portd sebagai output, 0b11111111 keadaan awal seven segment padam
DDRD=0xff  //mengatur portd sebagai output,
while(1){
        PORTB.6=1;   //aktifkan seven segment kanan (digit pertama)
        PORTB.7=0;   //menonaktifkan seven segment kiri (digit kedua)
        PORTD=0xb0 //menampilkan angka 3, 0b10110000. (common katoda)
        delay_ms(10); //tunda waktu 10milliSecond
}
}


Selanjutnya kita akan membuat program couter up 1 digit seven segment :

//---------------------------------------------------------------------------------------------//
// program couter up 1 digit seven segment
//---------------------------------------------------------------------------------------------//
#include <mega16.h>
#include <delay.h>
unsigned char angka[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98}
void main(void){
PORTB=0xc0  //mengatur portb sebagai output, 0b11000000, nilai awal 1
DDRB=0xc0   //mengatur portb sebagai output, 
PORTD=0xff  //mengatur portd sebagai output, 0b11111111 keadaan awal seven segment padam
DDRD=0xff  //mengatur portd sebagai output,
while(1){
        int naik; // menambahkan variabel naik
        for(naik=0;naik<10;naik++){ 
        PORTB.6=1;
        PORTB.7=0;
        PORTD=angka[geser];
        delay_ms(10); //tunda waktu 10milliSecond
}
}
}




Selanjutnya kita membuat program couter up 2 digit seven segment :

//---------------------------------------------------------------------------------------------//
// program couter up 1 digit seven segment
//---------------------------------------------------------------------------------------------//
#include <mega16.h>
#include <delay.h>
unsigned char angka[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
int satuan,puluhan,data,data_temp,x;
void rumus()
{
data_temp = data ;
satuan = data_temp%10;             //rumus untuk satuan
puluhan = (data_temp/10)%10;  //rumus untuk puluhan
}

void tampil ()
{
//nilai satuan
PORTB.6 = 1;
PORTB.7 = 0 ;
PORTD = angka[satuan];
delay_ms(10);

//nilai puluhan 
PORTB.6 = 0;
PORTB.7 = 1 ;
PORTD = angka[puluhan];
delay_ms(10);
}

void main(void){
PORTB=0xc0  //mengatur portb sebagai output, 0b11000000, nilai awal 1
DDRB=0xc0   //mengatur portb sebagai output, 
PORTD=0xff  //mengatur portd sebagai output, 0b11111111 keadaan awal seven segment padam
DDRD=0xff  //mengatur portd sebagai output,
while (1){
int x;
for(x=0;x<100;x++) {
        rumus();
        tampil(); } 
 }
 }


Sampai disini materi tentang seven segment, bila ada kurangnya dipost dikotak komentar dan bila ini bermanfaat dishare aja ;) .. oke makasih sudah berkunjung ..






Tuesday, 9 August 2016

Body Robot Omni Wheel

Assalamu'alaikum Warahmatulahi Wabarakatuh...
Selamat siang para pembaca setia. Bagaimana kabarnya hari ini ?
Alhamdulillah dapat menulis blog lagi setelah beberapa waktu lalu ada pekerjaan sehingga harus fokus ke pekerjaan tsb. 

Yaaa... kali ini saya akan berbagi sedikit pengalaman saya membuat robot yang menggunakan roda Omni Wheel. 
Robot Omni Wheel, sebuah robot yang menggunaka beberapa roda Omni Wheel dan dilengkapi dengan beberapa sensor untuk pergerakannya seperti sensor pendeteksi garis, sensor ultrasonik, dll.
Robot ini mampu bergerak dan manufer ke berbagai arah tanpa harus memutar arah dari badan robot tersebut. Robot ini mampu melakukan hal tersebut karena penggunaan roda Omni Wheel pada robot tersebut. Roda Omni Wheel ini didesain bentuk lingkaran seperti roda biasa namun diberikan tambahan sub-sub roda pada bagian luarnya, sehingga sistem mekanik tersebut memungkinkan robot untuk bermanufer tanpa harus mengubah posisi badan robot.

Contoh roda Omni Wheell yang saya gunakan pada riset ini adalah Omni Wheel-3 seperti pada gambar berikut :



Dan untuk body robot sendiri seperti dibawah ini :

Disini saya menggunaka aplikasi SketchUp Pro sebagai aplikasi desain, sebenarnya aplikasi ini tidak direcomendasikan sebagai aplikasi desain mekanik, namun karena saya sudah terbiasa dengan aplikasi ini jadi ya nyaman2 gitu :D
Dan hasilnya seperti pada gambar berikut :



Nah sekian sedikit info tentang Robot Omni Wheel dari saya, ini hanya info body dan insyaallah akan saya lanjutkan pada pemasangan elektriknya atau pengontrolnya dilain waktu. terimakasih sudah berkunjung. Wassalamu'alaikum Warahmatulahi Wabarakatuh...

Kritik & saran sangat membantu untuk kemajuan blog ini ;) :D

Saturday, 25 June 2016

Antarmuka Mikrokontroller dengan Toggle Switch

     Saklar toggle adalah salah satu saklar elektrik yang digerakkan secara manual oleh batang mekanik. Saklar toggle tersedia dalam berbagai bentuk dan ukuran, serta digunakan dalam berbagai aplikasi. Gambar dibawah memperlihatkan bentuk fisik dan symbol saklar toggle.


     Rangkaian I/O yang dipakai dalam praktikum, dibutuhkan komponen input yaitu saklar toggle dan LED sebagai komponen output serta Atmega16 sebagai IC pemrosesnya. Untuk rangkaian seperti dibawah ini :

     Seperti pada rangkaian diatas, pada PORTC kita gunakan sebagai INPUT (saklar) dan PORTA sebagai OUTPUT (LED). Soal pertama adalah meng-ON-kan dan meng-OFF-kan seluruh led pada PORTA dengan saklar satu (PINC.0). Maka programnya seperti dibawah ini :

#include <mega16.h>
void main(){
    PORTA=0x00;
    DDRA=0xff; //PORTA sebagai output, 0b11111111, nilai awal 0
    PORTC=0xff;
    DDRC=0x00; //PORTC sebagai input, 0b00000000, pull up     
while(1){
   if(PINC.0==1){  //jika saklar 1 berlogika HIGH, LED nyala
   PORTA=0xff;
   }
   else{          //jika saklar 1 diluar kondisi (selain HIGH), LED mati
   PORTA=0x00;
   }
}
}

dan hasilnya :

Tugas :
1.      Buat program untuk masing–masing algoritma berikut dengan menggunakan if :
a)      Jika switch bit 0 berlogika 1 maka LED bit 4 menyala.
b)      Jika switch bit 1 berlogika 1 maka LED bit 7 menyala.
2.      Buat satu program untuk masing–masing algoritma berikut dengan menggu­na­kan if-else.
a)      Jika switch bit 0 berlogika 1 maka LED bit 4 menyala.
b)      Jika switch bit 1 berlogika 1 maka LED bit 7 menyala.
c)       Jika switch bit 2 berlogika 1 maka LED menyala dengan konfigurasi
ON-OFF-ON-OFF-ON-OFF-ON-OFF (bit7-bit0).
d)      Jika switch bit 3 berlogika 1 maka LED menyala dengan konfigurasi
OFF-ON-OFF-ON-OFF-ON-OFF-ON (bit7-bit0).
e)      Jika switch bit 4 berlogika 1 maka LED menyala semua.
f)        JIka switch bit 5 berlogika 1 maka LED mati semua.

g)      Jika switch bit 6 berlogika 1 maka LED menyala berurutan mulai dari bit0 ke bit7 lalu kembali lagi ke bit0 dengan delay 1 detik

     Nah cukup sekian penjelasan Interface Atmega16 dengan Saklar. Ditunggu kritik dan sarannya dari pengunjung agar menjadi lebih baik lagi untuk kedepannya.
Perbanyaknya uji coba dirumah dengan programmu sendiri dan cari troubleshooting dalam memprogram, karena semua itu adalah pelajaran bagi kita.





Mengakses LCD 16x2 dengan Arduino

    Pada postingan sebelumnya kita sudah membahas tentang mengakses lcd 16x2 dengan atmega16. Kali ini saya akan berbagi tutorial cara menga...