Sunday, July 26, 2015

Kontrol Arduino Melalui Unity

Biasanya game engine unity hanya dipakai dalam pembuatan game tanpa banyak yang tau jika software game engine tersebut dapat juga dikoneksikan dengan hardware. Pada tulisan kali ini saya akan menjelaskan cara mengendalikan lampu led melalui unity? Apa itu unity? Unity adalah adalah software game engine atau aplikasi untuk membuat game, baik game 2d maupun 3d. Apa sajakah yang diperlukan dalam pembuatan project kali ini, ya tentu saja software unity dan modul arduino, beberapa led dan komponen pendukung lainya. Pada tutorial kali ini saya menggunakan unity 4.1.5 dan modul arduino uno r3.
Untuk bahasa pemprograman unity yang saya pakai adalah c# boleh juga memakai bahasa lain seperti java dan boo. O iya jangan lupa instal terlebih dahulu api untuk sinkronisasi arduino dengan unity minimal api/net framework versi 2 ke atas. Pada gambar di bawah ini adalah rangkaian arduino dan beberapa led.

Gambar rangkaian arduino dan led

Gambar rangkaian jadi
Setelah modul dan beberapa led selesai di rangkai sekarang waktunya untuk memulai pemprograman unity dan arduino. Anda membutuhkan file RYG.ino pada program arduino dan sebuah kompiler. Cara kerja pada project kali ini adalah led akan berubah setiap detik. Berikut ini script pada program arduino
int gLed = 10; //pin nomor 10 pada modul arduino
int yLed = 11; // Pin 11
int rLed = 12; // Pin 12

void setup() {
pinMode(gLed, OUTPUT); //seting semua pin led sebagai output
pinMode(yLed, OUTPUT);
pinMode(rLed, OUTPUT);

digitalWrite(gLed, LOW);//pesan untuk mematikan semua led
digitalWrite(yLed, LOW);
digitalWrite(rLed, LOW);
}

void loop() {

digitalWrite(gLed, HIGH); //led berwarna hijau menyala
delay(1000); // Waits a second
digitalWrite(gLed, LOW); //led berwarna hijau mati
digitalWrite(yLed, HIGH); // led berwarna kuning menyala
delay(1000); // menunggu jeda beberapa detik
digitalWrite(yLed, LOW); // led warna kuning mati
digitalWrite(rLed, HIGH); //led warna merah menyala
delay(1000);
digitalWrite(rLed, LOW);
}

Jika semua program bekerja dengan baik sekarang beralih ke pemprograman unity. Diakhir tulisan saya akan sertakan file zip. Anda dapat mendownloadnya pada link tersebut. Setelah anda download buka file tersebut pada lembar kerja unity akan tampil 3 kotak warna merah, hijau dan kuning. Ketika anda play project tersebut maka kotak-kotak tersebut akan berotasi.
      File RYGFromUnity.ino berbeda dari file sebelumnya. Pertama yang harus anda catat adalah penggunaan serial.begin(9600). Ini yang akan menjadikan data dapat diterima oleh kedua software tersebut, dan juga dapat dipergunakan untuk debugging,  seperti pada debugging unity akan tetapi lebih cenderung ke beberapa bit.
      Selanjutnya yang tak kalah penting adalah Serial.readBytesUntil(lf, myCol, 1); fungsi tersebut yang menyebabkan arduino dapat membaca beberapa data  yang datang melalui serial sehingga salah satu karater dapat terdeteksi. Sebenarnya kadang-kadang dengan data ini dapat juga dibandingkan. Saya akan lanjutkan tulisannya lain kali

Tuesday, July 14, 2015

Pemprograman LCD 16 X 2 Dengan Modul Arduino



Pada kesempatan kali ini saya akan menjelaskan bagaimana mengontrol lcd 16 x2 dengan menggunakan modul arduino. Tidak seperti dulu untuk mengendalikan lcd harus membuat code-code khusus sesuai dengan lcd tapi sekarang seiring perkembangan zaman code-code tersebut sudah diringkas menjadi sebuah library sehingga programmer sudah tidak direpotkan lagi tinggal memanggil library tersebut dan sedikit konfigurasi pin-pin mana yang akan dihubungkan antara lcd dengan microcontroller sudah dapat menampilkan karakter ke dalam lcd.
Sebelum melakukan programming sebaiknya terlebih dahulu anda rakit komponen-komponen pendukung sehingga nantinya langsung dapat dilihat hasilnya. Berikut ini adalah konfigurasi pin pada lcd dan modul arduino
1.  Pin RS pada LCD dihubungkan ke pin digital nomor 12
2.  Pin enable LCD dihubungkan ke pin digital nomor 11
3.  Pin LCD D4 ke pin digital nomor 5
4.  Pin LCD D5 ke pin digital nomor 4
5.  Pin LCD D6 ke pin digital nomor 3
6.  Pin LCD D7 ke pin digital nomor 2


#include <LiquidCrystal.h>
//inisialisasi library berserta pin yang akan digunakan
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // konfigurasi baris dan kolom lcd
  lcd.begin(16, 2);
  // menampilkan pesan pada lcd
  lcd.print("hello, world!");
}

void loop() {
  // set kurson ke kolom 0 dan pada baris ke 1
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}


Gambar Tampilan LCD Hello World
karakter dapat juga di geser ke dari kiri ke kanan ataupun dari kanan ke kiri, Berikut ini penjelasan fungsi kaki pada lcd 16 x2.
1.  pin RS (register select) berfungsi sebagai kendali/kontrol lcd, dimana memori lcd dapat ditulis sebuah data. Kamu dapat memilih salah satu data register tersebut.
2.  Pin R/W berfungsi untuk akses baca tulis data.
3.  Pin E (Enable), berfungsi sebagai Enable Clock LCD, dengan logika 1 setiap kali pengiriman atau pembacaan data. Jika menggunakan 8 bit (semua pin dipakai/ disambungkan pada mikrokontroler) maka hanya membutuhkan 1 siklus enable, tetapi jika menggunakan 4 bit (hanya DB4-DB7 yang disambungkan) maka membutuhkan 2 suklis enable.
Sekian tutorial kali ini

Monday, July 13, 2015

Sekilas Tentang Arduino YUN



Sama seperti modul arduino yang lain, Arduino Yun menggunakan prosesor dari atmel seri ATmega32u4 dan Atheros AR9331. Atheros AR9331 mendukung untuk sistem operasi berbasis linux yaitu OpenWrt-Yun. Modul ini sudah dilengkapi dengan :
1.   Ethernet
2.   Port usb
3.   Slot micro-sd
4.   20 pin digital input/output (7 pin dapat digunakan sebagai output pwm dan 12 sebagai analog input)
5.   16 mhz crystal oscillator
6.   Koneksi micro usb
7.   Pin header icsp
8.   3 tombol reset
9.   Dan juga support wifi akan tetapi jika ingin menggunakan wifi harus terlebih dahulu mengerti frequensi mana yang di izinkan oleh pemerintah. Sebagaian distributor lokal sengaja menonaktifkan fungsi wifi sampai menunggu sertifikat yang tepat.
Jika anda ingin menonaktifkan WIFI dapat melalui code program arduino. Berikut ini adalah contoh source code tersebut atau anda dapat mengunjungi websitenya langsung di https://gist.github.com/sgk/6641198
#include <Process.h>

void setup() {
  Bridge.begin();
  Serial.begin(9600);
  while (!Serial)
    ;

  Serial.print("Patching...");

  Process p;
  p.begin("sh");
  p.addParameter("-c");
  p.addParameter(
    "wifi down;"
    "echo "
      "H4sIALWIPFIAA61TXW/TMBR97v0Vl7RqN6TUIRJMmra97AfAE1SaUOTaN42ZY0f2DWNi"
      "++84DdCuREJC5Mm559yvc+z5K7E1TsQGgFTjMfsgWTUYVTAdY2QZOBuR1YhrqmVvOfcu"
      "wxsU8TEKZWWMwpKOQsfLXSBylw9WOsHB7HYUVgORWImg1tYraQFUh0LTV+F6a1ORYYQH"
      "UxtQTes1Xly8PQ6CkjyUsGYrahMib71nURZVoEhcKUsyVF/qOuLVFa42m80K5oe15njr"
      "u8c0ScN4dnuOZVG8y8viTYHvO3KfAq992E2wEuEjBTZp3oS1be/SkY13EeC08dk5fgdM"
      "3x1mixFsZKxqn+E1Zhx6yvAzLpeJNWz+90UEtx3MQot5qHExhMRrLG+WOcxa3zvG3GOg"
    " > /tmp/patch"
  );
  p.runAsynchronously();
  while (p.running()) {
    Serial.print('.');
    delay(100);
  }

  p.begin("sh");
  p.addParameter("-c");
  p.addParameter(
    "echo "
      "8bgYM0a4vdcm/MxIkv8P634XO/LvuM1g1EtDD/FTV0+RF4WSLKf/B5n2HZIqk3JN8Kd4"
      "MKNvhrHYW/WMT0947NV1LW0keAYY8qvG+/tKao1DZrkn4h8F02X79XD+Qd2pJ6e9o3UG"
      "PwCGDpyumAMAAA=="
    " >> /tmp/patch;"
    "python -c 'import base64, sys; sys.stdout.write(base64.b64decode(file(\"/tmp/patch\").read()))' | gzip -d -c | sh"
  );
  p.runAsynchronously();
  while (p.running()) {
    Serial.print('.');
    delay(100);
  }
 
  Serial.println();
  while (p.available() > 0) {
    char c = p.read();
    Serial.print(c);
  }

  Serial.println("...Done.");
  digitalWrite(13, HIGH);
}

void loop() {
}

/*

#!/bin/sh

echo "Patch script start"
echo 'echo "default-on" > /sys/class/leds/ds:green:wlan/trigger' > /etc/rc.local

cp /dev/null /sbin/wifi
chmod 775 /sbin/wifi

cat > /lib/firstboot/20_reset_clear_jffs << 'XXX'
#!/bin/sh

# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications

reset_clear_jffs() {
    [ "$reset_has_fo" = "true" ] && {
cp /lib/firstboot/20_reset_clear_jffs /tmp
  rm -rf $jffs/* 2>&-
      mount -o remount $jffs / 2>&-
mkdir $jffs/etc
echo 'echo "default-on" > /sys/class/leds/ds:green:wlan/trigger' > $jffs/etc/rc.local

mkdir $jffs/sbin
cp /dev/null $jffs/sbin/wifi
chmod 775 $jffs/sbin/wifi

mkdir $jffs/lib
mkdir $jffs/lib/firstboot
cp /tmp/20_reset_clear_jffs $jffs/lib/firstboot/20_reset_clear_jffs
      exit 0
    } || reset_has_fo=false
}

boot_hook_add jffs2reset reset_clear_jffs
XXX

echo "default-on" > /sys/class/leds/ds:green:wlan/trigger
echo "Patch script done."

*/
Gambar : Modul Arduino YUN
Salah satu perbedaan modul arduino YUN dengan modul arduino yang lain adalah modul arduiyo YUN dapat berkomunikasi dengan distro linux, sehinggal yang terkendala dengan sistem operasi berbayar dapat beralih dengan yang gratis dari linux. Ketika menambahkan fungsi command linux seperti Curl anda juga dapat menulisnya dengan script python untuk mendapatkan interaksi yang kuat.
      YUN sangat mirip dengan arduino leonardo dan memiliki komunikasi usb untuk mengurami prosesor sekunder, biasanya pada device manager ketika di colokkan akan menampilkan device baru seperti mouse atau keyboard.

Friday, July 10, 2015

Kontrol Led Via Aplikasi Web



Pada tutorial kali ini saya akan menjelaskan bagaimana mengendalikan led via website. Apa-apa saja sih yang dibutuhkan dalam pembuatan project kali ini, untuk sisi web saya menggunakan microsoft visual studio yang sudah mendukung komunikasi serial sehingga nantinya dapat dihubungkan ke modul arduino dan untuk modul arduino saya menggunakan arduino uno rev3, tidak harus arduino uno sih tapi model yang lain juga dapat bekerja dengan baik, o iya jangan lupa beberapa komponen led yang ingin dikendalikan sebaiknya gunakan led berwarna warni agar nantinya dapat dibedakan.
Gambar : Wiring diagram modul arduino dengan led
Selanjutnya pada bagian programmingnya. Untuk cara kerjanya adalah dari website mengirimkan perintah ke modul arduino via komunikasi serial dan kemudian perintah-perintah tersebut melalui port digunakan untuk menyalakan led-led tersebut. Karena komunikasi menggunakan serial jangan lupa setting baudrate terlebih dahulu. Setelah selesai konfigurasi pin-pin mana yang akan difungsikan sebagai keluaran untuk led.
      Untuk looping, kita mulai mulai menggunakan statment “if” untuk melihat koneksi serial. Ini penting karena kita ingin mempersiapkan untuk menerima inputan dari website. Apakah ada proses yang dikirimkan oleh sisi website. Berikut ini source code untuk microcontroller programming
///pengaturan nomor pin untuk led

//power indikator led
int pwr = 6;

//kontrol led
int merah = 9;
int orange = 10;
int kuning = 8;
int hijau = 11;
int biru = 12;
int pink=6;

///konfigurasi untuk komunikasi serial baudrate
int baud = 9600;

///set delay, kali ini saya gunakan delay sekitar 1 detik
int time = 1000;

void setup()
{
  //seting pin mode dan les saya beri kondisi high/menyala
  pinMode(pwr, OUTPUT);
  digitalWrite(pwr, HIGH);

  //memulai antar muka serial
  Serial.begin(baud);

  //set pin untuk mengontrol led
  pinMode(merah, OUTPUT);
  pinMode(orange, OUTPUT);
  pinMode(kuning, OUTPUT);
  pinMode(hijau, OUTPUT);
  pinMode(biru, OUTPUT);
  pinMode(pink, OUTPUT);
}

// perintah loop bertujuan untuk looping statment tanpa berhenti
void loop()
//selalu scan komunikasi serial
{
  //jika koneksi serial tersedia dan lebih dari satu maka fungsi ini akan aktif
  if (Serial.available() > 0)
  {
    //baca inputan dari serial
    int val = Serial.read();
    //jika benar statment berikut maka akan mengeksekusi
    if (val == '1')
    {
      digitalWrite(merah, HIGH);
      delay(time);
      digitalWrite(merah, LOW);
    }
    if (val == '2')
    {
      digitalWrite(orange, HIGH);
      delay(time);
      digitalWrite(orange, LOW);
    }
    if (val == '3')
    {
      digitalWrite(kuning, HIGH);
      delay(time);
      digitalWrite(kuning, LOW);
    }
    if (val == '4')
    {
      digitalWrite(hijau, HIGH);
      delay(time);
      digitalWrite(hijau, LOW);
    }
    if (val == '5')
    {
      digitalWrite(biru, HIGH);
      delay(time);
      digitalWrite(biru, LOW);
    }
    if (val == '6')
    {
      digitalWrite(pink, HIGH);
      delay(time);
      digitalWrite(pink, LOW);
    }
    Serial.flush();
  }
}

Setelah selesai pemprograman untuk bagian hardwarenya dan arduino sudah siap menerima inputan dari sisi web, sekarang lanjut di bagian aplikasi pemprograman web saya menggunakan microsoft visual studio, akan saya sertakan source codenya dibawah ini
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO.Ports;
using System.Text;
using System.ComponentModel;
using System.Windows;

pada code diatas terdapat using System.IO.Ports; Digunakan untuk komunikasi serial arduino. Selanjutnya dibutuhkan konfigurasi untuk komunikasi serialnya nomor port mana yang ingin diseting dan berapa baudrate yang ingin digunakan. Pada aplikasi web nantinya akan saya buat 6 tombol untuk kontrol 6 led tersebut.

namespace ArduinoTest
{
    public partial class LEDTest : System.Web.UI.Page
    {
        SerialPort ardo;

        protected void Page_Load(object sender, EventArgs e)
        {
            ardo = new SerialPort();
            ardo.PortName = "COM4";
            ardo.BaudRate = 9600;
        }

        protected void BlueOn(object sender, EventArgs e)
        {
            string merah = "1";
            ardo.Open();
            ardo.Write(merah);
            ardo.Close();
        }
        protected void GreenOn(object sender, EventArgs e)
        {
            string orange = "2";
            ardo.Open();
            ardo.Write(orange);
            ardo.Close();
        }

        protected void OrangeOn(object sender, EventArgs e)
        {
            string kuning = "3";
            ardo.Open();
            ardo.Write(kuning);
            ardo.Close();
        }
        protected void RedOn(object sender, EventArgs e)
        {
            string hijau = "4";
            ardo.Open();
            ardo.Write(hijau);
            ardo.Close();
        }
        protected void RedOn(object sender, EventArgs e)
        {
            string biru = "5";
            ardo.Open();
            ardo.Write(biru);
            ardo.Close();
        }
        protected void RedOn(object sender, EventArgs e)
        {
            string pink = "6";
            ardo.Open();
            ardo.Write(pink);
            ardo.Close();
        }
    }
}

Sekarang lanjut untuk tampilan tombolnya, saya pakai code html. Kita butuh 6 tombol untuk kontrol led tersebut.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LEDTest.aspx.cs" Inherits="ArduinoTest.LEDTest" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Kontrol Led Via Website</title>
    <style type="text/css">
        .Panel
        {
            margin-left: 2%;
            margin-top: 2%;
            border-color: white;
            border-width: 20px;
        }
        .Header
        {
            font-family: "Segoe UI";
            font-size: xx-large;
            font-weight: normal;
            font-style: normal;
            font-variant: normal;
            text-transform: none;
            color: #000000;
        }
        .Sub
        {
            font-family: "Segoe UI";
            font-size: x-large;
            font-weight: normal;
            font-style: normal;
            font-variant: normal;
            text-transform: none;
            color: #666666;
        }
    </style>
</head>
<body bgcolor="#CCCCCC">
    <form id="form1" runat="server">
      <asp:Panel ID="Panel1" runat="server" BackColor="White" BorderStyle="Solid"
            Width="317px" CssClass="Panel">
        <div>
        <span class="Header">Kontrol Led Via Website<br /> </span>
        <span class="Sub"> <br /> </span>
        <table>
            <tr>
                <td>
                    <asp:Button ID="merah" runat="server" Text=" merah" OnClick="merahOn"
                        BackColor=" merah " BorderStyle="None" Font-Names="Segoe UI" Font-Size="XX-Large"
                        ForeColor="White" Width="310px" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Button ID="Orange" runat="server" Text="orange" OnClick="OrangeOn" BackColor="#33CC33"
                        BorderStyle="None" Font-Names="Segoe UI" Font-Size="XX-Large"
                        ForeColor="White" Width="310px" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Button ID="kuning" runat="server" Text="kuning" OnClick="kuningOn"
                        BackColor="#FF6600" BorderStyle="None" Font-Names="Segoe UI" Font-Size="XX-Large"
                        ForeColor="White" Width="310px" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Button ID="hijau" runat="server" Text="hijau" OnClick="hijauOn"
                        BackColor="#CC0000" BorderStyle="None" Font-Names="Segoe UI" Font-Size="XX-Large"
                        ForeColor="White" Width="310px" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Button ID="biru" runat="server" Text="biru" OnClick="biruOn"
                        BackColor="#CC0000" BorderStyle="None" Font-Names="Segoe UI" Font-Size="XX-Large"
                        ForeColor="White" Width="310px" />
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Button ID="pink" runat="server" Text="pink" OnClick="pinkOn"
                        BackColor="#CC0000" BorderStyle="None" Font-Names="Segoe UI" Font-Size="XX-Large"
                        ForeColor="White" Width="310px" />
                </td>
            </tr>
        </table>
        </div>
      </asp:Panel>
    </form>
</body>
</html>

Gambar : tampilan pada web browser
Terima kasih atas kunjungannya jangan lupa kritik dan sarannya untuk perbaikan blog ini.