PERCOBAAN 2 MODUL 3







1. Komponen [Kembali]

A. Arduino 

 

Arduino adalah pengendali mikro single-board yang bersifat open-source, diturunkan dari Wiring platform, dirancang untuk memudahkan penggunaan elektronik dalam berbagai bidang. Hardwarenya memiliki prosesor Atmel AVR dan softwarenya memiliki bahasa pemrograman sendiri. Saat ini Arduino sangat populer di seluruh dunia. Banyak pemula yang belajar mengenal robotika dan elektronika lewat Arduino karena mudah dipelajari. Tapi tidak hanya pemula, para hobbyist atau profesional pun ikut senang mengembangkan aplikasi elektronik menggunakan Arduino. Bahasa yang dipakai dalam Arduino bukan assembler yang relatif sulit, tetapi bahasa C yang disederhanakan dengan bantuan pustaka-pustaka (libraries) Arduino.

Input/output digital atau digital pin adalah pin pin untuk menghubungkan arduino dengan komponen atau rangkaian digital. contohnya , jika ingin membuat LED berkedip, LED tersebut bisa dipasang pada salah satu pin input atau output digital dan ground. komponen lain yang menghasilkan output digital atau menerima input digital bisa disambungkan ke pin pin ini. Input analog atau analog pin adalah pin pin yang berfungsi untuk menerima sinyal dari komponen atau rangkaian analog. contohnya , potensiometer, sensor suhu, sensor cahaya, dll.


B. PUSH BUTTON


Push Button adalah saklar tekan yang berfungsi sebagai pemutus atau penyambung arus listrik dari sumber arus ke beban listrik. Prinsip kerja Push Button adalah apabila dalam keadaan normal tidak ditekan maka kontak tidak berubah, apabila ditekan maka kontak NC akan berfungsi sebagai stop (memberhentikan) dan kontak NO akan berfungsi sebagai start (menjalankan) biasanya digunakan pada sistem pengontrolan motor – motor induksi untuk menjalankan mematikan motor pada industri – industri.

C. LED

Pengertian LED (Light Emitting Diode) dan Cara Kerjanya – Light Emitting Diode atau sering disingkat dengan LED adalah komponen elektronika yang dapat memancarkan  cahaya monokromatik ketika diberikan tegangan maju. LED merupakan keluarga Dioda yang terbuat dari bahan semikonduktor. Warna-warna Cahaya yang dipancarkan oleh LED tergantung pada jenis bahan semikonduktor yang dipergunakannya. LED juga dapat memancarkan sinar inframerah yang tidak tampak oleh mata seperti yang sering kita jumpai pada Remote Control TV ataupun Remote Control perangkat elektronik lainnya.

2. Gambar Rangkaian Simulasi [Kembali]



Gambar 1.rangkaian simulasi



Gambar 2.flow chart kondisi



//MASTER

#include  <SPI.h>  //Deklarasi library SPI

void setup (void) {
  Serial.begin(115200); //Set baud rate 115200
  digitalWrite(SS, HIGH);
  // disable Slave Select
  SPI.begin ();
  SPI.setClockDivider(SPI_CLOCK_DIV8);  //divide the clock by 8
}

void loop (void) {
  char c;
  digitalWrite(SS, LOW);  //enable Slave Select
  // send test string
  for (const char * p = "Hello, world!\r" ; c = *p; p++)
  {
    SPI.transfer (c);
    Serial.print(c);
  }
  digitalWrite(SS, HIGH); // disable Slave Select
  delay(2000);

}

//SLAVE

#include <SPI.h>
char buff [50];
volatile byte indx;
volatile boolean process;

void setup (void) {
  Serial.begin (115200);
  pinMode(MISO, OUTPUT); // have to send on master in so it set as output
  SPCR |= _BV(SPE); // turn on SPI in slave mode
  indx = 0; // buffer empty
  process = false;
  SPI.attachInterrupt(); // turn on interrupt
}
ISR (SPI_STC_vect) // SPI interrupt routine
{
  byte c = SPDR; // read byte from SPI Data Register
  if (indx < sizeof buff) {
    buff [indx++] = c; // save data in the next index in the array buff
    if (c == '\r') //check for the end of the word
      process = true;
  }
}
void loop (void) {
  if (process) {
    process = false; //reset the process
    Serial.println (buff); //print the array on serial monitor
    indx = 0; //reset button to zero
  }
}
5. Video Simulasi [Kembali]



6. Prinsip Kerja Rangkaian dan Analisa [Kembali]

Percobaan 2

1.    Bisakah SPI menggunakan lebih dari satu master?

Tidak bisa karena akan terjadi eror atau sulitnya dalam pemilihan slave yang dituju jika menggunakan master yang banyak atau lebih dari satu. Karena pada saat memilih slave atau slave select pertama pada master diberi high maka untuk memilih slavenya kita beri atau kirim perintah slave select low ke sehingga slave tersebut dapat dialiri arus oleh master karena adanya beda potensial. Tetapi jika terdapat 2 master maka slave akan menerima 2 data yang berbeda dari 2 master yang berbeda juga sehingga slave sulit memproses 2 data sekaligus karena pada SPI bersifat sinkron atau komunikasi sinkron.

2.    Jelaskan pengaruh input pullup dan pulldown pada rangkaian!

Sangat berpengaruh pada input yang diterima dari master. Pada saat diberi input pullup seperti pada program maka input bernilai 0 (low) saat push button ditekan dan akan bernilai 1 (high) jika tidak ditekan. Maka sesuai program yang dimasukan maka bila push button ditekan led hidup dan jika dilepas led mati. Tetapi beda dengan input pull down yang merupakan kebalikan dari pull up yang dimana saat ditekan berlogika 1 (high) dan jika dilepas maka akan berlogika 0 (low). Maka pada output akan berubah juga pada saat push butto ditekan maka led akan mati dan jika dilepas led akan hidup.

3.    Jelaskan prinsip kerja SPI pada rangkaian

Rangkaian dimulai dari input button yang dimasukan ke master dan master mengolah lalu dikirimkan ke slave dan salve mengeksekusi perintah yang diberikan dari master sehingga led hidup atau mati. Lebih jelasnya mari kita lihat penjelasan dari listing programnya.

a)    Master

#include <SPI.h> //Deklarasi library SPI

#define button 2

void setup (void) {

  pinMode(button, INPUT_PULLUP);

  Serial.begin(115200 ); //Set baud rate 115200

  digitalWrite(SS, HIGH);

  // disable Slave Select

  SPI.begin ();

  SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8

}

·    Pada listing program pertama saya mendeklarasikan library SPI yang dimana pin-pin yang ada pada SPI adalah 10-13. Dan saya juga mendeklarasikan pin 2 ke variabel button. Pada void setup saya memberi perintah yaitu pin button saya beri perintah input pullup  selanjutnya set bued rate atau kecepatan data sebesar 115200 dan dilanjutkan dengan perintah pemeberian logika high pada ss master selanjutnya SPI.begin () untuk memulai SPI dan selanjutnya adalah SPI.setClockDivider(SPI_CLOCK_DIV8) digunakan untuk mengatur clock pada SPI.

void loop (void) {

  char c;

  int nilai=digitalRead(button);

  if(nilai==0){

   digitalWrite(SS, LOW); //enable Slave Select

  // send test string

  for (const char * p = "Hello, world!\r" ; c = *p; p++)

  {

    SPI.transfer (c);

    Serial.print(c);

  }

  digitalWrite(SS, HIGH); // disable Slave Select

  delay(2000);

  }

}

·       Listing program selanjutnya adalah void loop yang berisikan inisialisasi variabel c dengan tipe data char. Selanjutnya deklarasikan variabel nilai dengan tipe data integer yang nilainya sama dengan input button yang terbaca. Masuk ke logika if dimana jika button ditekan akan berlogika 0 maka dijalan kan program pertama pemberian logika low pada slave select sehingga ada arus yang mengalir karena beda potensial antara ss master dengan ss sehingga slave select aktif. Selanjutnya “for (const char * p = "Hello, world!\r" ; c = *p; p++)” sintak ini digunakan untuk menentukan c atau data variabel c.      Selanjutnya SPI.transfer (c) untuk memulai mengrim data c ke slave dan Serial.print(c) digunakan untuk mencetak nilai dari variabel c. Setelah program if selesai maka slave select di non aktifkan dengan memeberi logika high pada slave select sehingga tidak ada arus mengalir ke slave select karena tidak ada beda potensial antara keduanya. Terakkhir program di delay 2000ms sebelum fungsi loop diulang kembali. 

b)    Salve

#include <SPI.h>

#define led 2

 

char buff [50];

volatile byte indx;

volatile boolean process;

 

void setup (void) {

  Serial.begin (115200);

  pinMode(led, OUTPUT); // have to send on master in so it set as output

  SPCR |= _BV(SPE); // turn on SPI in slave mode

  indx = 0; // buffer empty

  process = false;

  SPI.attachInterrupt(); // turn on interrupt

}

 

·       pada program slave kita mendeklarasikan library SPI yang dimana pin-pin yang ada pada SPI adalah 10-13. Dan saya juga mendeklarasikan pin 2 ke variabel led. char buff [50] digunkan untuk mendeklarasikan variabel buff yang terdapat pada SPI volatile byte indx yaitu varibel indx dengan tipedata yang tidak berkoma dan volatile boolean process variabel process yang tipe data tidak berkoma juga dan bersifat untuk memilih salah satu. Untuk fungsi void setupnya berisikan untuk kecepatan data yang sama dengan master karena komunikasi sinkron yaitu 115200. Untuk pin led beri perintah output.   SPCR |= _BV(SPE) untuk turn on SPI in slave mode. indx = 0 digunakan untuk memberi nilai awal pada indx. process = false untuk memberi lokiga awal flase pada process. SPI.attachInterrupt() untuk turn on interrupt.

ISR (SPI_STC_vect) // SPI interrupt routine

{

  byte c = SPDR; // read byte from SPI Data Register

  if (indx < sizeof buff) {

    buff [indx++] = c; // save data in the next index in the array buff

    if (c == '\r') //check for the end of the word

      process = true;

  }

}

·       Listing program selanjutnya adalah fungsi rutin interups atau interuksi dimana berisi perintah untuk mengecek data yang dikirim oleh master ke salve jika data terkirim dan benar makan process = true. Jika tidak maka logika akan tetap yaitu process = false.

 

void loop (void) {

  if (process) {

    digitalWrite(led, HIGH);

    process = false; //reset the process

    Serial.println (buff); //print the array on serial monitor

    indx = 0; //reset button to zero

    delay(1000);

  }

  else

  {

    digitalWrite(led, LOW);

  }

}

 

·       Listing program selanjutnya adalah fungsi void loop yang berisikan perintah if dimana jika process true maka akan dijalankan program didalamnya yang berisikan diberinya logika high pada pin led sehingga led hidup. Reset process dengan memeberi logika false ke process. Indx direset juga menjadi 0 dan diberi delay 1000ms karean process telah direset ke false maka logika else dijalankan sehingga setelah delay 1000ms maka led akan diberi logika low sehingga mati kembali. Setelahnya perintah voidloop akan diulang kembali.

7. Link Download [Kembali]

Download Rangkaian Simulasi  disini
Download Video simulasi  disini
Download HTML  disini
Download Program Arduino  disini

Tidak ada komentar:

Posting Komentar