Nombre: Báscula para café - Arduino nano
Nivel de Dificultad:
Descripción:
En este proyecto diseño y construyo una báscula digital para café utilizando un Arduino Nano, una celda de carga de 10 kg con módulo HX711 y una pantalla OLED 128×64.
La báscula permite medir el peso en tiempo real en gramos, cuenta con tara automática al encender, botón de tara manual, filtrado de señal para mayor estabilidad y un sistema de calibración por software.
Este proyecto está pensado como una herramienta práctica para baristas, makers o estudiantes que quieran aprender sobre sensores de fuerza, adquisición de datos, filtrado de señales y sistemas embebidos, aplicados a un caso real.
Lista de materiales
Diagrama
Código:
#include "HX711.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// ---------- OLED ----------
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define OLED_ADDR 0x3C
// ---------- HX711 ----------
#define HX_DOUT A1
#define HX_SCK A0
HX711 scale;
// ---------- Botón Tara ----------
#define BTN_TARE 4
// ---------- Calibración ----------
float calibration_factor = 198.2; // <-- TU valor calibrado
// ---------- Filtro ----------
const int N = 10;
float buffer[N];
int idx = 0;
bool filled = false;
unsigned long lastTareMs = 0;
float movingAverage(float v) {
buffer[idx] = v;
idx = (idx + 1) % N;
if (idx == 0) filled = true;
float sum = 0;
int count = filled ? N : idx;
for (int i = 0; i < count; i++) sum += buffer[i];
return sum / count;
}
void drawWeight(float g) {
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.print("Cafe Scale (g)");
display.setTextSize(2);
display.setCursor(0, 18);
display.print(g, 1);
display.print(" g");
display.display();
}
void drawMsg(const char* msg) {
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.println(msg);
display.display();
}
void setup() {
Serial.begin(115200);
pinMode(BTN_TARE, INPUT_PULLUP);
// OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
while (1) {}
}
// HX711
scale.begin(HX_DOUT, HX_SCK);
scale.set_scale(calibration_factor);
// ✅ Auto TARA al encender
drawMsg("Estabilizando...\nNo tocar");
delay(1500);
scale.tare(30);
drawMsg("Listo!");
delay(400);
}
void loop() {
// 🔘 Botón de Tara manual
if (digitalRead(BTN_TARE) == LOW && millis() - lastTareMs > 600) {
drawMsg("TARANDO...");
scale.tare(30);
lastTareMs = millis();
delay(300);
}
float grams_raw = scale.get_units(10);
float grams = movingAverage(grams_raw);
if (abs(grams) < 0.3) grams = 0;
drawWeight(grams);
Serial.print("g: ");
Serial.println(grams, 2);
delay(80);
}
Dónde comprar:
Electrónica DIY
Archivos STL







