- Arduino (30€
- Dos motores paso a paso con sus correpsondientes drivers ULN2003 (15,60€)
- Un microservo (5€)
- Una tarrina de cd's
- Una bola de desodorante
- Dos filtros de cafetera comprados en el chino (1,40 €)
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é |
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