- Como construir obstáculo evitando robô usando sensor ultrassônico
- Componentes necessários
- Diagrama de circuito
- Obstáculo para evitar o robô usando Arduino - Código
O Obstacle Avoiding Robot é um dispositivo inteligente que pode detectar automaticamente o obstáculo à sua frente e evitá-lo girando em outra direção. Este projeto permite que o robô navegue em um ambiente desconhecido, evitando colisões, que é um requisito primário para qualquer robô móvel autônomo. A aplicação do robô para Evitar Obstáculos não é limitada e é usado na maioria das organizações militares agora, o que ajuda a realizar muitos trabalhos arriscados que não podem ser feitos por nenhum soldado.
Nós construímos anteriormente o Obstacle Avoiding Robot usando Raspberry Pi e usando PIC Microcontrolador. Desta vez, vamos construir um robô evitando Obstáculo usando um sensor ultrassônico e Arduino. Aqui, um sensor ultrassônico é usado para detectar os obstáculos no caminho, calculando a distância entre o robô e o obstáculo. Se o robô encontrar algum obstáculo, ele muda a direção e continua se movendo.
Como construir obstáculo evitando robô usando sensor ultrassônico
Antes de ir construir o robô, é importante entender como funciona o sensor ultrassônico, pois este sensor terá papel importante na detecção de obstáculo. O princípio básico por trás do funcionamento do sensor ultrassônico é anotar o tempo que o sensor leva para transmitir os feixes ultrassônicos e receber os feixes ultrassônicos após atingir a superfície. Em seguida, a distância é calculada usando a fórmula. Neste projeto, o amplamente disponível Sensor Ultrassônico HC-SR04 é usado. Para usar este sensor, uma abordagem semelhante será seguida explicada acima.
Portanto, o pino Trig do HC-SR04 é feito alto para pelo menos 10 nós. Um feixe sônico é transmitido com 8 pulsos de 40KHz cada.
O sinal então atinge a superfície e retorna e é capturado pelo pino Echo do receptor HC-SR04. O alfinete Echo já tinha feito alto na hora mandando alto.
O tempo gasto pelo feixe para retornar é salvo em variável e convertido em distância usando cálculos apropriados como abaixo
Distância = (Tempo x Velocidade do Som no Ar (343 m / s)) / 2
Usamos sensor ultrassônico em muitos projetos, para aprender mais sobre sensor ultrassônico, verifique outros projetos relacionados a sensor ultrassônico.
Os componentes para este obstáculo evitando o robô podem ser encontrados facilmente. Para fazer chassis, qualquer chassis de brinquedo pode ser usado ou personalizado.
Componentes necessários
- Arduino NANO ou Uno (qualquer versão)
- Sensor Ultrassônico HC-SR04
- Módulo Motor LM298N
- Motores 5V DC
- Bateria
- Rodas
- Chassis
- Jumper Wires
Diagrama de circuito
O diagrama de circuito completo para este projeto é fornecido abaixo, como você pode ver, ele usa um Arduino nano. Mas também podemos construir um robô evitando obstáculo usando Arduino UNO com o mesmo circuito (siga a mesma pinagem) e código.
Uma vez que o circuito está pronto, temos que construir nosso carro evitando obstáculos, montando o circuito em cima de um chassi robótico como mostrado abaixo.
Obstáculo para evitar o robô usando Arduino - Código
O programa completo com um vídeo de demonstração é fornecido no final deste projeto. O programa incluirá a configuração do módulo HC-SR04 e a saída dos sinais para os pinos do motor para mover a direção do motor de acordo. Nenhuma biblioteca será usada neste projeto.
Defina primeiro o pino trigonométrico e de eco de HC-SR04 no programa. Neste projeto, o pino trigonométrico está conectado ao GPIO9 e o pino de eco está conectado ao GPIO10 do Arduino NANO.
trigPin int = 9; // pino trigonométrico de HC-SR04 int echoPin = 10; // Echo pin de HC-SR04
Defina os pinos para entrada do Módulo Driver do Motor LM298N. O LM298N possui 4 pinos de entrada de dados usados para controlar a direção do motor conectado a ele.
int revleft4 = 4; // Movimento reverso do motor esquerdo int fwdleft5 = 5; // Movimento para frente do motor esquerdo int revright6 = 6; // Movimento reverso do motor direito int fwdright7 = 7; // Movimento para frente do motor direito
Na função setup () , defina a direção dos dados dos pinos GPIO utilizados. Os quatro pinos do motor e o pino de disparo são definidos como SAÍDA e o pino do eco é definido como entrada.
pinMode (revleft4, OUTPUT); // define os pinos do motor como saída pinMode (fwdleft5, OUTPUT); pinMode (revright6, OUTPUT); pinMode (fwdright7, OUTPUT); pinMode (trigPin, OUTPUT); // define o pino trigonométrico como saída pinMode (echoPin, INPUT); // define o pino de eco como entrada para capturar ondas refletidas
Na função loop () , obtenha a distância de HC-SR04 e com base na distância, mova a direção do motor. A distância mostrará a distância do objeto vindo na frente do robô. A distância é medida ao estourar um feixe de ultrassom até 10 us e recebê-lo após 10 us. Para saber mais sobre como medir distâncias usando sensor ultrassônico e Arduino, siga o link.
digitalWrite (trigPin, LOW); atrasoMicrosegundos (2); digitalWrite (trigPin, HIGH); // envia ondas por 10 us delayMicroseconds (10); duração = pulseIn (echoPin, HIGH); // receber ondas refletidas distância = duração / 58,2; // converter para distância delay (10);
Se a distância for maior que a distância definida significa que não há obstáculo em seu caminho e ele se moverá para frente.
if (distância> 19) { digitalWrite (fwdright7, HIGH); // avançar digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
Se a distância for menor que a distância definida para evitar obstáculo, significa que há algum obstáculo à frente. Então, nesta situação, o robô irá parar por um tempo e voltar para a frente novamente, parando por um tempo e então virar para outra direção.
if (distância <18) { digitalWrite (fwdright7, LOW); // Pare digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); atraso (500); digitalWrite (fwdright7, LOW); // movebackword digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); atraso (500); digitalWrite (fwdright7, LOW); // Pare digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); atraso (100); digitalWrite (fwdright7, HIGH); digitalWrite (revright6, LOW); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); atraso (500); }
Então é assim que um robô pode evitar obstáculos em seu caminho sem ficar preso em lugar nenhum. Encontre o código completo e o vídeo abaixo.