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: 65560

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 Felipe Arrighi em 28 maio 2014 às 22:28

Parceiro está dando 8 erros esse programa que você nos disponibilizou, você saberia me informar o motivo?

Comentário de Charles Vassiliades em 12 maio 2014 às 20:50

Olá Marcel ! Os componentes foram fixados em uma mini protoboard que foi fixado em uma caixa de plástico com adesivo.

Atenciosamente,

Charles

Comentário de Charles Vassiliades em 12 maio 2014 às 20:49

Bruno - Sua pergunta ficou sem resposta, desculpe e como faz tempo você já deve ter resolvido ou desistido, né ? Mas se ainda estiver interessado em solucionar o problema, por favor, me diga qual é o erro que está dando. Como eu copie o código diretamente do meu sketch, provavelmente deve ser erro de biblioteca, mas se for erro de sintaxe, tente copiar o código primeiro em um bloco de notas e verificar se o HTLM do site não incluiu caracteres "estranhos".

Obrigado,

Charles

Comentário de Marcel de Oliveira Maia em 7 maio 2014 às 23:04

Fiquei com uma duvida...os resistores ficam soltos dentro da caixa da trena?!!!

Comentário de Charles Vassiliades em 28 abril 2014 às 20:46

Olá Otávio. Sou iniciante no assunto e faço esses gadgets apenas por diversão. Acredito que uma trena digital com alta precisão precise utilizar um laser ao invés de sensor ultrassônico. Sinto não poder ajuda-lo mais.

 

Comentário de Otavio Maciel em 2 abril 2014 às 16:19

Existe algum sensor que eu possa utilizar no lugar do Ultrassônico que tenha uma precisão em torno de 0,05mm?

Comentário de Bruno Ferreira da Silva Santos em 29 março 2014 às 9:00

Bom dia !

Estou colocando essa programação no sketch do arduino mais infelizmente esta dando erro, estamos fazendo um trabalho da faculdade e a nossa primeira experiência com programação, será que é possivel nos auxiliar com o mesmo ?? Obrigado.

Comentário de Laboratório de Garagem em 19 novembro 2013 às 9:09

Postagem adicionada a guia de Projetos > Iniciante.

Parabéns!!!

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço