Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Classificação Eficiente de Resistores para Projetos com Arduino Nano: Um Método Simples e que Economiza Tempo

Componentes e Materiais

Ferramentas Necessárias

Aplicativos e Serviços Online

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!

Classificação Eficiente de Resistores para Projetos com Arduino Nano: Um Método Simples e que Economiza Tempo
O caos típico após um projeto
Classificação Eficiente de Resistores para Projetos com Arduino Nano: Um Método Simples e que Economiza Tempo
O oímetro "Lazy" em ação

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.

Classificação Eficiente de Resistores para Projetos com Arduino Nano: Um Método Simples e que Economiza Tempo
Esquemático do circuito (compatível com display I2C: SDA no A4, SCL no A5)

Lógica do Código

O algoritmo funciona da seguinte forma:

  1. O Arduino testa a tensão no pino A0 com o maior resistor de referência (1 MΩ).
  2. 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Ω).
  3. Repete o processo descendo pela escala (10 kΩ, 1 kΩ, 100 Ω) até encontrar a faixa ideal.
  4. Uma vez selecionado o resistor de referência adequado, calcula o valor do resistor desconhecido (Ru) pela equação do divisor de tensão.
  5. 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.

Classificação Eficiente de Resistores para Projetos com Arduino Nano: Um Método Simples e que Economiza Tempo
Protótipo montado na protoboard

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.

Classificação Eficiente de Resistores para Projetos com Arduino Nano: Um Método Simples e que Economiza Tempo
Caixa final: basta plugar o resistor e ler o valor

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

Esquemático

Classificação Eficiente de Resistores para Projetos com Arduino Nano: Um Método Simples e que Economiza Tempo

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

  1. Alerta Inteligente de Sede para Plantas – Sensor DIY para Hidratação Ideal
  2. Relógio de Palavras em Italiano com Arduino Nano, NeoPixel, LCD e RTC
  3. Medidor kWh Confiável com Sigfox e Arduino MKR Fox 1200
  4. Monitor de Temperatura com Bluetooth usando Arduino Nano
  5. Fechadura por Gestos Sem Toque: Acesso Seguro com APDS-9960 e Arduino
  6. Companion IC: Relógio, Ohmímetro, Capacímetro e Testador de Diodos com Arduino Nano
  7. Kit Adaptador USB-MIDI para Arduino Micro/Leonardo – Lista Completa de Peças
  8. Circuito de Entrada Analógica Isolada para Arduino
  9. Teste de Tempo de Reação Preciso com Arduino UNO
  10. Resistores de Zero Ohm: Principais Vantagens e Usos no Mundo Real