Koneksi Arduino Dengan Android via USB


Ada banyak cara agar smartphone android bisa saling bertukar data/berkomunikasi dengan arduino. Salah satu cara yang praktis adalah dengan menggunakan usb serial.

Disini saya akan berbagi tentang komunikasi android ke arduino via usb dengan tambahan library dari  usb-serial-for-android .Dengan library ini kita tidak perlu membeli lagi shield usb host atau arduino ADK untuk berkomunikasi dengan android, jadi secara biaya juga lebih hemat. Syarat menggunakan library ini adalah android support USB Host. 

Pada artikel ini, saya akan menerapkan komunikasi serial antara android dengan arduino untuk menyalakan led .Langkah selanjutnya adalah:
  1. Download library usb-serial
  2. Copy file library usb-serial-for-android-v010.jar ke project yang anda buat di folder libs
  3. Buat file dengan nama device_filter.xml ,isi dengan sourcecode seperti dibawah inilalu simpan di direktori /res/xml/
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <!-- 0x0403 / 0x6001: FTDI FT232R UART -->
        <usb-device vendor-id="1027" product-id="24577" />
    
        <!-- 0x2341 / Arduino -->
        <usb-device vendor-id="9025"
            product-id="0067" />
    
        <!-- 0x16C0 / 0x0483: Teensyduino  -->
        <usb-device vendor-id="5824" product-id="1155" />
    
        <!-- 0x10C4 / 0xEA60: CP210x UART Bridge -->
        <usb-device vender-id="4292" product-id="60000" />
    </resources>
    
  4. Konfigurasi AndroidManifest.xml seperti dibawah ini 
  5. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.testserial"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="19" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" > 
            <activity
                android:name="com.example.testserial.serial">    
                <intent-filter>
           <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter> 
         <meta-data
                  android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" 
                  android:resource="@xml/device_filter" />
            </activity> 
        </application> 
    </manifest>
    
  6. Sekarang kita buat user interfacenya main.xml, sederhana saja menggunakan LinearLayout dan terdiri dari beberapa Button
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"    
        android:orientation="vertical" 
        android:background="#060000">
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#FFFFFF"
            android:textStyle="bold"
            android:textSize="18dp"         
            android:text="Button dengan OnClickListener" />
    
        <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center_horizontal"
        android:paddingTop="10dp"
        >
         <Button
             android:id="@+id/merahOn"
             android:background="#FF0000"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="ON" />
         <Button
                android:id="@+id/putihOn"
                android:background="#FFFFFF"         
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="ON" />
        </LinearLayout>
        
        
        <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center_horizontal"
        android:paddingBottom="5dp"
        >
         <Button
             android:id="@+id/merahOff"
             android:background="#FF0000"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="OFF" />
         <Button
                android:id="@+id/putihOff"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:background="#FFFFFF"
             android:text="OFF" />
         </LinearLayout>
    
        <TextView
            android:id="@+id/teks"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:textColor="#FFFFFF"        
            android:textStyle="bold"
            android:paddingBottom="10dp"
            android:text="" />
        
        <View 
            
            android:layout_width="fill_parent"       
         android:layout_height="1dp"
         android:background="#FFFFFF"
         />
    
        <TextView
            android:id="@+id/textView2"        
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#FFFFFF"
            android:textStyle="bold"
            android:textSize="18dp"  
            android:text="Button dengan OnTouchListener" />
        
        <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center_horizontal"
        android:paddingTop="10dp"
        android:paddingBottom="5dp"
        >
         <Button
             android:id="@+id/BTmerahOn"
             android:background="#FF0000"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="ON" />
         <Button
                android:id="@+id/BTputihOn"
                android:background="#FFFFFF"         
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="ON" />
        </LinearLayout>
        
           <TextView
            android:id="@+id/teks1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:textColor="#FFFFFF"        
            android:textStyle="bold"
            android:paddingBottom="10dp"
            android:text="" />
        
       
    </LinearLayout>
    
  7. Sekarang buat program serial.java
  8. package com.example.testserial; 
    
    import android.app.Activity;
    import android.content.Context;
    import android.hardware.usb.UsbManager;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.View.OnTouchListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    import java.io.IOException;
    import com.hoho.android.usbserial.driver.UsbSerialDriver;
    import com.hoho.android.usbserial.driver.UsbSerialProber;
     
    
    public class serial extends Activity 
    {
        private UsbManager usbManager;
        private UsbSerialDriver device;
        
        TextView teks,teks1;
        byte[] kirim,kirim1;
        int pm,mm=0;
        
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);       
            setContentView(R.layout.main);
            
            teks  = (TextView)findViewById(R.id.teks); 
            teks1 = (TextView)findViewById(R.id.teks1);
            usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
            
            Button merahOn = (Button)findViewById(R.id.merahOn);  
            merahOn.setOnClickListener(new OnClickListener() 
            {
                public void onClick(View v) 
                {
                    if (device != null)
                    {
                        kirim = new byte[] {(byte)'M','O','N','\n'};
                        try
                        {
                            device.write(kirim, 500);     
                            teks.setText("Merah Nyala");
                            mm=0;
                        }
                        catch (IOException e)
                        {
                            teks.setText("Pengiriman data gagal");
                        }
                    }
                    else
                    {
                        teks.setText("Perangkat Tidak Ditemukan");
                    }
                }
            });  
            
            Button putihOn = (Button)findViewById(R.id.putihOn);  
            putihOn.setOnClickListener(new OnClickListener() 
            {
                public void onClick(View v) 
                {
                    if (device != null)
                    {
                        kirim = new byte[] {(byte)'P','O','N','\n'};
                        try
                        {
                            device.write(kirim, 500);     
                            teks.setText("Putih Nyala");
                            pm=0;
                        }
                        catch (IOException e)
                        {
                            teks.setText("Pengiriman data gagal");
                        }
                    }
                    else
                    {
                        teks.setText("Perangkat Tidak Ditemukan");
                    }
                }
            });  
            
            Button putihOff = (Button)findViewById(R.id.putihOff);  
            putihOff.setOnClickListener(new OnClickListener() 
            {
                public void onClick(View v) 
                {
                    if (device != null)
                    {
                        kirim = new byte[] {(byte)'P','O','F','\n'};
                        try
                        {
                            device.write(kirim, 500);     
                            teks.setText("Putih Mati");
                            pm = 1;
                        }
                        catch (IOException e)
                        {
                            teks.setText("Pengiriman data gagal");
                        }
                        
                        if (pm==1 && mm==1)
                        {
                            teks.setText("LED MATI");
                            pm=0;
                            mm=0;
                        }
                    }
                    else
                    {
                        teks.setText("Perangkat Tidak Ditemukan");
                    }
                }
            }); 
            
            
            Button merahOff = (Button)findViewById(R.id.merahOff);  
            merahOff.setOnClickListener(new OnClickListener() 
            {
                public void onClick(View v) 
                {
                    if (device != null)
                    {
                        kirim = new byte[] {(byte)'M','O','F','\n'};
                        try
                        {
                            device.write(kirim, 500);     
                            teks.setText("Merah Mati");
                            mm=1;
                        }
                        catch (IOException e)
                        {
                            teks.setText("Pengiriman data gagal");
                        }
                        
                        if (pm==1 && mm==1)
                        {
                            teks.setText("LED MATI");      
                        }
                    }
                    else
                    {
                        teks.setText("Perangkat Tidak Ditemukan");
                    }
                }
            });  
    
    
        }
    
    public void onResume() 
        {      
          super.onResume();
          
          device = UsbSerialProber.acquire(usbManager);
          if (device == null) 
          { 
             teks.setText("Perangkat Tidak Ditemukan");
          } 
          else 
          {
              try 
              {   
                 device.open();    
                 device.setBaudRate(9600); 
                 teks.setText("Perangkat Ditemukan");             
              } 
              catch (IOException err) 
              {               
                 try 
                 {     
                    device.close();
                 } 
                 catch (IOException err2) 
                 {}
                
                 device = null;
                 return;
              }
          }
                
       }
    }  
  9. Setelah semua program di android dibuat, sekarang kita buat program baca serial di arduino, disini saya menggunakan board arduino uno R3
  10. int ledMerah=5;
    int ledPutih=6;
    
    int maksData = 10;
    char data[10];
    int dataIndex;
    
    void bacaSerial()
    {
      if (Serial.available() > 0)
      {
         char dataMasuk = Serial.read();
         data[dataIndex] = dataMasuk;
         
Pada program android yang dibuat diatas menggunakan Button yang diberi listener OnClickListener, sehingga :
  • Ketika Button di android ditekan maka hanya mengirim perintah satu kali saja 
  • Data serial yang diterima di arduino akan dieksekusi satu kali, dan akan berganti state saat mendapat input lagi dari Button lainnya
Lalu bagaimana jika kita ingin mengirim data secara kontinu ketika button ditekan? 
  • Buat button dengan listener OnTouchListener

sumber: http://arridhoabid.blogspot.com/

Tidak ada komentar

Diberdayakan oleh Blogger.