Identifying and Modifying an Existing Product
Initial Research
Existing Forum Research
Questionaires
Expert Interviews
Insights
A way forward!
Initial Ideas
Development
3D Printing
Render
Filming
References
Identifying and Modifying an Existing Product
Initial Research
Existing Forum Research
Questionaires
Expert Interviews
Insights
A way forward!
Initial Ideas
Development
3D Printing
Render
Filming
References
Material Research Ended in Tyvek being chosen as the material to be used, and further research such as stitch length and thread tension was done to ensure the best project was made.
Tyvek Supply Chain
Iteration
Research Appendix
3 month project based on consumer heating. This was a fun project and some is shown below Full report and Appendix.
Rendered Exploded View
This is some of the work completed for my A-level Multi tool Project in 2017/18. Full project available here
I have included most of the manufacturing pages which show thought processes and the various methods of manufacture that took place.
Various modifications and improvements made to my Land Rover either in progress or completed.
Summer 2018
Swapping Springs for the front of the Land Rover.
The previous owner put the wrong springs on each side when he restored the vehicle, causing the vehicle to lean to one side as the springs are sided. The springs were taken on and swapped, with a small repair done and a de-rust and oil to improve the ride of the car.
Christmas 2018
The Project over Christmas was to restore the dashboard of the car. Since this is where the driver sits 95% of the time it is nice to have a well covered and good looking area to drive from. In the process of the physical restoration of the dashboard, I restored the gauges, trim and heater matrix of the vehicle. The main dash pieces were fairly rusty and required lots of welding, which was quite difficult due to how thin the steel was!
The first section was about renewing the metal by welding sheet steel after bending into the space which was left after cutting out the rusted metal.




As part of the dashboard remake, the wiring needed a lot of attention. This stage I got the lights working properly and added a relay to them, which made them brighter and reduced the chance of a fire in the cab, and the high voltage didn’t travel through the dashboard.
Here are the recondition gauges which were rather difficult to get the bezels and glass back into.

This is some of the wiring in the engine bay which the previous owner did. Rather shoddy and was replaced by adding new connectors and cleaning it up.
Below is the trailer hitch which was causing a lot of problems as it wasn’t wired properly. This was ignored until all the wiring was working and then was simply spliced into the new wiring.

Heater Matrix and Fan
The existing fan was shot – Spending £100 for a new motor was a no go at that point, especially since fans from Mini Coopers were £12 and blow better and faster. All the original mountings were used and so an original motor could be used in the future if required.
Using kitchen extractor pipe also saved some money which could be better spent on other parts of the project (£80 for a short section was again ridiculous). The heater core was reused after a good flush and clean up and paint of the box.
Learning about the resistor and switch mechanism was interesting and that something that simple could be used the control the speed of the fan.
I did of course take apart the motor to see how it worked and if it could have been saved.
Rims
No fancy alloys for me thank goodness. Good old steel rims. A lot of angle grinding and old paint and rust and they were ready to paint. Red oxide and then some hand painted 2k limestone and they were ready to go. Just a day to mount the tyres before the Claygate Flower Show classic car event.
Classic Car Show
It was very nice to set up next to some amazing classic cars and have so many people come and talk to me about their experiences with Land Rover and the good memories that they still remember from their childhoods.
Clutch Bearing…….or mainshaft bearing……or both?
The noise was more of an irritant that a problem, according to the haynes manual.
Using an endoscope I tried to diagnose the clutch bearing but it seemed all good. The mainshaft of the transmission was the next culprit and therefore it was decided to take of the hub at the back. Again everything was fine and was left after replacing the spring clip and lock nut at the end of the mainshaft.
Seating for the rear
It is rather uncomfortable in the back especially without seats. Rather than buying them I decided I could make a higher quality seat for less money and it would also fit much better.
It it to be mounted to the rails n the side and would be a single cushion on the back two benches.
Still a work in progress but they will be covered in the same material as the dashboard, with a stockinette underneath.
The final week task was to program a robot which would move by itself and avoid objects
Unfortunately this wasn’t completed due to time constraints, although most of the code for the movements was completed and fully working
The board was attached to the chassis with metal standoff – which did short the board out – however it was sorted out by replacing them with plastic ones
Two stepper motors were used to control the robot, one on each side.
There is a breakout board on top of the arduino, which allows for easy plugging in and out of the stepper motors
Below is the coding used for the control
Where the breaks are for the left, right, forward, and reverse, the position of the output pins have been changed, so that the stepper motor activated the different magnets in a different order, which changes the direciton.
The left and right have one wheel going forward and one going backwards, therefore turning on the spot, similar to how tanks rotate using their tracks
Here the robot is programmed to run the command for about 16 seconds, after which it will stop moving
/*
Stepper Motor lakelly 02/05/2019
*/
// the setup function runs once when you press reset or power the board
void setup()
{
// initialize digital coil A as an output.
pinMode(10, OUTPUT);
// initialize digital coil B as an output.
pinMode(11, OUTPUT);
// initialize digital coil C as an output.
pinMode(12, OUTPUT);
// initialize digital coil D as an output.
pinMode(13, OUTPUT);
//motor 2
pinMode(6, OUTPUT);
// initialize digital coil B as an output.
pinMode(7, OUTPUT);
// initialize digital coil C as an output.
pinMode(8, OUTPUT);
// initialize digital coil D as an output.
pinMode(9, OUTPUT);
}
int i=0;
void loop() {
while(i < 1000){
right();
i++;
}
}
void forward() //+++++++++++++++++++++++++++++++++++++++++++++++FOWARDS++++++++++++++++++++++++++++++++++++++++++++++
{
//STEP 1
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
delay(2); // delay
//STEP 2
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(2); // delay
//STEP 3
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
delay(2); // delay
//STEP 4
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(2); // delay
//motor2
//STEP 1
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
delay(2); // delay
//STEP 2
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(2); // delay
//STEP 3
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
delay(2); // delay
//STEP 4
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
delay(2); // delay
}
void backward() //+++++++++++++++++++++++++++++++++++++++++++++++BACKWARDS++++++++++++++++++++++++++++++++++++++++++++++
{
//STEP 1
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
delay(2); // delay
//STEP 2
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(2); // delay
//STEP 3
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
delay(2); // delay
//STEP 4
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(2); // delay
//motor2
//STEP 1
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
delay(2); // delay
//STEP 2
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
delay(2); // delay
//STEP 3
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
delay(2); // delay
//STEP 4
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
delay(2); // delay
}
void right() //+++++++++++++++++++++++++++++++++++++++++++++++RIGHT++++++++++++++++++++++++++++++++++++++++++++++
{
//STEP 1
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(2); // delay
//STEP 2
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
delay(2); // delay
//STEP 3
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
delay(2); // delay
//STEP 4
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
delay(2); // delay
//motor2
//STEP 1
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
delay(2); // delay
//STEP 2
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
delay(2); // delay
//STEP 3
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
delay(2); // delay
//STEP 4
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
delay(2); // delay
}
void left() //+++++++++++++++++++++++++++++++++++++++++++++++left++++++++++++++++++++++++++++++++++++++++++++++
{
//STEP 1
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
delay(2); // delay
//STEP 2
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(2); // delay
//STEP 3
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
delay(2); // delay
//STEP 4
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(2); // delay
//motor2
//STEP 1
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
delay(2); // delay
//STEP 2
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(2); // delay
//STEP 3
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
delay(2); // delay
//STEP 4
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
delay(2); // delay
}
Wire up the arduino using these following instructions
The code used was downloaded adn the library installed in the specific location. Ensure that the LCD drivers are included in the same folder
#include <Wire.h> // Comes with Arduino IDE
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>
// set the LCD address to 0x27 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600); // Used to type in characters
lcd.begin(20,4); // initialize the lcd for 20 chars 4 lines, turn on backlight
//-------- Write characters on the display ------------------
// NOTE: Cursor Position: Lines and Characters start at 0
// lcd.setCursor(Horizontal position,Line)
lcd.setCursor(4,0); //Start at character 4 on line 0
lcd.print("GO BACK");
lcd.setCursor(4,1); //Next start at character 6 on line 1
lcd.print("TO");
delay(1000);
lcd.setCursor(4,2);
lcd.print("THE");
delay(1000);
lcd.setCursor(4,3);
lcd.print("SHADOWS");
delay(4000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.clear(); //Clears the screen.
lcd.print("Start Serial Monitor");
lcd.setCursor(0,1);
lcd.print("Type characters");
lcd.setCursor(0,2);
lcd.print("to display");
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
{
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
}/* --(end main loop )-- */
This is the code for running the screen and the ultrasound sensor all as the same time, displaying the range in cm to the LCD screen attached to the the arduino
It is a combination of both the ultrasonic sketch downloaded from student central and the above LCD sketch. The basics behind it is setting up the ultrasonic sensor as an input and keeping the LCD as an output
After some playing around to change the refresh rate (delay) of the LCD and where the stationary text was it looked good and could accurately read the distance if it was within its range
#include <Wire.h> // Comes with Arduino IDE
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>
// set the LCD address to 0x27 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED
int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration;
long distance; // Duration used to calculate distance
void setup() {
Serial.begin(9600);
lcd.begin(20,4);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT);
lcd.setCursor(0,0);
lcd.print("Range Finder");
lcd.setCursor(0,1);
lcd.print("Current Distance : ");
lcd.setCursor(7,2);
lcd.print("cm");
}
void loop() {
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // Measures the length of a pulse on echoPin in microseconds
//waits for the pin to go HIGH, starts timing, then waits for the pin to go LOW and stops timing.
//Returns the length of the pulse in microseconds.
//Calculate the distance (in cm) based on the speed of sound.
distance = duration/58.2;
if (distance >= maximumRange || distance <= minimumRange){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Range Finder");
lcd.setCursor(0,1);
lcd.print("Current Distance : ");
lcd.setCursor(4,2);
lcd.print(distance);
lcd.setCursor(7,2);
lcd.print("cm");
delay(300);
digitalWrite(LEDPin, HIGH);
}
else {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Range Finder");
lcd.setCursor(0,1);
lcd.print("Current Distance : ");
lcd.setCursor(4,2);
lcd.print(distance);
lcd.setCursor(7,2);
lcd.print("cm");
delay(300);
digitalWrite(LEDPin, LOW);
}
delay(500);
}
A stepper motor uses opposing electromagnets to create rotation. The different number of steps are determined by the number of poles on each the stator and the rotor.

There are several different types of stepper motor, depending on the use case and the size that is required. The main types are :
Permanent magnet stepper > These use permanent magnets in the rotor and electromagnets in the rotor, using attraction and repulsion to create rotation
Stepper motors can be used for all sorts of CNC controlled devices such as 3D printer or CNC routers.
Mechanical arms such as those used for assembly of cars etc will use stepper motors to obtain exact position repeatably

Any automated machinery that requires exact positions to be returned to, will use stepper motor as they are very precise int he increments of rotation that they can do.
Wave forms that drive a stepper motor

Turning coils on and off > Transistors are electric dimmer switches which can be used as on off switches for stepper motors
Stepper Motors with Arduino – Getting Started with Stepper Motors
Setup code for the stepper motor initialises which pins are the outputs from the arduino
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
}
void loop() {
//STEP 1
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
delay(2); // delay
//STEP 2
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(2); // delay
//STEP 3
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
delay(2); // delay
//STEP 4
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(2); // delay
The loop will run through all of the bracketed coded indefinitely
delay(2) is the amount of ms left between that line of code and the next, which determines how fast or slow the motor will turn. The smaller the number, the faster it spins.
Pulse Width Modulation
> ‘unsigned char’ allows you to control all of the same variables in a sketch by only changing one value
unsigned char DelayTime = 255;
unsigned char LEDoutput = 2;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
pinMode(LEDoutput, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LEDoutput, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(DelayTime);
digitalWrite(LEDoutput, LOW);
digitalWrite(LED_BUILTIN, LOW);
delay(DelayTime);
DelayTime = DelayTime - 10;
}
Most important is to know your cutter shape and size. Any features have to be designed in accordance to the diameter of the cutter as this will restrict how far and deep the slots between features can be.
Try and keep the cutter as big as possible as it will reduce cutting time as well as the chance of the cutter breaking or chipping.
If you are making a mould;just like the vacuum former; you will need to use draft angles even on small/short features.
Absolutely no undercuts as the CNC milling machine is unable to rotate the bed or spindle










Relatively simple > Click Generate and choose Grbl as the post processor > check you save it in a place that you can find it and check the file name is correct and identifiable
Here is the model with the tool path







Ensure that the milling cutter is tightened down before each use – it wasn’t checked in my case and it just popped off when it had nearly finished (no harm done!)
This meant that the operation had to be started again and therefore took much longer than it should have





Moulding with chocolate is relatively easy, just take your time and don’t burn it by putting too much heat into it too quickly. I tried to use the microwave to melt it but in suck small amounts found that difficult.
The best way is to melt the chocolate in a glass bowl over boiling water. Seeing as its a small amount I only needed to boil the kettle and transfer the water to the jug and place the bowl over this (with the water level just below the level of the bowl).
The chocolate came out of the mould relatively easily, and the details were quite prominent. One issue however is the flashing on the outside of the chocolate indicating that I overfilled the mould. It is also down to the ball nose end mill not leaving a square edge at the base of the chocolate, instead leaving a flange.
3d Scanning can be done in multiple ways and at multiple price points, either with handheld scanner for an iPad all the way up to full systems, e.g for car manufactures to scan clay cars.
They also have different degrees of accuracy, with hand held scanners being less expensive they will also produce less detailed scans, but still very much usable.
This is the process of taking a few images and importing them into a CAD software such as Rhino and creating a line drawing from the outside of the image and then building up a CAD model from that. This will produce a very accurate CAD model with clean surfaces, however it might be harder to get in the fine details for the thing you were taking photos of. You may also struggle if the object is very complex or if it has lots of small details on one face, making it difficult to get side profiles of these features.
The main steps are:
This is the process of taking lots of photos and importing them into a CAD software creating a 3D image using relative distances between the photos. This can normally done with an app as well as a corresponding desktop application as it can be quite intensive to create the model from the photos depending on its complexity.
3D scanning was done using scanners which attached to an iPad, making them very convenient to use; https://structure.io/
The scanning process is relatively simple as the app tells you what to do at each stage
At this stage you can either use this scan to create a wire frame in a program such as Rhino and create the surfaces as above, or import it into a mesh altering software such as Meshmixer.
As in the photo to wire frame method, the aim of this is to create a wire frame from the 3D model and then create new surfaces, which will overall give you a much better surface finish, but will be impossible to do on something organic such as an arm.
The 3D scan is brought in and rectangular surfaces are put in to create the main wire frames. Project to surface command is then used to obtain the exact curves. These can then be cleaned up or redrawn as above and then surfaces created using on to the multiple surface tools. This is the the most time consuming method but produces the best results and the highest quality surfaces.
Meshmixer is a free software which allows you to create and edit meshes and 3D objects, such as 3D scans.






Final Image
The task this week was to program the board that we made using the CNC router. There are several levels to this week, some being ‘simple’ and some being advanced.
The main goal was to upload some sort of program to our Echo Hello World Plus board and ensure that it completed the function that the program was supposed to do.
PROGRAMMING ONLY WORKS ON MACS
Installing Arduino IDE with AtTiny boards
> Install Arduino IDE from here
> On the top menu > Arduino > Preferences > Additional Boards Manager URLs > Enter the below into the box
> https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

This gives you access to the aTtiny boards and programmer
Loading the correct Settings
> Tools > Board > ATtiny24/44/84
> Tools > Processor > ATtiny44
> Tools > Clock > External 20MHz
> Tools > Programmer > USBtinyISP
Plug into a power supply with 5V > GND 1st pin on ISP > +5v is the 3rd on the ISP
Burning the Bootloader
> Tools > Burn Bootloader
This originally didn’t work on Windows and therefore we switched to MAC
Programming
The first sketch tested was the Blink sketch from the > Examples > 01.Basics > Blink
The code required us to define which pin was the LED pin in order for it to work. This was worked out by using the pinout diagram. > Pin PB2 was connected to the LED and therefore the Arduino pin for this was no. 8.
> Change all of the the LED_BUILTIN pins to 8
> Click Upload (Top menu)
Fade
The Fade sketch is very similar to the Blink > Again change all of the LED_BUILTIN to 8
Button Sketch
> Again it is an example sketch
> Change the ledPin on the constants to 8
> Change the buttonPin on the constants to 7 (as worked out from the Pinout Diagram
This is where we encountered problems due to the sketch being uploading but the LED would either flicker or not come on at all.
After some further reading on the following websites, it might be due to not having an internal pullup resistor enabled.
https://fablabbrighton.github.io/digital-fabrication-module/guides/guide-board-programming
https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/
https://www.arduino.cc/en/Tutorial/DigitalPins
This will be tested later on……
Testing the Changes
Changes made are in bold
// constants won't change. They're used here to set pin numbers: const int buttonPin = 8; // the number of the pushbutton pin const int ledPin = 7; // the number of the LED pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status void setup() { // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT_PULLUP); } void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. If it is, the buttonState is HIGH: if (buttonState == HIGH) { // turn LED on: digitalWrite(ledPin, HIGH); } else { // turn LED off: digitalWrite(ledPin, LOW); } }
The only changes made to the existing button sketch was replacing INPUT with INPUT_PULLUP
Two sketches were recorded – one where the switch turned off the LED, and one which turned on the LED when it was pressed
The task this week was to create the schematic, board layout and then mill the simple LED circuit board.
Autodesk Eagle is the circuit-board software that we used > Installing it was relatively easy as it was just a simple installation but to get the correct components for the FAB LAB, downloading the library of parts was done. This is to ensure that all of the pads are the correct size and can therefore be soldered easily.
This is the guide that I used > https://fablabbrighton.github.io/digital-fabrication-module/guides/guide-draw-circuit-in-eagle
Once you know where the library of parts is, it is relatively simple to use, but keeping it tidy is important to have an easy to read schematic and peace of mind that you have connected everything correctly.
Method for creating a new document
File > New Project > Right Click on the project > New > Schematic — Open in new window
Add Part > Search using *part* > All components that have 1206FAB as an option should be chosen
List of parts required is
Add all of the components to the schematic then change the values of the resistors and capacitor.
Right click on the component and click value > Type in the correct value so that you can use you schematic for soldering late on and correctly refer to it.
Moving on to Board
Generate Board > click OK on message box
Move components and rotate them to the orientation that is going to best suit the board layout
Change width of the trace in the top bar when drawing the traces
Change the tolerance : Tools > DRC > Clearance
Check errors : Tools > Errors
If any errors are due to the schematic, then that will need to be altered. However if the errors are due to clearance errors and traces slightly crossing, these will show up and can be fixed relatively easily. Most of the time they can be fixed in EAGLE, by either drawing the trace again and choosing a slightly different path, however if the stepping in the movement of the trace is annoying, Adobe Illustrator can be used to alter the traces.
The next step is to move it to Adobe Illustrator: File > Export > DXF > ensure scale isnt change and you save it in a suitable location.
In Adobe illustrator the main aim is to remove all line and text, leaving only the traces, pads and the outline of the board > The traces may need altering slightly from the EAGLE file so this is when you would do that.
This is when you would add a logo if you wanted to.
The outline width should be set to 3-5mm as this the components and the edge of the board enough clearance
The artboard now needs to be set the artwork size > this can be done in a simple step > Objects > Artboards > Fit to Artwork Bounds
This is a critical step to ensure the two tool paths generated have the same origin point and therefore match.
Print this as PDF to ensure the components fit. I chose to increase the width of the pads for the FTDI header to 5mm as they didn’t fit with the printout.
Save as a PNG > tick the box saying use artboard > 1000dpi > save somewhere you can find it easily
Go to > fabmodules.org > upload you PNG by selecting PNG from the drop down menu
> Select Roland Mill > PCB Traces for the traces and outline for the outline > invert the image
> set the x0 y0 and z0 to 0
> Set the yhome, xhome to 0 and the zhome to 10
> Set the tool Diameter to 0.4mm for traces ; 1mm for outline > no. of offsets to 0 for a test toolpath
The tool path should be generated when you click calculate
This is a critical check to ensure that you board will work > Make sure none of the toolpaths merge together. They can overlap but not merge.
Roland Mill
The mill is very easy to set up and has an automatic tool change which speed up the work.
Setting the x and y origin is simply selecting which axis and using the hand wheel to control how far across the cutter is.
Setting the z origin requires more skill > Turn on the spindle to full speed > select z axis > get it close using the hand wheel > change the step distance to reduce how fast the z-axis moves with the hand wheel > get the spindle to just touching the copper ; you should see a small amount of white power appear when you get close enough
Change the tool bit to the correct one for the operation > menu > click over to the one which says tools > select tool 5 for doing the traces > tool 1 for the outline
Load up the file using the blue square in the bottom corner > add your file to the menu and delete any others >
Send to the cnc and ensure that it doesn’t crash by watching it >
Once finished load the outline file and change the tool bit as above > Start the outline and wait for it to finish
Remove the finished PCB using a scraper and clean up any rough edges
Solder the components on as in last weeks blog.
Surface mount components are very common and are what the majority of manufacturers will use due to the smaller size, compared to through components. It seems fairly easy to use them, although the mounting of these components, via soldering is vastly different to through hole components.
Through hole components have the obvious advantage of being self locating, so it is easy to manufacture. Surface mount components need to be held in place when soldering and so require skill to also locate them and make them straight.
Method
1x ATtiny45
2x 1kΩ resistors
2x 499Ω resistors
2x 49Ω resistors
2x 3.3v zener diodes
1x red LED
1x green LED
1x 100nF capacitor
1x 2×3 ISP header




Programming this chip requires it to be shorted and then the programming can begin.
*Update on Programming the programmer* 03/03/2019
Using these supporting blogs – Windows specific Installation
Installing the software was harder than following the links due to the lack of clear instruction on what parts are needed, especially for Git. The link for Atmel GNU Toolchain wasnt correct so I am unsure which I needed to install. I typed what the link was supposed to take me to into google and cap up with this website. Download all the files as a zip and then extract them in the desired folder.
I decided to create a different programs folder so I could better keep track of the software on my computer. I didn’t want to destroy anything.
Installations complete – all of the tools are located in F:UNI ProgrammingPrograms
Updating the path
Control Panel > Advanced System Settings > Advanced tab > Environment Variables
Under User Variables > Edit for Path > See below
Next it to download Zadig and run this to install drivers for the USB > where I got stuck
Windows didn’t like the USB and so every attempt failed to install the drivers.

I checked here for shorts between VCC and ground and found nothing amiss so it is a possibility that my PC isn’t compatible and wont recognise the USB.
Checking software installations
> Type make -v in GitBash
> Type avr-gcc –version FAILED
> Type avrdude -c usbtiny -p t45 FAILED
UPDATE 2 > 04/03/2019
Going into the Fab Lab today helped so much after the failed attempts at home. The main different being using an iMac rather than a windows computer. Mike in the Fab Lab also says that Linux works very well, so maybe a possibility of having a separate partition on a hard drive to set up a Linux OS on my PC.
The steps are as follows for Mac with the software installed:




The programmer was then successfully tested using Andrew’s code to a board containing an LED and switch.
Multiple programs were tested and all were successful.

Task: Produce a press fit kit (accounting for kerf) using the laser cutter
Making the Design
The main aim is to use parametric design software to ‘simplify the process’. Being able to edit the sketch automatically by adding parameters and using these to dimension the sketch instead of manually changing them.
First step was to create the rough design on Fusion 360 and then dimension it to ensure that it would fit together.
As you can see above the dimension with fx: 2.5 are the parameter dimensions. These are controlled by the parameter menu and are what you use to account for the kerf using these identities below: See my post about how to use parameters
+ addition
– subtraction
* multiplication
/ division
^ power
( following BIDMAS
) following BIDMAS
; delimiter for multi argument functions

Working out the kerf of the laser cutter is different for every material, due to the taper that it puts on when cutting. I worked out that the kerf was 0.125mm for 4mm Acrylic which is what I chose to make my model from. I decided to skip the card model as I felt it wouldn’t work very well with the clip mechanism that I was going to use and time would be better spent making it with either acrylic or MDF.
Overall 18 different versions were made on Fusion 360 to get the fit just right, and by doing several cuts using the laser cutter i worked out the correct tolerance as well as the correct dimension for the clip ‘nubs’. I do however have a graveyard of broken acrylic parts to show for it! The clips works by having a ‘nub’ which sticks out and slots into a cut out hole on the other piece. This allows the model to go together but it won’t came apart once assembled.
Assembling the completed part in Fusion was also relatively easy, although not as intuitive as Solidworks – much prefer Solidworks as it gives more control and the interface is more technical.
Material thickness – Acrylic – 3.91mm
Parameters are used to define a sketch and easily edit it later on. It is basically using a smart dimension but that can be used over and over again.
Parameter is located under modify
E.g. a thickness for a slot would be material_thickness – (2*laser_cutter_kerf)
+ addition
– subtraction
% floating point modulo
* multiplication
/ division
^ power
( following BIDMAS
) following BIDMAS
; delimiter for multiargument functions
Slop and security – Range is about 0.1mm – as in the millennial furniture project with the dovetail slots
The task this week was to make on Fusion 360 a version of our tile, render it and display it as a pattern of 9.
Method


Overall it was quite a simple process to create my tile, although learning the software at the same time doesn’t help. Once I knew how to operate the commands, and which ones were used for making it, it could be made relatively quickly – under 8 minutes.
Mistakes –
I originally tried to use the sweep by just using an arc as a profile curve which didn’t work. Fusion 360 requires a surface to create an extrusion and I was unsure how to make the arc into a closed curve and then hopefully a surface.
Making the ‘Assembly’
I used this link to learn quickly how to copy and paste and move objects around to create an assembly in Fusion 360. While it still works, I prefer the Solidworks Assembly, due to it focusing entirely on the assembly, rather than on making the model, as well.
Rendering
Rendering is using CAD to provide a lifelike image of your model so that colours and form can be better understood without actually making a physical model. It is the next best thing to making physical models especially in the design phase when there may be many different ideas that need to be modelled.

Help Menu > Solidworks tutorials is a good place to go if stuck
GrabCAD is an online source of downloadable CAD files which can help you to learn how they made a model – with the feature tree you can see every step of them making the model
I have used Lynda.com to start learning Solidworks
Basic Modelling order
Configurations
Setting Document Tolerances
Tools > Options > Document Properties > Dimensions > Primary Precision (Half way down)