Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Página a revisar.

Capítulo 7: Moviendo cosas

Motores DC

Es común encontrar este tipo de motor en juguetes y dispositivos que no necesitan gran precisión en ángulo o velocidad. Un motor DC (o de "Continua") gira libremente al aplicarle corriente y, si bien es difícil controlar su velocidad y posición, con algo de circuitería extra se puede mejorar su precisión. La ventaja de un motor DC es su coste, por lo que se usan frecuentemente en aparatos electrónicos móviles baratos. Hackear un motor DC es bastante sencillo puesto que sólo consta de dos conectores. Otra ventaja de los motores DC es que algunos de ellos se pueden alimentar con menos de 2.5V.

El ejemplo siguiente muestra como usar un motor DC pequeño del tipo vibrador. En este caso puede bastar con la corriente propocionada por un pin digital de Arduino, pero con otros motores DC necesitarás de un transistor y una fuente de alimentación externa. Para coser un mini vibrador, comienza por unirlo con pegamento a un trozo de tela. También puedes coser sobre él usando hilo normal, si bien esto puede resultar complicado al ser la mayor parte de los vibradores de forma cilíndrica. Una vez se encuentre el vibrador posicionado, pela los cables y cose los contactos metálicos con hilo conductor. Ahora cose los dos cables, uno rojo y otro negro, a la tela y asegurate que cada uno de ellos va a uno de los dos terminales del vibrador. Como se trata de un motor DC, no importa que cable conectes a que terminal, ni la forma en la que lo alimentes. La diferencia es que girará en un sentido u otro según lo conectes. Ahora que ya tienes todo en su sitio, introduce el siguiente programa:

int motorPin = 5;

void setup(){
        pinMode(motorPin, OUTPUT);
}
void loop(){
        digitalWrite(motorPin, HIGH);
        delay(1000);
        digitalWrite(motorPin, LOW);
        delay(1000);
}

Este es un programa simple para encender el vibrador por un segundo y apagarlo por un segundo. Es también posible modificar la velocidad de vibración haciendo uso de PWM (modulación por ancho de pulsos):

int motorPin = 5;
        /* connecta tu motor al pin 5 PWM */

void setup(){
        /* nada pasa en el setup */
}

void loop(){
        for(int i = 0; i <= 255; i++){
        /* incrementa una unidad, mientras sea menor de 255 */
        analogWrite(motorPin,i);
        /* modifica la velocidad de vibracion con i */
        delay(30);
        /* haz una pequeña pausa para percibir el cambio */
}

for(int i = 255; i >= 0; i--){
        /* mientras i sea mayor de 0, decrementa una unidad */
        analogWrite(motorPin,i);
        /* modifica la velocidad de vibracion con i */
        delay(30);
        /* haz una pequeña pausa para percibir el cambio */
}
}

El ejemplo anterior incrementará la velocidad del vibrador hasta el máximo para retornar luego al mínimo.

Servo motores

Existed dos tipos de servo motores: normales y de giro continuo. Los servos normales se controlan con PWM y giran a una posición fija dependiendo en el ancho de pulso. Están limitados en movimiento a un rango entre 0 y 180 grados. Los servos de giro continuo se mantienen girando mientras que reciban pulsos PWM. Los más comunes, fabricados por Parallax, giran en una dirección cuando se les proporcionan pulsos por encima de 1500 microsegundos de ancho y en la contraria al darles un ancho menor al citado.

Dependiendo del tipo de proyecto que realices tendrás que usar tu imaginación para ocultar un servo motor. En el ejemplo siguiente mostraremos sólo como controlar el motor, puesto que no hay un método generalizado para utilizar servos con textiles. Es posible extender la longitud de los cables del servo hasta Arduino usando hilo conductor.

El primer ejemplo es un programa simple que ilustra como hacer rotar a un servo de giro continuo adelante y atrás:

int motorPin = 4;
        /* pin digital para el servo */

void setup(){
        pinMode(motorPin,OUTPUT);
        /* declara el pin digital como salida */
}

void loop(){
        for(int i = 0; i < 100; i++);{
        /* repite 100 veces para que veamos al servo moverse */
        digitalWrite(motorPin,HIGH);
        delayMicroseconds(1850);
        /* el delay aqui mostrado establece un ancho de pulso */
        digitalWrite(motorPin,LOW);
        delayMicroseconds(1850);
}

for(int j = 0; j < 100; j++);{
        /* repite 100 veces para que veamos al servo moverse */
        digitalWrite(motorPin,HIGH);
        delayMicroseconds(1250);
        /* el delay aqui mostrado establece un ancho de pulso */
        digitalWrite(motorPin,LOW);
        delayMicroseconds(1250);
}
}

Este programa hará que el servo de rotación continua gire 100 pasos en una dirección y 100 en la contraria. Una vez hayas subido el código a tu placa Arduino, conecta el motor tal y como se muestra en la siguiente ilustración.