RÉGUA ELETRÔNICA COM ARDUINO + SENSOR ULTRASSOM + DISPLAY OLED

Font Size

Fala galera, tudo beleza?

No post de hoje iremos apresentar um projeto de uma régua eletrônica utilizando um sensor ultrassônico. Nossa régua irá medir a distância entre nosso sensor e o objeto alvo.

Este sensor será controlado por um Arduino UNO e as medidas serão exibidas em um Display OLED de 0,96″.

Existem inúmeras aplicações para este tipo de sensor, que vão desde uma simples régua até dispositivos de proteção para máquinas e pessoas. Atualmente este tipo de sensor é amplamente utilizado na área da robótica para fazer a detecção de obstáculos.

Depois de entender o funcionamento deste sensor o infinito é o limite da criatividade para quaisquer novos projetos com ele.

Inicialmente vamos estudar a teoria básica deste nosso sensor ultrassônico.

HC-SR04

O sensor ultrassônico HC-SR04 é constituído por um emissor e um receptor de ondas sonoras.  O emissor envia uma frequência específica e o receptor capta esta frequência quando ela é refletida por algum objeto dentro da faixa de alcance.

 

Figura 01: Principio de funcionamento de um sonar.

 

Este módulo oferece excelente detecção de distâncias sem contato com o objeto, com alta precisão e leituras estáveis de 2 cm até 400 cm. Sua operação não é afetada pela luz solar ou por material preto. Ele vem completo com transmissor ultra-sônico e módulo receptor.

Características:

Para conhecer melhor este módulo sugerimos ler o datasheet.

 

 

 

Figura 02: Sensor Ultrasom – HC-SR04.

Display Oled Gráfico 128×64

Utilizamos também um display OLED com comunicação I2C conectado no Arduino UNO. Este tem a função de auxiliar o usuário na aplicação do equipamento. Mostrando a distância medida entre o sensor e o objeto alvo. O display possui um controlador SSD1306 e uma resolução de 128 x 64 pixels, descritos no datasheet do módulo. A principal vantagem deste módulo de visualização é sua alta

 

 

Figura 03: Display OLED.

LET’S WORK!

Materiais Utilizados:

Esses itens, e mais uma outros para implementar seu projeto – você acha AQUI na nossa loja :D.

 

Montagem

Código comentado:

// Projeto: Régua Eletrônica
// Autor: Samuel Centenaro de Oliveira
// Data: 03.07.2017
// V_1.0.1

//Carrega a biblioteca do display OLED 
#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); //deve ser utilizada esta configuração

//Carrega a biblioteca do sensor ultrassonico
#include <Ultrasonic.h>
 
//Define os pinos para o trigger e echo
#define pino_trigger 4
#define pino_echo 5
 
//Inicializa o sensor nos pinos definidos acima
Ultrasonic ultrasonic(pino_trigger, pino_echo);

float cmMsec, inMsec, mMsec; //declaração das variáveis utilizadas para medição de distancia

 void draw()
{
  // Comandos graficos para o display devem ser colocados aqui
  // Seleciona a fonte de texto
  u8g.setFont(u8g_font_profont11);
  // Mensagens iniciais
  u8g.drawRFrame(0, 18, 128, 46, 4);
  u8g.drawStr( 8, 10, "Regua Eletronica");
    
    // Mostra valor do sensor em centimetros ou metros
    // para valores menores que 1 metro será mostrado em centimetros
    if(cmMsec < 100)
      {
        u8g.setFont(u8g_font_9x18B);
        u8g.setPrintPos(25, 45);
        u8g.print(cmMsec); //linha de comando que imprime a variavel de retorno do valor do sensor
        u8g.drawStr( 85, 45, "cm");
      }
    else
      {
        u8g.setFont(u8g_font_9x18B);
        u8g.setPrintPos(30, 45);
        u8g.print(mMsec); //linha de comando que imprime a variavel de retorno do valor do sensor
        u8g.drawStr( 85, 45, "m");
      }
    }
    // Imprime mensagem no rodape
   
  
void setup(void)
{
    Serial.begin(9600); //inicia comunicação serial

   if ( u8g.getMode() == U8G_MODE_R3G3B2 )
 {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) 
  {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) 
  {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255, 255, 255);
  }
}
 
void loop(void)
{
  //Le as informacoes do sensor, em cm e pol

  long microsec = ultrasonic.timing();
  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
  mMsec = cmMsec/100;
  inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);
  
  Serial.print("Distancia em cm: ");
  Serial.print(cmMsec);
  Serial.println(mMsec);

  u8g.firstPage();
 
  // Chama a rotina de desenho na tela
  do
  {
    draw();
  }
  while ( u8g.nextPage() );
 
  delay(100); //mantem uma atualização a cada 100 miliSegundos
}

Este código basicamente fica “plotando” as informações no display a cada 100 ms. As informações de distâncias medidas são determinadas pelo comando “ultrasonic.timing();” e após é realizado o cálculo de distância.

É muito importante que as bibliotecas do sensor e do display sejam instaladas e utilizadas corretamente para o funcionamento adequando do projeto.

Como um adicional ao projeto, para quem não possui ainda o display, existe uma maneira de monitorar os valores de medição de distância através da porta serial. Para quem quiser testar esta alternativa pode-se alterar o valor do delay de 100 para 1000 na última linha do código, isto facilitará a impressão dos dados no terminal serial.

Montagem e testes de funcionamento.

Conclusões:

Após a montagem de todos os componentes na protoboard, carregamento do firmware no Arduino e realizado os testes, foi identificado um ótimo funcionamento do sensor ultrasom.

Ele foi capaz de executar leituras consideravelmente exatas e precisas principalmente pelo valor do módulo.

O display também é uma ótima ferramente para quem gosta de criar projetos com interfaces de leitura.

Então, gostaram da postagem? Ficaram com dúvidas? Tem sugestão?

Este é só uma montagem simples da integração entre estes componentes, com eles podemos fazer diversos projetos interessantes.

No próximo post falaremos especificamente sobre o display OLED: funcionamento, configurações e vários arquivos exemplos. Até mais!!

Se você gostou deste post deixe seu comentário aqui e curta no Facebook!!

Posts relacionados

Conheça 5 super projetos para iniciantes em Arduino

por Danilo Nogueira
4 anos ago

Acionando Cargas por Palmas

por Danilo Nogueira
4 anos ago

Sensor de luz TEMT6000 com Arduino

por Danilo Nogueira
5 anos ago
Sair da versão mobile