Wednesday, September 23, 2015

Move to new home

Home page




Dear all my readers,

I'd like to thank you for visiting me in this blog, to show the interest in my posts. I'm happy my blog posts can help you. To continue and improve that, I'm happily announce that this blog will be moved to a new better place, which is luthfifr.com. So, this blog address will no longer be updated. Luthfifr.com is my new personal website. It contains all of my aspects, such as my personal blog, the projects that I've done and my CV. Every page of the website has a unique taste. I give you the previews:

My projects page

My blog page
My CV page

I hope you're gonna enjoy my new home in the virtual world. Don't hesitate to visit me at there.


Sincerely,

Luthfi F.R.

Friday, September 5, 2014

Olaf Loves Summer Very Much

Tools:
- iPad Air
-Adonit Jot Pro Stylus
-Paper by 53 App

Note:
This drawing is inspired by Disney Frozen. I don't take any credit for Olaf Character and Disney Frozen movie.



First posted on my facebook page.

Sunday, August 17, 2014

Digital Painting: My Face

Intro:
This is not my first time doing some digital painting, but it's the first time I did it on iPad. Usually, I do this on my PC using Wacom Bamboo digitizer. It feels so different because I used my fingers to paint, no stylus.

Tools:
-iPad
-Autodesk Sketchbook Pro
-My fingers

My painting:

Tuesday, July 15, 2014

Europe Trip: I amsterdam

17 Sept 2013
Schipol International Airport, Amsterdam

Destinasi kedua adalah Amsterdam. Kota ini seperti New York-nya Belanda, karena ibu kota Belanda adalah Rotterdam. Kota ini sangat unik, suasananya eropa banget, tapi rasanya homey banget. Sayangnya, kami hanya satu hari saja disini. Oleh karena itu, kami benar-benar menikmati momen selama disini. Let's go!!

Amsterdam Central Station

Sesampainya di bandara internasional Schipol kami mencari pusat informasi wisatawan. Hal ini juga kami lakukan setibanya di kota-kota tujuan berikutnya. Kami mendapatkan banyak sekali info tempat-tempat menarik yang dapat dikunjungi, tapi karena waktu kami hanya 1 hari, tidak semua dapat didatangi. Dari bandara Schipol kami menuju ke hotel untuk menaruh barang-barang. Kami belum bisa check-in karena belum jam 1 siang, jadi kami menitipkan barang-barang di receptionist hotel. Lokasi tempat hotel kami menginap sangat unik menurut saya. Tempatnya tidak jauh dari jalan raya, tapi di sekelilingnya adalah rumah penduduk. Kami bisa berjalan kaki menuju halte Tram terdekat. Di Amsterdam, selain terdapat bis sebagai sarana transportasi umum, ada pula Tram, walaupun orang Amsterdam suka sekali bersepeda. Jalanannya rapi dan pengendaranya sangat tertib lalu lintas. Lucunya, petugas bandara Schipol berkata ke kami,"Jangan kaget melihat keruetan di sini. Amsterdam is a total mess!" What?! gak salah tuh? Kalo Amsterdam aja disebut total mess, Jakarta bakal disebut apa ya sama orang itu? Apocalypse mungkin, hahaha.. Tiket untuk Trem ini dibeli di dalam Trem. Kami menggunakan Trem ini untuk menuju Central Station, dari sana kami dapat menuju lokasi wisata mana pun dengan mudah. Dari Central Station kami menuju daerah Volendam menggunakan bus. Perjalanan ditempuh selama 30 menit. Sepanjang perjalanan ke Volendam, pemandangan yang terlihat adalah hamparan padang rumput hijau untuk makan sapi dan kuda. Volendam terkenal dengan seafood-nya yang enak dan foto dengan menggunakan pakaian tradisional orang belanda. Kami mencoba 2 hal tersebut, dan benar saja, seafood-nya enak sekali! The most delicious shrimp that I've ever had! harganya sekitar 5 euros/porsi. Kami juga berfoto menggunakan pakaian tradisional orang belanda, dan tidak lupa para wanita berbelanja oleh-oleh. Sambil menunggu bus untuk kembali ke Amsterdam, kami mengunjungi sebuah desa kecil. Sebenarnya tidak ada yang spesial dari tempat ini, ini hanya kunjungan spontan. Di tengah-tengah desa terdapat sebuah danau. Desa ini tenang sekali. Beberapa pelajar sedang melukis disekitar danau. Di gerejanya sedang ada kegiatan semacam gathering, mereka sedang bermain sebuah permainan seperti gunduh/kelereng, bedanya bola yang mereka pakai seukuran bola golf atau lebih besar sedikit.




Bangunan-banguan dengan desain yang unik

Salah satu hal yang membuat Amsterdam menarik adalah bentuk bangunannya. Unik. kontemporer. Arsiteknya seperti sedang bereksperimen dengan desain bangunan mereka. Hebatnya, bentuk-bentuk bangunan ini terlihat harmonis dengan bangunan-bangunan bergaya kuno, membentuk kota Amsterdam yang unik. Setelah mengunjungi Volendam, kami mengikuti city sightseeing tour dengan bus wisata berwarna merah, ciri khas bus wisata sightseeing di eropa. Seperti biasa selama tour dijelaskan mengenai Amsterdam dan bangunan-bangunan yang kami lewati, ada Nemo Science center, Maritim Museum VOC, Heineken brewery, Jewish museum, dll. Di Maritim Museum VOC ini terdapat replika kapal VOC yang dipimpin Cornelis de Houtman untuk memasuki Indonesia dan memulai monopoli dagang disana. Amsterdam juga terkenal karena kebijakan legalitas marijuana nya. Kalian bisa mendapatkan marijuana di cafe-cafe di Amsterdam, dengan syarat tidak boleh dibawa keluar. Tapi, kalo kalian sedikit lebih jeli, kalian bisa menemukan orang-orang yang menjual marijuana di luar cafe. Setelah city sightseeing kami mengikuti tour dengan menggunakan water bus menelusuri sungai Amstel yang terkenal. FYI, nama amsterdam didapat dari nama sungai yang mengalir disana, Amstel dan bendungan yang ada di kota ini. Saat itu sudah sore dan hujan ringan. Suasananya enak banget. Tour ini cukup lama hampir 2 jam lebih seingat saya, jadi setelah mengikuti tour ini kami langsung pulang ke hotel untuk beristirahat. Berikutnya kami akan terbang menuju Berlin.

----------------o0o----------------

Sunday, July 13, 2014

[Finished] SumoBot

SumoBot adalah jenis robot yang sering dipertandingkan pada perlombaan robot di Indonesia selain Line Follower Robot. Pertandingan untuk SumoBot dibuat seperti pada pertandingan sumo, yaitu 2 robot diadu dalam 1 arena berbentuk lingkaran. Kedua robot ini harus bisa bertahan dan saling menyerang. Robot yang duluan keluar arena dinyatakan kalah. Simple, kan?

Untuk tugas rancang matkul Microcontroller Design and Application(Lab), kelompok saya membuat SumoBot ini. Hasilnya seperti ini: 




Spesifikasi robot:
-Ultrasonic ranging HC-SR04
-Infrared sensors
-ATMega8535
-L298N Dual H-Bridge Motor Driver
-2x 9V Battery
-Optional: LCD HD44780
-2x Built-in Motor DC and Gearbox + wheel
-Chassis Arkrilik
-1x extra wheel untuk penyeimbang

SumoBot didesain untuk bertahan dan menyerang. Setiap robot mendeteksi tepian arena, robot akan mundur dan berputar ke kiri. Saat sensor ultrasonic mendeteksi objek(musuh) dalam jarak kurang dari 20 cm, maka robot akan bergerak lurus ke arah objek tersebut. Arena SumoBot bisa berwarna hitam dengan garis tepian berwarna putih, atau sebaliknya. Jadi pembacaan infrared sensor disesuaikan dengan warna arenanya.

Blok Diagram:


Flowchart:

Pada robot ini PWM dihasilkan melalui timer 2(8 bit). Tidak diterapkan algoritma PID, karena tidak begitu dibutuhkan. Coding dilakukan menggunakan AVR Studio. Berikut ini cuplikan codingannya:

Arah motor:
void goForward(){
PORTD |= (1<<3)|(0<<2)|(1<<1)|(0<<0);//maju
}

void goBackward(){
PORTD |= (0<<3)|(1<<2)|(0<<1)|(1<<0);//mundur
}

void goRight(){
PORTD |= (0<<3)|(1<<2)|(1<<1)|(0<<0);//kanan
}

void goLeft(){
PORTD |= (1<<3)|(0<<2)|(0<<1)|(1<<0);//kiri
}

void goStop(){
OCR2 = 0x00; //PWM 0%
}

void resetPinD()
{
DDRD = 0xFF;
PORTD = 0x00;
}

Codingan ini bisa di-variasi-kan tergantung dari bagaimana pin-pin dari ATMega8535 dihubungkan ke modul L298N. Setiap akan berubah kondisi, L298N harus di-reset, jika tidak maka akan stall.

Menggunakan sensor ultrasonic HC-SR04:
uint16_t getRange(){
count = 0;
sensorPort = 0xFF; //Triggering HC-SR04
_delay_us(10);
sensorPort = 0x00;
while(1)
      {
         if(!(sensorPin & (1<<echoPin))){ //jika pc1 == 0, lanjut loop
continue;
}else{ 
break; //jika pc == 1 , keluar
 }
    }

while(1){
count++;

if(!(sensorPin & (1<<echoPin))){ //jika pc1 == 0, keluar
 break;
}else{ 
 continue; //jika pc == 1 , lanjut loop, ngitung...
 }
}

return count/17; //count/17 = akurat di jarak 20 cm.(sebelumnya count/34 akurat dijarak 10 cm)
}

Codingan ini saya buat dengan metode trial and error. Saya mengukur menggunakan penggaris sambil mencocokan hasil pembacaan sensor ultrasonic. Jika mengikuti user manual dari sensor ini, harusnya tidak seperti ini bentuk codingannya, tapi saya coba tidak bisa. Makanya, saya buat codingannya seperti ini. Jika kalian menggunakan sensor ultrasonic PING))) dari Parallax, codingannya tidak seperti ini, lebih mudah karena sudah ada library-nya.

---------- Semoga Bermanfaat ----------

Monday, June 30, 2014

[Finished] Motor Controller Using PID Algorithm and ATMega8535

Teori Singkat Algoritma PID

Untuk memhami algoritma ini, diharapkan pembaca telah memahami dasar-dasar integral, derivative dan control system dengan baik.

PID singkatan dari Proportional, Integral, Derivative, adalah suatu metode kontrol untuk menentukan presisi dari suatu sistem instrumentasi dengan adanya feedback. Ini adalah tipe kontrol paling tua yang ada. Berikut ini adalah diagram sederhana dari PID:

Umumnya algoritma ini menggunakan kombinasi: P(jarang digunakan), PI(sering digunakan), PID(agak sering digunakan) atau PD(paling jarang digunakan).

Penjelasan paling sederhana dari algoritma PID adalah:

Menggunakan algotima PID ibarat kita sedang mengemudikan kendaraan di sebuah jalan tol. Kita ingin berpindah dari satu lajur ke lajur yang lain. Lajur tujuan kita diibaratkan set point. Kita sebagai pengemudi diibaratkan algoritma PID-nya. Kendaraan yang kita gunakan adalah plant/sistem yang kita kontrol. Di dalam sistem pasti ada gangguan(disturbance), hal ini bisa diibaratkan angin samping yang menerpa mobil kita. Sensor yang dipasang pada plant/sistem diibaratkan sebagai mata pengemudi yang memberikan sinyal feedback. Sinyal error adalah selisih set point dikurangi sinyal feedback.

Jika hanya menggunakan gain Proportional(Kp), output yang keluar hanya akan proporsional dengan sinyal error, akan selalu ada steady state error. Jika besarnya gangguan berubah, kita tidak akan pernah sampai ketujuan(set point). Untuk mengatasi masalah ini, dapat ditambahkan gain Integral(Ki), sehingga kombinasinya menjadi PI. Dengan Ki, ibaratnya jika gangguan semakin besar, maka perlawanan yang kita berikan juga semakin besar, karena dengan integral semua nilai error dijumlahkan, sehingga menigkatkan nilai output dan mempercepat perbaikan error. Sebenarnya kita bisa memperbesar nilai Kp, tapi sistem kita menjadi tidak stabil. Gain Derivative(Kd), dengan menambahkan Kd, kita bisa memberikan nilai yang lebih besar pada Kp dan Ki, sehingga sistem kita menjadi lebih cepat dan lebih baik. Hal ini dilakukan dengan melihat laju perubahan(rate of change) sistem. Jika akan terjadi overshoot, Kd akan menarik controller, sehingga tidak overshoot.
------------------------------------------------------------------------------------------------------------
Motor controller

Pengaplikasian PID ini sangat luas, tapi saat ini saya akan mencontohkan dalam sistem motor controller. Secara sederhana motor controller dapat dibuat secara open loop, sehingga user masih aktif mengontrol kecepatan motor dan jika ada error sistem tidak dapat mengkompensasi. Jika dibuat secara closed loop ditambah dengan algoritma PID, maka sistem dapat melakukan kompensasi dengan cepat dan otomatis dan mempertahankan posisi terhadap set point. Berikut ini adalah skematik alatnya:


Komponen elektronik yang digunakan adalah:
  1. uC ATMega8535
  2. X-TAL 4 Mhz
  3. LCD HD44780
  4. Motor driver L298N
  5. Trimpot/Potensio
  6. Motor DC 6V
  7. Rotary Encoder 22 lubang
  8. LED
  9. Push Button
  10. Beberapa capacitor dan resistor

Untuk menentukan nilai set point dengan menggunakan trimpot. Nilai keluaran dari trimpot diubah menjadi digital menggunakan fitur ADC pada ATMega8535. LCD berfungsi untuk menampilkan nilai set point dan nilai feedback dari rotary encoder. Dengan begitu saya membuat perubahan 1 RPM sama dengan perubahan 1 bit dari trimpot. L298N adalah modul dual H-bridge. Dapat digunakan untuk mengendalikan 2 motor DC. Sinyal PWM untuk mengendalikan kecepatan motor didapat dari output timer 2(8 bit) yang terdapat pada PORT D.7. Push button yang terhubung ke PORT D.2 berfungsi untuk mengubah arah putaran motor.

Flowchart program:


Setelah melakukan inisialisasi yang dilakukan  oleh uC adalah melakukan konversi ADC dari nilai keluaran trimpot. Sinyal dari rotary encoder akan men-trigger interrupt 0. Di dalam interrupt service routine(ISR) interrupt 0 akan dihitung banyaknya sinyal dari rotary encoder. Perhitungan sinyal rotary encoder dipakai untuk perhitungan RPM yang dilakukan pada ISR timer 1 setiap 0.1 detik sekali. PID dihitung dalam sebuah subroutine tersendiri. Hasil perhitungan PID akan dikeluarkan sebagai PWM yang dihasilkan dari proses perhitungan timer 2. Setelah menampilkan nilai set point dan hasil bacaan rotary encoder, proses akan kembali ke konversi ADC, begitupun seterusnya. Jika dianalogikan dengan penjelasan PID diatas, nilai dari trimpot menjadi set point, hasil perhitungan RPM menjadi sinyal feedback, hasil perhitungan PID adalah sinyal PWM dan sinyal error adalah pengurangan nilai dari trimpot dengan hasil perhitungan RPM. Coding dilakukan menggunakan AVR Studio.

Berikut  ini adalah potongan-potongan codingnya:

set point dan PWM:
//ngoper nilai potensio ke timer buat ngehasilin PWM motor
potensio = readADC(0);

//menghasilkan sinyal PWM berdasarkan perhitungan PID
OCR2 = hasil_pid;

PID:
float pi_ai_di(void)
{
sp=potensio;
vp=rpm;
timeChange = 0.1;
error = sp-vp;
p_error = error;
i_error += (error*timeChange);
d_error = (error-prev_error) / timeChange;
prev_error = error;

hasil_pid=(0.8*p_error)+(0.005*i_error)+(0.002*d_error);
//return hasil_pid;
}

Konversi ADC:
unsigned char readADC(unsigned char conversionChannel)
{
ADMUX = (1<<ADLAR)|(conversionChannel); //8 bit ADC on channel conversionChannel with AREF as reference
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS0); //ADC Freq=4MHz/32= 125 kHz, meng-enable ADC, mulai konversi
//nunggu ADC selesai bekerja
while(!(ADCSRA & (1<<ADIF)));
return ADCH; //yang dibaca ADCH doang
}

Perhitungan RPM:
ISR(INT1_vect)
{
frekuensi++;
}

ISR(TIMER1_OVF_vect)
{
//reload TCNT1
TCNT1H=0xE7;
TCNT1L=0x96;
rpm=((frekuensi*60)/(0.1*22)); //rumus ngitung rpm = (frekuensi*60)/(Ts*N); N= jumlah pulsa per 1 putaran; Ts= waktu sampling(detik)
pi_ai_di();
frekuensi=0; //ngereset nilai frekuensi
PORTD ^= (1<<4); //toggling LED
}

Bentuk alatnya:
Sisi rotary encoder

Sisi LCD

-----------------------------------------Semoga Bermanfaat-----------------------------------------

Saturday, February 22, 2014

Epos Gilgamesh-The Epic of Gilgamesh

Hai, para pembaca sekalian! Udah lama nih gak ngepost di blog ini. Beberapa hari yang lalu, gue abis download ebook-ebook tentang ancient book dari salah satu forum online terbesar di Indonesia. Kali ini, gue mau ngepost tentang Epos Gilgamesh. 

Menurut KBBI(Kamus Besar Bahasa Indonesia) online, epos adalah cerita kepahlawanan; syair panjang yang menceritakan riwayat perjuangan seorang pahlawanl wiracarita. Jadi, jangan heran kalo derita di dalam nya menggunakan bahasa yang sangat puitis. Menurut wikipedia bahasa indonesia, bentuk asli epos ini adalah 11 lempeng tanah liat. Epos ini telah diceritakan turun-temurun, usia paling tua yang dapat terlacak adalah 2150 SM(versi Sumeria tertua). Epos ini berhubungan dengan Epos Atrahasis yang menceritakan dari waktu penciptaan sampai banjir besar(air bah), sedangkan Epos Gilgamesh berlatar belakang beberapa waktu setelah kejadian banjir besar.

Di ebook yang gue baca ini, udah gue tandain dan gue kasih terjemahan kata-kata yang gak begitu gue pahamin. Udah mah bahasa inggris, bahasa nya puitis lagi! Tapi buat kalian yang kemampuan bahasa inggrisnya menengah ke atas, gak masalah kok. Ane aja bisa selesai dalam sehari B-)
Lumayan lho baca buku-buku klasik gini bisa nambah kosakata kita.

Kalo ada yang mau download ke sini aja.

Berikut ini gue kasih sinopsisnya:
Gilgamesh adalah seorang raja yang mulia dari Uruk, termasuk yang termulia di muka bumi. Diceritakan, pada saat penciptaannya pada Dewa memberinya tubuh yang sempurna, Shamash Sang Dewa Matahari memberinya keindahan, Adad Sang Dewa Badai memberinya keberanian. Dewa-dewa Yang Mulia memberinya keindahan yang sempurna, melampaui semuanya, mengerikan bagaikan banteng liar. Dua pertiganya dewa, sementara sepertiganya adalah manusia. Dia membangun Uruk, tapi dengan segala kelebihannya dia juga menjadi sewenang-wenang terhadap rakyatnya. Oleh karena itu, para Dewa menciptakan tandingannya, si manusia liar Enkidu. Apa yang terjadi berikutnya? Apakah Enkidu memang setara dengan Gilgamesh? Monggo dibaca sendiri...hehehe