Trena Eletrônica Arduino

 

 

Há alguns dias resolvi trocar o rodapé da minha casa e tive que medir tudo usando uma trena comum, precisando contar com a colaboração de outra pessoa e somando tudo de cabeça. Uma trena digital ajudaria bastante, mas não sei se o preço compensaria. Então resolvi montar uma Trena Digital Arduino, usando um sensor ultrassônico para calcular a distância e um laser para orientar o alvo.

 

 

 

Incluí um botão para somar as medidas e outro botão para escolher considerar a distância a partir do sensor ou considerar a distância incluindo o comprimento total do dispositivo, ideal para medições de parede a parede, além do botão para disparar a medição, obviamente.

O equipamento funciona bem, mas somente ficou pronto depois que o rodapé já tinha sido instalado...

 

Seguem os equipamentos necessários:

 

1 Arduino

1 Sensor Ultrassônico

1 Laser

1 Portenciômetro 200k

3 Botões ou chaves momentâneas

3 resistores de 300^

1 LCD Nokia 5110

 

Esquema:

 

Bibliotecas utilizadas:

 

Ultrasonic.h

Adafruit_GFX.h

Adafruit_PCD8544.h

 

E o código:

 

//////////////////////////////////////////////////////

//      Projeto: Trena Eletrônica        //

//      Autor: Charles    Set/2013      //

/////////////////////////////////////////////////////

 

#include   <Ultrasonic.h>

#include   <Adafruit_GFX.h>

#include   <Adafruit_PCD8544.h>

 

#define   TRIGGER_PIN  A2

#define   ECHO_PIN     A3

 

Ultrasonic   ultrasonic(TRIGGER_PIN, ECHO_PIN);

 

float dist;

float tot;

 

int bot_mede = 8;

int sbot_mede;

int bot_tot = 9;

int sbot_tot;

int bot_modo = 10;

int sbot_modo;

int modo = 1;

int laser = 11;

int pot = A4;

int contraste = 30;

 

// 7-clk 6-Din 5-DC   4-CE 3-Rst 2-Bl

Adafruit_PCD8544   display = Adafruit_PCD8544(7, 6, 5, 4, 3);

 

void setup()

{

pinMode(bot_mede, INPUT);

pinMode(bot_tot, INPUT);

pinMode(bot_modo, INPUT);

pinMode(laser, OUTPUT);

pinMode(pot, INPUT);

 

display.begin();

display.setContrast(30); //Ajusta o contraste do display

display.clearDisplay();

display.setTextColor(BLACK);

display.setTextSize(2); //Seta o tamanho do texto

display.setCursor(12,2);

display.print("TRENA");

display.setTextColor(WHITE, BLACK);

display.setTextSize(1); //Seta o tamanho do texto

display.setCursor(0,20);

display.print(" Digital ");

display.drawRoundRect(0,30,83,18,1, BLACK); //box tot

display.setTextColor(BLACK);

display.setCursor(3,35);

display.print("v a s s i l i");

display.display();

delay(1500);

}

 

void loop()

