Motor de continua o DC:

Como un tipo de motor electrico, convierte energía eléctrica en energía mecánica.

(Existen tres tipos de motor: Motores de continua DC, servomotores, y motores paso a paso.)

Su modo de funcionamiento es el siguiente, tienen dos terminales, y cuando se aplica corriente a un terminal y el otro se pone a tierra, el motor gira en una dirección. Si se intercambia la conexión de los terminales, el motor gira en sentido opuesto. Es decir, si cambiamos la polaridad de los terminales, se cambia la direccion de giro del motor. La velocidad de un motor de continua es proporcional al voltage suministrado.

Ejemplo1:

A continuación se va a demostrar el uso de la salida analógica PWM en Arduino, controlando la velocidad de un motor, desde su valor mínimo hasta su valor máximo y viceversa.

// Fading Motor

// by BARRAGAN <http://people.interaction-ivrea.it/h.barragan>

int value = 0; // variable to keep the actual value int

motorpin = 0; // motor connected to analog pin 9

void setup() {

  // nothing for setup 

}

void loop() {

  for(value = 0 ; value <= 255; value+=5) // fade in (from min to max) 
  { 
    analogWrite(mootorpin, value);           // sets the value (range from 0 to 255) 
    delay(30);                    // waits for 30 milli seconds to see the dimming effect 
  } 
  for(value = 255; value >=0; value-=5)   // fade out (from max to min) 
  { 
    analogWrite(mootrpin, value); 
    delay(30); 
  }  

}

Ejemplos con L293D:

Si queremos controlar de forma simultánea la velocidad y dirección de un motor, los Motores no se pueden conectar directamente a la tarjeta Arduino, necesitamos un interfaz con un circuito de control o driver para el motor. En nuestros ejemplos utilizaremos el integrado L293D.

Ejemplo1:

En un primer lugar sólo vamos a demostrar el control de la velocidad de un motor de continua a través del integrado L293D. Para ello fijamos los pines de control de dirección a 5v y 0v,de forma que sólo girará en un sentido. Si queremos cambiar el sentido, sólo será necesario cambiar dicha polarización.

// Driving a DC Motor // by BARRAGAN <http://people.interaction-ivrea.it/h.barragan>

int motorpin = 0; // L293D Pin En1 connected to pin PWM 0 (on-board LED)

void setup() { }

void loop() {

  analogWrite(motorpin, 125);  // turn ON the Motor at medium speed 
  delay(100);                  // wait 100ms for next reading 

}

Ejemplo2:

Vamos a demostrar el control simultáneo de la velocidad y del sentido de un motor de continua.

El ejemplo está basado en el ejercicio de variación de la intensidad de Luz de un Led. (Enlace)

    !OJO probar en Arduino con un sólo motor

/* PWM Motor * by DojoCorp <http://www.0j0.org> * * Demonstrates the use of analog output pins (PWM) * controlling a motor. * * Description of the pinout used by the motor control board: * - pwm pin 1 controls the speed on the A side of the H bridge * - pwm pin 2 controls the speed on the B side of the H bridge * - digital pin 8 controls the direction for motor B * - digital pin 9 controls the direction for motor A * * Created 19 March 2005 */

int value = 0; // variable to keep the actual value

int pwmpinA = 1; // motor A connected to analog pin 1

int pwmpinB = 2; // motor B connected to analog pin 2

int dirpinA = 9; // motor A direction pin

int dirpinB = 8; // motor B direction pin

boolean directionA = true; // toggling direction for motor A

boolean directionB = true; // toggling direction for motor B

void setup() {

   // nothing for setup 

} void loop() {

   if (directionB) {
      digitalWrite(dirpinB,HIGH);
   } else {
      digitalWrite(dirpinB,LOW);
   }

   directionB = !directionB;

   // fade in (from min to max)   
   for(value = 0 ; value <= 255; value+=5) {
      analogWrite(pwmpinA, value);  // sets the value (range from 0 to 255)
      analogWrite(pwmpinB, value);  // sets the value (range from 0 to 255)
      delay(30);                    // waits for 30 milli seconds to see the dimming effect
   }

   // fade out (from max to min)
   for(value = 255; value >=0; value-=5) {
      analogWrite(pwmpinA, value);
      analogWrite(pwmpinB, value);
      delay(30);
   } 

}