Rabu, 17 Agustus 2011

BUAT PROGRAM DENGAN VISUAL C#

Pemograman Dengan Software Visual Studio 2008

Pada tugas akhir ini software visual C# 2008 express edition digunakan sebagai indikator dan navigasi arah pada robot melalui GUI (Graphical User Interface) serta melakukan transfer data ke mikrokontroler . Berikut langkah-langkah pembuatan form GUI software Visual C# 2008:

1.      Pembuatan kamera
A.    Jalankan Visual C# 2008, lalu klik File à New Project.
B.     Pada jendela New Project, pilih Windows Forms Application. Beri nama capture_webcam, lalu klik OK.
Gambar Tampilan New Project

C.   Pada Form1, tambahkan komponen berikut:
1 x DSCapture
1 x DSImageDisplay
1 x DsVideoLogger
1 x GenericFilter
1 x Snapshot
1 x GroupBox
3 x Button
1 x PictureBox
1 x led

D.   Atur posisi komponen yang ditambahkan tadi sehingga terlihat seperti pada gambar dibawah ini. 

Gambar : Posisi komponen yang ditambahkan pada form

E.   Atur properti komponen yang ditambahkan seperti pada tabel berikut.
Tabel  Properti komponen pembuatan kamera dengan visual studio 2008

Komponen
Properti
Nilai Properti
Form1
Text
Navigasi robot inspeksi
Button1
Text
Source
Button2
Text
Start
Enable
False
Button3
Text
Capture Bitmap
Enable
False
DsImageDisplay1
Anchor
Top, Bottom, Left, Right
DsCapture1
Enable
False
PictureBox1
Visible
False

F.   Pada Dscapture1, pilih Outputpin, lalu klik tombol
G.   Pada Connection editor pilih InputPin dari dsImageDisplay1, dsVideoLogger1, dan Snapshot1, lalu klik OK.
 Gambar:  Outputpin Connection editor

           H.   ada DsCapture1, pilih AudioOutputpin, lalu klik tombol
I.   Pada form Edit Dscapture1.AudioOutputPin, pilih AudioInputPin dari dsVideoLogger1, lalu klik OK.
Gambar: Audio Outputpin dsVideoLogger1 
J.    Pada snapShot1, pilih OutputPin, lalu klik tombol
K.     Pada form edit snapshot1.OutputPin, pilih InputPin dari genericFilter1, lalu klik OK.
 
Gambar 3.14:  OutputPin SnapShot 

             M.  Klik tombol Source pada webcam, tuliskan program berikut:
   private void button1_Click(object sender, EventArgs e)
  {
        dsCapture1.VideoCaptureDevice.ShowDeviceSelctDialog();
  if ((dsCapture1.VideoCaptureDevice.DeviceName == "None")                      
  (dsCapture1.VideoCaptureDevice.DeviceName == ""))
  {
    dsCapture1.Enabled = false;
    button2.Enabled = false;
    button3.Enabled = false;
    led2.Value = false;
   }
    else
   {
    dsCapture1.Enabled = true;
    button2.Enabled = true;
    button3.Enabled = true;
    led2.Value = true;
     }
           }

         Program diatas digunakan untuk menampilkan dialog untuk memilih source device yang akan digunakan, yaitu pada fungsi   dsCapture1.VideoCaptureDevice.showdeviceSelctDialog();.Klik tombol Start pada webcam 1. Tuliskan program di bawah ini:

                    private void button2_Click(object sender, EventArgs e)
          {
            if (button2.Text == "start")
            {
                dsCapture1.Enabled = true;
                dsCapture1.Start();
                button2.Text = "stop";
                button1.Enabled = false;
                led2.Value = true;
            }
            else
            {
                dsCapture1.Stop();
                dsCapture1.Enabled = false;
                dsCapture1.VideoCaptureDevice.DeviceName = "";
                button2.Text = "start";
                button1.Enabled = true;
                button2.Enabled = false;
                button3.Enabled = false;
                led2.Value = false;
            }
        }

      Untuk memulai capture digunakan fungsi dsCapture1.start();, Untuk menghentikannya digunakan fungsi dsCapture1.stop();.
           N.   Klik tombol Capture pada webcam, tuliskan program dibawah ini:

         private void button3_Click(object sender, EventArgs e)
         {
            snapshot1.TakeSnapshot();
    }

                Fungsi snapshot1.TakeSnapshot(); digunakan untuk mengambil frame video yang  diteruskan ke genericFilter yang kemudian diolah menjadi gambar file.bmp.
           
          O.     Klik genericFilter1 klik ganda ProcessData dan tuliskan program di bawah ini:
   private void genericFilter1_ProcessData(object Sender,           
   Mitov.VideoLab.VideoProcessDataEventArgs Args)
        {
            System.Drawing.Bitmap ABitmap1 =     
            Args.InBuffer.ToBitmap();
            pictureBox1.Image = ABitmap1;
            pictureBox1.Image.Save("d:/picture1.bmp");

            MessageBox.Show("Picture1.bmp create");
        }

Fungsi System.Drawing.Bitmap ABitmap1=Args.InBuffer.ToBitmap();
digunakan untuk memroses frame video dari snapshot ke format.bmp. Data stream file.bmp disimpan pada variabel ABitmap1. ABitmap1 disimpan dalam bentuk file melalui PictureBox.image.save (“D:/hasil_inspeksi/picture1.bmp”);. Folder penyimpanan bisa diganti dengan folder lain.
P.      Pembuatan indikator kemiringan robot
Indikator ini memanfaatkan signal analog dari potensiometer yang terpasang di badan robot kemudian disambungkan pada mikrokontroler. Berikut langkah pembuatannya:
A.    Install software matlab 2008b
B.     Jalankan Software visual c#
C.     Tambahkan tool gauge matlab ke visual C#
D.    Pada toolbox, pilih General  klik kanan  Add Tab, seperti terlihat pada gambar di bawah ini. 
 
Gambar:  Menambahkan matlab ke visual C#

E.    Beri nama tab baru sebagai gauge, seperti pada gambar di bawah ini 
Gambar: Tab baru dengan nama gauge

F.    Agar item pada gauge keluar pilih gauge klik kanan choose items, seperti pada gambar di bawah ini. 

 
Gambar: Penambahan Choose Items gauge

G.    Akan muncul form choose toolbox items, seperti yang terlihat pada gambar   dibawah ini. Klik browse.
Gambar: Form choose toolbox items

H.    Muncul kotak dialog Open. Arahkan ke folder bin tempat gauge di install. Pada proyek ini, gauge di install ke folder C:\Program files\matlab\R2008B\toolbox\gauges\ocx.

Gambar: Browse dari choose toolbox items

I.     Pada form open diatas, pilih Airs.dll, lalu tekan open. Anda akan kembali ke form choose toolbox items. 

 Gambar Centang GMS Aircraft Instrument

J.    Kembali ke form.Cs [design] kemudian ke toolbox àpilih gaugeà aircraft

 
Gambar: Tampilan design form aircraft

K.    Setelah form terbentuk edit active x properties aktifkan artificial horizon 

                           Gambar: Edit properties aircraft

L.    Tambahkan segment gauge pada artifical horizon dan button 

 
Gambar : Tampilan artifical horizon matlab 2008B

M.    Klik tombol button lalu tuliskan program dibawah ini.
               private void button11_Click(object sender, EventArgs e)
           {
            roll0 += roll[5];
            for (int i = 4; i <= 6; i++)
            {
                roll[i] = 0;
            }
            }

                      Program diatas digunakan untuk transfer data dari potensiometer ke
                      mikrokontroler kemudian ditampilkan ke form artificial horisonn fungsi
                      string roll0 + = roll[5]; didefinisikan di mikrokontroler sebagai
                      inisialisasi karakter ketika terjadi transfer data dan fungsi string for (int
           i = 4; i <= 6;i++){roll[i] = 0;} digunakan untuk reset data nilai
                      sinyal input dari potensiometer akan dinolkan kembali.

