Se na infância você não tinha bicicleta e agora tem um Bentley,
mesmo assim, na sua infância você não teve uma bicicleta.Aconteceu que na minha infância não havia
Lunokhod . E então um bebê nasceu. Em geral, pensei e decidi fazer um brinquedo para nós dois.
Não queria criar uma cópia exata e não sei imprimir casos em casa, por isso decidi me limitar a recriar funcionalidades semelhantes. Além disso, me pareceu desumano entrar no “programa” de movimento da memória e não entender o que exatamente aconteceu ao entrar, então adicionei uma exibição.
Versão 1

Havia um chassi barato com o Ebay e o Arduino Uno.

Para controlar os motores, peguei o PWM Servo Shield e soldei o L293D + PCF8574 na placa de ensaio:

Para ler no teclado, peguei o PCF8574 e alguns diodos:

O próprio teclado foi transformado em uma placa de circuito impresso:

Para que o teclado não se desmoronasse nas minhas mãos, fixei a sobreposição na parte superior. Ela teve que pedir a "moagem" :)

Para exibir o programa, é usado um display convencional de 4 caracteres 20. Sim, também através do PCF8574;)
No começo, usei 4 baterias para energia, mas elas acabaram rápido demais e as substituí por um par de 18650:

Usei módulos TP4056 para carregar, que conectei às baterias através de um relé, embora não com muito sucesso.
A maneira mais rápida era escrever firmware. Infelizmente, a biblioteca LCD I2C possui uma licença GPL, e o código foi para o lixo. Na mesma época, percebi que o Arduino Uno não é a melhor opção e que um punhado de PCF8574 é muito inconveniente para a solda.
E eu decidi começar de novo.
Versão 2

Levei em conta a experiência anterior, que sugeria que existem vários problemas:
- O chassi com o Ebay é feito de acrílico e é muito frágil (puxei o parafuso de montagem da caixa de engrenagens e a montagem quebrou).
- Existem muitos orifícios de montagem no chassi, mas nenhum adequado.
- Junto com o chassi estão as engrenagens 1:48, mas são muito rápidas.
- Em geral, o chassi não é suficiente.
- O Arduino Uno tem poucas pernas.
- Não há módulo de som (e é necessário para o comando de incêndio).
- Histórias de terror são escritas sobre Li-ion na Internet; não quero dar a uma criança um dispositivo potencialmente perigoso.
Como resultado, comprei:
Além disso:
Achtung! Atenção! Atenção! Esses links são fornecidos apenas para ilustrar e simplificar a busca adicional por detalhes. Não posso garantir que o vendedor repentinamente não mude o lote para outro, não mude o preço, a quantidade etc.Ferro
Transferi o teclado para a placa de circuito (talvez esse seja o único elemento difícil de repetir). A sobreposição do teclado foi fresada no meu pedido.
A questão permaneceu: do que fabricar o chassi? Não havia plástico adequado, é difícil processar metal ... E se você usar compensado? “Mas isso não é esteticamente agradável!”, Pensei. Mas depois de meia hora que consegui um chassi normal, mudei de idéia. O chassi não era muito apresentável e foi para a cesta, mas gostei tanto da velocidade de processamento que decidi continuar a usar madeira compensada.
É verdade que comecei a serrar a segunda folha somente depois de desenhar um plano aproximado:

Para montar os motores, cortei um pedaço de canto de alumínio e perfurei:

Placas fixadas em prateleiras hexagonais e conectadas entre si por loops.

(aqui você pode ver um estabilizador de 5V e alguns contatos de potência).
Os fios de energia acabaram sendo um pouco demais, então eu criei uma placa de energia a partir do painel (detalhes
aqui ). Suspeito que você possa usar uma blindagem normal do sensor, que possui muitos pinos de alimentação.

Como não havia mais expansores de E / S, o teclado teve que ser refeito (
fonte ). Transferi diodos e resistores de pull-up para ele:


Como sensor de velocidade, usei um acoplador óptico e uma engrenagem com fenda (pintei-o com um marcador permanente):

Como terceira roda, usei uma bola:

Inicialmente, havia um suporte em forma de roda na viga, que acompanha o chassi. No entanto, quando a direção do movimento mudou, a roda começou a girar no momento mais inesperado e jogou o carrinho para o lado.
Diagrama de fiação
É melhor olhar para os arquivos consts.he lcd.ino, pois eles contêm as informações mais relevantes. As conexões, como são agora, têm a seguinte aparência:
A imagem é clicável.Firmware
Firmware , em essência, é um programa comum escrito no IDE do Arduino. Existem dois modos de operação: edição e execução. No processo de edição, o comando + número de repetições é aceito no teclado. Tudo isso é compactado em um valor de 16 bits e adicionado a uma matriz na RAM. Quando um programa é executado, os valores são removidos da matriz e executados. A execução de uma etapa (de uma forma muito simplificada) é semelhante a esta:
( ) ( >= ), = *
( ) ( >= ), = *
A distância percorrida é determinada pelo número de pulsos do acoplador óptico, que é verificado interrompendo o temporizador.
A única exceção é a reprodução de som. Se o comando "shot" for encontrado, o loop for mais simples é iniciado, que recolhe os valores do arquivo wav (ele pisca na mesma memória flash do programa) e os emite para o R-2R DAC. Quando os valores terminam, ele retorna ao processo normal de execução do programa.
Infelizmente, o mundo real é um pouco diferente do modelo de software para o qual o firmware foi projetado, então adicionei vários atrasos que permitem que a inércia do chassi seja levada em consideração.
Eu deliberadamente coloquei a licença do MIT. No meu entendimento, o firmware com essa licença pode ser usado livremente como você quiser, sem a necessidade de publicar outras alterações (não quero forçar ninguém a fazer nada).
Manual de operação;)
O teclado é um pouco diferente do Lunokhod "clássico":

