El gusanito
Hace unos años me sentía frustrado por que personas menores que yo con mejor motricidad obtenían mejores resultados en el juego Slither.io pese a yo tener una mejor visión estratégica, fenómeno que tambien ocurre con UrbanTerror y con Fornite y me imagino que con cualquier otro video juego de tiempo real.
Con respecto a Urban Terror tengo una idea que en algún momento concretaré, pero relacionado a Slither.io pasé de la idea a la práctica y llegué bastante lejos, te resumo lo que hice antes:
El gusanito va hacia donde esté el cursor del mouse, lo cual a mi me complica pues tengo que ver el escenario y a la vez dónde está el cursor.
Slither.io |
Por la naturaleza de la interfaz, que viene a ser rotativa como el Gyruss, me parece que conviene usar un controlador de tipo Paddle y más o menos lo implementé con un encoder rotativo y una placa EDU-CIAA-NXP tal que se hace pasar por un mouse.
A medida que el encoder gira, el programa transforma en movimientos de mouse tal que hacen una circunferencia pero no terminé de hacer la matemática y algún otro problema tuve y le ganó otra prioridad y cayó en el olvido.
Todo eso está mucho más largo en:
El trabajo práctico
- Debe emplearse la placa NUCLEO
- Puede ser una aplicación diferente (no necesariamente domótica)
- Puede utilizar los sensores vistos o agregar los nuevos
- Debe usar al menos una entrada analógica
- Debe usar comunicación serie
- Realizar la temporización del sistema basada en interrupciones y uso de timers
La placa NUCLEO es la que estamos usando para todos los ejercicios
Los sensores vistos, al momento de escribir esto fueron botones, sensor de gas vía i2c, potenciómetro y sensor de temperatura vía entrada analógica y supongo que luego veremos teclado matricial y sensor de movimiento al menos.
La verdad es que aunque no trabajo de esto, ya tengo bastante experiencia y sólo el punto 6 me resulta un desafío, así que podía inventarme una aplicación boba que cumpliera para poder aprobar o buscarme algo más difícil para aprender y ahí recordé al gusanito, me aferré al segundo requerimiento y pensé en cómo rescatarlo para el trabajo práctico.
Una reflexión muy personal
Como alumno, uno puede estar cursando algo por el conocimiento o la certificación, esto último se traduce en la aprobación y si querés entrar en detalles, la nota. Yo soy partidario de cursar, hacer trabajos prácticos, laboratorios y rendir exámenes por el conocimiento y que la certificación sea un efecto colateral.
En esta materia en particular, la verdad verdad es que voy a profundizar el conocimiento, pues ya he tomado varios cursos que más o menos cubren lo mismo y he practicado mucho por mi cuenta. Aunque no me interesa mayormente, en términos objetivos el resultado más importante de esta cursada resulta ser la certificación.
Como docente, entiendo que distintas personas sepan más o menos del tema de antemano y tendría la tentación de pedirle a cada una más o menos según su condición. A mi y a los ingenieros electrónicos que asisten les pediría más que a los estudiantes de sistemas, que pueden estar en el horno por que todo es nuevo.
Y podría hacerlo en términos de acompañar su aprendizaje, pero no en términos de certificación, no le puedo pedir más a quien más sabe, pues estaría discriminando y o forzando mi visión sobre como debe ver la vida esa persona. De todos modos para otorgar la certificación lo que importa en última instancia es lo que la persona sabe, no si lo acquirió ahora o antes.
Entonces, si alguien ya sabe todo, para aprobar le pediría lo mismo que a quien entra sin saber nada. Digo "pediría" pues por más que soy docente aún no he logrado por falta de experiencia y agravado por lo remoto poder discernir claramente cuáles alumnos saben más que otros.
Ok, pero cuando se trata de mí, hace mucho que no soy mero alumno, acompaño al docente y soy docente de mi mismo, entonces, si tengo tiempo, debo elevar la vara, tal como hice con el trabajo práctico de la reciente materia Basic Digital Design,
Volviendo al trabajo práctico
Lo que me he propuesto es:
- Usar la placa NUCLEO (requerimiento 1).
- Un encoder rotativo para determinar el giro (requerimientos 3 y 6).
- Un potenciómetro para el radio de giro (requerimiento 4).
- Un potenciómetro opcional para la resolución (requerimiento 4).
- La conexión serie para implementar algún protocolo de mouse (requerimiento 5).
El requerimiento 2 más que un requerimiento es una libertad, lo cumple la aplicación misma.
Los problemas
Encoder rotativo
Lo del encoder rotativo ya lo había resuelto antes, tengo que ver si me sirve y quizás corregir. Tambien agregar los potenciómetros.
¿Qué es lo de la resolución? Si jugás un rato observarás que si ponés el cursor bien cerca del bicho a ojo diría que tenés como unos cinco grados de resolución, si lo ponés bien lejos, un grado. El problema es que el encoder rotativo que tengo es de unos 10 grados. Lo que puedo hacer es que no tenga, no sé como se dice, ¿la misma relación de giro? O sea, que esos 10 grados se traduzcan en un solo grado.
Lo puedo lograr por sofware, claro, o con mecánica, introduciendo un componente extra con un engranaje que haga la reducción. Comprenderás que esto está muy alejado de mi torpeza, no será así.
Para el trabajo práctico me quedaré con los 10 grados pero quizás agregue un potenciometro para cambiar la escala, veremos.
Radio de giro
Esto tiene que ver con la resolución pero no en grados, en el perímetro recorrido.
Sobre este tema y la resolución me falta reflexionar e investigar bastante y probablemente quede fuera del trabajo práctico tal profundidad y me contente con algo básico
Comunicación serie
Podría negociar con la cátedra usar USB, que es más difícil que lo que voy a hacer, pero la realidad es que ya lo hice con la EDU-CIAA-NXP. Mientras exploraba encontre que existe inputattach que permite recibir por comunicación serie un protocolo de mouse o teclado y conectarlo como si fuera tal dispositivo, soporta un montón de protocolos.
Me dije entonces, ha llegado la hora de aprender a hacer ingeniería inversa de protocolos seriales de mouse y como probablemente sea el punto crítico, será el primer tema a resolver, a publicar en unos días o si fracaso, enterrar en el olvido algunos años más hasta que reviva con otra excusa.