11. DC motor speed

Mål: Att kunna styra hastigheten på en likströmsmotor (t.ex. fläkt)

Teori: En likströmsmotor drar mera ström än vad en arduino klarar av. Därför använder vi  ett batteri och en transistor för att styra en större ström med hjälp av arduino pin 9.

Koppling: Koppla i batteriet till sist för att minimera risken för kortslutningar. Motståndet till basen är 1k. Kontrollera “flyback” diodens riktning.


Fritzing kopplingsschema

11 dc motor speed


Arduino kod 1 

Enkel kod för att sätta motorn eller av

void setup() 

  {
    pinMode(9, OUTPUT);     // ställ in pin9 som utgång  
  }

void loop() 
  {
    digitalWrite(9, HIGH);  // skriv 5V till pin9
    delay(3000);            // vänta 3 sekunder
    digitalWrite(9, LOW);   // skriv 0V till pin9
    delay(3000);            // vänta 3 sekunder
  }

Arduino kod 2

Ställ in motorn på 4 olika hastigheter

void setup() 

  {
    pinMode(9, OUTPUT);     // ställ in pin9 som utgång  
  }

void loop() 
  {
    analogWrite(9, 65);     // speed 1
    delay(3000);            
    analogWrite(9, 130);    // speed 2
    delay(3000);            
    analogWrite(9, 195);    // speed 3
    delay(3000);            
    analogWrite(9, 255);    // speed 4
    delay(3000);              
  }

Arduino kod 3

Ökar och sänker hastigheten steglöst


void setup() 
  {
    pinMode(9, OUTPUT);
  }

void loop() 
  {
    for(int i = 0; i <=255; i++)
      {
      analogWrite(9, i);
      delay(30);
      }
    
    delay(4000);
    
    for(int i = 255; i >=0; i--)
      {
      analogWrite(9, i);
      delay(30);
      }
    delay(4000);  
  }

Att styra 2 DC-motorer med hjälp av en motor driver.

Jag har använt mig av en HG7881 motor driver för att styra två likströmsmotorer. Både kopplingen och koden är relativt enkel. Bild saknas ännu. Här är koden.

 

const int M1 = 6;
const int M2 = 7;
const int N1 = 8;
const int N2 = 9;

void setup()
{
  Serial.begin(9600); 
  pinMode(M1, OUTPUT); 
  pinMode(M2, OUTPUT);
  pinMode(N1, OUTPUT);
  pinMode(N2, OUTPUT);
  
  digitalWrite(M1, LOW);
  digitalWrite(M2, LOW);
  digitalWrite(N1, LOW);
  digitalWrite(N2, LOW);
}

void loop(){

  while (Serial.available() == 0);  
  char val = Serial.read();

  if(val == '1')
  {
    Serial.print("Wheel M free");
    Serial.print("         ");
    Serial.println("Wheel N free");
    digitalWrite(M1, LOW);
    digitalWrite(M2, LOW);
    digitalWrite(N1, LOW);
    digitalWrite(N2, LOW);
  }

  else if(val == '2')
  {
   Serial.print("Wheel M forward");
    Serial.print("      ");
    Serial.println("Wheel N free");
    digitalWrite(M1, HIGH);
    digitalWrite(M2, LOW);
    digitalWrite(N1, LOW);
    digitalWrite(N2, LOW);
  }

    else if(val == '3')
  {
    Serial.print("Wheel M free");
    Serial.print("         ");
    Serial.println("Wheel N forward");
    digitalWrite(M1, LOW);
    digitalWrite(M2, LOW);
    digitalWrite(N1, HIGH);
    digitalWrite(N2, LOW);
  }

    else if(val == '4')
  {
    Serial.print("Wheel M reverse");
    Serial.print("      ");
    Serial.println("Wheel N free");
    digitalWrite(M1, LOW);
    digitalWrite(M2, HIGH);
    digitalWrite(N1, LOW);
    digitalWrite(N2, LOW);
  }
      else if(val == '5')
  {
    Serial.print("Wheel M free");
    Serial.print("         ");
    Serial.println("Wheel N reverse");
    digitalWrite(M1, LOW);
    digitalWrite(M2, LOW);
    digitalWrite(N1, LOW);
    digitalWrite(N2, HIGH);
  }

  else 
  {
    Serial.println("INVALID");   
  }
}

sdbsadfb——–

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s