Medição de distância sem fio usando sensor ultrassônico (Parte 18/23)

Medição de distância sem fio usando sensor ultrassônico (Parte 18/23)

A medição de distância tem aplicações importantes em aplicações automotivas e industriais. A medição de distância através de sensores é útil na detecção de obstáculos e na medição de níveis de fluidos em tanques e contêineres automotivos. É o recurso de medição de distância que permitiu imaginar carros e robôs autônomos. Sem uma tecnologia que pudesse ter permitido medir a distância a um objeto ou obstáculo, o conceito de condução autónoma nunca teria sido pensado. O aplicativo de medição de distância também é utilizado nas indústrias para verificar níveis de combustível em aeronaves e veículos de transporte comercial. O aplicativo é utilizado em robótica para equipar robôs autônomos para detectar obstáculos e encontrar um caminho acessível. Este projeto também é uma aplicação de medição de distância utilizando sensores ultrassônicos.

Protótipo de medidor de distância sem fio baseado em Arduino

Fig. 1: Protótipo de medidor de distância sem fio baseado em Arduino

Qualquer aplicação de medição de distância possui um circuito sensor e um atuador ou circuito display (para realizar mudança de caminho de acordo com a detecção de obstáculo ou exibir a leitura de distância respectivamente). Freqüentemente, esses circuitos são conectados por meio de uma linha fixa para transmissão de dados entre os dois. Este projeto utilizou um módulo RF 434 para transmitir leitura de distância em vez de usar um barramento com fio. Desta forma, o projeto pode ser facilmente implantado em qualquer ambiente industrial onde a instalação do cabo entre o circuito do sensor e o circuito do atuador/display possa ser arriscada ou mais cara. Um módulo RF tem alcance operacional típico de 50 a 60 metros e pode ser estendido para 300 a 350 metros usando uma antena e maior potência de transmissão. Desta forma, o sistema de medição de distância sem fio pode ser implantado em qualquer local e ter operações de supervisão ou controle ativadas a partir de um local remoto.

O projeto utiliza um sensor ultrassônico para medir distâncias (e o sensor utilizado pode medir distâncias de 2 a 400 cm) e é construído no Arduino Pro Mini. Um LCD 16X2 é usado no circuito de exibição para mostrar as leituras medidas. Um transmissor e receptor RF 434 formam a ponte sem fio entre o circuito do sensor e o circuito do display.

Componentes necessários

Sr. Não. Componentes necessários Quantidade Requerida
1 Módulo RF Rx (434 MHz) 1
2 Módulo RF Tx (434Mhz) 1
3 Sensor ultrasônico 1
4 LCD 1
5 Pote de 1k 1
6 resistor de 10k 1
7 Placa de desenvolvimento Arduino pro mini 2
8 Bateria – 9V 2
9 Tábua de ensaio 2
10 Conectando fios

Imagem mostrando o funcionamento do medidor de distância sem fio baseado em Arduino

DIAGRAMA DE BLOCO

Conexões de Circuito

Existem dois circuitos no projeto – Circuito Sensor e Circuito Display. O circuito do sensor é construído em um Arduino Pro Mini. O sensor ultrassônico está conectado aos pinos 2 e 4 do Arduino. O sensor ultrassônico possui quatro pinos – Terra (Pino 1), Eco (Pino 2), Trigger (Pino 3) e Trigger. Os pinos VCC e terra são conectados ao VCC e ao terra, respectivamente. O pino Echo está conectado ao pino 4 da placa Arduino, enquanto o pino Trigger está conectado ao pino 2 da placa Arduino. Um transmissor RF é conectado diretamente ao Arduino Pro Mini com o pino 2 conectado ao pino 12 da placa para saída de dados seriais e possui uma antena conectada ao pino 4 do módulo.

Medição de distância sem fio usando sensor ultrassônico

Fig. 2: Imagem mostrando o funcionamento do medidor de distância sem fio baseado em Arduino

O outro circuito é o circuito de exibição. Possui um receptor RF conectado ao Arduino Pro Mini com o pino 2 conectado ao pino 11 da placa para entrada de dados seriais. Uma antena é conectada ao pino 8 do receptor RF. Um LCD é conectado à placa Arduino para mostrar a leitura da distância. O display LCD 16X2 é conectado à placa Arduino conectando seus pinos de dados aos pinos 7 a 4 da placa Arduino. Os pinos RS e E do LCD estão conectados aos pinos 3 e 2 do Arduino Pro Mini, respectivamente. O pino RW do LCD está aterrado.

LCD ARDUINO UNO
RS 3
RW GRND
E 2
D7,D6,D5,D4 7,6,5,4 respectivamente
A biblioteca de códigos padrão para interface do Arduino UNO e Arduino Pro Mini é usada no projeto para programar o LCD com a placa.

Como funciona o circuito

O sensor ultrassônico funciona segundo o princípio do eco das ondas sonoras. Quando um pulso ALTO de 10useg é passado para o pino de disparo do sensor, ele transmite oito ondas de 40KHz de disparos de pulso sônico ALTO consecutivamente. Um sinal de pulso alto sai do pino de eco conforme a onda ultrassônica é transmitida. Esta onda ao colidir com um obstáculo é refletida de volta e detectada pelo sensor. Ao detectar a onda novamente, o sinal de pulso alto do pino de eco do sensor é encerrado. O sinal recebido do pino de eco é de natureza analógica. A distância do obstáculo pode ser medida medindo o tempo máximo do pino de eco. Este é o tempo entre a transmissão e a reflexão da onda sonora. A distância é dada pelas fórmulas -:

Distância de teste = (tempo de alto nível × velocidade do som (340M/S)) / 2

O tempo multiplicado pela velocidade é dividido por 2, pois o tempo necessário para a onda sônica atingir o obstáculo e retornar. Portanto a medida da distância em cm pode ser dada pelas fórmulas –:

Distância de teste = (tempo de alto nível × velocidade do som (340M/S)) / 2

= (tempo de alto nível (microssegundo) × velocidade do som (340M/S)) / 2

= tempo de nível alto x 340/2000000 m

= tempo de alto nível x 34.000/2.000.000 cm

= tempo de alto nível x 34.000/2.000.000 cm

O sensor ultrassônico emite o pulso alto do pino 2, que é detectado no pino 12 da placa Arduino. O código do programa mede a duração do pulso e a digitaliza em um valor de distância usando as fórmulas indicadas acima. A medição da distância é transmitida em série usando o transmissor RF na forma de caracteres decimais.

Imagem do medidor de distância sem fio baseado em Arduino

Fig. 3: Diagrama de circuito do medidor de distância sem fio baseado em Arduino

No circuito de exibição, os caracteres decimais correspondentes à medição da distância são recebidos pelo receptor RF e passados ​​​​em série para o pino 11 do Arduino Pro Mini do lado do receptor. O Arduino do lado do receptor possui o programa incorporado para armazenar os caracteres recebidos serialmente em um buffer de memória e passar os caracteres armazenados em buffer para o LCD 16X2 em um formato apresentável. Confira o código do programa Arduino do lado do transmissor para saber como a largura do pulso do sensor ultrassônico é medida e a medição é convertida em caracteres decimais para apresentação. Em seguida, verifique o código do programa do lado do transmissor para saber como os caracteres recebidos são colocados no buffer e exibidos no LCD.

Guia de programação

No Arduino do lado do transmissor, primeiro as bibliotecas padrão são importadas. A biblioteca VirtualWire é importada para acessar a entrada analógica do Sensor Ultrassônico.

#include

Existem duas constantes definidas “trigpin” mapeadas para o pino 2 onde o pino de disparo do sensor ultrassônico está conectado e “echopin” onde o pino de eco do sensor ultrassônico está conectado.

Uma matriz “Distância” do tipo caractere é criada para armazenar caracteres correspondentes ao valor da distância medida.

Uma função setup é chamada onde a taxa de transmissão da placa Arduino é definida para 9600 bits por segundo usando a função Serial.begin .

A função vw_setup é usada para definir a taxa de dados para transmissão serial para 2.000 bits por segundo.

Uma função loop é chamada, onde são declaradas a variável “duration” para armazenar a duração da largura do pulso, a variável “distance” para armazenar o valor da distância em metros e a variável “cm” para armazenar o valor da distância em cm.

O disparo de pulso de 10uS é gerado no pino de disparo, definindo a variável “trigpin” para saída usando a função pinMode . Um LOW é passado para o pino de disparo como início do disparo de pulso por dois microssegundos seguido por um pulso HIGH de 10 microssegundos, então o pino de disparo é definido como LOW para encerrar o disparo de pulso.

O echopin é definido para entrada usando a função pinMode . A duração do pulso HIGH no pino de eco é medida usando a função pulseIn e armazenada na variável “duração”.

A medição da largura do pulso é convertida em medição de distância usando as fórmulas tempo-velocidade. A medida está em metro que é convertida para centímetro multiplicando por 100.

A medição da distância em cm é armazenada no buffer do microcontrolador usando a função Serial.print junto com a string “cm”. A medição da distância em cm é convertida em valor de caractere e armazenada na matriz Distância usando itoa função de conversão de número inteiro para caractere.

O LED conectado no pino 13 é aceso para indicar transmissão de dados em andamento. O valor da distância é enviado serialmente para o transmissor RF usando a função vw_send onde os caracteres são convertidos em caracteres não assinados como parâmetro. A função vw_wait_tx é usada para o microcontrolador solicitar push to talk até que todos os caracteres sejam transmitidos serialmente. O LED está apagado para indicar que a leitura da distância foi transmitida com sucesso.

Isso encerra a função loop e, portanto, o código do programa do lado do transmissor.

Na placa Arduino do lado do receptor, bibliotecas padrão são importadas. O Liquidcrystal.h é importado para realizar interface LCD e exibição de conteúdo. Um array “lcd” é criado com pinos interligados ao LCD mapeados para o objeto LiquidCrystal. A biblioteca VirtualWire é importada para ler dados seriais do receptor RF.

Variáveis ​​globais adicionais são declaradas – “ledpin” mapeado para o pino 13 onde o LED indicador de recepção está conectado, “Data” para armazenar o valor inteiro da leitura de distância e array de distância para ler um a um caractere do buffer de caracteres recebidos.

Uma função setup é criada para executar o código de inicialização. Dentro da função, a taxa de transmissão do Arduino é definida para 9.600 bits por segundo usando a função Serial.begin . O lcd é configurado para o modo 16X2 usando a função lcd.begin . As mensagens iniciais piscam e o cursor é colocado na primeira linha do display. A função pinMode é usada para definir a saída dos pinos conectados ao LCD.

O módulo transmissor e receptor de RF não possui pino Push To Talk. Eles ficam inativos quando nenhum dado está presente para transmitir ou receber, respectivamente. Portanto, vw_set_ptt_inverted(true) é usado para configurar a polaridade push to talk e solicitar que o receptor continue recebendo dados após buscar o primeiro caractere. A taxa de transmissão para entrada serial é definida para 2.000 bits por segundo usando a função vw_setup . A recepção dos dados é iniciada usando vw_rx_start .

Uma função loop é chamada onde o array “buff” do tipo de caractere não assinado está criado para recuperar caracteres de buffer e “buflen” variável é criado para manter verifique o comprimento do buffer de caracteres.
O buffer de caracteres é detectado usando a função vw_get_message , se for presente, um contador “i” é inicializado e o LED conectado o pino 13 é ligado por enviando um HIGH no pino 13 para indicar a detecção bem-sucedida de personagem amortecedor. O buffer de caracteres é armazenado na matriz Distance usando o loop for com o contador inicializado. O caractere nulo é detectado no fluxo de buffer para que nenhum valor lixo vai para o display LCD. Os caracteres recebidos do buffer são convertidos para um valor inteiro e armazenado na variável “Data”. O valor da variável juntamente com as strings relevantes incluídas são passados ​​para o buffer do microcontrolador e passado para o LCD para exibição em uma forma apresentável formatar. Isso encerra a função loop e, portanto, o código do programa do lado do receptor.

Código-fonte do projeto

###


#include 

const int trigPin = 2;

const int echoPin = 4;

char Distance(4); void setup  {

Serial.begin(9600); 

vw_setup(2000);     

}

void loop  {

int duration, distance, cm;

pinMode(trigPin, OUTPUT);

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

pinMode(echoPin, INPUT);

duration = pulseIn(echoPin, HIGH);

distance=duration*34/200000;

//Convert metre to cm

cm = distance*100

Serial.print(cm);

Serial.print("cm");

Serial.println ;

delay(100);
//Convert integer value to character value

itoa(cm,Distance,10);

digitalWrite(13, true); // Turn on a light to show transmitting

vw_send((uint8_t *)Distance, strlen(Distance));

vw_wait_tx ; // Wait until the whole message is gone

digitalWrite(13, false); // Turn off a light after transmission

delay(200); 

}

#include 

#include 

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

// LED's
int ledPin = 13;

// Sensors 

int Data;

// RF Transmission container

char Distance(4); 

void setup  {

Serial.begin(9600);

lcd.begin(16, 2);

lcd.print("ENGINEERS GARAGE");

lcd.setCursor(0, 1);

  // sets the digital pin as output

pinMode(ledPin, OUTPUT);      

pinMode(9, OUTPUT);

pinMode(8, OUTPUT);
// VirtualWire

    // Initialise the IO and ISR

    // Required for DR3100

vw_set_ptt_inverted(true); 

    // Bits per sec

vw_setup(2000);     

    // Start the receiver PLL running

vw_rx_start ;       

} // END void setup

void loop {

uint8_t buf(VW_MAX_MESSAGE_LEN);

uint8_t buflen = VW_MAX_MESSAGE_LEN;

// Non-blocking

if (vw_get_message(buf, &buflen))
 {

int i;

        // Turn on a light to show received good message 

digitalWrite(13, true); 

        // Message with a good checksum received, dump it. 

for (i = 0; i

Distance(buflen) = '';

 // Convert Sensor1CharMsg Char array to integer

 Data = atoi(Distance);

// DEBUG 

Serial.print("distance = ");

Serial.print(Data);

Serial.println(" cm ");

lcd.setCursor(0, 2);

lcd.print("Distance = ");

lcd.print(Data); // change the analog out value:

lcd.print("cm ");         

    }
}

###

Diagramas de circuito

Medidor de distância sem fio baseado em Arduino

Vídeo do projeto

Conteúdo Relacionado

Uma rede de sensores é incorporada em todos os...
O controlador do motor é um dos componentes mais...
ESP32-CAM é um módulo de câmera compacto que combina...
A evolução dos padrões USB foi fundamental para moldar...
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Você provavelmente já se deparou com o termo 'arrastar'...
Você provavelmente tem um Isolador de suporte Se você...
Você provavelmente já viu permanecer um isolante sente-se em...
Você provavelmente já viu Isoladores de manilha entronizados em...
Você provavelmente já passou por situações em que o...
Retour au blog

Laisser un commentaire

Veuillez noter que les commentaires doivent être approuvés avant d'être publiés.