PROGRAMAÇÃO ARDUÍNO E SENSORES ULTRASSÔNICOS HC - SR04

Olá, boa noite pessoal.

Estou iniciando projetos na área de automação e controle, bem como também na área de eletrônicos.
O projeto que estou fazendo utilizo 3 sensores ultrassônicos HC-SR04 para calcular distâncias variadas (cada sensor irão informar distâncias diferentes). Fiz um código, porém quando ativo o monitor serial, as distâncias de cada sensor sempre permanece em zero. Qual seria a possível solução para esse problema?

Abaixo está o código que fiz, com seus devidos comentários.

Agradeço desde já!!!

int Sensor1=2; //PINO DIGITAL 2 DO ARDUÍNO UNO - TRIG DO SENSOR ULTRA 1
int Sensor2=7; //PINO DIGITAL 7 DO ARDUÍNO UNO - TRIG DO SENSOR ULTRA 2
int Sensor3=12; //PINO DIGITAL 12 DO ARDUÍNO UNO -TRIG DO SENSOR ULTRA 3
int Sensor11=4; //PINO DIGITAL 4 DO ARDUÍNO UNO - ECHO DO SENSOR ULTRA 1
int Sensor22=8; //PINO DIGITAL 8 DO ARDUÍNO UNO - ECHO DO SENSOR ULTRA 2
int Sensor33=13;//PINO DIGITAL 13 DO ARDUÍNO UNO -ECHO DO SENSOR ULTRA 3

float tempo1; //VARIÁVEL QUE GUARDA O TEMPO DA EMISSÃO E REFLEXÃO DA ONDA DO SENSOR 1
float tempo2; //VARIÁVEL QUE GUARDA O TEMPO DA EMISSÃO E REFLEXÃO DA ONDA DO SENSOR 2
float tempo3; //VARIÁVEL QUE GUARDA O TEMPO DA EMISSÃO E REFLEXÃO DA ONDA DO SENSOR 3
float distancia1; //VARIÁVEL QUE GUARDA A DISTÂNCIA CALCULADA DO SENSOR 1
float distancia2; //VARIÁVEL QUE GUARDA A DISTÂNCIA CALCULADA DO SENSOR 2
float distancia3; //VARIÁVEL QUE GUARDA A DISTÂNCIA CALCULADA DO SENSOR 3

void setup() {

digitalWrite(Sensor1, OUTPUT); //HABILITA O SENSOR1 (TRIG 1) COMO SAÍDA
digitalWrite(Sensor2, OUTPUT); //HABILITA O SENSOR2 (TRIG 2) COMO SAÍDA
digitalWrite(Sensor3, OUTPUT); //HABILITA O SENSOR3 (TRIG 3) COMO SAÍDA

digitalWrite(Sensor1, LOW); //HABILITA O SENSOR 1 (TRIG 1) PARA O NÍVEL LÓGICO BAIXO
digitalWrite(Sensor2, LOW); //HABILITA O SENSOR 2 (TRIG 2) PARA O NÍVEL LÓGICO BAIXO
digitalWrite(Sensor3, LOW); //HABILITA O SENSOR 3 (TRIG 3) PARA O NÍVEL LÓGICO BAIXO
delay(10);

digitalWrite(Sensor11, INPUT); //HABILITA O SENSOR11 (ECHO 1) COMO ENTRADA
digitalWrite(Sensor22, INPUT); //HABILITA O SENSOR22 (ECHO 2) COMO ENTRADA
digitalWrite(Sensor33, INPUT); //HABILITA O SENSOR33 (ECHO 3) COMO ENTRADA

Serial.begin(9600);
Serial.println("Lendo dados dos sensores...");
delay(1000);
}

void loop(){

digitalWrite(Sensor1, HIGH); //HABILITA O SENSOR1 PARA O NÍVEL LÓGICO ALTO
digitalWrite(Sensor2, HIGH); //HABILITA O SENSOR2 PARA O NÍVEL LÓGICO ALTO
digitalWrite(Sensor3, HIGH); //HABILITA O SENSOR3 PARA O NÍVEL LÓGICO ALTO

delay(10);

digitalWrite(Sensor1, LOW); //HABILITA O SENSOR1 PARA O NÍVEL LÓGICO BAIXO
digitalWrite(Sensor2, LOW); //HABILITA O SENSOR2 PARA O NÍVEL LÓGICO BAIXO
digitalWrite(Sensor3, LOW); //HABILITA O SENSOR3 PARA O NÍVEL LÓGICO BAIXO

tempo1=pulseIn(Sensor11, HIGH); //CALCULA O TEMPO QUE A ONDA É EMITIDA (TRIG 1) PARA O OBJETO, E NELE RELFETIDA (ECHO 1)
tempo2=pulseIn(Sensor22, HIGH); //CALCULA O TEMPO QUE A ONDA É EMITIDA (TRIG 2) PARA O OBJETO, E NELE REFLETIDA (ECHO 2)
tempo3=pulseIn(Sensor33, HIGH); //CALCULA O TEMPO QUE A ONDA É EMITIDA (TRIG 3) PARA O OBJETO, E NELE REFLETIDA (ECHO 3)

distancia1=(tempo1)/29.4/2; //CALCULA A DISTÂNCIA ENTRE O SENSOR 1 E O OBJETO
distancia2=(tempo2)/29.4/2; //CALCULA A DISTÂNCIA ENTRE O SENSOR 2 E O OBJETO
distancia3=(tempo3)/29.4/2; //CALCULA A DISTÂNCIA ENTRE O SENSOR 3 E O OBJETO

Serial.println("Distância 1: ");
Serial.println(distancia1);
Serial.println("Distância 2: ");
Serial.println(distancia2);
Serial.println("Distância 3: ");
Serial.println(distancia3);

delay(20);

}

Exibições: 606

Responder esta

Respostas a este tópico

Tente fazer o seguinte:

digitalWrite(Sensor1, LOW); //HABILITA O SENSOR1 PARA O NÍVEL LÓGICO BAIXO
digitalWrite(Sensor2, LOW); //HABILITA O SENSOR2 PARA O NÍVEL LÓGICO BAIXO
digitalWrite(Sensor3, LOW); //HABILITA O SENSOR3 PARA O NÍVEL LÓGICO BAIXO

delay(2);

digitalWrite(Sensor1, HIGH); //HABILITA O SENSOR1 PARA O NÍVEL LÓGICO ALTO
digitalWrite(Sensor2, HIGH); //HABILITA O SENSOR2 PARA O NÍVEL LÓGICO ALTO
digitalWrite(Sensor3, HIGH); //HABILITA O SENSOR3 PARA O NÍVEL LÓGICO ALTO

delay(5);

digitalWrite(Sensor1, LOW); //HABILITA O SENSOR1 PARA O NÍVEL LÓGICO BAIXO
digitalWrite(Sensor2, LOW); //HABILITA O SENSOR2 PARA O NÍVEL LÓGICO BAIXO
digitalWrite(Sensor3, LOW); //HABILITA O SENSOR3 PARA O NÍVEL LÓGICO BAIXO

Ou use a library para facilitar:

http://blog.filipeflop.com/sensores/sensor-ultrassonico-hc-sr04-ao-...

Tentei usar esse que vc mandou, porém está acontecendo algo estranho. Carrego o código, ativo o serial, e observo o seguinte: Quando energizo os sensores eles param de fornecer a distância, e fica só em zero. Ou sejo, quando eles estão conectados só com as portas digitais, sem está energizado, eles fornecem a distância, quando energizo, a distância fica só em zero. No meu entendimento os sensores só deveriam funcionar após está energizado, correto? E outro, verifiquei se estava curtucircuitando mas não estou rs. 

Agora deu certo, usei a library. Bem mais simples.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço