Como medir a distância entre dois pontos usando o Arduino?

Em eletrônica, na maioria das vezes os sensores ultrassônicos são usados ​​para medir a distância de um ponto específico a outro. É muito fácil escrever um código na placa Arduino e integrar um sensor ultrasônico para realizar esta tarefa. Mas, neste artigo, vamos adotar uma abordagem diferente. Vamos usar dois sensores ultrassônicos separados que serão integrados a dois Arduino separados. Esses dois módulos serão colocados em dois pontos diferentes entre os quais a distância deve ser medida. Um sensor será transformado em receptor e o outro em transmissor. Ao fazer isso, seremos capazes de medir a distância entre eles apenas localizando a posição do transmissor usando muitos receptores ultrassônicos. A técnica que estamos usando aqui é chamada Triangulação.



Medindo distâncias usando o Arduino

A técnica usada aqui é útil apenas em sistemas de pequena escala onde uma pequena distância pode ser encontrada. Para implementá-lo em grande escala, algumas modificações são certamente necessárias. Todos os desafios enfrentados na execução deste projeto são discutidos a seguir.



Como usar o Arduino e o sensor ultrassônico para medir a distância?

Como sabemos o resumo por trás do projeto, vamos seguir em frente e reunir mais informações para iniciar o projeto.



Etapa 1: reunindo os componentes (hardware)

Se quiser evitar qualquer inconveniente no meio de qualquer projeto, o melhor é fazer uma lista completa de todos os componentes que vamos usar. O segundo passo, antes de começar a fazer o circuito, é fazer um breve estudo de todos esses componentes. Uma lista de todos os componentes de que precisamos neste projeto é fornecida abaixo.



  • Jumper Wires
  • Adaptador 5 V AC para DC (x2)

Etapa 2: reunindo os componentes (software)

  • Proteus 8 Professional (pode ser baixado de Aqui )

Depois de baixar o Proteus 8 Professional, projete o circuito nele. Incluí simulações de software aqui para que seja conveniente para iniciantes projetar o circuito e fazer as conexões apropriadas no hardware.

Etapa 3: Funcionamento do HCR-05

Como agora conhecemos o resumo principal do nosso projeto, vamos seguir em frente e fazer um breve estudo do funcionamento do HCR-05 . Você pode entender o funcionamento principal deste sensor pelo diagrama a seguir.

Este sensor tem dois pinos, pino de gatilho, e pino ecológico que são usados ​​para medir a distância entre dois pontos específicos. O processo é iniciado com o envio de uma onda ultrassônica do sensor. Esta tarefa é realizada acionando o pino trigonométrico por 10us. Uma explosão sônica de 8 ondas ultrassônicas é enviada do transmissor assim que essa tarefa é concluída. esta onda irá viajar no ar e assim que atingir um objeto em seu caminho, será contraída e recebida pelo receptor embutido no sensor.



Quando a onda ultrassônica for recebida pelo receptor após refletir o sensor, ele colocará o pino ecológico a um estado elevado. Este pino permanecerá no estado alto pelo período de tempo que será exatamente igual ao tempo que a onda ultrassônica leva para viajar do transmissor e voltar para o receptor do sensor.

Para fazer o seu sensor ultrassônico transmissor só, basta fazer o pino trigonométrico como o pino de saída e enviar um pulso alto para este pino por 10us. Uma explosão ultrassônica será iniciada assim que isso for feito. Assim, sempre que a onda deve ser transmitida, apenas o pino de disparo do sensor ultrassônico deve ser controlado.

Não há como fazer o sensor ultrassônico como um receptor apenas porque o aumento do pino ECO não pode ser controlado pelo microcontrolador porque está relacionado ao pino trigonométrico do sensor. Mas há uma coisa que podemos fazer é cobrir o transmissor desse sensor ultrassônico com fita isolante de forma que nenhuma onda de UV saia. Então, o pino ECO deste transmissor não será afetado pelo transmissor.

Etapa 4: Funcionamento do circuito

Agora, como fizemos com que ambos os sensores funcionassem separadamente como um transmissor e um receptor, existe um grande problema que enfrentamos aqui. O receptor não saberá o tempo que a onda ultrassônica leva para viajar do transmissor ao receptor porque não sabe exatamente quando essa onda foi transmitida.

Para resolver este problema, o que temos que fazer é enviar um ALTO sinal para o ECO do receptor assim que a onda ultrassônica é transmitida pelo sensor do transmissor. Ou em palavras simples, podemos dizer que o ECO do receptor e o trigger do transmissor devem ser enviados para HIGH ao mesmo tempo. Então, para conseguir isso, de alguma forma faremos o trigger do receptor ficar alto assim que o trigger do transmissor for alto. Este gatilho do receptor permanecerá alto até que o pino ECO vá BAIXO . Quando um sinal ultrassônico for recebido pelo pino ECO do receptor, ele ficará BAIXO. Isso significa que o acionador do sensor do transmissor acaba de receber um sinal ALTO. Agora, assim que o ECO ficar baixo, vamos aguardar o atraso conhecido e colocar o gatilho do receptor em ALTO. Ao fazer isso, os disparos de ambos os sensores serão sincronizados e a distância será calculada sabendo o atraso de tempo da viagem da onda.

Etapa 5: montagem dos componentes

Embora estejamos usando apenas o transmissor de um sensor ultrassônico e o receptor do outro, é obrigatório conectar todos os quatro pinos do sensor ultrasônico para o Arduino. Para conectar o circuito, siga as etapas abaixo:

  1. Pegue dois sensores ultrassônicos. Cubra o receptor do primeiro sensor e o transmissor do segundo sensor. Use fita adesiva branca para este propósito e certifique-se de que os dois estão totalmente cobertos de forma que nenhum sinal saia do transmissor do segundo sensor e nenhum sinal entre no receptor do primeiro sensor.
  2. Conecte dois Arduino em duas placas de ensaio separadas e conecte seus respectivos sensores com eles. Conecte o pino de gatilho ao pino 9 do Arduino e o ecoPin ao pino 10 do Arduino. Ligue o sensor ultrassônico pelo 5V do Arduino e comum todos os fundamentos.
  3. Faça upload do código do receptor para o Arduino do receptor e o código do transmissor para o Arduino do transmissor.
  4. Agora abra o monitor serial do lado receptor e observe a distância que está sendo medida.

O diagrama de circuito deste projeto se parece com:

Diagrama de circuito

Etapa 6: Introdução ao Arduino

Se você ainda não estiver familiarizado com o IDE do Arduino, não se preocupe porque um procedimento passo a passo para configurar e usar o IDE do Arduino com uma placa de microcontrolador é explicado abaixo.

  1. Baixe a versão mais recente do Arduino IDE em Arduino.
  2. Conecte sua placa Arduino Nano ao seu laptop e abra o painel de controle. no painel de controle, clique em Hardware e som . Agora clique em Dispositivos e Impressoras. Aqui, encontre a porta à qual a placa do microcontrolador está conectada. No meu caso é COM14 mas é diferente em computadores diferentes.

    Encontrar o porto

  3. Clique no menu Ferramentas. e definir a placa para Arduino Nano no menu suspenso.

    Tabuleiro de Configuração

  4. No mesmo menu de ferramentas, defina a porta para o número da porta que você observou antes no Dispositivos e Impressoras .

    Porta de configuração

  5. No mesmo menu de ferramentas, defina o processador para ATmega328P (antigo Bootloader )

    Processador

  6. Baixe o código anexado abaixo e cole-o em seu Arduino IDE. Clique no Envio botão para gravar o código na placa do microcontrolador.

    Envio

Para baixar o código, Clique aqui.

Etapa 7: Compreendendo o Código

O código usado neste projeto é muito simples e muito bem comentado. Existem dois arquivos de códigos na pasta anexada. O código para o transmissor e um código para o lado do receptor são fornecidos separadamente. Faremos o upload desses códigos em ambas as placas Arduino respectivas. Embora seja autoexplicativo, é brevemente descrito a seguir.

Código para o lado do transmissor

1. No início, os pinos da placa Arduino são inicializados e serão conectados ao sensor ultrassônico. Em seguida, são declaradas as variáveis ​​que serão utilizadas para armazenar valores para o cálculo de tempo e distância durante o tempo de execução do código.

// define os números dos pinos const int trigPin = 9; // Conecte o pino trigonométrico do sensor ultrassônico ao pino 9 do Arduino const int echoPin = 10; // Conecte o pino eco do sensor ultrassônico ao pino 10 do Arduino // define as variáveis ​​de longa duração; // variável para armazenar o tempo gasto pela onda ultrassônica t travel int distance; // variável para armazenar distância calculada

