Hello,
First of all, thank you for this library — I've been using it with the simulator and EtherDream and it works really well.
I've adquired a Laserworld DS-1000RGB MK5 + EtherDream (mostly recomended by this post: https://modulaser.app/guides/buy-a-laser). Thank you.
I’m reporting a potentially serious issue or at least asking for clarification about signal ranges and safety when using real hardware.
Setup
- Laser: Laserworld DS-1000RGB MK5
- DAC: EtherDream
- Library:
@laser-dac/core, @laser-dac/ether-dream, @laser-dac/draw
- Mode tested:
- Simulator → works as expected
- EtherDream → caused hardware failure (details below)
Code
import dotenv from "dotenv";
import { DAC } from "@laser-dac/core";
import { Simulator } from "@laser-dac/simulator";
import { EtherDream } from "@laser-dac/ether-dream";
import { Scene, Line } from "@laser-dac/draw";
dotenv.config();
// wave.js – animated sine wave using Scene Line segments.
// A colour gradient sweeps along the wave as it scrolls in phase over time.
const dac = new DAC();
if (process.env.DEVICE === "EtherDream") {
dac.use(new EtherDream());
}
else{
dac.use(new Simulator());
}
const started = await dac.start();
if (!started) {
console.error("Failed to start DAC");
process.exit(1);
}
const scene = new Scene({ resolution: 70 });
const SEGMENTS = 50;
let phase = 0;
function renderFrame() {
phase += 0.1;
const stepX = 0.9 / SEGMENTS;
for (let i = 0; i < SEGMENTS; i++) {
const x1 = 0.05 + i * stepX;
const x2 = x1 + stepX;
const y1 = 0.5 + 0.4 * Math.sin(i * 0.4 + phase);
const y2 = 0.5 + 0.4 * Math.sin((i + 1) * 0.4 + phase);
const hue = (i / SEGMENTS + phase * 0.05) % 1;
scene.add(
new Line({
from: { x: x1, y: y1 },
to: { x: x2, y: y2 },
color: [
Math.abs(Math.sin(hue * Math.PI)),
Math.abs(Math.sin(hue * Math.PI + (2 * Math.PI) / 3)),
Math.abs(Math.sin(hue * Math.PI + (4 * Math.PI) / 3)),
],
}),
);
}
}
scene.start(renderFrame);
dac.stream(scene);
Observed behavior (simulator)
This works fine on the simulator (.env -> DEVICE = Simulator).
Observed behavior (real hardware)
(.env -> DEVICE = EtherDream)
- Initially, the wave renders correctly
- After ~5 seconds:
- the output starts drifting upwards (Y axis)
- the beam moves towards the top edge
- Then:
After this event, the projector no longer starts correctly:
- X galvo moves during startup
- Y galvo remains unresponsive
- the system enters a restart loop (likely protection / "hiccup mode")
Important notes
- The same code behaves perfectly in the Simulator
- All coordinates are within [0, 1] as per documentation
- No obvious out-of-range values are being sent
- The issue appeared after only a few seconds of normal rendering
Why I'm reporting this
I'm not sure about the root cause. It could be:
- misuse or incorrect assumptions on my side (e.g. coordinate space or signal expectations)
- a hardware fault in the laser projector
- a limitation or behavior of the EtherDream DAC
- or a missing safeguard / validation in the library when targeting real hardware
However, since the simulator behaves correctly while the real hardware failed, I think it's worth clarifying expected signal ranges and safe usage patterns.
Thanks in advance, any guidance would be really helpful to avoid damaging hardware.
Hello,
First of all, thank you for this library — I've been using it with the simulator and EtherDream and it works really well.
I've adquired a Laserworld DS-1000RGB MK5 + EtherDream (mostly recomended by this post: https://modulaser.app/guides/buy-a-laser). Thank you.
I’m reporting a potentially serious issue or at least asking for clarification about signal ranges and safety when using real hardware.
Setup
@laser-dac/core,@laser-dac/ether-dream,@laser-dac/drawCode
Observed behavior (simulator)
This works fine on the simulator (
.env -> DEVICE = Simulator).Observed behavior (real hardware)
(
.env -> DEVICE = EtherDream)After this event, the projector no longer starts correctly:
Important notes
Why I'm reporting this
I'm not sure about the root cause. It could be:
However, since the simulator behaves correctly while the real hardware failed, I think it's worth clarifying expected signal ranges and safe usage patterns.
Thanks in advance, any guidance would be really helpful to avoid damaging hardware.