Experiência na criação do primeiro robô com Arduino (robô 'caçador')

Olá.

Neste artigo, quero descrever o processo de montagem do meu primeiro robô com Arduino. O material será útil para outros novatos como eu, que desejam criar algum tipo de "carrinho autônomo". O artigo apresenta uma descrição das etapas do trabalho com meus complementos sobre diversos detalhes. Um link para o código final (provavelmente não o mais perfeito) está disponível no final do artigo.

Experiência na criação do primeiro robô com Arduino (robô 'caçador')

Sempre que possível, envolvi meu filho (8 anos) na atividade. O que conseguimos fazer juntos e o que não deu certo está descrito em uma parte do artigo, que pode ser útil para alguém.

Descrição Geral do Robô

Primeiramente, algumas palavras sobre o próprio robô (a ideia). Não estava muito interessado em montar algo típico no início. Ao mesmo tempo, o conjunto de componentes era bastante padrão — chassi, motores, sensor ultrassônico, sensor de linha, LEDs, buzzer. A princípio, a partir desse "mistureba", criei um robô que protege sua área. Ele avança em direção ao invasor que cruzou a linha do círculo e, em seguida, retorna ao centro. No entanto, nesse modelo, era necessário ter uma linha desenhada, além de um cálculo extra para se manter constantemente dentro do círculo.

Portanto, após algumas reflexões, eu mudei um pouco a ideia e decidi fazer um robô "caçador". No início, ele gira em torno de seu eixo, selecionando uma meta próxima (uma pessoa). Se a "vítima" é detectada, o "caçador" ativa as luzes e a sirene, e começa a avançar em sua direção. Quando a pessoa se afasta, o robô escolhe uma nova meta e a persegue, e assim por diante. Esse tipo de robô não precisa de um círculo restrito e pode operar em um espaço aberto.

Como vocês podem ver, isso lembra muito o jogo de "pega-pega". Embora o robô não tenha se mostrado rápido o suficiente, ele interage de maneira honesta com as pessoas ao seu redor. Especialmente as crianças gostam disso (às vezes, parece que elas vão pisoteá-lo, o que faz meu coração acelerar...). Acredito que essa é uma boa solução para popularizar a construção técnica.

Estrutura do Robô

Então, agora que definimos a ideia, vamos passar para a composição. A lista de elementos é formada pelo que o robô deve ser capaz de fazer. Aqui tudo é bastante óbvio, então vamos direto para a numeração:

Experiência na criação do primeiro robô com Arduino (robô 'caçador')

Os "cérebros" do robô são a placa Arduino Uno (1); ela fazia parte de um kit encomendado da China. Para nossos propósitos, é mais do que suficiente (considerando o número de pinos utilizados). Também pegamos o chassi pronto (2) do mesmo kit, que é onde são fixadas duas rodas motrizes (3) e uma roda traseira (girando livremente) (4). Além disso, o kit incluía um compartimento de bateria (5). Na frente do robô, há um sensor ultrassônico (HC-SR04) (6), na parte de trás, um driver de motores (L298N) (7), no centro, um LED piscante (8), e um pouco ao lado, um buzzer (9).

Na fase de montagem, observamos:

— se tudo cabe
— se está balanceado
— se está disposto racionalmente

Em parte, isso já foi feito para nós pelos colegas chineses. Assim, o pesado compartimento de bateria foi colocado no centro, e as rodas motrizes estão aproximadamente abaixo dele. Todas as outras placas são leves, podendo ser dispostas na periferia.

Particularidades:

  1. O chassi do kit possui muitos orifícios de fabricação, mas não consegui entender a lógica por trás deles. Os motores e a unidade de bateria foram fixados sem problemas, mas então começou a "ajuste" com a perfuração de novos orifícios para fixar placas específicas.
  2. As hastes de latão e outros fixadores da reserva foram muito úteis (às vezes era necessário improvisar).
  3. Passei os fios de cada placa por grampos (novamente, encontrados na reserva). Muito conveniente, todos os fios ficam organizados e não balançam.

Blocos separados

Agora vou passar pelos blocos e falar individualmente sobre cada um.

Compartimento de Bateria

É evidente que o robô precisa de uma boa fonte de energia. As opções podem variar, mas escolhi a configuração com 4 pilhas AA. Elas somam aproximadamente 5V, e essa tensão pode ser conectada diretamente ao pino 5V da placa Arduino (contornando o estabilizador).

