Skip to content

17. Wild Card

Hero Shot of the Week

Dylan Hero

Summary

The last equipment of my FabLab that I do not know how to use is the embroidery machine. (TBH there is also the heat press that I never used but it looks less complicated than this machine) So this week I tried it out and I am figuring out how to use it.

Work Process

Calendar

Date To be done What was done
Thursday - 10h local meeting
- soldering
Friday - FabLab normal work - fablab normal work
- embroidering
Saturday - Nothing
Sunday - Nothing
Monday - Embroidering
Tuesday - FabLab normal work - Normal FabLab Work
Wednesday - 12h Local
- 13h Regional
- 15h Global
- Documenting

Introduction

My work

Stitching & Embroidery

Getting Started

My machine is INNOV-IS F480 from BROTHER.

The Machine

First Step: update InkScape

Second Step: install InkStich

RTFM

Third Step: RTFM

and other tutorials

  • my fablab's
  • my fablab 2nd tutorial that was made by an intern some years ago (only in pdf format (for now))
  • InkStich Workflow

Threads

Sewing threads are distinguished from embroidery threads by their thickness. Embroidery threads are finer and shinier.

Needles

There are needles for every fabric.

To choose the right needle, we refer to the size of its point.

Sewing needles are distinguished from embroidery needles by their difference in color

Type of fabric Suitable size Color
Universal fabric: natural, synthetic, etc... 70-90 Blue
Thick fabric: denim, leather, etc. 80-110 Blue
Embroidery 70-90 Red

Following the tutorials I installed the different part onto the machine. I should add a section to the tutorials on how to disassemble the stuff.

Trying a default model

So I started with a default model that is already present in the machine.

So it seems that there is a tension issue when not using the same filament above and bellow. So I need to fill the cannets of the same filament.

I failed this step:

Failed

Colors

Wait, now that I made a cannet for each color...
How I am supposed to change it if the embroidery stuff is just above it ?!

Embroidery Vs Cannette

Lets hope it does the bellow part does not go up.
Bellow: almond
Above: dark green

Tension Issue

...
Did not work.
But I have found how to skip colors.
At least making the different colored cannets was useful.

This is not optimal...
I need to disassemble the whole thing just to change the cannet below... But the result is really great but what a f*cking headache it is.

And I still have issues. But I for not know if it is the filament or the machine or me...

Final

Making Dylan

Fourth Step: Make a Dylan

So I converted a color image of Dylan via the bitmap converter of InkScape. After that I made some photoshop adjustment. Final product is a black and white image. Than used the InkStich extension.

Dylan Conversion

This is why my brain was a mush after some time ...
I feel like being next to a jackhammer.

Auto Fill

Time: 6m
Stich: 3373

I first tried the default parameters. This includes Auto Fill

Than saved it in PES format.

First Dylan try is a fail.
Dylan is too big and does not fit into the embroidery hoop.

Second result is not conclusive.

AutoFill

Linear Gradient Fill

Time: 5m
Stich: 2753

Naming the file differently does not help to select the right one. Seems I will need to add some color to it.

Color

Well...
It failed for a different reason. The cannette was almost empty...
Lets fill it up and try again.

Linear Gradient Fill

In the meantime I started reading Charlotte's page.

I also checked Teo's page.

Meander Fill

Time:
Stich:

Dylan is too small...
It does not want to do it.

Even when making Dylan big it does not render anything...

Circular Fill

Time: 5m
Stich: 3263

So this was the point were I told myself I will try out all the fill options.

Circular Fill

Contour Fill

Time: 5m
Stich: 2699

Why do I suddenly so much issue with this fill ?

It started correctly. Than I had this issue:

Potato

Than now it does not want to do it.

Undid all the filament and put them back. Now it works...

Contour Fill

Guided Fill

Time: 6m
Stich: 3373

Guided Fill

Tartan Fill

Time: 6m (total)
Stich: 3048

This is a bicolor fill.
Why ?
No clue 🙃

First gonna see what it give with one color.

Tartan Fill Mono color

Bicolor:

Tartan Bicolor

Ok.
Now I know why is it bicolor. A colleague of mine explained it that it is the Scottish square design.

Legacy Fill

Time: 12m
Stich: 3997

Before post processing

Legacy Fill

For Final Project

Dead Bug

So to have a moment to help my brain recuperate I also worked on the soldering for my final project.

First I redid on of my node into a Freestyle Dead Bug art (?). If it even can be called art... It has really an engineer mindset to it with buses for power, ground, clock and data...

Dead Bug

Dead Bug

Final Product :

Dead Bug

And after some code fixes it works.

The signal strength of where I put it is not great but It does sometimes connect to the Receiver node.

Wiring

Wiring

Wiring

When Nicola saw the wiring he said that Niel wont like it.
So now I am thinking about redoing it with cutting a PMMA sheet into the shape I need and stick copper sticky paper on it with the vinyl cutter. And to finish it some resin on top of it to protect it.

Code

p5.js

ChatGPT Prompt 1

for (let node in nodeData) {
let pos = nodePositions[node];
let val = nodeData[node];
fill(0);
ellipse(pos.x, pos.y, 10, 10);
text(Node ${node}, pos.x + 10, pos.y);
text(Temp: ${val.temperature}°C, pos.x + 10, pos.y + 20);
text(Hum: ${val.humidity}%, pos.x + 10, pos.y + 40);
text(CO2: ${val.CO2}ppm, pos.x + 10, pos.y + 60);
text(TVOC: ${val.TVOC}ppb, pos.x + 10, pos.y + 80);
}
can I round up the data shown ?

ChatGPT Prompt 1 - Answer

Yes, you can round the values displayed in your text() calls using JavaScript’s Math.round() or toFixed() functions.

Here’s how you can modify your loop to round the data before displaying it:


✅ Option 1: Use Math.round() (rounds to nearest whole number)

for (let node in nodeData) {
    let pos = nodePositions[node];
    let val = nodeData[node];
    fill(0);
    ellipse(pos.x, pos.y, 10, 10);
    text(`Node ${node}`, pos.x + 10, pos.y);
    text(`Temp: ${Math.round(val.temperature)}°C`, pos.x + 10, pos.y + 20);
    text(`Hum: ${Math.round(val.humidity)}%`, pos.x + 10, pos.y + 40);
    text(`CO2: ${Math.round(val.CO2)}ppm`, pos.x + 10, pos.y + 60);
    text(`TVOC: ${Math.round(val.TVOC)}ppb`, pos.x + 10, pos.y + 80);
}

✅ Option 2: Use toFixed(1) for 1 decimal place

If you want 1 digit after the decimal (instead of a whole number):

text(`Temp: ${val.temperature.toFixed(1)}°C`, pos.x + 10, pos.y + 20);

Note: toFixed() returns a string, which is fine here since you're using it in a text() call.


Let me know if you want to round up/down specifically (not just to the nearest), and I can show you Math.ceil() or Math.floor() instead.

ChatGPT Prompt 2

.tofixed does not work when I have a null value

ChatGPT Prompt 2 - Answer

You're right — if a value is null, calling .toFixed() on it throws an error because null is not a number and doesn’t have that method.

✅ Safe Fix: Use Optional Chaining + Null Coalescing

You can check if the value is not null before formatting it, and show a fallback like "N/A" if it is.


🔧 Option 1: Ternary Check (Simple and Reliable)

text(`Temp: ${val.temperature != null ? val.temperature.toFixed(1) : "N/A"}°C`, pos.x + 10, pos.y + 20);

Repeat for each field:

text(`Hum: ${val.humidity != null ? val.humidity.toFixed(1) : "N/A"}%`, pos.x + 10, pos.y + 40);
text(`CO2: ${val.CO2 != null ? val.CO2.toFixed(0) : "N/A"}ppm`, pos.x + 10, pos.y + 60);
text(`TVOC: ${val.TVOC != null ? val.TVOC.toFixed(0) : "N/A"}ppb`, pos.x + 10, pos.y + 80);

🔧 Option 2: Helper Function (Cleaner Code)

If you use this pattern a lot, define a helper:

function safeFormat(value, decimals = 1, unit = "") {
return value != null ? `${value.toFixed(decimals)}${unit}` : "N/A";
}

Then in your drawing loop:

text(`Temp: ${safeFormat(val.temperature, 1, "°C")}`, pos.x + 10, pos.y + 20);
text(`Hum: ${safeFormat(val.humidity, 1, "%")}`, pos.x + 10, pos.y + 40);
text(`CO2: ${safeFormat(val.CO2, 0, "ppm")}`, pos.x + 10, pos.y + 60);
text(`TVOC: ${safeFormat(val.TVOC, 0, "ppb")}`, pos.x + 10, pos.y + 80);

Let me know if some values can also be undefined or NaN, and I’ll expand the guard clause.


Learning Outcome

This is more complicated than I thought. I tried my best for a first contact but this machine looks easier than it is...
And it quickly drains my brain power with all the TAKATAKATKATATAKAKATAKTA...

Next step will be figuring out the tension issue. I do not want to change the cannet non stop... I just want to change the top color...



Assignment Check

  • Design and produce something with a digital process (incorporating computer-aided design and manufacturing) not covered in another assignment, documenting the requirements that your assignment meets, and including everything necessary to reproduce it.
    • Done