Friday, 4 March 2016

Hello, World! using Arduino and LCD


 


Introduction

Proyek ini diambil dari tutorial yang terdapat di halaman resmi arduino cc. Arduino sendiri sudah memiliki library untuk LCD yaitu LiquidCrystal. Dengan library kita dapat mengontrol tampilan dari LCD yang memiliki 16-pin interface.

Library membantu kita menyederhanakan proses kontrol sehingga kita tidak perlu mengetahui seperti apa instruksi pada low-level-nya.  LCD dapat dikontrol dengan dua mode: 4-bit atau 8-bit. Mode 4-bit membutuhkan tujuh pin I/O dari arduino sedangkan mode 8-bit membutuhkan 11 pin. Untuk menampilkan teks pada screen LCD, kita dapat memanfaatkan mode 4-bit.

What We will Need

  • Arduino atau Genuino Board
  • LCD 2x16
  • 10k ohm potensiometer
  • 220 ohm resistor
  • breadboard
  • kabel jumper secukupnya

Build the Circuit

Pin-pin yang harus dipasang adalah sebagai berikut:
  1. Pin RS ke pin 12
  2. pin E ke pin 11
  3. pin D4 ke pin 5
  4. pin D5 ke pin 4
  5. pin D6 ke pin 3
  6. pin D7 ke pin 2
Agar lebih jelas, perhatikan skema dibawah ini:

 



Start Coding

1:  /*  
2:   LiquidCrystal Library - Hello World  
3:    
4:   Demonstrates the use a 16x2 LCD display. The LiquidCrystal  
5:   library works with all LCD displays that are compatible with the  
6:   Hitachi HD44780 driver. There are many of them out there, and you  
7:   can usually tell them by the 16-pin interface.  
8:    
9:   This sketch prints "Hello World!" to the LCD  
10:   and shows the time.  
11:    
12:   The circuit:  
13:   * LCD RS pin to digital pin 12  
14:   * LCD Enable pin to digital pin 11  
15:   * LCD D4 pin to digital pin 5  
16:   * LCD D5 pin to digital pin 4  
17:   * LCD D6 pin to digital pin 3  
18:   * LCD D7 pin to digital pin 2  
19:   * LCD R/W pin to ground  
20:   * LCD VSS pin to ground  
21:   * LCD VCC pin to 5V  
22:   * 10K resistor:  
23:   * ends to +5V and ground  
24:   * wiper to LCD VO pin (pin 3)  
25:    
26:   Library originally added 18 Apr 2008  
27:   by David A. Mellis  
28:   library modified 5 Jul 2009  
29:   by Limor Fried (http://www.ladyada.net)  
30:   example added 9 Jul 2009  
31:   by Tom Igoe  
32:   modified 22 Nov 2010  
33:   by Tom Igoe  
34:    
35:   This example code is in the public domain.  
36:    
37:   http://www.arduino.cc/en/Tutorial/LiquidCrystal  
38:   */  
39:    
40:  // include the library code:  
41:  #include <LiquidCrystal.h>  
42:    
43:  // initialize the library with the numbers of the interface pins  
44:  LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  
45:    
46:  void setup() {  
47:   // set up the LCD's number of columns and rows:  
48:   lcd.begin(16, 2);  
49:   // Print a message to the LCD.  
50:   lcd.print("hello, world!");  
51:  }  
52:    
53:  void loop() {  
54:   // set the cursor to column 0, line 1  
55:   // (note: line 1 is the second row, since counting begins with 0):  
56:   lcd.setCursor(0, 1);  
57:   // print the number of seconds since reset:  
58:   lcd.print(millis() / 1000);  
59:  }  

 

The Result

 
Read More

Let's Start Playing - Arduino Calculator

People never learn anything by being told, they have to find out for themselves. - Paulo Coelho, Veronika Decides to Die

Intermezzo

Postingan ini merupakan bagian dari Tugas #2 kuliah II3231 Interaksi Manusia Komputer dan Antarmuka.
Terhitung dari pengerjaan Tugas #2 ini hingga seterusnya, saya tidak lagi sekelompok dengan Ipah (karena anggota kelompok kami hanya dua orang) untuk itu saya migrasi ke kelompok 11 yang beranggotakan Hidayat, Alrido Martha Devano, Lenny Putri Yulianti dan Noor Afifah Huwaidah. Jadi, jika uraian yang saya berikan di blog ini kurang jelas, pembaca bisa menelusurinya di blog teman-teman saya tersebut.

Introduction

Kali ini kita akan membuat sebuah kalkulator menggunakan arduino. Masukkan akan diambil dari Keypad Matrix 4x4 dan keluaran akan ditampilkan pada layar LCD 2x16.

Keypad Matrix 4x4

 

Keypad Matrix adalah salah satu dari additional board yang bisa kita gunakan untuk digital inputs. Keypad Matrix terdiri atas sejumlah buttons yang disusun dalam bentuk array/matriks yang mengandung baris dan kolom. Keypad Matrix digunakan untuk memasukkan inputan numerik ke mikrokontroler (dalam hal ini arduino). Keypad Matrix ada yang berbentuk 3x4, 4x4, dan sebagainya. Konektor dari Keypad Matrix biasanya berbentuk female connector.

Kita menggunakan Keypad Matrix 4x4 demi kemudahan. Soalnya, jika kita menggunakan yang 3x4 maka hanya dua button yang tersedia untuk operator, satunya untuk tanda sama dengan ('=') dan satu tombol lagi untuk empat operator kabataku ('x', '/', '+', '-'). Hal ini memang sangat memungkinkan untuk dilakukan dengan cara memodifikasi program pada satu button. Program tersebut mendefinisikan bahwa setiap kali button tersebut di tekan maka operator akan berubah secara iteratif mulai dari kali, bagi, tambah, kurang. Sedangkan, jika kita menggunakan Keypad Matrix 4x4, kita tidak perlu memodifikasi programnya, cukup meng-assign pin 'sedikit' lebih banyak saja.

User manual dari Keypad Marix 4x4 bisa diperoleh dari sini.

 

Cara kerja dari Keypad Matrix 4x4 adalah sebagai berikut:
  • Matrix Keypad menggunakan kombinasi empat baris dan empat kolom untuk menentukan status buttons pada host device dalam hal ini Arduino Uno. Di dalam setiap key terdapat pushbutton yang saling terhubung ke satu baris dan satu kolom.
  • Agar mikrokontroler (Arduino) dapat menentukan button  yang mana yang sedang ditekan, ia perlu menarik states setiap kolom (pin 1-4) baik itu LOW atau HIGH dalam satu waktu kemudian menarik states dari keempat baris (pin 5-8).
  • Contohnya, jika program kita menarik keempat kolom LOW, dan menarik baris pertama HIGH. Maka ia akan membaca input states dari setiap kolom dan membaca pin 1 HIGH. Artinya sebuah kontak sudah dibuat antara kolom 4 dan baris 1 sehingga button 'A' sedang ditekan. 

LCD (Liquid Crystal Display) 2x16

LCD memiliki interface yang paralel, maksudnya bahwa mikrokontroler harus memanipulasi sejumlah pin interface sekaligus untuk mengontrol tampilannya. Pin interface LCD terdiri dari:
  • Pin Read/Write (R/W) --> memilih mode pembacaan atau penulisan
  • Pin Enable (E) --> mengaktifkan penulisan ke register
  • 8 Pin Data (D0-D7) --> state dari pin-pin ini bisa HIGH atau LOW, merupakan bits yang kita tulis ke register ketika kita sedang menulis atau nilai yang kita baca ketika kita sedang membaca
  • Pin display contrast (Vo/Vee), Pin power supply (+5V/Vss dan Gnd/Vdd) dan pin LED Backlight (Bklt+/Anode(A) and Bklt-/Cathode(K)) --> digunakan untuk memberikan daya ke LCD, mengontrol kontras tampilan, dan menghidupkan atau mematikan LED backlight.
 

What We will Need

Untuk dapat membuat kalkulator ini, komponen-komponen yang dibutuhkan sebagai berikut:
  • Arduino atau Genuino Board
  • LCD (Liquid Crystal Display) --> bisa yang merk Hitachi HD44780 (recommended) atau yang dari vendor China Qapass 1602A (yang saya digunakan)
  • Keypad Matrix 4x4
  • 10k ohm potensiometer
  • 220 ohm resistor
  • breadboard
  • kabel jumper secukupnya

Before We Start to Build It

Sebelum memulai membuat kalkulator arduino, kita harus membiasakan diri terlebih dahulu untuk memastikan setiap modul yang diperlukan bekerja dengan baik. Cara mudah untuk melakukannya adalah dengan mencoba setiap modul yang ada. Misal, pada percobaan ini, saya mencoba menampilkan tulisan 'Hello, World!' pada modul LCD dan menampilkan angka-angka yang sudah di-set di keypad ke serial monitor. Hasilnya, dapat dilihat di postingan ini: LCD dan Keypad.

Build the Circuit



Start Coding

Kode diambil dari sini.
1:  /*   
2:   || @version 1.0  
3:   || @author Andrew Mascolo  
4:   || @date May 15, 2013  
5:   ||  
6:   || @description  
7:   || Simple use of keypad and LCD  
8:  */  
9:  #include <Keypad.h>  
10:  #include <Wire.h>   
11:  #include <LiquidCrystal_I2C.h>  
12:    
13:  LiquidCrystal_I2C lcd(0x16,16,2);  
14:    
15:  long first = 0;  
16:  long second = 0;  
17:  double total = 0;  
18:    
19:  char customKey;  
20:  const byte ROWS = 4;  
21:  const byte COLS = 4;  
22:    
23:  char keys[ROWS][COLS] = {  
24:   {'1','2','3','+'},  
25:   {'4','5','6','-'},  
26:   {'7','8','9','*'},  
27:   {'C','0','=','/'}  
28:  };  
29:  byte rowPins[ROWS] = {2,3,4,5}; //connect to the row pinouts of the keypad  
30:  byte colPins[COLS] = {11,10,9,8}; //connect to the column pinouts of the keypad  
31:    
32:  //initialize an instance of class NewKeypad  
33:  Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);   
34:    
35:  void setup()  
36:  {  
37:   lcd.init(); // initialize the lcd   
38:   lcd.backlight();  
39:  }  
40:    
41:  void loop()  
42:  {  
43:   customKey = customKeypad.getKey();  
44:   switch(customKey)   
45:   {  
46:   case '0' ... '9': // This keeps collecting the first value until a operator is pressed "+-*/"  
47:    lcd.setCursor(0,0);  
48:    first = first * 10 + (customKey - '0');  
49:    lcd.print(first);  
50:    break;  
51:    
52:   case '+':  
53:    first = (total != 0 ? total : first);  
54:    lcd.setCursor(0,1);  
55:    lcd.print("+");  
56:    second = SecondNumber(); // get the collected the second number  
57:    total = first + second;  
58:    lcd.setCursor(0,3);  
59:    lcd.print(total);  
60:    first = 0, second = 0; // reset values back to zero for next use  
61:    break;  
62:    
63:   case '-':  
64:    first = (total != 0 ? total : first);  
65:    lcd.setCursor(0,1);  
66:    lcd.print("-");  
67:    second = SecondNumber();  
68:    total = first - second;  
69:    lcd.setCursor(0,3);  
70:    lcd.print(total);  
71:    first = 0, second = 0;  
72:    break;  
73:    
74:   case '*':  
75:    first = (total != 0 ? total : first);  
76:    lcd.setCursor(0,1);  
77:    lcd.print("*");  
78:    second = SecondNumber();  
79:    total = first * second;  
80:    lcd.setCursor(0,3);  
81:    lcd.print(total);  
82:    first = 0, second = 0;  
83:    break;  
84:    
85:   case '/':  
86:    first = (total != 0 ? total : first);  
87:    lcd.setCursor(0,1);  
88:    lcd.print("/");  
89:    second = SecondNumber();  
90:    lcd.setCursor(0,3);  
91:    
92:    second == 0 ? lcd.print("Invalid") : total = (float)first / (float)second;  
93:    
94:    lcd.print(total);  
95:    first = 0, second = 0;  
96:    break;  
97:    
98:   case 'C':  
99:    total = 0;  
100:    lcd.clear();  
101:    break;  
102:   }  
103:  }  
104:    
105:  long SecondNumber()  
106:  {  
107:   while( 1 )  
108:   {  
109:    customKey = customKeypad.getKey();  
110:    if(customKey >= '0' && customKey <= '9')  
111:    {  
112:     second = second * 10 + (customKey - '0');  
113:     lcd.setCursor(0,2);  
114:     lcd.print(second);  
115:    }  
116:    
117:    if(customKey == '=') break; //return second;  
118:   }  
119:   return second;   
120:  }  

The Result



Read More

Step to the Next Level with Arduino (Using ESP8266 Modul) #Part1

Introduction

Selanjutnya, kita akan melangkah ke level yang sedikit lebih advance, yaitu membuat board arduino dapat berkomunikasi dengan perangkat lain dengan menambahkan sebuah modul komunikasi, yaitu modul ESP8266 (wifi). Parameter keberhasilan dari proyek ini adalah membuat modul ESP8266 dapat terkoneksi dengan perangkat lain seperti PC, smartphone, dan lain-lain.

 

Intermezzo

