Bygga
Type the product name from the box. Bygga shows every assembly step in 3D, with the parts, screws and tools for each one, and reads it out loud.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
Timegrapher para relojes mecánicos que corre entero en el navegador: marcha, amplitud y error de batida con una sonda y una tarjeta de sonido USB de 5 €. / In-browser timegrapher for mechanical watches.
翻譯準備中
正在載入完整 README。 以下為已儲存的摘錄。
Cronocomparador para relojes mecánicos que corre entero en el navegador. Mide marcha (s/día), amplitud (grados) y error de batida (ms), detecta las alternancias por hora solo, y dibuja la traza clásica de cinta de papel más la evolución temporal de las tres magnitudes. No necesita servidor de aplicación, ni build, ni dependencias.檢視完整 README ↗
Español · English
Cronocomparador para relojes mecánicos que corre entero en el navegador. Mide marcha (s/día), amplitud (grados) y error de batida (ms), detecta las alternancias por hora solo, y dibuja la traza clásica de cinta de papel más la evolución temporal de las tres magnitudes.
No necesita servidor de aplicación, ni build, ni dependencias.
Interfaz en español e inglés, con selector en la barra superior. Al abrirla
por primera vez toma el idioma del navegador y luego recuerda la elección. El
idioma arrastra el formato numérico —coma decimal en español, punto en inglés—,
los códigos de posición (EA/EB/CA frente a DU/DD/CU) y el separador del CSV, que
en español es ; porque la coma ya es el decimal.
Está pensado para una sonda piezo/micrófono conectada a una tarjeta de sonido
USB — en este equipo, una USB PnP Sound Device de C-Media
(VID 0x0D8C / PID 0x013C, familia CM108). Es un dispositivo USB Audio Class
estándar, así que el navegador lee el audio crudo con getUserMedia() y todo el
proceso de señal ocurre en JavaScript: no hay protocolo propietario que descifrar
ni driver que instalar.
Techo del hardware: 48 kHz, 16 bit, mono (USB Audio Class 1.0 a full-speed). Una muestra son 20,8 µs, y el desfase se afina por debajo de la muestra correlando cada tic contra una plantilla.
En línea: https://jrigol.github.io/timegrapher/
Cada push a main pasa las pruebas y, solo si pasan, se republica
(.github/workflows/pages.yml). El audio no sale del equipo: la página se
descarga una vez y todo el proceso de señal ocurre en el navegador.
En local:
python3 -m http.server 8000
y abrir http://localhost:8000. Tiene que ser por HTTP: sobre file:// no
funcionan ni los módulos ES ni el micrófono. Un origen seguro (HTTPS o
localhost) es obligatorio para getUserMedia.
Pulsa Iniciar, concede el permiso de micrófono y elige la entrada USB (se preselecciona sola si el nombre delata una tarjeta USB).
La marcha sin calibrar no significa nada en términos absolutos. Toda la medida es una comparación contra el cristal de la tarjeta de sonido, y uno barato se va ±50–100 ppm:
100 ppm × 86400 s = 8,64 s/día de error puro de medida
Más que toda la banda de tolerancia de un cronómetro COSC (−4/+6 s/d).
La corrección se guarda en localStorage, que está separado por origen: la
que midas en localhost no vale en jrigol.github.io ni al revés. Calibra en el
sitio donde vayas a usarlo.
Si el dispositivo no está calibrado, la aplicación lo avisa al arrancar y ofrece
el botón para hacerlo. También está en Calibración del reloj de muestreo →
Iniciar medición. Compara el contador de frames del AudioWorklet con el
reloj del sistema por regresión sobre todos los bloques; luego Aplicar y
guardar lo asocia al deviceId en localStorage y se reaplica solo.
Cada tarjeta lleva su propio cristal: dos dongles del mismo modelo se separan
fácilmente 200 ppm entre sí. La corrección se guarda por deviceId, y el panel
lista las que hay para verlas y borrarlas.
Con un matiz que conviene conocer: deviceId no es un identificador
duradero. Es un hash con sal por origen y cambia al borrar los datos del sitio,
al revocar el permiso, en algunos navegadores al cerrar la sesión, y a veces al
cambiar de puerto USB. Si el id no aparece pero hay una sola calibración
guardada con la misma etiqueta de dispositivo, la aplicación la propone — no la
aplica sola, porque dos unidades del mismo modelo comparten nombre y no comparten
cristal. Si hay dos con ese nombre, no propone ninguna.
Menos de lo que parece. La incertidumbre de la pendiente cae como D^1.5 —D^0.5
por el número de puntos y otro D por el brazo de palanca temporal—, así que en
la práctica sale σ[ppm] ≈ 1750 / D^1.5:
| Duración | σ | En s/día |
|---|---|---|
| 1 min | ±3,8 ppm | ±0,33 |
| 2 min | ±1,3 ppm | ±0,12 |
| 5 min | ±0,34 ppm | ±0,029 |
| 10 min | ±0,12 ppm | ±0,010 |
| 30 min | ±0,023 ppm | ±0,002 |
Cinco minutos sobran para lo que resuelve el aparato. La interfaz habilita
Aplicar a los 2 minutos y considera 5 de sobra; las dos constantes están
respaldadas por test/units.mjs.
Dos avisos. Esas cifras salen de un modelo de jitter limpio y no correlacionado; en vivo la entrega de mensajes va a rachas (recolección de basura, carga del sistema, pestaña en segundo plano) y eso no se promedia como ruido blanco, así que por debajo de 2 minutos no conviene fiarse. Y el panel muestra siempre la σ calculada sobre los residuos reales, que es la cifra honesta.
El cristal se mueve con la temperatura unos pocos ppm, así que conviene rehacer la calibración de vez en cuando; no prometas precisión absoluta mejor de 1–2 s/día.
Solo afecta a la marcha. El error de batida es una diferencia (100 ppm sobre
1 ms son 0,0001 ms) y la amplitud depende de dt/T, donde el factor se cancela.
El diagnóstico de un reloj no está en ninguna lectura suelta, sino en las diferencias entre posiciones. La sección Posiciones recoge las seis estándar:
Esc cancela.Con dos o más posiciones aparecen las cifras que importan:
以上為 README 的開頭部分。其餘內容請閱讀原文。 檢視完整 README ↗