- Perbedaan antara Komunikasi UART dan RS485
- Komponen Diperlukan
- Diagram Sirkuit untuk Komunikasi Kabel Jarak Jauh
- Modul Konverter MAX485 UART-RS485
- Kabel Ethernet CAT-6E
- Penjelasan Kode Arduino
- Kesimpulan
Kami telah menggunakan Papan Pengembangan Mikrokontroler seperti Arduino, Raspberry Pi, NodeMCU, ESP8266, MSP430, dll. Untuk waktu yang lama sekarang dalam proyek-proyek kecil kami di mana sebagian besar jarak waktu antara sensor dan papan tidak lebih dari beberapa sentimeter pada maks dan pada jarak ini, komunikasi antara modul sensor, relai, aktuator, dan pengontrol yang berbeda dapat dengan mudah dilakukan melalui kabel jumper sederhana tanpa kita khawatir tentang distorsi sinyal di media dan suara listrik yang merambat ke dalamnya. Tetapi jika Anda membangun sistem kontrol dengan papan pengembangan ini pada jarak lebih dari 10 hingga 15 meter, maka Anda harus mempertimbangkan kebisingan dan kekuatan sinyal karena jika Anda ingin sistem Anda bekerja dengan andal, maka Anda tidak dapat kehilangan data saat mentransfer.
Ada banyak jenis protokol komunikasi serial seperti I2C dan SPI yang dapat dengan mudah diimplementasikan dengan Arduino dan hari ini kita akan melihat protokol lain yang paling umum digunakan yang disebut RS485 yang sangat umum digunakan di lingkungan industri dengan kebisingan tinggi untuk mentransfer data. jarak yang jauh. Dalam tutorial ini, kita akan belajar tentang protokol komunikasi RS485 dan bagaimana menerapkannya dengan dua Arduino Nano yang kita miliki bersama kita dan bagaimana menggunakan Modul konversi MAX485 RS485 ke UART. Sebelumnya kami juga telah melakukan komunikasi MAX485 dengan Arduino dan juga Komunikasi MAX485 dengan Raspberry pi, Anda juga dapat memeriksanya jika tertarik.
Perbedaan antara Komunikasi UART dan RS485
Sebagian besar sensor berbiaya rendah dan modul lain seperti GPS, Bluetooth, RFID, ESP8266, dll. Yang biasa digunakan dengan Arduino, Raspberry Pi di pasaran menggunakan komunikasi berbasis UART TTL karena hanya membutuhkan 2 kabel TX (Transmitter) dan RX (Penerima). Ini bukan protokol Komunikasi standar, tetapi ini adalah sirkuit fisik yang dapat digunakan untuk mengirim dan menerima data serial dengan perangkat lain. Itu hanya dapat mengirim / menerima data secara serial, jadi pertama-tama mengubah data paralel menjadi data serial dan kemudian mentransmisikan datanya.
UART adalah perangkat transmisi Asynchronous sehingga tidak ada sinyal clock untuk menyinkronkan data antara kedua perangkat melainkan menggunakan bit start dan stop di awal dan akhir setiap paket data masing-masing untuk menandai ekstremitas data yang sedang ditransfer. Data yang dikirimkan UART diatur ke dalam paket-paket. Setiap paket berisi 1 bit awal, 5 hingga 9 bit data (tergantung pada UART), bit paritas opsional, dan 1 atau 2 bit stop. Ini didokumentasikan dengan sangat baik dan banyak digunakan dan juga memiliki bit paritas untuk memungkinkan pengecekan kesalahan. Tetapi ada beberapa batasan untuk itu karena tidak dapat mendukung banyak budak dan banyak tuan dan bingkai data maksimum dibatasi hingga 9 bit. Untuk transfer data, baud rate Master dan Slave harus antara 10% satu sama lain. Di bawah ini adalah contoh bagaimana karakter adalah pemancar melalui jalur data UART. Sinyal Tinggi dan Rendah diukur terhadap level GND sehingga menggeser level GND akan berdampak buruk pada transfer data.
Di sisi lain, RS485 lebih merupakan komunikasi berbasis industri yang dikembangkan untuk jaringan beberapa perangkat yang dapat digunakan dalam jarak jauh dan pada kecepatan yang lebih tinggi juga. Ini beroperasi pada metode pengukuran pensinyalan diferensial daripada pengukuran tegangan dengan pin GND. Sinyal RS485 mengambang dan setiap sinyal ditransmisikan melalui jalur Sig + dan jalur Sig.
Penerima RS485 membandingkan perbedaan tegangan antara kedua saluran, bukan tingkat tegangan absolut pada saluran sinyal. Ini berfungsi dengan baik dan mencegah adanya loop arde, sumber masalah komunikasi yang umum. Hasil terbaik dicapai jika Sig + dan Sig- lines dipelintir saat memutar meniadakan efek noise elektromagnetik yang diinduksi dalam kabel dan memberikan kekebalan yang jauh lebih baik terhadap noise yang memungkinkan RS485 mengirimkan data hingga jarak 1200m. Twisted pair juga memungkinkan kecepatan transmisi menjadi jauh lebih tinggi daripada yang dimungkinkan dengan kabel lurus. Pada jarak transmisi kecil, kecepatan hingga 35Mbps dapat direalisasikan dengan RS485 meskipun kecepatan transmisi akan berkurang seiring dengan jarak. Pada kecepatan transmisi 1200m, Anda hanya dapat menggunakan kecepatan transmisi 100kbps. Anda memerlukan kabel Ethernet khusus untuk mewujudkan protokol komunikasi ini. Ada banyak kategori kabel Ethernet yang dapat kita gunakan seperti CAT-4, CAT-5, CAT-5E, CAT-6, CAT-6A, dll. Dalam tutorial kita, kita akan menggunakan kabel CAT-6E yang memiliki 4 pasang kabel 24AWG dan dapat mendukung hingga 600MHz. Itu diakhiri di kedua ujungnya oleh konektor RJ45. Tingkat tegangan saluran tipikal dari driver saluran adalah minimal ± 1,5 V hingga maksimum sekitar ± 6 V. Sensitivitas masukan penerima adalah ± 200 mV. Kebisingan dalam kisaran ± 200 mV pada dasarnya diblokir karena peredam bising mode umum. Contoh bagaimana byte (0x3E) ditransfer melalui dua jalur Komunikasi RS485.
Komponen Diperlukan
- 2 × MAX485 Modul Konverter
- 2 × Arduino Nano
- 2 × 16 * 2 LCD alfanumerik
- Potensiometer Penghapus 2 × 10k
- Kabel Ethernet Cat-6E
- Breadboard
- Kabel Jumper
Diagram Sirkuit untuk Komunikasi Kabel Jarak Jauh
Gambar di bawah ini menunjukkan diagram sirkuit pemancar dan penerima untuk komunikasi kabel jarak jauh Arduino. Perhatikan bahwa sirkuit pemancar dan penerima terlihat identik, satu-satunya hal yang membedakan adalah kode yang tertulis di dalamnya. Juga untuk demonstrasi, kami menggunakan satu papan sebagai pemancar dan satu papan sebagai penerima, tetapi kami dapat dengan mudah memprogram papan untuk berfungsi baik sebagai pemancar dan penerima dengan pengaturan yang sama
Diagram koneksi untuk rangkaian di atas juga diberikan di bawah ini.
Seperti yang Anda lihat di atas, ada dua pasang sirkuit yang hampir identik dengan masing-masing memiliki Arduino nano, LCD Alfanumerik 16 * 2, dan IC konverter MAX485 UART ke RS485 yang terhubung ke setiap ujung kabel Ethernet Cat-6E melalui konektor RJ45. Kabel yang saya gunakan dalam tutorial ini panjangnya 25m. Kami akan mengirimkan beberapa data dari sisi pemancar melalui kabel dari Nano yang diubah menjadi sinyal RS485 melalui Modul MAX RS485 yang bekerja dalam Mode Master.
Di sisi penerima, modul konverter MAX485 bekerja sebagai Slave, dan mendengarkan transmisi dari Master, modul itu kembali mengubah Data RS485 yang diterimanya ke sinyal UART TTL 5V standar untuk dibaca oleh Nano penerima dan ditampilkan pada 16 * 2 LCD alfanumerik terhubung dengannya.
Modul Konverter MAX485 UART-RS485
Modul Konverter UART-RS485 ini memiliki chip MAX485 on-board yang merupakan transceiver berdaya rendah dan dengan laju perubahan tegangan terbatas yang digunakan untuk komunikasi RS-485. Ia bekerja pada catu daya + 5V tunggal dan arus pengenal 300 μA. Ia bekerja pada komunikasi half-duplex untuk mengimplementasikan fungsi mengubah level TTL menjadi level RS-485 yang berarti dapat mengirim atau menerima kapan saja, tidak keduanya, dapat mencapai kecepatan transmisi maksimum 2.5Mbps. Transceiver MAX485 menarik arus suplai antara 120μA dan 500μA dalam kondisi dibongkar atau terisi penuh ketika driver dinonaktifkan. Pengemudi dibatasi untuk arus hubung singkat dan keluaran penggerak dapat ditempatkan pada keadaan impedansi tinggi melalui rangkaian penghentian termal. Input penerima memiliki fitur gagal-aman yang menjamin output logika tinggi jika inputnya adalah sirkuit terbuka.Selain itu, ia memiliki kinerja anti-interferensi yang kuat. Ini juga memiliki LED onboard untuk menampilkan status chip saat ini, yaitu apakah chip tersebut diberi daya atau mentransmisikan atau menerima data sehingga lebih mudah untuk di-debug dan digunakan.
Diagram rangkaian yang diberikan di atas menjelaskan bagaimana IC MAX485 onboard dihubungkan ke berbagai komponen dan menyediakan header jarak standar 0,1 inci untuk digunakan dengan papan tempat memotong roti jika Anda mau.
Kabel Ethernet CAT-6E
Ketika kita memikirkan transfer data jarak jauh, kita langsung berpikir tentang menghubungkan ke internet melalui kabel Ethernet. Saat ini, kami kebanyakan menggunakan Wi-Fi untuk konektivitas internet tetapi sebelumnya kami menggunakan kabel Ethernet ke setiap komputer pribadi untuk menghubungkannya ke internet. Alasan utama di balik penggunaan Kabel Ethernet ini melalui kabel normal adalah karena kabel tersebut memberikan perlindungan yang jauh lebih baik terhadap derau yang merayap masuk dan distorsi sinyal pada jarak tinggi. Mereka memiliki Pelindung Jaket di atas lapisan isolasi untuk melindungi terhadap Interferensi Elektromagnetik dan juga setiap pasang kabel dipelintir bersama untuk mencegah pembentukan loop saat ini dan dengan demikian perlindungan yang jauh lebih baik terhadap kebisingan. Mereka sering diakhiri dengan konektor RJ45 8 pin di kedua ujungnya. Ada banyak kategori kabel Ethernet yang dapat kita gunakan seperti CAT-4, CAT-5,CAT-5E, CAT-6, CAT-6A, dll. Dalam tutorial kami, kami akan menggunakan kabel CAT-6E yang memiliki 4 pasang kabel 24AWG dan dapat mendukung hingga 600MHz.
Gambar menunjukkan bagaimana sepasang kabel dipelintir di dalam Lapisan Isolasi Kabel CAT-6E
Konektor RJ-45 Yang Dimaksudkan untuk Kabel Ethernet CAT-6E
Penjelasan Kode Arduino
Dalam proyek ini, kami menggunakan dua Arduino Nano, satu sebagai pemancar dan Satu sebagai penerima, masing-masing menggerakkan LCD Alfanumerik 16 * 2 untuk menampilkan hasilnya. Jadi pada kode Arduino kita akan fokus pada pengiriman data dan tampilan data yang dikirim atau diterima pada layar LCD.
Untuk Sisi Pemancar:
Kita mulai dengan memasukkan pustaka standar untuk menggerakkan LCD dan mendeklarasikan pin D8 Arduino Nano sebagai pin keluaran yang nantinya akan kita gunakan untuk menyatakan Modul MAX485 sebagai pemancar atau Penerima.
int enablePin = 8; int potval = 0; #include
Sekarang datang ke bagian penyiapan. Kami akan menarik pin pengaktifan tinggi untuk menempatkan modul MAX485 dalam mode pemancar. Karena ini adalah IC setengah dupleks sehingga tidak dapat mengirim dan menerima pada saat yang bersamaan. Kami juga akan menginisialisasi LCD di sini dan mencetak pesan selamat datang.
Serial.begin (9600); // inisialisasi serial pada baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Transmitter Nano"); penundaan (3000); lcd.clear ();
Sekarang di loop, kami menulis nilai integer yang terus meningkat pada baris Serial yang kemudian ditransmisikan ke nano lainnya. Nilai ini juga dicetak pada LCD untuk tampilan dan debugging.
Serial.print ("Nilai Terkirim ="); Serial.println (potval); // Serial Write POTval ke RS-485 Bus lcd.setCursor (0,0); lcd.print ("Nilai Terkirim"); lcd.setCursor (0,1); lcd.print (potval); penundaan (1000); lcd.clear (); potval + = 1;
Sisi Penerima:
Di sini sekali lagi, kita mulai dengan memasukkan pustaka standar untuk menggerakkan LCD dan menyatakan pin D8 Arduino Nano sebagai pin keluaran yang nantinya akan kita gunakan untuk menyatakan Modul MAX485 sebagai pemancar atau Penerima.
int enablePin = 8; #include
Sekarang datang ke bagian penyiapan. Kami akan menarik pin pengaktifan tinggi untuk menempatkan modul MAX485 dalam mode penerima. Karena ini adalah IC setengah dupleks sehingga tidak dapat mengirim dan menerima pada saat yang bersamaan. Kami juga akan menginisialisasi LCD di sini dan mencetak pesan selamat datang.
Serial.begin (9600); // inisialisasi serial pada baudrate 9600: pinMode (enablePin, OUTPUT); lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("Nano Penerima"); penundaan (3000); digitalWrite (enablePin, LOW); // (Pin 8 selalu RENDAH untuk menerima nilai dari Master)
Sekarang di loop, kami memeriksa apakah ada yang tersedia di port serial dan kemudian membaca data dan karena data yang masuk adalah bilangan bulat, kami mengurai dan menampilkannya pada LCD yang terhubung.
int pwmval = Serial.parseInt (); // Terima nilai INTEGER dari Master melalui RS-485 Serial.print ("Saya mendapat nilai"); Serial.println (pwmval); lcd.setCursor (0,0); lcd.print ("Nilai Diterima"); lcd.setCursor (0,1); lcd.print (pwmval); penundaan (1000); lcd.clear ();
Kesimpulan
Setup pengujian yang kami gunakan untuk proyek ini dapat ditemukan di bawah.
Pekerjaan lengkap proyek ini dapat ditemukan dalam video yang ditautkan di bawah ini. Metode ini adalah salah satu metode sederhana dan mudah diterapkan untuk mentransfer data jarak jauh. Dalam proyek ini, kami hanya menggunakan baud rate 9600 yang berada di bawah kecepatan transfer maksimum yang dapat kami capai dengan Modul MAX-485 tetapi kecepatan ini cocok untuk sebagian besar modul sensor di luar sana dan kami tidak terlalu membutuhkannya. semua kecepatan maksimum saat bekerja dengan Arduino dan papan pengembangan lainnya kecuali Anda menggunakan kabel sebagai koneksi ethernet dan memerlukan semua bandwidth dan kecepatan transfer yang bisa Anda dapatkan. Bermain-main dengan kecepatan transfer Anda sendiri dan coba jenis kabel ethernet lainnya juga. Jika Anda memiliki pertanyaan, tinggalkan di bagian komentar di bawah atau gunakan forum kami dan saya akan mencoba menjawabnya sebaik mungkin. Sampai saat itu, adios!