Senin, 15 April 2013

Code, Program, Build with STM32F100 (Example)

Program on STM32F100 (Extra Suplement)

For additional example to program the microcontroller STM32F100 of ARM Cortex M3, the following are listed some examples and explanations.

So let's start do it......

Modul used in this project is the STM32 VLDI (Value Line Discovery). Modul is quite simple and easy to use in any application. Modul with the size 43.18 mm x 84.6 mm is made up of STM32F100RBT6B, on board ST-LINK, two-output LED LD3 and LD4 (green and blue), and two push buttons (USER and RESET). STM32F100RBT6B that contained on modul has 128 KB of flash memory and 8 KB RAM memory. In addition, it can also be operated at a voltage level of 3.3V or 5V.

Figure  1. STM32 Value Line Discovery

While the pinout configuration of STM32F100 is shown by the following figure.


Figure 2. Pinout Configuration of STM32F100

Here is a sample program to control  LED LD3 (PC9) based on input USER button (PA0). If the USER button is pressed, the LED will light from dim to bright, and if button not pressed, the LED will be "on-off-on-off" interchangeably with a 300ms delay time.

The first thing that needs to be included is library that is used, ie 
#include "stm32f10x.h"                // STM32F10x library
#include "stm32f10x_gpio.h"       // pin I/O library
#include "stm32f10x_rcc.h"        // Reset and Clock Control Library
#include "stm32f10x_tim.h"        // Timer Library
Then, the next step is to create void "delay" to generate delay results.

void delay(uint32_t tunda);
static __IO uint32_t waktu_tunda;
void delay(uint32_t tunda)
{waktu_tunda = tunda;
while(waktu_tunda != 0);}
void SysTick_Handler(void)
{if (waktu_tunda != 0)
{waktu_tunda --;}}
Before we initialize port I/O and Timer, we must activate RCC of GPIO and Timer, as shown by the following syntax. 
GPIO_InitTypeDef  GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure; 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
After that, we can initialize port I/O and Timer, as follows.
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure); 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); 
TIM_TimeBaseStructure.TIM_Period = 1000 - 1;
TIM_TimeBaseStructure.TIM_Prescaler = 240 - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
TIM_OC4Init(TIM3, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE);
From that initialization, we know that PC9 is used as output and PA0 is used as input. TIM3 channel 4 is used to generate PWM signal. While the result of PWM frequency  is 24MHz/(240x1000)=100kHz.

If we seen in the datasheet, TIM3 channel 4 is placed on pin B1. While the LED that is used, is placed on PC9, so we need "remap" function. On the datasheet, PC9 can be converted (remapping) as TIM3 channel 4. The list of code program is 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig( GPIO_FullRemap_TIM3, ENABLE );
The code program is used to activate RCC of AFIO (Alternate-Function I/O) and to choose remap configuration that is used. 

To generate a 10us delay time, we use this function. 
if (SysTick_Config(SystemCoreClock / 100000)) while (1);
If we need a 1ms delay time, we use a prescaler 1000.

Then, the syntax of LED control, inserted in while(1) loop, as follows.
while(1)
    { tombol = (GPIOA->IDR & 0x1);
if (tombol==1)
{ if (i<1000)
{TIM3->CCR4 = i;
delay(100);i++;}
else i=0;}
else
{ TIM3->CCR4 = 1000;
delay(30000);
TIM3->CCR4 = 0;
delay(30000);i=0;}}
If the button is pressed, the LED will light from dim to bright, and if button not pressed, the LED will be "on-off-on-off" (toggle) interchangeably with a 300ms delay time.

for futher information http://stm32.kosyak.info/doc/index.html
                                    http://micromouseusa.com/?p=296

Ok, I think my explanation is enough...


Time is enough........
See you next time.........See you on the top :):):):):)

Selasa, 02 April 2013

The Zeno Phenomenon

Apa itu Zeno Phenomenon? Fenomena Zeno?
So lets starts form beginning.......


Mengenal lebih dalam mengenai Fenomena Zeno.
Apakah anda tahu mengenai sistem hybrid automaton? sistem otomatis hibrid?

