Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola a todos!
Soy bastante nuevo en esto de la electrónica y tengo que reconocer que todavía me peleo con cuestiones básicas. Sin embargo, hace unos meses descubrí el mundo de la robótica y me he propuesto construir un pequeño seguidor de líneas que me sirva como proyecto de aprendizaje. Parto de la base de que es fácil que cometa errores en el diseño, de modo que cualquier comentario y/o sugerencia será bienvenido.
Objetivos
En primer lugar, me he marcado unas líneas básicas a cumplir:
Utilizaré únicamente componentes "through hole" (aunque también me gustaría montar en un futuro una versión con SMT)
Micro ATmega328 montado en placa (tengo un par de Arduinos por aquí, de modo que ya tengo micro + programador...)
Ampliable (aunque no se muy bién a qué, pero obviamente dejaré abierta la posibilidad de usar las conexiones libres del micro)
Bien, creo que mi principal problema será el espacio. Teniendo en cuenta que me gustaría usar una única placa para alojar todos los componentes, la cosa parece muy difícil...
Una foto de la parte de abajo seria genial.
Pues la verdad es que por debajo la cosa parece un plato de espaguetis! (despues de muchas peleas soldando y desoldando)...
Cuando lo termine subo una.
De momento, dejo aquí un video para que se vea que está vivo!
PY_pQNVd67M
Controlador PID
Bueno, pues ya le he puesto tres CNY70 para comprobar un poco que tal reacciona el prototipo (en la versión final tengo intención de montar cinco). He conseguido que funcionen correctamente, he incluido una función básica de calibración, y quería poner un control sencillo para seguimiento de línea del tipo Proporcional Integral Derivativo.
Sin embargo, mi primera sorpresa es que no consigo llevar a cabo un primer cálculo básico de posición. Se trata de la fórmula
1000*value1 + 2000*value2 + ...
----------------------------------------
value1 + value2 + ...
En mi caso, y partiendo de una posición sobre la línea, tendríamos que:
1000*0 + 2000*995 + 3000*0
----------------------------------- = 2000
0 + 995 + 0
Sin embargo, curiosamente mi Arduino dice que no, que el resultado es "24"!
Aquí podéis ver una imagen con la definición de la fórmula y los resultados en el monitor serie: sensor2, sensor3, sensor4 y posición (estoy manejando nombres y "pesos" preparados para cuando monte cinco sensores, pero no afecta al problema en sí)
He probado definiendo "posición" como long sin que el resultado varíe.
Me podéis decir qué estoy haciendo mal?
Perdón, ya encontré el problema: a pesar de que definía "posición" como long, tenía los valores de los sensores como int, y la operación se truncaba...
Tema resuelto!
Bueno, pues aunque todavía me queda mucho que afinar, el prototipo ya sigue líneas (de momento con un algoritmo super simple). He incluido una fase previa de calibración (con giros de 360º) y parece que la cosa funciona razonablemente:
-Y10OlJbEqM
De momento me propongo empezar con el diseño de la PCB en Eagle. Ya os pediré ayuda porque estoy totalmente verde!
Filtro LC
Hola de nuevo.
Estoy embarcado con el diseño de la PCB en Eagle, y me gustaría ir ajustando algunos temas que pasé un poco por alto al montar el prototipo. Uno de ellos es un filtro LC que alguién me recomendó montar ente la salida del Step Up (7V) y la entrada del LDO (5V), teniendo en cuenta que esta parte del circuito alimenta los motores y estará expuesta a bastante ruido.
Lo cierto es que no sé dónde montarlo exactamente. Cuando lo conecté por primera vez a la entrada del LDO (dejando la conexión directa a 7V a los motores) el Micrel 29300 dejó de funcionarme, y tuve que montar en su lugar un LM2937. Ahora me planteaba montar el filtro en el canal de entrada a la alimentación de motores (ver esquema), pero lo cierto es que no sé si tiene alguna utilidad ahí o no.
Algún consejo?