Chegamos na 8ª edição da BlueBox! O projeto que escolhemos para essa edição é uma ferramenta essencial para todo maker: vamos construir uma trena e nível digital usando um Arduino, um sensor ultrassônico HC-SR04 e um acelerômetro e giroscópio MPU-6050.
A trena é capaz de medir distâncias de até 4 metros e o nível mede ângulos nos eixos X e Y.
Você pode usar a trena e nível digital como uma ferramenta em seus projetos, para medir o distanciamento social durante a pandemia ou até mesmo para brincar com o seu gato. Gostou do projeto?
Materiais Necessários
Para montar sua trena e nível digital você precisar dos seguintes componentes:
- Placa Nano + cabo USB
- Sensor de Distância Ultrassônico HC-SR04
- Acelerômetro e Giroscópio MPU-6050
- Diodo Laser 5 V
- Display LCD 16×2
- Protoboard 400 pontos
- Bateria Alcalina 9 V
- Suporte para Bateria 9V
- Mini Chave Push-Button
- Jumpers Macho-Fêmea
- Jumpers Macho-Macho
- Barra de Pinos 90 Graus
- Resistor 1KΩ
- Resistor 220Ω
- Tubo Termo retrátil φ2mm
- Case da trena e nível digital
Além disso, você vai precisar de algumas ferramentas extras:
- Ferro de Solda
- Estanho
- Alicate de corte
- Cola instantânea
Código
Antes de começar a montagem do circuito, vamos carregar o código para o Arduino Nano. Primeiro, copie o código abaixo e cole na Arduino IDE.
//Bibliotecas #include<Wire.h> #include <LiquidCrystal.h> // Pinos LiquidCrystal lcd(7, 6, 5, 4, 3, 2); const int MPU = 0x68; #define trigPin 8 #define echoPin 9 #define selectButton 10 #define laserPin 11 // Variáveis int16_t AcX, AcY, AcZ; long duration; float distance; int program = 0; float d = 0; float d1 = 0; float d2 = 0; int axis = 0; int angle = 0; int unitSelect = 0; String unit = "cm"; void setup() { // Inicialização MPU6050 Wire.begin(); Wire.beginTransmission(MPU); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true); // Inicialização LCD 16x2 lcd.begin(16, 2); // Inicialização HC-SR04 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // Inicialização Push-Button pinMode(selectButton, INPUT_PULLUP); // Inicialização Laser pinMode(laserPin, OUTPUT); } void loop() { switch (program) { //Programa de seleção da unidade de medida case 0: lcd.setCursor(0, 0); lcd.print("Selecione a "); lcd.setCursor(0, 1); lcd.print("unidade: "); lcd.setCursor(13, 1); lcd.print(unit); lcd.print(" "); delay(10); if (digitalRead(selectButton) == 0) { if (unitSelect == 0) { unit = "cm"; unitSelect = 1; } else if (unitSelect == 1) { unit = "m"; unitSelect = 0; } // Se o botão for pressionado por mais de meio segundo - mudar o programa delay(500); if (digitalRead(selectButton) == 0) { program = 1; lcd.clear(); delay(500); } } break; //Programa de medição de distância case 1: digitalWrite(laserPin, HIGH); distance = getDistance(); lcd.setCursor(0, 0); lcd.print("Dist: "); lcd.print(distance); lcd.print(" "); lcd.setCursor(14, 0); lcd.print(unit); delay(10); lcd.setCursor(0, 1); lcd.print("d:"); lcd.setCursor(8, 1); lcd.print("d:"); delay(200); // Salva a distância 1 if (digitalRead(selectButton) == 0) { if (d == 0) { lcd.setCursor(0, 1); lcd.print("d: "); lcd.setCursor(2, 1); lcd.print(distance); d = 1; delay(100); } // Salva a distância 2 else if (d == 1) { lcd.setCursor(8, 1); lcd.print("d: "); lcd.setCursor(10, 1); lcd.print(distance); d = 0; delay(100); } // Se o botão for pressionado por mais de meio segundo - mudar o programa delay(500); if (digitalRead(selectButton) == 0) { program = 2; d = 0; lcd.clear(); delay(500); } } break; // Programa de medição de ângulo case 2: digitalWrite(laserPin, LOW); Wire.beginTransmission(MPU); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU, 6, true); AcX = Wire.read() << 8 | Wire.read(); AcY = Wire.read() << 8 | Wire.read(); AcZ = Wire.read() << 8 | Wire.read(); if ( axis == 0) { // Cálculo do ângulo de inclinação angle = atan(-1 * AcX / sqrt(pow(AcY, 2) + pow(AcZ, 2))) * 180 / PI; lcd.setCursor(0, 0); lcd.print("Inclinacao"); } else if (axis == 1) { // Calculo do ângulo de rotação angle = atan(-1 * AcY / sqrt(pow(AcX, 2) + pow(AcZ, 2))) * 180 / PI; lcd.setCursor(0, 0); lcd.print("Rotacao"); } lcd.setCursor(0, 1); lcd.print("Angulo: "); lcd.print(abs(angle)); lcd.print(" "); lcd.setCursor(10, 1); lcd.print(" graus"); delay(200); if (digitalRead(selectButton) == 0) { if (axis == 0) { axis = 1; delay(100); } else if (axis == 1) { axis = 0; delay(100); } //Se o botão for pressionado por mais de meio segundo - mudar o programa delay(500); if (digitalRead(selectButton) == 0) { program = 0; lcd.clear(); delay(500); } } break; } } // Função para medição de distância float getDistance() { digitalWrite(trigPin, LOW); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; //distância em cm // Conversão de unidades if (unitSelect == 0) { distance = distance; // cm para cm unit = "cm"; } else if (unitSelect == 1) { distance = distance * 0.01; // cm para m unit = "m"; } return distance; }
Conecte o Arduino no computador utilizando o cabo USB. Vá em Ferramentas > Placa e selecione Arduino Nano. Em seguida, vá em Ferramentas > Porta e selecione a porta na qual a placa está conectada. Agora você já pode carregar o código para a placa.
OBS: Se nesse processo ocorrer algum erro, vá mais uma vez em Ferramentas, clique em processador, selecione ATMega 328P (Old Bootloader) e carregue novamente o código para a placa.
Solda dos Componentes
Primeiro, vamos soldar a barra de pinos 90 graus no display LCD. Como o display possui 16 pads, vamos precisar usar apenas 16 pinos da barra. Você pode separar os pinos usando um alicate ou até mesmo com a mão. Encaixe a barra de pinos no display como mostra a imagem abaixo, com os pinos em 90 graus virados para a parte de dentro do display. Depois solde cada um dos pads.
O MPU-6050 acompanha duas barras de pinos. Vamos soldar a barra de 180 graus.
Para facilitar a montagem, vamos soldar conectores machos nas pontas dos cabos do conector de bateria e no diodo laser. Separe dois jumpers macho-macho e faça um corte de 3 cm acima de cada conector. Corte o termo retrátil em 4 partes e insira cada uma das partes nos conectores machos dos jumpers. Decape os fios e depois solde no conector de bateria e no diodo laser.
Corte ao meio um jumper macho-macho, decape as pontas e solde nos conectores da mini chave push-button.
Circuito
Agora podemos conectar todos os componentes no Arduino Nano. Você deve seguir o esquemático abaixo:
As conexões são as seguintes:
ARDUINO | DISPLAY LCD 16×2 | ACELERÔMETRO MPU-6050 | ULTRASSôNICO HC-SR04 | DIODO LASER | MINI PUSH-BUTTON | RESISTOR 1K | RESISTOR 1 K | RESISTOR 220 | BATERIA 9V |
5V | PINO 2, PINO 15 | VCC | VCC | TERMINAL 1 | TERMINAL 1 | ||||
GND | PINO 1, PINO 5, PINO 16 | GND | GND | PINO AZUL | TERMINAL 1 | TERMINAL 1 | PINO PRETO | ||
VIN | PINO VERMELHO | ||||||||
D2 | PINO 14 | ||||||||
D3 | PINO 13 | ||||||||
D4 | PINO 12 | ||||||||
D5 | PINO 11 | ||||||||
D6 | PINO 6 | ||||||||
D7 | PINO 4 | ||||||||
D8 | PINO TRIG | ||||||||
D9 | PINO ECHO | ||||||||
D10 | TERMINAL 2 | TERMINAL 2 | |||||||
D11 | PINO VERMELHO | ||||||||
A4 | SDA | ||||||||
A5 | SCL | ||||||||
PINO 3 | TERMINAL 2 | TERMINAL 2 |
Montagem
Agora só precisamos montar nossa trena e nível digital. Passe todo o circuito pelo meio da case. Cole a protoboard na tampa inferior, de modo que ela fique posicionada bem abaixo do suporte para o sensor ultrassônico.
Com ajuda dos jumpers conectados no sensor ultrassônico, dobre os pinos até que eles fiquem a um ângulo de 90 graus com a placa. Encaixe o sensor ultrassônico na case. Depois encaixe o diodo laser.
Insira a bateria de 9 V no suporte e cole o suporte na case de modo que o botão de liga e desliga fique acessível.
Encaixe o display LCD na tampa superior e também faça a conexão da mini chave push-button.
Com tudo encaixado, é só fechar a case e nossa trena e nível digital está pronta. Talvez você precise apertar um pouco os fios para que a case encaixe com mais facilidade.
Funcionamento
Ao ligar, você terá que escolher a unidade de medida que irá utilizar: centímetros ou metros. O clique rápido permite mudar a unidade e o clique longo faz a seleção. Logo depois, você entra no programa de medida de distância. O clique curto permite gravar duas distâncias e o longo passa para o programa de medida de ângulo, que verifica a angulação dos eixos X e Y.
Gostou da trena e nível digital? Conte o que achou da 8ª edição da BlueBox e não esqueça de marcar a gente nas redes sociais!
Como Faço pra comprar este kit com embalagem e tudo? Ainda está disponível?
Olá Edson!
Infelizmente não, as bluebox tem tiragem limitada e não são vendidas como kits com embalagem posteriormente.
Você pode comprar os componentes separadamente e o arquivo para impressão do case está disponível também no post.
Abraços!
Vinícius – Equipe FilipeFlop
Achei um projeto muito legal e interessante, com certeza farei quando sobrar um tempinho (e dinheiro, rs)
mas, acho que poderiam ter pensado em alguma solução alternativa à protoboard de 400 pinos, pois com certeza os pinos e conexões irão soltar ou afrouxar conforme o uso e até mesmo ao abrir a trena pra trocar a bateria…
Alguém tem alguma dica pra isso?
Olá Marlon!
Você pode seguir o esquema de conexões e fazer uma montagem mais definitiva soltando os cabos e conexões.
Abraços!
Vinícius – Equipe FilipeFlop
Falha em reconhecimento de placa e não porta.
Desculpa
Olá Edson!
Já resolvemos no seu atendimento, quaisquer outras dúvidas ficamos à disposição.
Abraços!
Vinícius – Equipe FilipeFlop
Eu comprei o bluebox azul da trena . Montei mais não estou conseguindo carregar o Software. Não muito conhecimento de arduino. Trabalho mais CCS da Texas que é diferente do Arduino IDle. Poderiam me auxiliar a porta esta correta COM20
mais da falha de reconhecimento da porta.