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:
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:
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
Comentar
Eu ainda não entendi a utilidade do laser se tem o sensor ultrassonico
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?
amigo quanto voce gastou
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 !
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!
senhores, teria como essa trena tirar a área em metro². alguem sabe como programar o arduino para isso.
Ola pessoal alguem conseguiu corrigir os erros do código para o arduino
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...
Felipe Arrighi, também estou fazendo essa trena, e estou tendo o mesmo problema... você consegui resolver o seu?? se sim. como?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)