Process
Final project process page
Time management
week schedule | final project |
---|---|
computer-aided design | designing the pillow and the body of the nightlight |
computer-controlled cutting | cutting acrylics and testing a light pattern, making a screenprint sticker for the pillow |
electronics production | working on a touch sensor |
3D scanning and printing | 3D scanning possible lens shapes |
embedded programming | look into led’s and motors, |
computer-controlled machining | working on a touch sensor, getting familiar with the ESP32 |
electronics design | design a board with a NEO pixel and one to test different kind of motors |
output devices | working on the motor and LED’s and the kinetic movement |
mechanical design, machine design | — |
break, midterm review | working on documentation for final project page |
input devices | working on the touch sensor input pillow |
molding and casting | mould and cast the lenses to go on top of the nightlight both for the kinetic movement as for the first spiral design |
networking and communications | figure out how to communicate between the two devices |
interface and application programming | work on the PCB design for the final project |
wildcard week | mill the outer wooden shape |
applications and implications, project development | work on the programming and putting everything together |
System integration | work on the programming and putting everything together |
invention, intellectual property, and income | finish final project preparing the presentation |
project presentations | — |
Inspiration
During Neils first class we saw some project presentations and I really like the final project from Mickaël Bouhiermeditation pebble. This is a breathing exercise tool that guides you with light. I looked op several projects from previous FabAcademy students by searching for Light. I found the shy light project of a previous Waag FabAcademy student Rutger Oomkes I read in his documentations about using servo’s for moving the light. What will be a challenge is that when working with servo’s it tends to give a shocking motion. For the project I have in mind I think it’s important that the motion is smooth. I read about including soft robotics so make more natural movements. Which I find very cool but I don’t know yet if it would fit with my final project idea.
Edition: I’ve found inspiration from Anthony Howe, who makes these mesmerizing sculptures that turn in the wind. I want to incorporate this mechanical movement into my final project.
Existing things
I found this design lamp ripple from the POETIC LAB they made a glass bulb with ripples to create light structures that resemble light reflecting on water. Ripple — The light is spinning around but its not using an input and also no light patterns this is what I would like to add. I want to experiment with different shapes to create different patterns.
I found these very cheap disco and galaxy lights that works sort of similar with the the light and a transparent object that reflect the light on the ceiling. But this is not the type of patterns and light I want for my project, and I want to make of nice material like wood and again use the input of the pillow.
Making thoughts
At first I wanted upcycle a simple glass object like a glass bottle from sirup or oil. I tried some stuff to see how it reflects the light and made some sketches but I quickly changed my mind because:
- The goal is to create as much as possible yourself
- The way the light reflects depends on the shape of the bottle and I want it to be something more universal. Now I would have to build around one specific object as in my previously made artwork and sketches below. But for the fabacademy I would like it to be a project that I can consistently work on with the weekly assignments to make sure I can finish the project. And I don’t want to be stuck to the bottle idea.
Now I’m thinking about making a base, maybe from CNC milled wood, with LEDs in the base. That gives me a lot of space to experiment with the light bending object on top. Like pouring it in resin, vacuum forming the shape or making it with the laser cutter from acrylics. I sketched this idea:
I made a render of this idea in week 2. Since then I have new ideas about how to make the light patterns. One idea is making an kinetic moving construction so the light will bend in all kind of directions The other one is making a glass top with water jet cutting glass and make a striped pattern that can rotate.
Spiral development
Spiral one
pillow with touch sensors fo turn the motor connected with wires to the nightlight
sensor for dimming the light
Lasercut base for the kinetic art construction, made of universal joins shafts
Stepper motor and pulley for the movement, microstepping for smooth movement
acrylic lasercut design for the light bends
Spiral two
Input pillow and light object communicate wireless
Nice wooden milled base more compact design
use of home made beveled gears for the kinetic turning mechanism
moulded en poured transparent bio plastic organic shapes for the light bends
Spiral three
Different programmed movement patterns
Rechargeable battery
Back-up plan
Light object with the light bending lens on a transparent plateau that turns around instead of the kinetic peace. Like the render you can find above.
The making of
Input sensor for the pillow
First render: Redesigning: For the input pillow I wan’t to try different ways of making the input sensor on / in the pillow. I start by trying to screenprint a design with conductive paint I made myself, major fail there so I continue with conductive paint I boughed, coperfabric and velostat tests. You can read about it below.
Conductive ink - capacity sensor
I want to try to make a screenprint with conductive paint on fabric for the input pillow to make a capacity sensor.
I start with playing with the spiral tool in Corel Draw to make a shape. I try the different functions that the tool offers like the amount of turns and the distance between the lines. It can be evenly distributed or centering at the circle. I thing I will try them both. And I export the drawings as .EPS files. With the Summa vinyl cutter an the Fablab Arnhem I cut out a peace of leftover foil with the pressure set to 60 grams, weed the actual sticker itself so I’m left with the outershape and use transfer foil to put it on the screen. I follow this tutorial showing how to make conductive paint from charcoal. I have a bag of charcoal for barbecuing and start with using the multimeter in the Ohm function and I try find the peaces with low resistance, I found some peaces of <80 ohm but it’s kinda hard. A lot of the peaces have a very high or unmeasurable resistance. And put them in the blender. I take away the clean water on top after letting it rest and put a little bit of textile binder instead of glue (what they use in the tutorial). I try to screenprint with it but the emulsion does not pass through the sieve. I strain the ink and try again, still no success. I end up painting a shape and after I let it dry I test it but the resistance is very high I measure Mega ohms now, and on some parts I can’t even measure it because it’s to high. The paint is leaving black prints on your finger when you touch it so it’s not a success at all.
Follow up: I ordered this conductive paint for about 11 euro’s and mixed it with a bit of textile binder again to make sure it will attach to the fabric. I use a rate of 1:1 of the paint and binder and pain a shape on the fabric again. I use the same code described at the coperfabric capacity sensor below and was able to read numbers from the serail monitor.
Coper fabric vinyl cutting - capacity sensor
I got a tip from Michelle looking in to coper fabric who worked with this during fabacamdemy originally inspired by this project kobakant tutorial to make the conductive pillow touch sensor. You can find instructions of working with the vinyl cutter machine on page Week 2 - computer controlled cutting. And on page Week 4 - electronics design I tried cutting a pcb with the same machine and material. I got the tip for using vliesofix to attach coper fabric to fabric from Michelle and I used the vinyl cutter instead of the lasercutter because I don’t know what type of material vliesofix is made from and if I can safely cut it with the lasercutter and I think it should be possible to cut it with the vinyl cutter as well.
I used the following materials:
- vliesofix I got it from a local store that I bought for 0,60 cents
- coper fabric I got it from amazon fot about 11 euros
I start by using the heat press to attach one side of the double sides vliesofix to the coper fabric. I put the heat at 100 degrees, test the pressure by turning the big black screw on top and make sure I feel resistance from the press and pressed it for a sew seconds, that works nicely!
I put the peace of coper fabric with the vliesofix material attached to the backside on the cricut sticky mat, and I use some extra tape to make sure the material stays in place. I do some test runs using the test function of the machine and the pressure of 20 grams works best for cutting through the coper. I export my design as an EPS file and send it to the plotter. Weeding the material is easy I do have to watch out that the spiral does’t get loose from the sticky mat. I it looks very good and i’m happy so far!
I cut peaces of yellow cotton fabric and use a transfer sticker to transfer the spiral to the fabric without deforming it. I use the heat press again same temperature /pressure and length as step 1. I will now attach the the coper fabric to the yellow fabric by heating the vliesofix again. I press it leaving the transfer sticker on. Because I don’t want to deform the spiral. The vliesofix material only becomes sticky when you heat it so it wont attach to the fabric before. The transfer foil comes of easily and there is no glue or anything left and the coper fabric is nicely attached to the yellow fabric! It looks really good no loose edges.
I open Arduido IDE 2.3.1. and use the code from the arduino starter kit that uses an capacity sensor library by Paul Badgers and try to get it to work using the micro controller I made during the electronics design week. I get an error and remember that chips have become faster to I check the baud rate of the XIAO RP2040 and change the code to 115200 instead of 9600. Thinking it will work now! nope.. I googled the error and after some rome research I can make the conclusion that the library that i’m using is not supported by the XIAO RP2040, so I need to change library or micro controller. For now I will change the controller because I can do this quickly, find an arduino onu laying around in the lab and use this to test if i can read values.
I start from this example code:
/*
Arduino Starter Kit example
Project 13 - Touch Sensor Lamp
This sketch is written to accompany Project 13 in the Arduino Starter Kit
Parts required:
- 1 megohm resistor
- metal foil or copper mesh
- 220 ohm resistor
- LED
Software required :
- CapacitiveSensor library by Paul Badger
https://www.arduino.cc/reference/en/libraries/capacitivesensor/
created 18 Sep 2012
by Scott Fitzgerald
https://store.arduino.cc/genuino-starter-kit
This example code is part of the public domain.
*/
// import the library (must be located in the Arduino/libraries directory)
#include <CapacitiveSensor.h>
// create an instance of the library
// pin 4 sends electrical energy
// pin 2 senses senses a change
CapacitiveSensor capSensor = CapacitiveSensor(4, 2);
// threshold for turning the lamp on
int threshold = 1000;
// pin the LED is connected to
const int ledPin = 12;
void setup() {
// open a serial connection
Serial.begin(9600);
// set the LED pin as an output
pinMode(ledPin, OUTPUT);
}
void loop() {
// store the value reported by the sensor in a variable
long sensorValue = capSensor.capacitiveSensor(30);
// print out the sensor value
Serial.println(sensorValue);
// if the value is greater than the threshold
if (sensorValue > threshold) {
// turn the LED on
digitalWrite(ledPin, HIGH);
}
// if it's lower than the threshold
else {
// turn the LED off
digitalWrite(ledPin, LOW);
}
delay(10);
}
- I delete everything that has something to do with the LED because I just wan’t to read the sensor value for now in the Serial Monitor. And add the map function. This will recalculate the output values between the number you type there so for example: Instead of mapping a value number between 0 ans 2000 you can scale this bac to between 0 and 10. So an original value of 1000 will be 5 now on a scale from 0 to 10. This is the actual code I used to make the video below:
// create an instance of the library
// pin 4 sends electrical energy
// pin 2 senses senses a change
CapacitiveSensor capSensor = CapacitiveSensor(4, 2);
void setup() {
// open a serial connection
Serial.begin(9600);
}
void loop() {
// store the value reported by the sensor in a variable
long sensorValue = capSensor.capacitiveSensor(30);
// scale the numbers back for you to make it more readable.
map (sensorValue, 0, 1023, 0, 100)
// print out the sensor value
Serial.println(sensorValue);
}
delay(10);
}
With the new pain I was also able to screenprint designs. With the multimeter I measured the Ohm resistance of the material. With the smaller lines it’s to high but the bigger lines look fine! It took me a few tried to get the pressure right and and up with a nice screenprinted spiral.
Velostat and coper fabric - Pressure sensor
In the local meeting I got the change to share my final project and got the tip from Ardian to look at the material velostat, so I ordered this to. It’s a pressure sensitive conductive sheet if you put pressure on it the resistance becomes less. Ardian shows the E-monsters project made with velostat, the led changes color when the fabric is pressed. Velustat is a Carbon impregnated black polyethylene film material with a volume resistivity is <500 Ohms/cm i read in his documentation you can find here flex sensor this also uses the ardianino board I made so it’s very helpful. I’m going to try to make two different versions of this pressure sensor. One laminated in plastic that could go inside of the pillow and another one with fabric that could be sewed on top of the fabric.
In have the wires of the VCC and ground soldered to the copertape. I will add an 10k pull-down resistor at the sensor signal output. And an other wire for communicating the signal to arduino pin 0). IMPORTANT: We also need to connect a .
I use the microcontroller XIAO Rp2040 and use the following code from adrians page about the TEXTILE FLEXURE SENSOR:
//Fab Academy 2021 - Fab Lab León
//Textile Flexure Sensor
//Adrianino
//ATtiny1614
int sensorPin = 0; // analog input pin to hook the sensor to
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
Serial.begin(115200); // initialize serial communications
}
void loop() {
sensorValue = analogRead(sensorPin); // read the value from the sensor
sensorValue = map(sensorValue, 0, 1024, 0, 1024);
Serial.println(sensorValue); // print value to Serial Monitor
//mySerial.println("x"); // print value "x" to Serial Monitor
delay(500); // short delay so we can actually see the numbers
}
Laminated velostat sensor
I started working on the laminated version using coper tape a piece of velostat and a sheet of plastic for the lamination process. I cut two pieces of coper tape, solder a wire on every peace. But the coper side towards the velostat and sandwich the velostat between the coper. It’s important that the coper traces don’t make direct contact because the current needs to go though the velostat and pressing of bending the velostat will reduce resistance with will make you able to measure this change thus use it as an input device. I did this wrongly so I made a second and this time using fabric with the final project in mind.
Fabric velostat sensor
I make another one using fabric as a base. I start with cutting the coper fabric in two peaces and use the heat press to fix the vliesofix to the yellow fabric the same way I made the capacitive sensor. Soldering on the coper fabric is difficult because you will burn holes in it with normal tin. I found this low temperature solder tin from Voltera. It’s expensive but works super nice. I soldered the wires at a temperature of 200 degrees and now have my base. I fold the fabric in half, put a peace of velostat between it an sew it together using the sewing machine. Watch out for you needle on the parts that have tin.
Step response
Mechanical movement - Kinetic art
For the mechanics of my project i’m working on two ways of making this movement. One with beveled gears and one with universal couplers.
Beveled gear
During 3D printing and scanning week 5 I made a design for the beveled gears to create this rotating movement inspired by this video from Geo3Dprint I found creating an Antony howe inspired sculpture.
It will be placed on top of this wooden base with will include the motor to drive the mechanism and the PCB with the Neopixels or power LED’s.
After printing it, you can find the result here
I redesigned the beveled gears to get more grip
But during output devices I decided to go another rout to make a quick prototype using universal couplers so I could add a stepper motor before the end of the week.
Universal couplers
Light pattern reflective object
Acrylic to bend the light
I cut out a shape I designed in Coreldraw using the circular pattern function and the line tool. I cut 3 mm acrylic using the BRM machine I talk about in week 2. I heat the shape with a hot air gun and bend the shape so the light bends. I try it with the flash light of a phone.
I started designing the leaf like shaped forms for the moving mechanism. I start with drawing the constraints so I know how big I can make the peases. After this I start working on the shape itself inspired by some google search pictures of leaves.
After exporting the shaped as a .DXF file I use deepnest to nest the parts.
Neopixel strips with arduino uno
https://learn.adafruit.com/make-it-glow-how-to-solder-neopixels-a-beginners-guide/troubleshooting
//Fab Academy 2023 - Fab Lab León
//RGB LED
//Fab-Xiao
//original code from https://wiki.seeedstudio.com/XIAO-RP2040-with-Arduino/#rgb-led
#include <Adafruit_NeoPixel.h>
int PIN = 2;
#define NUM_PIXELS 2
Adafruit_NeoPixel strip(NUM_PIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
void loop() {
// Example: Turn on the first pixel
strip.clear(); // Clear the strip
strip.setPixelColor(0, 255, 255, 255); // Set the first pixel color to white
strip.setPixelColor(1, 255, 255, 255); // Set the first pixel color to white
strip.show(); // Display the updated pixel
delay(1000); // Delay for 1 second (adjust as needed)
}
Molding and Casting
notes
- coreless pm motor (more silent?)
- muscle with air pump. (not a big pump) -> soft robotics Erwin spiral weafing.eu
- Neo pixels
- capacitive touch slider tip from Edwin will work better then capacity libraries.
- capacity touch breakout board
- schedule until june 5 what to do when
- Diagram of components
- one on one with local instructor
stepstick:
- https://lastminuteengineers.com/drv8825-stepper-motor-driver-arduino-tutorial/?utm_content=cmp-true
- https://reprap.org/wiki/A4988_vs_DRV8825_Chinese_Stepper_Driver_Boards
- https://www.pololu.com/file/0J714/SY42STH38-1684A.pdf
#include <Adafruit_NeoPixel.h>
int PIN = D8;
#define NUM_PIXELS 2
Adafruit_NeoPixel strip(NUM_PIXELS, PIN, NEO_GRB + NEO_RGBW);
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
void loop() {
// Example: Turn on the first pixel
strip.clear(); // Clear the strip
strip.setPixelColor(0, 255, 255, 255, 200); // Set the first pixel color to white
strip.setPixelColor(1, 255, 255, 255, 30); // Set the first pixel color to white
strip.show(); // Display the updated pixel
delay(1000); // Delay for 1 second (adjust as needed)
}
// CNC Shield Stepper Control Demo
// Superb Tech
// www.youtube.com/superbtech
const int StepX = 2;
const int DirX = 5;
const int StepY = 3;
const int DirY = 6;
const int StepZ = 4;
const int DirZ = 7;
void setup() {
pinMode(StepX,OUTPUT);
pinMode(DirX,OUTPUT);
pinMode(StepY,OUTPUT);
pinMode(DirY,OUTPUT);
pinMode(StepZ,OUTPUT);
pinMode( DirZ,OUTPUT);
}
void loop() {
digitalWrite(DirX, HIGH); // set direction, HIGH for clockwise, LOW for anticlockwise
digitalWrite(DirY, HIGH);
digitalWrite(DirZ, HIGH);
for(int x = 0; x<200; x++) { // loop for 200 steps
digitalWrite(StepX,HIGH);
delayMicroseconds(500);
digitalWrite(StepX,LOW);
delayMicroseconds(500);
}
delay(1000); // delay for 1 second
for(int x = 0; x<200; x++) { // loop for 200 steps
digitalWrite(StepY,HIGH);
delayMicroseconds(500);
digitalWrite(StepY,LOW);
delayMicroseconds(500);
}
delay(1000); // delay for 1 second
for(int x = 0; x<200; x++) { // loop for 200 steps
digitalWrite(StepZ,HIGH);
delayMicroseconds(500);
digitalWrite(StepZ,LOW);
delayMicroseconds(500);
}
delay(1000); // delay for 1 second
}
/*
* Simple demo, should work with any driver board
*
* Connect STEP, DIR as indicated
*
* Copyright (C)2015-2017 Laurentiu Badea
*
* This file may be redistributed under the terms of the MIT license.
* A copy of this license has been included with this distribution in the file LICENSE.
*/
#include <Arduino.h>
#include "BasicStepperDriver.h"
// Motor steps per revolution. Most steppers are 200 steps or 1.8 degrees/step
#define MOTOR_STEPS 200
#define RPM 120
// Since microstepping is set externally, make sure this matches the selected mode
// If it doesn't, the motor will move at a different RPM than chosen
// 1=full step, 2=half step etc.
#define MICROSTEPS 3
// All the wires needed for full functionality
#define DIR 2
#define STEP 4
//Uncomment line to use enable/disable functionality
//#define SLEEP 13
// 2-wire basic config, microstepping is hardwired on the driver
BasicStepperDriver stepper(MOTOR_STEPS, DIR, STEP);
//Uncomment line to use enable/disable functionality
//BasicStepperDriver stepper(MOTOR_STEPS, DIR, STEP, SLEEP);
void setup() {
stepper.begin(RPM, MICROSTEPS);
// if using enable/disable on ENABLE pin (active LOW) instead of SLEEP uncomment next line
// stepper.setEnableActiveState(LOW);
}
void loop() {
// energize coils - the motor will hold position
// stepper.enable();
/*
* Moving motor one full revolution using the degree notation
*/
stepper.rotate(360);
/*
* Moving motor to original position using steps
*/
stepper.move(-MOTOR_STEPS*MICROSTEPS);
// pause and allow the motor to be moved by hand
// stepper.disable();
delay(5000);
}