Ordenación Eficiente de Resistencias para Proyectos con Arduino Nano: Un Método Simple y Ahorra Tiempo
Componentes y Suministros
- Arduino Nano R3 × 1
- Resistencia 100 Ω × 1
- Resistencia 1 kΩ × 1
- Resistencia 10 kΩ × 1
- Resistencia 100 kΩ × 1
- Resistencia 1 MΩ × 1
- Pantalla OLED 0.96" 64×128 (I2C) × 1
- Cables jumper (genéricos) × 1
Herramientas y Máquinas Necesarias
- Impresora 3D (genérica)
- Soldador (genérico)
Aplicaciones y Servicios Online
- Arduino IDE
Sobre el Proyecto
¿Te has encontrado alguna vez, tras terminar un proyecto, con un montón de resistencias desordenadas como esta?

¿Eres de los que les da pereza comprobar el código de colores de cada resistencia para ordenarlas? ¿Incluso usar un multímetro te parece demasiado trabajo? Entonces quizás esta sea tu solución: ¡el ohmímetro definitivo para vagos!

Todo lo que necesitas para construir este sencillo ohmímetro que comprobará el valor de tus resistencias desordenadas son un puñado de resistencias (de valor conocido esta vez), un Arduino y una pantalla (yo usé una pantalla OLED I2C).
Principio de Funcionamiento: Divisor de Tensión
Nos basaremos en la ecuación del divisor de tensión para obtener el valor de una resistencia desconocida en serie con una resistencia de valor conocido. Esta técnica simple tiene un inconveniente: cuanto más diferentes sean las dos resistencias, menos precisa será nuestra medición. Para superar esto, usaremos múltiples resistencias y escribiremos un código que permita al Arduino elegir la resistencia más adecuada para el cálculo del valor desconocido.
Siguiendo esta filosofía, podemos construir el ohmímetro siguiendo el esquema de la imagen inferior.

Si usas una pantalla I2C, también puedes seguir el esquema para esa conexión. El Arduino Nano usa el pin A4 para SDA y A5 para SCL.
El Código
El código que utilicé puede verse aquí. Utiliza la librería Adafruit para la pantalla OLED. Solo necesitas descargarla a través del Gestor de Librerías del Arduino IDE y copiar las partes necesarias. Usé dos bitmaps para hacer la lectura más vistosa; puedes añadir los tuyos o reemplazar los míos.
#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);
// ... (arrays de bitmap para logos)
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("Fallo al asignar SSD1306"));
for(;;);
}
display.clearDisplay();
display.drawBitmap(0,0, myLOGO, 128, 64, WHITE);
display.display();
delay(2000);
}
void loop() {
// Secuencia de selección automática de resistencia de referencia
pinMode(D2, OUTPUT); pinMode(D3, INPUT); pinMode(D4, INPUT); pinMode(D5, INPUT); pinMode(D6, INPUT);
digitalWrite(D2, HIGH);
raw = analogRead(Analogohm);
Rn = R5; // 1M
if (raw < 350 || raw > 800) {
digitalWrite(D2, LOW); pinMode(D2, INPUT);
pinMode(D3, OUTPUT); digitalWrite(D3, HIGH);
raw = analogRead(Analogohm);
Rn = R4; // 100k
if (raw < 350 || raw > 800) {
digitalWrite(D3, LOW); pinMode(D3, INPUT);
pinMode(D4, OUTPUT); digitalWrite(D4, HIGH);
raw = analogRead(Analogohm);
Rn = R3; // 10k
if (raw < 350 || raw > 800) {
digitalWrite(D4, LOW); pinMode(D4, INPUT);
pinMode(D5, OUTPUT); digitalWrite(D5, HIGH);
raw = analogRead(Analogohm);
Rn = R2; // 1k
if (raw < 350 || raw > 800) {
digitalWrite(D5, LOW); pinMode(D5, INPUT);
pinMode(D6, OUTPUT); digitalWrite(D6, HIGH);
raw = analogRead(Analogohm);
Rn = R1; // 100
}
}
}
}
Vout = 5.0 * (raw / 1024.0);
Ru = (Rn * Vout) / (5.0 - Vout);
// Redondeo a valores comerciales estándar
if (Ru < 100) Ru = 10 * round(Ru / 10);
else if (Ru < 1000) Ru = 100 * round(Ru / 100);
else if (Ru < 10000) Ru = 1000 * round(Ru / 1000);
else if (Ru < 100000) Ru = 10000 * round(Ru / 10000);
else if (Ru < 1000000) 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("Hola,"));
display.println(F("El valor es:"));
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);
}
Notas Importantes
NOTA #1: En cada sentencia IF necesitamos redefinir el pinMode de cada pin digital, ya que si lo mantenemos como salida se comportará como un pin de baja impedancia y arruinará nuestra medición en el pin A0.
NOTA #2: Para este dispositivo usé solo 5 resistencias, pero puedes añadir muchos más valores para cada pin digital de la placa.

Carcasa Impresa en 3D
Para la aplicación real, necesitamos construir una caja donde podamos enchufar la resistencia desconocida y ver el resultado en la pantalla. La caja que hice se puede imprimir fácilmente con una impresora 3D y todas las piezas se fijan con una pistola de silicona. Se requirió algo de soldadura de las resistencias conocidas para que todo cupiera en un volumen reducido.

Solo queda una cosa: enchufa tus resistencias desordenadas en esos pequeños agujeros y ¡limpia tu banco de trabajo!
ACTUALIZACIÓN: Modifiqué la parte de redondeo del código ya que podía causar errores al redondear resistencias alrededor de 5k. Con este cambio el problema debería estar solucionado. De todas formas, añadir una resistencia de 5k entre las referencias debería prevenir el problema por completo.
Código Completo
El código completo está disponible en la sección de código del proyecto original.
Piezas Personalizadas y Cajas
- Parte superior de la caja:
cap_yLoQKngMli.obj - Parte inferior de la caja:
box_AnzsFPqgfe.obj
Esquemáticos

Proceso de manufactura
- Alerta de Sed Inteligente para Plantas: Sensor DIY para Riego Óptimo
- Reloj de Palabras en Italiano con Arduino Nano, NeoPixel, LCD y RTC
- Medidor kWh Sigfox Fiable con Arduino MKR Fox 1200
- Monitor de temperatura con Bluetooth usando Arduino Nano
- Cerradura por Gestos Sin Contacto: Acceso Seguro con APDS-9960 y Arduino
- Kit Compañero Arduino Nano: Componentes y Herramientas Esenciales para Electrónica DIY
- Kit Adaptador USB MIDI para Arduino Micro / Leonardo: Lista Completa de Componentes
- Circuito de entrada analógica aislada para Arduino
- Visualizador Espectro Audio RGB 32 Bandas - Matriz LED Arduino
- Test de Precisión de Tiempo de Reacción con Arduino UNO
- Resistencias de cero ohmios: Ventajas clave y usos reales