Wednesday, December 27, 2017

Gas-powered waterjet cutter (and other project updates)

Build a capable waterjet cutter from a commercial pressure washer.

Cutting head -

Orifice -

Mixing tube (nozzle) -

Pressure washer -

Pressure washer hose coupling (for brazing into cutting head) -

eBay CNC milling (eg) -

Applied Science on Patreon -

Saturday, November 25, 2017

Glass engineering - designing and making photochromic glass

How to make small batches of specialty glass with minimal equipment.

Good overview glass engineering book from 1920 (how to choose ingredients) :

"5mW" *nudge-wink*   405nm laser pointer:

Alumina melting dish on eBay:

Source of kiln paper, mold release, molds, glass fusing supplies:

Paragon Quickfire kiln:

Case of 12 insulating fire bricks:

Graphite mold:

Relevant patents for photochromic recipes:

Applied Science on Patreon:

Sunday, October 29, 2017

Saturday, July 1, 2017

World's smallest lightbulb flasher? Flashing Light Prize 2017

I built an extremely small lightbulb flasher and describe the design process and challenges. This video is free for Patreon subscribers, and if I win the contest prize, I will donate the winnings to a STEM education charity.

2017 Flashing Light Prize:

Source of micro light bulbs:

Single Schmitt inverter:

The SR416 cell is the smallest primary power source available:

Spot Welder:

Big thanks to Tektronix for very useful test gear. Much appreciated!

Applied Science on Patreon:

Monday, May 29, 2017

Waterjet cutter built with a cheap pressure washer

Building an abrasive waterjet cutter with a $150 pressure washer.

Water orifice, mixing tube (nozzle), cutting head, high pressure fittings, valve:

80 grit garnet abrasive - ebay

Sun Joe pressure washer:

Pressure gauge -

Good waterjet background and design info:

Good selection of higher-end pressure washers:

Wikipedia waterjet cutter (diagram image source):

Support more Applied Science videos:

Thursday, March 23, 2017

T-shirts available now

Hello!  I have re-launched the Applied Science T-shirt campaign on Teepspring.  It will end in just a few days, but will re-launch after that, and be active for at least two weeks.  These shirts are being sold at-cost -- thanks so much for your support!

Monday, February 20, 2017

 I show how to collect detailed CAN bus data from a Tesla Model S, and display it in the car's own web browser!

Complete Raspberry Pi with CAN bus shield and 12V buck converter:

Tesla diagnostic connector:

RPi CAN bus tutorial:

Get node.js installed on the RPi:

I used, which is a module that installs into node.js:

Diagnostic connector pinout (scroll through the images):

Tesla CAN bus reverse engineering:

Basic sequence to setup the server on the Pi:
sudo ip link set can0 type can bitrate 500000 listen-only on
sudo ip link set can0 up

candump -cae can0,0:0,#FFFFFFFF

candump -cae can0,0:0,#FFFFFFFF | grep 106 | awk -Winteractive '{ print $10}' | node app.js

I will post the node.js code on my blog:

Support Applied Science on Patreon:


var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: false
pipedata = '';
rl.on('line', function(line){
pipedata = line;

var http = require('http'),
    fs = require('fs'),
    // NEVER use a Sync function except at start-up!
    index = fs.readFileSync(__dirname + '/index.html');

// Send index.html to all requests
var app = http.createServer(function(req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});

// server listens to our app
var io = require('').listen(app);

// Send current time to all connected clients
function sendTime() {
//    io.emit('time', { time: new Date().toJSON() });
    io.emit('time', pipedata);

// Send current time every 10 secs
setInterval(sendTime, 100);

// Emit welcome message on connection
io.on('connection', function(socket) {
    // Use socket to communicate with this particular client only, sending it it's own id
    socket.emit('welcome', { message: 'Welcome!', id: });

    socket.on('i am client', console.log);



<!doctype html>



        <script src='/'></script>


            var socket = io();

            socket.on('welcome', function(data) {


                // Respond with a message including this clients' id sent from the server

                socket.emit('i am client', {data: 'foo!', id:});


            socket.on('time', function(data) {



            socket.on('error', console.error.bind(console));

            socket.on('message', console.log.bind(console));

            function addMessage(message) {

              //  var text = document.createTextNode(message);

                  document.getElementById('messages').textContent = message;

        //     el = document.createElement('li'),

               //     messages = document.getElementById('messages');

              //  el.appendChild(text);

              //  messages.appendChild(el);




p.sansserif { font-family: Arial, Helvtica, sans-serif; font-size:300%;}




        <p class = "sansserif" id='messages'>Hello</p>



Monday, January 2, 2017

Camera movement and dolly zoom with Chronos high-speed camera

High speed video with Chronos 1.4 camera movement and dolly zoom effect.

Big servo motor:

Small servo motor:

Ball-joint mount:

Chronos high-speed camera:

Slow mo music:  "Dewdrop Fantasy" Kevin MacLeod (
Licensed under Creative Commons: By Attribution 3.0 License