Selasa, 21 Oktober 2014

Career Path dan Cita-Cita Diri

Setiap orang memiliki cita-cita. Penulis pun memiliki cita-cita. Untuk mencapai cita-cita tersebut, diperlukan tahapan yang jelas dalam meraih cita-cita tersebut. Berikut ini adalah cita-cita diri penulis.
No
Tahap
Umur
Cita-Cita
1
Tahap Kerja dan Studi Lanjut
23 tahun – 30 tahun
Setelah lulus sarjana dari ITB, ada dua skenario yang dirancang, yaitu
1.      Langsung lanjut S2 di luar negeri selama 2 tahun dan setelahnya bekerja.
2.  Langsung bekerja dan mencari peluang untuk lanjut studi S2
2
Tahap Wirausaha Produktif
31 tahun – 40 tahun
Pada tahap ini, wirausaha yang dibangun sudah mantap untuk dijalankan. Penulis pada tahap ini sudah tidak lagi bekerja di bawah orang lain. Penulis beralih karir ke wirausaha bidang kuliner.
3
Tahap Manajerial
41 tahun – 50 tahun
Pada tahap ini, penulis sudah menjadi investor. Pekerjaan penulis yang dilakukan pada tahap ini sifatnya lebih ke mengelola kekayaan.
4
Tahap Hasil Investasi
> 50 tahun
Pada tahap ini, penulis menikmati hasil kerja yang diperoleh selama tiga tahap sebelumnya. Hasil tersebut digunakan baik untuk pribadi maupun untuk beramal dan untuk bangsa dan negara.

SMART merupakan singkatan dari Specific, Measurable, Achievable, Realistic, dan Timescaled.  SMART dalam hal ini digunakan untuk menganalisis cita-cita diri penulis. Bentuk SMART dari cita-cita saya.
Elemen
Penjabaran
Specific
1.      Pada tahap kerja dan studi lanjut, penulis hendak lanjut studi S2 di luar negeri dan bekerja.
2.      Pada tahap wirausaha produktif, penulis hendak wirausaha di bidang kuliner.
3.      Pada tahap manajerial, penulis hendak menjadi investor.
4.      Pada tahap hasil investasi, penulis menikmati hasil kerja dari tiga tahap sebelumnya.
Measurable
1.      Pada tahap kerja dan studi lanjut, ukuran lanjut studi S2 adalah studi dilakukan di luar negeri selama 2 tahun. Ukuran bekerja yang akan dilakukan penulis adalah penulis bekerja di perusahaan nasional.
2.      Pada tahap wirausaha produktif, ukuran wirausaha yang hendak dijalankan penulis adalah wirausaha di bidang kuliner dengan keuntungan 50 juta per bulan dengan mempekerjakan 10 orang pegawai dengan skala kota pada awal usaha. Wirausaha ini tentunya akan terus dikembangkan.
3.      Pada tahap manajerial, ukuran investasi yang dilakukan penulis adalah investasi di pasar modal di sector rill di bursa efek nasional maupun internasional.
4.      Pada tahap hasil investasi, penulis mampu menyekolahkan anak-anak penulis ke luar negeri sampai strata dua (S2).
Achievable
1.      Untuk bekerja maupun lanjut studi S2, penulis perlu memliki nilai TOEFL yang baik, yaitu sekitar 550.
2.      Untuk memulai wirausaha, penulis perlu mengumpulkan modal setidaknya sebesar 50 juta rupiah dari hasil kerja dan orang-orang yang mau menjadi mitra maupun pegawai.
3.      Untuk memulai karir menjadi investor, penulis perlu mengumpulkan modal setidaknya 1 milyar dari hasil wirausaha.
4.      Dengan wirausaha dan investasi yang berkelanjutan, pada tahap hasil investasi, penulis dapat menikmati hasil kerja yang dilakukan pada tiga tahap sebelumnya.
Realistic
1.      Untuk memperoleh skor 550 pada TOEFL, penulis perlu belajar bahasa inggris secara berkelanjutan selama kuliah.
2.      Untuk mengumpulkan modal dalam memulai wirausaha, penulis menyisihkan 10% dari gaji kerja (asumsi gaji penulis 5 juta rupiah per bulan)
3.      Untuk mengumpulkan modal dalam memulai investasi, penulis menyisihkan 16,7% dari keuntungan wirausaha.
4.      Penulis dapat menikmati hasil kerja yang dilakukan pada tiga tahap sebelumnya, dengan syarat wirausaha dan investasi yang telah dibangun masih berjalan.
Timescaled
1.      Tahap kerja dan studi lanjut diraih penulis pada umur 23 tahun
2.      Tahap wirausaha produktif diraih penulis pada umur 30 tahun
3.      Tahap manajerial diraih penulis pada umur 40 tahun
4.      Tahap hasil investasi diraih penulis pada umur 50 tahun

