Projeto com Arduino e o sensor de distância HC-SR04 em conjunto com Servo Motor
Este projeto demonstra a utilização de sensores e motores com o Arduino através de uma aplicação interessante que pode ser exibida na feira de ciências do seu colégio. Pode ser útil também em aplicações de robótica, como robôs autônomos e outras infinidades de ideias.
Descrição
Vamos acoplar um sensor de distância a um servo motor. O servo vai ficar girando em uma faixa de 180 graus. O sensor vai mensurar as distâncias dos objetos ao seu redor e depois, no final do rastreamento, vai apontar para o objeto que está mais próximo.
Se você não conhece os dispositivos que citamos, sugiro que consulte os tutoriais na seção de referências.
Vídeo do Projeto em ação
Para entender melhor o propósito do projeto, veja uma demonstração em vídeo:
Componentes necessários
- Arduino – Qualquer Arduino compatível. Atente apenas para a tensão de operação que deve ser 5V, de preferência.
- Um Servo Motor 180 graus
- Sensor de distância HC-SR04
- Fios jumper
O ideal é fixar os componentes em uma base para evitar solavancos.
Esquema de ligação
Bibliotecas necessárias
- A biblioteca para o Servo já vem com a instalação da IDE do Arduino.
- A biblioteca que usei para controlar o sensor de distância HC-SR04 pode ser instalada pelo próprio gerenciador de bibliotecas do Arduino ou pelo GITHUB:
https://github.com/ErickSimoes/Ultrasonic
Sketch
/*
Projeto com Servo Motor e Sensor de Distância
O sensor irá rastrear o local num ângulo de 180 graus e identificar o objeto que está mais próximo
Janeiro de 2021, José Cintra
www.josecintra.com/blog
*/
#include “Servo.h” // Essa biblioteca é nativa da plataforma
#include <Ultrasonic.h> // Instalável pelo gerenciador de bibliotecas (Autor: Erik Simões)
// Configuração do sensor de distância com timeout de 40 ms
int trigger = 13;
int echo = 12;
Ultrasonic ultrasonico(trigger, echo, 40000UL);
// Configuração do Servo
Servo meuServo;
void setup() {
// Inicializar o Servo
meuServo.attach(9);
meuServo.write(0);
delay(100);
}
void loop() {
int menorDistancia;
int distancia;
int angulo;
int meuAngulo;
meuAngulo = 0;
meuServo.write(0);
delay(50);
menorDistancia = 400; // Precisão do sensor vai até 400 cm
// Inicia varredura em 180 graus de 5 em 5
for (angulo = 0; angulo <= 180; angulo += 5) {
// Posiciona o servo em cada ângulo
meuServo.write(angulo);
// Ler a distância
distancia = ultrasonico.read();
// Verificar a menor distância, desprezando leituras inválidas
if ((distancia > 0) && (distancia < 400) && (distancia < menorDistancia)) {
menorDistancia = distancia;
meuAngulo = angulo;
}
delay(100); //Pausa para a próxima leitura
}
delay(1000);
for (angulo = 180; angulo >= meuAngulo; angulo -= 5) {
meuServo.write(angulo);
delay(50);
}
}
Observações
- O ideal é ligar o servo motor em uma fonte de tensão externa;
- Existem diversos tipos de servo motores. Esté que usei é o micro servo de 180 graus;
- Sempre verifique as tensões entre a placa micorcontroladora e os dispositivos;
- Este é apenas um esboço de ideia de um projeto para feira de ciências. Ele pode ser incrementado, adicionando um buzzer e outras funcionalidades. No exemplo do vídeo, eu usei uma base de acrílico para fixar os componentes, mas você pode usar qualquer outro material. Pode usar fita dupla face para a fixação, por exemplo.
- Neste exemplo o servo motor percorre a faixa de 180 graus de 5 em 5. Isso pode ser facilmente modificado de acordo com a necessidade
Referências
- Como usar com Arduino – Micro Servo Motor SG90 9g
- Como usar com Arduino – Sensor Ultrasonico HC-SR04
- Arduino library for HC-SR04 ultrasonic distance sensor