%% leer_balanza_tiempo_real.m % ------------------------------------------------------------------------- % Lectura de balanza HX711 con Arduino + MATLAB en tiempo real % % CONFIGURACION EN ARDUINO: % - El Arduino debe estar corriendo el script que imprime: % tiempo_ms,peso % por puerto serie (ej: "1234,5.678") % - Baudrate debe coincidir (ej: 9600) % % IMPORTANTE: % - Cerrar el Serial Monitor del Arduino IDE antes de ejecutar MATLAB % - Solo un programa puede usar el puerto COM a la vez % % FUNCIONAMIENTO: % - MATLAB se conecta al puerto serie % - Arduino se reinicia automaticamente % - Se leen datos en tiempo real y se grafican % % COMO DETENER: % - Cerrar la ventana de la figura (X) % → esto detiene la adquisicion de forma segura % → se cierra el puerto serie % → se guardan los datos automaticamente % % SALIDA: % - Archivo .mat con: % tiempo_s (segundos) % peso_g (gramos, si esta bien calibrado) % % ------------------------------------------------------------------------- clear; clc; close all; %% Parametros puerto = 'COM3'; baudrate = 9600; %% Conectar s = serialport(puerto, baudrate); configureTerminator(s, "LF"); flush(s); pause(2); % esperar reinicio del Arduino fprintf('Adquiriendo... (cerrar figura para detener)\n'); %% Inicializar tiempo_ms = []; peso_g = []; %% Crear figura fig = figure; hold on; grid on; xlabel('Tiempo (s)'); ylabel('Peso (g)'); title('Lectura en tiempo real'); %% Loop principal while ishandle(fig) if s.NumBytesAvailable > 0 linea = readline(s); datos = split(linea, ','); if numel(datos) == 2 t = str2double(datos(1)); p = str2double(datos(2)); if ~isnan(t) && ~isnan(p) tiempo_ms(end+1) = t; %#ok peso_g(end+1) = p; %#ok plot(t/1000, p, '.b'); drawnow; end end end end fprintf('Adquisicion detenida (figura cerrada).\n'); %% Cerrar puerto clear s; %% Procesar datos tiempo_s = tiempo_ms / 1000; %% Grafico final figure; plot(tiempo_s, peso_g, '.-'); xlabel('Tiempo (s)'); ylabel('Peso (g)'); title('Datos finales'); grid on; %% Guardar timestamp = datestr(now, 'yyddmm_HHMM'); filename = ['datos_balanza_' timestamp '.mat']; save(filename, 'tiempo_s', 'peso_g'); fprintf('Datos guardados en %s\n', filename);