Nesta prática você vai aprender a controlar o Servo Motor…
Como usar com Arduino – Sensor Ultrasonico HC-SR04
– Descrição:
O Sensor Ultrasonico HC-SR04 é aplicado com mais frequência em projetos de robótica, principalmente em chassis robóticos, robôs ou carrinhos. O sensor é capaz de medir com precisão (3mm de margem de erro) distâncias de 2cm até 4m.
A composição do Sensor Ultrasonico HC-SR04 é feita de um emissor e um receptor ultrassônico, onde o sensor emite (emissor) sinais ultrassônicos que serão refletidos no obstáculo / objeto retornando ao sensor (receptor). Com base no tempo que o sinal emitido levou para retornar ao sensor, o mesmo efetua o cálculo da distância.
– Especificações e características:
– Tensão de operação: 5VDC
– Corrente de operação: 15mA
– Faixa de detecção (ângulo): ±15º
– Alcance: 2cm a 4m
– Margem de erro: ±3mm
– Datasheet:
– Aplicações:
Projetos com Arduino ou outras plataformas microcontroladas em que seja necessário fazer medição de distâncias.
– Proposta da prática:
Utilizar o Sensor Ultrasonico HC-SR04 em conjunto com o Arduino para fazer a medição da distância de um objeto. A distância medida será mostrada no monitor serial do ambiente de programação do Arduino.
– Lista dos itens necessários:
01 – Arduino com Cabo USB
01 – Sensor Ultrasonico HC-SR04
01 – Protoboard
04 – Cabos Jumper macho-macho
– Esquema de ligação da prática
– Tutorial de instalação e configuração do ambiente de programação do Arduino:
Arduino – Instalação e Configuração da IDE no Windows
– Biblioteca:
Download biblioteca Ultrasonic
– Importando bibliotecas para o ambiente de programação do Arduino:
Arduino – Importando bibliotecas para a IDE
– Código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include "Ultrasonic.h" //INCLUSÃO DA BIBLIOTECA NECESSÁRIA PARA FUNCIONAMENTO DO CÓDIGO const int echoPin = 7; //PINO DIGITAL UTILIZADO PELO HC-SR04 ECHO(RECEBE) const int trigPin = 6; //PINO DIGITAL UTILIZADO PELO HC-SR04 TRIG(ENVIA) Ultrasonic ultrasonic(trigPin,echoPin); //INICIALIZANDO OS PINOS DO ARDUINO int distancia; //VARIÁVEL DO TIPO INTEIRO String result; //VARIÁVEL DO TIPO STRING void setup(){ pinMode(echoPin, INPUT); //DEFINE O PINO COMO ENTRADA (RECEBE) pinMode(trigPin, OUTPUT); //DEFINE O PINO COMO SAIDA (ENVIA) Serial.begin(9600); //INICIALIZA A PORTA SERIAL } void loop(){ hcsr04(); // FAZ A CHAMADA DO MÉTODO "hcsr04()" Serial.print("Distancia "); //IMPRIME O TEXTO NO MONITOR SERIAL Serial.print(result); ////IMPRIME NO MONITOR SERIAL A DISTÂNCIA MEDIDA Serial.println("cm"); //IMPRIME O TEXTO NO MONITOR SERIAL } //MÉTODO RESPONSÁVEL POR CALCULAR A DISTÂNCIA void hcsr04(){ digitalWrite(trigPin, LOW); //SETA O PINO 6 COM UM PULSO BAIXO "LOW" delayMicroseconds(2); //INTERVALO DE 2 MICROSSEGUNDOS digitalWrite(trigPin, HIGH); //SETA O PINO 6 COM PULSO ALTO "HIGH" delayMicroseconds(10); //INTERVALO DE 10 MICROSSEGUNDOS digitalWrite(trigPin, LOW); //SETA O PINO 6 COM PULSO BAIXO "LOW" NOVAMENTE //FUNÇÃO RANGING, FAZ A CONVERSÃO DO TEMPO DE //RESPOSTA DO ECHO EM CENTIMETROS, E ARMAZENA //NA VARIAVEL "distancia" distancia = (ultrasonic.Ranging(CM)); //VARIÁVEL GLOBAL RECEBE O VALOR DA DISTÂNCIA MEDIDA result = String(distancia); //VARIÁVEL GLOBAL DO TIPO STRING RECEBE A DISTÂNCIA(CONVERTIDO DE INTEIRO PARA STRING) delay(500); //INTERVALO DE 500 MILISSEGUNDOS } |
– Resultado final:
Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Como usar com Arduino – Módulo Joystick KY-023
Próxima postagem: Como usar com Arduino – Micro Servo Motor SG90 9g
Boa tarde,
Estou a a produzir uma escultura que interaje com o público, para isto, resolvi tentar usar o arduino com sensores ultra-sônicos hcsr04 para medir distancias de interação que fazem acionar os relés onde estão ligados os motores que movimentam partes da escultura.
Consegui fazer um relé funcionar com um sensor mas quando adiciono mais um tudo fica baralhado e os relés abrem e fecham os circuitos constantemente. Não estou a conseguir encontrar soluções semelhantes onde possa saber qual ou quais as minhas falhas. Envio o meu código que fiz o upload na minha placa mega 2560.
Podem me ajudar? estou a ficar com pouco tempo para a exposição e já não sei o que fazer…
Obrigado por tudo e pelo excelente trabalho desenvolvido aqui.
Henrique Richard
//#define tINT 2 // Total number of interrupts
#define trigPin1 6 //Define the HC-SE04 triger on pin 6 on the arduino
#define echoPin1 7 //Define the HC-SE04 echo on pin 5 on the arduino
#define trigPin2 6 //Define the HC-SE04 triger on pin 6 on the arduino
#define echoPin2 8 //Define the HC-SE04 echo on pin 5 on the arduino
#define bulb 11 //Define the relay signal on pin 9 on the arduino
#define bulb1 10 //Define the relay signal on pin 10 on the arduino
void setup()
{
Serial.begin (9600); //Start the serial monitor
pinMode(trigPin1, OUTPUT); //set the trigpin to output
pinMode(echoPin1, INPUT); //set the echopin to input
pinMode(trigPin2, OUTPUT); //set the trigpin to output
pinMode(echoPin2, INPUT); //set the echopin to input
pinMode (bulb, OUTPUT); //set the bulb on pin 9 to output
pinMode (bulb1, OUTPUT); //set the bulb on pin 9 to output
}
void loop()
{
int duration, distance; //Define two intregers duration and distance to be used to save data
digitalWrite(trigPin1, HIGH); //write a digital high to the trigpin to send out the pulse
digitalWrite(trigPin2, HIGH); //write a digital high to the trigpin to send out the pulse
delayMicroseconds(1500); //wait half a millisecond
digitalWrite(trigPin1, LOW); //turn off the trigpin
digitalWrite(trigPin2, LOW); //turn off the trigpin
duration = pulseIn(echoPin1, HIGH); //measure the time using pulsein when the echo receives a signal set it to high
duration = pulseIn(echoPin2, HIGH); //measure the time using pulsein when the echo receives a signal set it to high
distance = (duration/2) / 29.1; //distance is the duration devided by 2 becasue the signal traveled from the trigpin then back to the echo pin, then divide by 29.1 to convert to centimeters
if (distance < 10) //if the distance is less than 10 CM
{
Light(); //execute the Light subroutine below
}
Serial.print(distance); //Dispaly the distance on the serial monitor
Serial.println(" CM"); //in centimeters
delay(500); //delay half a second
}
void Light() //Start the Light subroutine
{ digitalWrite(bulb, HIGH); //turn on the light
digitalWrite(bulb1, HIGH); //turn on the light
delay (3500); //wait 31.5 seconds 31500
digitalWrite(bulb, LOW); //turn off the light
digitalWrite(bulb1, LOW); //turn off the light
}
Olá Alessandro.
Agradeço pelo comentário!
Pode ser problema no sensor ou mau contato no esquema de ligação, pois a prática funciona e inclusive no final da mesma tem vídeo mostrando o resultado final.
Olá Tudo bem?
Comprei um sensor HC-SDO4 para instalar na minha cisterna e controlar a quantidade de água com Arduino.
está funcionando perfeitamente no protoboard com o sensor, até ai tudo certo.
o Arduino fica a 4 metros da entrada da cisterna, onde passei um cabo manga de 4 vias e conectei o sensor em um local onde seco.
quando conecto no Arduino, o sensor não responde mais. Estou usando alimentação de fonte com 9V e 1A.
Vocês já tiveram alguma experiência parecida? o que vocês sugerem?
Não sou profissional e faço isso somente por Hobby e a ajuda de vocês será fundamental para esse projeto
Super obrigado
Olá
Eu fui fazer o teste e a programação desta linha está errada
distancia = (ultrasonic.Ranging(CM)); //VARIÁVEL GLOBAL RECEBE O VALOR DA DISTÂNCIA MEDIDA
Olá Beatriz.
Agradeço pelo comentário!
Não tem nenhuma linha errada no código, até porque é tudo testado antes de disponibilizar aqui no Blog e no final da postagem tem o vídeo que mostra tudo funcionando perfeitamente.
Olá, no meu está aparecendo o erro “‘class Ultrasonic’ has no member named ‘Ranging'”
Pode me ajudar? Obrigado desde já
Olá Diego.
Agradeço pelo comentário!
Provavelmente não instalou a biblioteca corretamente.
Eu estou iniciando um projeto que, detectaria se existe ou nao um objeto em um local, por exemplo, se existe um carro ou não em um determinado lugar.
Será que esse sensor seria o ideal? ou existe outros mais adequados ?
adorei a explicação!!
Olá Alfredo.
Agradeço pelo comentário!
Vlw!!!
gostei muito ; )
Olá Nin.
Agradeço pelo comentário!