개발관련

Esp8266 레고 NXT 모터 제어하기

Dol42 2021. 1. 29. 21:22

ESP8266 개발보드 NodeMCU(1.0)으로 레고 NXT 모터를 제어를 제어해 보았다. 

NXT 모터

내부에 엔코더가 내장되어 있고, 간단히 테스트 해볼 모터로 쓰기는 나쁘지 않은듯 하여 선택했다. 

 

NXT 모터 핀 

배선은 다음과 같다. 나는 기본적으로 있던 레고 선을 잘라 색상을 맞추어 헤더핀에 납땜을 진행했다. 

일단은 간단하게 M_0 핀과 M_1 핀만 사용하여 구동을 진행 해보았다. 

ESP8266에서 D0, D1 핀을 사용하여 모터의 방향을 제어하고, D2핀을 사용하여 PWM신호를 출력하도록 하였다. 

 

모터드라이브는 L298N 모듈을 사용했다. PWM제어를 위해 L298N 모듈의 EN1에 있는 점퍼를 제거 한 뒤,
NodeMCU의 D2에 연결하였고, EN1,EN2를 각각 D0, D1에 연결했다. 

배선도

 

소스코드

int en1 = D0;
int en2 = D1;
int pwm1 = D2;



void setup() {
  pinMode(en1, OUTPUT); // Initialize the pwm1 pin as an output
  pinMode(en2, OUTPUT); // Initialize the pwm2 pin as an output
  pinMode(pwm1, OUTPUT);
  Serial.println();
  Serial.println();
  Serial.begin(115200);
}

void loop() {
  Serial.println("cw fullpower");
  digitalWrite(en1, LOW);
  digitalWrite(en2, HIGH);
  analogWrite(pwm1, 1023);
  delay(500); // Wait for two seconds

  Serial.println("stop");
  digitalWrite(en1, LOW);
  digitalWrite(en2, LOW);
  analogWrite(pwm1, 0);
  delay(500); // Wait for two seconds

  Serial.println("ccw fullpower");
  digitalWrite(en1, HIGH);
  digitalWrite(en2, LOW);
  analogWrite(pwm1, 1023);
  delay(500); // Wait for two seconds


  Serial.println("stop");
  digitalWrite(en1, LOW);
  digitalWrite(en2, LOW);
  analogWrite(pwm1, 0);
  delay(500); // Wait for two seconds

  ////////////////////

  Serial.println("cw fullpower");
  digitalWrite(en1, LOW);
  digitalWrite(en2, HIGH);
  analogWrite(pwm1, 500);
  delay(500); // Wait for two seconds

  Serial.println("stop");
  digitalWrite(en1, HIGH);
  digitalWrite(en2, HIGH);
  analogWrite(pwm1, 1023);
  delay(500); // Wait for two seconds

  Serial.println("ccw fullpower");
  digitalWrite(en1, HIGH);
  digitalWrite(en2, LOW);
  analogWrite(pwm1, 500);
  delay(500); // Wait for two seconds

  Serial.println("stop");
  digitalWrite(en1, HIGH);
  digitalWrite(en2, HIGH);
  analogWrite(pwm1, 1023);
  delay(500); // Wait for two seconds

  for (int i = 200; i < 1024; i++) {
    digitalWrite(en1, LOW);
    digitalWrite(en2, HIGH);
    analogWrite(pwm1, i);
    delay(5);
  }

  Serial.println("stop");
  digitalWrite(en1, HIGH);
  digitalWrite(en2, HIGH);
  analogWrite(pwm1, 1023);
  delay(1000); // Wait for two seconds


  for (int i = 1024; i >= 200; i--) {
    digitalWrite(en1, LOW);
    digitalWrite(en2, HIGH);
    analogWrite(pwm1, i);
    delay(5);
  }

  Serial.println("stop");
  digitalWrite(en1, HIGH);
  digitalWrite(en2, HIGH);
  analogWrite(pwm1, 1023);
  delay(1000); // Wait for two seconds






}

 

rst cause:4 error

rst cause:4 에러

처음 코드를 다운로드 받고 난 뒤 위와같은 에러가 발생하여 계속 리셋이 되는 문제가 있었다. 

내 경우 원인은 아두이노에서 처럼 GPIO핀번호를 1, 2 이런식으로 업로드 했기 때문이었다. nodemcu에서는 D1, D2와 같이 적어 주어야 했다. (보드의 핀번호와 esp8266의 실제 핀 번호가 일치하지 않음) 핀번호를 다시 제대로 작성 하니 문제가 해결 되었다. 

 

실행 영상

 

반응형