아두이노 RS485

이 튜토리얼에서는 아두이노를 이용한 RS485 통신의 구현 방법을 탐구할 예정입니다. 특히, 다음과 같은 측면들을 자세히 다룰 예정입니다:

튜토리얼은 하드웨어 SerialSoftwareSerial 모두에 대한 지시도 제공합니다.

준비물

1×아두이노 우노 R3 쿠팡 | 아마존
1×USB 2.0 타입 A-to-B 케이블 (USB-A PC용) 쿠팡 | 아마존
1×USB 2.0 타입 C-to-B 케이블 (USB-C PC용) 아마존
1×TTL-RS485 변환 모듈 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(옵션) USB-RS485 변환기 쿠팡 | 아마존
1×(옵션) USB to RS485 Cable 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

TTL에서 RS485 모듈에 관하여

아두이노에서 Serial.print(), Serial.read(), Serial.write() 같은 함수를 통한 직렬 통신을 사용할 때, 아두이노는 TX 핀을 통해 데이터를 전송하고 RX 핀을 통해 데이터를 수신합니다. 이 핀들은 TTL 레벨에서 작동합니다. 즉, 그들이 처리하는 신호는 제한된 범위를 가집니다. 따라서 더 긴 거리에 걸친 직렬 통신을 위해서는 TTL 신호를 RS232, RS485, 또는 RS422 신호 표준으로 변환하는 것이 필요합니다.

이 튜토리얼에서 우리는 TTL에서 RS485 모듈을 사용하여 아두이노와 RS485(또한 RS-485로 알려짐)의 활용에 대해 자세히 알아볼 것입니다. 이 모듈은 TTL 신호를 RS485 신호로 변환하고 그 반대의 과정을 용이하게 합니다.

핀배열

RS485에서 TTL 모듈은 두 개의 인터페이스를 가지고 있습니다:

  • TTL 인터페이스(Arduino에 연결됨)에는 4개의 핀이 포함되어 있습니다.
    • VCC 핀: 전원 핀, VCC(5V 또는 3.3V)에 연결해야 함
    • GND 핀: 전원 핀, GND(0V)에 연결해야 함
    • RXD 핀: 데이터 핀, Arduino의 TX 핀에 연결해야 함
    • TXD 핀: 데이터 핀, Arduino의 RX 핀에 연결해야 함
  • RS485 인터페이스는 다음 핀으로 구성됩니다:
    • D+ (A 또는 TR+) 핀: 이 핀은 데이터 통신을 용이하게 합니다.
    • D- (B 또는 TR-) 핀: 이 핀은 데이터 전송을 위해 사용됩니다.
    • GND 핀: 선택 사항이지만, 소음 간섭을 줄이고 최적의 성능을 보장하기 위해 이 핀을 포함하는 것이 강력히 권장됩니다.
    rs-485 module 사용법 핀아웃
    image source: diyables.io

선연결

하드웨어 시리얼을 사용하는 경우의 배선 다이어그램

아두이노 ttl to rs485 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

소프트웨어 시리얼을 사용하는 경우의 배선도

아두이노 rs-485 to ttl 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

아두이노를 RS485 모듈 사용하도록 프로그래밍하는 방법

시리얼 인터페이스를 초기화합니다:

Serial.begin(9600);

SoftwareSerial을 사용하려면 라이브러리를 포함시키고 SoftwareSerial 객체를 선언해야 합니다.

#include <SoftwareSerial.h> // SoftwareSerial 객체와 그들의 핀을 정의합니다. SoftwareSerial rs485(6, 7); // RX: 6, TX: 7

RS485에서 오는 데이터를 읽으려면 다음 함수들을 사용할 수 있습니다:

RS485에 데이터를 쓰려면 다음 함수들을 사용할 수 있습니다:

그리고 RS485에서 사용할 수 있는 더 많은 함수들은 시리얼 참조에서 확인할 수 있습니다.

하드웨어 시리얼을 위한 아두이노 코드

/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-rs485 */ void setup() { // 통신 시작 및 보드 레이트 9600 설정 Serial.begin(9600); // 시리얼 포트가 초기화되는 것을 허용하기 위해 잠시 대기 delay(100); } void loop() { // 시리얼에 데이터가 있는지 체크 if (Serial.available()) { char data = Serial.read(); // 받은 문자 읽기 Serial.print(data); // 데이터를 보낸 곳으로 에코 백 } }

소프트웨어 시리얼을 위한 아두이노 코드

/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-rs485 */ #include <SoftwareSerial.h> // SoftwareSerial 객체와 그 핀을 정의한다 SoftwareSerial rs485(6, 7); // RX: 6, TX: 7 void setup() { // 통신을 시작하고, 보드 레이트는 9600으로 설정한다 rs485.begin(9600); // 시리얼 포트가 초기화될 시간을 주기 위해 잠시 기다린다 delay(100); } void loop() { // rs485에서 사용가능한 데이터가 있는지 확인한다 if (rs485.available()) { char data = rs485.read(); // 수신된 문자를 읽는다 rs485.print(data); // 데이터를 보낸 곳으로 에코백한다 } }

테스팅

다음 단계를 따라 PC에서 RS-485를 통해 Arduino로 데이터를 보내고 그 반대로 테스트를 실시할 수 있습니다:

아래와 같이 RS485-to-USB 케이블을 사용하여 아두이노를 PC에 연결하세요:

아두이노 rs485 to pc communication
  • Tera Term 또는 PuTTY와 같은 시리얼 터미널 프로그램을 설치하세요.
  • 시리얼 터미널 프로그램을 열고 시리얼 파라미터들(COM 포트, 보율...)을 구성하세요.
  • 시리얼 터미널에서 아두이노로 보내기 위해 일부 데이터를 입력하세요.
  • 성공적이라면, 시리얼 터미널에서 에코 데이터를 볼 수 있을 것입니다.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.