Analisis SWOT dalam hal ini digunakan untuk mengkonsolidasikan hasil analisis diri sendiri, baik dari sisi eksternal diri maupun sisi internal diri. Dalam analisis SWOT, ada empat hal yang dideskripsikan.
S (Strength/Kekuatan) : Kemampuan internal positif yang dimiliki seseorang
W (Weakness/Kelemahan) : Aspek internal yang bersifat negatif yang dapat menghambat peluang kesuksesan seseorang
O (Opportunity/Peluang) :  Faktor eksternal yang dapat memberikan peluang untuk kesuksesan seseorang
T (Threat/Ancaman) : Faktor eksternal yang berpotensi untuk membahayakan seseorang
Setelah SWOT dikembangkan, maka SWOT dapat digunakan untuk mengevaluasi cita-cita seseorang dan mengidentifikasi strategi potensial untuk masa depan seseorang. Berikut ini adalah analisis SWOT diri penulis.
Strength
       Memiliki semangat juang yang cukup tinggi
      Prestasi akademik yang baik (IPK > 3.5)
      Senang membaca dan mendengarkan
      Rajin dan tekun
      Dapat mengatur waktu dengan baik
      Bisa bahasa inggris
      Bertanggung jawab pada diri sendiri
Opportunity
       Penulis kuliah di ITB dan hal tersebut menjadi nilai tambah.
      Networking teman sekolah cukup luas.
       Perkembangan teknologi informasi yang pesat
Weakness
      Sulit mengingat nama orang, kecuali kalau sudah akrab dengan orang tersebut.
       Belum terbiasa mengambil keputusan dengan cepat.
      Kemampuan kepemimpinan saya masih tertimpa oleh kemampuan manajemen (jadi tidak mencolok terlihat)
      Kemampuan persuasi kurang baik
      Dukungan finansial kurang baik
Threat
          Link/jaringan/channel/networking bisnis penulis kurang
        Lingkungan jalanan yang tidak mendukung
      Banyak orang yang memiliki kemampuan lebih daripada diri penulis
      Persaingan kerja semakin ketat
        Maraknya tindakan KKN


Selasa, 06 Mei 2014

Tank Arduino (Proyek Akhir II 3231 Interaksi Manusia dan Komputer dengan Antarmuka) [Story Part]

"A story isn't a story if there isn't an introduction"

Para pembaca setia sekalian, pada postingan kali ini, penulis akan memaparkan masalah-masalah yang terjadi selama pembuatan Tank Arduino, hal-hal khusus yang perlu diperhatikan, dan cerita-cerita menarik selama pembuatan Tank Arduino. Masalah-masalah yang terjadi selama pembuatan Tank Arduino tentunya sangat beragam dan akan penulis bahas pada postingan kali ini, Adapun selama pembuatan Tank Arduino, ada hal-hal khusus yang perlu diperhatikan ketika akan melakukan pembuatan Tank Arduino. Selain itu, ada hal-hal menarik yang menurut penulis perlu untuk diceritakan kepada pembaca. Tidak ketinggalan pula analisis dan komentar penulis terhadap pembuatan Tank Arduino ini. Sebelum itu, penulis hendak menunjukkan foto-foto dan video yang merupakan dokumentasi pembuatan Tank Arduino. Gambar-gambar di bawah ini merupakan dokumentasi Tank Arduino.

Controller (Courtesy to M. Yusmanto)

Tank (Courtesy to M. Yusmanto)
Berikut ini adalah video dari Tank Arduino.


Selama pembuatan Tank Arduino berlangsung, penulis beserta teman-teman menemukan beberapa masalah serta hal-hal khusus yang perlu diperhatikan, yaitu:
  1. Wiring atau pemasangan komponen yang cukup sulit, di mana kabel-kabel terkadang lepas. Untuk itu, perlu dilakukan pemsangan kabel dengan tepat pada breadboard atau PCB dan juga perlu dilakukan penyolderan pada bagian-bagian tertentu.
  2. Untuk pemasangan modul radio pada mikrokontroller, dibutuhkan pin female atau barang sejenis, di mana pada bagian ujung modul radio, pin tersebut dipasang. Jika hendak melakukan penyolderan antara pin dengan kabel jumper, hendaknya pin tidak dipasangkan ke modul radio untuk mencegah kerusakan modul radio akibat panas yang ditimbulkan dari solder. Kemudian, pemasangan bagian modul radio pada mikrokontroller harus hati-hati. Modul radio milik teman penulis terbakar karena salah pemasangan pada mikrokontroller.
  3. Suplai power pada mikrokontroller cukup banyak, sehingga power dari baterai dirasa kurang. Untuk itu, digunakan power bank sebagai suplai pada mikrokontroller, baik untuk remote control maupun tank. 
  4. Beban tank antara bagian depan dan bagian belakang perlu diseimbangkan. Hal ini dilakukan agar tank dapat melaju dengan lancar.
  5. Untuk menggerakan motor pada tank, dibutuhkan MOSFET untuk meningkatkan tegangan, mengingat tegangan yang keluar dari pin digital Arduino sangat kurang untuk menggerakan motor pada tank. Pemasangan MOSFET pun harus dilakukan dengan hati-hati, jangan sampai terbalik. Penulis sempat meledakkan MOSFET karena salah pemasangan (mungkin, tapi yang pasti adalah MOSFET penulis meledak).
  6. Secara teoritis, jarak efektif antara dua modul radio adalah 100 meter (tanpa penghalang dan tanpa amplifier/penguat). Hal ini sesuai dengan praktiknya, di mana tank dicoba untuk dikendalikan sejauh mungkin hingga jarak 100 meter. 
  7. Antara gerak tank terhadap perintah remote control, terdapat delay, yaitu 10 ms. Delay ini merupakan delay pengiriman sinyal dari remote control ke tank. Faktor lain seperti penghalang, noise, dll. dapat membuat delay menjadi lebih lama.
  8. Torsi pada motor perlu disesuaikan dengan kebutuhan. Dalam percobaan ini, digunakan rasio 114,7:1, di mana untuk setiap motor, digunakan empat gear. Semakin besar rasio, maka laju tank semakin lambat dan penggunaan power semakin besar. Dengan rasio yang besar, tank akan semakin kuat untuk melaju di tanjakan dan semakin kuat untuk melewati rintangan.
  9. Gunakan serial monitor pada program Arduino IDE untuk mengecek transmisi sinyal radio, baik di sisi remote control maupun tank.
  10. Untuk melakukan upload kode program, perhatikan serial port yang digunakan untuk melakukan hal tersebut, mengingat ada dua Arduino yang digunakan pada percobaan ini.
Selama pembuatan Tank Arduino berlangsung, tentu ada beberapa hal yang menurut penulis cukup menarik. Hal-hal tersebut antara lain.
  1. Penulis beserta teman-teman sempat pusing dalam melakukan debugging program. Saat pembuatan, penulis sempat bingung karena modul radio pada tank hanya menerima sinyal pada salah satu switch saja. Masalahnya ternyata sederhana. Pada bagian radio.write, byte yang digunakan untuk menuliskan sinyal perlu 4 byte karena pada awalnya bagian radio.write dituliskan radio.write (msg, 1), yang artinya data yang ditransmisikan berukuran 1 byte. 1 byte data hanya mampu mentransmisi satu sinyal saja. Debugging ini dilakukan selama satu hari. Ya, satu hari hanya untuk debugging.
  2. Penulis beserta teman-teman sempat kesulitan mencari ban dan motor untuk tank. Hal ini terjadi karena pihak yang menjual barang tersebut tidak banyak. Tapi, pada akhirnya, penulis beserta teman-teman menemukan barang tersebut. Butuh waktu 2-3 minggu untuk mencari kedua barang tersebut meningat penulis beserta teman-teman baru pertama kali mencari barang tersebut.
  3. Saat penulis beserta teman-teman mencoba mengetes motor ke pin digital, ternyata motor tidak berputar. Penulis kemudian mencoba mencari penyebabnya. Ternyata tegangan yang keluar dari pin digital sangat kecil sehingga tidak mampu menggerakan motor. Untuk meningkatkan tegangan yang keluar dari pin, ada dua pilihan yang penulis temukan, yaitu menggunakan relay dan menggunakan MOSFET. Akhirnya penulis memilih menggunakan MOSFET, mengingat penulis dan teman-teman tidak pernah menggunakan relay sebelumnya.
Dalam hal ini, penulis dan teman-teman memiliki beberapa analisis dan komentar terhadap Tank Ardunio yang dibuat. Berikut ini adalah analisis dan komentar penulis.
  1. Tank Arduino ini dapat dikomersilkan, dengan catatan biaya produksi perlu ditekan sehingga harga jual dari produk tidak terlalu mahal.
  2. Pemasangan komponen perlu dilakukan dengan hati-hati, mengingat komponen-komponen yang digunakan untuk membuat Tank Arduino harganya cukup mahal dan rentan akan kerusakan.
  3. Pada bagian perangkat lunak, sinyal yang hendak ditransimikan perlu disesuaikan dengan kebutuhan.
  4. Packaging Tank Arduino dapat dilakukan sekreatif mungkin dengan menggunakan bahan apapun, dengan catatan modul radio tidak terhalangi.
Sekian saja tulisan saya kali ini. Inilah bagian terakhir dari tulisan saya mengenai Tank Arduino. Pembaca sekalian tentunya dapat mencoba membuat tank arduino versi pembaca sendiri dan tidak perlu takut untuk gagal dan mencoba. Sampai bertemu kembali di tulisan saya yang berikutnya.

Referensi : 
  • Banzi,Massimo.2011.Getting Started with Arduino, 2nd Edition.U.S.A:O’Reilly Media, Inc
  • http://forum.arduino.cc/index.php?topic=138663.0
  • Margolis, Michael. 2011. Arduino Cookbook, 2nd Edition. U.S.A:O’Reilly Media, Inc.
Credits to : Allah SWT, kedua orang tua saya, Pak Soni (selaku dosen mata kuliah), teman kelompok (Luthfi Al Fikri, Michael Yurry, Amal Syahreza, M. Yusmanto dan Reza S.), teman-teman angkatan STI 2011, blogger.com, serta siapapun yang telah membantu terlaksananya tugas ini.

Jumat, 02 Mei 2014

Tank Arduino (Proyek Akhir II 3231 Interaksi Manusia dan Komputer dengan Antarmuka) [Explanation Part]

"God is Bigger Than Any Obstacles"
Para pembaca setia sekalian, kali ini saya akan memberikan penjelasan lengkap terkait Tank Arduino yang sebelumnya telah saya paparkan melalui slide presentasi pada postingan sebelumnya. Tank Arduino merupakan tank yang dikendalikan oleh mikrokontroller, yaitu Arduino. Dalam hal ini, terdapat dua Arduino yang digunakan, yaitu Arduino untuk remote controller (transmitter) dan Arduino untuk Tank (receiver). Arduino yang digunakan untuk percobaan kali ini adalah Arduino Uno, baik untuk remote controller (transmitter) maupun untuk Tank (receiver). Antara remote controller dengan Tank, terjadi komunikasi satu arah, di mana Tank menerima sinyal dari remote controller. Tank sendiri dapat digunakan sebagai mainan maupun sebagai alat simulasi. 
Ilustrasi Tank

Sistem Tank Arduino sendiri memiliki spesifikasi sebagai berikut.
  1. Input (Masukan). Masukan yang dibutuhkan sistem adalah switch untuk memberikan respon kepada Tank.
  2. Proses. Proses yang terjadi pada sistem Tank Arduino adalah transmisi sinyal dari remote controller ke Tank.
  3. Output (Keluaran). Keluaran dari sistem Tank Arduino adalah gerak dari motor yang menyebabkan Tank dapat bergerak.
Anda tentunya sudah tidak sabar untuk membuat alat ini kan? Mari kita lihat bersama-sama blok diagram dari perangkat keras (hardware) yang digunakan untuk membuat Tank Arduino. Secara umum, ada dua sistem dari perangkat keras (hardware) yang terdapat pada Tank Arduino, yaitu transmitter dan receiver.


Pada bagian transmitter, sinyal dari switch akan diproses oleh modul radio untuk dikirimkan ke Tank.

Pada bagian transmitter, terdapat beberapa alat dan bahan yang digunakan untuk membuat transmitter itu sendiri, yaitu:
  1. 1 buah mikrokontroller Arduino Uno R3 beserta kabel konektor USB
  2. 2 buah resistor 10K ohm
  3. 2 buah switch 
  4. 1 set modul radio nRF24L01 2.4GHz Radio/Wireless Transceivers
  5. 1 set breadboard atau PCB
  6. Kabel jumper secukupnya
Setelah Anda mendapatkan semua komponen di atas, Anda dapat memulai membuat rangkaian transmitter. Gambar di bawah ini menunjukkan rangkaian transmitter atau remote control
Courtesy of Amal Syahreza
Pada bagian receiver, sinyal yang berasal dari transmitter akan diterima oleh radio dan diteruskan untuk menggerakan motor.


Pada receiver, terdapat beberapa alat dan bahan yang digunakan untuk membuat receiver (Tank) itu sendiri, yaitu:
  1. 1 buah mikrokontroller Arduino Uno R3 beserta kabel konektor USB
  2. 1 set wheel + track (untuk ban dari Tank)
  3. 1 set double gearbox (untuk motor/mesin Tank)
  4. 1 set universal plate (untuk chassis Tank)
  5. 2 buah IRF520/540 MOSFET
  6. 2 buah dioda IN4007
  7. 1 set modul radio nRF24L01 2.4GHz Radio/Wireless Transceivers
  8. 1 set breadboard atau PCB
  9. Kabel jumper secukupnya
Setelah Anda mendapatkan semua komponen di atas, Anda dapat memulai membuat rangkaian receiver. Gambar di bawah ini menunjukkan rangkaian receiver atau Tank.

Courtesy of Amal Syahreza
Untuk membuat tampilan produk lebih bagus dan lebih baik, Anda dapat menggunakan berbagai macam bahan pembungkus seperti karton, dus, triplek, ataupun bahan-bahan lain sekreatf Anda. 

Setelah semua rangkaian dibuat, Anda dapat mulai membuat kode program untuk mengoperasikan mikrokontroller, baik untuk remote controller maupun Tank. Untuk membuat maupun menjalankan kode program, Anda membutuhkan sebuah PC ataupun laptop yang telah terinstall Arduino IDE. Apabila di PC ataupun laptop Anda telah tersedia Arduino IDE, buka program Arduino IDE dan masukkan kode program di bawah ini. Kemudian klik verify pada program Arduino IDE Anda. 

Source code untuk Remote Control

// Source Code untuk Transmitter (Remote Control)
// Courtesy of http://forum.arduino.cc/index.php?topic=138663.0

//Library SPI dan RF 24
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

//Pendefinisan Variabel
int msg[2]; //Array Pesan
RF24 radio(9,10); //Pin untuk Radio
const uint64_t pipe = 0xE8E8F0F0E1LL; //Pipe Radio
int SW1 = 7; //Switch 1
int SW2 = 4; //Switch 2
int sentSignal=0; //Sinyal kirim
 
void setup(void){
  Serial.begin(9600); //Setup Serial
  radio.begin(); //Setup Radio
  radio.openWritingPipe(pipe);
}
 
void loop(void){
//Inisialisasi variabel
  msg[0]=0;
  msg[1]=0;
  sentSignal=0;
  //Pembacaan Switch 1
  if (digitalRead(SW1) == HIGH) {
    msg[0] = 111;
    Serial.println("SW1");
    sentSignal=1;
  }
  //Pembacaan Switch 2
  if (digitalRead(SW2) == HIGH) {
    msg[1] = 111;
    Serial.println("SW2");
    sentSignal=1;
  }
  //Pembacaan Sinyal
  if (sentSignal==1){
    radio.write(msg, 4);
  }
  Serial.println("_______");
}
Source code untuk Tank



// Source Code untuk Receiver (Tank)
// Courtesy of http://forum.arduino.cc/index.php?topic=138663.0

//Library SPI dan RF 24
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

//Pendefinisan Variabel
int msg[2]; //Array Pesan
RF24 radio(9,10); //Pin untuk Radio
const uint64_t pipe = 0xE8E8F0F0E1LL; //Pipe Radio
int Motor1 = 3; //Motor 1
int Motor2 = 5; //Motor 2

void setup(void){
  Serial.begin(9600); //Setup Serial
  radio.begin(); //Setup Radio
  radio.openReadingPipe(1,pipe);
  radio.startListening();
  pinMode(Motor1, OUTPUT); //Setup Pin untuk Motor
  pinMode(Motor2, OUTPUT);
}
 
void loop(void){
  //Pengecekan sinyal dari transmitter
  if (radio.available()){
    //Inisialisasi variabel pengecekan
    bool done = false;   
    while (!done){
      done = radio.read(msg, 4); //Baca pesan dari transmitter     
      Serial.println(msg[0]); //Salin pesan ke serial    
      Serial.println(msg[1]);
      Serial.println("__________");
      //Pembacaan pesan untuk motor 1    
      if (msg[0] == 111){
        delay(10);
        digitalWrite(Motor1, HIGH);
      } else {
        digitalWrite(Motor1, LOW);
      }
      //Pembacaan pesan untuk motor 2 
      if (msg[1] == 111){
        delay(10);
        digitalWrite(Motor2, HIGH);
      } else {
        digitalWrite(Motor2, LOW);
      }
      delay(10);
    }
  }
  else{
    Serial.println("No radio available");
  }
}


Setelah Anda melakukan verify terhadap kedua kode di atas, klik upload untuk mengunggah kode program ke dalam mikrokontroller. Unggah kode program untuk remote control ke rangkaian remote control dan unggah kode program untuk Tank ke rangkaian Tank. Anda tentunya penasaran kan terhadap cara kerja program? Gambar di bawah ini menunjukkan flowchart dari kode program.

Flowchart untuk remote control


Flowchart untuk Tank


Sekian saja postingan saya kali ini. Pada bagian selanjutnya, saya akan memaparkan masalah-masalah yang terjadi selama pembuatan Tank Arduino, hal-hal khusus yang perlu Anda perhatikan, serta cerita-cerita menarik selama pembuatan Tank Arduino ini. Dokumentasi foto dan video pun akan dipaparkan pada bagian selanjutnya dalam "Story Part".

Tank Arduino (Proyek Akhir II 3231 Interaksi Manusia dan Komputer dengan Antarmuka) [Presentation Part]

Para pembaca setia sekalian, sudah lama tidak berjumpa. Kali ini, saya akan memaparkan mengenai proyek saya yang berjudul

"Tank Arduino"

Untuk lebih jelasnya, silahkan lihat presentasi di bawah ini!




Untuk penjelasan lengkap proyek ini, nantikan postingan selanjutnya.

Selasa, 25 Maret 2014

Kalkulator dengan Arduino (Tugas 5 II 3231)

"Indeed, every act depends on it's intentions"
Para pembaca setia sekalian, kali ini saya akan bercerita mengenai pembuatan tugas saya, yaitu membuat sesuatu dari Arduino dengan memanfaatkan display dan keypad. Saya dan teman-teman kelompok berencana untuk membuat sebuah kalkulator perkalian dua angka. Display yang digunakan oleh kelompok kami berupa LCD Module 16x2 dan Keypad yang digunakan adalah keypad 3x4. 

Courtesy of memegenerator.net
Pada percobaan sebelumnya, kami melipatkan kabel ke pin-pin LCD dalam rangka memasang rangkaian LCD. Namun, pada percobaan kali ini, kami menggunakan pin yang khusus untuk disolder ke komponen. Menyolder komponen merupakan hal yang cukup menantang bagi saya mengingat terakhir kali saya menyolder komponen adalah pada saat saya masih SMA. Pada awalnya, teman kelompok saya yang melakukan penyolderan. Tapi, karena dia sudah lama tidak menyolder dan lupa caranya, maka pekerjaan tersebut diserahkan kepada saya. Saya menggunakan solder tembak/pistol untuk menyolder pin-pin khusus ke LCD. Saat percobaan, saya masih ingat cara menyolder, yaitu bagian ujung komponen yang mau disolder didekatkan dulu, baru timah solder didekatkan. Saat itu, penyolderan komponen lancar-lancar saja. Itu cerita saya menyolder komponen.  

Anda tentunya sudah tidak sabar kan untuk mencoba membuat kalkulator ini? Untuk membuat kalkulator, persiapkan beberapa alat dan bahan berikut ini.
  1. 1 buah Mikrokontroller Arduino Uno R3 beserta kabel konektor USB
  2. 1 buah Keypad 3x4
  3. 1 buah Display (LCD Module 16x2 atau Multidigit 7-Segment)
  4. 1 buah 10K ohm potensiometer 
  5. Kabel jumper secukupnya
  6. 1 buah Laptop / PC Desktop yang sudah terinstall Arduino IDE
  7. 1 buah breadboard (apabila diperlukan)
Setelah Anda mendapatkan semua komponen di atas, selanjutnya Anda dapat memulai membuat rangkaian kalkulator. Gambar di bawah ini menunjukkan rangkaian kalkulator yang akan dibuat dengan menggunakan display LCD 16x2 dan Keypad 3x4.


Setelah rangkaian selesai dibuat, nyalakan PC Anda. Buka program Arduino IDE. Masukkan kode program di bawah ini. Kemudian klik tombol verify pada program Arduino IDE Anda. 


// Kalkulator perkalian dua angka pada Arduino
#include ≺liquidcrystal.h≻ // Library untuk LCD
#include ≺keypad.h≻ // Library untuk Keypad

const int numRows = 4; // Jumlah Baris pada Keypad
const int numCols = 3; // Jumlah Baris pada Keypad
const int debounceTime = 20; // Waktu kestabilan switch pada Keypad

const int numRow = 2; //Jumlah Baris pada LCD
const int numCol = 16; //Jumlah Kolom pada LCD

// Inisialisasi library dengan angka pada interface pin
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

// Definisi Keymap pada Keypad
const char keymap[numRows][numCols] = {
{ '1', '2', '3' } ,
{ '4', '5', '6' } ,
{ '7', '8', '9' } ,
{ '*', '0', '=' }
};

// Array untuk baris dan kolom pin pada keypad
const int rowPins[numRows] = { 0, 2, 3, 4 }; // Baris 0-3
const int colPins[numCols] = { 5, 6, 7 }; // Kolom 0-2

//Deklarasi Variabel pada Kalkulator
boolean valOnePresent = false;
boolean next = false;
boolean final = false;
String num1, num2;
long int ans;
char op;
long int key1;
char oper;
long int key2;

void setup()
{
  Serial.begin(9600);
  for (int row = 0; row < numRows; row++)
  {
    pinMode(rowPins[row],INPUT); // Set pin baris sebagai masukan
    digitalWrite(rowPins[row],HIGH); // Menyalakan Pull-Up
  }
  for (int column = 0; column < numCols; column++)
  {
    pinMode(colPins[column],OUTPUT); // Set pin kolom sebagai keluaran
    // Untuk penulisan
    digitalWrite(colPins[column],HIGH); // Buat semua kolom tidak aktif
  }
  lcd.begin(numCol, numRow); // Mulai membuat tampilan di LCD
  lcd.print("CALCULATOR"); // Pesan pada LCD.
  lcd.setCursor(0, 1); // Set cursor pada kolom 0, baris 1 untuk tampilan angka
}

void loop()
{
  char key = getKey(); //Mendapatkan key dari keypad
  //Pembacaan angka pertama dan angka kedua
  if ((key=='1'||key=='2'||key=='3'||key=='4'||key=='5'||key=='6'||key=='7'||key=='8'||key=='9'||key=='0')){
    if (valOnePresent != true){
      num1 = num1 + key;
      int numLength1 = num1.length();
      lcd.setCursor(0, 1); 
      lcd.print(num1);
    }
    else {
      num2 = num2 + key;
      int numLength2 = num2.length();
      lcd.setCursor(num1.length()+1, 1);
      lcd.print(num2);
      final = true;
    }
  }
  // Pembacaan Operator
  else if (valOnePresent == false && (key == '*')){
    if (valOnePresent == false){
      valOnePresent = true;
      op = key;
      lcd.setCursor(num1.length(), 1); 
      lcd.print(op);
    }
  }
  // Operasi Penghitungan
  else if (final == true && key == '='){
    if (op == '*'){
      ans = num1.toInt() * num2.toInt();
    }    
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print(ans);
  }
}

// Fungsi mendapatkan key dari tombol keypad yang ditekan
char getKey()
{
  char key = 0; // Inisialisasi nilai awal key
  for(int column = 0; column < numCols; column++)
  {
    digitalWrite(colPins[column],LOW); // Aktifkan kolom
    for(int row = 0; row < numRows; row++) // Periksa semua baris
    // Tombol/Key ditekan.
    {
      if(digitalRead(rowPins[row]) == LOW) // Pemeriksaan tombol, apakah ditekan atau tidak
      {
        delay(debounceTime); // debounce
        while(digitalRead(rowPins[row]) == LOW)
          ; // Menunggu key untuk dilepaskan
          key = keymap[row][column]; // Key yang ditekan
      }
    }
    digitalWrite(colPins[column],HIGH); // Deaktivasi kolom.
  }
  return key; // Mengembalikan nilai key
}

Setelah program di atas terverifikasi, sambungkan Arduino ke PC Anda dengan menggunakan kabel konektor USB. Klik tombol upload pada PC Anda. Anda pun dapat mencoba hasil rangkaian Anda.

Courtesy of memegenerator.net
Pada rangkaian, awalnya kami menggunakan pin 1,2,3,dan 4 untuk Row keypad. Pada saat kelompok kami mencoba program di atas, hasilnya tidak begitu lancar, karena ketika tombol keypad ditekan, angka 4,5, dan 6 tidak muncul. Kemudian, setelah kami coba mengganti pin, ada sesuatu yang aneh dengan LCD. Tampilan LCD menjadi kacau. Saat itu, kami pun langsung mencabut sumber arus rangkaian. Pada saat bagian bawah LCD (bagian solder) dipegang, bagian tersebut terasa panas, sehingga kami pun menghentikan percobaan hingga bagian bawah LCD menjadi dingin kembali. Kami pun mencoba kembali LCD. Ternyata, tidak muncul tampilan apapun. Hanya backlight LCD saja yang berfungsi. LCD kelompok kami pun tidak bisa digunakan. Akhirnya, kami meminjam LCD dari kelompok lain. Percobaan pada saat itu pun terhenti. Saya pun penasaran dengan pin 1 pada Arduino. Saya coba cari di internet, ternyata pin 1 arduino merupakan pin khusus yang digunakan untuk transmisi TTL serial data. Kemudian, saya pun teringat pelajaran elektronika di SMP ketika saya menyolder komponen yang ber-chip. Saat itu, chip harus dilepaskan terlebih dahulu agar panas dari solder tidak sampai kepada chip sehingga merusak chip. Jadi, dengan kata lain, LCD saya sekarang beralih fungsi menjadi LED.

Beberapa hari kemudian, kami kembali melakukan percobaan dengan kode dan rangkaian yang sama (tentunya dengan meminjam LCD ke kelompok lain). Percobaan pun akhirnya berhasil, walaupun pada saat pemasangan komponen di awal, LCD tidak menampilkan apapun. Tapi, kami mencoba merangkai ulang rangkaian dan rangkaian pun dapat beroperasi sebagaimana mestinya. 

Berikut ini adalah foto dan video untuk percobaan yang kami lakukan.

Foto percobaan : 
Proses Penyolderan LCD (Courtesy by Lutfhi Al Fikri)

Rangkaian Jadi (Courtesy by Lutfhi Al Fikri)

Video Percobaan :

Courtesy by Lutfhi Al Fikri

Sekian saja tulisan saya kali ini. Pembaca sekalian tentunya dapat mencoba hal diatas dan tidak perlu takut untuk gagal dan mencoba. Sampai bertemu kembali di tulisan saya yang berikutnya.

Referensi : Margolis, Michael. 2011. Arduino Cookbook, 2nd Edition. U.S.A:O’Reilly Media, Inc.

Credits to : Allah SWT, kedua orang tua saya, Pak Soni (selaku dosen mata kuliah), teman kelompok (Luthfi Al Fikri, Michael Yurry, Ryan Adi Wicaksana dan Faris Taufiq Zaqiy), teman-teman angkatan STI 2011, blogger.com, serta siapapun yang telah membantu terlaksananya tugas ini.

Jumat, 14 Maret 2014

Membuat Termometer dengan Display dan Pengukuran Terkalibrasi (Tugas 4 II 3231)


Para pembaca setia sekalian, pada tugas kali ini, kami membuat sebuah termometer dengan menggunakan mikrokontroller Arduino, di mana hasil pembacaan sensor LM35 yang kami gunakan ditampilkan dalam sebuah display dan sudah terkalibrasi. Display yang digunakan oleh kelompok kami berupa LCD Module 16x2 dan rumus kalibrasi yang kami gunakan didapatkan dari regresi linier yang dilakukan dengan membandingkan suhu di sensor dengan suhu di termometer.

Anda tentunya sudah tidak sabar kan untuk mencoba membuat termometer ini? Untuk membuat termometer ini, persiapkan beberapa alat dan bahan berikut ini.
  1. 1 buah Mikrokontroller Arduino Uno R3 beserta kabel konektor USB
  2. 1 buah Sensor suhu LM35
  3. 1 buah Display (LCD Module 16x2 atau Multidigit 7-Segment)
  4. 1 buah 10K ohm potensiometer 
  5. Kabel jumper secukupnya
  6. 1 buah Laptop / PC Desktop yang sudah terinstall Arduino IDE
  7. 1 buah breadboard (apabila diperlukan)
Setelah Anda mendapatkan semua komponen di atas, selanjutnya Anda dapat memulai membuat rangkaian termometer. Gambar di bawah ini menunjukkan rangkaian termometer yang akan dibuat dengan menggunakan display LCD 16x2.



 Ada beberapa hal yang perlu dicatat dalam pemasangan rangkaian pada gambar di atas.
  • Hati-hati dengan pemasangan sensor suhu LM35. Jika sensor dilihat dari bagian yang datar, bagian kiri disambungkan ke pin +5V, bagian tengah disambungkan ke pin 0 analog, dan bagian kanan disambungkan ke pin ground.
  • Untuk pemasangan kabel-kabel ke LCD, kami menyarankan agar kabel disolder ke LCD ataupun menggunakan pin yang khusus untuk disolder ke komponen. Sebenarnya, bisa saja Anda melipatkan kabel ke pin-pin LCD seperti yang kami lakukan, tetapi Anda harus berhati-hati, mengingat potensi terjadinya arus pendek pada rangkaian lebih tinggi jika Anda menggunakan cara ini. 
Setelah rangkaian selesai dibuat, nyalakan PC Anda. Buka program Arduino IDE. Masukkan kode program di bawah ini. Kemudian klik tombol verify pada program Arduino IDE Anda. 

  
/*
Kode program untuk menampilkan suhu pada LCD
Perhitungan suhu telah dikalibrasi
*/

#include ≺liquidcrystal.h≻ // Library untuk LCD

const int numRows = 2; //Jumlah Baris pada LCD
const int numCols = 16; //Jumlah Kolom pada LCD
const int inPin = 0; // analog pin
const byte degreeSymbol = B11011111; //Simbol Degree

// Inisialisasi library dengan angka pada interface pin
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
  lcd.begin(numCols, numRows); // Mulai membuat tampilan di LCD
  lcd.print("Suhu sekarang : "); // Pesan pada LCD.
}
void loop()
{
  lcd.setCursor(0, 1);  // Set cursor pada kolom 0, baris 1 untuk tampilan angka suhu
  temperature(); // Fungsi penghitungan suhu
  lcd.write(degreeSymbol); // Tulis simbol derajat
  lcd.print("C"); // Tulis simbol celcius
}
void temperature()
{
  int value = analogRead(inPin); // Menerima nilai dari sensor suhu
  float millivolts = (value / 1024.0) * 5000; // Konversi nilai analog sensor ke tegangan
  float celsius = millivolts / 10; // Sensor output = 10mV per degree Celsius
  float calibrated = celsius + 0.16981663; // Rumus kalibrasi (menggunakan regresi linear)
  lcd.print(calibrated); // Tampilkan angka suhu pada LCD
  delay(1000); // Tunggu 1 detik untuk menampilkan pembacaan terbaru
}
  
Setelah program di atas terverifikasi, sambungkan Arduino ke PC Anda dengan menggunakan kabel konektor USB. Klik tombol upload pada PC Anda. Anda pun dapat mencoba hasil rangkaian Anda.

Untuk kalibrasi pengukuran, kami melakukan kalibrasi dengan cara membandingkan pengukuran suhu pada alat yang kami buat dengan termometer lab. Pengukuran yang dilakukan termometer lab lebih stabil dibandingkan dengan pengukuran sensor suhu. Oleh karena itu, dibutuhkan rumus kalibrasi. Kami melakukan hal ini di Laboratorium Fisika Dasar ITB pada siang hari. Pengambilan data dilakukan dengan interval 10 detik untuk setiap satuan data. Berikut ini adalah data kalibrasi pertama yang kami peroleh (suhu dalam satuan celsius).

No. Suhu Sensor Suhu Termometer
1 30,27 28,6
2 31,25 28,6
3 31,25 28,6
4 28,81 28,6
5 26,86 28,3
6 31,25 28,3
7 25,93 28,3
8 26,86 28,3
9 29,3 29
10 23,93 29

Pada saat pengambilan data kalibrasi yang pertama, kami sedikit ragu dengan hasil data yang kami peroleh sehingga kami melakukan pengambilan data kalibrasi yang kedua. Pengambilan data kalibrasi yang kedua kami lakukan beberapa lama setelah pengambilan data kalibrasi yang pertama. Berikut ini adalah data kalibrasi pertama yang kami peroleh (suhu dalam satuan celsius).

No.Suhu Sensor Suhu Termometer
1 29,3 28,3
2 26,86 28,3
3 26,8628,3
429,3 28,3
527,3428,6
629,328,6
7 29,328,6
8 26,86 28,6
9 29,3 29
10 27,34 29

Data pengukuran awal beserta rumus regresinya tidak dipakai karena ternyata, pada saat pengukuran dan pengambilan data kalibrasi awal, sensor suhu sebelumnya terkena sinar matahari secara langsung, di mana pada saat percobaan, cuaca sangat panas sehingga panas masih tersisa pada sensor. Berdasarkan data kalibrasi yang kedua, kami pun menurunkan rumus regresi dengan menggunakan kalkulator. Kami pun mendapatkan rumus sebagai berikut.

Y = X + 0,16981663

di mana X = nilai suhu pada sensor dalam celsius dan Y = nilai suhu pada termometer dalam celsius (nilai yang sudah terkalibrasi).
Rumus di atas tentunya sudah terimplementasi dalam kode program yang kami buat.
 
Berikut ini adalah foto dan video untuk percobaan yang kami lakukan.

Foto percobaan :


 


Video percobaan :




Sekian saja tulisan saya kali ini. Pembaca sekalian tentunya dapat mencoba hal diatas. Sampai bertemu kembali di tulisan saya yang berikutnya.

Referensi : Margolis, Michael. 2011. Arduino Cookbook, 2nd Edition. U.S.A:O’Reilly Media, Inc.

Credits to : Allah SWT, kedua orang tua saya, Pak Soni (selaku dosen mata kuliah), teman kelompok (Luthfi Al Fikri, Michael Yurry, Ryan Adi Wicaksana dan Faris Taufiq Zaqiy), teman-taman angkatan STI 2011, blogger.com, serta siapapun yang telah membantu terlaksananya tugas ini.