Puck.js Duplo Siren
This is how you can use a Espruino Puck.js and 3D printed Duplo block to create a siren for a Duplo Fire Engine!
You'll need
- A Puck.js
- A 3D printed clear Duplo Block. I used the design from here with the middle removed, printed upside-down with PET.
- Two Blue LEDs
- A Piezo Speaker
Wiring
Wire up as in the video:
- One LED to
D1/D2
- One LED to
D30/D31
- A piezo speaker to
D28/D29
Software
💡This code can be uploaded in a few clicks with the Espruino App loader
D2.reset();
D30.reset();
D29.reset();
var LEDA = D1;
var LEDB = D31;
var SPK = D28;
var n = 0;
var lightInterval;
function pattern1() {
n++;
LEDA.write(n&1);
LEDB.write(!(n&1));
var f = (n&1) ? 800 : 600;
analogWrite(SPK, 0.5, { freq : f});
}
function pattern2() {
n++;
var p = n&15;
LEDA.write(p==0 || p==2);
LED3.write(p==6 || p==8);
LEDB.write(p==12 || p==14);
var f = (p<8) ? 800 : 600;
analogWrite(SPK, 0.5, { freq : f});
}
function turnOn() {
if (lightInterval)
clearInterval(lightInterval);
if (Math.random()<0.5)
lightInterval = setInterval(pattern2, 50);
else
lightInterval = setInterval(pattern1, 500);
}
function turnOff() {
if (lightInterval)
clearInterval(lightInterval);
lightInterval = undefined;
LEDA.reset();
LEDB.reset();
LED3.reset();
SPK.reset();
}
// detect movement
require("puckjsv2-accel-movement").on();
var idleTimeout;
Puck.on('accel',function(a) {
if (idleTimeout) clearTimeout(idleTimeout);
else turnOn();
idleTimeout = setTimeout(function() {
idleTimeout = undefined;
turnOff();
},5000);
});
NRF.sleep();
This page is auto-generated from GitHub. If you see any mistakes or have suggestions, please let us know.