DIY Projects - My Ultrasonic Tape Measure

Introduction: DIY Projects - My Ultrasonic Tape Measure

About: Este é um canal para homemakers e DIY onde vai encontrar tutoriais úteis acerca de Electrónica, Arduíno, Robótica e Impressão 3D. Estes têm explicaç&oti...

Este é um projecto simples que consiste em criar uma fita métrica digital que utiliza um sensor de ultrasons de forma a determinar a distância entre esse equipamento e um obstáculo, este tipo de sensor é muito versátil, sendo muito utilizado em projectos de automação e robótica.

Decidimos desenvolver este equipamento, pois é um equipamento bastante útil, principalmente para determinar dimensões ou áreas, por exemplo das divisões de nossas casas.

Assim, em primeiro lugar vamos explicar as funcionalidades do principal componente desta montagem o sensor de ultrasons, este permite medir distâncias em linha recta, quantificando a distâncias, através da contagem de tempo que o som emitido pelo sensor demora a percorrer até ao obstáculo.

A frequência desse som emitido encontra-se no intervalo dos ultrasons, ou seja de 40 KHz, garantindo uma direcção mais concentrada da onda sonora, pois um onda sonora com uma frequência alta tende em dissipa-se menos no ambiente envolvente. O sensor de ultrasons utilizado nesta montagem é constituído por 2 membranas, uma membrana que emite o som e outra que recebe o seu eco, ou seja, é um sensor constituído por uma coluna e um microfone.

Durante este processo o sensor funciona também como uma espécie de cronometro de alta precisão, sendo possível saber-mos quanto tempo o sinal levou desde a sua emissão até o seu retorno (Ver imagem acima).

Para calcular a distância utilizamos a seguinte formula, "D = (Vs x T) / 2" em que (Ver cálculos acima):

  • D = Distância;
  • Vs = Velocidade do som;
  • T = Tempo que o som demora a percorrer desde a sua emissão até à sua recepção.

Frequentemente a velocidade do som não é considerada como variável, sendo normalizada a 340m/s, assumindo que a temperatura do ar está a 20ºC e ao nível do mar, mas como esta montagem será de um instrumento de medida é desejável que este seja o mais preciso possível. Logo, assumimos que a velocidade do som pode variar consoante alguns factores, sendo um deles a temperatura ambiente (ver cálculos acima).

Para eliminar os possível erro por variação de temperatura utilizamos um sensor temperatura, este normalmente é constituído por uma resistência NTC (Negative Temperature Coefficient), que diminui a sua resistência eléctrica com o aumento de temperatura, ou então, uma PTC (Positive Temperature Coefficient), que aumenta a sua resistência eléctrica com o aumento de temperatura (Ver gráfico acima).

Para que todos estes sensores posso interagir correctamente, como também para realizar todos estes cálculos utilizamos um Arduino NANO, esta é uma placa muito idêntica à placa já muito falada nos nosso tutoriais a placa Arduino UNO, no entanto muito mais pequena e com menos entradas e saídas digitais e analógicas, mas com as mesmas funcionalidades, tendo integrada uma ligação USB Mini-B (Ver imagem acima).

Por fim, utilizamos também um LCD 16x2 (Liquid Crystal Display), que como a sua referencia indica contem 16 colunas e 2 linhas, este tem o objectivo de representar a distância que o sensor determina (Ver imagem acima), sendo que neste caso, pode ser representada em várias unidades de medidas, como m (metros), cm (centímetros) ou in (polegadas).

Caso queiram saber mais sobre o sensor de ultrasons ou o LCD 16x2 vejam as suas datasheet (Ver ficheiros abaixo), alem destes vejam também as especificações detalhadas do Arduino NANO, através da página oficial do Arduino em "https://store.arduino.cc/arduino-nano".

Step 1: Montagem Da PCB:

Começamos sempre os projectos desenhando e testando o circuito através de uma pequena Breadboard e os componentes necessários para a sua realização, só depois destes testes terminados e confirmada a sua funcionalidade, partimos para a concretização final.

Material necessário:

  • 1x Arduino NANO;
  • 1x Cabo Mini USB;
  • 1x Breadboard;
  • 1x Sensor de Ultrasons HC-SR04;
  • 1x LCD 1602;
  • 1x Resistência 270Ω;
  • 1x Potenciómetro 10KΩ;
  • 1x Sensor de temperatura NTC 10KΩ;
  • 3x Resistências de 10KΩ;
  • 3x Botões (Push Button);
  • 3x Resistências 1KΩ;
  • 1x Bateria de 9V;
  • 1x Ligação bateria de 9V;
  • 1x Interruptor.

Este circuito utiliza para a sua alimentação uma pilha de 9V, apesar dos componentes utilizados funcionarem a 5V DC, assim de formas a que as alimentações desses componentes seja a mais correcta, ligamos a a bateria ao pino Vin do Arduino NANO, alimentando assim o Arduino, visto que este pode ser alimentado por uma tensão entre 7 a 12V. Depois utilizamos o pino de alimentação +5V já regulados e estabilizados, para alimentar todos os outros componentes do circuito correctamente (Ver circuito acima).

Instalação do LCD 1602:

Se repararem não são utilizados todos os pinos do LCD, pois cada pino tem uma função especifica (Ver legenda acima). Assim para explicar mais facilmente o funcionamento do LCD, agrupamos os seus pinos em 3 grupos, o grupo dos Pinos de Alimentação, o de Pinos de Comunicação e de Pinos de Informação.

Pinos de Alimentação:

  • Gnd;
  • Vcc;
  • V0;
  • LED - ou A (Anodo);
  • LED + ou K (Catodo).

As alimentações do LCD (Gnd e Vcc) são realizadas através dos pinos Gnd e +5V do Arduino, no entanto, o Pino V0, que tem a função de ajustar o contraste dos caracteres, é ligado a uma resistência variável de 10KΩ, a funcionar como um divisor de tensão (Ver imagem acima), alterando assim a tensão em A7 entre 0 e 5V. Os pinos A e K também são ligados aos pinos de Gnd e +5V do Arduino, sendo que é utilizada uma resistência de 270Ω em série, protegendo assim os LED a retro iluminação do LCD.

Pinos de Comunicação:

  • RS (Register Select);
  • R/W (Read / Write);
  • E (Enable).

Nos pinos de comunicação apenas teremos de ter atenção ao pino R/W, pois este deve estar ligado a Gnd para que seja permitido escrever no LCD aparecendo assim o caracteres, caso contrario podemos estar a ler o dados guardados na sua memoria interna ficando o LCD em branco.

Pinos de Informação:

  • D0;
  • D1;
  • D2;
  • D3;
  • D4;
  • D5;
  • D6;
  • D7.

Nesta montagem apenas são utilizados 4 dos 8 possíveis pinos de informação, pois podemos realizar esta montagem com apenas metade dos pinos de dados. Isto é possível através da Biblioteca LiquidCrystal.h que colocamos no código, permitindo ler o Byte (Byte = 8 bits) de informação enviado pelo Arduino dividido em 2 partes, ou seja, 4 bits de cada vez.

Isto porque esta Biblioteca controla os pinos de comunicação, de forma a que o LCD saiba qual o tipo são e quais serão os pinos que receberão a informação (Pinos D4 a D7).

Instalação do Sensor de Ultrasons HC-SR04:

Passamos agora para o nosso sensor de ultrasons, este tem 4 pinos, sendo 2 de alimentação e 2 de informação. A sua alimentação será fornecida através do Arduino, pois sensor é alimentado a 5V DC.

Os pinos de informação são ligados aos pinos digitais do Arduino (Pinos D11 e D12), pois os sinais recebidos e emitidos pelo sensor são digitais.

Instalação do sensor de temperatura:

Para eliminar um dos factores influenciadores da precisão do equipamento, utilizamos na nossa montagem um sensor resistivo NTC (Negative Temperature Coefficient), ou seja, diminui a sua resistência à medida que a temperatura aumenta.

Este sensor está montado como um circuito divisor de tensão, segundo o fabricante as suas especificações a resistência deste é cerca de 10KΩ, logo este será ligado a uma resistência de 10KΩ para formar um divisor de tensão (Ver imagem acima). O ponto intermédio deste divisor de tensão é ligado depois ao pino de entrada analógica do Arduino A7, assim à medida que a temperatura altera, a tensão neste pino pode variar entre 0 e 5V.

Criar a PCB:

Em primeiro lugar desenhamos o circuito preparando-o para a PCB (Printed Circuit Board), para isso é necessário saber quais as medidas finais da placa e depois desenhar as ligações eléctricas entre os respectivos componentes (Ver imagem de PCB acima).

Para realizar esta tarefa utilizámos o programa de PCB Design (EasyEDA), onde é possível imprimir o circuito em acetato, no entanto, deixamos-vos o desenho do PCB pronto a imprimir ou para importar ,sendo possível alterar-lo (Ver ficheiros abaixo).

Material necessário:

  • 1x PCB de 32mm x 106mm;
  • 1x Broca de 1mm;
  • 1x Broca de 1,6mm;
  • Luvas de protecção;
  • Óculos de protecção;
  • Lata de Spray de POSITIV 20;
  • Soda Caustica;
  • Percloreto de ferro.

Estando o desenho pronto passamos o método químico, tendo 3 processos para a sua elaboração,ou seja, o processo de Revelação, que consiste em utilizar uma tinta especial, sensível à luz Ultra-Violeta, e um produto químico revelador, ficando impresso o nosso circuito na PCB (Ver imagem acima), a seguir vem o processo de Corrosão, que utiliza um produto químico para corroer o cobre exposto pelo processo anterior (Ver Imagem acima). Por fim, o vem o processo de Limpeza e acabamento da PCB, sendo criados os orifícios onde os componentes eléctrico são encaixados (Ver imagem Acima).

Processo de Revelação:

Este processo começa com a pintura da face de cobre da PCB, sendo esta realizada com uma tinta sensível à luz Ultra-Violeta (Ver imagens acima), podendo ser em Spray (POSITIV 20) ou em lata (Ver Datasheet abaixo), esta tinta deve ser aplicada uniforme-mente e com uma camada fina, para que a luz Ultra Violeta possa penetrar facilmente.Também existem PCB com esta tinta já aplicada, sendo apenas necessário retirar uma película que a protege.

De seguida, é colocada a PCB com o respectivo acetato exposto a luz Ultra-Violeta cerca de 45 minutos, dependendo da potência das lâmpadas, podendo ser utilizada uma máquina com lâmpadas de radiação UV.

Terminado o tempo de exposição à luz Ultra-Violeta utilizamos o produto revelador, este é composto por Soda Caustica (NaOH) em pó, granulado ou liquido ( Ver datasheet abaixo), aconselhamos que esta solução seja rectificada gradualmente, iniciando com esta mais fraca, introduzindo a Soda Caustica progressivamente, até à solução ideal.

Atenção:

Deve-se utilizar sempreluvas de borracha e óculos protectores, pois este tipo de produtos são perigosos e podem causar lesões graves na pele e nos olhos.

Para revelar a impressão do circuito eléctrico, é colocada a PCB dentro dessa solução cerca de 10 minutos, verificando o seu estado de 2 em 2 minutos, até que seja bem visível e bem definido o circuito eléctrico.

Processo de Corrosão:

Neste processo é utilizada uma solução de agua e Percloreto de Ferro (FeCl3), o Percloreto de ferro pode ser encontrado no mercado em estado liquido ou em granulado (Ver Datasheet abaixo), aconselhamos também que esta solução seja rectificada gradualmente, introduzindo o Percloreto de Ferro progressivamente.

Para realizar este processo basta colocar a PCB com o circuito impresso (Ver Imagens acima) dentro da solução por cerca de 45 minutos, esta começa a corroer apenas o cobre exposto, todavia, deve-se verificar o seu estado de 10 em 10 minutos mexendo a solução para que o processo seja mais rápido.

Este processo terminal quando todo o cobre exposto ficar totalmente corrido, ficando apenas o cobre das zonas com a protecção da tinta (Ver Imagens acima).

Atenção:

Deve-se utilizar sempreluvas de borracha e óculos protectores, pois este tipo de produtos são perigosos e podem causar lesões graves na pele e nos olhos.

Processo de Limpeza e acabamento:

Após terminado o processo anterior deve-se limpar a PCB com um pano embebido em Álcool retirando assim os restos de tinta que protegem as pista do circuito eléctrico. Depois deve ser feita um verificação visual e caso existam duvidas na integridade das pistas ou que estas estão em contacto indesejado, confirmar com um multímetro em modo de verificação de continuidade.

De seguida, realizamos a furação começando com uma broca pequena de cerca de 1mm, verificando posteriormente se os pinos dos componentes a montar na placa cabem nesses furos, caso contrario utilizar brocas com uma medida um pouco acima.

Para finalizar o acabamento podemos limar ou lixar as arestas da placa retirando aquele aspecto áspero, rectificando a geometria da PCB em relação ao ao circuito eléctrico desenhado.

Step 2: Montagem Final:

Terminada a PCB teremos criar a caixa do equipamento, para que seja fácil manusear-lo, esta caixa tem no seu interior alojados todos os componentes do circuito ficando à vista o LCD e os respectivos botões como também o interruptor de alimentação.

Para desenhar esta caixa utilizamos um programa de desenho técnico AUTODESK Fusion360, sendo muito fácil de utilizar e gratuito. Esta caixa tem um formato idêntico à da PCB para a alojar mais facilmente e com as faces direita para que seja fácil apoiar o equipamento em paredes ou objectos com linhas direita. (Ver imagens acima). No entanto, deixamos-vos os ficheiro editáveis, caso queiram realizar alguma alteração (Ver ficheiros Fusion 3D abaixo).

Para materializar a caixa utilizamos uma Impressora 3D (Ver imagem acima) e um Software de impressão 3D (Simplify 3D), para esta impressão foi utilizado filamento PLA (Ver Ficheiro STL abaixo), neste caso não foi necessário realizar nenhuma pintura, pois a cor do filamento era a cor desejada.

Também deixamos-vos os ficheiro STL para que seja mais fácil recriar este equipamento. Caso tenham interesse deixamos-vos também aqui a nossa página em Thingiverse onde podem encontrar este e outros projectos em Impressão 3D.

Step 3: Código:

Estando o equipamento pronto ligamos o cabo USB e carregamos o respectivo código na placa do Arduino. Mas antes como no LCD 1602 será possível visualizar informações diferentes consoante a respectiva página ou função seleccionada através dos botões, sendo estes botões o nosso interface para navegar nas diferentes páginas do menu do nosso equipamento.

Assim é necessário elaborar um pequeno esquema de blocos com a estrutura de páginas e funções que o nosso equipamento terá (Ver esquema acima), sendo assim mais fácil elaborar o nosso código e caso seja necessário alterar ou corrigir-lo sabemos sempre onde nos encontramos.

//Correr a função LOOP repetidamente:
void loop() { //Condição para a leitura da distância: if (Menu == 0) { //Correr a função: Pagina_0(); } //Condição para a leitura da temperatura: else if (Menu == 1) { //Correr a função: Pagina_1(); } //Condição para a leitura da temperatura: else if (Menu == 2) { //Correr a função: Pagina_2(); } } //Página 0: void Pagina_0() { //Código referente ás função desta página. } //Página 1:
void Pagina_1() { //Código referente ás função desta página. } //Página 2: void Pagina_2() { //Código referente ás função desta página. }

Como nesta montagem é utilizado um Sensor de Temperatura e um LCD 1602, no código começamos por importar as bibliotecas thermistor.h e a LiquidCrystal.h, através do gestor de bibliotecas do software do Arduino. Estas bibliotecas facilitam muito a programação, pois contêm comandos e funções criadas especificamente para determinados componentes.

Assim a biblioteca thermistor.h permite-nos com apenas função configurar o sensor de temperatura.

#include "thermistor.h"	//Importar a "thermistor" library

//Esta função define:
THERMISTOR SENSOR (Pino_Sensor, 10000, 3950, 10000);

	//Pino de entrada do sensor;
	//Resistência nominal a 25ºC do sensor;
	//Coeficiente beta do sensor;
	//Valor da resistência do sensor.

Para realizar a leitura do sensor de temperatura, utilizamos o comando "sensor.read()", devolvendo o valor relativo à temperatura em ºC, no entanto, esse valor não tem casas decimais o que obriga a um pequeno calculo. Não esquecer que para utilizar variáveis com casas decimais, estas variáveis terão de ser declaradas como "float".

void loop(){
	//Leitura do sensor de temperatura.
	Valor_Temp = sensor.read();
	//Calculo do valor da temperatura com casas decimais.
	Valor_Temp= Valor_Temp/10;
}

No caso da biblioteca LiquidCrystal.h também facilita a configuração do LCD, nesta biblioteca é apenas necessário 2 funções para que este funcione correctamente.

Agora para escrever no LCD é necessário em primeiro lugar definir o local onde se começará a colocar os caracteres, ou seja, a coluna e a linha, depois imprimimos o texto que queremos, tendo em atenção que este LCD apenas tem 16 colunas e 2 linhas, caso o texto passe esses limites não aparecerão os caracteres.

//Definir os pinos de comunicação e informação do LCD:
LiquidCrystal lcd ("RS", "E", "D7", "D6", "D5", "D4");

e

void setup(){
	//Inicia a comunicação com LCD 16x2:
	lcd.begin(2, 16);
}
void loop(){

	//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
	lcd.setCursor(0, 0);
	//Escreve no LCD:
	lcd.print("Temperatura:");
}

Agora só falta colocar o código para realizar as leituras com o sensor de ultrasonsHC-SR04, os dados do sensor serão fornecidos a 2 dos pinos digitais do Arduino NANO, tendo cada um deles uma função distinta, funcionando um como saída e o outro como entrada.

//Correr a função SETUP apenas uma vez após ser pressionado Reset:
void setup(){

	//Definição do tipo de pino (Saída ou entrada):
	pinMode(Pino_Trig, OUTPUT);
	//Definição do tipo de pino (Saída ou entrada):
	pinMode(Pino_Echo, INPUT);
}

Este sensor quando realiza uma leitura existem 2 momentos distintos, o momento em que o sensor envia um sinal acústico e outro momento que é quando este recebe o eco desse mesmo sinal. Para isso é necessário activar a activar a leitura, colocando em nível alto o pino de entrada digital Trigger, que tem de estar nessa condição pelo menos 10µ Segundos. É aconselhado que exista uma pequena pausa entre leituras para isso deve ser colocado 5µ Segundos em nível baixo (Ver gráfico acima).

De seguida, realiza-se a contagem de tempo e os seus respectivos cálculos, para isso utilizamos a função "PulseIn" que contabiliza o tempo em que um pino Echo está em nível alto. Depois como o tempo contabilizado pela função "PulseIn" é o tempo que o sinal acústico demora no percurso entre o sensor até ao objecto e o seu regresso o tempo será sensivelmente o dobro do desejado, ou seja, apenas nos interessa metade do percurso logo é necessário dividir esse tempo por 2 (Ver cálculos acima).

//Correr a função LOOP repetidamente:
void loop(){

	//Processo de funcionamento do sensor de Ultrasons:

	//Pausa entre leituras.
	digitalWrite(Pino_Trig,LOW);	//Desligar a pulsação ultrasónica;
	delayMicroseconds(5);	//Pausa de 5 microsegundos para estabilização;

	//Início da leitura.
	digitalWrite(Pino_Trig, HIGH);	//Ligar a pulsação ultrasónica;
	delayMicroseconds(10);	//Pausa de 10 microsegundos para estabilização;

	//Contagem em microsegundos do Tempo entre o envio e a recepção do sinal enviado.
	Tempo = pulseIn(Pino_Echo, HIGH);
	//Cálculo da conversão do Tempo de microsegundos para segundos.
	Tempo = Tempo / 1000000;

	//Cálculo do valor da distância medida.
	Valor_Distancia = Velocidade_Som / 2;
	Valor_Distancia = Valor_Distancia * Tempo;
}

Por fim para que possamos verificar a carga da bateria colocamos na página inicial a percentagem referente à tensão que a bateria tem nesse momento. Assim, como a bateria é de 9V e as entradas analógica do Arduino só suportam até 5V, sendo este valor correspondente a 1023, optamos por aplicar um divisor de tensão, sendo o valor máximo aplicado no pino de entrada analógica do Arduino cerca de 4,5V.

No entanto, como 4,5V não seria 1023, foi necessário realizar alguns cálculos para que este 4,5V, ou seja, como a bateria no máximo de sua carga correspondesse a 100% de carga (Ver cálculos acima).

Como este artigo já vai um pouco longo, podem encontrar o ficheiro com o código completo e que estamos a utilizar actualmente (Ver ficheiro abaixo).

Procurem os nossos outros projectos e tutoriais acerca do Arduino, onde explicamos diversas montagens e o funcionamento dos seus componentes, já agora visitem o nosso canal no Youtube, Facebook ou Twitter.
Abraço e bons projectos.

Share

    Recommendations

    • Water Contest

      Water Contest
    • Metalworking Contest

      Metalworking Contest
    • Fix It! Contest

      Fix It! Contest

    2 Discussions

    I like how you polled the sensor readings a lot slower. I've got a bunch laying around that I was playing around with and was trying to get a more stable reading. Nice work!

    1 reply

    Thanks for your comment.

    I really want to be able to help.

    Have a nice day and good projects. ; D