카테고리 없음

(아두이노) 로터리 엔코더와 모스펫 XY-MOS으로 DC 모터 돌리기

미친토끼 2025. 6. 10. 10:26

참고:

https://www.youtube.com/watch?v=lNbHm7EqfA0

 

RC카용 5V 모터를 모스펫에 연결하여 그 모스펜 signal(triger/pwm) 핀에 PWM 신호를 보내 모터 속도를 조절하는 코드다.

4핀을 모스펫에 납땜하여 GND는 아두이노의 GND에, trig/pwm은 6번에 연결했다. 5V 2A 아답터에서 출력한 전기를 V+, V- 터미널 단자에, 모터의 +, -를 OUT+, OUT-에 연결했다. 모터를 초기 가동하려면 PWM신호를 120정도를 줘야 하는데 이게 3.5V정도에 해당한다. 돌아다가다 멈추는 시점은 PWM 70정도 되는데, 관성 때문에 낮은 전압에도 돌아가지만, 처음에 멈춰 있을 때 이를 돌아가게 하는 데는 제법 큰 전기가 돌아간다.

4핀을 납땜했고, 그리고 밑에 2구짜리 터미널 단자를 납땜했다. 간격이 비좁아 4핀 납땜 옆에 터미널 단자를 납땜하기는 불가능하다.

 

아래는 모스펫으로 5V DC 모터를 돌리기는 기본 스케치다.

#define MOSFET    6

#define MIN_PWM   70
#define MAX_PWM   255

void setup() {
  Serial.begin(9600);
  //pinMode(MOSFET, OUTPUT);

}

void loop() {
  for (int i = MIN_PWM; i < MAX_PWM; i++) {
    analogWrite(MOSFET, i);
    Serial.println(i);
    delay(100);
  }
  delay(1000);
  for (int i = MAX_PWM; i >= MIN_PWM; i--) {
  analogWrite(MOSFET, i);
  Serial.println(i);

  delay(100);
  }
}

https://www.youtube.com/shorts/HGcZqPdVICo

여기에 로터리 엔코더를 달아서, 엔코더를 통해 모스펫에 PWM 신호를 보낼 수 있다. 그리하여 DC 모터 속도를 조절할 수 있다.

 

#define CLK 5 
#define DT  4
#define SW 3

#define MAX_PWM   255
#define MIN_PWM   100

#define MOSFET    6

int counter = MIN_PWM;
int lastCLK = HIGH;
int curCLK;

void setup() {
  Serial.begin(9600);
  pinMode(CLK, INPUT);
  pinMode(DT, INPUT);
  pinMode(SW, INPUT_PULLUP);
}

void loop() {
  curCLK = digitalRead(CLK);
  if (curCLK != lastCLK) {
    int dt = digitalRead(DT);
    if (dt != curCLK) {
      counter++;
      if (counter > MAX_PWM) counter = MAX_PWM;
    } else {
      counter--;
      if (counter < MIN_PWM) counter = MIN_PWM;
    }
    analogWrite(MOSFET, counter);
    Serial.println(counter);
    //Serial.print("\tdt = ");
    //Serial.print(dt);
    //Serial.print("\tcurCLK = ");
    //Serial.println(curCLK);
  }
  lastCLK = curCLK;

  if (digitalRead(SW) == LOW) {
    Serial.println("Button pressed!");
  }
}

https://www.youtube.com/shorts/Lix9lCk5m5k