1.       Komunikasi serial dengan mikrokontroler AVR
Komunikasi serial digunakan untuk transfer data antara mikrokontroler dengan visual C# studio 2008. Pada tugas akhir ini menggunakan mikrokontroler AVR ATMEGA 8535 dan juga usb downloader k510i yang sudah memiliki fitur serial parallel RS232. Langkah-langkah pembuatan dijelaskan dibawah ini:
A.    Tambahkan komponen berikut:
1 x GroupBox
12 x label
6 x ComboBox
2 x Button
Atur letaknya sehingga seperti pada gambar di bawah ini: 

 Gambar:  form application design serial conection

A.    Atur semua properties komponen yang telah ditambahkan diatas sesuai tabel dibawah ini.
 Tabel  Properti komponen komunikasi serial port visual studio 2008

Komponen
Properti
Nilai Properti
GroupBox1
Text
Serial Conection
Button1
Text
Connect
Button2
Text
Play
Label1
Text
Port
Label2
Text
Baud Rate
Label3
Text
Data  Bits
Label4
Text
Stop Bits
Label5
Text
Parity
Label6
Text
Handshake
Combobox1
Text

Combobox2
Text
9600
Items
Custom
110
300
600
1200
2400
4800
9600
14400
19200
38400
56000
57600
115200
128000
256000
ComboBox3
Text
8
Items
5
6
7
8
ComboBox4
Text
One
Items
None
One
Two
OnePointfive
ComboBox5
Text
None
Items
None
Odd
Even
Mark
Space
ComboBox6
Text
None
Items
None
XonXoff
Request to send
Request to send XonXoff

B.     Tambahkan direktif  system.IO.Port diawal program seperti pada gambar dibawah ini.
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;

Penambahan direktif System.IO.Port ini bertujuan untuk memberitahukan compiler agar mendapatkan class yang digunakan dalam aplikasi ini, yaitu port serial.




C.     Pada Form1, klik tombol Event, lalu klik ganda pada event Shown dan tuliskan program dibawah ini.
       private void Form1_Shown(object sender, EventArgs e)
        {
            serialPort1.Close();
            button2.Text = "PLAY";
            groupBox2.Visible = false;
            groupBox3.Visible = false;
            button3.Enabled = false;
            comboBox7.SelectedIndex = 0;

            if (radioButton1.Checked == true)
            {
                dir = maju;
            }
            else
            {
                if (radioButton2.Checked == true)
                {
                    dir = mundur;
                }
                else
                {
                    dir = auto;
                }
            }
            roll0 = 512;
                   }
                 {
                 comboBox1.Items.Clear();
                 foreach (string s in SerialPort.GetPortNames())    
                 comboBox1.Items.Add(s);
                 }

Program diatas bertujuan untuk mendapatkan COM yang bisa digunakan. Sintaks yang berfungsi untuk mendapatkan COM ini adalah
foreach (string s in SerialPort.GetPortNames()).
Serialport1.closed(); digunakan untuk menutup COM dan mengakhiri sesi komunikasi dengan COM.

D.    Klik tombol Connect,  lalu tuliskan program dibawah ini:
    private void button1_Click(object sender, EventArgs e)
    {
      UseWaitCursor = true;
           
      if (button1.Text == "CONECT")
       {
         groupBox2.Visible = true;
         groupBox3.Visible = true;
         button1.Text = "DISCONECT";
         radioButton1.Enabled = false;
         radioButton2.Enabled = false;
         radioButton3.Enabled = false;
         conecting();
        }
            else
            {
                parameterOFF();
                button3.Enabled = false;
                button12.Visible = false;
                button1.Text = "CONECT";
                ConStat = 0;
                if (readStat == 0) disconecting();
                }
                UseWaitCursor = false;
                }

            private void conecting()
            {
            button3.Enabled = false;
            if (comboBox2.Text != "")
            {
            serialPort1.PortName = comboBox1.Text;
            serialPort1.BaudRate = int.Parse(comboBox2.Text);
            serialPort1.DataBits = int.Parse(comboBox3.Text);
            serialPort1.StopBits =  
            (StopBits)Enum.Parse(typeof(StopBits),
            comboBox4.Text);
            serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity),
            comboBox5.Text);
            serialPort1.Handshake =  
            (Handshake)Enum.Parse(typeof(Handshake), comboBox6.Text);
            serialPort1.Open();
            ConStat = 1;
            }
            else
            {
            MessageBox.Show(this, "Nothing COM selected", "Empty COM",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            if (serialPort1.IsOpen)
            {
            toolStripStatusLabel1.Text = "Serial Conected " +
            serialPort1.PortName;
            comboBox1.Enabled = false;
            comboBox2.Enabled = false;
            comboBox3.Enabled = false;
            comboBox4.Enabled = false;
            comboBox5.Enabled = false;
            comboBox6.Enabled = false;
            button3.Enabled = false;
            led1.Value = true;
            }
            else
            {
            toolStripStatusLabel1.Text = "Serial Not Conected";
            }
            }
           
            private void disconecting()
            {
            serialPort1.Close();
            if (serialPort1.IsOpen)
            {
            toolStripStatusLabel1.Text = "Serial still Conected " +   
            serialPort1.PortName;
            }
            else
            {
                button1.Text = "CONECT";
                button2.Text = "PLAY";
                timer1.Enabled = false;
                comboBox1.Enabled = true;
                comboBox2.Enabled = true;
                comboBox3.Enabled = true;
                comboBox4.Enabled = true;
                comboBox5.Enabled = true;
                comboBox6.Enabled = true;
                toolStripStatusLabel1.Text = "Serial Not Conected";
                ConStat = 0;
                led1.Value = false;
               }
   }

Untuk mendapatkan parameter serial port digunakan sintaks seperti dibawah ini.
            serialPort1.PortName = comboBox1.Text;
            serialPort1.BaudRate = int.Parse(comboBox2.Text);
            serialPort1.DataBits = int.Parse(comboBox3.Text);
            serialPort1.StopBits =
            (StopBits)Enum.Parse(typeof(StopBits),
            comboBox4.Text);
            serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity),
            comboBox5.Text);
            serialPort1.Handshake =  
            (Handshake)Enum.Parse(typeof(Handshake), comboBox6.Text);

Pada sintaks diatas, parameter handshake dan namaport, baudrate, databits, stopbits, parity diambil dari combobox yang terdapat pada form. Untuk membuka COM serial digunakan fungsi serialport1.Open();.Serialport1.closed(); digunakan untuk menutup COM dan mengakhiri sesi komunikasi dengan COM.

E.     Klik tombol Play, lalu tuliskan program dibawah ini.
                       private void button2_Click(object sender, EventArgs e)
            {
            if (serialPort1.IsOpen)
            {
                if (button2.Text == "PLAY")
                {
                    parameterON();
                    button2.Text = "STOP";
                    button3.Enabled = true;
                    button12.Visible = true;
                    timer1.Enabled = true;
                    radioButton1.Enabled = true;
                    radioButton2.Enabled = true;
                    radioButton3.Enabled = true;
                     
                    datasend[0] = stop;
                    serialPort1.Write(datasend, 0, 1);
                   
                    datasend[0] = 0;
                    for (int i = 0; i <= 6; i++)
                    {
                        roll[i] = 0;
                    }
                    jarak = 0;
                    rpm[5] = 0;
                    angularGauge1.Value = 0;
                    axAir1.AHRoll = 0 / 10;
                    label2.Text = "";
                    progressBar1.Value = 0;
           
                }
                else
                {
                    parameterOFF();
                    button2.Text = "PLAY";
                    button3.Enabled = false;
                    button12.Visible = false;
                    timer1.Enabled = false;
                    radioButton1.Enabled = false;
                    radioButton2.Enabled = false;
                    radioButton3.Enabled = false;
                    datasend[0] = stop;
                    serialPort1.Write(datasend, 0, 1);
              }
            }
            else
            {
            MessageBox.Show(this, "Serial not conected", "COM not  
            selected", MessageBoxButtons.OK, MessageBoxIcon.Error);
            } }
Untuk membuka COM serial digunakan fungsi serialport1.Open();.
                        Jika serialport1.open();, maka data siap di transfer ke mikrokontroler
                        dengan sintaks serialPort1.Write(datasend, 0, 1); dan button2, button3,
                        button12, radiobutton1, radiobutton2, radiobutton3 di enable kan.
 .
F.      Klik tombol Save, lalu tuliskan program dibawah ini.
   private void button6_Click(object sender, EventArgs e)
       {
       if (serialPort1.IsOpen)
       {
         datasend[0] = saving;
         serialPort1.Write(datasend, 0, 1);
         datasend[1] = Convert.ToByte(Kp * 10);
         datasend[2] = Convert.ToByte(Ki * 10);
         datasend[3] = Convert.ToByte(Kd * 10);
                if (Epwm > 127)
                {
                    datasend[4] = 2;
                }
                datasend[5] = Convert.ToByte((Epwm % 128) * 2);
                datasend[6] = Convert.ToByte(Erpm * 2);
                datasend[7] = Convert.ToByte(setjarak * 2);
                datasend[8] = Convert.ToByte(mode * 2);
                for (int z = 1; z <= 8; z++)
                {
                    serialPort1.Write(datasend, z, 1);
                    int x = 0;
                    while (x < 300000)
                    {
                        x++;
                    }
                }
                progressBar1.Max = progressBar1.Min +              
     (double)setjarak;
            }
            else
            {
                MessageBox.Show(this, "Serial not conected",
    "missing conection", MessageBoxButtons.OK,
     MessageBoxIcon.Error);
                parameterOFF();
                button3.Enabled = false;
                button1.Text = "CONECT";
                ConStat = 0;
                if (readStat == 0) disconecting();
            }
        }

    Untuk mengirim data secara serial digunakan fungsi serialPort1.Write (datasend, 0, 1); yang artinya data string yang berada pada datasend dikirim melalui port parallel ada 3 data yang akan dikirim ke mikrokontroler maka data harus dipisah-pisahkan supaya tidak tabrakan saat transfer data pemisahan data berupa angka yang sebelumnya di AVR juga sudah di inisialkan. Pemisahan data Dapat dilihat dibawah ini:
         datasend[0] = saving;
         serialPort1.Write(datasend, 0, 1);
         datasend[1] = Convert.ToByte(Kp * 10);
         datasend[2] = Convert.ToByte(Ki * 10);
         datasend[3] = Convert.ToByte(Kd * 10);
                if (Epwm > 127)
                {
                    datasend[4] = 2;
                }
                datasend[5] = Convert.ToByte((Epwm % 128) * 2);
                datasend[6] = Convert.ToByte(Erpm * 2);
                datasend[7] = Convert.ToByte(setjarak * 2);
                datasend[8] = Convert.ToByte(mode * 2);

 G.    Klik Load, lalu tuliskan program dibawah ini:
       private byte loading = 3;
            private void button5_Click(object sender, EventArgs e)
            {
            datasend[0] = loading;
            if(serialPort1.IsOpen) serialPort1.Write(datasend, 0, 1);
            }

   Program diatas berfungsi untuk meminta kembali data dari mikrokontroler untuk ditampilkan diForm visual C# sintaks private byte loading = 3; merupakan inisialisasi karakter. (serialPort1.IsOpen) serialPort1.Write (datasend, 0, 1); artinya data string yang berada pada mikrokontroler dikirim melalui port serial.

H.    Klik tombol Start, lalu tuliskan program dibawah ini:
private void button3_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
     parameterOFF();
     datasend[0] = start;
              datasend[1] = dir;
              serialPort1.Write(datasend, 0, 1);
              int x = 0;
              while (x < 300000)
              {
              x++;
              }
              serialPort1.Write(datasend, 1, 1);
              datacek[12] = 3;
              datacek[11] = 0;
              jarak = 0;
          }
           else
         {
MessageBox.Show(this, "Serial not conected", "missing conection", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    }

Program diatas digunakan jika COM serial terbuka maka semua data string yang ada akan dikirim melalu serial port ke mikrokontroler.

  Gambar Tampilan Desain GUI Form C#






 







0 komentar:

Poskan Komentar