Sekilas saja ya, hybrid automaton adalah sistem yang dapat bertahan dalam berbagai macam keadaan. Sehingga untuk memenuhi banyak keadaan tersebut, dibutuhkan berbagai kondisi state sistem dan secara otomatis dapat berpindah dari satu state ke state sesuai dengan keadaan saat itu (real condition).
Contohnya adalah bola yang dijatuhkan ke lantai sehingga bola tersebut memantul ke lantai berulang kali. Pada kondisi tersebut, sistem berpindah-pindah dari keadaan jatuh ke lantai dan keadaan memantul ke atas. Sehingga kondisi tersebut berulang sampai keadaan tak berhingga (infinitely) dalam waktu yang terbatas (finite).

Keadaan berpindah-pindah kondisi yang berulang sampai tak terhingga tersebut dikenal sebagai Zeno Phenomenon.

Lalu, jika diperhatikan, kondisi berulang yang tak berhingga dalam waktu yang berhingga, merupakan suatu keadaan yang buruk jika terjadi pada sistem yang kita rancang. Mengapa dikatakan buruk?

Sebab jika anda menjalankan sistem tersebut dalam jumlah yang terbatas dan waktu yang terbatas, hal tersebut akan menyebabkan sistem anda menjadi bentrok (crash). Jika anda menjalankan simulais pada komputer, maka simulasinya akan menjadi bentrok (crash) / error.

Selain itu, juga bisa kita ketahui bahwa terdapat suatu yang salah atau tidak akurat pada model dari sistem yang kita rancang. Misalnya seperti contoh sebelumnya, yaitu jika bola kita jatuhkan, bola tidak akan memantul pada jumlah yang terbatas pada waktu tertentu. Sehingga ada yang tidak benar pada sistem kita.

Alasan yang lain adalah kita tidak akan tahu secara benar bahwa sistem akan keluar dari keadaan Zeno (Zeno point) yang berarti bahwa akan sampai pada waktu saat jumlah perpindahan keadaan (switch state) yang terbatas. Maka, karena kita tidak dapat mendefinisikan secara benar bahwa sistem keluar dari keadaan Zeno, seperti halnya kestabilan yang asimtotik (asymptotic stability), akan menjadi tak berarti. Sebab, waktu tidak mungkin dalam jumlah yang tak berhingga.

Nah, Sekarang kembali lagi ke pertanyaan "Apa itu Zeno Phenomenon?"


Pada abad sebelum masehi, terdapat filsuf yang berasal dari Yunani, pengikut Parmenides dan terkenal dengan pemikiran paradoksnya, yaitu Zeno of Elea (490-430 BC) yang telah menghabiskan banyak waktunya untuk memikirkan tentang pergerakan (movement) dan dunia yang dinamis (dynamic world), dan salah satu pemikirannya adalah bahwa semua persepsi kita tentang dunia yang statis adalah salah, sebab secara jelas terdapat berbagai macam masalah di luar sana. 



Sebagai contoh sederhana dari pemikiran yang paradoksnya yang terkenal adalah, kelinci yang berlomba lari dengan kura-kura, kura-kura menantang kelinci untuk lomba lari.


Kira-kira siapa yang lebih dulu mencapai garis finish???? 
Apakah kelinci dengan mudahnya mengejar kura-kura karena berlari lebih cepat dibandingkan kura-kura???
Ataukah kelinci membutuhkan usaha yang keras untuk mengejar kura-kura karena kura-kura memulai posisi start yang lebih depan???

Kura-kura memiliki tubuh yang berat dan berlari dengan pelan, sehingga kura-kura diberi kesempatan oleh kelinci untuk menempati posisi start-nya lebih awal dibandingkan kelinci. 
Lomba laripun dimulai. 
Pada setiap titik, kelinci telah mampu mencapai posisi start kura-kura sebelumnya. Pada keadaan tersebut, kura-kura sudah berpindah dari posisi sebelumnya yang sudah dicapai kelinci walaupun tidak sangat jauh, hanya beberapa langkah.
Kemudian kelinci mencapai kembali posisi kura-kura sebelumnya, dan jelas, kura-kura sudah berpindah dari posisi tersebut dan tidak terlalu jauh.
Dan berulang pada kondisi selanjutnya.

Jika kita gambarkan, seperti gambar berikut.
Ilustrasi Gambar 
Loma lari antara kelinci melawan kura-kura

Sehingga paradoks dari cerita kelinci vs kura-kura adalah kelinci tidak akan pernah mendahului kura-kura di garis finish karena setiap waktu dan setiap posisi, kelinci mencapai posisi kura-kura sebelumnya dan kura-kura sudah berlari beberapa langkah walaupun tidak jauh.