Havia, é claro, alguma apreensão, mas essa solução funciona muito bem.

Como a alimentação é necessária em todos os lugares, para facilitar, fiz no centro do robô duas tomadas: uma "distribui" o terra (do lado direito), e a outra — 5V (do lado esquerdo).

Experiência na criação do primeiro robô com Arduino (robô 'caçador')

Motores e driver

Primeiro sobre a fixação dos motores. A fixação é de fábrica, mas foi feita com grandes folgas. Em outras palavras, os motores podem "balançar" alguns milímetros para a esquerda e para a direita. Para a nossa tarefa, isso não é crítico, mas em outros lugares pode influenciar (o robô começará a se desviar). Por precaução, posicionei os motores exatamente paralelos e os fixe com cola.

Experiência na criação do primeiro robô com Arduino (robô 'caçador')

Para controlar os motores, como mencionei anteriormente, usa-se o driver L298N. Segundo a documentação, ele possui três pinos para cada motor: um para controlar a velocidade e dois para a direção de rotação. Aqui há um ponto importante. Acontece que, se a tensão de alimentação for de 5 V, a regulação da velocidade simplesmente não funciona! Ou seja, ou não gira, ou gira no máximo. Essa peculiaridade me fez "perder" algumas noites. No final, encontrei uma menção em algum fórum.

De modo geral, eu precisava de uma velocidade baixa de rotação ao girar o robô — para que ele tivesse tempo suficiente para escanear o espaço. Mas, como nada saiu como planejado, tive que fazer de outra forma: uma pequena virada — parada — virada — parada e assim por diante. Novamente, não é tão elegante, mas funcional.

Além disso, acrescento que após cada perseguição, o robô escolhe aleatoriamente a direção da nova virada (no sentido horário ou anti-horário).

Sensor ultrassônico

Experiência na criação do primeiro robô com Arduino (robô 'caçador')

Mais um componente onde precisei buscar uma solução de compromisso. O sensor ultrassônico fornece números instáveis em obstáculos reais. Na verdade, isso era esperado. Ele funciona perfeitamente em competições, onde há superfícies lisas, planas e perpendiculares, mas se na frente dele "piscam" as pernas de alguém — é necessário implementar um processamento adicional.

Como tal processamento, eu implementei um filtro mediano para três medições. Com base nos testes com crianças reais (durante os testes, nenhuma criança se feriu!), este foi suficiente para normalizar os dados. A física aqui é simples: temos sinais refletidos de objetos (que fornecem a distância requerida) e sinais refletidos de objetos mais distantes, como paredes. Os segundos representam outliers aleatórios nas medições, como 45, 46, 230, 46, 46, 45, 45, 310, 46… É exatamente isso que o filtro mediano elimina.

Após todo o processamento, obtemos a distância até o objeto mais próximo. Se for menor que um certo valor limite, acionamos o alarme e vamos diretamente até o "infrator".

Luz piscante e sirene

Certamente, os elementos mais simples de todos os mencionados. Eles são visíveis nas fotos acima. Não há muito o que dizer sobre o hardware, então agora vamos passar ao código.

Programa de controle

Não vejo sentido em detalhar o código, quem precisar, o link está no final do artigo, lá está tudo suficientemente legível. Mas seria bom explicar a estrutura geral.

A primeira coisa que tive que entender: o robô é um dispositivo em tempo real. Na verdade, eu já sabia disso, porque tanto antes quanto agora eu ainda estou lidando com eletrônica. Então, vamos esquecer imediatamente o chamado delay(), que muitos gostam de usar em sketches de exemplo, e que simplesmente "congela" o programa pelo tempo especificado. Em vez disso, como sugerido por pessoas experientes, introduzimos temporizadores para cada bloco. Passou o tempo necessário — executamos a ação (aumentamos o brilho do LED, ligamos o motor e assim por diante).

Os temporizadores podem estar interconectados. Por exemplo, o buzzer funciona sincronizadamente com a luz piscante. Isso simplifica um pouco o programa.

Naturalmente, dividimos tudo em funções separadas (luz piscante, som, rotação, movimento para frente e assim por diante). Se não fizermos isso, será difícil entender depois o que vem de onde e para onde.

