ESP8266 개발보드 NodeMCU(1.0)으로 레고 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
처음 코드를 다운로드 받고 난 뒤 위와같은 에러가 발생하여 계속 리셋이 되는 문제가 있었다.
내 경우 원인은 아두이노에서 처럼 GPIO핀번호를 1, 2 이런식으로 업로드 했기 때문이었다. nodemcu에서는 D1, D2와 같이 적어 주어야 했다. (보드의 핀번호와 esp8266의 실제 핀 번호가 일치하지 않음) 핀번호를 다시 제대로 작성 하니 문제가 해결 되었다.
실행 영상
반응형
'개발관련' 카테고리의 다른 글
우분투 18.04 에서 Docker 설치하기 (0) | 2021.08.19 |
---|---|
ROS - python3 및 파이토치 개발환경 구성하기 1. reinstall nvidia graphic driver & cuda (0) | 2021.07.01 |
GNSS 정리 및 조사 (0) | 2021.05.25 |
flutter 설치 (0) | 2021.01.28 |
wsl2 우분투 ros vscode 개발환경 세팅하기 (0) | 2021.01.23 |