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

Nenhum comentário:

Postar um comentário