Sehingga tidak ada persamaan matematika untuk keadaan pada cerita tersebut.
Tetapi perlu diingat bahwa terdapat deret konvergen pada cerita tersebut. Kita tahu bahkan berpikir bahwa terdapat tak berhingga  interval kecil dari jumlah tersebut yang konvergen dan terdapat titik dimana kelinci memiliki posisi yang sama dengan kura-kura.

Sekarang muncul pertanyaan besar, bagaimana kalo model dari sistem tersebut diterapkan ke dalam sistem hibrid???
Maka akan muncul jawaban yang sama, yaitu tak berhingga perpindahan state pada waktu yang berhingga (terbatas).
Sehingga dari penjalasan yang telah diuraikan, telah menunjukkan bahwa jumlah tak berhingga dari perpindahan state disebut Zeno Phenomenon, sebab hal tersebut dapat dijelaskan kembali pada Zeno dengan banyak paradoks mengenai gerak (motion).

Paradoks: Kelinci tidak akan pernah mendahului posisi kura-kura.
Solusi: Deret konvergen.
Masalah: Tak berhingga banyaknya perpindahan keadaan pada waktu yang berhingga (terbatas).

Sekarang, kita kembali ke konsep awal mengenai Zeno phenomenon.
Pada bagian ini akan diberikan contoh bukan dalam cerita dongeng, tetapi pada persamaan keadaan (state equation) yang diterapkan dalam sistem.

Persamaan untuk kondisi perpindahan keadaan (switching) dan hybrid automaton adalah sebagai berikut.

Persamaan dan hybrid automaton

Jika persamaan tersebut digambarkan ke dalam sumbu x dan t adalah sebagai berikut.

Grafik dari persamaan

Pada gambar grafik, saat waktu awal, nilai menuju 0 dan saat mencapai nol nilai akan +1 dan akan kembali ke nol kembali, sehingga menjadi berulang terus menerus. Dari gambar grafik dapat diketahui bahwa sistem tersebut sangatlah tidak baik. Sehingga hal tersebut disebut Super Zeno Phenomenon. Sebab, tidak hanya berpindah state dengan jumlah tak berhingga pada waktu yang berhingga (terbatas), sistem tesebut berjalan pada waktu yang instan (dalam satu waktu) saat sistem mencapai x=0.

Dengan beberapa pembahasan sebelumnya, kita dapat mengklasifikasikan ke dalam dua tipe Zeno.
  1. Super Zeno (dalam satu waktu), yaitu state dari sistem berubah-ubah state dalam jumlah tak berhingga pada satu waktu instan. Dapat kita ambil contoh misalnya bola yang memnatul ke lantai, tetapi saat menyentuh lantai, sistem akan berpindah state pada jumlah yang tak berhingga, sehingga menyebabkan bola berada di permukaan lantai.
  2. Tipe kedua juga zeno (bukan tipe satu), tetapi sistem berubah-ubah state dalam jumlah tak berhingga pada interval waktu tertentu. Contohnya adalah bola yang memantul ke lantai secara berulang-ulang.
Ada hal positif dan negatif dari Zeno Phenomenon yang berada dalam perubahan state yang berulang-ulang. Hal negatifnya yaitu bahwa Zeno merupakan suatu masalah seperti yang sudah kita ketahui sebelumnya. Akan tetapi, Zeno tipe I adalah tipe yang dapat dikontrol keadaanya dan tidak hanya mampu untuk dideteksi , dalam artian dapat dilihat saat ingin mengehentikan sistem yaitu dalam keadaan saat sistem berubah-ubah keadaan dalam jumlah yang tak hingga dalam satu waktu yang instan.
Sedangkan hal positifnya adalah pada tipe Zeno I , kita dapat mengatasi hal tersebut, sebab sistem bekerja yaitu dengan cara menuju nilai 0 dan konstan pada nilai 0,  dan sistem tersebut adalah sistem yang kita harapkan.
Hal negatif lainya adalah bahwa Zeno tipe II, yaitu tipe untuk bola yang memantul ke lantai, sangat sulit untuk dideteksi ataupun diprediksi dan sangat sulit untuk diatasi (dikontrol) ataupun diperbaiki.

