Vamos a ver la visión general que nos dicta el camino a transitar, como siempre vamos a ir viendo juntos el funcionamiento y iremos cambiando a medida que haga falta.
Por el momento a futuro vamos a utilizar 2 motores paso a paso y los controlaremos con Arduino a través de el famoso Pololu A4988.
Mirá el video introductorio:
Vemos ya terminado el sistema del Eje Vertical. Sé que si querés realizar lo mismo vas a encontrarte con una situación diferente a la del video y tendrás que adaptarte a lo que tengas a mano para realizar tu propio diseño.
Lo que quiero marcar que diferencia más, diferencia menos con ganas y entusiasmo podemos hacer lo que nos propongamos, la imaginación es el limite.
Lo importante en este punto es chequear que la parte mecánica se funcional y cumpla con nuestros requisitos.
Para ello conectamos el motor al Pololu y al Arduino.
Hay cosas a tener en cuenta:
La alimentación del motor es a parte de la alimentación del A4988.
Recomiendo buscar como se utiliza y calibra el A4988 para evitar problemas.
Es altamente recomendable colocar el condensador que se ve en la imagen anterior para evitar quemar el A4988.
También deben tener ya identificados los pares de los bobinados del Motor para conectarlos en: 2B/2A , 1B/1B .
SI bien el MOTOR va con su propia alimentación y el A4988 se alimenta de los 5V del Arduino
DEBEMOS conectar entre si el NEGATIVO (GND) de uno con el NEGATIVO del otro para que funcione.
Antes de pasar al código tenemos que tener presente las características de nuestro motor para poder colocar la cantidad de pasos necesarios o podemos ir probando distintos valores hasta lograr que el motor gire correctamente.
Podemos dejar del código solo lo necesario para que gire en un sentido nada mas. A veces la acción de cambio de sentido trae problemas hasta encontrar el punto exacto, por eso dejé marcado en el archivo, en color azul la parte que se puede extraer que corresponde al cambio de giro.
DESCARGA: Archivo INO
Tenemos que tener en cuenta que existen dos tipos de interruptores, botones o switchs para nosotros.
Siempre teniendo en cuenda el estado natural, o sea sin presionar:
Si no permite la circulación entre dos puntos diremos que está abierto.
Si se permite la circulación eléctrica entre dos puntos diremos que está cerrado.
Esto se conoce como "normalmente abierto" o "normalmente cerrado" / "NA" o "NC" .
En mi caso los botones dan cero al implementar el código por lo que no veremos nada en el promp.
Si en tu caso ves que salen las leyendas UP o DOWN, sin presionar, es por que es el caso inverso tendrás que acomodar el código a este caso. Funciona igual pero tendrías que invertir los parámetros.
Conexión botones con Arduino:
Solo falta copiar y pegar el código, recordemos que el objetivo es solamente chequear que todo funcione correctamente, ni más ni menos, es muy básico.
#define buttonUp 5 //D5 pin digital
#define buttonDown 4 //D4 pin digital
boolean buttonStateUp;
boolean buttonStateDown;
void setup() {
pinMode(buttonUp,INPUT_PULLUP);
pinMode(buttonDown,INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
buttonStateUp = digitalRead(buttonUp);
if(buttonStateUp == 1){
Serial.println("UP");
}
delay(500);
buttonStateDown = digitalRead(buttonDown);
if(buttonStateDown == 1){
Serial.println("DOWN");
}
delay(500);
}
En las variables buttonStateUp y buttonStateDown guardamos el estado según corresponda si se presiona o no es decir 0 o 1.
En este capítulo hay que aclarar unas cuestiones para que no exista confusión.
En primer lugar van a ver que vamos a hablar del "sistema para tomar" una fotografía o imagen. Por el momento no está implementado, nos vamos a enfocar en el sistema de la mesa prioritariamente y vamos a suponer e imaginar que la toma de imagen está ahí.
Por otro lado, en este caso en específico, como no se va a dar el caso de que ambos motores estén en funcionamiento en simultáneo, voy a utilizar un 7812 para la alimentación de los motores.
La característica de los motores permiten que funcionen correctamente a 12V al amperaje límite del 7812.
Puede que no sea a sí en el caso personal de ustedes.
Por el momento alimento el Arduino a través de la PC, por comodidad, para ir cargando código y alimentar el Arduino, luego al finalizar se alimentará por otra vía.
Alimentar el Arduino externamente y mantener la conexión a la PC puede ocasionar problemas.
Por otro lado el A4988 tiene 3 pines por los cuales se pueden establecer la resolución de los pasos, estos son: MS1, MS2 , MS3.
Estos pines permanecen estado LOW al no estar conectados. Si SE CONECTAN A LOS 5V DEL ARDUINO PASAN A ESTADO ALTO.
En mi caso al conectar MS1 al positivo que hablamos, los motores funcionan correctamente. Esto es importante con estos motores de impresoras para lograr su funcionamiento correcto, deben testear distintas combinaciones y ver cuales de ellas es la que mejor prestación tiene.
Repasemos, L es LOW, cero voltios o el GND. Y H es High o 5 voltios.
Esto es lo mínimo que yo interpreto como necesario para el funcionamiento. Por supuesto que se puede ampliar con mas sensores para chequeo extras y de más.
Vamos a ver el contenido en general, obviaremos los posibles problemas y supondremos que todo sale bien.
Hay que ver que cantidad de giros son necesarios para cada motor.
Para el eje vertical hay que procurar una buena separación entre niveles y ver si el programa detecta correctamente ese separación.
Para el motor de la bandeja giratoria lo mismo, puede suceder que los pasos necesarios para una vuelta completa superen los 360º. Ya que cada motor por cada paso gira X cantidad de grados y a veces no es divisible por 360º.
También hay que tener en cuenta que si se utilizan reductores o un sistema de engranaje aparte de la velocidad se modifican la cantidad de grados.
Ya estamos finalizando lo propuesto. Y ahora vamos a cerrar con lo que nos quedó en el tintero que es la ejecución de un sistema para tomar las imágenes automáticamente lo que tiene todo el sentido y es fundamental para la identidad de la mesa para escaneo 3D.
Como aclaré anteriormente, para este proyecto voy a tomar las imágenes con un teléfono móvil con sistema Android.
Para lo que necesitaremos una ficha Plug de 4 segmentos, el transistor BC547, una resistencia de 380 H y lo necesario para realizar las conexiones.
El transistor va a hacer de interruptor y lo vamos a activar a través del Arduino, con el código necesario.
Del lado de los componentes conectamos la base del transistor a un pin digital libre del Arduino, en este caso D2.
Veamos el diagrama para realizar las conexiones.
En cuanto al código, agregamos unas líneas, nada extravagante.
Por un lado asignamos cual es el pin del Arduino para controlar el transistor. Dijimos D2. Asignado a la variable Transistor.
Seguido, dentro de void setup(), establecemos el pin D2 como salida, puesto que necesitamos una señal para estimular la base del transistor.
Ya dentro del void loop(), lo primero que hacemos es dejar en estado bajo la salida del pin (LOW), en este modo el transistor no se activa / no se toma fotografía.
Ya por último luego de cada vuelta, activamos D2 por 250 ms y luego la desactivamos.
Recuerden algunas cosas: cambiar la cantidad de vueltas en el código para que realmente complete un giro de 360 grados. En mi caso cambié en los dos if de la sección para la toma de imágenes:
if(contarvuelta < 11)
if(contarvuelta >= 11)
El tema que desde el principio chequear qué tipo de motores utilizan, voltaje, vueltas, pasos, grados por pasos; iniciar desde el primer video con los motores funcionando.
Jugar con los tiempos, que en el código es: delay(250); no todos los motores reaccionan bien a ciertos tiempos.
Por último, este disparador podría funcionar por ejemplo con una cámara web que cuente con un boton externo para tomar imágenes. Pero es sólo para aquellos que sepan identificar si es posible o no. Como vimos hay pulsadores cerrados y abiertos dependiendo de que traiga esa cámara web se podrá o no. Se puede utilizar un transistor PNP o NPN, pero como digo, es para personas con conocimiento del tema.
Descarga del Código