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());
}

7 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