Skip to content

Motor DC

javierre edited this page May 28, 2019 · 14 revisions

Uso de Motores DC

dcmotor

Mediante la Motor Shield

La placa Motor Shield de NodeMCU permite conectar motores de corriente continua directamente en los conectores azules de Motor A y Motor B.

Motor DC

El siguiente código nos permite probar el funcionamiento de los motores. Para ello consideramos que el motor izquierdo está conectado en Motor A y el derecho en Motor B (ver imagen superior). En función de si conectamos correctamente las bornas de cada motor (A+/A- y B+/B-), dicho motor irá hacia delante cuando realmente así lo deseamos. Si un motor gira en sentido contrario al deseado se puede modificar el código o intercambiar los cables conectados en los terminales azules de la placa. En el código forwardspeed y turnspeed fijan las velocidades lineal y de giro respectivamente (aunque se fijan las mismas velocidades para ambos motores pudiendo fijar por software velocidades distintas con analogWrite(RightMotorSpeed, forwardspeed); y analogWrite(LeftMotorSpeed, forwardspeed);).

#include <Arduino.h>

/*
 SOME DEFFINITIONS, JUST TO REMEMBER
 DO NOT MODIFICATE
    D (arduino) INTERNAL
    D0          16
    D1          5 // I2C Bus SCL (clock) // PWMA (Motor A Speed--> 0 to 1024)
    D2          4 // I2C Bus SDA (data)  // PWMA (Motor B Speed--> 0 to 1024))
    D3          0                        // DIRA (Motor A --> HIGH forward)
    D4          2 // Same as "LED_BUILTIN", but inverted logic (HIGH turns off) // DIRB (Motor B)
    D5          14 // SPI Bus SCK (clock)
    D6          12 // SPI Bus MISO
    D7          13 // SPI Bus MOSI
    D8          15 // SPI Bus SS (CS)
    D9          3 // RX0 (Serial console)
    D10         1 // TX0 (Serial console)
*/



#define RightMotorSpeed 4 // POWERB
#define RightMotorDir 2   // DIRB
#define LeftMotorSpeed 5  // POWERA
#define LeftMotorDir 0    // DIRA

#define turnspeed  800 //0--> 1024
#define forwardspeed 800 //0 --> 1024


void halt()
{
 digitalWrite(RightMotorSpeed, LOW);
 digitalWrite(LeftMotorSpeed, LOW);
 analogWrite(RightMotorSpeed, 0);
 analogWrite(LeftMotorSpeed, 0);
}

void forward()
{
 Serial.println("forward");
 digitalWrite(RightMotorDir, LOW);
 digitalWrite(LeftMotorDir, HIGH);
 analogWrite(RightMotorSpeed, forwardspeed);
 analogWrite(LeftMotorSpeed, forwardspeed);
}

void reverse()
{
 Serial.println("reverse");
 digitalWrite(RightMotorDir, HIGH);
 digitalWrite(LeftMotorDir, LOW);
 analogWrite(RightMotorSpeed, forwardspeed);
 analogWrite(LeftMotorSpeed, forwardspeed);
}

void right()
{
 Serial.println("right");
 digitalWrite(RightMotorDir, HIGH);
 digitalWrite(LeftMotorDir, HIGH);
 analogWrite(RightMotorSpeed, turnspeed);
 analogWrite(LeftMotorSpeed, turnspeed);
}

void left()
{
 Serial.println("left");
 digitalWrite(RightMotorDir, LOW);
 digitalWrite(LeftMotorDir, LOW);
 analogWrite(RightMotorSpeed, turnspeed);
 analogWrite(LeftMotorSpeed, turnspeed);
}



void setup() {

  Serial.begin (9600);

  pinMode(RightMotorSpeed, OUTPUT);
  pinMode(RightMotorDir, OUTPUT);
  pinMode(LeftMotorSpeed, OUTPUT);
  pinMode(LeftMotorDir, OUTPUT);

 
}

void loop() {
 
    forward();
    //right();
    //left();
    //reverse();
}

Mediante el Puente doble H L298N

L298N

L298N Wiring

Clone this wiki locally