O sensor funciona basicamente da seguinte maneira:
- Um sinal de 10 microsegundos é enviado ao sensor.
- O sensor automaticamente envia o sinal e recebe de volta.
- Se o sinal voltar o tempo gasto é retornado pelo circuito.
Requisitos de hardware.
1 Arduino
1 HC-SR04
Circuito.
O circuito é muito simples, basta conectar o VCC do sensor aos 5v do Arduino, GND ao GND, Echo a porta digital 10 e Trig a porta digital 12.
Imagem desenvolvida com o Fritzing
Código.
#define triggerPin 12
#define echoPin 10
void setup() {
// Configura a saída serial para recuperar a leitura do sensor
Serial.begin(9600);
// Configura a porta digital em modo saida
pinMode(triggerPin, OUTPUT);
// Configura a porta digital em modo entrada
pinMode(echoPin, INPUT);
}
void loop() {
// Envia um sinal de 10ms ao sensor
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
// O sensor calcula o tempo gasto entre o envio e o recebimento
// do sinal e retorna um pulso com esta duração
long duration = pulseIn(echoPin, HIGH);
// Converte o tempo para distancia em centimetros
float cm = microsecondsToCentimeters(duration);
// Informa a distancia na serial
Serial.println(cm, DEC);
delay(1000);
}
float microsecondsToCentimeters(long microseconds){
// Converte o tempo de microsegundos para segundos
float seconds = (float) microseconds / 1000000.0;
// Com a velocidade do som de 340m/s calcula-se a
// distancia percorrida
float distance = seconds * 340;
// Divide o resultado por dois pois o tempo é calculado
// considerando a ida e a volta do sinal
distance = distance / 2;
// Converte o resultado em metros para centimetros
distance = distance * 100;
return distance;
}
Referências.
Cara, tudo bom ?
ResponderExcluirSensacional a explicação, mas me esclarece uma coisa por favor. Existe a possibilidade de eu usar mais de um sensor por arduino?
Estou tentando, mas até agora sem sucesso. Será que vai conflitar alguma entrada de dados? Ou é razoavelmente simples e eu devo estar errando a lógica mesmo ?
Um abraço
Acho que você terá que usar outras duas portas para cada sensor, vamos supor:
ResponderExcluir#define triggerPin2 13
#define echoPin2 11
Aí na parte loop do seu código em cada instrução de gravação e leitura vc duplica inserindo seu sensor adicional.
A mesma porta para mais de um sensor acho que não dá, talvez a trigger possa ser comum.
Abs.
Cara na verdade já até fiz, to usando 6 sensores por arduino.
ResponderExcluirAgora estou agarrado código porque tenho que montar um projeto que utiliza coincidências de sensores.
Se puder me adicionar no email ou até facebook eu seria eternamente grato kkkkk
Abraços
Kerleston, boa tarde cara!
ResponderExcluirMe explica uma coisa. Por ele ser ultra sônico e emitir os pulsos constantemente ... não daria para por exemplo: Se algo ficar na frente por 30 seg eu ter como saber ? Ou como os pulsos são constantes, a cada pulso ele contaria esses "30 seg" ?
Espero que tenha ficado claro a minha intenção, caso não tenha, é só me falar.
Abraços e muito obrigado
Desculpe, só vi agora sua mensagem.
ResponderExcluirSe eu entendi você precisa saber se tem algo na frente.
O que você pode fazer é na inicialização pegar a medida inicial considerando que não há nada ali e que o sensor esteja fixo.
Qualquer leitura diferente da inicial é pq tem algo na frente, aí você pode observar a variação da distancia pra saber se alguém passou por ali.
Fiz um contador assim uma vez.