17. Wild Card¶
Hero Shot of the Week¶
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.
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:
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 ?!
Lets hope it does the bellow part does not go up.
Bellow: almond
Above: dark green
...
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...
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.
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.
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.
Well...
It failed for a different reason.
The cannette was almost empty...
Lets fill it up and try again.
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.
Contour Fill¶
Time: 5m
Stich: 2699
Why do I suddenly so much issue with this fill ?
It started correctly. Than I had this issue:
Than now it does not want to do it.
Undid all the filament and put them back. Now it works...
Guided Fill¶
Time: 6m
Stich: 3373
Tartan Fill¶
Time: 6m (total)
Stich: 3048
This is a bicolor fill.
Why ?
No clue 🙃
First gonna see what it give with one color.
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
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...
Final Product :
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¶
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);
}
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):
Note:
toFixed()
returns a string, which is fine here since you're using it in atext()
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...
Digital Files and Links¶
-
Jakob's doc from Ilmenau
- Projector Sewing
- E-broidery: An Infrastructure for Washable Computing
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