Display de Profundidade de Furação Preciso com Sensor Giroscópio e Arduino Nano
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino Nano R3 | 1 |
Ferramentas Necessárias
- Impressora 3D (genérica)
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Se você precisa furar uma profundidade específica, precisa de uma furadeira de bancada com display de profundidade. A maioria tem uma régua com seta para leitura. O sucesso depende de quão precisamente você consegue ler a posição desejada. Neste projeto Arduino apresento uma alternativa: um display de profundidade de furação com sensor giroscópio e display 7 segmentos com suporte Arduino.
A máquina que mais uso na oficina não é serra nem esmeril. É de longe a furadeira de bancada. Independentemente do projeto, ela é sempre usada. Se preciso de certa profundidade, uso a régua embutida e memorizo a profundidade alvo. Funciona bem.
Mas com a idade — sim, sim, sim — fica cada vez mais difícil ler a profundidade com precisão de milímetro. E se a luz não for boa, é quase impossível. Colocar óculos só para isso? E onde guardar depois? Ainda não cheguei lá.
Fiel ao lema de Paul Akers do "2 Second Lean":
Tem que haver uma solução melhor, você só precisa pensar e fazer.
Possibilidades de Medição
Poderia colocar uma lupa na frente da escala para facilitar a leitura. Melhoraria a leitura, mas não resolveria a necessidade de memorizar a medida cada vez. E se estiver fazendo artesanato, deve ser divertido também.
Por isso uma solução eletrônica é melhor. De preferência compacta para caber ao lado do interruptor liga/desliga da furadeira. Para isso gosto do Arduino Nano: pinos suficientes para controlar tudo e tamanho reduzido.
Mas como medir a profundidade de furação? Existem várias possibilidades:
- Medição ultrassônica? Poderia funcionar, mas precisa de mecânica extra para mover superfície reflexora junto com a broca.
- Codificador a cabo (wire-actuated encoder)? Possível, mas complexo se feito do zero: roldana, barreiras ópticas, mola de retorno. Melhor usar encoder rotativo direto? Menos componentes, mas resolução grossa — precisaria de engrenagens para redução.
Ok, pensar mais.
Minha furadeira, como a maioria, tem um volante lateral para ajuste de profundidade. Gira aproximadamente 270°. Nem uma volta completa.
Isso é perfeito para medição de ângulo com sensor giroscópio. O cabo não torce e só precisa de um componente barato. O giroscópio pode ser fixado diretamente no eixo do volante.
Conceito
Sempre procedo da mesma forma ao definir profundidade: risco a superfície com a broca, anoto a coordenada, adiciono a profundidade desejada e furo até atingir a profundidade.
Quero manter o processo básico. Para não furar demais, quero ser avisado quando a profundidade programada for atingida.


Um botão assume essa função. Ao pressioná-lo, o Arduino salva a posição atual como valor de parada e pode me avisar quando atingida depois.
Os componentes restantes ocupam mais espaço e pesam mais. Felizmente, o gabinete da minha máquina é metálico. Por isso uso um ímã de neodímio para fixação.
Resta a questão: como fixar o sensor na máquina?
O eixo da furadeira tem porca sextavada SW17. Basta um componente impresso em 3D que aceite o sensor e encaixe na porca sextavada.

