개요 (Overview)
MAX485를 사용한 시리얼 RS-485 컨버터 모듈입니다.
RS-485는 RS232, RS422에 비해서 많은 드라이버/리시버를 사용할 수 있으며, RS232가 통신 거리가 15m임에 비해, 거리는 1.2Km까지 전달할 수 있으며, 통신속도도 10Mb/s까지 지원합니다.
특히, 전송방식은 Half Duplex 방식이라서, 하나의 선을 사용한 다수의 모터 제어를 위한 로보티즈사의 다이나믹셀 등에 사용되고 있습니다.

스펙 (Specification)
구동 전압: 5V
사이즈: 44mm x 14mm
하드웨어 연결 (Wiring)
아두이노 우노를 사용하여 다수의 메가와 통신하는 방법

RS485를 사용하여 아두이노 메가와 프로미니와의 연결방법

마스터 소스코드
#include <SoftwareSerial.h>
#define SSerialRX 10 //RX핀
#define SSerialTX 11 //TX핀
#define SSerialTxControl 3 //TX컨트롤핀
#define RS485Transmit HIGH
#define RS485Receive LOW
#define Pin13LED 13
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX
int byteReceived;
int byteSend;
void setup()
{
Serial.begin(9600);
pinMode(Pin13LED, OUTPUT);
pinMode(SSerialTxControl, OUTPUT);
digitalWrite(SSerialTxControl, RS485Receive);
// Tx컨트롤을 이용해 수신받을지 발신할 지를 구분합니다.
// 수신모드 - LOW
// 발신모드 - HIGH
RS485Serial.begin(4800); // 보드레이트를 설정합니다.
}
void loop()
{
digitalWrite(Pin13LED, HIGH); // 상태 표시
if (Serial.available())
{
byteReceived = Serial.read();
digitalWrite(SSerialTxControl, RS485Transmit); // 송신모드
RS485Serial.write(byteReceived); // 데이터 전송
digitalWrite(Pin13LED, LOW);
delay(10);
digitalWrite(SSerialTxControl, RS485Receive); // 수신모드
}
if (RS485Serial.available()) //슬레이브쪽에서 수신된 데이터 처리
{
digitalWrite(Pin13LED, HIGH);
byteReceived = RS485Serial.read(); // 데이터 수신
Serial.write(byteReceived);
delay(10);
digitalWrite(Pin13LED, LOW);
}
}
슬레이브 소스코드
#include <SoftwareSerial.h>
#define SSerialRX 10 //Serial Receive pin
#define SSerialTX 11 //Serial Transmit pin
#define SSerialTxControl 3 //RS485 Direction control
#define RS485Transmit HIGH
#define RS485Receive LOW
#define Pin13LED 13
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX
int byteReceived;
int byteSend;
void setup() /****** SETUP: RUNS ONCE ******/
{
Serial.begin(9600);
pinMode(Pin13LED, OUTPUT);
pinMode(SSerialTxControl, OUTPUT);
digitalWrite(SSerialTxControl, RS485Receive); // Init Transceiver
RS485Serial.begin(4800); // set the data rate
}
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
if (RS485Serial.available()) //마스터에서 받은 데이터 처리
{
byteSend = RS485Serial.read(); // 읽은데이터 저장
digitalWrite(Pin13LED, HIGH); // 상태 표시
delay(10);
digitalWrite(Pin13LED, LOW);
digitalWrite(SSerialTxControl, RS485Transmit); // 송신모드
RS485Serial.write(byteSend); // 그대로 돌려준다.
delay(10);
digitalWrite(SSerialTxControl, RS485Receive); // 수신모드
}
}
참고 링크 (Links)
메카솔루션 커뮤니티 Mechasolution Blog는 여러가지 정보를 제공합니다.
상품이 장바구니에 담겼습니다.
바로 확인하시겠습니까?
상품이 찜 리스트에 담겼습니다.
바로 확인하시겠습니까?
Copyright © Mechasolution. All rights reserved.