Modul ESP8266 memiliki banyak model/tipe. Sejauh saya ketahui ada sekitar enam belas tipe berdasarkan website resmi ESP8266. Pada dasarnya secara fungsional semua tipe sama saja, yang membedakan hanyalah pada jumlah pin, ukuran, dan konteks penggunaan. 

Yang paling sering digunakan untuk board arduino dan juga banyak referensinya di internet adalah modul ESP8266 tipe-01. Untuk proyek ini, asisten perkuliahan memang tidak menyebutkan secara eksplisit tipe mana yang harus digunakan (sedangkan saya saat itu belum mengetahui kalau modul ini memiliki banyak tipe), jadinya saya secara "tidak sengaja" membeli modul ESP8266 tipe-12. Berikut penampakan dari modul ESP8266 tipe-12 dan tabel perbandingan setiap tipe.



What We Will Need

  1. Arduino atau Genuino Board
  2. Modul ESP8266
  3. Bread Board
  4. Kabel Jumper

Build The Circuit

Karena proyek ini menggunakan modul ESP8266 tipe-12 maka ada sedikit penyesuaian pada skema yang digunakan.



Start Coding

Kode berikut diambil dari sini. Kode ini bertujuan untuk menjadikan arduino dan modul ESP8266 sebagai webserver. Namun, karena terkendala pada modifikasi dari tipe-01 ke tipe-12, kode ini belum berhasil diimplementasikan pada proyek ini.

1:  #include <SoftwareSerial.h>  
2:  #define DEBUG true  
3:  SoftwareSerial esp8266(2,3); // make RX Arduino line is pin 2, make TX Arduino line is pin 3.  
4:                 // This means that you need to connect the TX line from the esp to the Arduino's pin 2  
5:                 // and the RX line from the esp to the Arduino's pin 3  
6:  void setup()  
7:  {  
8:   Serial.begin(9600);  
9:   esp8266.begin(9600); // your esp's baud rate might be different  
10:   sendData("AT+RST\r\n",2000,DEBUG); // reset module  
11:   sendData("AT+CWMODE=2\r\n",1000,DEBUG); // configure as access point  
12:   sendData("AT+CIFSR\r\n",1000,DEBUG); // get ip address  
13:   sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections  
14:   sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80  
15:  }  
16:  void loop()  
17:  {  
18:   if(esp8266.available()) // check if the esp is sending a message   
19:   {  
20:    /*  
21:    while(esp8266.available())  
22:    {  
23:     // The esp has data so display its output to the serial window   
24:     char c = esp8266.read(); // read the next character.  
25:     Serial.write(c);  
26:    } */  
27:    if(esp8266.find("+IPD,"))  
28:    {  
29:     delay(1000);  
30:     int connectionId = esp8266.read()-48; // subtract 48 because the read() function returns   
31:                        // the ASCII decimal value and 0 (the first decimal number) starts at 48  
32:     String webpage = "<h1>Hello</h1>&lth2>World!</h2><button>LED1</button>";  
33:     String cipSend = "AT+CIPSEND=";  
34:     cipSend += connectionId;  
35:     cipSend += ",";  
36:     cipSend +=webpage.length();  
37:     cipSend +="\r\n";  
38:     sendData(cipsend,1000,DEBUG);  
39:     sendData(webpage,1000,DEBUG);  
40:     webpage="<button>LED2</button>";  
41:     cipSend = "AT+CIPSEND=";  
42:     cipSend += connectionId;  
43:     cipSend += ",";  
44:     cipSend +=webpage.length();  
45:     cipSend +="\r\n";  
46:     sendData(cipsend,1000,DEBUG);  
47:     sendData(webpage,1000,DEBUG);  
48:     String closeCommand = "AT+CIPCLOSE=";   
49:     closeCommand+=connectionId; // append connection id  
50:     closeCommand+="\r\n";  
51:     sendData(closeCommand,3000,DEBUG);  
52:    }  
53:   }  
54:  }  
55:  String sendData(String command, const int timeout, boolean debug)  
56:  {  
57:    String response = "";  
58:    esp8266.print(command); // send the read character to the esp8266  
59:    long int time = millis();  
60:    while( (time+timeout) > millis())  
61:    {  
62:     while(esp8266.available())  
63:     {  
64:      // The esp has data so display its output to the serial window   
65:      char c = esp8266.read(); // read the next character.  
66:      response+=c;  
67:     }   
68:    }  
69:    if(debug)  
70:    {  
71:     Serial.print(response);  
72:    }  
73:    return response;  
74:  }  

The Result

Berikut hasil dari langkah-langkah di atas yang sudah dikerjakan:



















   
Terima Kasih ;3


Read More

Views

Designed By Blogger Templates