Classificação Eficiente de Resistores para Projetos com Arduino Nano: Um Método Simples e que Economiza Tempo
Componentes e Materiais
- Arduino Nano R3 (1 unidade)
- Resistor 100 Ω (1 unidade)
- Resistor 1 kΩ (1 unidade)
- Resistor 10 kΩ (1 unidade)
- Resistor 100 kΩ (1 unidade)
- Resistor 1 MΩ (1 unidade)
- Display OLED 0.96" 64x128 I2C (1 unidade)
- Jumpers (genéricos)
Ferramentas Necessárias
- Impressora 3D (genérica)
- Ferro de solda (genérico)
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Você já terminou um projeto e se deparou com uma pilha de resistores misturados? É preguiçoso demais para conferir o código de cores de cada um ou até mesmo usar um multímetro? Então esta pode ser a solução para você: o oímetro definitivo para preguiçosos!
Para construir este oímetro simples, você precisará apenas de um conjunto de resistores de valor conhecido, um Arduino e um display (utilizei um display OLED I2C). O princípio baseia-se na equação do divisor de tensão para obter o valor de um resistor desconhecido em série com um resistor de valor conhecido.
O Princípio do Divisor de Tensão
A equação fundamental é:
Vout = Vin × R2 / (R1 + R2)
Se R1 e R2 forem iguais, Vout será próximo de 2,5 V (valor 512 na leitura de 10 bits do ADC). O grande desafio é que a precisão cai quando os resistores são muito diferentes. Para resolver isso, utilizamos múltiplos resistores de referência e um código que permite ao Arduino selecionar automaticamente o mais adequado para cada medição.
Lógica do Código
O algoritmo funciona da seguinte forma:
- O Arduino testa a tensão no pino A0 com o maior resistor de referência (1 MΩ).
- Se a leitura estiver fora da faixa ideal (350–800), ele desliga esse pino, coloca em alta impedância (INPUT) e ativa o próximo resistor (100 kΩ).
- Repete o processo descendo pela escala (10 kΩ, 1 kΩ, 100 Ω) até encontrar a faixa ideal.
- Uma vez selecionado o resistor de referência adequado, calcula o valor do resistor desconhecido (Ru) pela equação do divisor de tensão.
- Arredonda o valor para o padrão comercial mais próximo (E12/E24) e exibe no display OLED.
Nota importante: Em cada if, redefinimos o pinMode dos pinos digitais. Se mantidos como OUTPUT, eles atuam como baixa impedância e comprometem a leitura no A0.
Caixa Impressa em 3D
Para a versão final, criei uma caixa impressa em 3D onde basta encaixar o resistor desconhecido nos orifícios e ler o valor no display. Todos os componentes são fixados com cola quente e alguns resistores de referência foram soldados para caber no volume reduzido.
Código Completo
O código utiliza a biblioteca Adafruit_SSD1306 para o display OLED. Inclui dois bitmaps personalizados (logo e ícone de resistor) que podem ser substituídos. A lógica de seleção automática de faixa e arredondamento inteligente está implementada na função loop() e na função auxiliar Resistance().
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// ... (bitmaps myLOGO e myBitmap omitidos por brevidade)
int R1 = 100;
int R2 = 1000;
int R3 = 10000;
long R4 = 100000;
long R5 = 1000000;
long Rn;
int D2 = 2, D3 = 3, D4 = 4, D5 = 5, D6 = 6;
float raw = 0, Vout = 0, Ru = 0;
int Analogohm = A0;
void setup() {
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Falha na alocacao SSD1306"));
for(;;);
}
display.clearDisplay();
display.drawBitmap(0,0, myLOGO, 128, 64, WHITE);
display.display();
delay(2000);
}
void loop() {
// Seleção automática da faixa (1M -> 100k -> 10k -> 1k -> 100)
pinMode(D2, OUTPUT); pinMode(D3, INPUT); pinMode(D4, INPUT); pinMode(D5, INPUT); pinMode(D6, INPUT);
digitalWrite(D2, HIGH);
raw = analogRead(Analogohm);
Rn = R5;
if (raw < 350 || raw > 800) {
digitalWrite(D2, LOW); pinMode(D2, INPUT);
pinMode(D3, OUTPUT); digitalWrite(D3, HIGH);
raw = analogRead(Analogohm); Rn = R4;
if (raw < 350 || raw > 800) {
digitalWrite(D3, LOW); pinMode(D3, INPUT);
pinMode(D4, OUTPUT); digitalWrite(D4, HIGH);
raw = analogRead(Analogohm); Rn = R3;
if (raw < 350 || raw > 800) {
digitalWrite(D4, LOW); pinMode(D4, INPUT);
pinMode(D5, OUTPUT); digitalWrite(D5, HIGH);
raw = analogRead(Analogohm); Rn = R2;
if (raw < 350 || raw > 800) {
digitalWrite(D5, LOW); pinMode(D5, INPUT);
pinMode(D6, OUTPUT); digitalWrite(D6, HIGH);
raw = analogRead(Analogohm); Rn = R1;
}
}
}
}
Vout = 5.0 * (raw / 1024.0);
Ru = (Rn * Vout) / (5.0 - Vout);
// Arredondamento inteligente para valores comerciais
if (Ru < 70) Ru = 10 * round(Ru / 10);
else if (Ru < 700) Ru = 100 * round(Ru / 100);
else if (Ru < 7000) Ru = 1000 * round(Ru / 1000);
else if (Ru < 70000) Ru = 10000 * round(Ru / 10000);
else if (Ru < 700000) Ru = 100000 * round(Ru / 100000);
else Ru = 1000000 * round(Ru / 1000000);
Resistance(Ru);
delay(1000);
}
void Resistance(long Ru) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(F("Ola!"));
display.println(F("O valor do resistor e"));
display.setCursor(20,25);
display.setTextSize(2);
display.print(Ru);
display.print(F(" Ohm"));
display.drawBitmap(0,0, myBitmap, 128, 64, WHITE);
display.display();
delay(2000);
}
Arquivos para Impressão 3D
- Tampa superior:
cap_yLoQKngMli.obj - Base:
box_AnzsFPqgfe.obj
Esquemático
Dica extra: Adicionar um resistor de 4,7 kΩ ou 5 kΩ entre as referências melhora a precisão na faixa de 4,7–5,6 kΩ.
Processo de manufatura
- Alerta Inteligente de Sede para Plantas – Sensor DIY para Hidratação Ideal
- Relógio de Palavras em Italiano com Arduino Nano, NeoPixel, LCD e RTC
- Medidor kWh Confiável com Sigfox e Arduino MKR Fox 1200
- Monitor de Temperatura com Bluetooth usando Arduino Nano
- Fechadura por Gestos Sem Toque: Acesso Seguro com APDS-9960 e Arduino
- Companion IC: Relógio, Ohmímetro, Capacímetro e Testador de Diodos com Arduino Nano
- Kit Adaptador USB-MIDI para Arduino Micro/Leonardo – Lista Completa de Peças
- Circuito de Entrada Analógica Isolada para Arduino
- Teste de Tempo de Reação Preciso com Arduino UNO
- Resistores de Zero Ohm: Principais Vantagens e Usos no Mundo Real