Paso 6: Motores y fotocélulas
motores. Escriba el siguiente código, verificarlo y subirlo a la Arduino. Una vez hecho esto, trate de encubrir las fotocélulas uno a la vez.
• Cuando usted cubre la fotocélula para arriba, el motor izquierdo debe gire hacia la izquierda
y el motor adecuado debe girar a la derecha.
• Cuando usted cubre la fotocélula hacia abajo, el motor izquierdo debe gire hacia la derecha
y el motor adecuado debe girar hacia la izquierda.
• Cuando usted cubre la fotocélula izquierda, ambos motores deben girar
hacia la izquierda.
• Cuando usted cubre la fotocélula derecha, ambos motores deben girar en sentido horario.
/*
Uso de fotocélulas para dos motores paso a paso
con un Arduino a través EasyDriver v4.3 de Sparkfun
CC-GNU GPL por Ben Leduc-molinos y Dustyn Roberts
Creado: 2010.06
*/
Biblioteca de #include //import paso a paso
#define 200 pasos / / 360/1.8 (ángulo de paso) = 200 pasos/revolución
declarar objetos nuevos pasos de biblioteca paso a paso (uno por motor)
Right_motor paso a paso (pasos, 6, 7); 6 = DIR, 7 = PASO
Left_motor paso a paso (pasos, 11, 12); 11 = DIR, 12 = PASO
int distancia; hasta dónde deben llegar motores
int menor; variable para almacenar el valor más bajo de la fotocélula
int i; para bucle
variables para 4 valores de fotocélula
int photo_up;
int photo_down;
int photo_left;
int photo_right;
void setup() {}
Serial.Begin(9600); iniciar impresión serie para que podamos ver cosas
establecer velocidades de motor (en RPM)
right_motor.SETSPEED(200);
left_motor.SETSPEED(200);
}
void loop() {}
leer e imprimir todos los valores de fotocélula de pernos analógicos 0-3
photo_up = analogRead(0);
Serial.Print("up");
Serial.println(photo_up);
photo_down = analogRead(1);
Serial.Print("Down");
Serial.println(photo_down);
photo_left = analogRead(2);
Serial.Print("left");
Serial.println(photo_left);
photo_right = analogRead(3);
Serial.Print("Right");
Serial.println(photo_right);
Delay(1000); me da tiempo a leer en el monitor
almacenar valores de fotocélula en una matriz
int photoValues [] = {photo_up, photo_down, photo_left, photo_right};
menor = 9999; Ajuste este parámetro superiores a valores posibles de la fotocélula
lazo para encontrar el valor más bajo de la fotocélula
para (i = 0; i < 4; i ++) //4 = número de fotocélulas
{
Serial.println(photoValues[i]); Imprime la matriz de photoValue
asignar valor de fotocélula real a la variable "menor" si es menor
que lo "más bajo" se establece en (comienza a 9999)
Si (menor > = photoValues [i]) {}
menor = photoValues [i];
}
Imprima para confirmar que el valor más bajo está siendo seleccionado
Serial.Print("Lowest:");
Serial.println(Lowest);
Delay(1000); Espere un segundo antes de bucle por lo que podemos leer los valores
} //end para
distancia = más bajo; Set viaje distancia variable = valor menor
encontrar el sensor que coincidió con la marcha más baja, esa dirección
Vea a continuación lo que arriba, abajo, izquierda, derecha hacen funciones
Si (== menor {photoValues[0])}
(distancia);
}
else if (menor == {} photoValues[1])
abajo (distancia);
}
else if (menor == {} photoValues[2])
izquierda (distancia);
}
else if (menor == {} photoValues[3])
derecho (distancia);
}
} //end lazo
/*
Aquí están las funciones direccionales. Tamaño del lazo = distancia.
Números de paso positivo hacia la derecha, negativo hacia la izquierda
*/
void a (int distancia) {}
para (i = 0; i < distancia; i ++) {}
right_motor.Step(10);
left_motor.Step(-10);
}
}
void a (int distancia) {}
para (i = 0; i < distancia; i ++) {}
right_motor.Step(-10);
left_motor.Step(10);
}
}
vacío dejado (distancia int) {}
para (i = 0; i < distancia; i ++) {}
right_motor.Step(-10);
left_motor.Step(-10);
}
}
anular derecho (distancia int) {}
para (i = 0; i < distancia; i ++) {}
right_motor.Step(10);
left_motor.Step(10);
}
}