Sabtu, 16 Juli 2016

TUTORIAL

Tutorial Arduino Uno dan Motor Servo


Di dalam servo terdapat gearbox yang kecil (untuk membuat gerakan yang lebih bertenaga) dan rangkaian elektronik (untuk memudahkan pengaturan). Sebuah servo standard dapat diatur posisinya dari 0 sampai dengan 180 derajat. Pengaturan posisi diatur menggunakan timed pulse, antara 1.25 milliseconds (0 derajat) dan 1.75 milliseconds (180 derajat) 1.5 milliseconds untuk 90 derajat). Waktu yang digunakan ini bervariasi dari tiap manufaktur servo. Apabila pulse yang digunakan dikirim setiap 25-50 milliseconds maka servo akan bergerak dengan sangat halus

untuk komponen yang di perlukan dalam percobaan ini antara lain 
  • 1 buah servo mikro
  • Kabel jumper
sedangkan skema rangkaian dapat di lihat sebagai berikut:
gambar.1.1 skema rangkaian  servo dan arduino


untuk gambar simulasi penempatan komponen dan board Arduino bisa di lihat di bawah ini. Gambar simulasi ini menggunakan software Fritzing yang bisa didapat di sini.

gambar 1.2 simulasi penempatan komponen


kode program
  kode program yang digunakan untuk menggerakkan servo. Tidak perlu mengetiknya karena sudah tersedia pada software Arduino. Klik menu File > Examples > Servo > Sweep.

// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop()
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there

 


Membuat Perubahan
  • Membuat timing sendiri  caramya dengan mengatur pulse yang digunakan untuk menggerakkan servo secara langsung (tanpa library servo). Dengan cara ini kita dapat menggerakkan servo pada 20 pin yang tersedia pada Arduino (pin digital & analog). Tetapi anda perlu merubah beberapa baris kode agar dapat mengoptimalkan hasilnya. 
         Berikut ini adalah kode dasar yang akan dipergunakan.      
         int servoPin = 9;
         int pulseTime;

       void setup()
       {
       Serial.begin(9600);
       pinMode(servoPin,OUTPUT);
       }

       void loop()
      {
       pulseTime = 2100; //(the number of microseconds
                    //to pause for (1500 90 degrees
                    // 900 0 degrees 2100 180 degrees)
        digitalWrite(servoPin, HIGH);
       delayMicroseconds(pulseTime);
       digitalWrite(servoPin, LOW);
       delay(25);
        }


 
Servo akan bergerak ke arah 180 derajat. Timing 2100 microseconds akan membuat servo bergerak ke arah 180 derajat. dibawah ini yang merupakan variasi dari kode sebelumnya.
 catatan :
untuk timing servo berbeda tergantung manufaktur jadi belum tentu timing 2100 membuat motor servo bergerak 180 derajat ,Untuk mencoba menemukan timing yang sesuai dengan servo yang anda pakai, gunakan kode program dibawah ini yang merupakan variasi dari kode sebelumnya.

int servoPin = 9;
int pulseTime;

void setup()
{
  Serial.begin(9600);
  pinMode(servoPin,OUTPUT);
}

void loop()
{
  for(pulseTime = 900; pulseTime <= 2100; pulseTime += 50) {
    Serial.println(pulseTime);
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(pulseTime);
    digitalWrite(servoPin, LOW);
    delay(25);
  }
  for(pulseTime = 2100; pulseTime >= 900; pulseTime -= 50) {
    Serial.println(pulseTime);
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(pulseTime);
    digitalWrite(servoPin, LOW);
    delay(25);
  }
}

Upload dan coba lihat kembali hasilnya. Servo akan bergerak ke 180 derajat dan 0 derajat berulang-ulang seperti pada program Sweep tadi. Tetapi hasilnya mungkin kurang maksimal, sudut 180 derajat dan 0 derajat-nya masih belum maksimal. Artinya servo sebenarnya belum menyentuh sudut 180 derajat atau 0 derajat. Coba rubah angka pada pulseTime, untuk yg 900 coba diperkecil dan untuk yang 2100 coba diperbesar. Anda harus menemukan angka pulseTime yang pada angka tersebut servo sudah pada posisi maksimumnya (servo tidak bergerak lagi, mencapai sudut 180/0 derajat). seperti kode berikut ini.


int servoPin = 9;
int pulseTime;

void setup()
{
  Serial.begin(9600);
  pinMode(servoPin,OUTPUT);
}

void loop()
{
  for(pulseTime = 700; pulseTime <= 2650; pulseTime += 50) {
    Serial.println(pulseTime);
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(pulseTime);
    digitalWrite(servoPin, LOW);
    delay(25);
  }
  for(pulseTime = 2500; pulseTime >= 600; pulseTime -= 50) {
    Serial.println(pulseTime);
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(pulseTime);
    digitalWrite(servoPin, LOW);
    delay(25);
  }
}


Agar mempermudah melihat angka pulseTime, coba gunakan Serial Monitor (Menu: Tools > Serial Monitor). Dan agar angka pulseTime yang digunakan tidak bergerak terlalu cepat, ganti kode delay(25);menjadi delay(500);.
Setelah anda mengerti dan memahami cara menggerakkan servo menggunakan Arduino,  Gunakan daya kreasi anda dan kembangkan



sumber : 
http://dayatarduino.blogspot.co.id/2015/02/tutorial-arduino-uno-dan-motor-servo.html
http://arduino.cc/en/Main/ArduinoBoardUno

PENGETAHUAN UMUM

MIKROKONTROLER AVR
Mikrokontroler AVR (Alf and Vegard’s Risc processor) dari Atmel ini menggunakan arsitektur RISC (Reduced Instruction Set Computer) yang artinya prosesor tersebut memiliki set instruksi program yang lebih sedikit dibandingkan dengan MCS-51 yang menerapkan arsitektur CISC(Complex Instruction Set Computer).
Hampir semua instruksi prosesor RISC adalah instruksi dasar (belum tentu sederhana), sehingga instruksi-instruksi ini umumnya hanya memerlukan 1 siklus mesin untuk menjalankannya. Kecuali instruksi percabangan yang membutuhkan 2 siklus mesin. RISC biasanya dibuat dengan arsitektur Harvard, karena arsitektur ini yang memungkinkan untuk membuat eksekusi instruksi selesai dikerjakan dalam  satu atau dua siklus mesin, sehingga akan semakin cepat dan handal.  Proses downloading programnya relatif lebih mudah karena dapat dilakukan langsung pada sistemnya.
Sekarang ini, AVR dapat dikelompokkan menjadi 6 kelas, yaitu keluarga ATtiny, keluarga AT90Sxx, keluarga ATmega, keluarga AT90CAN, keluarga AT90PWM dan AT86RFxx. Pada dasarnya yang membedakan masing-masing kelas adalah memori, peripheral, dan fungsinya, sedangkan dari segi arsitektur dan instruksi yang digunakan  hampir sama.
Microntroller AVR pertama kali dibuat oleh perusahaan Atmel 1996 , merupakan microcontroler pertama yang menggunkan flash memori ketika yang lain masih menggunkan EPROM.

AVR microcontroller
Keluarga Microcontroller AVR  antara lain:
tiny AVR 
  • program memory  500 byte ~ 8kbyte
  • jumlah kaki IC 6–32
  • fungsi terbatas
Contoh :  – Atiny13     1k byte memori program , 64 RAM , 64 EEPROM.



gambar tiny13
megaAVR
  • program memory 4–256 kB
  • jumlah kaki IC 28–100
  • Extended instruction set
  • fungsi : ADC , Timer , WDT,  serial data, SPI , Int,
Contoh  – ATmega8535 (indentik dgn Atmega16)

gambar ATmega8535

XMEGA AVR
  • program memory 16–384 kB
  • kaki IC 64–100
  • Fitur  tambahan  : DMA, “Event System”, dan mendukung cryptography .
  • Extensive peripheral  : DAC (digital analog converter)
contoh : Xmega64
Contoh aplikasi Microcontroller AVR    Xmega64 :

robot-menggunakan xmega64

KUIS MIKROKONTROLER

KUIS


1.Pada suatu  sistem pemanas berbasis mikrokontrolerdiketahui bahwa elemen pemanas dari suatu heater elektrik dapat menaikkan suhu suatu metal sebesar 10tiap Ampere arus listrik yang diberikan. Metal tersebut memuai sebesar 0.0005 cm tiap setengah derajat Celcius. Metal tersebutmendorong sensor beban yang memiliki output sebesar 1 Volt tiap 0.005 centimeter tekanan yang diberikan.

 Hitunglah fungsi transfer total dari sistem tersebut!



Penyelesaian :   
Diketahui :
output suhu =  10⁰C
input arus   = 1A
output muai = 0,0005 cm
input suhu = 0,05⁰C
output sensor = 1 v
input suhu = 0,005 cm
Ditanya :
Hitunglah fungsi transfer total dari sistem tersebut??
JAWAB
TF   =  output/input = (output suhu )/(input arus) =(10⁰C)/(1 A) = 10⁰C/A
TF₂  = output/input = (output muai )/(input suhu) =  (0,0005 cm )/(0,05⁰C) = 0,001cm/⁰C 
TF₃ = output/input =  (output sensor)/(input suhu) = (1 )/(0,005 cm) =200 v/cm
TFtotal = TF₁ X TF₂ X TF₃ = 10⁰C/A X 0,0010,001cm/⁰C  X 200 v/cm  
  = 2 V/A
jadi fungsi transfer total dari sistem tersebut adalah 2V/A

LAPORAN PRAKTIKUM

LAPORAN PRAKTIKUM
MIKROKONTROLER








OLEH

                                                                    NAMA            : I NYOMAN ADI PUTRA
                                                                    NIM                : 1415313074
                                                                    KELAS           : 4B-TL




JURUSAN TEKNIK ELEKTRO
PROGRAM STUDI TEKNIK LISTRIK
POLITEKNIK NEGERI BALI
2016








Praktikum 1
Digital Input/Output


I. Dasar Teori
Digital berarti sinyal yang dikirimkan/diterima bernilai 1 atau 0, on atau off, HIGH atau LOW. Berbeda dengan sinyal analog yang nilainya bersifat kontinyu, yakni nilai antara 0 dan 1 dipertimbangkan atau terdapat rentangan nilai dari 0 sampai 1. Secara umum pin pada Arduino dapat dikonfigurasi ke dalam dua mode, yaitu mode input dan output. Mode input berarti mengeset pin agar dapat digunakan untuk menerima masukan sinyal dari komponen  yang terhubung ke board arduino. Mode output berarti mengeset pin agar dapat mengirimkan sinyal dari arduino ke komponen lain atau ke rangkaian digital. Untuk mengeset mode pin, kita gunakan fungsi pinMode(). Fungsi ini biasanya digunakan di dalam fungsi setup(). fungsi ini memerlukan dua parameter, pinMode([nomorPin], [mode])Parameter pertama diisi oleh nomor pin, dan parameter kedua diisi oleh konstanta INPUT atau OUTPUT, sesuai dengan mode yang ingin kita gunakan. Sebagai contoh, jika ingin membuat LED berkedip, LED tersebut bisa dipasang pada salah satu pin digital dari arduino dan ground. Karena kita ingin membuat led menyala berkedip jadi kita konfigurasi pin yang terhubung ke LED menjadi output.

  
Gambar 1. Board Arduino Uno R3



Pada gambar diatas dapat dilihat untuk pin yang berwarna hijau tua (dari pin 0 sampai pin ke 13) merupakan digital pin dari board arduino uno. Sedangkan untuk yang berwarna hijau muda merupakan ground (GND). 
Dan beberapa pin juga memiliki fungsi khusus :
  • Serial, terdiri dari 2 pin : pin 0 (RX) dan pin 1 (TX) yang digunakan untuk menerima (RX) dan mengirim (TX) data serial.
  • External Interrups, yaitu pin 2 dan pin 3. Kedua pin tersebut dapat digunakan untuk mengaktifkan interrups. Gunakan fungsi attachInterrupt()
  • PWM: Pin 3, 5, 6, 9, 10, dan 11 menyediakan output PWM 8-bit dengan menggunakan fungsi analogWrite()
  • SPI : Pin 10 (SS), 11 (MOSI), 12 (MISO), dan 13 (SCK) mendukung komunikasi SPI dengan menggunakan SPI Library
  • LED : Pin 13. Pada pin 13 terhubung built-in led yang dikendalikan oleh digital pin no 13.
  • TWI : Pin A4 (SDA) dan pin A5 (SCL) yang mendukung komunikasi TWI dengan menggunakan Wire Library



II. Alat dan Bahan
Alat dan bahan percobaan diperlihatkan pada Tabel 2:

Tabel 2. Alat dan Bahan Praktikum
No
Alat dan Bahan
Jumlah
1
Board Arduino Uno R3
1
2
Modul/Rangkaian Percobaan
1
3
Kabel USB
1
4
Kabel jumper
Secukupnya



III. Langkah Percobaan
III.1 Percobaan Blink LED
         a.      Koneksi Hardware
Dengan menggunakan kabel jumper, koneksikan Led pada mudul (rangkaian)  ke  pin-pin Arduino Uno R3  dengan konfigurasi sebagai berikut:

  •  Menghubungkan salah satu kaki resistor dengan pin 13 dari Arduino
  •  Menghubungkan kaki resistor yang lagi satu dengan kaki anoda dari led
  •   Menghubungkan kaki katoda led dengan ground pada arduino  


Gambar 2. Skematik Percobaan Blink Led
Gambar 3. Breadboard Percobaan Blink Led



b.      Pemrograman Pada Arduino  
Sketch program pada arduino dapat dilihat dibawah ini:
int Led1 = 13;
void setup() {
pinMode(Led1, OUTPUT);  // konfigurasi atau mensetting    pin 13 sebagai output
}
void loop() {
  digitalWrite(Led1, HIGH);   // Untuk menghidupkan LED 
  delay(1000);              // waktu tunda
  digitalWrite(Led1, LOW);    // untuk mematikan LED
  delay(1000);              // tunda waktu
}


III.2 Percobaan PushButton ON/OFF
               a.      Koneksi Hardware
Dengan menggunakan kabel jumper, koneksikan Led dan Pushbutton pada mudul(rangkaian)  ke  pin-pin Arduino Uno R3 dengan konfigurasi sebagai berikut:
  •  Menghubungkan kaki Anoda Led1 ke pin 13 Arduino
  •  Menghubungkan Pushbutton1 ke pin 2 Arduino
     
    Gambar 4. Skematik Percobaan Pushbutton ON/OFF


    Gambar 5. Breadboard Percobaan Pushbutton ON/OFF

    b.      Pemrograman Pada Arduino 
                Sketch program pada arduino dapat dilihat dibawah ini:
    int pushButton = 2;
    int LedPin = 13;
    void setup() {
        pinMode(pushButton, INPUT);
        pinMode(LedPin,OUTPUT);
    }
    void loop() {
      digitalRead(pushButton);
      if (pushButton == HIGH) {
        digitalWrite(LedPin,HIGH);
      }
      else
        digitalWrite(LedPin,LOW);
      }



    III.3 Percobaan Kombinasi Multi Pushbutton Dan Multi Led
                   a.      Koneksi Hardware
    Dengan menggunakan kabel jumper, koneksikan Led dan Pushbutton pada mudul(rangkaian)  ke  pin-pin Arduino Uno R3  dengan konfigurasi sebagai berikut:
    • Menghubungkan kaki Anoda Led1 ke pin 13 Arduino
    • Menghubungkan kaki Anoda Led2 ke pin 12 Arduino
    • Menghubungkan kaki Anoda Led3 ke pin 11 Arduino
    •  Menghubungkan kaki Anoda Led4 ke pin 10 Arduino
    •   Menghubungkan Pushbutton1 ke pin 2 Arduino
    •   Menghubungkan Pushbutton2 ke pin 3 Arduino 
     Gambar 6. Skematik Percobaan Kombinasi Multi Pushbutton Dan Multi Led


    Gambar 7. Breadboard Percobaan Kombinasi Multi Pushbutton Dan Multi Led b.  
     
  • Pemrograman Pada Arduino
    Sketch program pada arduino dapat dilihat dibawah ini:
    const int buttonPin1 = 2;
    const int buttonPin2 = 3;    
    const int ledPin1 =  13;
    const int ledPin2 =  12;
    const int ledPin3 =  11;
    const int ledPin4 =  10;
    void setup() {
      pinMode(ledPin1, OUTPUT);
      pinMode(ledPin2, OUTPUT);
      pinMode(ledPin3, OUTPUT);
      pinMode(ledPin4, OUTPUT);
      pinMode(buttonPin1, INPUT);
      pinMode(buttonPin2, INPUT);
    }
    void loop() {
        digitalRead(buttonPin1);
        digitalRead(buttonPin2);
        if (buttonPin1 == HIGH) {
        // jalan kanan
        digitalWrite(ledPin1,HIGH);
        digitalWrite(ledPin2,LOW);
        digitalWrite(ledPin3,LOW);
        digitalWrite(ledPin4,LOW);
         delay (1000);
        digitalWrite(ledPin1,LOW);
        digitalWrite(ledPin2,HIGH);
        digitalWrite(ledPin3,LOW);
        digitalWrite(ledPin4,LOW);
         delay (1000);
        digitalWrite(ledPin1,LOW);
        digitalWrite(ledPin2,LOW);
        digitalWrite(ledPin3,HIGH);
        digitalWrite(ledPin4,LOW);
         delay (1000);
        digitalWrite(ledPin1,LOW);
        digitalWrite(ledPin2,LOW);
        digitalWrite(ledPin3,LOW);
        digitalWrite(ledPin4,HIGH);
         delay (1000);
        }
       
      else {
        digitalWrite(ledPin1,LOW);
        digitalWrite(ledPin2,LOW);
        digitalWrite(ledPin3,LOW);
        digitalWrite(ledPin4,LOW);
          delay (1000);
      }
    }


    IVHasil dan Pembahasan
    Pada percobaan kali ini menggunakan pin-pin digital dari arduinodimana pin- pin tersebut akan dipakai baik sebagai input maupun output. Seperti percobaan diatas Pushbutton dipakai sebagai input dan Led dipakai sebagai output. Dan jika kita ingin membuat pin digital arduino sebagai input, maka pada program di arduino.ide kita dapat menulis “ pinMode (pushbutton1,INPUT); “ , dan untuk membaca hasil inputan dari pushbuttonnya dapat digunakan “digitalRead (pushbutton); “ . Kemudian jika kita ingin membuat pin arduino sebagai output maka untuk pin mode kita dapat tuliskan “pinMode (Led1,OUTPUT); “







    Praktikum 2

    Analog Input/Output


    1. DASAR TEORI

    Analog Input dan Output pada Arduino

    Pada saat kita menggunakan tombol sebagai sinyal input/masukan pada pin input Arduino maka sebenarnya kita hanya memberikan dua kemungkinan kondisi sinyal masukan yaitu tombol tertekan atau tombol tidak tertekan. Pada saat tombol tertekan kita menghubungkan atau memberikan tegangan 5 volt pada masukan sedangkan sebaliknya pada saat tombol dilepas hanya memberikan tegangan 0 volt.



    Kondisi input yang demikian dikenal sebagai digital input dengan logika 1 dan 0, dimana 1 untuk tegangan HIGH atau 5 volt dan 0 untuk tegangan LOW atau 0 volt.  Begitu juga halnya pada sisi output, jika hanya melibatkan dua kondisi keluaran seperti misalnya saat menghidupkan dan memadamkan led pada suatu saat tertentu maka kita hanya melibatkan dua kondisi output digital. Output digital 1 atau HIGH dengan output tegangan 5 volt dan output digital 0 atau LOW dengan output tegangan 0 volt.



    Pada beberapa sistim kontrol, pengolahan input dan output secara digital mungkin sudah memenuhi kinerja yang dibutuhkan. Akan tetapi pada kondisi tertentu ada kemungkinan dihadapkan pada kondisi input dan output yang membutuhkan besaran yang berubah-ubah dengan nilai yang kontinyu dan tidak lagi hanya dengan dua keadaan seperti halnya sinyal digital.  Sinyal semacam ini disebut sebagai sinyal analog, sebagai contoh saat kita menghubungkan sensor yang tegangan keluarannya bervariasi dalam kisaran dari 0 volt sampai 5 volt. Maka dalam hal ini Arduino sebagai kontroler harus mampu mengidentifikasi/mengolah semua variasi tegangan keluaran dari sensor yang dihubungkan pada pin inputnya tersebut. Begitu juga halnya saat diperlukan tegangan output yang membutuhkan nilai tegangan yang bervariasi, seperti misalnya saat kita menginginkan mengatur tingkat keterangan sebuah led atau berubahnya kecepatan sebuah motor.



    ANALOG INPUT



    Arduino khusus menyediakan 6 kanal (8 kanal pada model Mini dan Nano, dan 16 pada model Mega) untuk difungsikan sebagai analog input. Analog ke digital converternya menggunakan resolusi 10 bit yang berarti range nilai analog dari 0 volt sampai 5 volt akan dirubah kenilai integer 0 sampai 1023, atau resolusinya adalah 5 volt/1024=4,9mV per unit dimana itu berarti nilai digital yang dihasilkan akan berubah setiap perubahan 4,9mV dari tegangan input analognya. Akan tetapi range input analog dan resolusi tersebut dapat dirubah dengan fungsi analogReference().



    Perintah yang digunakan untuk fungsi analog input ini adalah:

    1. analogRead(pin): berfungsi untuk membaca nilai analog pada input pin yang akan menghasilkan nilai integer antara 0-1023.
    2. analogReference(parameter): berfungsi untuk menentukan referensi yang digunakan. Parameternya meliputi:

    • DEFAULT: default analog reference yaitu 5V (pada board Arduino 5V) atau 3,3 volt (pada board Arduino 3,3 V)
    • INTERNAL: built-in referensi internal tergantung pada jenis mikrokontroler yang terpasang pada board Arduino, 1.1 volt pada ATmega168 atau ATmega328 dan 2.56 volt pada ATmega8.
    • INTERNAL1V1: a built-in referensi internal 1.1V (khusus Arduino Mega)
    • INTERNAL2V56: a built-in referensi internal 2,56V (khusus Arduino Mega)
    • EXTERNAL: pilihan referensi yang tergantung pada tegangan yang diberikan pada pin AREF(hanya dengan range tegangan 0 sampai 5V).

    Perlu untuk diperhatikan, jangan menggunakan referensi dibawah 0 volt atau lebih dari 5 volt dan pastikan memilih referensi external sebelum perintah analogRead() jika menghubungkan pin AREF dengan referensi eksternal karena jika tidak akan bisa merusak mikrokontrol.



    ANALOG OUTPUT
    Secara teori suatu analog output akan mengeluarkan output tegangan bervariasi sesuai dengan nilai yang dikehendaki, maka seharusnya pin output analog Arduino seharusnya mampu mengeluarkan tegangan output dengan kisaran tegangan dari 0 V sampai 5V. Akan tetapi tidak demikian adanya, karena pin-pin Arduino yang difungsikan sebagai output sebenarnya hanya mampu sebagai digital output yaitu hanya mampu mengeluarkan tegangan 0V atau 5V.  Lalu bagaimana Arduino menangani Analog Output tersebut? Arduino menggunakan cara Pulsa Wide Modulasi (PWM) atau modulasi lebar pulsa untuk menghasilkan analog output yang dikehendaki. Metode PWM ini menggunakan pendekatan perubahan lebar pulsa untuk menghasilkan nilai tegangan analog yang diinginkan. Pin yang difungsikan sebagai PWM analog output akan mengeluarkan sinyal pulsa digital dengan frekwensi 490 Hz dimana nilai tegangan analog diperoleh dengan merubah Duty Cycle atau perbandingan lamanya pulsa HIGH terhadap periode (T) dari sinyal digital tersebut. Jika pulsa HIGH muncul selama setengah dari periode sinyal maka akan menghasilkan duty cycle 5o% yang berarti sinyal analog yang dihasilkan sebesar setengah dari tegangan analog maksimal yaitu 1/2 dari 5 V atau sama dengan 2,5 V begitu juga halnya jika pulsa HIGH hanya seperempat bagian dari periode sinyal maka tegangan analog identik yang dihasilkan adalah 1/4 dari 5V = 1,25 V dan seterusnya.


    Perintah yang digunakan untuk output analog adalah analogWrite (pin,value), dimana:
    • Pin: nomor pin Arduino yang akan digunakan sebagai analog output
    • value: nilai duty cycle yang diinginkan dengan nilai 0-255, yang berarti nilai 0 untuk 0Volt dan 255 untuk tegangan keluaran maksimum atau 5Volt.
    Berikutnya mari kita mencoba aplikasi input output analog ini secara langsung pada Arduino. Untuk yang pertama saya menggunakan potensiometer yang dihubungkan pada analog pin 0 seperti pada gambar berikut ini:

                                                      Gambar 1. Board Arduino Uno R3

    Pada gambar diatas dapat dilihat untuk pin yang biru (dari pin 0 sampai pin ke 5) merupakan analog pin dari board arduino uno. Sedangkan untuk yang berwarna coklat tua merupakan VCC, dan yang berwarna coklat muda merupakan ground (GND).




    II. Alat dan Bahan

    Alat dan bahan percobaan diperlihatkan pada Tabel 2:


    Tabel 2. Alat dan Bahan Praktikum

    No
    Alat dan Bahan
    Jumlah
    1
    Arduino Uno R3
    1
    2
    Modul /Rangkaian percobaan
    1
    3
    Kabel USB
    1
    4
    Kabel jumper
    Secukupnya



    III. Langkah Percobaan

    III.1 Percobaan Input Potensiometer

                   a.      Koneksi Hardware

    Dengan menggunakan kabel jumper, koneksikan Potensiometer yang ada pada mudul(rangkaian)  ke  pin-pin Arduino Uno R3  dengan konfigurasi sebagai berikut:


    Ø  Menghubungkan kaki 1 potensiometer dihubungkan ke sumber tegangan (VCC)
    Ø  Menghubungkan kaki 2 potensiometer dihubungkan ke pin A1 dari arduino uno
    Ø  Menghubungkan kaki 3 potensiometer dihubungkan ke groun (GND)




    Gambar 2. Skematik Percobaan Input Potensiometer




    Gambar 3. Breadboard Percobaan Input Potensiometer
    b.      Pemrograman Pada Arduino 

                Sketch program pada arduino dapat dilihat dibawah ini:

    int pinPot = A2;//pin untuk menerima sinyal analog dari potensiometer
    int val = 0;//variabel untuk menyimpan nilai konversi analog ke digital
    void setup() {
      Serial.begin(9600);//setup koneksi serial
    }
    void loop() {
     val = analogRead(pinPot); //baca nilai analog dari potensiometer
     Serial.println(val); //kirim nilai val ke koneksi serial
     delay(100);//jeda waktu
    }




    III.2 Percobaan Input Potensiometer Output Led

                   a.      Koneksi Hardware

    Dengan menggunakan kabel jumper, koneksikan Potensiometer dan Led yang ada pada mudul(rangkaian)  ke  pin-pin Arduino Uno R3  dengan konfigurasi sebagai berikut:

    Pemrograman pada Arduino diperlihatkan sebagai berikut:

      


    Ø  Menghubungkan kaki 1 potensiometer dihubungkan ke sumber tegangan (VCC)   

    Ø  Menghubungkan kaki 2 potensiometer dihubungkan ke pin A1 dari arduino uno

    Ø  Menghubungkan kaki 3 potensiometer dihubungkan ke groun (GND)

    Ø  Menghubungkan Led ke pin 13 dari arduino


      

    Gambar 2. Skematik Percobaan Input Potensiometer Out Led







    Gambar 3. Breadboard Percobaan Input Potensiometer Out Led


    b.      Pemrograman Pada Arduino
    Sketch program pada arduino dapat dilihat dibawah ini:
    int led = 13;//memilih pin digital untuk lampu led
    int pinPot = A2;//pin untuk menerima sinal analog
    int potVal = 0;//variabel untuk menyimpan nilai konversi analog ke digital
    void setup() {
      pinMode(led,OUTPUT);
      }
    void loop() {
      potVal=analogRead(pinPot);//baca nilai analog dari potensiometer
      potVal=map(potVal,0,1023,0,255);//ubah nilai (0-1023) menjadi (0-255)
      analogWrite(led,potVal);//ubah nilai vR untuk mengatur kecerahan led
    }



    IVHasil dan Pembahasan
    Pada percobaan kali ini menggunakan pin-pin analog dari arduino yaitu dari pin A0 sampai dengan pin A5dimana pin- pin tersebut akan dipakai sebagai analog input. Seperti percobaan diatas Potensiometer dipakai sebagai input dan Led dipakai sebagai output. Dan jika kita ingin membuat pin analog arduino sebagai input, maka pada program di arduino.ide kita dapat menulis “ pinMode (Potensiometer,INPUT); “ , dan untuk membaca hasil inputan dari potensiometer dapat digunakan “analogRead (Potensiometer); “ dan “int Val;” dipakai untuk menyimpan nilai konversi analog ke digital. Kemudian “potVal=map(potVal,0,1023,0,255);” dipakai untuk mengubah nilai dari (0-1023) menjadi (0-255). Dan jika kita ingin mengatur nyala Led dengan potensiometer maka pada program arduino dapat ditulis sebagai berikut “analogWrite(Led,potVal); “ .












    Praktikum 3

    Statement Control

    I. Dasar Teori
    Pada dasarnya setiap bahasa pemrograman terdiri dari:
    a          .       Ekspresi
    b          .      Statement
    c          .       Blok Statement
    d          .      Blok Fungsi

         Pada praktikum kali ini saya mempraktekan tentang statement control dimana statement control ini merupakan sebuah statement yang terdiri dari kondisi-kondisi yang dimana jika kondisi tersebut terpenuhi program akan melakukan suatu instruksi tertentu. Jadi dapat di katakan statement control merupakan penunjuk arah bagi urutan suatu program.

         Dalam bahasa C++ ada beberapa jenis statement control sebagai berikut  :

               
     1.      Kontruksi if

    Pada konstruksi if sebuah konstruktur program hanya memiliki  sebuah kondisi, artinya dimana suatu instruksi atau beberapa instruksi akan di jalankan apabila sebuah kondisi tersebut di penuhi, namun apabila kondisi tersebut tidak terpenuhi maka instruksi yang ada tidak akan di jalankan.

                        Berikut sintaks dari konstruksi if :

       
      if  (kondisi)
        { 
          Instruksi/statement;
         }

                

    2.      Konstruksi if – else

    Pada konstruksi if else sedikit berbeda dengan konstruksi if karena pada konstruksi if else . jika sebuah kondisi tidak terpenuhi maka program akan mencari kondisi lain yang ada atau menjalankan instruksi yang berada di luar bagian dari kondisi yang tidak terpenuhi.

    Berikut sintaks dari konstruksi if-else :

    if  (kondisi)
    {   
        Statement/instruksi;
          }
    else
    {
            Statement/instruksi;
          }
               

    3.      Konstruksi if – else bersarang

    Pada konstruksi ini terdapat lebih dari satu buah kondisi jadi pabila sebuah kondisi tidak terpenuhi maka akan berlanjut ke kondisi berikutnya tergantung berapa banyak kondisi yang ada.

    Berikut sintaks konstruksi if –else bersarang :

    if  (kondisi)
    {      
        Statement/instruksi;
          }
    else if (kondisi)
    {   
         Statement/instruksi;
         }
    else
         {
            Statement/instruksi;
         }
               

     4.      Konstruksi switch – case

    Konstruksi switch – case sedikit berbeda dengan konstruksi if – else, di mana konstruksi switch – case  lebih menguntungkan digunakan pada program yang memiliki banyak pilihan kondisi dalam satu step dan jumlah kondisi sudah pasti.jadi berbeda dengan statement if else yang hanya memiliki 2 pilihan kondisi pada satu step.

    Berikut sintaks konstruksi switch – case :

    Switch (variabel)
    {
        Case  konstanta1
           {
              Statement;
              Break;
            }
       Case konstanta ke-n
            {
               Statement;
               Break;
            }
    }



    III. Langkah Percobaan
    III.1 Percobaan For Control (Kombinasi nyala Led berdasarkan button yang ditekan)
                   a.      Koneksi Hardware
    Dengan menggunakan kabel jumper, koneksikan Led dan Pushbutton pada mudul(rangkaian)  ke  pin-pin Arduino Uno R3  dengan konfigurasi sebagai berikut:
    Ø  Menghubungkan kaki Anoda Led1 ke pin 7 Arduino
    Ø  Menghubungkan kaki Anoda Led2 ke pin 8 Arduino
    Ø  Menghubungkan kaki Anoda Led3 ke pin 9 Arduino
    Ø  Menghubungkan kaki Anoda Led4 ke pin 10 Arduino
    Ø  Menghubungkan Pushbutton1 ke pin 3 Arduino
    Ø  Menghubungkan Pushbutton2 ke pin 4 Arduino
    Ø  Menghubungkan Pushbutton3 ke pin 5 Arduino
    Ø  Menghubungkan Pushbutton4 ke pin 6 Arduino


    Gambar 1. Skematik Percobaan For Controll

    Gambar 2. Breadboard Percobaan For Controll
                           

                    
      b.      Pemrograman Pada Arduino
                Sketch program pada arduino dapat dilihat dibawah ini:
    int tombol1=3;
    int tombol2=4;
    int tombol3=5;
    int tombol4=6;
    int led1=7;
    int led2=8;
    int led3=9;
    int led4=10;
    void setup() {
      pinMode (tombol1,INPUT);
      pinMode (tombol2,INPUT);
      pinMode (tombol3,INPUT);
      pinMode (tombol4,INPUT);
      pinMode (led1,OUTPUT);
      pinMode (led2,OUTPUT);
      pinMode (led3,OUTPUT);
      pinMode (led4,OUTPUT);
    }
    void loop() {
      if (digitalRead(tombol1)==LOW)
      {digitalWrite(7,HIGH);
       digitalWrite(8,LOW);
       digitalWrite(9,LOW);
       digitalWrite(10,LOW);
      }
      else if (digitalRead(tombol2)==LOW)
      {digitalWrite(7,HIGH);
       digitalWrite(8,HIGH);
       digitalWrite(9,LOW);
       digitalWrite(10,LOW);
      }
      
       else if (digitalRead(tombol3)==LOW)
      {digitalWrite(7,HIGH);
       digitalWrite(8,HIGH);
       digitalWrite(9,HIGH);
       digitalWrite(10,LOW);
      }
      else if (digitalRead(tombol4)==LOW)
      {digitalWrite(7,HIGH);
       digitalWrite(8,HIGH);
       digitalWrite(9,HIGH);
       digitalWrite(10,HIGH);
      }
    delay (30);
          }


    IVHasil dan Pembahasan
    Pada praktikum kali ini menggunakan fungsi if-else dimana program akan berjalan ketika kondisinya terpenuhi, dan ketika kondisi pertama tidak terpenuhi maka program akan mencari kondisi yang lain, kemudian jika kondisinya terpenuhi program akan terus berjalan. Dalam hal ini program akan memeriksa kondisi dari pushbutton yang ditekan. Ketika pushbutton 1 ditekan maka hanya satu Led yang akan menyala, kemudian ketika pushbutton 2 ditekan maka dua Led yang akan menyala, terus ketika pushbutton 3 ditekan maka tiga Led yang akan menyala, terakhir ketika pushbutton 4 ditekan maka empat Led akan menyala.










    Praktikum 4

    Sensor Interfacing
      
    I. Dasar Teori
    Interface atau dalam istilah Indonesianya Antar Muka dapat diartikan sebagai sebuah titik, di mana dua komponen atau benda berbeda bertemu. Dalam hubungannya dengan perangkat lunak, interface dapat diartikan sebagai sarana atau medium atau sistem operasi yang digunakan untuk menghubungkan antara perangkat mikroprosesor agar dapat berkomunikasi dengan pengguna (user). Sedangkan pada konteks perangkat keras interface berarti komponen elektronika yang menghubungkan atau mengkomunikasikan prosesor dengan komponen atau perangkat lain dalam suatu sistem. Dalam praktikum kali ini saya akan mempraktekan tentang interfacing arduino dengan sensor. Dan untuk menampilkan hasil pembacaan dari sensor yang dipakai saya akan mengggunakan sebuah LCD.
    Pertama saya akan bahas mengenai sensor. Sensor adalah jenis transduser (mengubah suatu energi menjadi energi yang lain) seperti mengubah variasi mekanis, magnetis, panas, sinar dan kimia menjadi tegangan dan arus listrik. Ada banyak sensor yang ada, namun pada praktikum kali ini saya akan menggunakan sensor Flowmeter (sensor aliran) dan sensor suhu (DS18B20). Flowmeter merupakan alat yang berfungsi untuk mengukur kecepatan aliran dan volume fluida liquid maupun gas. Kerja dari flowmeter ini yaitu fluida berupa gas menggerakkan kincir yang dihubungkan dengan motor sehingga saat kincir berputar maka motor juga ikut berputar dan dapat menghasilkan ggl induksi. Pengkondisi sinyal membuat sinyal tegangan ggl induksi dari motor dapat terbaca oleh arduino, lalu LCD dapat manampilkan hasil pengukuran dari flow meter tersebut.


    Gambar 1. Sensor Flowmeter


    Keterangan:
    Pada gambar sensor flowmeter diatas untuk babel berwarna merah untuk VCC, kemudian kabel yang berwarna hitam untuk grunding (GND), dan kabel berwarna kuning untuk data.
    DS1820 adalah sensor suhu yang dikeluarkan oleh Dallas Semiconductor. Untuk membacanya menggunakan protokol 1 wire communication. Dimana hanya ada tiga kabel yang terdiri dari +5V, GND dan DQ (Data Input/Output). Keunggulan dari DS1820 adalah, output berupa data digital dengan nilai ketelitian 0,5 derajat Celcius sehingga mempermudah pembacaan oleh mikrokontroller.

    Gambar 2. Sensor DS18B20


    Dan komponen yang dipakai untuk menampilkan hasil pembacaan sensor yaitu LCD. LCD atau Liquid Crystal Display adalah suatu jenis media tampilan yang menggunakan kristal cair sebagai penampil utama. Dan pada percobaan kali ini saya menggunakan LCD 16x2 yang artinya LCD tersebut terdiri dari 16 kolom dan 2 baris karakter (tulisan).

    Gambar 3. LCD (Liquid Crystal Display)



     I. Alat dan Bahan 
                                           Alat dan bahan percobaan diperlihatkan pada Tabel 2:
    Tabel 2. Alat dan Bahan Praktikum
    No
    Alat dan Bahan
    Jumlah
    1
    Arduino Uno R3
    1
    2
    Modul /Rangkaian percobaan
    1
    3
    Kabel USB
    1
    4
    Sensor Suhu (
    1
    5
    Sensor Aliran (Flow Meter)
    1
    6
    Kabel jumper
    Secukupnya



    III. Langkah Percobaan
    III.1 Percobaan Interfacing Arduino Dan Sensor
                   a.      Koneksi Hardware
    Dengan menggunakan kabel , koneksikan Sensor Flowmeter dan Sensor Suhu (DS18B20) pada pin-pin Arduino Uno R3  dengan konfigurasi sebagai berikut:
    Ø  Menghubungkan kabel merah dari sensor Flowmeter ke sumber tegangan (VCC).
    Ø  Menghubungkan kabel hitam dari sensor Flowmeter ke ground (GND).
    Ø  Menghubungkan kabel kuning dari sensor Flowmeter ke pin 2 Arduino.
    Ø  Menghubungkan kabel merah dari sensor DS18B28 ke sumber tegangan (VCC).
    Ø  Menghubungkan kabel hitam dari sensor DS18B28 ke sumber ground (GND).
    Ø  Menghubungkan kabel kuning dari sensor DS18B28 ke pin 7 Arduino.
    Ø  Menghubungkan pin RS LCD ke pin 12 Arduino
    Ø  Menghubungkan pin E LCD ke pin 11 Arduino
    Ø  Menghubungkan pin D4 LCD ke pin 5 Arduino
    Ø  Menghubungkan pin D5 LCD ke pin 4 Arduino
    Ø  Menghubungkan pin D6 LCD ke pin 3 Arduino
    Ø  Menghubungkan pin D7 LCD ke pin 6 Arduino
    Ø  Menghubungkan pin RW LCD ke Ground (GND) Arduino
    Ø  Menghubungkan pin VSS LCD ke Ground (GND) Arduino
    Ø  Menghubungkan pin VCC LCD ke sumber tegangan (VCC) Arduino




    Gambar 2. Skematik Percobaan Interfacing Sensor Dan Arduino
    Gambar 3. Breadboard Percobaan Interfacing Sensor Dan Arduino

    1. Pemrograman Pada Arduino
      Pemrograman pada Arduino diperlihatkan sebagai berikut:
        // include the library code:
    #include <LiquidCrystal.h>
    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(12, 11, 5, 4, 3, 6);
        volatile int flow_frequency; // Measures flow sensor pulses
        unsigned int l_hour; // Calculated litres/hour
        unsigned char flowsensor = 2; // Sensor Input
        unsigned long currentTime;
        unsigned long cloopTime;
        void flow () // Interrupt function
        {
           flow_frequency++;
        }
        void setup()
        {
           pinMode(flowsensor, INPUT);
           digitalWrite(flowsensor, HIGH); // Optional Internal Pull-Up
           Serial.begin(9600);
           attachInterrupt(0, flow, RISING); // Setup Interrupt
           sei(); // Enable interrupts
           currentTime = millis();
           cloopTime = currentTime;
       
          // set up the LCD's number of columns and rows:
      lcd.begin(16, 2);
      // Print a message to the LCD.
      lcd.print("SUHU: BELUM ADA");
        }
       
        void loop ()
        {
           currentTime = millis();
           // Every second, calculate and print litres/hour
           if(currentTime >= (cloopTime + 1000))
           {
              cloopTime = currentTime; // Updates cloopTime
              // Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.
              l_hour = (flow_frequency * 60 / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour
              flow_frequency =0; // Reset Counter
              lcd.setCursor(0, 1);
              lcd.print("           ");
              lcd.setCursor(0, 1);
              lcd.print("Flow: ");
              lcd.print(l_hour); // Print litres/hour
              lcd.setCursor(12, 1);
              lcd.print("L/H");
              //lcd.clear();
           }
        }



    IVHasil dan Pembahasan
    Pada praktikum kali ini saya belajar tentang interfacing sensor dengan arduino,dimana pada praktikum ini sensor akan terhubung dengan arduino sehingga sensor dapat mengirim data hasil pengukuran suhu dan aliran kemudian data tersebut diterima oleh arduino untuk seterusnya ditampilkan pada LCD. Pada program untuk menampilkan hasil pembacaan sensor pada LCD dapat dituliskan ‘’ lcd.print ( “ sensor terpasang” ) ;  ‘’ . Kemudian program untuk mengatur letak penampilan tulisan ( hasil pembacaan sensor ) yaitu  ‘’ lcd.setCursor (0,1); ‘’ . maksud dari lcd.setCursor (0,1); ini adalah kita akan menulis di LCD pada number colom ke 0, number baris ke 1.
sumber :