Componentes Necessários
- Arduino Nano
- Sensor giroscópio GY-521 (MPU-6050)
- Módulo display 7 segmentos 8 dígitos (versão SPI com CI MAX7219)
- Botão (pushbutton)
- Interruptor liga/desliga
- Alimentação: porta-pilhas AA/AAA ou power bank
- Gabinete impresso em 3D
- Ímã de neodímio
Conexão do Sensor Giroscópio (GY-521)
Conectado via I2C. Usamos A5 e A4 no Nano.
- VCC → 5V
- GND → GND
- SCL → A5
- SDA → A4
- XDA → não conectado
- XCL → não conectado
- ADO → não conectado
- INT → não conectado
Módulo Display 7 Segmentos
Qualquer pino digital pode ser usado. Os pinos são definidos no sketch.
- VCC → 3,3V
- GND → GND
- DIN → D12
- CS → D10
- CLK → D11
Botão
Pino de entrada livre. Uso pino D9.
Alimentação
Uso 6 pilhas AA. Após o interruptor liga/desliga, alimentam todo o sistema.
Gabinete
Projetei o gabinete no Autodesk Fusion 360. Imprimi na Anycubic i3 Mega. O ímã de neodímio para fixação na máquina é colado internamente. Se o display atrapalhar, remove-se rapidamente.
Sketch Arduino
Usei a biblioteca LedControl.h para controlar o display 7 segmentos. Se não instalada, instale via Gerenciador de Bibliotecas.
O sensor giroscópio usa barramento I2C. Ao buscar bibliotecas, decidi não usar nenhuma. Comunicação via Wire.h.
No final do artigo, links que me ajudaram a entender.
O controle do display 7 segmentos funciona muito bem com LedControl.
Após inicialização com os pinos, o setup() só precisa de alguns preparos para acordar o display e ajustar intensidade.
No loop(), o display mostra apenas a profundidade atual e, se definida, a posição de parada, também em números.
O display espera cada dígito como tipo caractere. Quero usar uma casa decimal como precisão. A função dtostrf converte float em array de caracteres. Depois em string para mostrar caractere a caractere no display.
dtostrf(currentPos, 4, 1, txt);
s = ' ' + String(txt);
lc.setChar(0, 4, s.charAt(s.length()-1), false);
lc.setChar(0, 5, s.charAt(s.length()-3), true);
lc.setChar(0, 6, s.charAt(s.length()-4), false);
lc.setChar(0, 7, s.charAt(s.length()-5), false);
Quando a posição de parada é atingida, "StOP" aparece no display. O "t" minúsculo é gerado via setRow com padrão de bits B00001111.
Leitura do giroscópio via funções da biblioteca Wire. Uso apenas o acelerômetro para determinar posição angular.
Com conexão USB à Arduino IDE, tudo funcionava perfeitamente. Após desconectar e ligar na fonte externa, o sensor não fornecia dados. Só voltava a funcionar após reset do Arduino.
Isso me deu a maior dor de cabeça do projeto. Poderiam dizer que o indicador salvou meus olhos, mas por isso arranquei quase todo meu cabelo!
Após longa busca, instalar um tempo de espera após acordar o sensor foi a solução. Isso torna o delay(1000) o comando mais importante de todo o código fonte.
// Preparar sensor GY-521
// Usamos apenas dados do acelerômetro
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0x00); // Acordar MPU
Wire.endTransmission(true);
// Este delay foi MUITO necessário no meu caso!
delay(1000);
Wire.beginTransmission(MPU);
Wire.write(0x1C); // Registrador ACCEL_CONFIG
Wire.write(0x10); // Configura como 00010000 para faixa ±8g
Wire.endTransmission(true);
Valores de offset devem ser determinados no início, senão os valores flutuam. No setup, 100 valores são medidos e as médias dos desvios calculadas.
Calcular o ângulo dos dados do sensor não é trivial. Mas há muitos tutoriais sobre os cálculos.
O ângulo X em graus é calculado com esta fórmula:
AccAngleX = (atan(AccY / sqrt(pow(AccX,2) + pow(AccZ,2))) * rad_to_deg);
Porém, os valores do acelerômetro flutuam muito. Portanto, o valor calculado atual é mediado com o anterior em 50% cada.
TotalAngleX = 0.5 * TotalAngleX + 0.5 * AccAngleX;
Os valores de ângulo saem de -90° a +90°. Mas preciso de 0° a 360° para converter em profundidade de furação.
Não achei solução simples ainda. Para minha aplicação, basta ver se Z e Y do sensor são positivos ou negativos e converter o ângulo accordingly.
delta = 0;
if (AccZ < 0) {
delta = 180.0 - TotalAngleX * 2.0;
}
if (AccZ > 0 && AccY < 0) {
delta = 360.0;
}
DrillingMachineAngle = TotalAngleX + delta;
// Se próximo de 360°, exibe 0°
if (DrillingMachineAngle > 350) DrillingMachineAngle = 0;
Falta o ângulo máximo de rotação que o volante permite. O jeito mais fácil: mandar o ângulo determinado via Serial.print e anotar o valor máximo.
No meu caso, 316°. Com profundidade máxima de 50 mm, a posição atual é:
currentPos = 50.0 / 316.0 * DrillingMachineAngle;
Se o botão for pressionado, o Arduino salva a posição atual. Mostra 8888 no display e espera 1 segundo.
Se posição de parada definida, a profundidade restante até a parada é mostrada no display direito.
Montagem e Teste
O sensor giroscópio é melhor fixado com um ponto de cola quente. Passe os cabos pela tampa. Pronto para esta parte.
No primeiro teste, o giroscópio deve ser alinhado. Instalei horizontalmente. Como o suporte é rotativo, ajustei facilmente até mostrar 0.0 no display.






Então o primeiro teste pode começar.
No geral, estou muito satisfeito com a solução. O sensor reage muito rápido e os valores calculados batem exatamente com a profundidade da broca.
E graças ao grande display LED, não preciso me preocupar com óculos até os 85 anos para ler a profundidade exata.
Lembre-se sempre do que Paul diz: Conserte o que te incomoda!
Divirta-se construindo!
Links que podem ajudar:
- Trabalhando com MPU6050 GY-521 - Parte 1
- Arduino Playground MPU-6050
- Interfacing MPU6050 com Arduino
- Biblioteca GY-521 por Rob Tillaart
- Livro 2 Second Lean de Paul Akers
O projeto também está em alemão em: techpluscode.de/bohrtiefenanzeige-mit-gyro-sensor/
Código
Arquivo drilling-depth.ino (código completo comentado em inglês/alemão).
Peças Personalizadas e Gabinetes
Arquivo 3D do modelo: drilling-depth-3d-model_Yn2q0MSNa4.zip
Esquemático

Processo de manufatura
- Integração de Dados de Sensores no Raspberry Pi: Guia Prático
- Sensor de Rastreamento de Linha com Raspberry Pi – Detector KY‑033 Simples para Porta/Linha
- Construa API Robusta de Temperatura e Sensores no Raspberry Pi com Módulo GY‑91
- Construa um Sistema Aeropônico Automatizado com Raspberry Pi e Sensor de Umidade
- Domine GPIO do Raspberry Pi: Interface com Sensor PIR de Movimento no B+/Modelo 2
- Integrando Radar Pulsado Acconeer A111 com Raspberry Pi: Guia Prático
- Como Conectar, Calibrar e Programar Sensor PIR HC‑SR501 com Raspberry Pi
- Logger de Sensores Python/MicroPython: Armazene Dados de Sensores no Google Sheets Facilmente
- Integrando Sensor Termopar com Arduino Portenta H7 usando CI MAX6675
- Dispositivo de Precisão para Medição de Pressão e Fluxo de Ar com Sensor Analógico