2 configuração vazia () é uma função que é executada apenas uma vez no início, quando a placa é ligada ou o botão de habilitação é pressionado. Aqui, ambos os pinos do Arduino são declarados para serem usados ​​como ENTRADA e RESULTADO . A taxa de transmissão é definida nesta função. A taxa de transmissão é a velocidade em bits por segundo pela qual o microcontrolador se comunica com o sensor ultrassônico.

void setup () {pinMode (trigPin, OUTPUT); // Define o trigPin como um Output pinMode (echoPin, INPUT); // Define o echoPin como um Input Serial.begin (9600); // Inicia a comunicação serial}

3 - void loop () é uma função que é executada repetidamente em um loop. Aqui, codificamos o microcontrolador de modo que ele envie um sinal ALTO para o pino de disparo do sensor ultrassônico, aguarde 20 microssegundos e envie um sinal BAIXO para ele.

void loop () {// Define o trigPin no estado HIGH por 10 microssegundos digitalWrite (trigPin, HIGH); // envia um sinal HIGH no gatilho do primeiro sensor delayMicroseconds (10); // aguarde 10 microssegundos digitalWrite (trigPin, LOW); // envia um sinal BAIXO para o gatilho do primeiro sensor delay (2); // aguarde 0,2 segundos}

Código para o lado do receptor

1. No início, os pinos da placa Arduino são inicializados e serão conectados ao sensor ultrassônico. Em seguida, são declaradas as variáveis ​​que serão utilizadas para armazenar valores para o cálculo de tempo e distância durante o tempo de execução do código.

// define os números dos pinos const int trigPin = 9; // Conecte o pino trigonométrico do sensor ultrassônico ao pino 9 do Arduino const int echoPin = 10; // Conecte o pino eco do sensor ultrassônico ao pino 10 do Arduino // define as variáveis ​​de longa duração; // variável para armazenar o tempo gasto pela onda ultrassônica t travel int distance; // variável para armazenar distância calculada

2 configuração vazia () é uma função que é executada apenas uma vez na inicialização, quando a placa é ligada ou o botão de habilitação é pressionado. Aqui, ambos os pinos do Arduino são declarados para serem usados ​​como INPUT e OUTPUT. A taxa de transmissão é definida nesta função. A taxa de transmissão é a velocidade em bits por segundo pela qual o microcontrolador se comunica com o sensor ultrassônico.

void setup () {pinMode (trigPin, OUTPUT); // Define o trigPin como um Output pinMode (echoPin, INPUT); // Define o echoPin como um Input Serial.begin (9600); // Inicia a comunicação serial}

3 - void Trigger_US () é uma função que será chamada para Fake Triggering do trig pin do segundo sensor ultrassônico. Vamos sincronizar o tempo de disparo do pino trigonométrico de ambos os sensores.

void Trigger_US () {// Fake aciona o sensor dos EUA digitalWrite (trigPin, HIGH); // Envia um sinal HIGH para o pino de disparo do segundo sensor delayMicroseconds (10); // espera por 10 microssegundos digitalWrite (trigPin, LOW); // envia um sinal BAIXO para o segundo emissor do pino acionador}

Quatro. void Calc () é uma função usada para calcular o tempo que o sinal ultrassônico leva para viajar do primeiro sensor para o segundo sensor.

void Calc () // função para calcular o tempo que a onda ultrassônica leva para viajar {duração = 0; // duração inicialmente definida como zero Trigger_US (); // chama a função Trigger_US while (digitalRead (echoPin) == HIGH); // enquanto o status do eo pin em high delay (2); // coloca um atraso de 0,2 segundos Trigger_US (); // chama a duração da função Trigger_US = pulseIn (echoPin, HIGH); // calcule o tempo gasto}

5. Aqui no void loop () função, estamos calculando a distância usando o tempo gasto pelo sinal ultrassônico para viajar do primeiro sensor ao segundo sensor.

loop vazio () {Pdistance = distance; Calc (); // chama a função Calc () distance = duration * 0.034; // calculando a distância percorrida pela onda ultrassônica if (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ('Measured Distance:'); // imprime no monitor serial Serial.println (distance / 2); // imprimir no monitor serial} //Serial.print('Distance: '); //Serial.println(distance/2); atraso (500); // aguarde 0,5 segundos}