56939727 Buku Arduino Programming Blm Jadi

download 56939727 Buku Arduino Programming Blm Jadi

of 97

description

qwerty

Transcript of 56939727 Buku Arduino Programming Blm Jadi

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    1/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Muchama

    Malik S.Ko

    2011

    Arduino for Robotic

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    2/97

    R2G | Robot Research Group Page 2

    Arduino adalah single-board microcontroller yang berbasis open-source, dirancang untuk

    memudahkan penggunaan elektronik dalam berbagai bidang. Mikrokontroler yang digunakan

    dari jenis atmel AVR dengan berbagai jenis turunannya.

    Kelebihan dari arduino adalah Arduino mempunya bahasa pemroraman sendiri, mirip bahasa C

    namun memiliki library sendiri. Di dalam mikrokontrolernya sudah terdapat boot loader yang

    digunakan sebagai penjembatan antara mikrokontroler dengan software compilernya. Arduino

    membuka semua sourcenya mulai dari diagram rangkain, jalur pcb, software compiler.

    A. ARDUINO PROGRAMMING

    1. Addition, Subtraction, Multiplication, & Division

    Diskripsi

    Operasi ini memberikan hasil penambahan, pengurangan, pembagian dan perkalian dari dua

    operan. Operasi adalah pengaturan menggunakan dua tipe data dalam operan seperti 9/4 adalah 2

    dimana 9 dan 4 adalah intejer. Selain itu bisa juga diartikan operasi tersebut merupakan dapat

    menangani hasil yang mempunyai range dalam sebuah tipe data ( 1 intejer mempunyai nilai

    32,767 sampai -32,768). Jika beberapa operan mempunyai perbedaa tipe data yang besar yang

    digunakan untuk perhitungan. Salah satu operan yang digunaka adalah tipe float atau tipe double,

    floating point dapat digunakan untuk penghitungan

    Contoh

    y = y + 3;

    x = x - 7;

    i = j * 6;

    r = r / 5;

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    3/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Syntax

    result = value1 + value2;

    result = value1 - value2;

    result = value1 * value2;

    result = value1 / value2;

    parameter

    value1 : merupakan variable atau konstan

    value2 : merupakan variable atau konstan

    Tips pemrograman :

    Ketahui bahwa integer constan default untukint

    sehingga beberapa konstanta

    penghitungan bisa overflow (60*1000 akan menghasilkan hasil yang negative)

    Pilih besaran variable yang besarnya cukup untuk menangani hasil dari penghitungan

    Anda

    Ketahui bahwa tanda operasi bilangan yang akan Anda gunakan harus langsung sesuai

    arah matematika contoh 0-1 atau 0 - - 32768

    Untuk pemrograman yang memerlukan pecahan, gunakanlah vaiabel float, tapi perlu

    disadari hal ini mempunyai kelemahan dalam memiliki ukuran yang besar dan kecepatan

    komputasi yang rendah

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    4/97

    R2G | Robot Research Group Page 4

    Gunakanlah operasi penglihan seperti (int)myFloat untu merubah sebuah variable

    menjadi variable lain yang belum kita ketahui.

    1.1

    assignment operator (single equal sign)

    menyimpan nilai variable sebelah kanan ke dalam variable sebelah kiri.

    Single equal sign dalam pemrograman C adalah pemanggilan operator tugas (assignment

    operator). Hal ini berbeda dengan kelas aljabar yang mengindikasikan persamaan atau

    penyamaan. Operator penugasan ini memberitahu mikrokontroler untuk mengevaluasi nilai

    apapun atau ekspresi yang berada di sebelah kanan dan menyimpannya ke dalam variable

    sebelah kiri.

    Contoh

    int sensVal; // mendeklarasikan sensVal sebagai variable intejer

    senVal = analogRead(0); // menyimpan (dijitasi) voltase yang masuk pada

    analog pin ke 0 dalam sensVal

    tips pemrograman

    variable yang ada di sebelah kiri dari assignment operation (= sign) dibutuhkan untuk digunakan

    menjaga nilai yang sudah tersimpan di dalamnya. Jika hal itu tidak cukup besar untuk menangani

    sebuah nilai, nilai yang sudah tersimpan di variable tersebut akan menjadi salah.

    Jangan terkecoh dengan assignment operator [=] (sama dengan) dengan operator komparasi [==]

    (dobel sama dengan) yang mengevaluasi dua ekspresi menjadi hasil.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    5/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    2. TIPE DATA

    2.1Int

    Intejer merupakan tipe data yang utama dari macam penyimpanan dan terdiri dari 2 nilai byte.

    Mempunyai range dari -32,768 sampai 32,762 (nilai minimal adalah -2^15 dan nilai maksimal

    (2615)-1 ).

    Contoh

    int ledPin = 13;

    Syntax

    int var = val;

    varnama variable intejer Anda

    valnilai yang diberikan dalam variable Anda.

    Tips Coding

    Saat beberapa variable dibuat untuk melebihi kapasitas maksimal, maka nilai tersebut akan

    membalik ke minimal kapasitas, begitu juga sebaliknya.

    int x

    x = -32,768;

    x = x - 1; // x sekarang menjadi 32,767 berbalik ke arah neg.

    x = 32,767;

    x = x + 1; // x sekarang menjadi -32,768 berbalik kea rah positif

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    6/97

    R2G | Robot Research Group Page 6

    2.2Unsigned Int

    Unsign int sama seperti int, namun dalam pemberian angka negative tidak diperkenankan,

    sebagai gantinya nilai negative digantikan nilai positif sehingga mempunyai range 0 sampai

    65,535 (2^16)-1).

    Contoh

    unsigned int ledPin = 13;

    Syntax

    unsigned int var = val;

    varnama variable unsigned Anda

    valnilai yang berada dalam variable tersebut.

    Tips Coding

    Ketika membuat variable yang melebihi kapasitas, maka akan membalik ke kapasitas minimum

    unsigned int x

    x = 0;

    x = x - 1; // x sekarang 65535

    x = x + 1; // x sekarang 0

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    7/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    2.3 word

    sebuah word menyimpan 16 bit angka dari 0 sampai 65535 sama seperti unsigned int

    contoh

    word w = 10000;

    2.4 byte

    byte menyimpan sebuah 8-bit dari 0 samapi 255

    contoh

    byte b = B10010; // "B" is the binary formatter (B10010 = 18 decimal)

    2.5 float

    tipe data untuk angka floating point, sebuah angka yang mempunyai titik decimal. Floating-point

    sering dugunakan pada nilai yang mendekati analog dan nilai yang berkesinambungan karena

    mempunyai resolusi yang lebih tinggi dari pada intejer. Floating-point mempunyai besar

    3.4028235E+38 dan -3.4028235E+38. Sehingga dapat menyimpan 32bit (4byte. ) informasi.

    Float hanya mempunyai kepresisian 6 7 dijit decimal. Yang maksudnya total angka dari

    dijitnya bukan angka dari titik kanan setelah decimal. Tidak seperti platform, dimana Anda dapat

    mendapatkan akurasi dari penggunaan tipe data double (sampai 15 dijit) dalam arduino, double

    adalah besarnya sama seperti float.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    8/97

    R2G | Robot Research Group Page 8

    Angka Floating-point belum tentu tepat, dan bisa menghasilkan hasil yang tidak biasa saat di

    komparasi. Seperti misalkan 6.0 / 3.0 hasilnya mungkin bukan 2.0 Anda harus mengganti dan

    mengecek nya karena nilai absolute berbeda dengan angka yang memiliki ketelitian.

    Contoh

    float myfloat;

    float sensorCalbrate = 1.117;

    Syntax

    float var = val;

    varnama variable Anda

    valnilai yang diberikan

    Contoh Kode

    int x;

    int y;

    float z;

    x = 1;

    y = x / 2; // y sekarang 0, ints tidak dapat mengani nya

    z = (float)x / 2.0; // z sekarang .5 (Anda memiliki hasil 2.0, bukan 2)

    2.6 double

    Dalam Arduino, Double sama seperti float namun memiliki kepresisian yang sedikit berbeda.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    9/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Tips

    Pengguna yang membawa kode dari source code dari luar yang didalamnya terdapat variable

    double lebih baik diuji terlebih dahulu untuk mengetahui perbedaan ketepatan yang terdapat pada

    Arduino.

    2.7 Long

    Variable long adalah variable yang mempunyai penyimpanan angka yang lebar yaitu 32 bit

    (4byte) dari -2,147,483,648 sampai 2,147,487,483,647

    Contoh

    long speedOfLight = 186000L; // see Integer Constants for explanation of

    the 'L'

    Syntax

    long var = val;

    2.8 Unsigned Long

    Undigned Long adalah variable yang mempunyai lebar 32bit dan tidak seperti long, unsigned

    long tidak dapat menyimpan angka negative, mempunyai range antara 0 sampai 4,294,967,295

    (2^321)

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    10/97

    R2G | Robot Research Group Page 10

    Contoh

    unsigned long time;

    void setup()

    {

    Serial.begin(9600);

    }

    void loop()

    {

    Serial.print("Time: ");

    time = millis();

    //mencetak waktu saat program dijalankan

    Serial.println(time);

    // besaran waktu tunggu saat tidak mengirim sejumlah data

    delay(1000);

    }

    Syntax

    unsigned long var = val;

    2.9 Boolean

    Boolean menangani dua nilai yaitu true atau falsesedangkan variable menempati satu byte dari

    memori.

    Contoh

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    11/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    int LEDpin = 5; // LED pada pin 5

    int switchPin = 13; // saat switch terpasang pada pin 13, yang lain

    terkoneksi pada ground

    boolean running = false;

    void setup()

    {

    pinMode(LEDpin, OUTPUT);

    pinMode(switchPin, INPUT);

    digitalWrite(switchPin, HIGH); // menghidupkan pullup resistor

    }

    void loop()

    {

    if (digitalRead(switchPin) == LOW)

    { // switch ditekan - pullup membiarkan pin high normally

    delay(100); // delay untuk switch

    running = !running; // toggle variable running

    digitalWrite(LEDpin, running) // indikasi via LED

    }

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    12/97

    R2G | Robot Research Group Page 12

    2.10 Char

    Sebuah tipe data yang mengambil 1 byte memori untuk menyimpan nilai karakter. Karakter

    huruf tertulis dalam tanda kutip satu seperti A (untuk karakter yang banyak, menggunakan

    tanda petik dua : ABC).

    Anda dapat melihat encodingyang lebih spesifik dalanASCII CHART

    . Ini dimaksudkan dapat

    memungkinkan untuk menjalankan aritmatika dalam nilai ASCII yang menggunakan karakter

    misalkan A +1 memiliki nilai 66, karena nilai ASCII dari huruf A adalah 65.

    Tipe dara char adalah angka encoding dari -128 sampi 127

    Contoh

    char myChar = 'A';

    char myChar = 65; // both are equivalent

    2.11 Unsigned Char

    Tipe data yang membutuhkan 1 byte dari memori. Sepeti pada tipe data byte, unsigned char

    mempunyai panjang 0 sampai 255.

    Dalam Arduino, tipe data ini jarang digunakan

    Contoh

    unsigned char myChar = 240;

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    13/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    2.12 Arrays

    Array adalah kumpulan dari beberapa variable yang saling berkaitan dengan sebuah nomer

    indeks.

    Membuat (deklarasi) sebuah Array

    Dibawah ini adalah membuat sebuah metode array yang benar.

    int myInts[6];

    int myPins[] = {2, 4, 8, 3, 6};

    int mySensVals[6] = {2, 4, -8, 3, 2};

    char message[6] = "hello";

    anda dapat mendeklarasikan aray tanpa menginisialisasikan nya seperti dalam myInts.

    Mengakses sebuah array

    Array merupakan zero indexed yang menunjuk pada array yang telah diinisialisasi sebelumnya,

    elemen pertama dari array adalah indeks ke 0

    mySensVals[0] == 2, mySensVals[1] == 4, dan sampai ke empat.

    Seperti halnya array dengan 10 elemen, indek 9 adalah elemen terahir

    int myArray[10]={9,3,2,4,3,2,7,8,9,11};

    // myArray[9] contains 11

    // myArray[10] is invalid and contains random information (other

    memory address)

    Tidak seperti BASIC atau JAVA, dalam compiler C tidak mengecek untuk mengetahui jika akses

    array sudah sesuai batas besaran array yang Anda deklarasikan sebelumnya.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    14/97

    R2G | Robot Research Group Page 14

    Sebuah penugasan dalam sebuah array

    mySensVals[0] = 10;

    untuk mendapatkan sebuah nilai dari array

    x = mySensVals[4];

    2.12.1 Array dan perulangan FOR

    Array dapat dimanipulasikan dalam perulangan for, dimana penghitungan perulangan digunakan

    sebagai indeks pada beberapa elemen array. Seperti contoh untuk mencetak beberapa elemen

    sebuah array pada serial port, Anda dapat melakukan sesuatu seperti berikut :

    int i;

    for (i = 0; i < 5; i = i + 1) {

    Serial.println(myPins[i]);

    }

    2.13 Void

    Kata kunci void hanya digunakan dalam mendelarasikan fungsi. Hal ini untuk mendandakan

    bahwa fungsi itu diharapkan untuk memberi informasi dari fungsi yang telah dipanggil.

    contoh

    // actions are performed in the functions "setup" and "loop"

    // but no information is reported to the larger program

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    15/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    void setup()

    {

    // ...

    }

    void loop()

    {

    // ...

    }

    2.14 string

    text string dapat dituliskan ke dalam dua cara, Anda dapat menggunakan tipe data String yang

    merupakan bagian dari dasar versi 0019, atau Anda dapat menggunakan sebuah string luar dari

    sebuah array tipe char dan null-terminatenya.

    Contoh

    char Str1[15];

    char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};

    char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};

    char Str4[ ] = "arduino";

    char Str5[8] = "arduino";

    char Str6[15] = "arduino";

    kemungkinan kemungkinan untuk deklarasi srting

    deklarasi sebuah array dari chars tanpa inisialisasi seperti dalam Str1

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    16/97

    R2G | Robot Research Group Page 16

    deklarasi sebuah array dari chars (dengan satu extra char) dan compiler akan menambah

    karakter null seperti dalam Str2

    menambahkan karakter null secara lagsung, Str3

    inisial dengan sebuah konstanta string dalam tanda kutipan, compiler akan menghitung

    lebar konstanta array untuk panjang kontanta string dan sebuah pengahiran karakter null,

    Str4

    inisial array dengan menuliskan besar dan konstanta string, Str5

    inisial array, memberi ruang ekstra untuk string yang lebih besar, Str6

    2.14.1 Ahiran Null

    Biasanya, banyak string yang diahiri dengan sebuah karakter null (kode ASCII 0). Hal ini

    membolehkan fungsi (seperti Serial.print() ) untuk memanggil diahir string. Selain itu, meraka

    akan melanjutkan pembacaan byte subskuen dari memori yang bukan merupakan bagian dari

    string.

    Hal ini dimaksud saat Anda membutuhkan string yang memiliki ruang untuk karakter yang lebih

    banyak dari teks yang anda inginkan. Ini kenapa Str2 dan Str5 membutuhkan 8 karakter

    sedangkan arduino hanya 7, posisi yang terahir secara otomatis akan ditempai oleh karakter

    null.Str4 akan otomatis sebesar 8 karakter, satu dari external null. Dalam Str3, kami mempinyai

    penyertaan karakter null secara explicit (ditulis \0)

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    17/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    2.14.2 Menyatukan string yang panjang

    Anda dapat menyatukan string yang panjang seperti berikut :

    char myString[] = "This is the first line"

    " this is the second line"

    " etcetera";

    2.14.3 Array dari string

    Bagaimana bekerja dengan teks yang berjumah besar, seperti dalam poyek LCD display untuk

    membentuk array dari string. Karena string merupakan array, hal ini sebenarnya sebuah contoh

    dari array dua dimensi.

    Dalam kode ini, tanda bintang setelah tipe data char char*, merupakan sebuah array dari

    pointer. Semua nama array merupakan pointer, jadi ini merupakan array di dalam array.

    Contoh

    char* myStrings[]={"This is string 1", "This is string 2", "This is string

    3",

    "This is string 4", "This is string 5","This is string 6"};

    void setup(){

    Serial.begin(9600);

    }

    void loop(){

    for (int i = 0; i < 6; i++){

    Serial.println(myStrings[i]);

    delay(500);

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    18/97

    R2G | Robot Research Group Page 18

    3 String

    Kelas String, bagian dari dasar versi 0019, membolehkan kita memanipulasi string dari teks lebih

    komplek dari cara array karakter yang digunakan. Anda dapat menggabungkan String,

    menambahkannya mencari dan megganti substring dan sebagainya. Hal itu lebih banyak

    mengambil memori dari pada array yang sederhana.

    4

    Penghitungan

    4.1 abs(x)

    menghitung nilai absolute dari sebuah cacah

    parameter

    x : cacah

    perhatian

    karena tentang abs() berfungsi untuk penerapan, hindari penggunaan fungsi yang terdapat tanda

    kurang, hal akan menghasilkan hasil yang salah

    abs(a++); // avoid this - yields incorrect results

    a++; // use this instead -abs(a); // keep other math outside the function

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    19/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    constrain (x,a,b)

    contrain merupakan angka batasan dalam sebuah range

    parameter

    x : angka dari contrain ; semua tipe data

    a : batas bawah dari range; semua tipe data

    b : batas atas dari range; semua tipe data

    kembalian

    x : jika x diantara a dan b

    a : jika x lebih kecil dari a

    b : jika x lebih dari b

    contoh

    sensVal = constrain(sensVal, 10, 150);

    // batas range dari nilai sensor antara 10 dan 150

    4.2 map(value, fromLow, fromHigh, toLow, toHigh)

    Memetakan ulang sebuah angka dari sebuah range ke yang lainnya. Ini adalah sebuah nilai dari

    fromLowyang sudah dipetakan ke toLow, sebuah nilai dari fromHighpada toHigh.

    Contoh

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    20/97

    R2G | Robot Research Group Page 20

    y = map(x, 1, 50, 50, 1);

    fungsi ini juga menangani angka negative

    y = map(x, 1, 50, 50, -100);

    contoh

    /* Map an analog value to 8 bits (0 to 255) */

    void setup() {}

    void loop()

    {

    int val = analogRead(0);

    val = map(val, 0, 1023, 0, 255);

    analogWrite(9, val);

    }

    Catatan tambahan

    Untuk penghitungan matematika, berikut adalah fungsi nya

    long map(long x, long in_min, long in_max, long out_min, long out_max)

    {

    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;

    }

    4.3 min(x,y)

    menghitung minimum dari dua angka

    sensVal = min(sensVal, 100); // assigns sensVal to the smaller of sensVal or

    100

    // ensuring that it never gets above 100.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    21/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    max() juga ikut digunakan untuk konstrain yang lebih rendag dari variable

    range, sedangkan min() digunakan untuk konstrain yang mempuyai range lebih

    tinggi.

    sensVal = max(senVal, 20); // assigns sensVal to the larger of sensVal or 20

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    22/97

    R2G | Robot Research Group Page 22

    5 Struktur

    5.1 setup()

    fungsi setup() untuk memulai sketsa pemrograman, inisilaisasi variable, pin mode, memulai

    menggunakan library dan lainnya. Fungsi setup akan dijalankan sekali setelah arduino

    dihidupkan atau di reset.

    Contoh

    int buttonPin = 3;

    void setup()

    {

    Serial.begin(9600);

    pinMode(buttonPin, INPUT);

    }

    void loop()

    {

    // ...

    }

    5.2 loop()

    setelah membuat fungsi setup (), yang harus dilakukan adalah menginisialisasi dan mengeset

    nilai inisial dari fungsi loop() dengan tepat apa nama yang akan diberikan. Gunakan ini untuk

    mengaktifkan board Arduino

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    23/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    contoh

    int buttonPin = 3;

    // setup initializes serial and the button pin

    void setup()

    {

    beginSerial(9600);

    pinMode(buttonPin, INPUT);

    }

    // loop checks the button pin each time,

    // and will send serial if it is pressed

    void loop()

    {

    if (digitalRead(buttonPin) == HIGH)

    serialWrite('H');

    else

    serialWrite('L');

    delay(1000);

    }

    6 Control Sructure

    6.1 IF, yang digunaan dalam imbuhan dengan operator pembanding

    Format untuk if :

    if (someVariable > 50)

    {

    // bisa digunakan untuk statemen yang lain

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    24/97

    R2G | Robot Research Group Page 24

    }

    Untuk cara lain, statemen if selalu dalam keadaan true

    if (x > 120) digitalWrite(LEDpin, HIGH);

    if (x > 120)

    digitalWrite(LEDpin, HIGH);

    if (x > 120){ digitalWrite(LEDpin, HIGH); }

    if (x > 120){

    digitalWrite(LEDpin1, HIGH);

    digitalWrite(LEDpin2, HIGH);

    } // semua dianggap benar

    6.2 Comparison Operators:

    x == y(x sama dengan y)

    x = y(x tidak sama dengan y)

    x < y(x lebih kecil dari y)

    x > y(x lebih besar dari y)

    x = y(x lebih besar sama dengan y)

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    25/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    6.3 IF/ELSE

    Struktur if/else membeikan kita control yang lebih besar untuk menangani berbagai statement

    dibandingkan dengan statemen dasar if. Jadi struktur if else merupakan gabungan pernyataan if

    bersaang yang membolehkan logika ya atau tidak. Untuk contoh, sebuaah input analog dapat

    mengerjakan sebuah aksi yang mempunyai inputan kurang dari 500 dan yang lain beraksi jika

    inputan tersebut > 500, maka kodenya dapat dituliskan sebagai berikut

    if (pinFiveInput < 500)

    {

    // action A}

    else

    {

    // action B

    }

    Else juga dapat digunakan secara bertingkat sampai dengan tak terhingga selama proses yang

    kita inginkan belum menyatakan sebuah kebenaran atau berlogika true, berikut contoh kodenya

    if (pinFiveInput < 500)

    {

    // do Thing A

    }

    else if (pinFiveInput >= 1000)

    {

    // do Thing B

    }

    else

    {

    // do Thing C

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    26/97

    R2G | Robot Research Group Page 26

    6.4 Switch/case

    Seperti halnya if statemen, switchcase megontrol alir dari program yang membolehkan

    beberapa parameter yang berbeda untuk dieksekusi dalam kondisi yang bervariasi.

    Contoh

    switch (var) {

    case 1:

    //do something when var equals 1

    break;

    case 2:

    //do something when var equals 2

    break;

    default:

    // if nothing else matches, do the default

    // default is optional

    }

    Syntax

    switch (var) {

    case label:

    // statements

    break;

    case label:

    // statements

    break;

    default:

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    27/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    // statements

    }

    breakselalu ada dalam statemen case, dan digunakan untuk ahiran dari bermacam macam case,

    tanpa statemen break, statemen swich akan terus dijalankan sesuai ekpresi tanpa henti (falling-

    through) sampai menemukan statemen break atau sampai satemen swich ditutup.

    6.5 For

    Pernyataan for digunakan untuk mengulang sebuah blok statemen yang terus berputar. Biasanya,

    pernyataan for digunakan untuk mengkombinasikan sebuah array dalam menyatakan sebuah pin

    atau data.

    Berikut header untuk perulangan for :

    for(initialization;condition;increment) {

    //statement(s);

    }

    Inisialisasi dilakukan pertama dan sekali saja. Condition adalah berapa kali kita akan melakukan

    looping, increment adalah menunjukan bahawa looping akan dijalankan secara bertingkat.

    Contoh :

    // Dim an LED using a PWM pin

    int PWMpin = 10; // LED in series with 470 ohm resistor on pin 10

    void setup()

    {

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    28/97

    R2G | Robot Research Group Page 28

    // no setup needed

    }

    void loop()

    {for (int i=0; i -1; i = i + x){

    analogWrite(PWMpin, i);

    if (i = 255) x = -1; // switch direction at peak

    delay(10);

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    29/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    }

    }

    6.6 while

    while akan melakukan perulangan secara kontinyu dan tidak terbatas samapi ekspresi tersebut

    menemukan kembali parenthesisnya, () menjadi false. Biasanya digunakan untuk mengetes

    sebuah sensor karena perulangan ini tak akan berahir sampai adanya kondisi eksternal yang

    meutupnya

    Syntax

    while(expression){

    // statement(s)

    }

    Parameters

    expression - (boolean) statemen C mengoreksi true atau false

    contoh

    var = 0;

    while(var < 200){ //mengulang sesuatu sampai 200 kali

    var++;

    }

    6.7 do-while

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    30/97

    R2G | Robot Research Group Page 30

    perulangan do bekerja seperti cara while melakukan perulangan, perulangan do hanya

    mengerjakan sekali di ahir statemen.

    do{

    // statement block

    } while (test condition);

    contoh

    do

    {delay(50); // wait for sensors to stabilize

    x = readSensors(); // check the sensors

    } while (x < 100);

    6.8 break

    breakdigunakan untuk mengahiri perulangan dari do, for atau while.Dan juga digunakan untuk

    mengahiri statemen switch.

    Contoh

    for (x = 0; x < 255; x ++)

    {

    digitalWrite(PWMpin, x);

    sens = analogRead(sensorPin);

    if (sens > threshold){ // bail out on sensor detect

    x = 0;

    break;

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    31/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    delay(50);

    }

    6.9 goto

    untuk melompati alur program ke program yang sudah kita beri label.

    Syntax

    label:

    goto label; // mengrirm alur ke program yang telah diberi label.

    tips

    Dalam menggunakan goto, adalah tidak lazim dalam pemrograman C. beberapa buku

    memberikan gambaran bahwa statemen goto justru akan mengganggu jalannya alur program,

    karena tidak bisa stemen yang ada didalam gototidak dapat dikenali dan tidak dapat di debug,

    sehingga hasilnya pun tidak bisa kita ketahui. Berikut contoh programnya :

    for(byte r = 0; r < 255; r++){

    for(byte g = 255; g > -1; g--){

    for(byte b = 0; b < 255; b++){

    if (analogRead(0) > 250){ goto bailout;}

    // more statements ...

    }}

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    32/97

    R2G | Robot Research Group Page 32

    6.10 bailout

    mengahiri sebuah fungsi dan mengembalikan sebuah nilai dari sebuah fungsi tersebut untuk

    memanggil fungsi yang lain jika diinginkan.

    Syntax:

    return;

    return value;

    contoh

    sebuah fungsi untuk membandingkan inputan sebuah sensor kepada sebuah threshold

    int checkSensor(){

    if (analogRead(0) > 400) {

    return 1;

    else{

    return 0;

    }

    }

    6.11 continue

    statemen countinuemembiarkan atau melanjutkan penghentian perulangan (do, foratau while).

    Digunakan untuk melanjutkan pada pengecekan sebuak ekspresi kondisi dari loop dan

    memprosesnya dengan beberapa subsequent yang berulang ulang.

    Contoh

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    33/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    for (x = 0; x < 255; x ++)

    {

    if (x > 40 && x < 120){ // create jump in values

    continue;

    }

    digitalWrite(PWMpin, x);

    delay(50);

    }

    7 FUNCTION

    7.1 pinMode()

    digunakan untuk mengkonfigurasi pin secara spesifik sebagai sebuah intputan atauoutputan.

    Syntax

    pinMode(pin, mode)

    Parameters

    pin: set nomer pin mode

    mode: INPUT or OUTPUT

    contoh

    int ledPin = 13; // LED terkoneksi pada digital pin 13

    void setup()

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    34/97

    R2G | Robot Research Group Page 34

    {

    pinMode(ledPin, OUTPUT); // set digital pin sebagai output

    }

    void loop(){

    digitalWrite(ledPin, HIGH); // set LED on

    delay(1000); // waktu tunggu dalam second

    digitalWrite(ledPin, LOW); // set LED off

    delay(1000); // waktu tunggu dalam second

    }

    7.2 digitalWrite()

    menulisakan logika HIGH atau LOW pada pin dijital. Jika pin telah dikonfigurasi sebagai

    OUTPUT dengan pinMode(), itu berarti arus akan diset dengan nilai 5V(atau 3.3V dalam board)

    untuk HIGH, 0V (ground) untuk LOW.

    Jika pin dikonfigurasi sebagai INPUT, maka penulisan logika HIGH dengan digitalWrite() akan

    membutuhkan sebuah resistor pullup internal 20K .penulisan LOW akan mendisable pullup nya.

    Pullup resistor cukup untuk menyalakan LED dengan redup, jadi jika LED bekerja namun samar,

    maka harus memperbaiki set pin ke output dengan fungsi pinMode()

    Syntax

    digitalWrite(pin, value)

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    35/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Parameters

    pin: nomer pin

    value: HIGH or LOW

    contoh

    int ledPin = 13; // LED connected to digital pin 13

    void setup()

    {

    pinMode(ledPin, OUTPUT); // sets the digital pin as output

    }

    void loop()

    {

    digitalWrite(ledPin, HIGH); // sets the LED on

    delay(1000); // waits for a second

    digitalWrite(ledPin, LOW); // sets the LED off

    delay(1000); // waits for a second

    }

    7.3 digitalRead()

    membaca nilai dari spesifikasi digital pin yang bernilai HIGH atau LOW

    Syntax

    digitalRead(pin)

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    36/97

    R2G | Robot Research Group Page 36

    Parameters

    pin: nomer dari digital pin yang ingin dibaca (int)

    contoh

    int ledPin = 13; // LED terkoneksi pada digital pin 13

    int inPin = 7; // pushbutton terkoneksi digital pin 7

    int val = 0; // variable to store the read value

    void setup()

    {

    pinMode(ledPin, OUTPUT); // set digital pin 13 sebagai output

    pinMode(inPin, INPUT); // set digital pin 7 sebagai input

    }

    void loop()

    {

    val = digitalRead(inPin); // baca input pin

    digitalWrite(ledPin, val); // set LED untuk nilai pada button

    }

    Set pin 13 seperti nilai dari pin 7 yang menjadi inputan.

    Jika pin tidak terkoneksi pada digitalRead() maka dapat dikembalikan pada HIGH atau LOW

    dan dapat berganti secara acak.

    Input pin alanalog dapat digunakan sebagai digital pin, tertunjuk sebagai A0, A1, dsb.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    37/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    8 ANALOG I/O

    8.1 analogReference(type)

    Fungsi ini digunakan untuk mengkonfigurasi voltase acuan yang digunakan untuk input analog,

    sebagai pilihannya :

    DEFAULT : default acuan analog sebesar 5V (dalam 5V Arduino board) atau 3.3 V

    (dalam 3.3V board Arduino)

    INTERNAL : sebuah acuan built-inn sama dengan 1.1V dalam ATmega168 atau

    ATmega328 dan 2.56V pada ATmefa8 (tidak terdapat pada Arduino Mega)

    INTERNAL1V1 : acuan built-in 1.1V (hanya Arduino Mega)

    INTERNAL2V56: acuan built-in 2.56V (hanya Arduino Mega)

    EXTERNAL : voltase yang digunakan pada pin AREF

    Parameters

    type: acuan yang digunakan (DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56, atau

    EXTERNAL).

    Setelah mengganti acuan analog, pembacaan pertama pada analogRead() mungkin idak bisa

    akurat.

    Jika Anda menggunakan acuan voltase external (digunakan untuk pin AREF), Anda harus

    mennyeting acuan analog pada EXTERNAL sebelum memanggil analogRead(). selain itu, Anda

    bisa mengaktifkan acuan voltase bersamaan (internally generated) dan pada pin AREF, dapat

    merukas mikrokontroler pada board Arduino.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    38/97

    R2G | Robot Research Group Page 38

    8.2 analogRead()

    membaca nilai dari pin analog. Board arduino menampung 6 chanel (8 chanel pada Mini dan

    Nano, 16 pada Mega), 10-bit ADC. Ini berarti akan memetakan voltase antara 0 sampai 5 volt

    dalam nilai integer antara 0 dan 1023. Sehingga menghasilkan resolusi pembacaa dai 5volt/1024

    unti atau 0.0049volt (4.9mV) per unit. Panjang input dan resilusi dapat digantkan dengan

    alalogReference().

    Hal ini membutujkan 100milisecond (0.0001s) untuk membaca input analog, jadi maksimum

    rate pembacaan sekitar 10000 kali per detik.

    Syntax

    analogRead(pin)

    parameter

    pin : nomer dari pin input aalog untuk dibaca dari (0 sampai 5 pada umumnya, 0 sampai 7 pada

    Mini dan Nano, 0 sampai 15 pada Mega)

    bisa juga dituliskan sebagai int (0 sampai 1023)

    contoh

    int analogPin = 3; // potentiometer wiper (middle terminal) connected to

    analog pin 3

    // outside leads to ground and +5V

    int val = 0; // variable to store the value read

    void setup()

    {

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    39/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Serial.begin(9600); // setup serial

    }

    void loop()

    {val = analogRead(analogPin); // read the input pin

    Serial.println(val); // debug value

    }

    8.3 analogWrite()

    analogWrite() dapat digunakan untuk menulis nilai analog (gelombang PWM) untuk sebuah pin.

    Dapat juga digunakan menyalakan LED dengan cahaya yang bervariasi atau mengontrol motor

    dengan kecepatan yang bervariasi. Frekuensi sinyal PWM bisa mencapai 490 Hz. Di dalam

    board Arduino ATmega168 atau ATmega328, pin yang berfungsi adalah 3,5,6,9,10 sdan 11. Di

    dalam Arduino Mega bekerja pada pin 2 bersama 13, dalam Arduino ATmega8 hanya

    mendukung analogWrite() pada pin 9,10 dan 11. Anda tidak dapat memanggil pinMode() untuk

    menyeting pi sebagai output sebelum memanggil analogWrite().

    Fungsi dari analogWrite tidak bisa bekerja tanpa pin analog atau fungsi analogRead.

    Syntax

    analogWrite(pin, value)

    parameter

    pin: pin yang untuk ditulis

    value : putaran penugasan : antara 0 (selalu off) dan 255 (selalu on)

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    40/97

    R2G | Robot Research Group Page 40

    pada output PWM yang dihasilkan pada pin 5 dan 6 akan mempunyai putaran penugasan yang

    lebih tinggi. Hal ini dikarenakan interaksi dengan fungsi millis() dan delay() yang membagi

    sesame penggunaan internal timer yang digunakan oleh output PWM.

    Contoh

    Set output pada LED dengan nilai yang disesuaikan dari nilai potensiometer

    int ledPin = 9; // LED connected to digital pin 9

    int analogPin = 3; // potentiometer connected to analog pin 3

    int val = 0; // variable to store the read value

    void setup()

    {

    pinMode(ledPin, OUTPUT); // sets the pin as output

    }

    void loop()

    {

    val = analogRead(analogPin); // read the input pin

    analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023,

    analogWrite values from 0 to 255

    }

    9 Advance I/O

    9.1 pilseIn()

    Fungsi ini digunakan untuk membaca sebuah pulsa (HIGH atau LOW) pada sebuah pin

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    41/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    syntax

    pulseIn(pin,value)

    pulseIn(pin, value, timeout)

    parameter

    pin : nomer pin yang akan dibaca pulsa nya (int)

    value : tipe dari pulsa (HIGH atau LOW) (int)

    timeout (optional) : angka dalam mikrosekon waktu tunggu pulsa untuk memualai, sefaulnya

    adalah 1 detik (unsigned long)

    contoh

    int pin = 7;

    unsigned long duration;

    void setup()

    {

    pinMode(pin, INPUT);

    }

    void loop()

    {

    duration = pulseIn(pin, HIGH);}

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    42/97

    R2G | Robot Research Group Page 42

    9.2 shiftOut()

    shift out adalah sebuah byte dari data dalam satu bit per satuan waktu.

    Syntax

    shiftOut(dataPin, clockPin, bitOrder, value)

    parameter

    dataPin : pin yang menjadi output bit (int)

    clockPin : pin yang sekali dilewati dengan dataPin (int)

    bitOrder : bit yang akan diberikan untuk shift out berupa MSBFIRS atau LSBFIRST (Most

    significant Bit First atau Least Significant Bit First)

    value : data untuk shift out (byte)

    dataPindan clockPinharus selalu dikonfigurasi sebagai output untuk memanggil pinMode()

    // Do this for MSBFIRST serial

    int data = 500;

    // shift out highbyte

    shiftOut(dataPin, clock, MSBFIRST, (data >> 8));

    // shift out lowbyte

    shiftOut(data, clock, MSBFIRST, data);

    // Or do this for LSBFIRST serial

    data = 500;

    // shift out lowbyte

    shiftOut(dataPin, clock, LSBFIRST, data);

    // shift out highbyte

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    43/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    shiftOut(dataPin, clock, LSBFIRST, (data >> 8));

    contoh

    For accompanying circuit, see the tutorial on controlling a 74HC595 shift

    register.

    //**************************************************************//

    // Name : shiftOutCode, Hello World //

    // Author : Carlyn Maw,Tom Igoe //

    // Date : 25 Oct, 2006 //

    // Version : 1.0 //

    // Notes : Code for using a 74HC595 Shift Register //

    // : to count from 0 to 255 //

    //****************************************************************

    //Pin connected to ST_CP of 74HC595

    int latchPin = 8;

    //Pin connected to SH_CP of 74HC595

    int clockPin = 12;

    ////Pin connected to DS of 74HC595

    int dataPin = 11;

    void setup() {

    //set pins to output because they are addressed in the main loop

    pinMode(latchPin, OUTPUT);

    pinMode(clockPin, OUTPUT);

    pinMode(dataPin, OUTPUT);

    }

    void loop() {

    //count up routine

    for (int j = 0; j < 256; j++) {

    //ground latchPin and hold low for as long as you are transmitting

    digitalWrite(latchPin, LOW);

    shiftOut(dataPin, clockPin, LSBFIRST, j);

    //return the latch pin high to signal chip that it

    //no longer needs to listen for information

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    44/97

    R2G | Robot Research Group Page 44

    digitalWrite(latchPin, HIGH);

    delay(1000);

    9.3 tone()

    Dapat menghasilkan gelombang kotak dengan spesifikisai frekuensi (50% siklus kerja) dalam

    sebuah pin.biasanya pin ini dikoneksikan pada buzzer atau speaker untuk memutar bunyi. Bunyi

    ini akan diputar terus menerus sebulum ada pemanggilan noTone(). Jika tone() sedang bekerja

    pada sebuah pin, maka pin yang lain tidak akan mempunyai efek apapun, jadi bila kita akan

    membunyikan suara pada beberapa pin, maka kita harus menyertakan fungsi noTone() pada

    setiap ahir ekspresinya.

    Syntax

    tone(pin, frequency)

    tone(pin, frequency, duration)

    9.4 noTone()

    Begitujuga sebaliknya, noTone() digunakan untuk mengahiri gelombang trigger dari tone()

    sehingga mematikan bunyi yang dihasilkan pada sebuah pin

    syntax

    noTone(pin)

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    45/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    10 COMMUNICATION

    10.1 Serial

    Untuk berkomunikasi dengan computer atau device lain, semua board arduino mempunyai serial

    port (UART atau USART). Untuk berkomunikasi mengunakan digital pin 0 (RX) dan 1 (TX)

    seperti computer dengan USB. Dalam Arduino Mega, mempunyai tambahan 3 serial port : serial

    1 pada pin 19 (RX) dan 18 (TX), serial 2 pada pin 17 (RX) dan 16 (TX), serial 13 pada pin

    15(RX) dan 14 (TX), untuk berkomuniksai dengan PC, Anda membutuhkan USB to Serial

    adaptor,untuk mengkomunikasikan dengan external TTL serial device. Jangan menyambungkan

    pin pada RS232 secara langsung, karena mempunyai +/-12v yang bisa merusak board Arduino.

    10.2 INTERUPT

    10.2.1 interrupt()

    mengaktifkan kembali interupsi (setelah nonaktif oleh noInterupt() ).interupsi memperbolehkan

    program lain yang lebih penting untuk berjalan terlebih dahulu. Beberapa fungsi tidak akan dapat

    bekerja jika interupsi tersebut diable, dan berkomunikasi kembali ketika diabaikan.

    Contoh

    void setup() {}

    void loop()

    {noInterrupts();// critical, time-sensitive code here

    interrupts();// other code here

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    46/97

    R2G | Robot Research Group Page 46

    10.2.2 noInterupts()

    mematika interupsi (Anda dapat mengaktifkan kembali dengan interups()).fungsi ini adalah

    kebalikan dari fungsi interups().

    Contoh

    void setup() {}

    void loop(){

    noInterrupts();// critical, time-sensitive code here

    interrupts();

    // other code here}

    10.3 EXTERNAL INTERRUPT

    10.3.1 attachInterrupt(interrupt, function, mode)

    fungsi yang lebih spesifik untuk memanggil external interrupt. Mengganti beberapa funsi

    sebelumnya yang telah disertakan. Kebanyakan board Arduino mempunyai 2 external interup.

    Nomer 0 (dalan digital pin 2) dan 1 (dalam digital pin 3). Arduino Mega mempunyai 4 tambahan

    : nomer 2 (pin 21), 3 (pin 20), 4 (pin 19) dan 5 (pin 18)

    parameter

    interrupt :nomer interupsi (int)

    function : fungsi untuk memanggil interupsi yang terjadi, menjadi acuan bagi interrupt servicer

    routine

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    47/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    mode : mendefinsikan jika terjadi trigger interupsi, ada 4 parameter yang menjadi validasi

    nilainya :

    LOW untuk trigger interupsi saat pin low

    CHANGE untuk trigger interupsi saat pin mengganti nilai

    RISING untuk trigger saat pin berpindah dari low menjadi high

    FALLING untuk pin yang berpindah dari high ke low

    Interupsi digunakan untuk membantu menangani masalah penjadualan waktu pada program

    mikrokontroler.

    Contoh

    int pin = 13;

    volatile int state = LOW;

    void setup(){

    pinMode(pin, OUTPUT);attachInterrupt(0, blink, CHANGE);

    }

    void loop(){

    digitalWrite(pin, state);}

    void blink()

    {state = !state;

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    48/97

    R2G | Robot Research Group Page 48

    11 TIME

    11.1 delay()

    memberi jeda pada program unuk beberapa waktu ( dalam millisecond)

    syntax

    delay(ms)

    parameter

    ms : waktu dalam millisecond (unsigned long)

    contoh

    int ledPin = 13; // LED connected to digital pin 13

    void setup(){

    pinMode(ledPin, OUTPUT); // sets the digital pin as output}

    void loop(){digitalWrite(ledPin, HIGH); // sets the LED ondelay(1000); // waits for a second

    digitalWrite(ledPin, LOW); // sets the LED off

    delay(1000); // waits for a second}

    11.2 delayMicroseconds()

    member jeda program dalam beberapa waktu (mikrodetik), 1000 microsecond adalah 1

    milisecond dan 1juta microsecond adalah 1 detik.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    49/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Syntax

    delayMicroseconds(us)

    parameter

    us : angka untuk jeda dalam microsecond (unsigned int)

    contoh

    int outPin = 8; // digital pin 8

    void setup(){

    pinMode(outPin, OUTPUT); // sets the digital pin as output

    }

    void loop()

    {

    digitalWrite(outPin, HIGH); // sets the pin on

    delayMicroseconds(50); // pauses for 50 microseconds

    digitalWrite(outPin, LOW); // sets the pin off

    delayMicroseconds(50); // pauses for 50 microseconds

    }

    Mengkonfigurasi pin nomer 8 sebagai pin output, memberikan pulsa dengan waktu 100

    microsecond per periode.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    50/97

    R2G | Robot Research Group Page 50

    B. Petunjuk Penggunaan Arduino 0017

    1.

    Ekstrak (Unzip) file dalam CD :arduino-0017.zip

    Gambar file arduino-0017.zip

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    51/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    1.1 Penjelasan File & Folder hasil Ekstrak

    Gambar file yang sudah terekstraksi

    2. Hubungkan Kit ATMEGA 168 ke Komputer menggunakan kabel USB

    Gambar kabel usb

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    52/97

    R2G | Robot Research Group Page 52

    3. Diperlukan instalasi Driver untuk USB sebelum menggunakanSoftware Arduino

    Manual ini menggunakan Operating System (OS) Windows XP. Sesaat setelah USB

    dihubungkan ke Komputer, maka akan muncul Window baru yang bertujuan untuk instalasi

    Driver USB Device (Pilih > Install from a list or specific location (Advanced) kemudian klik

    tombolNext>)

    Gambar instalasi Arduino

    Selanjutnya adalah masuk ke Software Arduino, versi Arduino pada saat manual ini dibuat yang

    terbaru adalah Arduino 0017, silahkan cek update terbarunya pada

    http://arduino.cc/en/Main/Software. Klik ICON Arduino.exe, kita akan masuk ke tampilan

    software Arduino0017

    http://arduino.cc/en/Main/Softwarehttp://arduino.cc/en/Main/Softwarehttp://arduino.cc/en/Main/Software
  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    53/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Tampilan utamaArduino 0017

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    54/97

    R2G | Robot Research Group Page 54

    Gambar window software Arduino

    Pemilihan Port dan Tipe Board yang digunakan:

    (i) Port : Nomor COM yang dipilih harus sesuai yang terdeteksi padaDevice

    Manager

    (ii) Board : terdapat beberapa pilihan yang dapat digunakan untuk mendownload

    ATMEL ATMEGA 168,

    antara lain:

    a. Arduino Diecimilia, Duemilanove, or Nano w/ ATMEGA 168

    b. Lily Pad Arduino w/ ATMEGA 168

    c. Arduino Pro or Pro Mini (3.3V, 8Mhz) w/ ATMEGA 168 (*only for 8 Mhz

    XTALL used)

    d. Arduino NG or older w/ ATMEGA 168

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    55/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    New Program : ketik kode program/ CopyPaste dari Contoh Program

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    56/97

    R2G | Robot Research Group Page 56

    Compileuntuk memastikan tidak ada kesalahan pengetikan program

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    57/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Upload, untuk Burn/ Upload Program ke Device

    4. Trial Program :

    A Percobaan kontrol Lampu LED

    > Lampu LED bisa dikontrol menggunakan akses pada port no.13

    > Lampu LED kedip-kedip : hubungkan kabel USB download ke modul, open software arduino

    (IDE) dengan versi diatas 0012, pada software terdapat hardware selection (Tools> Board),

    pilihArduino Nano.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    58/97

    R2G | Robot Research Group Page 58

    > Kode untuk tes kedip LED:

    int ledPin = 13;

    void setup()

    {

    pinMode(ledPin, OUTPUT);

    }

    void loop()

    {

    digitalWrite(ledPin, HIGH);

    delay(1000);

    digitalWrite(ledPin, LOW);

    delay(1000);

    }

    B Percobaan Push Button dan LED

    > Modul dilengkapi dengan 2 buah Push Button (S6 dan S7)

    > Terdapat jumper untuk mengatur konfigurasi daripada penggunaan push button. Ketika jumper

    pin digunakan, maka push button dapat digunakan, ketika jumper pin dicabut, maka push buttontidak bisa digunakan dan jalurnya menjadi dapat digunakan (S6 = pin 2 dan S7 = pin 3).

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    59/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    int ledPin = 13;

    int key_s6 = 2;

    int val=0;

    void setup()

    {

    pinMode(ledPin, OUTPUT);

    pinMode(key_s6, INPUT);

    }

    void loop()

    {

    if(digitalRead(key_s6)==0)

    {

    while(!digitalRead(key_s6));

    val++;

    }

    if(val==1)

    {

    }

    digitalWrite(ledPin, HIGH);

    if(val==2)

    {val=0;

    digitalWrite(ledPin, LOW); // Set Low untuk port LED, LED mati

    }

    }

    > Percobaan berikut adalah menggunakan push button (S6 dan S7) untuk mengontrol lampu

    LED.

    int ledPin = 13;

    int key_s6 = 2;

    int key_s7 = 3;void setup()

    {

    pinMode(ledPin, OUTPUT);

    pinMode(key_s6, INPUT);

    pinMode(key_s7, INPUT);

    void loop()

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    60/97

    R2G | Robot Research Group Page 60

    {

    if(digitalRead(key_s6)==0)

    {

    digitalWrite(ledPin, HIGH);

    }

    if(digitalRead(key_s7)==0){

    digitalWrite(ledPin, LOW);

    }

    }

    C Percobaan Motor Servo

    Modul dilengkapi dengan port yang memudahkan untuk koneksi dengan motor servo dan

    melakukan kontrol terhadap motor servo tersebut. Perhatikan power supply (arus) dari modul

    terlalu kecil untuk menggerakan motor servo, maka gunakan catu daya tambahan pada terminal

    yang telah disediakan (7V ~ 12V DC). Pada saat menghubungkan tegangan pada modul, tidakperlu mencabut USB kabel yang terhubung, karena secara otomatis, pada saat catu daya

    tambahan dihubungkan (>6.5V DC), maka modul secara otomatis tidak terhubung dengan catu

    daya tambahan tersebut.

    Pada IDE Arduino versi 0012, hadir dengan library file yang salah satunya mensupport untuk

    kontrol motor servo (yaitu pin 9 dan pin 10). Pada percobaan ini digunakan pin 9.

    > Berikut ini adalah penjelasan koneksi Jumper PWR_Sel dalam kaitannya penambahan catu

    daya dari luar untuk motor servo

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    61/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Jumper PWR_Sel dicabut saat modul menggunakan catu daya tambahan dari luar, USB kabel

    terhubung ke Komputer, dan port DC Jack terhubung ke adaptor suply; Kondisi ini membuat

    catu daya antara mikroprosesor dengan catu daya ke motor servo dipisahkan sekaligus mencegah

    terjadinya arus besar masuk ke dalam mikroprosesor (untuk penggunaan normal, posisikan

    Jumper dalam kondisi dicabut). Jumper PWR_Seldipasang berarti semua catu daya (Vcc) pada

    modul terhubung ke catu daya tambahan. Penggunaan Vcc sebagai supply tegangan keluar

    modul (misal ke sensor, motor servo, dll) tidak diijinkan, karena kestabilan catu daya ke

    mikroprosesor dapat terganggu.

    > Berikut ini listing kode programnya:

    #include

    Servo myservo;

    int pos = 0;

    void setup()

    {

    myservo.attach(9);

    }

    void loop()

    {

    for(pos = 0; pos < 180; pos += 1)

    {

    myservo.write(pos);

    delay(15);

    }

    for(pos = 180; pos>=1; pos-=1)

    {

    myservo.write(pos);

    delay(15);

    }}

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    62/97

    R2G | Robot Research Group Page 62

    Jika ada kebutuhan untuk menggunakan port mana saja untuk kontrol motor servo, maka library

    file yang ada harus ditambahkan, cek disini untuk library yang lebih lengkapnya:

    http://www.arduino.cc/playground/uploads/ComponentLib/servo.zip

    (Catatan : setelah di download, maka lakukan decompresi file .Zip tersebut dan lakukan

    copy ke arduino-00XX/hardware/libraries)

    Berikut listing program untuk menggunakan port mana saja untuk mengontrol motor servo:

    #include

    Servo servo1;

    Servo servo2;

    Servo servo3;

    void setup()

    {

    servo1.attach(5);servo1.setMaximumPulse(2200);

    servo2.attach(11);

    servo2.setMaximumPulse(2200);

    servo3.attach(12);

    servo3.setMaximumPulse(2200);

    Serial.begin(19200);

    Serial.print("Ready");

    }void loop()

    {

    static int v = 0;

    if ( Serial.available()) {

    char ch = Serial.read();

    switch(ch) {

    case '0'...'9':

    v = v * 10

    break;

    case 'a':

    servo1.write(v);v = 0;

    break;

    case 'b':

    servo2.write(v);

    v = 0;

    break;

    http://www.arduino.cc/playground/uploads/ComponentLib/servo.ziphttp://www.arduino.cc/playground/uploads/ComponentLib/servo.ziphttp://www.arduino.cc/playground/uploads/ComponentLib/servo.zip
  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    63/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    case 'c':

    servo3.write(v);

    v = 0;

    break;

    }

    }Servo::refresh();

    }

    Fitur Program IDE : data serial yang dikirim mendefinisikan derajat putaran, misalnya pada

    contoh diatas, dikirimkan data 85a yang berarti Motor Servo 1 berputar sebanyak 85 derajat,

    kemudian data 180c berarti Motor Servo 3 berputar sebanyak 180 derajat.

    D Percobaan Motor DC

    Modul menyediakan rangkaian untuk kendali motor dc (2 motor sekaligus), sehingga tidak perlu

    membuat rangkaian tambahan untuk mengendalikan motor. Pada modul driver motor

    menggunakan chip IC L298 yang mampu mengendalikan motor sampai dengan 2 Ampere per

    motor;

    Sama seperti penggunaan motor servo, terdapat fasilitas catu daya tambahan dari luar untuk

    supply tegangan ke motor (dengan nilai tegangan dan arus lebih besar). Perhatikan kutub postitif

    dan negatif pada saat menghubungkan catu daya tambahan motor pada modul.

    > Pada modul juga tersedia jumper pin untuk memastikan modul motor driver digunakan, jika

    pin jumper dicabut, maka modul motor driver tidak bisa digunakan.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    64/97

    R2G | Robot Research Group Page 64

    Pada gambar sebelumnya, terlihat bahwa modul motor driver menggunakan port pin No. 4, 5, 6,

    dan 7. Pin 5 dan 6 adalah untuk kontrol PWM Motor, dimana Pin 5 digunakan untuk membuat

    ON (Enable 1/ E1) Motor 1, sedangkan Pin 6 membuat ON (Enable 2/ E2) Motor 2. Pin 4 untuk

    control arah putaran Motor 1 (Clock Wise-CW/ Counter Clock Wise-CCW) dan Pin 7 untuk

    kontrol arah putaran (Clock Wise-CW/ Counter Clock Wise-CCW) Motor 2.

    Berikut kode program yang bisa digunakan :

    void stop(void)

    {

    digitalWrite(E1,LOW);

    digitalWrite(E2,LOW);

    }

    void advance(char a,char b)

    {

    analogWrite (E1,a); // PWM Speed Control

    digitalWrite(M1,HIGH);

    analogWrite (E2,b);

    digitalWrite(M2,HIGH);

    }

    void back_off (char a,char b)

    {

    analogWrite (E1,a);digitalWrite(M1,LOW);

    analogWrite (E2,b);

    digitalWrite(M2,LOW);

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    65/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    void turn_L (char a,char b)

    {

    analogWrite (E1,a);

    digitalWrite(M1,LOW);

    analogWrite (E2,b);digitalWrite(M2,HIGH);

    }

    void turn_R (char a,char b)

    {

    analogWrite (E1,a);

    digitalWrite(M1,HIGH);

    analogWrite (E2,b);

    digitalWrite(M2,LOW);

    }

    void setup(void)

    {

    int i;

    for(i=6;i

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    66/97

    R2G | Robot Research Group Page 66

    turn_L (100,100);

    break;

    case 'r':

    turn_R (100,100); //

    break;}

    delay (40);

    }

    else stop();

    }

    E Penggunaan Port Serial

    1. Pemilihan Port Serial pada IDE (Integrated Development Environtment)

    Lakukan pemilihan port serial dimana modul terhubung dengan Komputer (untuk OS Windows,

    nomor port serial yang terhubung dengan modul bisa dilihat pada My Computer (Right Click) >

    Properties > Hardware > Device Manager > Serial Port.

    > Kemudian terdapat menu Serial Monitor, digunakan untuk memilih baud rate (Click Send

    button) yang digunakan gar komunikasi antara modul dengan Komputer berjalan dengan

    sempurna.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    67/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    2. Masukan (Input) pada Port Serial

    Modul memiliki komunikasi level serial TTL secara full-duplex, pin/ port serial terdapat pada

    pin 0 (Rx) dan pin 1 (Tx), dimana pada modul terdapat chip yang akan menkonversi data dari

    USB menjadi interface yang menggunakan TTL.

    Untuk membangun komunikasi serial menggunakan modul ini, pada umumnya menggunakan

    syntax : Serial.begin(), Serial.read(), Serial.print(), Serial.println(), dsbnya.

    Berikut contoh kode program dimana menggunakan port serial untuk mengirimkan data huruf

    L dari IDE Komputer) ke modul dengan ditandai dengan kedipan lampu LED L) pada board

    modul jika data berhasil diterima:

    int ledPin = 13;

    int val;

    void setup()

    {

    pinMode(ledPin, OUTPUT);

    Serial.begin(9600);

    }

    void loop() {

    val = Serial.read();

    if (-1 != val)

    {

    if ('L' == val)

    {

    digitalWrite(ledPin, HIGH);

    delay(500);

    digitalWrite(ledPin, LOW);

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    68/97

    R2G | Robot Research Group Page 68

    }

    }

    }

    3. Keluaran (Output) pada Serial Port

    Berikut ini contoh kode program untuk pengujian output dari port serial modul, dimana

    modulakan mengirimkan data berupa karakter & string (Hello!HI, I AM ROBOT):void setup()

    { Serial.begin(9600);

    }

    void loop() {

    Serial.print("Hello!");

    Serial.println("HI, I AM ROBOT");

    Modul

    delay(1000);

    }

    Modul

    delay(1000);

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    69/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    4. Mengirim data serial secara wireless (APC220)

    Modul ini kompatibel (bersesuaian) dengan modul komunikasi wireless APC220 dan

    modulbluetooth (DF-Bluetooth V.2).

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    70/97

    R2G | Robot Research Group Page 70

    APC220 dalam melangsungkan komunikasi dengan metode half-duplex, dan dapat menghandle

    banyak komunikasi dengan perangkat bluetooth lainnya (one to multipoint communication). Hal

    yang harus dilakukan untuk membangun komunikasi menggunakan alat ini, yaitu: setiap alat

    yang akan digunakan untuk melakukan komunikasi menggunakan modul harus di-set agar

    memiliki alamat yang unik (unique address), yang melakukan inisial komunikasi dan monitoradalah terminal utama (ditentukan dari awal). Terminal utama akan mengirimkan kode alamat

    (address code) dan dilengkapi dengan data, setiap kali pengiriman akan dicek apakah kode

    alamat (address code) ada yang sesuai, jika terjadi perbedaan, maka data akan hilang begitu saja

    (Do Not Response), jika kode alamat sesuai, maka data akan ditransmisikan (transfer data

    success); Proses diatas serupa juga dengan proses kerja RFID, pada saat Enable, APC220 akan

    memeriksa apakah alamat dari mana data berasal sudah sesuai/ tidak. Pastikan pada saat

    melakukan komunikasi, hanya sepasang alat yang berkomunikasi, sehingga diatur giliran

    komunikasi antar alat agar tidak terjadi interferensi (gangguan) komunikasi. APC220 dapat

    menyediakan multi channel yang memudahkan dalam pengerjaan komunikasi dalam jaringan

    (network).

    Pada percobaan keluaran (output) Port Serial sebelumnya, telah ditunjukkan bahwa modul dapat

    mengirimkan data serial dari modul ke komputer menggunakan kabel USB. Dengan adanya

    APC220 ini, maka data dikirimkan dengan menggunakan media udara. Lakukan setting koneksi

    antara komputer dengan APC220 terlebih dahulu, menggunakan software debugger yaitu COM

    PORT Debugger V2.0. Masukkan informasi COM Bluetooth yang digunakan, baud rate, data bit,

    parity, dan flow control, kemudian klik OK, akan terlihat hasil nya pada program (lihat gambar

    dibawah);

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    71/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Catatan : Module APC220 menggunakan serial port daripada modul, ketika hendak melakukan

    download program ke module, cabut dahulu module APC220, setelah download selesai, baru

    dipasang kembali.

    > Percobaan menggunakan modul Bluetooth (DF-Bluetooth V2) : modul Bluetooth V2

    berdasarkan spesifikasi Bluetooth 2.0, yang kompatibel dengan Bluetooth 1.1, Bluetooth 1.2.

    Modul Bluetooth V2 memerlukan adaptor Bluetooth. Diperlukan untuk menginstal perangkat

    lunak Bluetooth IVT BlueSoleil (tersedia online untuk download), instal, pasang adaptorBluetooth, setelah itu akan dipetakan dua port COM, tetapi dihraukan saja.

    Modul Bluetooth DF-BluetoothV2 dipasang pada modul mikrokontroler dan dongle/ USB

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    72/97

    R2G | Robot Research Group Page 72

    Bluetooth ke komputer, buka software BlueSoleil, bola kuning ditengah menunjukkan USB

    Bluetooth siap untuk digunakan, klik kanan pada bola kuning tersebut search equipment, jika

    bluetooth modul bekerja dan terdeteksi oleh USB Bluetooth, maka akan muncul bola biru dengan

    logo tanda tanya ini adalah DF-BluetoothV2 yang terdeteksi. Pada tanda tanya tersebut klik

    kanana match ball, kemudian akan muncul kotak dialog yang meminta kita mengisikan

    password (isikan dengan password default dari modul yaitu angka nol 0' empat kali = 0000).

    Klik kanan pada icon bola dengan tanda tanya search service, secara otomatis akan dijalin

    koneksi antara modul dengan USB Bluetooth. Klik kanan kembali pada icon bola dengan tanda

    Tanya akan terdeteksi koneksi dari port serial Bluetooth (misalnya : COM30), ini adalah port

    COM yang baru. Setelah sukses melakukan koneksi, maka logo tanda tanya berwarna biru

    berubah menjadi hijau. Terakhir, ganti nilai baud rate pada port serial USB bluetooth menjadi

    115200 bps, karena Bluetooth V2 memiliki baud rate pada 115200 bps.

    Module BluetoothV2 menggunakan serial port daripada modul, ketika hendak melakukan

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    73/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    download program ke module, cabut dahulu module BluetoothV2, setelah download aelesai,

    baru dipasang kembali.

    Berikut adalah kode programnya :

    void setup()

    {

    Serial.begin(115200);

    digunakan 115200bps

    void loop()

    {

    Serial.print("Test");

    Serial.println(" OK!");

    kembali ke awal

    delay(1000);

    }

    Gunakan kembali COMPORT Debuger V2.00, untuk melihat hasil pengiriman data dari modul

    ke komputer.

    (Perhatikan COM Port Serial yang digunakan, dan Baud Rate yang digunakan);

    F Percobaan Sensor Infrared GP2D12

    Untuk penggunaan sensor Infrared GP2D12, pada modul tersedia 8 buah pin analog (pin 0 7),

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    74/97

    R2G | Robot Research Group Page 74

    yang didesain bersesuaian dengan pin header dari sensor Infrared GP2D12 (Signal/ Vcc/ Gnd).

    Infrared GP2D12 didesain dari SHARP Jepang, digunakan untuk mengukur jarak berdasarkan

    pantulan sinar inframerah dengan jarak kerja antara 10cm ~ 80 cm.

    Untuk mempertahankan output signal yang lebih stabil, pada bagian belakang sensor dapat

    ditambahkan kapasitor dengan nilai 10uF (lingkaran merah menunjukkan kutub ositif dari kaki

    kapasitor).

    Berikut adalah kode programnya:

    int GP2D12 = 0;int val = 0;

    void setup()

    {

    Serial.begin(19200);

    }

    void loop()

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    75/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    {

    val = analogRead(GP2D12);

    if(val!=-1) Serial.println(val);

    serial

    delay(100);

    }

    Buka tools untuk membaca data serial dari IDE, untuk melihat hasil pembacaan daripada

    sinyal(pilih baud rate 19200), jarak halangan pada depan sensor akan mempengaruhi nilai

    (berupa dataserial) yang dikirimkan dari modul ke komputer.

    Pengukuran Jarak menggunakan PING

    Sensor jarak ultrasonik PING dari Parallax merupakan sensor yang paling banyak digunakanpada berbagai proyek riset dan robotika, kelebihannya antara lain selain dapat mengukur jarak

    3cm 3m, juga hanya menggunakan 1 jalur data. Pastikan Anda tidak salah pasang rangkaian

    PING. Contoh rangkaian berikut merupakan aplikasi pengukuran jarak menggunakan Arduino:

    PING.pde:// Program Demo PING untuk mengukur Jarak

    const int pingPin = 7;

    void setup() {

    // initialize serial communication:

    Serial.begin(9600);

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    76/97

    R2G | Robot Research Group Page 76

    void loop()

    {

    // establish variables for duration of the ping,

    // and the distance result in inches and centimeters:

    long duration, inches, cm;

    // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.

    // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

    pinMode(pingPin, OUTPUT);

    digitalWrite(pingPin, LOW);

    delayMicroseconds(2);

    digitalWrite(pingPin, HIGH);

    delayMicroseconds(5);

    digitalWrite(pingPin, LOW);

    // The same pin is used to read the signal from the PING))): a HIGH

    pinMode(pingPin, INPUT);

    duration = pulseIn(pingPin, HIGH);

    // convert the time into a distance

    inches = microsecondsToInches(duration);

    cm = microsecondsToCentimeters(duration);

    Serial.print(inches);

    Serial.print("in, ");

    Serial.print(cm);

    Serial.print("cm");

    Serial.println();

    delay(100);

    }

    long microsecondsToInches(long microseconds)

    {

    // According to Parallax's datasheet for the PING))), there are

    // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    77/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    // second). This gives the distance travelled by the ping, outbound

    // and return, so we divide by 2 to get the distance of the obstacle.

    return microseconds / 74 / 2;

    }

    long microsecondsToCentimeters(long microseconds)

    {

    // The speed of sound is 340 m/s or 29 microseconds per centimeter.

    // The ping travels out and back, so to find the distance of the

    // object we take half of the distance travelled.

    return microseconds / 29 / 2;

    }

    Sensor Suhu

    LM35 adalah sensor suhu dari National Semiconductor yang mempunyai akurasi tinggi.

    Outputnya berupa tegangan analog dan memiliki jangkauan pengukuran -55C hingga +150C

    dengan akurasi 0.5C. Tegangan output adalah 10mV/C. Output dapat langsung dihubungkan

    port mikrokontroler yang memiliki ADC atau dengan Arduino, karena Arduino memiliki port

    ADC (analog input) sebanyak 6 buah.

    Analog input pada Arduino memiliki resolusi 10-bit, yang dapat memberikan keluaran 2^10 =

    1024 nilai diskrit. Bila digunakan catu 5V, resolusi yang dihasilkan adalah 5000mV/1024 =

    4.8mV. Karena LM35 memiliki resolusi output 10mV/C, maka resolusi termometer yang dibuat

    dengan Arduino adalah 10mV/4.8mV ~ 0.5C.

    Mari kita membuat sensor suhu sederhana dengan Arduino dan LM35. Pertama-tama siapkan

    rangkaian seperti ini:

    http://www.indorobotika.com/http://www.indorobotika.com/http://www.indorobotika.com/arduinohttp://www.indorobotika.com/arduinohttp://www.indorobotika.com/arduinohttp://www.indorobotika.com/arduinohttp://www.indorobotika.com/arduinohttp://www.indorobotika.com/arduinohttp://www.indorobotika.com/
  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    78/97

    R2G | Robot Research Group Page 78

    Sambungkan Arduino ke komputer menggunakan USB dan gunakan contoh program seperti dibawah ini:

    // deklarasi variable

    int tempPin = 0;

    void setup(){

    Serial.begin(9600); // buka serial port, set baud rate 9600 bps

    }void loop()

    {

    tempC = analogRead(tempPin);

    tempC = (5.0 * tempC * 100.0)/1024.0;

    Serial.println((int)tempC,DEC);

    delay(1000); }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    79/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    Pengaturan Fuse Bit ATMEGA 168

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    80/97

    R2G | Robot Research Group Page 80

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    81/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    KRCI 4T-V (Forte Vi) Wheel

    Kontes Robot Cerdan Indonesia divisi beroda tingkat regional III STMIK AMIKOM menerjukan

    tim berodanya dengan nama 4T-V Wheel. Robot ini terdiri dari 8 sensor ultrasound yang

    digunakan untuk menghindari tembok agar robot tersebut tidak menabrak dinding, sebuah sensor

    suhu sebagai pendeteksi panas api, digital compas sebagai menentu arah.

    Tugas dari robot ini adalah untuk memadamkan api yang disediakan oleh dewan juri di suatu

    ruangan secara acak, sehingga robot harus menemukan sumber api dan harus

    memadamkannya.Setelah robot tersebut berhasil memadamkan, tugas robot ini adalah kembali

    ketempat semula (home base) dengan maksimal waktu 2 menit.

    STMIK AMIKOM menunjuk tim AMIKOM ROBOTIC untuk membuat robot ini. Dari personel

    AMIKOM ROBOTIC tersebut sebagian besar adalah anggota dari R2G yang bergerak dibidang

    desain elektronika dan software engineering. Untuk itu, hasil kreasi robot ini adalah hasil kerja

    keras tim AMIKOM ROBOTIC dan tim dari R2G.

    Untuk membuat robot ini kita memerlukan sebuah Arduino Mega dengan jenis mikrokontroler

    ATMega128 karena memiliki input output yang lebih banyak dibanding mikrokontroler jenis

    lain.

    Pengendalian motor kanan dan motor kiri memanfaatkan motor driver berbasis LM293 / LM298.

    Untuk mengendalikan kecepatannya dapat dikontrol dengan memanfaatkan PWM (pulse Width

    Modulation) dengan rangeantara 0 - 254

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    82/97

    R2G | Robot Research Group Page 82

    Sensor yang digunakan untuk menghindari dinding labirin menggunakan sensor ultrasound. Cara

    kerja sensor ini adalah transmitter pada sensor ini mengeluarkan sinyal kemudian pantulan dari

    sinyal tersebut doterima receiver. Untuk meningkatkan akurasi dari sensor tersebut dapat

    dilakukan dengan metode trial and error.

    Sensor ultrasound

    Sensor yang digunakan untuk memadamkan api menggunakan Thermophil Array Sensor (TPA)seri 81. Cara kerja sensor ini adalah mendeteksi perubahan suhu dilingkungan dan membedakan

    profil-profil warna yang biasanya dikeluarkan oleh api.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    83/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    TPA81

    Untuk mendeteksi garis yang ada di dalam pintu ruangan, menggunakan sensor garis dengan

    memanfaatkan photodiode dan led.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    84/97

    R2G | Robot Research Group Page 84

    Berikut listing program yang digunakan dalam robot KRCI Beroda 4T-V Wheel

    /* ROBOT BERODA STMIK AMIKOM 2011 */

    #include

    #include

    #include

    #include

    Servo myservo; // buat objek servo

    int pos; //

    #define rxPin 2 // Pin for rx

    #define txPin 3 // Pin for tx

    #define address 0x68 // Address of TPA81

    #define softReg 0x00 // Byte for software version

    #define ambiant 0x01 // Byte for ambiant temperature

    #define hideCsr 0x04 // Byte to hide LCD03 cursor

    #define clrScrn 0x0C // Byte to move LCD03 cursor

    #define crgRtn 0x0D // Byte to perform a carriage return on

    LCD03

    #define csrMv 0x02 //

    int ultraSoundSignalPins[] = {45,44,42,41,40}; // Front Left,Front, Front

    Right, Rear Ultrasound signal pins

    char *us[] = {"ping","ping","ping","ping","ping"};

    #define leftDir1 6 // Left motor direction 1, to AIn1.

    #define leftDir2 7 // Left motor direction 2, to AIn2.

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    85/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    #define rightDir1 3 // Right motor direction 1, to BIn1.

    #define rightDir2 4 // Right motor direction 2, to BIn2.

    #define leftSpeedPin 5 // Left motor speed control, to PWM_A

    #define rightSpeedPin 2 // Left motor speed control, to PWM_A

    #define btsMin 20 // Batas minimal jarak ping (cm)

    #define INTERVAL 25 // (ms) Interval between distance

    readings.

    #define sdtMin 16 // Batas jarak sudut Minimum (cm)

    #define kipas 34 // set Ping 13 menjadi Kipas

    #define lineKanan 39 // set pin 34 untuk lineKanan

    #define lineKiri 38 // set pin 36 untuk lineKiri

    #define limitKanan 35

    #define limitKiri 36

    #define obsKanan 53 //limit Switch Kanan untuk detek

    Obstacle

    #define obsKiri 51 //limit Switch Kiri untuk detek Obstacle

    int temperature[] = {0,0,0,0,0,0,0,0}; // panjang pembacaan data

    TPA81

    LiquidCrystal lcd(31,30,29,28,27,26); // pin LCD

    int mati=0;

    void setup()

    {

    // set LCD 16 X 2

    lcd.begin(16, 2);

    //lcd.setCursor(0,0);

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    86/97

    R2G | Robot Research Group Page 86

    //lcd.print("BERODA AMIKOM OK");

    //lcd.setCursor(0,1);

    //lcd.print("AYO BERJUANG OK");

    //delay(3000);

    // set limit input

    pinMode(limitKanan,INPUT);

    pinMode(limitKiri,INPUT);

    // Set motor direction pins as outputs.

    pinMode(leftDir1, OUTPUT);

    pinMode(leftDir2, OUTPUT);

    pinMode(rightDir1, OUTPUT);

    pinMode(rightDir2, OUTPUT);

    // set pin pada servo

    myservo.attach(8);

    pinMode(rxPin, INPUT);

    pinMode(txPin, OUTPUT); // Starts software

    serial port for LCD03

    Wire.begin();

    delay(500); // Wait to make

    sure everything is powerd up

    //set get data pada TPA81

    //Serial.print(clrScrn, BYTE);

    //Serial.print(hideCsr, BYTE);

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    87/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    int software = getData(softReg); // Get software

    version

    //Serial.println("TPA81 Example V:");

    //Serial.print(software);

    Serial.begin(9600);

    // Distance reading from rangefinder.

    }

    void loop()

    {

    unsigned long ultrasoundValue,jrk, lside,rside;

    for(int i=0; i < 5; i++){

    ultrasoundValue = ping(i);

    //Serial.print(us[i]);

    //Serial.print(ultrasoundValue);

    //Serial.print("in, ");

    //Serial.print(ping(0));

    //Serial.print(" ");

    //Serial.print(ping(1));

    //Serial.print(" ");

    //Serial.println(ping(2));

    delay(50);

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    88/97

    R2G | Robot Research Group Page 88

    jrk = (ping(1)+ping(2)+ping(3))/3;

    lside=((ping(0))+(ping(2)/4))/2;

    rside=((ping(4))+(ping(3)/4))/2;

    int haluan_ki;

    haluan_ki=14-lside; //haluan=seting - side kanan

    if (jrk>=20)

    {

    if ((haluan_ki>=-5)&&(haluan_ki11)&&(haluan_ki15)&&(haluan_ki40) { forward(160,140);}

    //if (ping(4)

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    89/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    rightTurn(200,200);

    }

    if(lside>rside){

    leftTurn(200,200);

    }

    }

    //if (ping(0)>17) { leftTurn(180,180); }

    }

    else

    {

    //if (ping(5)>40) { forward(160,140);}

    //if (ping(4)rside){

    leftTurn(200,200);

    }

    }

    //if (ping(0)>17) { leftTurn(180,180); }

    else{ rightTurn(130,130);}

    }

    lcd.setCursor(0,0);

    lcd.print(haluan_ki);

    lcd.setCursor(0,1);

    lcd.print(jrk);

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    90/97

    R2G | Robot Research Group Page 90

    Serial.print(haluan_ki);

    // delay(50);

    }

    // end Main program

    //////// SCAN KIRI ///////

    void scanKiri()

    {

    long jrkUS1,jrkUS2,jrkUS3,jrkUS4,jrkUS5,jrkUS6,jrkUS7;

    //jrkUS1 = US1();

    jrkUS2 = US2();

    jrkUS3 = US3();

    jrkUS4 = US4();

    jrkUS5 = US5();

    jrkUS6 = US6();

    jrkUS7 = US7();

    int jarak, lside,haluan_ki;

    jarak=(jrkUS3+jrkUS6+jrkUS7)/3;

    lside=((jrkUS2+2)+jrkUS5+(jrkUS7/9))/3; //sisi kiri(rata-rata ultrasonik

    samping kiri)

    haluan_ki=20-lside; //haluan=seting - side kanan

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    91/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    if (jarak>=12)

    {

    if ((haluan_ki>=-5)&&(haluan_ki5)&&(haluan_ki10)&&(haluan_ki15)&&(haluan_ki18)

    {rightTurn(130,130);}

    if ((haluan_ki=-10))

    {forward(150,140);}

    if ((haluan_ki=-15))

    {forward(150,130);}

    if (haluan_ki40) { forward(160,140);}

    if (us6

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    92/97

    R2G | Robot Research Group Page 92

    else{ rightTurn(130,130);}

    }

    Serial.println(haluan_ki);

    lcd.setCursor(0,0);

    lcd.print(haluan_ki);

    lcd.setCursor(0,1);

    lcd.print(jarak);

    lcd.setCursor(5,1);

    lcd.print(jrkUS2);

    lcd.setCursor(8,1);

    lcd.print(jrkUS5);

    lcd.setCursor(11,1);

    lcd.print(jrkUS7);*

    }

    ////////////////////////////

    ///////////////////////// SERVO DAN KIPAS ///////////////////////////////

    void kipastpa()

    {

    for(pos = 0;pos < 160;pos += 1) {

    myservo.write(pos); // posisikan servo pada sudut 'pos'

    for(int i = 0; i < 8; i++){ //

    Loops and stores temperature data in array

    temperature[i] = getData(i+2);

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    93/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    if (temperature[3]>50 || temperature[4]>50 ||

    temperature[5]>50){

    digitalWrite(13,HIGH);

    delay(1500);

    digitalWrite(13,LOW);

    mati=1;

    }

    delay(15); // tunggu 15 milidetik

    }

    // bergerak dari 180 sampai 0 derajat

    if(mati==0){

    for(pos = 160;pos>=1;pos-=1) {

    myservo.write(pos); // posisikan servo pada sudut 'pos'

    for(int i = 0; i < 8; i++){ //

    Loops and stores temperature data in array

    temperature[i] = getData(i+2);

    }

    if (temperature[3]>50 || temperature[4]>50 ||

    temperature[5]>50){

    digitalWrite(13,HIGH);

    delay(1500);

    digitalWrite(13,LOW);

    mati=1;

    }

    delay(15); // tunggu 15 milidetik

    }

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    94/97

    R2G | Robot Research Group Page 94

    if(mati==0){

    for(pos = 0;pos < 160;pos += 1) {

    myservo.write(pos); // posisikan servo pada sudut 'pos'

    for(int i = 0; i < 8; i++){ //Loops and stores temperature data in array

    temperature[i] = getData(i+2);

    }

    if (temperature[3]>50 || temperature[4]>50 ||

    temperature[5]>50){

    digitalWrite(13,HIGH);

    delay(1500);

    digitalWrite(13,LOW);

    mati=1;

    }

    delay(15); // tunggu 15 milidetik

    }

    }

    }

    //////////////////////// FUNSI ROBOT MAJU ///////////////////////////////

    void forward(char a,char b)

    {

    analogWrite(2, a);

    analogWrite(5, b);

    digitalWrite(leftDir1, HIGH); // Left motor forward.

    digitalWrite(leftDir2, HIGH);

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    95/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    digitalWrite(rightDir1, HIGH); // Right motor forward.

    digitalWrite(rightDir2, HIGH);

    }

    ///////////////////////// FUNGSI ROBOT MUNDUR ////////////////////////////

    void backward()

    {

    //pwmMundur(100,100);

    digitalWrite(leftDir1, HIGH); // Left motor backward.

    digitalWrite(leftDir2, LOW);

    digitalWrite(rightDir1, HIGH); // Right motor backward.

    digitalWrite(rightDir2, LOW);

    }

    //////////////////// FUNGSI ROBOT BELOK KANAN ///////////////////////////

    void rightTurn(char a, char b)

    {

    analogWrite(2, a);

    analogWrite(5, b);

    digitalWrite(leftDir1, HIGH); // Left motor backward.

    digitalWrite(leftDir2, LOW);

    digitalWrite(rightDir1, HIGH); // Right motor forward.

    digitalWrite(rightDir2, HIGH);

    }

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    96/97

    R2G | Robot Research Group Page 96

    /////////////////// FUNGSI ROBOT BELOK KIRI //////////////////////////

    void leftTurn(char a, char b)

    {

    analogWrite(2, a);

    analogWrite(5, b);

    digitalWrite(leftDir1, HIGH); // Left motor backward.

    digitalWrite(leftDir2, HIGH);

    digitalWrite(rightDir1, HIGH); // Right motor forward.

    digitalWrite(rightDir2, LOW);

    }

    ////////////////// SET GET DATA TPA81 ///////////////////////////

    int getData(int reg){ // Function to receive one byte

    of data from TPA81

    Wire.beginTransmission(address); // Begin communication with

    TPA81

    Wire.send(reg); // Send reg to TPA81

    Wire.endTransmission();

    Wire.requestFrom(address, 1); // Request 1 byte

    while(Wire.available() < 1); // Wait for byte to arrive

    int data = Wire.receive(); // Get byte

    return(data); // return byte

    }

    unsigned long ping(int index)

    {

    unsigned long echo, cm;

  • 5/19/2018 56939727 Buku Arduino Programming Blm Jadi

    97/97

    R 2 G | R o b o t R e s e a r c h G r o u p

    pinMode(ultraSoundSignalPins[index], OUTPUT);

    digitalWrite(ultraSoundSignalPins[index], LOW);

    delayMicroseconds(2);

    digitalWrite(ultraSoundSignalPins[index], HIGH);

    delayMicroseconds(5);

    digitalWrite(ultraSoundSignalPins[index], LOW);

    pinMode(ultraSoundSignalPins[index], INPUT);

    digitalWrite(ultraSoundSignalPins[index], HIGH);

    echo = pulseIn(ultraSoundSignalPins[index], HIGH);

    cm = microsecondsToCentimeters(echo);

    return (cm);

    }

    long microsecondsToCentimeters(long microseconds)

    {

    // The speed of sound is 340 m/s or 29 microseconds per centimeter.

    // The ping travels out and back, so to find the distance of the

    // object we take half of the distance traveled.

    return microseconds / 29 / 2;

    }

    ///////////////////////////////////////////////////