Laser Cutting Circuit Diagrams In Plywood Using Inkscape


This circuit diagram was designed in Inkscape with all of the electrical symbols taken from the WikiMedia commons electrical symbol library. It’s got transistors, voltage sources, LEDs, resistors etc all in SVG format.

There are a few steps in Inkscape to convert a circuit diagram to something that can be laser cut.

Step 1: Convert everything to a path using the stroke to path option (found in path>stroke to path). Take a look at these pictures to get an idea of what this does.

Take these two images, they both look the same in normal view mode, but viewing them in ‘outline’ mode is effectively what the laser cutter works off.



This example is just a resistor taken from the wikimedia commons library and line attached to either end of the resistor. The lines are red just so you can differentiate them from the resistor. Notice in the stroke only image its a single line which is not what we want. We want to cut out the outline of the shape – the stroke to path option does this.

We’re not home free yet though – if you look at the stroke to path outline image you can see where the lines and resistor meet are still seperate entities. We want to combine them into a single line. This is done using the ‘union’ tool found in path>union. You can only select two items at a time to ‘union’ together so doing a whole circuit diagram is a little tedious. Take a look at the image below to see what the image looks like after the ‘union’ tool has been applied:


That’s it! circuit diagram is now good to laser cut. union-ex









Circuit diagram viewed in ‘outline’ mode:



Circuit diagram viewed in ‘normal’ mode:


Click Here to download SVG of circuit diagram

Posted in how to, Inkscape, laser cutter | Tagged , , | Leave a comment

Laser Cut Mount for PS3 Eye Toy and Laser Line Scanner

A few years ago I made a 2d line scanner using a webcam and a laser. It worked pretty well but two major improvements needed were the addition of a line laser as opposed to a dot and using a camera with a higher framerate. For version 2 of this project I went with the ps3 eye toy camera which can do 60FPS at 640×480 px or 120FPS at 320×240 px. The camera cost around 10 euros including postage from ebay. The line laser was also bought from ebay for a few euros. It is just a laser diode with a lens which turns the laser into a line. I wanted to design a mount that would hold the camera and laser as well as allow for easy rotation for scanning of rooms etc. The 3D model of the mount was designed in google sketchup and then exported to Inkscape for laser cutting. See below for pictures of the finished mount:


Here is the exported inkscape SVG files:

SVG file available for download here

I made some changes to the design in Inkscape so the 3D model doesn’t match the 2D laser cutting plans. Hopefully I’ll get this up and running in the next week or two. Updates to follow!

Posted in Hardware, laser cutter, Robots, Uncategorized | Tagged , , , , | 1 Comment

Bare bones programming of the TM4c123G ARM Cortex m4 microcontroller

This post will document one possible way of getting an LED blinking with the tm4c123g microcontroller. I’ll be using the TIVA C Launchpad for this example:



A toolchain is needed to compile and link our code. I used this one:
I’m running windows atm so to install this just download and run the .exe and add the bin folder to the path directory and it’s good to go.

For this example I downloaded the TivaWare peripheral driver C library which contains functions for things like setting the clock speed and accessing GPIO pins etc. Download it here

A program to flash the micro is also needed. I went with the LMFLASH PROGRAMMER utility made by TI. It comes with a GUI or you can use the command line. Download it here:
The GUI is nice and simple – pretty similar to the standalone pickit programmer gui.

There is a really handy github repo available here that has a basic blink led example and a makefile. You’ll need the TivaWare library mentioned above to use it.

Step 1:
clone/download the example git repo to your computer. Some slight modification of the makefile is needed, mainly change the TIVAWARE_PATH variable to wherever you installed the TivaWare library. On my computer it’s C:\ti\TivaWare_C_Series-

Step 2:
Compile the example code to make a .bin file, ready to be flashed to the uC. To do this, go to the example just downloaded from github and run ‘make’. It will compile and link the code and store the .bin file in a folder called ‘build’

Step 3:



Open up the LMFLASH programmer utility. Under the ‘configuration’ tab select the TM4C123G Launchpad and then go to the ‘program’ tab where you will be asked to select the .bin file we just made. Hit program and if all goes well you should see the red led on the board flashing! (you may need to hit the reset button first)

