Entendendo os Componentes do Linusbot
O que é o Linusbot
O Linusbot é um dos projetos educacionais desenvolvidos pelo PET Elétrica da UFJF. Criado em 2014, o objetivo do projeto é que os calouros de Engenharia Elétrica montem um robô seguidor de linha, um carrinho que consegue identificar uma faixa preta em uma pista branca por meio de sensores infravermelhos, seguindo essa linha.
No desenvolvimento do projeto, os petianos ministram aulas com teorias e atividades práticas para que os calouros adquiram conhecimentos importantes sobre os componentes do carrinho. Depois, os alunos são divididos em equipes e devem montar e programar o robô com base nos conteúdos das aulas para competirem entre si, valendo prêmios e brindes dos patrocinadores para a equipe que fizer o menor tempo.
O Linus é um projeto de muita importância para os novos estudantes, pois, além de contribuir para que os calouros tenham contato com assuntos mais avançados do curso, facilita a integração e desenvolvimento de habilidades transversais, como liderança, proatividade e trabalho em equipe.
O Linusbot acontece uma vez por ano, e em 2024 não será diferente! O evento já tem data marcada e ocorrerá no dia 12 de setembro de 2024, no Anfiteatro da Faculdade de Engenharia (Anfiteatro da Cantina), durante o horário de almoço, sendo uma ótima oportunidade para todos participarem!
Com isso, o objetivo do texto de hoje é apresentar e explicar os componentes do carrinho.
O que é o Arduino e o Arduino IDE
O Arduino é uma plataforma de prototipagem eletrônica de código aberto que combina hardware e software fáceis de usar. Consiste em uma placa com um microcontrolador que pode ser programada para controlar sensores, atuadores e outros dispositivos eletrônicos. Amplamente utilizado em projetos de automação e interatividade, o Arduino é popular por sua simplicidade e versatilidade, facilitando a criação de protótipos e o aprendizado de eletrônica e programação. Seu microcontrolador pode ser programado utilizando a linguagem de programação do Arduino (baseada em C/C++) por meio do Arduino IDE (Integrated Development Environment), software que iremos utilizar hoje.
Incluindo bibliotecas no Arduino IDE
Uma biblioteca é um conjunto de código pré-escrito que pode ser reutilizado para facilitar o desenvolvimento do software, facilitando a conexão a um módulo e ajudando a poupar tempo do programador. Para fazer a inclusão de bibliotecas no Arduino, deve-se seguir os seguintes passos:
- Baixar a biblioteca (normalmente em arquivo .zip);
- Vá em Sketch > Incluir Biblioteca > Adicionar Biblioteca .ZIP
- Selecione o arquivo .zip da biblioteca e o Arduino IDE fará a instalação.
Após a instalação, para usar a biblioteca, é necessário incluí-la no início do código com: #include <nome_da_biblioteca.h>. No LinusBot, faremos o uso da biblioteca PETEletrica, o que ajudará na programação dos componentes.
As portas digitais do Arduino
O Arduino possui 14 pinos (numerados de 0 a 13) que podem ser configurados como entradas ou saídas digitais, estas apresentam dois estados: ativados (HIGH ou 1) ou desativados (LOW ou 0). Para o Arduino UNO, caso uma porta digital esteja ativada, há uma tensão de 5V, não apresentando valores intermediários, fornecendo no máximo 40mA por pino.
No Arduino IDE, temos duas funções principais:
- void setup (): Esta função é chamada uma única vez quando o programa é iniciado. Geralmente, é utilizada para configurar definições iniciais, como a configuração de pinos ou a inicialização de comunicações.
- void loop (): Esta função contém o código que deve ser executado repetidamente durante a operação do Arduino, criando um ciclo contínuo de execução.
Para configurar o pino especificado para que se comporte como uma entrada (input) ou como uma saída (output), utiliza-se a função pinMode().
A função digitalWrite() escreve um valor HIGH (5V) ou um valor LOW (0V) em um pino digital.
A função delay() faz com que o estado atual dure por mais tempo.
Para entender esses conceitos, faremos uma prática simples com um LED. A montagem e o código serão mostrados a seguir.
Antes de carregar o código para o Arduino, é necessário selecionar a placa que está sendo utilizada e a porta à qual ela está conectada.
- Para selecionar a placa, vá até o menu ‘Ferramentas’ e escolha a opção ‘Placa:’;
- Ainda no menu ‘Ferramentas’, clique na opção ‘Porta:’ para selecionar a porta à qual o Arduino está conectado.
O que é o PWM
O PWM (Pulse Width Modulation) no Arduino IDE é uma técnica usada para simular uma saída analógica usando pinos digitais. No Arduino, a função analogWrite() é usada para gerar um sinal PWM em pinos específicos. Esse sinal é uma onda quadrada, onde a largura do pulso (tempo que o sinal fica em nível alto) pode ser ajustada, variando de 0 a 255. Isso permite controlar a potência média entregue a dispositivos como LEDs, motores ou outros componentes eletrônicos. O PWM é útil para controlar brilho, velocidade e outras variáveis em dispositivos que não têm uma interface analógica direta.
O motor DC e a Ponte H
A Ponte H é um circuito eletrônico cuja principal função é controlar a velocidade e o sentido de rotação de motores DC escovados. No Linus, ela serve para interligar a bateria e o Arduino aos motores, pois o Arduino não consegue fornecer potência suficiente para alimentá-los.
OBS: Não alimente o pino 5V da ponte H com o 5V do Arduino, pois isso danifica a Ponte H.
Primeiramente, é necessário inicializar os motores, onde motores é a nossa classe e motor é o nosso objeto. IN1, IN2, IN3, e IN4 são os pinos aos quais os motores estão conectados.
Uma função do objeto motor é set_motors(X, Y), que é utilizada para controlar a velocidade dos motores, onde X representa a velocidade do motor da esquerda e Y representa a velocidade do motor da direita. O código abaixo mostra um exemplo de como utilizar essa função. A montagem do circuito também é apresentada.
O Sensor de Refletância
O sensor de refletância é responsável por indicar a posição relativa do carrinho e sua orientação enquanto ele segue a linha do circuito. Com os dados obtidos a partir desse sensor, é possível controlar o carrinho para que ele corrija a trajetória da melhor maneira possível.
Primeiramente é necessário criar um objeto da classe SensorInfravermelhoRC, que já está definida na biblioteca PETEletrica.
A função qtr.calibrate é responsável por calibrar os sensores, determinando os valores máximos e mínimos de refletância em uma superfície. Essa função é associada ao objeto qtr e deve ser utilizada no void setup().
A função qtr.readLine mede o nível de refletância de uma superfície através de cálculos com as leituras dos sensores e retorna um valor unsigned int, que é armazenado na variável position. Esse valor é obtido por meio de uma média ponderada entre os sensores ativos (0, 1, 2, 3, 4), o valor retornado por cada sensor e o número de sensores ativos no momento (N).
O código abaixo é um exemplo de como utilizar o sensor de refletância, onde o valor da variável position é exibido no Serial Monitor. Quando o sensor estiver no centro da linha, o valor lido deverá ser 2000. Além disso, a montagem do circuito também é mostrada.
O Sensor Ultrassônico
O sensor ultrassônico HC-SR04 é utilizado para detectar obstáculos e medir distâncias de 2 cm a 400 cm. No Linus, ele é usado para identificar obstáculos à frente do carrinho, podendo acionar o comando para desviar do objeto.
O sensor ultrassônico possui um emissor e um receptor de ondas sonoras. O emissor emite um sinal que é refletido ao colidir com uma superfície. O sinal refletido retorna ao sensor, sendo detectado pelo receptor.
No momento em que o emissor envia o sinal, ele aciona simultaneamente um “cronômetro” que mede o tempo que o receptor leva para detectar o sinal. Dessa forma, sabendo a velocidade do som e o tempo, é possível calcular a distância entre o sensor e o obstáculo que refletiu o ultrassom.
Os pinos Trig (emissor) e Echo (receptor) devem ser conectados a portas digitais do Arduino e declarados no programa. O código abaixo obtém o valor da distância através do sensor ultrassônico e exibe esse valor no Serial Monitor. A montagem do circuito também está disponível.
Sistemas de Controle no Linus
Um sistema de controle é um sistema inteligente capaz de se auto-corrigir para manter um parâmetro próximo a um valor de referência estipulado, minimizando ao máximo os distúrbios causados por fatores externos.
No Linusbot, o valor de referência é o centro da linha, e o erro é a distância do robô em relação a esse centro. Assim, o robô mantém uma velocidade constante enquanto o controlador ajusta a diferença de velocidade nas rodas para manter o robô na linha.
A variável position armazena a leitura dos sensores através da função qtr.readLine(sensors) (como descrito no tópico sobre o sensor de refletância), e a função set_motors recebe as velocidades das rodas (como descrito no tópico sobre motores DC e Ponte H). Com isso, temos os seguintes valores:
- ref = 2000 (centro do robô);
- kp = 0,0675 (parâmetro de controle);
- v = 120 (velocidade constante).
OBS: O valor de kp (parâmetro de controle) é uma estimativa e pode ser ajustado conforme necessário.
A partir desses valores, podemos realizar os seguintes passos:
- erro = ref – position;
- u = kp . erro;
- set_motors(v + u, v – u).
Onde v
é a velocidade constante e u
é a velocidade de correção que mantém o robô na linha.
Para esta última prática, utilizaremos os conhecimentos relacionados ao sensor de refletância, aos motores e à ponte H. Com isso, o código pode ser montado da seguinte maneira:
OBS: A montagem do circuito deve ser feita juntando a parte do sensor de refletância com a parte dos motores DC e a ponte H.
Conclusão
Em resumo, o Linusbot é um projeto fundamental para o desenvolvimento dos calouros, pois combina uma variedade de componentes eletrônicos e envolve conhecimentos relacionados à programação. Com a próxima edição do evento, os participantes terão a oportunidade de aplicar os conhecimentos adquiridos ao longo das aulas em um ambiente competitivo e colaborativo, o que é importante para o desenvolvimento acadêmico e profissional.