Aplikasi I/O Sederhana (Kipas dan Suara)





SMART LIFT

1. Pendahuluan
[Kembali]

2. Tujuan [Kembali]
  1. Memahami prinsip dasar input dan output pada mikrokontroler.
  2. Mampu mengonfigurasi dan mengendalikan 7-segment sebagai output pada mikrokontroler.
  3. Mampu menangkap dan memproses input dari keypad.
3. Alat dan Bahan [Kembali]
A. Alat
  • Power Supply
B. Bahan

  • Motor DC

  • Seven Segment Common Cathode

  • Arduino Uno
  • Keypad 4 x 3

  • Vibration Sensor

  • PIR Sensor

  • Touch Sensor



4. Dasar Teori [Kembali]

  • Motor DC

Motor terdiri atas 2 bagian utama yaitu stator dan motor. Pada stator terdapat lilitan (winding) atau magnet permanen, sedangkan rotor adalah bagian yang dialiri dengan sumber arus DC. Arus yang melalui medan magnet inilah yang menyebabkan rotor dapat berputar. Arah gaya elektromagnet yang ditimbulkan akibat medan magnet yang dilalui oleh arus dapat ditentukan dengan menggunakan kaidah tangan kanan.



          


Keuntungan utama motor DC adalah sebagai pengendali kecepatan, yang tidak mempengaruhi kualitas pasokan daya. Motor ini dapat dikendalikan dengan mengatur:
• Tegangan dinamo : meningkatkan tegangan dinamo akan meningkatkan kecepatan
• Arus medan : menurunkan arus medan akan meningkatkan kecepatan.

Mekanisme Kerja Motor D

Mekanisme kerja untuk seluruh jenis motor secara umum sama
  • Arus listrik dalam medan magnet akan menimbulkan gaya.
  • Jika kawat yang membawa arus dibengkokkan menjadi sebuah lingkaran/loop, maka kedua sisi loop yaitu pada sudut kanan medan magnet akan mendapat gaya pada arah yang berlawanan.
  • Pasangan gaya menghasilkan torsi untuk memutar kumparan.
  • Motor- motor memiliki beberapa loop pada dinamonya untuk memberikan tenaga putar yang lebih seragam dari medan magnetnya dihasilkan oleh susunan elektromagnetik yang disebut kumparan medan

 

  • Seven Segment Common Cathode
Seven segment adalah suatu segmen-segmen yang digunakan untuk menampilkan angka / bilangan decimal. Seven segmen ada 2 jenis, yaitu Common Anoda dan Common Katoda. 

Common Cathode merupakan bergabung menjadi satu Pin, sedangkan penujang Anoda bisa menjadi Input untuk masing-masing Segmen LED. Kaki Katoda yang terhubung menjadi 1 Pin ini merupakan Terminal Negatif (-) atau Ground sedangkan Signal Kendali (Control Signal) akan diberikan kepada masing-masing Kaki Anoda Segmen LED.LED Seven Segment Display Tipe Common Katoda.


  • Vibration Sensor



Vibration sensor / Sensor getaran ini memegang peranan penting dalam kegiatan pemantauan sinyal getaran karena terletak di sisi depan (front end) dari suatu proses pemantauan getaran mesin. Secara konseptual, sensor getaran berfungsi untuk mengubah besar sinyal getaran fisik menjadi sinyal getaran analog dalam besaran listrik dan pada umumnya berbentuk tegangan listrik. Pemakaian sensor getaran ini memungkinkan sinyal getaran tersebut diolah secara elektrik sehingga memudahkan dalam proses manipulasi sinyal, diantaranya:
    • Pembesaran sinyal getaran
    • Penyaringan sinyal getaran dari sinyal pengganggu.
    • Penguraian sinyal, dan lainnya.
Sensor getaran dipilih sesuai dengan jenis sinyal getaran yang akan dipantau. Karena itu, sensor getaran dapat dibedakan menjadi:
    • Sensor penyimpangan getaran (displacement transducer)
    • Sensor kecepatan getaran (velocity tranducer)
    • Sensor percepatam getaran (accelerometer).

Pemilihan sensor getaran untuk keperluan pemantauan sinyal getaran didasarkan atas pertimbangan berikut:
  • Jenis sinyal getaran
  • Rentang frekuensi pengukuran
  • Ukuran dan berat objek getaran.
  • Sensitivitas sensor
Berdasarkan cara kerjanya sensor dapat dibedakan menjadi:
  • Sensor aktif, yakni sensor yang langsung menghasilkan tegangan listrik tanpa perlu catu daya (power supply) dari luar, misalnya Velocity Transducer.
  • Sensor pasif yakni sensor yang memerlukan catu daya dari luar agar dapat berkerja.

        Grafik perbandingan frekuensi dengan sensitivitas sensor getaran :


 

  • PIR Sensor


PIR (Passive Infrared Receiver) merupakan sebuah sensor berbasiskan infrared. Akan tetapi, tidak seperti sensor infrared kebanyakan yang terdiri dari IR LED dan fototransistor. PIR tidak memancarkan apapun seperti IR LED. Sesuai dengan namanya ‘Passive’, sensor ini hanya merespon energi dari pancaran sinar inframerah pasif yang dimiliki oleh setiap benda yang terdeteksi olehnya. Benda yang bisa dideteksi oleh sensor ini biasanya adalah tubuh manusia

Diagram sensor PIR:

PIR (Passive Infrared Receiver) merupakan sebuah sensor berbasiskan infrared. Akan tetapi, tidak seperti sensor infrared kebanyakan yang terdiri dari IR LED dan fototransistor. PIR tidak memancarkan apapun seperti IR LED. Sesuai dengan namanya ‘Passive’, sensor ini hanya merespon energi dari pancaran sinar inframerah pasif yang dimiliki oleh setiap benda yang terdeteksi olehnya. Benda yang bisa dideteksi oleh sensor ini biasanya adalah tubuh manusia.

Sensor PIR ini bekerja dengan menangkap energi panas yang dihasilkan dari pancaran sinar inframerah pasif yang dimiliki setiap benda dengan suhu benda diatas nol mutlak. Seperti tubuh manusia yang memiliki suhu tubuh kira-kira 32 derajat celcius, yang merupakan suhu panas yang khas yang terdapat pada lingkungan. Pancaran sinar inframerah inilah yang kemudian ditangkap oleh Pyroelectric sensor yang merupakan inti dari sensor PIR ini sehingga menyebabkan Pyroelectic sensor yang terdiri dari galium nitrida, caesium nitrat dan litium tantalate menghasilkan arus listrik. Mengapa bisa menghasilkan arus listrik? Karena pancaran sinar inframerah pasif ini membawa energi panas. Prosesnya hampir sama seperti arus listrik yang terbentuk ketika sinar matahari mengenai solar cell.

Grafik Respon Pir terhadap suhu


Grafik sensor pir terhadap jarak, kecepatan,arah objek



  • Touch Sensor


Touch Sensor atau Sensor Sentuh adalah sensor elektronik yang dapat mendeteksi sentuhan. Sensor Sentuh ini pada dasarnya beroperasi sebagai sakelar apabila disentuh, seperti sakelar pada lampu, layar sentuh ponsel dan lain sebagainya. Sensor Sentuh ini dikenal juga sebagai Sensor Taktil (Tactile Sensor). Seiring dengan perkembangan teknologi, sensor sentuh ini semakin banyak digunakan dan telah menggeser peranan sakelar mekanik pada perangkat-perangkat elektronik.

Berdasarkan fungsinya, Sensor Sentuh dapat dibedakan menjadi dua jenis utama yaitu Sensor Kapasitif dan Sensor Resistif. Sensor Kapasitif atau Capacitive Sensor bekerja dengan mengukur kapasitansi sedangkan sensor Resistif bekerja dengan mengukur tekanan yang diberikan pada permukaannya.

Sensor Kapasitif

Sensor sentuh Kapasitif merupakan sensor sentuh yang sangat populer pada saat ini, hal ini dikarenakan Sensor Kapasitif lebih kuat, tahan lama dan mudah digunakan serta harga yang relatif lebih murah dari sensor resistif. Ponsel-ponsel pintar saat ini telah banyak yang menggunakan teknologi ini karena juga menghasilkan respon yang lebih akurat.

Berbeda dengan Sensor Resistif yang menggunakan tekanan tertentu untuk merasakan perubahan pada permukaan layar, Sensor Kapasitif memanfaatkan sifat konduktif alami pada tubuh manusia untuk mendeteksi perubahan layar sentuhnya. Layar sentuh sensor kapasitif ini terbuat dari bahan konduktif (biasanya Indium Tin Oxide atau disingkat dengan ITO) yang dilapisi oleh kaca tipis dan hanya bisa disentuh oleh jari manusia atau stylus khusus ataupun sarung khusus yang memiliki sifat konduktif.

Pada saat jari menyentuh layar, akan terjadi perubahaan medan listrik pada layar sentuh tersebut dan kemudian di respon oleh processor untuk membaca pergerakan jari tangan tersebut. Jadi perlu diperhatikan bahwa sentuhan kita tidak akan di respon oleh layar sensor kapasitif ini apabila kita menggunakan bahan-bahan non-konduktif sebagai perantara jari tangan dan layar sentuh tersebut.

Sensor Resistif

Tidak seperti sensor sentuh kapasitif, sensor sentuh resistif ini tidak tergantung pada sifat listrik yang terjadi pada konduktivitas pelat logam. Sensor Resistif bekerja dengan mengukur tekanan yang diberikan pada permukaannya. Karena tidak perlu mengukur perbedaan kapasitansi, sensor sentuh resistif ini dapat beroperasi pada bahan non-konduktif seperti pena, stylus atau jari di dalam sarung tangan.

Sensor sentuh resistif terdiri dari dua lapisan konduktif yang dipisahkan oleh jarak atau celah yang sangat kecil. Dua lapisan konduktif (lapisan atas dan lapisan bawah) ini pada dasarnya terbuat dari sebuah film. Film-film umumnya dilapisi oleh Indium Tin Oxide yang merupakan konduktor listrik yang baik dan juga transparan (bening).

Cara kerjanya hampir sama dengan sebuah sakelar, pada saat film lapisan atas mendapatkan tekanan tertentu baik dengan jari maupun stylus, maka film lapisan atas akan bersentuhan dengan film lapisan bawah sehingga menimbulkan aliran listrik pada titik koordinat tertentu layar tersebut dan memberikan signal ke prosesor untuk melakukan proses selanjutnya.

Gambar Grafik Sensor Sentuh


5. Percobaan [Kembali]
a. Prosedur[Kembali]
    • Siapkan segala komponen yang di butuhkan
    • Susun rangkaian sesuai panduan
    • Input codingan arduino
    • Hidupkan rangkaian
    • Apabila tidak terjadi eror, maka rangkaian selesai dibuat.
b. Handware[Kembali]

c. Rangkaian Simulasi dan Prinsip Kerja[Kembali] 


Sensor vibration terhubung ke kaki A0 sebagai input, Sensor PIR terhubung ke kaki A1 sebagai input, Sensor touch terhubung ke kaki A2 sebagai input. Sedangkan A3 dan A4 sebagai output yang terhubung ke pada motor DC. Pada saat salah satu sensor aktif, maka arduino akan mengeluarkan output high pada A4 dan low pada A3 sehingga motor untuk membuka pintu lift akan bergerak, sedangkan ketika semua sensor berlogika nol maka arduino akan mengeluarkan output high pada A3 dan low pada A4 sehingga motor untuk menutup pintu lift akan bergerak. Keypad terhubung kearduino sebagai input dimana bagian row keypad terhubung ke pin 0-3 arduino, sedangkan bagian columb terhubung ke pin 4-6. Ketika keypad memberi input, arduino akan menjalankan input tersebut dengan menjadikan ouput pada kaki 7-13 yang terhubung kepada sevensegment. Ketika keypad memberi input 1 maka pada seven segment akan menampilkan 1.

 

c. Flowchart dan Listing Program[Kembali]

  • Flowchart


    • Listing Program 
#include <Key.h>
#include <Keypad.h>

#include <Key.h> and <Keypad.h>: Include libraries for keypad functionality.

int check;

Mendeklarasikan variabel check untuk menyimpan informasi status.

const byte rows = 4;
const byte cols = 3;

Mendefinisikan jumlah baris dan kolom pada keypad.

 char key[rows][cols] =

{
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};

Definisi matriks 4x3 yang berisi karakter-karakter yang merepresentasikan tombol-tombol pada keypad.

 byte rowpins[rows] = {0, 1, 2, 3};

byte colpins[cols] = {4, 5, 6};

Array yang menentukan pin-pin Arduino yang terhubung ke baris dan kolom keypad.

//Create an object of keypad
Keypad keypad = Keypad( makeKeymap(key), rowpins, colpins,  rows, cols );

Pembuatan objek Keypad dengan nama keypad menggunakan matriks tombol yang telah didefinisikan dan konfigurasi pin.

 const int pinVib = A0;

Mendefinisikan pin A0 untuk sensor getaran.

const int pinPIR = A1;

Mendefinisikan pin A1 untuk sensor PIR.

const int pinTouch = A2;
Mendefinisikan pin A2 untuk sensor sentuhan.

const int pinTertutup = A3;  
Mendefinisikan pin A3 keluaran untuk motor menutup pintu lift

const int pinTerbuka = A4;  
Mendefinisikan pin A4 keluaran untuk motor menutup pintu lift

const int sevenSegmentPins[] ={7, 8, 9, 10, 11, 12, 13};
Array pin digital yang terhubung ke 7-segment display.

 void setup() {

  for (int i = 0; i < 7; i++) {
    pinMode(sevenSegmentPins[i], OUTPUT);
  }

for yang digunakan untuk mengatur mode pin pada tujuh pin digital yang terhubung ke 7-segment display. Loop ini mengatur setiap pin pada mode OUTPUT, yang berarti pin tersebut akan digunakan sebagai output digital untuk mengontrol 7-segment display.

 

  pinMode(pinVib, INPUT);
  pinMode(pinPIR, INPUT);
  pinMode(pinTouch, INPUT);

pinVib, pinPIR, dan pinTouch, Semua pin ini diatur ke mode INPUT

  pinMode(pinTertutup, OUTPUT);
  pinMode(pinTerbuka, OUTPUT);

dua pin digital pinTertutup dan pinTerbuka diatur ke mode OUTPUT

  // Set up row and column pins for keypad
  for (int i = 0; i < rows; i++) {
    pinMode(rowpins[i], INPUT);

  }

setiap pin pada baris keypad diatur menjadi INPUT.

  for (int j = 0; j < cols; j++) {
    pinMode(colpins[j], INPUT);
  }

mengatur mode pin pada kolom keypad menjadi INPUT

  Serial.begin(9600);
inisialisasi komunikasi serial dengan kecepatan 9600 baud.
}

void zero() {
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);   // 0
}

Menetapkan pin 7-12 menjadi HIGH (tinggi) dan pin 13 menjadi LOW (rendah).
Ini mewakili konfigurasi untuk menampilkan angka "0" pada 7-segment display.

 

void one() {
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);   // 1
}

Menetapkan pin 8-12 menjadi LOW dan pin 7 menjadi HIGH.
Ini mewakili konfigurasi untuk menampilkan angka "1" pada 7-segment display.

void two() {
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(13, HIGH);   // 2
}

Menetapkan pin 7, 8, 10, 11, dan 13 menjadi HIGH, sedangkan pin 9 dan 12 menjadi LOW.
Ini mewakili konfigurasi untuk menampilkan angka "2" pada 7-segment display.

void three() {
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, HIGH);   // 3
}

Menetapkan pin 7-9, 10, dan 13 menjadi HIGH, sedangkan pin 11 dan 12 menjadi LOW.
Ini mewakili konfigurasi untuk menampilkan angka "3" pada 7-segment display.

void four() {
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);   // 4
}

Menetapkan pin 8, 9, 12, dan 13 menjadi HIGH, sedangkan pin 7, 10, dan 11 menjadi LOW.
Ini mewakili konfigurasi untuk menampilkan angka "4" pada 7-segment display.

void five() {
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);   // 5
}

Menetapkan pin 7, 9, 10, 11, dan 12 menjadi HIGH, sedangkan pin 8 dan 13 menjadi LOW.
Ini mewakili konfigurasi untuk menampilkan angka "5" pada 7-segment display.

 

void six() {
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);   // 6
}

Menetapkan pin 7 dan 12-13 menjadi HIGH, sedangkan pin 8-11 menjadi LOW.
Ini mewakili konfigurasi untuk menampilkan angka "6" pada 7-segment display.

 

void seven() {
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);  // 7
}

Menetapkan pin 7-9 menjadi HIGH, sedangkan pin 10-13 menjadi LOW.
Ini mewakili konfigurasi untuk menampilkan angka "7" pada 7-segment display.

 

void eight() {
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);   // 8
}

Menetapkan semua pin (7-13) menjadi HIGH.
Ini mewakili konfigurasi untuk menampilkan angka "8" pada 7-segment display.

 

void nine() {
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);   // 9
}

Menetapkan pin 7-8, 10-13 menjadi HIGH, sedangkan pin 9 menjadi LOW.
Ini mewakili konfigurasi untuk menampilkan angka "9" pada 7-segment display.

void loop() {

fungsi loop() yang akan dijalankan secara terus-menerus setelah fungsi setup() selesai dieksekusi

 

    char keyPressed = keypad.getKey();


membaca input dari keypad dan menyimpannya dalam variabel keyPressed. Fungsi getKey() dari objek keypad mengembalikan karakter tombol yang ditekan

    if (keyPressed == '#') {
      zero();
      check = 0;
    }

Jika tombol yang ditekan adalah tanda pagar (#), maka fungsi zero() akan dipanggil untuk menampilkan angka "0" pada 7-segment display. Selanjutnya, variabel check diatur menjadi 0.

    if (keyPressed == '0') {
      zero();
      check = 1;
    }

Jika tombol yang ditekan adalah angka "0", maka juga fungsi zero() akan dipanggil, dan variabel check diatur menjadi 1.

 

    if (keyPressed == '1') {
      one();
      check = 1;
    }

    if (keyPressed == '2') {
      two();
      check = 1;
    }

    if (keyPressed == '3') {
      three();
      check = 1;
    }

    if (keyPressed == '4') {
      four();
      check = 1;
    }

    if (keyPressed == '5') {
      five();
      check = 1;
    }

    if (keyPressed == '6') {
      six();
      check = 1;
    }

    if (keyPressed == '7') {
      seven();
      check = 1;
    }

    if (keyPressed == '8') {
      eight();
      check = 1;
    }

    if (keyPressed == '9') {
      nine();
      check = 1;
    }
 

Seri if-statements yang menghandle tombol angka 1 hingga 9. Jika salah satu tombol tersebut ditekan, fungsi yang sesuai (misalnya, one() untuk angka 1) akan dipanggil dan variabel check diatur menjadi 1.

  // Cek kondisi A0, A1, A2
    if (digitalRead(pinVib) == HIGH || digitalRead(pinPIR) == HIGH || digitalRead(pinTouch) == HIGH)
digitalRead(pinVib) == HIGH: Mengecek apakah sinyal pada pinVib (A0) berada pada (HIGH).
digitalRead(pinPIR) == HIGH: Mengecek apakah sinyal pada pinPIR (A1) berada pada (HIGH).
digitalRead(pinTouch) == HIGH: Mengecek apakah sinyal pada pinTouch (A2) berada pada (HIGH).
Kondisi akan terpenuhi jika setidaknya satu dari ketiga sensor tersebut mendeteksi keadaan yang diinginkan (berlogika HIGH)
{
    digitalWrite(pinTerbuka, HIGH);
    digitalWrite(pinTertutup, LOW);

Jika kondisi terpenuhi (minimal satu sensor memberikan sinyal HIGH), maka pinTerbuka akan diatur menjadi HIGH dan pinTertutup akan diatur menjadi LOW
  }
  else
  {
    digitalWrite(pinTerbuka, LOW);
    digitalWrite(pinTertutup, HIGH);
  }
  }

Jika kondisi tidak terpenuhi (tidak ada sensor yang memberikan sinyal HIGH), maka pinTerbuka akan diatur menjadi LOW dan pinTertutup akan diatur menjadi HIGH.

d. Video Simulasi[Kembali]

 


e. Download File[Kembali]

Tidak ada komentar:

Posting Komentar

Modul 4

[KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Pendahuluan 2. Tujuan 3. Alat dan Bahan 4. Dasar Teori 5. Percobaan Percob...