Zoótropo con Arduino

15 de febrero de 2017 Algunas personas se preguntarán ¿qué es un zoótropo? Un zoótropo es un cilindro que incluye una serie de ranuras en la superficie. Cuando el cilindro gira, se puede ver a través de la ranura y el ojo humano percibe que las imágenes estáticas tienen movimiento. Las ranuras impiden que las imágenes del interior se mezclen y se vean borrosas, provocando así el efecto visual. Este proyecto consiste en la creación de imágenes en movimiento que tengan una secuencia de atrás hacia adelante, conectando el mecanismo a un motor mediante un puente H. Normalmente los zoótropos se giran con la mano, pero con sistemas de engranaje se facilita la tarea. Materiales 1 Arduino UNO. 1 placa de prueba Varios cables puente. 2 Pulsadores. 2 Resistencias de 10KΩ. 1 Potenciómetro. 1 circuito integrado L293D (esto es el Puente en H). 1 Batería de 9V. 1 Conector que nos permita enlazar la batería a la protoboard. 1 Motor DC. El Puente H es un elemento que podemos encontrar en forma de circuito integrado (CI). Los circuitos integrados impresos son componentes que pueden llegar a contener una gran cantidad de circuitos en una pastilla muy pequeña. Esto ayuda a simplificar circuitos mucho más complejos, ya que se puede reducir a un único componente que es fácilmente sustituible. En un circuito integrado, se puede acceder a sus circuitos internos mediante pines que hay a ambos lados del mismo. Diferentes CI tienen números de pines, y no todos ellos utilizan en todos los circuitos. Normalmente se hace referencia a los pines mediante un número en lugar de hacerlo por su función. Armar el circuito Se conectará la alimentación y la tierra de Arduino a la placa de prueba. Una de las patas de salida se conectará a tierra mediante una resistencia de 10KΩ y la otra patilla al pin número 5 de nuestro Arduino. Este pulsador será el que nos permita encender o apagar el motor. Se repetirá el paso anterior con el otro pulsador, pero esta vez, en lugar de conectarlo al pin 5, se conectará al pin número 4. Este pulsador permitirá controlar el sentido de giro del motor. A continuación se va a conectar el potenciómetro. De un lado se conectará a la alimentación de 5V proporcionada por Arduino y del otro lado, se unirá a tierra. La pata central se conectará al pin de entrada analógico 0 de Arduino. Conectado de esta forma, este potenciómetro permitirá controlar la velocidad del motor. El siguiente componente en color será el Puente en H. Se posicionará horizontalmente sobre la línea media de la placa e prueba dejando la muesca de dicho componente orientado hacia el lazo izquierdo, la mitad de la pata quedan en la mitad superior de la placa de prueba y la otra mitad en la inferior. Después se conectará el pin 1 del puente al pin digital del puente al pin digital 9 de Arduino. Este es el pin de activación del Puente en H. Cuando a través de dicho pin reciba 5V, el motor se encenderá y cuando reciba 0V, lo apagará. Este pun de Puente H se puede utilizar con la técnica PWM y ajustar de esta forma la velocidad del motor. Se conectará el pin 2 del puente con el pin digital 3 del Arduino y el pin 7 al pin digital 2. Estos pines serán los que se utilizaran para comunicarse en el Puente en H y decirle cual será el sentido del motor. Si el pin 3 tiene un nivel LOW y el pin 2 un nivel HIGH, el motor girará en sentido. Después se deberá alimentar al CI. Para lograrlo se conectará el pin 16 a la alimentación de 5V y los pines 4 y 5 a tierra. El motor se unirá a los pines 3 y 6 del puente en H, y que estos serán los encargados de encender o apagar el motor en función de las señales recibidas a través de los pines 2 y 7. El esquema se verá así: El código Se creará una constante para los pines de entradas y salidas.

const int controlPin1 = 2; const int controlPin2 = 3; const int enablePin = 9; const int directionSwitchPin = 4; const int onOffSwitchStateSwitchPin = 5; const int potPin = A0;

Se usará variables para almacenar el valor de las entradas. En el programa, se tendrá que detectar los cambios de estado que se produzcan en los pulsadores de una interacción del bucle a otra.

int onOffSwitchState = 0; int previousOnOffSwitchState = 0; int directionSwitchState = 0; int previousDirectionSwitchState = 0;

Se aplicarán dos variables para el motor: motorDirection nos indicará en qué dirección está girando el motor y, motorEnabled, nos dirá si el motor está girando o no.

int motorEnabled = 0; int motorSpeed = 0; int motorDirection = 1;

En la función setup(), se indicará que pines son de entrada y cuáles son los de salida.

void setup(){

    pinMode(directionSwitchPin, INPUT);     pinMode(onOffSwitchStateSwitchPin, INPUT);     pinMode(controlPin1, OUTPUT);    pinMode(controlPin2, OUTPUT);    pinMode(enablePin, OUTPUT);

Al pin de activación le daremos un valor LOW, de esta manera, empezaremos teniendo al motor parado.

    digitalWrite(enablePin, LOW);

}//Fin de la función setup.

 En la función loop(), leeremos el estado del pulsador de On/Off y lo guardaremos en la variable onOffSwitchState.

void loop(){

    onOffSwitchState = digitalRead(onOffSwitchStateSwitchPin);      delay(1);     directionSwitchState = digitalRead(directionSwitchPin);     motorSpeed = analogRead(potPin)/4;

if (onOffSwitchState != previousOnOffSwitchState) {   if (onOffSwitchState == HIGH) {     motorEnabled = !motorEnabled;

        }       }

Se comprobará si el pulsador de dirección está actualmente en una posición diferente a la anterior. Si es diferente, cambiaremos el valor de la variable de dirección del motor. Solo existen dos sentidos de giro del motor, por lo que la variable tendrá que alternar entre uno u otro. Una manera de conseguir esto es utilizando el operador de inversión de forma similar a esta: motorDirection = !motorDirection.

    if (directionSwitchState != previousDirectionSwitchState) {     if (directionSwitchState == HIGH) {      motorDirection = !motorDirection;

        }

    } if (motorEnabled == 1) {          analogWrite(enablePin, motorSpeed);

    }      else {       analogWrite(enablePin, 0);

    }

    previousDirectionSwitchState = directionSwitchState;     previousOnOffSwitchState = onOffSwitchState;

          }//Fin de la función loop.

Poner en marcha Se conectará el Arduino a la computadora y se enchufará la batería de 9V a la placa de prueba. Cuando se presione On/Off, el motor empezará a girar. Girando el potenciómetro, la velocidad del giro del motor aumentará o disminuirá en función del valor enviado por dicho potenciómetro.

Dejar un comentario

Por favor tenga en cuenta que los comentarios deben ser aprobados antes de ser publicados