{

 

contraste = analogRead(pot);

contraste = map(contraste, 0,255,20,53);

display.setContrast(contraste); //Ajusta o contraste do display

tela();

delay(100);

 

sbot_mede = digitalRead(bot_mede);

if (sbot_mede == HIGH)

{

digitalWrite(laser, HIGH);

distancia();

tela();

delay(800);

digitalWrite(laser, LOW);

}

 

sbot_tot = digitalRead(bot_tot);

if (sbot_tot == HIGH)

{

tot = tot + dist;

tela();

delay(400);

}

 

sbot_modo =   digitalRead(bot_modo);

if (sbot_modo == HIGH)

{

modo = -modo;

distancia();

tela();

delay(400);

}

 

void tela()

{

display.clearDisplay();

display.fillRoundRect(0,0,83,18,1, BLACK); //box medida

display.drawRoundRect(0,20,41,28,1, BLACK); //box tot

display.drawRoundRect(43,20,41,28,1, BLACK); //box modo

display.setTextSize(2); //Seta o tamanho do texto

display.setTextColor(WHITE, BLACK);

display.setCursor(2,2);

display.print(dist);

display.setCursor(5,22);

display.setTextColor(BLACK);

display.setTextSize(1); //Seta o tamanho do texto

display.print("Total");

display.setCursor(2,35);

 

if (tot >= 999) {display.print(tot/100); display.print("m");}

 

else display.print(tot);

 

display.drawRect(45,35,15,8,BLACK);

display.fillRect(53,36,5,6,BLACK);

display.drawCircle(48,37,1,BLACK);

display.drawCircle(48,40,1,BLACK);

display.drawLine(61,37,61,40,BLACK);

display.drawLine(63,37,63,40,BLACK);

display.drawLine(65,37,65,40,BLACK);

 

if (modo == 1) display.fillRect(59,25,20,4,BLACK); //modo1

if (modo == -1) display.fillRect(45,25,35,4,BLACK); //modo2

 

display.display();

}

 

void distancia()

{

long microsec = ultrasonic.timing(); //distância

dist =   ultrasonic.convert(microsec, Ultrasonic::CM);   //converte para cm

if (modo == -1) dist = dist + 13; // adicionar o tamanho do dispositivo

}

 

Observações:

  1. Sinceramente não consegui resolver o problema com o contraste do LCD Nokia 5110 usando a biblioteca Adafruit, então a solução foi colocar o potenciômetro para ajuste manual.
  2. Segundo do datasheet, o sensor ultrassônico tem um alcance de até 4,5 m e precisão de 2mm, mas para isso, o sensor precisa ficar bem imóvel.
  3. No meu exemplo eu incluí uma bateria de 9v, mas para não comprometer os componentes, sobretudo o sensor ultrassônico, que trabalha a 5V, achei melhor colocar um controlador de tensão L7805, que reduz a tensão para 5V, através do seguinte esquema:  L7805.png
  4. Incluí também uma chave liga/desliga, onde o negativo da bateria foi conectado no GND
    do Arduino e o positivo em um dos polos da chave e o outro polo da chave na
    entrada 5V do Arduino.
  5. Outro desafio foi alinhar o laser com o sensor ultrassônico, mas com um pouco de paciência dá para conseguir um acerto satisfatório.

 

Boas medições!

Charles

 

 

 


13/10/2014 - 20h
Pessoal,

Muitas pessoas estão reclamando que não estão conseguindo replicar o projeto da trena. Então montei um arquivo compactado com o sketch e as bibliotecas utilizadas. Vamos ver se funciona assim, segue link abaixo:

trena.zip

Exibições: 65536

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Denis em 23 agosto 2018 às 18:13

Eu ainda não entendi a utilidade do laser se tem o sensor ultrassonico

Comentário de Marcelo selestino em 13 março 2017 às 16:32

Bom dia amigo queria informação sobre o funcionamento laser qual sua real utilidade? E também queria saber onde encontro aquele tipo de laser?

Comentário de cassio teles em 30 março 2016 às 20:40

amigo quanto voce gastou

Comentário de Charles Vassiliades em 22 julho 2015 às 18:12

Boa noite. Você importou as 3 bibliotecas no diretório /libraries do Arduino ? Esse erro só pode ser incompatibilidade com as bibliotecas. Eu estou usando a IDE 1.6.5 e está funcionando. Sugiro um teste: faça uma cópia de todos os sub-diretórios da pasta /libraries e deixe apenas as bibliotecas usadas pelo projeto. Reinicie a IDE e teste novamente. Boa sorte !

Comentário de alexandre cavalcante em 20 julho 2015 às 20:56

Boa noite amigo adorei muito o seu projeto e eu estava afim de fazer um aqui porque eu trabalho com medidas de paredes mas o codigo esta dando erro e nao consigo resolver voçe poderia me ajudar por favor esta a foto do erro agradeço pela atençao obrigado

Comentário de Franklin da Silva Santos em 1 maio 2015 às 22:12

Prezados amigos, boa noite!

Estou tentando executar este projeto mas está apresentando os seguintes erros

"
trena.ino: In function 'void distancia()':
trena.ino:254:28: error: 'class Ultrasonic' has no member named 'timing'
trena.ino:256:21: error: 'class Ultrasonic' has no member named 'convert'
trena.ino:13:12: error: expected unqualified-id before numeric constant
trena.ino:256:51: note: in expansion of macro 'CM'
Erro compilando."

alguem pode me ajudar?

Desde já agradeço!

Comentário de webert caio de souza em 16 outubro 2014 às 14:00

senhores, teria como essa trena tirar a área em metro². alguem sabe como programar o arduino para isso.

Comentário de marcos fernando siqueira em 12 outubro 2014 às 21:59

Ola pessoal alguem conseguiu corrigir os erros do código para o arduino 

Comentário de Felipe Arrighi em 2 junho 2014 às 16:20

Vinicius Rodrigues por enquanto não consegui não, consegui fazer a trena mas sem o monitor, está funcionando no Serial Monitor do programa arduino. Se por acaso você conseguir me de um toque por favor...

Comentário de Vinicius Rodrigues em 30 maio 2014 às 20:21

Felipe Arrighi, também estou fazendo essa trena, e estou tendo o mesmo problema... você consegui resolver o seu?? se sim. como?

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço