산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Node.js로 제어하는 무선 로봇 카: 실시간 IoT 프로젝트 구현 가이드

부품 및 소모품

부품 수량 비고
아두이노 우노(UNO) 1
스파크펀 듀얼 H-브리지 모터 드라이버 L298 1
HC-05 블루투스 모듈 1
점퍼 와이어(일반) 1
9V 배터리 2
DC 모터 12V 2

프로젝트 소개

프로젝트 아이디어

Node.js는 실시간 애플리케이션에 가장 적합한 옵션 중 하나입니다. 이전에 소켓(Socket)을 이용한 실시간 앱을 다뤄본 경험을 살려, Node.js 서버를 이용한 IoT 프로젝트를 자습 목적으로 진행하게 되었습니다.

이 로버(Rover)는 블루투스를 통해 Node.js 서버와 통신하며, 프론트엔드에서는 소켓을 이용해 서버에 명령을 보냅니다.

프로젝트 목표

Node 서버와 하드웨어(로버) 간 무선 통신을 학습하고 구현하며, Node 서버가 제공하는 모바일 웹페이지에서 소켓을 통해 로버를 원격 제어하는 것입니다.

사전 지식

Node.js, 소켓 프로그래밍, L298 모터 드라이버 작동 원리에 대한 기초 지식이 필요합니다.

필요 물품

1단계: 로버 제작

Node.js로 제어하는 무선 로봇 카: 실시간 IoT 프로젝트 구현 가이드

로버 제작은 복잡하지 않습니다. 온라인에서 쉽게 구할 수 있는 '2륜 섀시 키트'를 구매하면 조립에 필요한 부품이 모두 들어 있습니다.

아두이노 우노와 L298 모터 드라이버는 로버 상단에 장착되며, 각각 별도의 9V 배터리로 전원을 공급받습니다.

아두이노 우노가 HC-05 블루투스 모듈에 전원을 공급하며, 이 모듈이 서버와 통신합니다.

회로도

Node.js로 제어하는 무선 로봇 카: 실시간 IoT 프로젝트 구현 가이드

위 회로도와 같이 L298 모터 드라이버는 9V 배터리로 구동되며, 두 모터 출력 단자는 모터 A, B에 연결됩니다. 모터에 극성이 없으므로 아무 단자나 연결해도 되지만, 두 모터가 같은 방향으로 회전하도록 해야 합니다. 5V 레귤레이터 점퍼는 제거하지 마세요.

주의: L298에 12V 이상을 공급하면 온보드 5V 전압 레귤레이터가 손상됩니다.

아두이노 우노도 9V 배터리로 구동합니다. 배터리 양극을 아두이노 Vin 핀에, 음극을 공통 그라운드에 연결합니다. 아두이노가 블루투스 모듈에 전원을 공급하므로, HC-05의 Vcc를 아두이노 5V에, GND를 그라운드에 연결합니다.

HC-05와 아두이노 간 시리얼 통신을 위해 HC-05의 TXD를 아두이노 RX에, RXD를 아두이노 TX에 연결합니다.

L298 제어를 위해 EN1, EN2 핀을 아두이노의 아무 PWM 핀에 연결하고, L298의 입력 핀 1, 2, 3, 4를 아두이노의 아무 디지털 핀에 연결합니다.

데이터 전송 흐름

Node.js로 제어하는 무선 로봇 카: 실시간 IoT 프로젝트 구현 가이드

위 다이어그램은 신호 전송 과정을 보여줍니다.

  1. 사용자가 Node 서버가 제공하는 웹페이지에 접속합니다. URL은 IP 주소와 포트 번호 조합(예: "192.XXX.XXX.129:8080")입니다.
  2. 웹페이지에서 버튼을 클릭하면 소켓 통신을 통해 서버가 해당 기능을 수행하도록 트리거합니다.
  3. HC-05 모듈과 블루투스로 연결된 Node 서버가 필요한 데이터를 HC-05로 전송합니다.
  4. HC-05가 시리얼 통신으로 아두이노 우노에 데이터를 전송합니다.
  5. 아두이노 우노가 L298 모듈을 제어합니다.

2단계: 서버 설정

서버용으로 Node.js를 설치해야 합니다. 안정 버전이면 아무거나 상관없으며, 저는 11.15 버전을 사용했습니다. 다음 패키지들을 설치해야 합니다:

참고: 'node-gyp' 설치는 까다로울 수 있습니다. 최신 Node 버전을 지원하지 않을 수 있으니 Node 11.15 버전 설치를 권장합니다.

이제 웹페이지에서 발생하는 이벤트를 리스닝해야 합니다. 웹페이지에서 컨트롤 버튼을 클릭하면 원하는 함수가 실행되도록 서버에 메시지를 보냅니다. 서버는 해당 메시지를 수신해 원하는 기능(블루투스로 데이터 전송)을 실행합니다.

'express'와 'EJS' 같은 패키지로 서버와 웹페이지를 만드세요. 원하는 컨트롤로 웹페이지를 디자인하고, 소켓 서버를 생성해 소켓 연결을 설정하세요. 관련 문서를 참조하세요.

블루투스 설정은 이 문서를 참조하세요. 컨트롤 버튼 클릭 시마다 HC-05 모듈로 메시지가 전송됩니다.

제가 만든 간단한 웹페이지입니다:

Node.js로 제어하는 무선 로봇 카: 실시간 IoT 프로젝트 구현 가이드

3단계: 아두이노 코드

블루투스가 시리얼 통신으로 아두이노 우노와 통신하므로, 명령을 '문자열'로 보내고 종료 문자를 추가해 문자열 수신 완료를 알립니다.

예: 전진 명령은 "forwardT"를 전송하고, 아두이노 쪽에서 'T' 문자를 만나면 시리얼 통신이 완료된 것으로 판단합니다.

수신된 문자열 명령에 따라 L298 드라이버를 제어해 전진, 후진, 좌회전, 우회전, 속도 조절 등을 수행합니다.

아두이노 코드는 첨부 파일을 참조하세요.

4단계: 최종 결과

개선 및 향후 계획

향후 음성 명령으로 로버 제어, 장애물 회피 기능 추가를 계획 중입니다. 이동 거리, 최고 속도, 평균 속도 등 통계 기록을 데이터베이스에 저장하는 기능도 추가할 예정입니다. 온도, 조도, 습도 등 다양한 센서를 추가해 주기적으로 측정하고 DB에 저장하는 기능도 구상 중입니다.

다음 버전

다음 프로젝트 "모바일로 음성 제어하는 로버"를 확인해 보세요.

코드

Node Rover 아두이노 코드 (Arduino)
const int en1 = 9;
const int en2 = 3;
const int inp1 = 2;
const int inp2 = 4;
const int inp3 = 7;
const int inp4 = 8;
char charRead;
String inputString = "";

void setup() {
  Serial.begin(9600);
  pinMode(en1, OUTPUT);
  pinMode(en2, OUTPUT);
  pinMode(inp1, OUTPUT);
  pinMode(inp2, OUTPUT);
  pinMode(inp3, OUTPUT);
  pinMode(inp4, OUTPUT);
}

void loop() {
  if (Serial.available()) {
    charRead = Serial.read();
    if (charRead != 'T') {
      inputString += charRead;
    } else {
      if (inputString == "forward") {
        digitalWrite(inp1, HIGH);
        digitalWrite(inp2, LOW);
        digitalWrite(inp3, HIGH);
        digitalWrite(inp4, LOW);
      } else if (inputString == "backward") {
        digitalWrite(inp1, LOW);
        digitalWrite(inp2, HIGH);
        digitalWrite(inp3, LOW);
        digitalWrite(inp4, HIGH);
      } else if (inputString == "fleft") {
        digitalWrite(inp1, HIGH);
        digitalWrite(inp2, LOW);
        digitalWrite(inp3, LOW);
        digitalWrite(inp4, LOW);
      } else if (inputString == "fright") {
        digitalWrite(inp1, LOW);
        digitalWrite(inp2, LOW);
        digitalWrite(inp3, HIGH);
        digitalWrite(inp4, LOW);
      } else if (inputString == "bleft") {
        digitalWrite(inp1, LOW);
        digitalWrite(inp2, LOW);
        digitalWrite(inp3, LOW);
        digitalWrite(inp4, HIGH);
      } else if (inputString == "bright") {
        digitalWrite(inp1, LOW);
        digitalWrite(inp2, HIGH);
        digitalWrite(inp3, LOW);
        digitalWrite(inp4, LOW);
      } else if (inputString == "break") {
        analogWrite(en1, 50);
        analogWrite(en2, 50);
        delay(550);
        digitalWrite(inp1, LOW);
        digitalWrite(inp2, LOW);
        digitalWrite(inp3, LOW);
        digitalWrite(inp4, LOW);
        analogWrite(en1, 150);
        analogWrite(en2, 150);
      } else if (inputString == "maxspeed") {
        analogWrite(en1, 250);
        analogWrite(en2, 250);
      } else if (inputString == "medspeed") {
        analogWrite(en1, 180);
        analogWrite(en2, 180);
      } else if (inputString == "lowspeed") {
        analogWrite(en1, 90);
        analogWrite(en2, 90);
      } else {
        digitalWrite(inp1, LOW);
        digitalWrite(inp2, LOW);
        digitalWrite(inp3, LOW);
        digitalWrite(inp4, LOW);
      }
      inputString = "";
    }
  }
}

회로도

Node.js로 제어하는 무선 로봇 카: 실시간 IoT 프로젝트 구현 가이드

Node.js로 제어하는 무선 로봇 카: 실시간 IoT 프로젝트 구현 가이드

제조공정

  1. 무선 IR 센서 구동 로봇 차량 제작 가이드
  2. 리소스 제약 마이크로컨트롤러를 위한 효율적인 웹 서버 솔루션
  3. 3달러 ESP8266에 TLS 웹 서버 30분 만에 배포하기
  4. 라즈베리 파이 4 웹 기반 실시간 온습도 모니터링
  5. 온도 제어 팬: 미디어 가구 냉각용 DIY 릴레이 시스템
  6. 4달러 태양광 정원등을 스마트 무선 센서 노드로: MSP430 + nRF24L01+ 정원 모니터링
  7. 라즈베리 파이 4를 웹 서버로 활용해 나만의 사이트 구축하기
  8. RC카를 블루투스 조종 차량으로 개조하기
  9. 낡은 RC카를 아두이노와 엑스박스 컨트롤러로 조종하는 차량으로 개조하기
  10. Qi 무선충전 Wi-Fi RC카 만들기: 아두이노 MKR1000 기반 무선 조종 자동차 키트