Posted in ARM, Development Boards, Hardware, how to, Microcontrollers | Tagged , , , , , | 2 Comments

Scara Arm forward kinematic equation simulator

Source code :

App made using processing version 3 for windows.

float l1 = 12;  //length of l1
float l2 = 9.7; //length of l2

float l1_scaled = 0;
float l2_scaled = 0;

float l_total;

int width = 650;
int height = 650;

int centerX = width/2;
int centerY = height/2;

int circle_diameter = (width - 75);

float angle;

void setup() {
  l_total = l1+l2;
  l1_scaled = (circle_diameter/2)*(l1/l_total);
  l2_scaled = (circle_diameter/2)*(l2/l_total);

void draw() {
  ellipse(centerX, centerY,circle_diameter,circle_diameter);
  line((width/2), 0, (width/2), height); 
  line(0, (height/2), width, (height/2));
  float s_ang, a_ang;
  float ret_vals[] = new float[2];
  float x1y1_vals[] = new float[2];
  ret_vals = mouseXY_2_unitXY();
  s_ang = calc_shoulder_ang(ret_vals[0], ret_vals[1]);
  x1y1_vals = draw_shoulder(s_ang, l1_scaled);
  a_ang = calc_arm_ang(ret_vals[0], ret_vals[1]);
  draw_arm(x1y1_vals[0], x1y1_vals[1], a_ang, l2_scaled, s_ang); 
  text("END EFFECTOR XY", 35,85);
  text("X = " + ret_vals[0], 50,100);
  text("Y = " + ret_vals[1], 50,120);
  text("S = " + s_ang + "degrees",50,(height-50) );
  text("E = " + a_ang + "degrees",50,(height-30) );

float calc_shoulder_ang (float x, float y){
  float shoulder_angle, yx_div, q_ang;
  yx_div = (float)y/x;
  q_ang = acos( (x*x + y*y + (l1_scaled*l1_scaled) - (l2_scaled*l2_scaled)) / ((2*l1_scaled)*sqrt(x*x + y*y)) );
  shoulder_angle = degrees(atan(yx_div) -q_ang);
  return shoulder_angle;

float[] draw_shoulder(float ang, float l1_scaled){
  float angle = radians(ang);
  float[] xy_vals= new float[2];
  float x,y;
  x = cos(angle) * l2_scaled;
  y = sin(angle) * l2_scaled;
  line(centerX, centerY, (centerX + x), (centerY -y) ); //-y due to x-y co-ord system
  xy_vals[0] = centerX + x  ;
  xy_vals[1] = centerY -y;
  return xy_vals;

float calc_arm_ang (float x, float y) {
  float arm_angle;
  arm_angle = degrees( acos( (x*x + y*y -(l1_scaled*l1_scaled) -(l2_scaled*l2_scaled)) / (2*l1_scaled*l2_scaled) ) );
  return arm_angle;

float draw_arm(float xpos, float ypos, float a_ang, float l, float shoulder_ang){
  float arm_angle = radians(shoulder_ang + a_ang);
  float x,y;
  x = cos(arm_angle) * l2_scaled;
  y = sin(arm_angle) * l2_scaled;
  line(xpos, ypos, (xpos +x), (ypos - y)); //-y due to x-y co-ord system
  return angle;

void draw_line(float xpos, float ypos, float ang, float l){
  float angle = radians(ang);
  float x,y;
  x = cos(angle) * 100;
  y = sin(angle) * 100;
  line(xpos, ypos, (xpos +x), (ypos - y)); //-y due to x-y co-ord system

void draw_all(int effector_x, int effector_y) {

float[] mouseXY_2_unitXY(){
  float[] coords= new float[2];
  coords[0] = mouseX - (width/2);
  coords[1] = (height/2) - mouseY;
  return coords;

Look at this diagram to get an idea of what the S and E angles are:

Forward Kinematic Equations:

Forward kinematic equations

Forward kinematic equations

Diagram and equations source :

Posted in Ideas, Processing, scara | 2 Comments