Cara Menghubungkan 2 Arduino

Dua buah board Arduino UNO/Nano dapat dihubungkan dengan komunikasi serial, sehingga keduanya dapat berkomunikasi.

Alternatif komunikasi serial yang dapat dipakai adalah sebagai berikut:

  • Komunikasi Serial Asinkron
  • Komunikasi Serial I2C / TWI (Two Wire Interface)
  • Komunikasi SPI (Serial Peripheral Interface)

Komunikasi Serial Asinkron

Pada komunkasi serial asinkron, port yang dipakai adalah port komunikasi serial TX & RX, atau pin D0 dan D1 pada Arduino. Cara menghubungkannya adalah silang, yaitu TX dihubungkan ke RX , RX dihubungkan ke TX. Pengiriman data dilakukan dengan menggunakan library Serial pada Arduino. Pada komunikasi ini hanya dapat dihubungkan 2 buah board Arduino.

Komunikasi asinkron pada Arduino dapat menggunakan hardware dan software. Secara hardware, komunikasi asinkron terhubung ke pin D0 dan D1. Jika perlu tambahan komunikasi serial, dapat menggunakan library SoftwareSerial. 

Jika menggunakan library SoftwareSerial, port yang digunakan bebas.

Berikut ini skema menghubungkan Arduino dengan komunikasi sinkron, menggunakan port asinkron bawaan aslinya. Pin TX di Arduino pertama dihubungkan ke RX di Arduino kedua. Pin RX di Arduino pertama dihubungkan ke TX di Arduino kedua.

Cara menghubungkan 2 arduino dengan komunikasi asinkron
Cara menghubungkan 2 arduino dengan komunikasi asinkron

Komunikasi Serial I2C/TWI

Pada komunikasi ini digunakan protokol TWI (Two Wire Interface). Pin yang dipakai adalah SDA (ADC4) dan SCL (ADC5).

Berikut ilustrasi port pada Arduino:

Pin Arduino UNO
Pin Arduino UNO

Pada protokol TWI/I2C, 1 prosesor menjadi master, sedangkan lainnya adalah slave. Pengalamatan pada I2C adalah 7 bit, jadi jumlah node maksimum yang dapat dihubungkan pada bus I2C adalah 128 buah prosesor.

Berikut ini contoh cara menghubungkan 2 buah Arduino dengan protokol I2C.

Arduino UNO Master Slave I2C
Arduino UNO Master Slave I2C

Tutorialnya dapat diikuti di https://www.arduino.cc/en/Tutorial/MasterWriter

Komunikasi SPI (Serial Peripheral Interface)

Pada komunikasi ini digunakan protokl SPI. Pin yang dipakai adalah SCK, MOSI, MISO dan SS.

Daftar pin yang dipakai untuk SPI  pada Arduino adalah sebagai berikut:

Jalur SPI
Pin Arduino Pin ATmega328
MOSI 11 or ICSP-4 PB3
MISO 12 or ICSP-1 PB4
SCK 13 or ICSP-3 PB5
SS 10 PB2

Berikut cara menghubungkan 2 perangkat yang menggunakan protokol SPI

 

Arduino Dengan SPI
Arduino Dengan SPI

Tutorial menghubungkan 2 Arduino dengan SPI dapat diikuti di https://circuitdigest.com/microcontroller-projects/arduino-spi-communication-tutorial

Referensi

Tips Pengiriman Data Serial

Pengiriman data secara serial itu susah-susah gampang, terutama kalau pengiriman data tersebut mesti melalui daerah yang banyak noisenya.

Sumber permasalahan pengiriman data serial antara lain:

  • Noise yang masuk ke kabel data secara kapasitif maupun induktif
  • Perbedaan tegangan ground antara pengirim dan penerima, menyebabkan terjadinya ground loop. Perbedaan ini dapat terjadi karena memang sudah bawaan, karena ada perangkat tertentu, karena petir, dan juga karena ada induksi medan magnet ke dalam kabel komunikasi.

Berikut ini mekanisme ground loop. Medan magnet B (hijau) dari luar sistem menyebabkan arus noise I (merah). Arus noise ini akan menjadi sinyal tambahan bagi C2, sehingga sinyal yang diterima C2 tidak sama dengan sinyal dari C1, melainkan sudah ditambah dengan noise

 

Ground loop

Ground loop terjadi karena ada beda potensial antara ground di pengirim dan ground di penerima.

Masalah ground loop
Masalah ground loop

 

Berikut beberapa solusi:

#1 Menggunakan kabel fiber optik, karena kabel fiber optik tidak terganggu oleh radiasi gelombang radio, dan juga tidak terpengaruh perbedaan tegangan ground antara pengirim maupun penerima

#2 Menggunakan kabel coaxial, karena kabel koaksial kebal terhadap gangguan radiasi. Dengan catatan kabel yang digunakan berkualitas baik, seperti misalnya menggunakan kabel koaksial yang menggunakan shield berupa tabung logam. Contoh di artikel https://elektrologi.iptek.web.id/perbandingan-kabel-50-ohm-coaxial-di-pasaran/

#3 Menggunakan pengiriman sinyal secara differensial, misalnya dengan protokol RS-485 dengan kabel twisted pair . Ada yang tanpa pelindung unshielded twisted pair (UTP), dan ada juga yang lebih baik shielded twister pair (STP). Kabel jenis ini umum dipakai untuk kabel ethernet, sehingga mudah dicari di pasaran. Sinyal pada kabel ini dikirim secara differensial, salah satu protokol yang umum dipakai adalah RS-422/RS-485, yang komponennya mudah dicari di pasaran.

#4 Menggunakan kabel triaxial, kabel ini mirip dengan coaxial, hanya saja menggunakan 2 lapis shield. Sulit dicari di pasaran Indonesia karena jarang yang pakai dan cukup mahal, serta konektornya khusus.

#5 Menggunakan filter analog untuk menghilangkan sinyal noise yang tidak diinginkan. Namun teknik ini hanya dapat dilakukan jika frekuensi noise berbeda dengan frekuensi sinyal kerja yang diinginkan.

Solusi ground loop dengan coaxial dan optocouplerMisalkan kecepatan transfer 2 Mbps dengan baseband tanpa modulasi, maka menurut teorema Nyquist minimal bandwidth yang diperlukan adalah 4 MHz, jadi sinyal dari 0Hz sampai 4Hz harus dapat lewat, jadi filter harus di atas 4 MHz. Masalah timbul jika ternyata noise yang terjadi ada di frekuensi 0 ~ 4 MHz. Hal ini dapat dicek menggunakan osiloskop, dengan mengamati bentuk sinyal yang timbul, apakah masih dalam rentang 0 ~ 4 MHz.

Filter low pass 4.5 MHz
Filter low pass 4.5 MHz

Jika frekuensi noise ada di 0 ~ 4 MHz, maka filter low pass 4.5 MHz tidak bermanfaat mengurangi noise.

 

#6 Menggunakan optocoupler untuk memotong ground loop. Sinyal dari optocoupler dikirim dengan kabel coaxial supaya tidak terganggu noise. Pada contoh di bawah ini, optocoupler dipasang di sisi pengirim, namun dapat juga dipasang di sisi penerima.

 

Solusi ground loop dengan coaxial dan optocoupler

Berikut ini teknik yang lebih kompleks, gabungan RS-485 , shielded cable dan optocoupler, seperti dijelaskan di dokumen The RS-485 Design Guide

Isolation transceiver
Isolation transceiver

#7 Memperkuat tegangan sinyal yang dikirim, dengan harapan memperbaiki Signal to Noise ratio (S/N)

#8 Memperkuat arus sinyal yang dikirim dengan mengurangi impedansi output supaya noise tidak mudah masuk.

#9 Menggunakan terminasi untuk menghindari pemantulan sinyal. Terminasi terutama diperlukan jika panjang kabel sudah lebih atau mendekati panjang gelombang pada frekuensi kerja sinyal.

#10 Menggunakan kabel yang redaman lebih kecil, sehingga sinyal yang sampai di penerima masih cukup kuat. Cuma kabel yang redaman kecil ini secara fisik lebih besar dan lebih mahal harganya.

Solusi di atas adalah solusi-solusi dari layer hardware, selain itu dapat juga dilakukan pengolahan sinyal digital.

#10 Menggunakan teknik error detection, seperti parity bit, checksum, cyclic redundancy check (CRC). Teknik ini dapat mendeteksi kesalahan, namun tidak dapat memperbaiki sinyal yang rusak.

#11 Menggunakan teknik error correction, seperti Reed Solomon, Viterbi

Referensi