o micromouse é um robô que usa um algoritmo de resolução de labirinto para resolver autonomamente um problema de labirinto. Neste post, vou compartilhar como minha equipe e eu conseguimos fazer isso com a orientação muito necessária de algumas pessoas muito úteis.
durante meu semestre de outono na UC Berkeley, fiz uma aula liderada por estudantes para criar um robô que resolve autonomamente um problema de labirinto. Meus pensamentos são que se você está na UC Berkeley, interessado em projetos eletrônicos e procurando um programa altamente guiado com instrutores incríveis, este é um ótimo lugar para estar! Para mim, este curso é especial porque é onde comecei minha jornada para a robótica, mexer e fazer e é um que eu gostei profundamente. Este curso me deu grandes fundamentos, e aprendi mais ao longo do caminho quando comecei a assumir novos projetos.
Aqui é aproximada de um conjunto de instruções sobre como começar a sua Micromouse Projeto como um novato:
- Lista de Peças
- Colocando as peças de hardware em conjunto
- configurar o Teensy Micro Controlador & Arduino IDE
- Teensy pinagem Introdução
- o Uso de Sensores
- Regulação de Tensão
- H Ponte Controlador de Motor para controlar o motor
- Utilizar o Efeito Hall Rotorary Codificador
- Juntando tudo
- Codificação
- Como controlar o seu hardware com o código
- Detecção
- Controle PID
- Labirinto de problemas Algoritmo
- afinar
- Como resolver
Lista de Peças
- Peças Mecânicas
- Chassis
- Rodas
- Muita fita adesiva, a menos que você pretenda impressão 3D feitos de peças ou gastar dinheiro para comprar personalizada montagens
- Peças Elétricas
- Protoboard, fios
- Dois de 5 Volts mini Motores DC
- Uma pequena de 7 a bateria de 9 volts
- Regulador de Tensão 7805
- sensor Hall rotorary codificador
- Ponte-H
- Teensy (Ou de qualquer pequena e micro controlador. Arduino também funciona!)
- Dois Sensores à Distância (eu usei um sensor infra vermelho)
Colocar o hardware em conjunto
2.1 configurando o Teensy Micro Controlador & Arduino IDE
Teensy é um Micro controlador que funciona como um Arduino. Uma grande vantagem é o seu tamanho. Como o próprio nome sugere, o Teenst é pequeno e compacto, o que é ótimo!
começamos colocando o Teensy em cima de alguns pinos de cabeçalho e, em seguida, soldando os pinos de cabeçalho no Teensy e, em seguida, montando-o firmemente em nossa tábua de pão.
Se você ainda não o fez, instale o Arduino IDE para o seu computador. https://www.arduino.cc/en/Main/Software
muito importante: se você estiver usando o Teensy 3.1, certifique-se de instalar a versão do Arduino compatível com o Teensy. Aqui está o link para instalar o Teensyduino, para que seu Teensy possa trabalhar com o Arduino IDE: https://www.pjrc.com/teensy/td_download.html
2.2 O circuito
2.21) fonte de alimentação da bateria: a fonte de alimentação precisa ser 7.2 V e acima. Por convenção de circuito, podemos chamar isso Vcc2.
2.22) 5 V Fonte De Alimentação Regulada: componentes de chip eletrônico muitas vezes precisam de uma tensão de alimentação estável para funcionar corretamente. O problema é que, com dispositivos como motores que podem extrair grandes quantidades variáveis de corrente, isso faz com que a tensão de alimentação diminua. É por isso que precisamos de um regulador de tensão para fornecer esse 5V estável para seus outros componentes eletrônicos.
2.23) Micro controlador: Este é o cérebro de um robô que parece ter qualquer semblace do pensamento inteligente. Um microcontrolador pode parecer complicado no início, mas para começar, não é tão difícil. Aqui estão o básico: simples, mas muito importante.
2.23 a) Pinos de entrada Digital: capaz de ler e escrever sinais binários. Diferentes microcontroladores têm diferentes níveis de lógica, mas a maioria dos microcontroladores têm nível de lógica de 3,3 V ou 5V. Por exemplo, o Arduino é um microcontrolador com um nível lógico de 5V. Durante a leitura, uma tensão em algum lugar perto de 5V registra como de ALTA, enquanto uma tensão em algum lugar perto de 0V registra BAIXA.
2.23 B) Pinos modulados de largura de pulso (PWM): São pinos de entrada digital com uma capacidade especial de emitir um sinal modulado de largura de pulso. É um sinal digital que é alto por uma certa porcentagem de tempo e baixo por outra porcentagem de tempo. Isso é conhecido como ciclo de trabalho. Um sinal PWM com um ciclo de trabalho de 60% é o nível lógico alto 60% do tempo, enquanto o nível lógico baixo 40% do tempo. Saiba mais sobre o PWM aqui.
2.23 C) pinos analógicos: esses pinos são capazes de ler uma tensão analógica em qualquer lugar de 0 para a referida quantidade de volts. No caso do Arduino, seu 0 – 5V. eles podem lê-lo com diferentes graus de resolução, dependendo de quantos bits Analógico para Conversor Digital é usado. Um conversor analógico para digital de 8 bits pode ler uma resolução de 2^8 = 256. Para um nível lógico de 5V, ele pode ler com uma precisão de 5V / 256 = 19,5 mV.
2.23 d) interrupções digitais: Alguns pinos digitais em microcontroladores podem ser configurados como sinais de interrupção. Uma interrupção é muito legal. Quando um pino é configurado como um pino de interrupção, ele detecta (1) uma borda de sinal ascendente (2) uma borda de sinal descendente ou (3) uma mudança no nível lógico. Qualquer um deles acionará o que chamamos de rotina de serviço de interrupção (ISR). O ISR é uma função curta no código que é acionada sempre que uma interrupção é detectada.
2.26) motores: os motores são dispositivos que giram quando recebem uma tensão. Neste caso, estamos usando o motor DC escovado. É nomeado como tal porque há um comutador DC escova dentro dele que ajuda a girar corretamente quando dada uma tensão. Os motores geralmente desenham uma corrente grande e todos os motores têm uma certa potência de tensão. Quando os motores giram, eles produzem um back-emf. Isso pode parecer contra-intuitivo, mas um motor que está girando em sua velocidade máxima realmente atrai a menor quantidade de corrente devido ao emf traseiro. Pelo contrário, um motor que está parado (ou seja, quer se mover, mas não pode por causa de forças externas) atrai a maior quantidade de corrente.
2.25) Driver de Motor: isso é necessário para controlar a velocidade/direção do seu motor usando um microcontrolador. Isso ocorre porque seu microcontrolador não pode fornecer tensão ou corrente suficiente para acionar um motor. Além disso, quando os motores giram, o back-emf gerado pode facilmente danificar seu microcontrolador. É necessária uma interface entre os dois para controlar a velocidade e a direção do seu motor. O controlador do motor usado era um driver SN754410 Quadruple Half – H. O que um controlador de motor faz é que ele pega o sinal proveniente do seu microcontrolador (geralmente um sinal modulado de largura de pulso) e, em seguida, ativa um ‘interruptor digital’ da bateria para o motor. O que ele faz é que ele liga um interruptor digital de sua bateria para o seu motor extremamente rapidamente. Se este interruptor digital estiver ligado 100% do tempo (ou 100% do ciclo de trabalho), o motor está funcionando com potência máxima. Se o interruptor digital estiver ligado apenas 50% do tempo, o motor está funcionando com 50% de energia.
2.26) codificadores: codificadores são dispositivos inteligentes que detectam movimento. Como por exemplo, alguns codificadores detectam quantas vezes uma roda girou, outros são ainda mais precisos para dizer exatamente qual ângulo um braço robô girou etc. Para o Micromouse, estamos usando codificadores que detectam quantas vezes uma roda girou. Existem codificadores de efeito hall ou codificadores ópticos. Dois tipos de codificadores, mas basicamente fazem a mesma coisa. Eles acionam um pulso digital sempre que uma roda gira! Como funciona um codificador de Efeito hall é que há um pequeno ímã permanente dentro de algo que está ligado ao eixo do motor. Quando o motor gira, o ímã também gira. Existem sensores que detectam quando o ímã passou. Quando isso acontece, ele envia um pulso que pode ser lido por um microcontrolador. Normalmente, enviamos esse sinal para um pino configurado como um pino de interrupção digital.
2.27) sensores de distância infravermelho: detecta a distância usando infravermelho. O que ele faz é que ele dispara um sinal infravermelho e espera que esse sinal se recupere para determinar a que distância o objeto está dele. Você pode experimentar, mas se você desviar o sinal de uma superfície inclinada, você pode não obter uma leitura fora de seu sensor IR. Isso o torna não tão ideal. Este sensor do IR igualmente tem uma escala limitada que possa detectar distâncias. O fio vermelho é para o poder 5V, fio preto para GND, fio amarelo para o sinal. Para este sensor IR específico, dependendo de quão longe o sensor IR detecta seu objeto, ele fornece uma tensão analógica diferente. O que você pode fazer é ler essa tensão analógica usando um microcontrolador. Leia a folha de dados aqui para saber mais informações sobre o sensor IR.
2.3 diagramas de circuito & fiação
aqui está um diagrama de circuito áspero. Observe que não especificei exatamente a quais pinos conectar os fios. Isso ocorre porque os números dos pinos variam dependendo de qual Microcontrolador você está usando, mas aqui, estou dando os princípios gerais:
os sinais do codificador devem ser conectados a um pino de interrupção Digital. Dessa forma, sempre que um sinal é enviado, o microcontrolador pode saber que a roda girou 1 rodada.
os sinais do Sensor infravermelho devem ser conectados a um pino de entrada analógico.Os sinais que estão sendo alimentados no controlador do motor devem estar saindo de um pino PWM.
*Inserir diagrama de circuitos
3.0 Código & Controles:
eu não vou postar o código, mas aqui estão alguns conceitos gerais:
3.1 Como obter o mouse para mover-se em linha reta ou ligue:
Este mouse é controlado de maneira diferente. Existem duas rodas, com dois motores em cada roda. Se ambas as rodas girarem na mesma velocidade, o mouse vai direto. Se a roda esquerda acelerar enquanto a roda direita desacelera, o mouse gira para a direita. Isso é conhecido como controle diferencial.
3.2 controles & correção de erros
mas é preciso pensar em Como controlar o mouse. Como podemos fazer com que ele se mova dentro do labirinto sem bater em uma parede? Podemos pensar que estamos enviando dois sinais iguais para os motores esquerdo e direito para dizer ao mouse para ir direto. Então o mouse deve ir direto para a direita? Errado! Várias razões podem fazer com que os motores não respondam da maneira que dizemos. Fundamentalmente, cada motor é construído quase o mesmo, mas não exatamente o mesmo. Hardware nunca é construído perfeitamente e há sempre algum erro finito.
como nos certificamos de que o mouse realmente está se movendo na direção em que o dizemos? Precisamos do que é chamado de controle de loop fechado. O que significa que conectamos sensores para medir a saída e, em seguida, alimentamos o resultado de volta na entrada para realizar a correção de erros. Mais sobre isso depois. Precisamos do que chamamos de controlador PID (derivada integral proporcional).
neste caso, podemos querer fazer com que o mouse mantenha uma distância estrita da parede. Digamos, a 5 cm da parede à sua direita. Chamamos isso de set-point. Qualquer desvio do ponto de ajuste é o que chamamos de erro. Quando um erro é detectado, queremos que o mouse se corrija. Quando o erro é grande, queremos uma grande ação de correção. Quando o erro é pequeno, queremos uma pequena ação de correção.
sensores na lateral do mouse determinam a distância que o mouse está de uma parede. Digamos que o mouse esteja muito longe da parede à sua direita. Queremos que a roda esquerda gire mais rápido, enquanto a roda direita gira mais devagar para que o mouse possa se mover para a direita para corrigir o erro. Se o mouse estiver muito longe do ponto de ajuste de 5cm, como 10cm de distância da parede, queremos que a roda esquerda gire muito rápido, enquanto a roda direita desacelere muito. Se o mouse estiver a apenas 6 cm de distância da parede, queremos que a roda esquerda aumente de velocidade e a roda direita diminua sua velocidade, mas apenas um pouco.