Skip to content

11. Open Source Hardware - From Fibers to Fabric

Research & Ideation

What is Open Source Hardware? Open source hardware (OSH) refers to physical products, machines, devices, tools, whose design specifications are publicly available so anyone can study, modify, distribute, and make them. These designs are not protected or controlled by companies, OSH embraces collaboration and knowledge sharing. Open source hardware democratizes access to technology, allowing small-scale producers, designers, and communities to build, customize, and repair their own tools without relying on expensive commercial solutions.

Characteristics of OS Hardware:

  • Design files are publicly available (CAD files, schematics, code)
  • Anyone can manufacture, modify, and distribute
  • Proper attribution to original creators
  • Commercial use is allowed
  • Community-driven improvement
@growithjessie

How to build the PETamentor 2 (to make filament for 3D printing) In this step-by-step tutorial, I show you exactly how to build the PETamentor2 — a DIY machine that turns plastic water bottles into 3D printer filament. From the power supply to the puller, thermo-controller, and cutter, I walk you through each part you’ll need, how to assemble them, and how to wire everything so it works safely and efficiently. I also put my own little twist on some parts of the build to make the system work more efficiently and fit my setup better. I’ve included links to all materials and STL files below (and in the link in my bio) so you can follow along and build it at home too. After two years of trial and error, this is the system I now use to transform trash into usable filament — and the possibilities are just beginning. Whether you’re into recycling, 3D printing, or just love building things, this project is for you. PARTS LIST WITH LINKS: https://amzn.to/4kfyMBP STL FILES: https://www.thingiverse.com/thing:5435208/files

♬ original sound - growithjessie

Types of Open Source Hardware for Textiles:

  • Processing equipment: Spinning wheels, looms, felting machines, carding tools
  • Digital fabrication tools: 3D printers, laser cutters, CNC machines, embroidery machines
  • E-textile components: Arduino boards, custom PCBs for wearables, sensor modules
  • Testing/quality equipment: Fiber analyzers, tension meters, color matching tools

Benefits:

  • Lower barriers to entry (cost, access)
  • Customizable to specific needs
  • Community support and shared learning
  • Repairability and sustainability
  • Innovation happens faster through collaboration
  • Local manufacturing and distributed production

Challenges:

  • Quality control can be inconsistent
  • Documentation varies widely
  • Requires technical skills to build/modify
  • Limited customer support compared to commercial products
  • Intellectual property concerns for some businesses
  • Takes time to build vs. buying ready-made

I can see a strong open source hardware movement in tiktok where people share their processs on how to build or hack their machines. This is specially strong in Latin America where costs can be prohibitive and having the right equipment can mean having an economic activity that allow you to support your family.

@detalles.mariapau Respuesta a @DISEÑOSRICOF TUTORIAL DE CORTADORA DE CINTA SATÉN casera #LIVEIncentiveProgram #JustGoLIVE #PaidPartnership #tutorial #rosaseternas ♬ sonido original - Detalles MariaPau
@sebamicheo

Mi primer video de YouTube ya está arriba y lo puedes encontrar en mi canal Seba Micheo 🔗🎥 En el video construí una máquina de serigrafía casera por menos de $40. Pueden ver el proceso de armarla, una demostración y mi opinión sobre ella 🔨👷🏽‍♂️ Subscríbete al canal si quieres seguir viendo videos como este 🤝🏼✅

♬ original sound - Seba Micheo

References & Inspiration

  • OpenKnit: Digital knitting machine designed by Gerard Rubio, allows creating custom knitted garments from digital files
  • Electroloom: (discontinued) attempted to create 3D printed fabric
  • Kniterate: Digital knitting machine (started open, became commercial)
  • Circular Knitic: Open source circular knitting machine
@rachel83365 Reply to @its.just.birdie ♬ SUN GOES DOWN - Andreas Roehrig

Communities & Resources:

  • Fabricademy documentation: OS Machines
  • Instructables & Hackaday: DIY hardware projects
  • Thingiverse & Printables: 3D printable tool designs
  • OSHWA certification database: Verified open source hardware
  • Kobakant: for E-textile tools and techniques

Tools

Process

Le Textile Lab in Lyon is the french partner of Woolshed, the aim of the partnership is to help find new uses to the wool from the alpine region. This week we had the oportunity to visit some wool washing facilities as well as some ateliers who work with the wool from Thônes & Marthod sheep and other local breeds. It was very eye opening to see first-hand about the issues that arise when trying to work with wool among the most important: how time consuming the process is (from shearing, washing, carding, spinning or felting) and how it exponentially increases the price of a final product with each step. From the takaways from this trip, we concluded that felted wool is a great option to reduce steps and costs since it allows to create final products or garments without the need to spin into threads and then transform into a final product. Felting however, still needs human intervention and it is a consuming process by itself.

The idea with this week's experiement was to try to reduce the manual labor and time involved in felting. Felting can be achieved in different way, some of what we have explored are: needle felting, wet felting

felted garments by naige

by @woolmood

Felting Robot

BoM

Qty Description Price Link Notes
1 Roidmi EVA Robot Vaccum 779.00 EUR link borrowed from our instructor's home
40ml Natural Soap (Savon de Marseille) 20 EUR link -
1l Water - - -
0.5kg Carded Wool (Thones & Marthod sheep) - - -

The attempt was to hack an existing machine, a robot vaccum to improve the time-consuming process of felting wool. Since the original app cannot be modified to change the actions of the robot, we instead tried using the existing functions to felt wool by trying to replicate the manual steps we would originally follow.

Process

  • Using the metal legs and boards of a table, we started by creating a limited space for the vaccum to go around.
  • We added 2 layers of carded wool in opposite directions on the area and covered them in bubble wrap, securing it with duct tape.
  • Sprayed hot water and liquid natural soap on the wool.
  • After setting up the app to map the area, we started the cleaning cycle, letting the robot go around the are a few times.

Observations

  • The wool felting process requires friction on the fibers with the warm water and soap, however when using the plastic the weight of the robot was not excerting enough pressure to felt the wool inside.
  • We also tried to to open the bubble wrap so that the vaccum brushes could touch the wool directly however, the wool fibers started tangling on the mechanism of the robot so we had to stop it.
  • The circular motion of the brush, the robot wheels, and the suction make it difficult to felt the wool as these motions tangle the fibers.
  • Since we cannot fully change the actions of the robot in the Xiaomi app, ideally we could try an open source alternative to the robot vaccum with an open app and hardware.

Robot Arm

Needle felting is based on the up/down movements with a felting needle which makes the fibers stick together with each punch. Given the repetition nature of the movement and that we have a robot arm at the lab, we decided to try to build on the code of existing arduino sketches to try to replicate this motion.

Qty Description Price Link Notes
1 Tinkerkit Braccio robot 291EUR Arduino store Available in the lab
1 Arduino Uno Rev3 29.30EUR Arduino store available in the lab
1 USB cable 10.90EUR Arduino store available in the lab
1 Dry needles felting kit (needles used: 38) 12.99EUR FR store available in the lab
1 Foam felt base 10EUR FR store available in the lab

Process

  • We started by running the example sketches to familiarize ourselves with the robot arm and its parts, the movements, the code and the possibilities (videos linked below)
  • We followed this diagram from Audrey Kalic's documentation to understand the parts and how the arm would move.
  • To increase the grip surface for the claw part of the arm, we added fabric to the felting needles handle. Next step would be to 3D print a new handle with these measurements.
  • Once we understood what each part of the code did, we started adjusting the degrees so that the movement mimicked a hand doing the felting motion (up/down) then move to the next area.

Setup Sketch

/*
  testBraccio90.ino

 testBraccio90 is a setup sketch to check the alignment of all the servo motors
 This is the first sketch you need to run on Braccio
 When you start this sketch Braccio will be positioned perpendicular to the base
 If you can't see the Braccio in this exact position you need to reallign the servo motors position

 Created on 18 Nov 2015
 by Andrea Martino

 This example is in the public domain.
 */

#include <Braccio.h>
#include <Servo.h>


Servo base;
Servo shoulder;
Servo elbow;
Servo wrist_rot;
Servo wrist_ver;
Servo gripper;

void setup() {  
  //Initialization functions and set up the initial position for Braccio
  //All the servo motors will be positioned in the "safety" position:
  //Base (M1):90 degrees
  //Shoulder (M2): 45 degrees
  //Elbow (M3): 180 degrees
  //Wrist vertical (M4): 180 degrees
  //Wrist rotation (M5): 90 degrees
  //gripper (M6): 10 degrees
  Braccio.begin();
}

void loop() {
  /*
   Step Delay: a milliseconds delay between the movement of each servo.  Allowed values from 10 to 30 msec.
   M1=base degrees. Allowed values from 0 to 180 degrees
   M2=shoulder degrees. Allowed values from 15 to 165 degrees
   M3=elbow degrees. Allowed values from 0 to 180 degrees
   M4=wrist vertical degrees. Allowed values from 0 to 180 degrees
   M5=wrist rotation degrees. Allowed values from 0 to 180 degrees
   M6=gripper degrees. Allowed values from 10 to 73 degrees. 10: the toungue is open, 73: the gripper is closed.
  */

  // the arm is aligned upwards  and the gripper is closed
                     //(step delay, M1, M2, M3, M4, M5, M6);
  Braccio.ServoMovement(20,         90, 90, 90, 90, 90,  73);  

}

Simple Movements Sketch

/*
  simpleMovements.ino

 This  sketch simpleMovements shows how they move each servo motor of Braccio

 Created on 18 Nov 2015
 by Andrea Martino

 This example is in the public domain.
 */

#include <Braccio.h>
#include <Servo.h>

Servo base;
Servo shoulder;
Servo elbow;
Servo wrist_rot;
Servo wrist_ver;
Servo gripper;

void setup() {
  //Initialization functions and set up the initial position for Braccio
  //All the servo motors will be positioned in the "safety" position:
  //Base (M1):90 degrees
  //Shoulder (M2): 45 degrees
  //Elbow (M3): 180 degrees
  //Wrist vertical (M4): 180 degrees
  //Wrist rotation (M5): 90 degrees
  //gripper (M6): 10 degrees
  Braccio.begin();
}

void loop() {
   /*
   Step Delay: a milliseconds delay between the movement of each servo.  Allowed values from 10 to 30 msec.
   M1=base degrees. Allowed values from 0 to 180 degrees
   M2=shoulder degrees. Allowed values from 15 to 165 degrees
   M3=elbow degrees. Allowed values from 0 to 180 degrees
   M4=wrist vertical degrees. Allowed values from 0 to 180 degrees
   M5=wrist rotation degrees. Allowed values from 0 to 180 degrees
   M6=gripper degrees. Allowed values from 10 to 73 degrees. 10: the toungue is open, 73: the gripper is closed.
  */

                       //(step delay, M1, M2, M3, M4, M5, M6);
  Braccio.ServoMovement(20,           0,  15, 180, 170, 0,  73);  

  //Wait 1 second
  delay(1000);

  Braccio.ServoMovement(20,           180,  165, 0, 0, 180,  10);  

  //Wait 1 second
  delay(1000);
}

Take the Sponge Sketch

/*
  takethesponge.ino

 This example commands to the Braccio to take a sponge from the table and it shows to the user

 Created on 18 Nov 2015
 by Andrea Martino

 This example is in the public domain.
*/

#include <Braccio.h>
#include <Servo.h>


Servo base;
Servo shoulder;
Servo elbow;
Servo wrist_rot;
Servo wrist_ver;
Servo gripper;


void setup() {  
  //Initialization functions and set up the initial position for Braccio
  //All the servo motors will be positioned in the "safety" position:
  //Base (M1):90 degrees
  //Shoulder (M2): 45 degrees
  //Elbow (M3): 180 degrees
  //Wrist vertical (M4): 180 degrees
  //Wrist rotation (M5): 90 degrees
  //gripper (M6): 10 degrees
  Braccio.begin();
}

void loop() {
  /*
  Step Delay: a milliseconds delay between the movement of each servo.  Allowed values from 10 to 30 msec.
  M1=base degrees. Allowed values from 0 to 180 degrees
  M2=shoulder degrees. Allowed values from 15 to 165 degrees
  M3=elbow degrees. Allowed values from 0 to 180 degrees
  M4=wrist vertical degrees. Allowed values from 0 to 180 degrees
  M5=wrist rotation degrees. Allowed values from 0 to 180 degrees
  M6=gripper degrees. Allowed values from 10 to 73 degrees. 10: the toungue is open, 73: the gripper is closed.
  */

  //Starting position
                      //(step delay  M1 , M2 , M3 , M4 , M5 , M6);
  Braccio.ServoMovement(20,           0,  45, 180, 180,  90,  10);

  //Wait 1 second
  delay(1000);

  //The braccio moves to the sponge. Only the M2 servo will moves
  Braccio.ServoMovement(20,           0,  90, 180, 180,  90,   10);

  //Close the gripper to take the sponge. Only the M6 servo will moves
  Braccio.ServoMovement(10,           0,  90, 180, 180,  90,  60 );

  //Brings the sponge upwards.
  Braccio.ServoMovement(20,         0,   45, 180,  45,  0, 60);

  //Show the sponge. Only the M1 servo will moves
  Braccio.ServoMovement(20,         180,  45, 180,   45,   0,  60);

  //Return to the start position.
  Braccio.ServoMovement(20,         0,   90, 180,  180,  90, 60);

  //Open the gripper
  Braccio.ServoMovement(20,         0,   90, 180,  180,  90, 10 );


}

Needle Felting Sketch

=

#include <Braccio.h>
#include <Servo.h>

Servo base;
Servo shoulder;
Servo elbow;
Servo wrist_rot;
Servo wrist_ver;
Servo gripper;

int baseN = 0;
const int maxBase = 20;  // Maximum lateral offset - this value can be customized
const int stepBase = 5;  // Step increment - this value can be customized
int totalCycles = 0; // Counts how many times the felting cycle has been executed
const int maxCycles = 10; // maximum number of felting cycles; the arm stops after reaching this

// Initialize the Braccio arm and prepare the gripper to hold the felting tool
  void setup() {  

   Braccio.begin();  //Initialization functions: "safety" position (M1:90 - M2:45 - M3:180 - M4: 180 - M5:90 - M6:10 degrees)

   Braccio.ServoMovement(30, 0, 0, 100, 90, 90, 10); // gripper open
   delay(500);

  Braccio.ServoMovement(30, 0, 0, 90, 90, 90, 73); // grip closed, the tool can be held
   delay(500);

  }

// Performs the up-and-down felting movement at the current position and move to the new position before closing the loop
void feltingCycle(int repetitions){ 

 for (int i = 0; i < repetitions; i++) {
  // Move up (lift)
  Braccio.ServoMovement(8, baseN, 30, 110, 70, 90, 73); // up
  delay(35); // short pause at top

  // Move down (stab)
  Braccio.ServoMovement(8, baseN, 10, 90, 72, 90, 73);  // deeper stab
  delay(40); // short pause at bottom

}
  // Lift arm at the end of the cycle
  Braccio.ServoMovement(12, baseN, 30, 110, 70, 90, 73); 
  delay(50); // short pause at top

  // Move to next lateral position
  baseN += stepBase; //angle to increase (+X each iteration)
  if (baseN > maxBase) baseN = 0;   // safety check, the angle will be max X degrees but this can be changed

  // move the arm in the new position 
  Braccio.ServoMovement(20, baseN, 20, 80, 120, 90, 73);
  delay(500);

}

// Main loop: execute felting cycles until the maximum number is reached
void loop() {

 if (totalCycles < maxCycles) {
    feltingCycle(20);  // number of repetitions per felting position
    totalCycles++;     // counting each completed cycle
  } else {
   // Stop the arm permanently after reaching maxCycles
    while(true);      
  }

}