domingo, 27 de noviembre de 2011

Tortuga logo. Primer intento.

Pues teniendo estos materiales:

Me he puesto a intentar hacer una tortuga de logo:

Los dos motores enganchados al arduino y funcionando

Instalando uno de los motores en la tarrina.

Una de las "ruedas", filtro de café
El resultado es más tipo Igor que tortuga como puee apreciarse en el vídeo:



Los elementos están mal ensamblados. Falta el microservo para subir y bajar el rotulador. El centro de gravedad está demasiado alto. Lo peor son las "ruedas". Tengo que encontrar otra solución. El material de los filtros de café es demasiado débil....

El código que está corriendo sólo lo hace ir hacia adelante, girar a un lado, hacia atrás y girar a otro add infinitum:

/* Stepper Bipolar Advanced
 * ------------------------
 *
 * Program to drive a stepper motor coming from a 5'25 disk drive
 * according to the documentation I found, this stepper: "[...] motor 
 * made by Copal Electronics, with 1.8 degrees per step and 96 ohms 
 * per winding, with center taps brought out to separate leads [...]"
 * [http://www.cs.uiowa.edu/~jones/step/example.html]
 *
 * It is a bipolar stepper motor with 5 wires:
 * 
 * - red: power connector, I have it at 5V and works fine
 * - orange and black: coil 1
 * - brown and yellow: coil 2
 *
 * (cleft) 2005 DojoDave for K3
 * http://www.0j0.org | http://arduino.berlios.de
 *
 * @author: David Cuartielles
 * @date: 20 Oct. 2005
 */

int motor1Pins[] = {10, 11, 12,13};
int motor2Pins[] = {5, 4, 3, 2};
int count = 0;
int count2 = 0;
int countCambio = 0;
int delayTime = 2;
//int val = 0;

void setup() {
  //pinMode(ledPin, OUTPUT);
  for (count = 0; count < 4; count++) {
    pinMode(motor1Pins[count], OUTPUT);
    pinMode(motor2Pins[count], OUTPUT);
  }
}

void moveForward() {
  if ((count2 == 0) || (count2 == 1)) {
    count2 = 16;
  }
  count2>>=1;
  for (count = 3; count >= 0; count--) {
    digitalWrite(motor1Pins[count], count2>>count&0x01);
    digitalWrite(motor2Pins[count], count2>>count&0x01);
  }
  delay(delayTime);
}

void moveBackward() {
  if ((count2 == 0) || (count2 == 1)) {
    count2 = 16;
  }
  count2>>=1;
  for (count = 3; count >= 0; count--) {
    digitalWrite(motor1Pins[3 - count], count2>>count&0x01);
    digitalWrite(motor2Pins[3 - count], count2>>count&0x01);
  }
  delay(delayTime);
}

void turnRight() {
  if ((count2 == 0) || (count2 == 1)) {
    count2 = 16;
  }
  count2>>=1;
  for (count = 3; count >= 0; count--) {
    digitalWrite(motor1Pins[count], count2>>count&0x01);
    digitalWrite(motor2Pins[3 - count], count2>>count&0x01);
  }
  delay(delayTime);
}

void turnLeft() {
  if ((count2 == 0) || (count2 == 1)) {
    count2 = 16;
  }
  count2>>=1;
  for (count = 3; count >= 0; count--) {
    digitalWrite(motor1Pins[3 - count], count2>>count&0x01);
    digitalWrite(motor2Pins[count], count2>>count&0x01);
  }
  delay(delayTime);
}



void loop() {

    if(countCambio <1000){
      moveForward();
    } else if (countCambio < 2000) {
      turnRight();
    }else if (countCambio < 3000) {
      moveBackward();
    }else if (countCambio < 4000) {
      turnLeft();
    } else {
     countCambio = 0;
    }
    countCambio++;
}

Si sigo con ello ya lo contaré.




No hay comentarios:

Publicar un comentario