Sehingga Zeno phenomenon, memberi pelajaran pada kita bahwa untuk selalu menguji (test) sistem pada suatu kondisi dan mendapat kondisi Zeno dimana pada kondisi tersebut dapat dilihat akumulasi dari jumlah perubahan ataupun perpindahan dari satu state  ke state  lainya dan untuk menghindari kondisi tersebut, maka kita harus kembali untuk merevisi dan memperbaiki model dari sistem kita.

So, enough for this section......

Zeno Phenomenon menjadi acuan untuk menentukan dan memperbaiki model pada sistem hibrid kita.


Sistem Navigasi Robot berbasis Webcam


Sebuah citra mempresentasikan keadaan dari suatu obyek yang ditangkap oleh webcam. Citra tersebut dapat digunakan sebagai sensor untuk mendeteksi keadaan lingkungan sekitar.  Sebab, citra tersebut mengandung informasi yang dapat diolah dan dimanfaatkan untuk tujuan tertentu. Salah satunya digunakan sebagai sensor visi untuk mengontrol navigasi robot dalam ruangan. Penggunaan sensor visi ini merupakan hal penting karena kecenderungan robot di masa yang akan datang, mampu berjalan secara otomatis untuk membantu melakukan pekerjaan berat. Misalnya mengangkut barang dari satu ruangan ke ruangan yang lain.
Gambar 1 Robot pelayan menghindari halangan

Robot bernavigasi secara otonom dari posisi start menuju  posisi tujuan dengan menghindari halangan,  mengenali dinding dan ruangan yang ada. Terdapat beberapa metode yang digunakan untuk sistem navigasi robot ini yaitu aliran optis (optical flow), deteksi tepi (edge detection),  riwayat gerak (motion history), vanishing point dengan transformasi hough. Sedangkan untuk machine vision digunakan gaussian filteringsobel edge detecion,hough transform.  Transformasi hough akan memberikan letak garis lurus pada piksel. Sedangkan untuk aliran optis akan memeberikan tanda pola perpindahan suatu obyek. Selain itu, riwayat gerak digunakan untuk mendeteksi halangan yang bergerak dan mengestimasi kecepatannya.  Metode rata-rata nilai piksel citra digunakan untuk mendeteksi dinding. Jika nilai rata-rata piksel lebih rendah dari threshold, maka akan dideteksi sebagai dinding. Pengontrolan PWM motor menggunakan kontrol logika neuro-Fuzzy yang didasarkan pada nilai error antara letak garis lurus dengan titik acuan.

Gambar 2 Autonomous Ground Vehicle

Sistem navigasi robot ini nantinya dapat mencapai posisi tujuan dan menggunakan sensor visinya dengan baik  untuk menghindari halangan yang statis maupun yang bergerak. Selain itu, sistem ini juga mampu mengenali dinding dan ruangan yang ada disekitarnya.

Metode yang digunakan untuk :
  • aliran optis (optical flow) : Aliran optis akan memeberikan tanda pola perpindahan suatu obyek.

Gambar 3 Optical flow
  • deteksi tepi (edge detection)
Gambar 3 Edge Detection

  • riwayat gerak (motion history) : Riwayat gerak digunakan untuk mendeteksi halangan yang bergerak dan mengestimasi kecepatannya.
Gambar 4 Motion history
  • vanishing point dengan transformasi hough : Transformasi hough akan memberikan letak garis lurus pada piksel.
Gambar 5 Vanishing point


Sedangkan untuk machine vision digunakan :
  • gaussian filtering
  • sobel edge detecion
  • hough transform

Sedangkan untuk blok diagramnya sebagai berikut.
Gambar 6 Diagram blok sistem kontrol robot

Untuk kontrol pergerakkan robotnya adalah sebagai berikut.
Gambar 7 Sistem navigasi robot

Gambar 8 Deteksi obyek pada mobile robot

Untuk referensi video :


Video 1 Vision-based Line Sensor Demonstration ,CUHK Robocon 2011



Video 2 Vision-based Robot Navigation. Robot Vision Group, Alicante


Video 3 Vision based Navigation and Localization


Video 4 Lane tracking and vehicle tracking (rainy day)


Video 5 Vanishing Point Detection for Automated Driving







"Orang boleh pandai setinggi langit, tapi selama ia tak menulis, ia akan hilang di dalam masyarakat dan dari sejarah" Pramoedya Ananta Toer (Rumah Kaca, hlm. 352)