Nuances da pedagogia

Tudo que foi descrito acima eu fiz no meu tempo livre à noite. Num ritmo tranquilo, gastei cerca de três semanas no robô. Poderia encerrar por aqui, mas ainda prometi contar sobre trabalhar com a criança. O que é viável em tal idade?

Trabalho seguindo instruções

Verificamos cada peça separadamente — LEDs, buzzer, motores, sensores, etc. Há um grande número de exemplos prontos — alguns estão diretamente no ambiente de desenvolvimento, outros podem ser encontrados na internet. Isso, sem dúvida, é bom. Pegamos o código, conectamos a peça, garantimos que funciona, e então começamos a modificar para nossa tarefa. As conexões, de acordo com o esquema e sob algum controle meu, a criança faz sozinha. Isso é bom. Trabalhar de forma rigorosa seguindo as instruções também é uma habilidade que deve ser dominada.

Ordem de trabalho ("do particular ao geral")

Este é um tópico complicado. É necessário ensinar que um grande projeto ('fazer um robô') é composto por pequenas tarefas ('conectar um sensor', 'conectar os motores'...), que, por sua vez, são feitas de passos ainda menores ('encontrar o programa', 'conectar a placa', 'carregar o firmware'...). Ao executar tarefas relativamente compreensíveis de nível inferior, estamos 'fechando' tarefas de nível médio, das quais se forma o resultado geral. Expliquei isso, mas acho que a conscientização ainda não virá tão cedo. Talvez por volta da adolescência.

Instalação

Furação, roscas, parafusos, porcas, soldagem e cheiro de colofônia — como poderíamos ficar sem isso? A criança adquiriu a habilidade básica 'Trabalho com soldador' — conseguimos soldar algumas conexões (eu ajudei um pouco, para não esconder). Não se esqueçam da explicação sobre técnicas de segurança.

Trabalho no computador

Eu escrevi o programa para o robô, mas consegui alcançar alguns resultados paralelos.

Primeiro: inglês. Na escola, eles começaram apenas agora, então tivemos dificuldades para entender o que é pishalka, migalka, yarkost e outras transliterações. Conseguimos entender pelo menos isso. Eu optei por não usar palavras inglesas nativas, pois ainda não chegamos nesse nível.

Segundo: trabalho eficiente. Aprendemos combinações de teclas quentes, como realizar operações padrão rapidamente. Periodicamente, quando escrevíamos o programa, trocávamos de lugar com meu filho, e eu dizia o que precisava ser feito (substituição, busca, etc.). Tive que repetir várias vezes: 'selecione com um clique duplo', 'aperte Shift', 'aperte Ctrl' e assim por diante. O processo de aprendizagem aqui não é rápido, mas eu acho que as habilidades vão se fixar gradualmente.

Texto ocultoVocê pode dizer que o que foi descrito acima é quase óbvio. Mas, sinceramente, neste outono tive a oportunidade de lecionar informática para turmas do 9º ano em uma escola. Isso é um desastre. Os alunos não sabem coisas tão elementares como Ctrl + Z, Ctrl + C e Ctrl + V, seleção de texto mantendo Shift pressionado ou clicando duas vezes em uma palavra, entre outros. Isso depois de três anos de aulas de informática... Tire suas próprias conclusões.

Terceiro: digitação cega. Confiamos ao meu filho a tarefa de digitar os comentários no código (deixe ele praticar). Colocamos as mãos na posição correta desde o início, para que os dedos se lembrassem gradualmente da localização das teclas.

Como você pode ver, ainda estamos apenas começando. Vamos continuar aprimorando as habilidades e conhecimentos; serão úteis na vida.

A propósito, sobre o futuro...

Desenvolvimento futuro

O robô está feito, se move, pisca e apita. E agora? Empolgados com o que alcançamos, planejamos continuar aprimorando-o. Temos a ideia de criar um controle remoto – no estilo de um rover lunar. Seria interessante, sentado em um controle hipotético, controlar o movimento do robô, que se desloca em um lugar totalmente diferente. Mas isso já será uma outra história…

E por fim, os verdadeiros protagonistas deste artigo (vídeo ao clicar):

Experiência na criação do primeiro robô com Arduino (robô 'caçador')

Obrigado pela atenção!

→ Link para o código

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster