11 de janeiro de 2018

Trena Digital

Medidor de distância com precisão de até 400cm utilizando um sensor ultrassônico.


O projeto utiliza o sensor ultrassônico HC-SR04 e um display OLED SSD1306 I2C 128x64 Monocromático.

Para trabalhar com o sensor, utilizei a biblioteca Ultrasonic. E para controlar o display OLED, a biblioteca U8glib.

Um projeto bastante interessante e simples utilizando o Arduino.



Segue o esquema elétrico e o código fonte:


/*---------------------------------------------------------
  Programa : TRENA DIGITAL
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 09/01/2018
  ---------------------------------------------------------*/

#include <Ultrasonic.h> //Biblioteca do sensor HC-SR04
#include <U8glib.h> //Biblioteca do display OLED SSD1306 I2C 128x64

#define TRIG 12 //Trigger do sensor
#define ECHO 13 //Echo do sensor

/*----- VARIÁVEIS -----*/
Ultrasonic ultrasonic(TRIG, ECHO); //Variável do sensor HC-SR04 nos pinos 12 e 13
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); //Variável do display. SCK = A5 / SDA = A4
int dist = 0; //Variável com o valor recebido do sensor

/*----- SETUP -----*/
void setup() {
  //Configura os pinos
  pinMode(TRIG, OUTPUT); //Envia o sinal ultrassônico
  pinMode(ECHO, INPUT); //Recebe o sinal ultrassônico

  //Configura o display para somente uma cor
  u8g.setColorIndex(1);
}

/*----- LOOP PRINCIPAL -----*/
void loop() {
  dist = ultrasonic.distanceRead();
  Screen(dist);
  delay(500);
}

/*----- TELA DISPLAY -----*/
void Screen(int dist) {
  u8g.firstPage();

  //Converte a variável dist de int para char
  char d[3];
  itoa(dist, d, 10);

  //Variável para ajustar o posicionamento do valor na tela
  int p = 57;
  if (dist >= 10 && dist < 100) {
    p = 47;
  } else if (dist >= 100) {
    p = 38;
  }

  //Loop para montar a tela
  do {
    //Primeira linha com título
    u8g.setFont(u8g_font_6x10);
    u8g.drawStr(30, 12, "TRENA DIGITAL");

    //Frame
    u8g.drawRFrame(0, 15, 128, 35, 3);

    //Exibe a distância
    u8g.setFont(u8g_font_fub25);
    u8g.drawStr(p, 46, d);

    //Texto com a unidade de medida
    u8g.setFont(u8g_font_5x7);
    u8g.drawStr(114, 46, "CM");

    //Texto rodapé
    u8g.setFont(u8g_font_orgv01);
    u8g.drawStr(29, 63, "EfeitoNerd.com.br");

  } while (u8g.nextPage());
}

11 comentários:

  1. Boa noite… Eu gostaria de fazer um projeto onde usaria um display OLED grande e nele constariam 4 leituras de sensores ultrasonicos diferentes, sem buzzer… Você poderia me ajudar?

    ResponderExcluir
    Respostas
    1. Olá! Qual seria a dúvida exatamente no projeto?
      Abraços!

      Excluir
  2. Boa tarde, é possivel adicionar um modulo bluetooth, para enviar essas medidas para um Smartphone, preciso modificar o codigo?

    ResponderExcluir
    Respostas
    1. Bom dia, Julio César!
      É possível sim. Seria necessário uma modificação no código. Um exemplo que pode utilizar para adicionar nesse código:
      http://www.efeitonerd.com.br/2017/12/controle-bluetooth-hc-06.html
      Abraços!

      Excluir
  3. Bom dia mestre!
    Estou fazendo uma trena dessas para um trabalho, mas com o Arduino uno R3. Preciso usar um módulo bluetooth ao invés do LCD... é difícil de fazer? Também queria saber se é preciso uma bateria 5v e um adaptador para ligar a trena, porque parece que na sua você utiliza a alimentação via USB, correto?

    ResponderExcluir
    Respostas
    1. Também não é preciso resistores ou potenciômetro?

      Excluir
    2. Bom dia, Arthur!
      Esse post vai te ajudar:
      http://www.efeitonerd.com.br/2017/12/controle-bluetooth-hc-06.html
      Tanto para o senor ultrassônico quanto para o módulo bluetooth não são necessários resistores.

      Com relação a alimentação, o Arduino funciona com 5v. Pode utilizar qualquer fonte padrão USB (carregadores de celulares, por exemplo). USB por padrão é 5v. No Arduino USB, existe um jack de conexão (aquele redondo) onde pode plugar fontes de até 12v. Ele já possui um regulador de tensão interno, então conectando nesse plug tensões mais altas é permitido.
      Pode-se utilizar uma bateria de 9v dessa forma:
      https://goo.gl/BmZLPA

      Abraços!

      Excluir
  4. Boa noite Felipe,gostei muito deste projeto de trena digital,ja vi vários outros mas este pareceu ser o mais simples e vou tentar reproduzir,como sou amador e iniciando no arduino tenho verta dificuldade .
    Agora umma duvida,é possível deixar marcando uma casa apos a virgula,tipo,5,7 cms,pelo que vi tambem dode deixar em Metros ou ate polegadas nao e?Pretendo utilizar numa maquina curvadora de tubos que tenhomtem 3 Metros de comprimento ,espero que de uma boa precisao.Outra duvida,tenho um projeto para fazer,este bem mais complexo e vou precisar usar a função random precisarei variar o tempo que um farol iniciara as luzes e este tempo deve variar entre 0,1 segundos e 2,7 segundos,a duvida é que vi uns videos e parece que só é possível números inteiros,sera que tem alguma forma de fazer isso??
    obrigado

    ResponderExcluir
    Respostas
    1. Bom dia, Luiz! Que bom que a postagem do blog pode te ajudar!
      O funcionamento do HC-SR04 é simples, e não é necessário utilizar a biblioteca para uso. A biblioteca ajuda a reduzir o código fonte e traz mais facilidades. Se a biblioteca não possui a função de retorno em outras medidas, com cálculos rápido vc mesmo faz essa conversão de medidas. É possível sim exibir as casas decimais.
      Quanto ao projeto, no desenvolvimento é interessante testar se não haverá interferências de objetos na linha do sensor. Adicionar um laser para ajudar a visualizar para onde o sensor está apontando é uma boa! Existes outras opções para medir distância, além do ultrassônico. Para cada projeto, uma necessidade.
      Uma solução para números não inteiros com a função random é após seu resultado utilizar uma divisão por outro valor random. Por exemplo, 13 / 5 = 2,6.
      Alguns projetos que utilizei o função random no blog:
      http://www.efeitonerd.com.br/search/label/Random
      Abraços!

      Excluir
  5. Boa tarde Felipe,a maquina que irei usar a trena é igual a esta do link a seguir,só muda a mesa que eu mesmo montei usando uma guia linear de 3 metros e uma placa de torno,agora na maquina tenho um problema,nao estou conseguindo selecionar ângulos e outras funções,então um amigo adaptou 2 pedais para acionar o motor,gora para curvar e outro para retornar,coloquei um transferidor e vou ate o angulo desejado e volto,preciso melhorar isto mas ainda nao encontrei ninhguem que possa fazer

    ResponderExcluir
  6. https://www.youtube.com/watch?v=zBNldvTensk

    ResponderExcluir