- À esquerda, há um bloco de comandos (verde - para onde ir, pausa - vermelha, saída - inferior, disparo, repetição).
- No meio estão os números com o número de repetições.
- À direita, existem 8 teclas de controle (preto - exclua o último comando, vermelho - exclua tudo, verde - inicie, amarelo - inicie o último comando, azul - teste, cinza - sobressalente).
Mais uma vez com um sinal:
Na foto | Tradução | Significado |
Fwd | Avançar | |
Bwd | Dirija de volta | |
Esquerda | Vire à esquerda | |
Direito | Vire à direita | |
Pausar | Congelar | |
Fora | Não implementado, deixado para o futuro | Fiz como no Lunokhod |
Fogo | Fogo | Produz o som de "pih!" |
Loop | Ciclo | Repita vários comandos anteriores uma vez |
0-9 | Número de etapas | Máximo 20 |
Bsp | Excluir último comando | |
Del | Excluir programa inteiro | É necessária confirmação! |
T1, T2 | Teste | Execute o programa de teste |
Verifique | Dê o último passo | |
Vá! | Conclua todas as etapas | |
O programa é iniciado pressionando alternadamente “Equipe” e “Número”. Em seguida, pressionamos o verde “Launch” e olhamos o resultado. A exclusão ocorre pressionando o botão vermelho, mas não imediatamente: você precisa confirmar sua decisão pressionando o botão verde "Iniciar". Quando a energia é desligada, o programa é excluído.
O comando Repetir contém um parâmetro: quantas etapas precisam ser repetidas [uma vez]. Exemplo: Fwd1, Pause1, Bwd1, Loop3; como resultado, os comandos Fwd1, Pause1, Bwd1 serão executados duas vezes. A primeira vez porque eles estão no programa, a segunda - porque é indicada no comando Ciclo.
Apenas no caso, a carga da bateria é monitorada. Se for muito pequeno, um aviso será exibido e o brinquedo não será montado.
GUI
Manter todo o programa em mente é difícil, então estraguei um indicador simples que duplica as informações de entrada.
Após o início, um prompt é exibido:

Quando você insere um comando, o ícone do comando e o número de repetições são exibidos no canto superior esquerdo:

Se mais de um comando for inserido, a lista abaixo será (de fato, o programa) e o comando que você digitar ainda será exibido na parte superior:

Por que isso aconteceu dessa maneira
O brinquedo foi criado a partir do que estava à mão ou fácil de obter. Eu também gostaria de dizer sobre o Arduino. É selecionado por vários motivos:
- Ela tem um número adequado de conclusões e elas precisam de muito (43):
- 6 para controlar motores;
- 8 + 4 para o teclado;
- 11 para LCD;
- 3 para DAC;
- 8 para sensores de ultrassom;
- 2 para sensores de velocidade;
- 1 para medir a voltagem da bateria.
- Eu estou familiarizado com esta plataforma.
- É costurado em um clique.
- O microcontrolador não requer velocidades gigantescas ou volumes de memória.
- E eficiência especial também não é necessária, porque 90% da corrente é consumida por motores.
O que pode ser melhorado
Chassis Com um início agudo, as rodas são "polidas" e o brinquedo se desvia. Você pode tentar fazer um chassi de seis rodas, ou mesmo um de esteira rolante (existe no Aliexpress, mas eu ainda não tentei).
GUI Agora, o indicador exibe apenas a quantidade mínima de informações, e isso é feito da maneira mais simples.
Código Definitivamente não vou receber um Pulitzer.
O som Existem leitores de mp3 baratos e muito pequenos. Você pode atirar com segurança o R-2R DAC e substituí-lo por um player pronto.
Botões de backup . Você pode gravar o programa finalizado na EEPROM para que não se perca quando a energia é desligada. A implementação pode ser como no rádio: com uma pressão longa, o programa é salvo, com uma pressão curta.
Botão de saída . Não implementado atualmente. Você pode parafusar algo como um relé / servo em um dos pinos do Arduino.
Agradecimentos
- A criança que me motivou todo esse tempo.
- Minha esposa, que esperou pacientemente enquanto eu tocava o suficiente, e ajudou no Corel Draw!
- Sergey Dudnikov, que desenhou uma sobreposição de teclado.
- Andrei Shishkov, que criou esse mesmo patch.
- Anton, que me fez um ótimo mp3 com o som de "uau!".
- hudbrog , pela idéia de implementar um controlador PID!
- Chatik faça-você-mesmo que me apoiaram mentalmente e foram forçados a olhar para os resultados intermediários do trabalho;)
Duplicatas incorretas
Eu gosto de filmes com Jackie Chan, porque no final há um corte de tomadas sem sucesso. Eu não poderia ficar sem eles também. O que mais me surpreendeu foi o fato de uma broca redonda com duas ranhuras fornecer um furo triangular;)