Si en la infancia no tenía una bicicleta, y ahora tiene un Bentley,
de todos modos, en tu infancia no tenías una bicicleta.Dio la casualidad de que en mi infancia no había
Lunokhod . Y entonces nació un bebé. En general, pensé, y decidí hacer un juguete para los dos.
No quería crear una copia exacta, y no sé cómo imprimir casos en casa, así que decidí limitarme a recrear una funcionalidad similar. Además, me pareció inhumano ingresar al "programa" de movimiento desde la memoria y no entender qué sucedió exactamente para ingresar, así que agregué una pantalla.
Versión 1

A la mano había un chasis económico con Ebay y Arduino Uno.

Para controlar los motores, tomé el servo escudo PWM y solde el L293D + PCF8574 en la placa de pruebas:

Para leer desde el teclado tomé PCF8574 y un puñado de diodos:

El teclado en sí se hizo una placa de circuito impreso:

Para que el teclado no se desmorone en mis manos, arreglé la superposición en la parte superior. Ella tuvo que ordenar de la "molienda" :)

Para visualizar el programa, se utiliza una pantalla convencional de 4 caracteres 20. Sí, también a través de PCF8574;)
Al principio usé 4 baterías para la energía, pero se agotaron demasiado rápido, y las reemplacé con un par de baterías 18650:

Utilicé módulos TP4056 para cargar, que conecté a las baterías a través de un relé, aunque no con mucho éxito.
La forma más rápida era escribir firmware. Desafortunadamente, resultó que la biblioteca LCD I2C tiene una licencia GPL, y el código fue a la basura. Casi al mismo tiempo, me di cuenta de que Arduino Uno no es la mejor opción, y que un puñado de PCF8574 es muy inconveniente para soldar.
Y decidí comenzar de nuevo.
Versión 2

Tomé en cuenta la experiencia previa, lo que sugirió que hay varios problemas:
- El chasis con Ebay está hecho de plexiglás y es muy (!) Frágil (saqué el tornillo de montaje de la caja de engranajes y el soporte se rompió).
- Hay muchos orificios de montaje en el chasis, pero ninguno es adecuado.
- Junto con el chasis hay engranajes 1:48, pero son demasiado rápidos.
- En general, el chasis no es suficiente.
- Arduino Uno tiene pocas piernas.
- No hay módulo de sonido (y es necesario para el comando de disparo).
- Las historias de terror se escriben sobre Li-ion en Internet; no quiero darle a un niño un dispositivo potencialmente peligroso.
Como resultado, compré:
Además
Achtung! Advertencia Atencion Estos enlaces se proporcionan únicamente para ilustrar y simplificar la búsqueda adicional de detalles. No puedo garantizar que el vendedor de repente no cambie el lote a otro, no cambie el precio, la cantidad, etc.Hierro
Transferí el teclado a la placa de circuito (quizás este es el único elemento difícil de repetir). La superposición del teclado fue fresada a mi pedido.
La pregunta seguía siendo: ¿de qué hacer el chasis? No había plástico adecuado, es difícil procesar metal ... ¿Y si tomas madera contrachapada? "¡Pero esto no es estéticamente agradable!", Pensé. Pero cuando después de media hora obtuve un chasis normal, cambié de opinión. El chasis no era muy presentable y fue a la canasta, pero me gustó tanto la velocidad de procesamiento que decidí seguir usando madera contrachapada.
Es cierto, comencé a cortar la segunda hoja solo después de dibujar un plan aproximado:

Para montar los motores, corté un pedazo de esquina de aluminio y taladré:

Tableros fijados en bastidores hexagonales y conectados entre sí por bucles.

(Aquí puede ver un estabilizador de 5V y algunos contactos de alimentación).
Los cables de alimentación resultaron ser un poco demasiado, así que hice una placa de alimentación desde el stripboard (detalles
aquí ). Sospecho que puede tomar un protector de sensor normal, que tiene muchos pines de alimentación.

Como no había más expansores de E / S, el teclado tuvo que rehacerse (
fuente ). Le transferí diodos y resistencias pull-up:


Como sensor de velocidad, utilicé un optoacoplador ranurado y un engranaje (lo pinté con un marcador permanente):

Como tercera rueda usé una pelota:

Inicialmente, había un soporte en forma de rueda en la viga, que venía con el chasis. Sin embargo, cuando la dirección del movimiento cambió, la rueda comenzó a girar en el momento más inesperado y arrojó el carro a un lado.
Diagrama de cableado
Es mejor mirar los archivos consts.h y lcd.ino, que contienen la información más relevante. Las conexiones, como están ahora, se ven así:
Se puede hacer clic en la imagen.Firmware
El firmware , en esencia, es un programa ordinario escrito en el IDE de Arduino. Hay dos modos de funcionamiento: edición y ejecución. En el proceso de edición, el comando + número de repeticiones se acepta desde el teclado. Todo esto se empaqueta en un valor de 16 bits y se agrega a una matriz en RAM. Cuando se ejecuta un programa, los valores se eliminan de la matriz y se ejecutan. Realizar un paso (en una forma muy simplificada) se ve así:
( ) ( >= ), = *
( ) ( >= ), = *
La distancia recorrida está determinada por el número de pulsos desde el optoacoplador, que se verifica interrumpiendo el temporizador.
La única excepción es reproducir sonido. Si se encuentra el comando "disparo", se inicia el bucle más simple, que recoge los valores del archivo wav (se actualiza en la misma memoria flash que el programa) y los emite al R-2R DAC. Cuando finalizan los valores, vuelve al proceso normal de ejecución del programa.
Desafortunadamente, el mundo real es ligeramente diferente del modelo de software para el que está diseñado el firmware, por lo que agregué una serie de retrasos que permiten tener en cuenta la inercia del chasis.
Deliberadamente puse la licencia MIT. Según tengo entendido, el firmware con dicha licencia se puede usar libremente como desee, sin la necesidad de publicar más cambios (no quiero obligar a nadie a hacer nada).
Manual de operación;)
El teclado es ligeramente diferente del "clásico" Lunokhod:

- A la izquierda hay un bloque de comandos (verde - a dónde ir, rojo - pausa, abajo - Fuera, disparar, repetir).
- En el medio hay números con el número de repeticiones.
- A la derecha hay 8 teclas de control (negro: eliminar el último comando, rojo: eliminar todo, verde: iniciar, amarillo: iniciar el último comando, azul: probar, gris: repuesto).
Una vez más con un signo:
En la foto | Traducción | Significado |
Fwd | Conducir hacia adelante | |
Bwd | Conducir de regreso | |
Izquierda | Girar a la izquierda | |
Derecho | Girar a la derecha | |
Pausa | Congelar | |
Fuera | No implementado, dejado para el futuro | Hicimos como en el Lunokhod |
Fuego | Fuego | Produce el sonido de "pih!" |
Bucle | Ciclo | Repita varios comandos anteriores una vez |
0-9 | Número de pasos | Máximo 20 |
Bsp | Eliminar último comando | |
Del | Eliminar todo el programa | ¡Se requiere confirmación! |
T1, T2 | Prueba | Ejecute programa de prueba |
Cheque | Da el último paso | |
Ir! | Completa todos los pasos | |
El programa se ingresa presionando alternativamente "Equipo" y "Número". Luego presionamos el botón verde "Iniciar" y miramos el resultado. La eliminación se produce presionando el botón rojo, pero no de inmediato: debe confirmar su decisión presionando el botón verde "Inicio". Cuando se apaga la alimentación, se elimina el programa.
El comando Repetir contiene un parámetro: cuántos pasos deben repetirse [una vez]. Ejemplo: Fwd1, Pausa1, Bwd1, Loop3; Como resultado, los comandos Fwd1, Pause1, Bwd1 se ejecutarán dos veces. La primera vez porque están en el programa, la segunda, porque así se indica en el comando Ciclo.
Por si acaso, se supervisa la carga de la batería. Si es demasiado pequeño, se muestra una advertencia y el juguete no se monta.
GUI
Tener todo el programa en mente es difícil, así que arruiné un indicador simple que duplica la información de entrada.
Después de comenzar, se muestra un mensaje:

Cuando ingresa un comando, el icono del comando y el número de repeticiones se muestran en la esquina superior izquierda:

Si se ingresa más de un comando, habrá una lista debajo (esencialmente un programa), y el comando que ingrese se mostrará arriba:

¿Por qué sucedió de esa manera?
El juguete fue creado a partir de lo que estaba a mano o era fácil de conseguir. También me gustaría decir sobre Arduino. Se selecciona por varias razones:
- Ella tiene una cantidad adecuada de conclusiones, y necesitan muchas (43):
- 6 para controlar motores;
- 8 + 4 para el teclado;
- 11 para LCD;
- 3 para DAC;
- 8 para sensores de ultrasonido;
- 2 para sensores de velocidad;
- 1 para medir el voltaje de la batería.
- Estoy familiarizado con esta plataforma.
- Se cose en un clic.
- El microcontrolador no requiere velocidades gigantescas ni volúmenes de memoria.
- Y tampoco se requiere eficiencia especial, porque El 90% de la corriente es consumida por los motores.
¿Qué se puede mejorar?
Chasis Con un comienzo brusco, las ruedas están "pulidas" y el juguete se desvía. Puede intentar hacer un chasis de seis ruedas, o incluso uno con orugas (hay en Aliexpress, pero aún no lo he probado).
GUI Ahora el indicador muestra solo la cantidad mínima de información, y esto se hace de la manera más simple.
Código Definitivamente no obtendré un Pulitzer.
El sonido Hay reproductores de mp3 baratos y muy pequeños. Puede lanzar de forma segura el R-2R DAC y reemplazarlo con un reproductor listo para usar.
Botones de respaldo . Puede grabar el programa terminado en EEPROM para que no se pierda cuando se apaga. La implementación puede ser como en la radio: con una pulsación larga, el programa se guarda, con una pulsación corta - ejecutar.
Botón de salida . No implementado actualmente. Puede atornillar algo como un relé / servo a uno de los pines Arduino.
Agradecimientos
- El niño que me motivó todo este tiempo.
- ¡Mi esposa, que pacientemente esperó mientras yo jugaba lo suficiente, y ayudó con Corel Draw!
- Sergey Dudnikov, quien dibujó una superposición de teclado.
- Andrei Shishkov, quien molió este mismo parche.
- Anton, quien me hizo un gran mp3 con el sonido de "wow!".
- Hudbrog , por la idea de implementar un controlador PID!
- Chatik hágalo usted mismo que me apoyó mentalmente y se vio obligado a mirar los resultados intermedios del trabajo;)
Duplicados malos
Me gustan las películas con Jackie Chan, porque al final hay un corte de tomas sin éxito. Yo tampoco podría prescindir de ellos. Lo que más me sorprendió fue el hecho de que un taladro redondo con dos ranuras da un agujero triangular;)