codettesbootcamp2022

View project on GitHub

Welcome to Dylan Vianen’s Documentation

Final Project (Visionary Hands)

12 Final Project

12.1 Introduction

HI! Im Dylan Sheldon Vianen,

I’m a self learned programmer

And throughout my journey in the codettes bootcamp i have learned about alot of things related to being a fablab manager, won Whats Your Tallent? 2022 and i won Hackotopia 2023.

12.2 The Idea

Visionary hands is a sign language to speech bridge built inside a glove. It is a project from our HackOmation IoT Challenge 2022. The aim is to translate hand signs via strain gauges to letters using a library of known signs and an AI engine for improving detections.

The next iteration involves combining two gloves with accelerometers to also capture gestures and convert those to words using inverse kinematics of the human upper body.

12.3 Research & Initial conclusions

While researching I found out that building the AI model was gonna be my hardest challenge to beat. Further I found out that an AI model can also be run on a ESP32 so that saved me from having an extra microcontroller for just je AI model or a whole other microcontroller for everything.

12.4 System Architecture

On the newest version I wanted to add 2 AI models ,a vibrator to alarm the person if they are being called and make the arduino code better. it does not seem like much but the AI part is the most hardest to do

The first AI model is for better reading accuracy of the words and letters and the second one is for the inverse kinematic modeling.

The vibrator is going to be controlled by sound loudness that is going to be changeable

img

12.5 Physical Design / Model

Version 1.0

The assembly consists of a pair of gloves, 5 flex sensors, a MPU9250, a ESP32

The flex sensors were stitched to the back of every finger and everything is brought together on a Perf-Board that is stitched on the back of the hand with a 3D base under it.

Here is a photo of the flex sensors stitched to the gloves

Here is the first working and fully made glove

Making the pref-board

When i was making the pref-board the first time it was the first time i actually soldered but i got the hang of it after messing up my first board lol.

I didn’t really follow a schematic so i can’t really add one but ill show a rough sketch of how i pulled the cables

INSERT DRAWING OF SCHEM

After I pulled the cables on the board, I pulled some cables to connect the flex sensors to the board. While doing that I soldered on my friend’s hand because the sensors were already stitched on the glove and or being stitched. Soldering cables on the flex sensor is not easy because you can very easily burn the connection of the sensor with heat for the iron.

Version 2.0

This was my first sketch of the Visionary glove it showed the build lay-up of one of the gloves

And this is the final version of my sketch

The assembly

For the second glove I bought a better fitting glove to make wearing the glove more comfy(the old ones fitted very tight on my hands) and made everything over to the new glove. While doing that I also made a new perfboard because the connections on the older ones were not that good.

To make the new perf board I also did not follow a schematic but I did make a power railing and a row for the resistors. For this build we solved the resistor problem that I had with the older versions where with the specified resistor value it gave a very low output. We found that the esp can read a higher analog value than other microcontrollers and that solved the problem.

We also 3dprinted a enclosure for the components

12.6 Embedded System & Coding

Version 1.0

The version 1 code mostly consists of if statements that check if a flex sensor is in a set range and if all the flex sensors are in a certain range a letter comes out.

Most of the letters can be read with only the flex sensors but some of the letters have some motion so that’s where the MPU comes in.

BUT i could get that to work yet so for the Hack0mation i only had letters that use the flex sensors only (15 letters or sum i lost count lol).

Ohh yeah almost forgot i made a separate library for the flex sensor to not make the main code not so bulky but it did not end as i wanted to because most of the code from the library was useless

Okay that’s enough about the small introduction about the code let’s get into it

This sets the pins of each flex sensor ` fl.intelise_output(Flex_pin1, Flex_pin2, Flex_pin3, Flex_pin4, Flex_pin5); ` This calibrates the highest and lowest flex sensor output for the constraints of the outputs

while(millis()<privtime+times)

{

if(digitalRead(7)==HIGH)

{

floatflexADC1=analogRead(Flex_pin1);

floatflexADC2=analogRead(Flex_pin2);

floatflexADC3=analogRead(Flex_pin3);

floatflexADC4=analogRead(Flex_pin4);

floatflexADC5=analogRead(Flex_pin5);

if(flexADC1<sensorMin1)

{

sensorMin1=flexADC1;

}

if(flexADC1>sensorMax1)

{

sensorMax1=flexADC1;

}

if(flexADC2<sensorMin2)

{

sensorMin2=flexADC2;

}

if(flexADC2>sensorMax2)

{

sensorMax2=flexADC2;

}

if(flexADC3<sensorMin3)

{

sensorMin3=flexADC3;

}

if(flexADC3>sensorMax3)

{

sensorMax4=flexADC4;

}

if(flexADC4<sensorMin4)

{

sensorMin4=flexADC4;

}

if(flexADC4>sensorMax4)

{

sensorMax4=flexADC4;

}

if(flexADC5<sensorMin5)

{

sensorMin5=flexADC5;

}

if(flexADC5>sensorMax5)

{

sensorMax5=flexADC5;

}

}
}

This contains the flex sensors outputs to a smaller number from 0 to 90

floatFlexgrade1=readconstrainmapflex(Flex_pin1,flexADC1,sensorMin1,sensorMax1);

floatFlexgrade2=readconstrainmapflex(Flex_pin2,flexADC2,sensorMin2,sensorMax2);

floatFlexgrade3=readconstrainmapflex(Flex_pin3,flexADC3,sensorMin3,sensorMax3);

floatFlexgrade4=readconstrainmapflex(Flex_pin4,flexADC4,sensorMin4,sensorMax4);

floatFlexgrade5=readconstrainmapflex(Flex_pin5,flexADC5,sensorMin5,sensorMax5);

Here is a example of one of the if statements

if(((Flexgrade1>=25)&&(Flexgrade1<=42))&&((Flexgrade2>=40)&&(Flexgrade2<=60))&&((Flexgrade3>=40)&&(Flexgrade3<=60))&&((Flexgrade4>=35)&&(Flexgrade4<=60))&&(Flexgrade5==90))

{

Serial.print("A");
}

Here is the first way i tried to minimise the spam of reading the letters but that would not work good if you need the same letter after each other

voidprintletter(charread_letter)

{

if(read_letter!=priv_letter)

{

Serial.println(read_letter);

priv_letter=read_letter;
}

}

Okay that about sums that up! On to the newest version!

Version 2.0

The code was completely rebuilt to have separate classes for everything. For example the detecting of letters and words are in a separate class, the kinematics are in a separate class and the AI accuracy is in a separate class.

The detection of words was also completely rebuilt with the help of math and vector distance. This new code does not yet have the kinematic modeling added to it but I do have an older version where that is added.

Before I actually created the circuit I made a tinkercad circuit to simulate it:

https://www.tinkercad.com/things/heWnATffkK6-visionaryhands-flex/editel?sharecode=i0oi51NOIAM4CiszyZ0qBML8q3vNrdxGz3yAD8fwVjs

AI model 1: Accuracy
Training set

For this model a training set is very very important so i started with that

I made an INO sketch on top of what I already had and rebuilt it to have websockets. After I enter a letter in the serial plotter the ESP sends 50 examples back to back with the entered letter.

The examples are then sent to a python script with websockets and are then stored in a CSV file.

AI model

Not yet made

AI model 1: movement
Training set

For the training set I made an arduino sketch which collected 218 rows of raw data in one sample then prints a space that means for the AI model that it is the end of the sample. For each movement I collect 100 samples and save them in a CSV that has the name of the movement, for example shake.csv.

AI model

The Ai model is made in google colab with tensorflow and python.

The Ai model has a list with the names of the movements and opens them one by one and saving all the samples to the tensorflow model after that the model is ran and the trained model is converted in a .h file that then can be used in arduino

The problems
  • Vector problem

Because the code works with the distance of lines it sometimes mistakes some letters as others because mathematically they are the closest. To solve this I’m trying to work only with the raw values to calculate the distance of the letters and what’s read.

Electronics Design & Production

Version 1.0

For this version all i had for the electronic design was a 3d printed base that lifted the components of the glove

Version 2.0

For this version i began with a box-like case

Then i tried a new bottom

Then i lastly iterated with a whole new design with the logo on the top and clips to hold the vibration motor and mic in place

For cnc i cnced a hand do hold the glove when displaying or transporting

For lasering i only made a sketch because the laser is down

Front End design & Coding

For the first version i was helped a lot with making this 1 but this 1 did not focus on the letter or word so i made a new version

For this version i kept it sleek and simple, focussing on the letter/word

The js code is the same for both to here is a quick sum of that

vartextonread;

constws=newWebSocket("ws://192.168.1.17:81");  //"ws://192.168.4.1:81");
//connect to another espon websocket too. (the one where il be sending he messages)
vart=0;

Here we connect to the ws connection made on the esp32

ws.onopen=function () {

alert("Connection opened");

//speak();

};

ws.onclose=function () {

alert("Connection closed");

};

Here are sum simple on open and onclose add handlers

ws.onmessage=function (event) {

vartext=event.data

consta=document.createElement('a');

a.textContent=text;

if (text==" ") {

varbox=document.getElementById("super");

sleep(3000);

box.replaceChildren();

}

else{

textonread==text;

varbox=document.getElementById("super");

box.append(text);

console.log("test");

console.log(text)

}

};

Where when a message comes in from the glove via websockets the message gets processed and if its a empty space the text to speech gets called and after 3 sec the text box gets cleared

functionsettings() {

if (t==1) {

document.getElementById('settings').style.display='flex';

t=0;

}

elseif (t==0) {

document.getElementById('settings').style.display='none';

t=1

}

}

Here there is a toggle for the settings button

functionsleep(milliseconds) {

constdate=Date.now();

letcurrentDate=null;

do {

currentDate=Date.now();

} while (currentDate-date<milliseconds);

}

This is a sleep function because js does not have 1 built in lol

functionspeak(text) {

varmsg=newSpeechSynthesisUtterance();

varvoices=speechSynthesis.getVoices();

msg.voice=voices[1];

msg.voiceURI='native';

msg.volume=1;

msg.rate=1;

msg.pitch=2;

msg.text=text;

msg.lang='en-US';

speechSynthesis.speak(msg);

console.log(text);
}

This is the text to speech function that takes a String as input and reads it out

The full stack

On the newest version I wanted to add 2 AI models ,a vibrator to alarm the person if they are being called and make the arduino code better. it does not seem like much but the AI part is the most hardest to do

The first AI model is for better reading accuracy of the words and letters and the second one is for the inverse kinematic modeling.

The vibrator is going to be controlled by sound loudness that is going to be changeable

Back-end

For the back-end i hosted the webpage and liked a database to store the incoming sensor data for maintaining the AI database

Here is the code explained

const { json } =require("express");

constexpress=require("express")

constpath=require("path")

constapp=express()

varMongoClient=require('mongodb').MongoClient;

varurl="mongodb://127.0.0.1:27017/";

Here we are calling the needed libs

client.on('connectFailed',function(error) {

console.log('Connect Error: '+error.toString());
});

client.on('connect',function(connection) {

console.log('Connection established!');

//client.send()

connection.on('error',function(error) {

console.log("Connection error: "+error.toString());

});

connection.on('close',function() {

console.log('Connection closed!');

});

connection.on('message',function(message) {

vardata=  JSON.parse(message)

console.log(data["letter"]);

});
});

client.connect('ws://192.168.1.10:81');

console.log("HERE!")

Here we have all the handlers and here we are connecting to the glove

// Express static webserserver

constpublicDirectoryPath=path.join(__dirname,'data')

app.use('/',express.static(publicDirectoryPath))

Here we are hosting the website

// Express API routes

app.get('/log', (req,res) => {

res.send(recall())

})

app.get('/lastseen', (req,res) => {

res.send(finduserList())

})

Here we are declaring the APIs for the recall of data

app.listen(3000, () => {

console.log("Server has started!")

})

Here we are listing for anytime from the website

Product test & demo

here is the gloveand the web app sepparate and

here is the video of them all working together

Business, Marketing & Promotion

Pitch deck/Poster

the pitch deck is used for presenting or giving people a quick look into what your trying to do or doing

your pitch deck can have anything you want on it but it usually has everything about your project or business and it should attract people to your booth

here is my pitch deck

pitching

When you’re pitching your business you have to have an impact story about the pain you’re trying to solve at the beginning because that will draw people’s attention and make them remember your business longer. use a lot of visualizations in your powerpoint

there is my powerpoint

Business Model Canvas

So with all the things i have learned about business model canvas created 1 for my own project

And here it is

Promotional Video

For the promotion video I tried to keep it as short as possible while still getting my point out.

Here is my promo vid

Files & Downloads

Here is the link to the CSV files

Here is the link to the code for the movement

here is the link to the code for getting the training set (the mpu9250 library is needed check the version1 library zip for it)

here is the link to the new stack

here is the link to the sketch that has the kinematic modeling added(note: this version still works with if statements instead of the vector distance and is very messy)(i will if needed clarify the code a bit better)

Here is the link to all the code and 3d prints, etc of version1.0.

Here is the link to the LIBS for version1.0.

References

The journey

While in the Bootcamp i achevied some extra milestones on the way whiche are compiting in Hackomation 2022, Winning 1st in Whats Your Tallent 2022 and Winning 1st in Hackotopia 2023.

Hackomation 2022

hackomation is where my journey all begann.

my project Visionary hands started there with only 1 teammate at the beginning through the competition we had 2 extra members in our team but they flaked off after some time. in this competition we sadly did not

Whats Your Tallent 2022

i went into the chalange with the same final project for the bootcamp and won 1st place out of the section ICT

Hackotopia 2023

in hackotopia i was in a team with keshav and disha and our project was named Boringcam

boringcam is a monitoring tool that monitor a class to see how much student are sleeping, yawning or on there phone.

Setup Dev Environment for ESP32 S2

First i downloaded the Arduino IDE from the website

And waited until the download was done and opened the file and went through the steps for the installation.

After that i open the IDE and opened the preferences

And added the link for esp32 devices on arduino IDE

After that i downloaded spiffs for the ESP32-s2

And i unzipped it in the sketchbook location

And thats it!

Build HTML5 Chat app

So the idea is to make a chat app that communicates with other users via MQTT

Introduction to HTML5

HTML (HyperText Markup Language) is the code that is used to structure a web page and its content.

Introduction to CSS

CSS stands for Cascading Style Sheets. CSS describes how HTML elements are to be displayed on screen, paper, or in other media. CSS saves a lot of work. It can control the layout of multiple web pages all at once. External stylesheets are stored in CSS files.

Building the front-end

For the front-end we started with just a sketch on a piece of paper for how we want our chat app to look like.

(Insert my sketch photo)

Here’s mine

After that we started roughly coding where everything should be in the html file

Explanation of the code

Everything from the chat app is stored in a div with a id of chatapp and a class of nothing (with a display of none). The class will later be changed by the login button

<div class="nothing" id="chatapp">

Building the back-end of the chat app

Introduction to MQTT

MQTT is a publish/subscribe protocol that allows edge-of-network devices to publish to a broker. Clients connect to this broker, which then mediates communication between the two devices. Each device can subscribe, or register, to particular topics.

Introduction to javascript

JavaScript is a scripting language that enables you to create dynamically updating content, control multimedia, animate images, and pretty much everything else. (Okay, not everything, but it is amazing what you can achieve with a few lines of JavaScript code.)

The ping and pong concept

A ping is a signal that is send by every user and when other users receive the ping they send a pong with their username and clientId

Explaining the code

This lets the chat app only connect when a button is pressed and not on startup

app = {
connection: function () {

sendMsg and sendmessage does the same thing

When they are called they get the username from the html page and publish the message that was typed by the user and then empty the input

If a message comes in it will be filtered for pings and pongs and if there is non of both it is displayed in the chatlog on the html page

function sendMsg(ele) {
  if (event.key === 'Enter' && toggle == 0) {
    var USER = document.getElementById('login').value;
    var userName = USER;//document.getElementById("loginName").value; // || "anonymous user"
    if (ele.value == "whoami") {
      console.log(userName);
      client.publish(mqttTopic, "Your name is " + userName + ", silly");
    }
    else if (ele.value == "disconnect") {
      var t = document.getElementById("toggle");
      console.log("disconnected user " + USER + " from topic " + mqttTopic)
      t.value = "disconnected";
      toggle = 1;
      console.log("off")
      console.log("disconnected")
      client.subscribe("", { qos: 0 })
    }
    client.publish(mqttTopic, userName + " says: " + ele.value);
    //alert(ele.value);
    ele.value = ""; // reset the input after entering
    // sendPing();
  }
}

This handels all the pongs that the users send and extracts the username and the clientId

app = {
    client.on('message', function (topic, message, packet) {
      if (toggle == 0) {
        msg = message.toString(); // library delivers  buffer so convert to strig first
        console.log("onMessageArrived: " + msg);
        // if it has JSON payload do NOT add to chat
        try {
          msgObj = JSON.parse(message.toString()); // t is JSON so handle it how u want
          // if message has Pin of Pong in it send it to the PingPongHandler
          if (Object.keys(msgObj)[0] == "ping") { sendPong(); };
          if (Object.keys(msgObj)[0] == "pong") { handlePong(msgObj.pong); }; // pong value is an object!!
          // other handlers for control messages below
        } catch {
          document.getElementById("chatlog").innerHTML += "<br>" + msg;
          sendPing();
        }
      }
    })

Here the userlist is updated if there if a new user that is not yet in the list

The final moment

Did I or did I not waste my time?

That is the golden question.

anddd the answer is…………………………….

YESSS it does here is the login page of the webapp img and here is the mainpage of the webapp img

Building a nodejs local server

The idea is to build a local nodejs server to host the chat app and store every incoming message in mongodb

Introduction to nodejs

Node.js is an open source server environment. Node.js is free. Node. js runs on various platforms (Windows, Linux, Unix, Mac OS X, etc.) Node.js uses JavaScript on the server.

Introduction to mongodb

MongoDB is a non-relational document database that provides support for JSON-like storage. The MongoDB database has a flexible data model that enables you to store unstructured data, and it provides full indexing support, and replication with rich and intuitive APIs.

Introduction to mongoose

Mongoose is an Object Data Modeling (ODM) library for MongoDB and Node. js. It manages relationships between data, provides schema validation, and is used to translate between objects in code and the representation of those objects in MongoDB.

Explaining of the code

If a message comes in this will check if its a ping(a call out for all online users), a pong( the answer to a pong with the name of the person in it)

try {
    msgObj = JSON.parse(message.toString());
 
    // t is JSON so handle it how u want
    // if message has Pin of Pong in it send it to the PingPongHandler
    if (Object.keys(msgObj)[0] == "ping") {
      sendPong("codettes2022", "Dylan's Server", "cb_12345678");
    };
    if (Object.keys(msgObj)[0] == "pong") {
      handlePong(msgObj.pong);
    }; // pong value is an object!!

The for loop checks if there is a : is the message that will help is separate the name of the user and the message from each other

 for (var i = 0; i < lengt; i++) {
      if (incomming[i] == ":") {
        var com = i;
        var place_name = i - 5;
        var place_inmes = i + 2;
        var login = false;
        console.log(i);
      }
    }

The substr function removes a little peace out of a large string this helps us get only the username in the variable name and only the message in the variable name

var name = incomming.substr(0,place_name);
var inmessage = incomming.substr(place_inmes,lengt);

If the message is a welcome message it will be stored under a login key and send to be saved in a collection for login messages

if (inmessage == incomming) {
        var myobj = {  login: inmessage, time: Date() };
        var collection = "login";
    }

If the message is not a welcome message the username, message and the time it was send will be stored under there separate keys and send to be saved in a collection for user messages

else{
  varmyobj= { name:name, message:inmessage, time:Date()};
  varcollection="messages";
    }

This hosts the chatapp so when someone goes to the link this will serve up the html page and everything it needs

constpublicDirectoryPath=path.join(__dirname,'data')
app.use('/',express.static(publicDirectoryPath))

The final moment

Did i or did i not waste my time?

That is the golden question.

anddd the answer is…………………………….

YESSS it does

Here the chatapp is hosted on the nodejs server

Here the nodejs server is saving the messages in mongoDB

Here the login message can be seen saved in mongoDB

Here the user messages can be seen saved in mongoDB

img

code and referencis

the link to the site and to the code

Build UI mockups for your FInal Project and HTML Layout

This was my first sketch of the Visionary glove it showed the build lay-up of one of the gloves

Explain the HackOmation quadrant in relation to your final project

img

so for the communication stack it begins with the glove that creates a websocket connection and the web app connecets to that websockets connection.

the web app waits for a message from the glove and when 1 is sent the webapp displayed the letter or word

Create data-bound widgets to display sensor data

1674421755455

here i created a simple data-widget with a nodejs server back end

3D printing

Introduction to 3D printing

3D printing, also known as additive manufacturing, is a method of creating a three dimensional object layer-by-layer using a computer created design. 3D printing is an additive process whereby layers of material are built up to create a 3D part.

Introduction to 3d printing filaments

The most used filaments are PLA and ABS

PLA and ABS are both thermoplastics. PLA is stronger and stiffer than ABS, but poor heat-resistance properties means PLA is mostly a hobbyist material. ABS is weaker and less rigid, but also tougher and lighter, making it a better plastic for prototyping applications.

Installing cura and setting up the printer

I opened the setup wizard and followed the steps

After all that i opened the app and setup the printer

First i went to settings and pressed add printer

And then i searched for the anycubic predator because we are using that

Setting up the cura parameters

Most of the time you can pick one of these profiles

but because we are using pla we have to change some settings like

Support: the support has to be everywhere

Build plate: the build plate has to be on brim

Material: the printing temp has to be on 190C and the build plate temp has to be on 60C

Creating a 3D model for printing with tinkercad

First i open tinkercad and just dragged a random object

And then i exported it as an stl file to use later in cura

Making the Gcode

In cura i opened the stl file that i made in tinkercad

And then i sliced it and saved it as a Gcode

img

printing something

i choose to print my name. after i made a 3d shape of my name in thinkercad i open cura and set the above specified perams i saved it as Gcode and put it on a SD card and put the SD card in the 3d machine. in the mchin interface i searched for my Gcode and loaded it. after checking if every params where good i pressed start and waited for th print to finnish, waiting a few minutes to check that the fillament does not jam or not stick to the bottom plate.

after it was finnished this is what i got (i lost the A lol)

img

Working with freecad

introduction to freecad

FreeCAD is an open-source parametric 3D modeler made primarily to design real-life objects of any size . Parametric modeling allows you to easily modify your design by going back into your model history and changing its parameters.

Installing freecad

I went to this site and scrolled down till i saw this And then i pressed on the 2.0 windows 64 bit version and waited for the download to finish

After it was done i open the installer and went through the stepsimg

Making a basic 3d shape

After it was done installing i opened freecad and made a new file, after that i pressed on the section toggle and pressed on part design

After that i made a new sketch

Where i choose the xy_plane

And here i made a basic block

Then i choose constrain for horizontal and vertical

And i set them both to 100mm

And then you get this basic square

When you have a square you press on Pad(that will make it a 3d schape)

And i set the dimension to 10mm

And when you do that you get this 3d shape

Making a pocket in the basic 3d shape

I made a new schape in the XY_Plain

And pressed on create circle

And added s circle on the 3d shape

After that i pressed on pocket

And checked symmetric to plane or reversed

And the you schoul have a hole!!

img

2d and 3d designing

Making a basic 3d shape

After it was done installing i opened freecad and made a new file, after that i pressed on the section toggle and pressed on part design

After that i made a new sketch

Where i choose the xy_plane

And here i made a basic block

Then i choose constrain for horizontal and vertical

And i set them both to 100mm

And then you get this basic square

When you have a square you press on Pad(that will make it a 3d schape)

And i set the dimension to 10mm

And when you do that you get this 3d shape

Making a pocket in the basic 3d shape

I made a new schape in the XY_Plain

And pressed on create circle

And added s circle on the 3d shape

After that i pressed on pocket

And checked symmetric to plane or reversed

And the you schoul have a pocket!!

img

CNC

introduction to CNC

Computer numerical control (CNC) is a method for automating control of machine tools through the use of software embedded in a microcomputer attached to the tool . It is commonly used in manufacturing for machining metal and plastic parts.

making the Gcode of the freecadshape

First we create a job

And select the body

Then we make the outer box a bit bigger then the shape we already have

Then we scroll to the top point of the shape a press it

Then we set the origin to the top of the shape

And then it will look like this

Then we set the output up by selecting the processor(uccnc)

And writing the output file

After that we go to the ToolBit dock

And press on the 3 toolbits

And then of create tool because we are using a another bit

Then we choose the endmill toolschape

And give it a name

Then we have to change these stuff as you see here

Then you add it to our job and dubble press it

And change the feed and spindle of the ToolBit

After that we press pocket schape

And choose the outline of the pocket shape and add it to the base geometry

And then we change the start depth, final depth and the step down(half of the ToolBit)

The cut mode should be conventiu=onal and the pattern should be offset

And Then we press on profile

And then we select both hole shapes

And make then inside cut

And then we simulate everything

And it should look like this

img

cutting out the cnc Gcode

for ym final project i cnced a hand that a drawed in (a drawing app) and followed the same steps above to make the Gcode. after that i loaded the cnc software called stepcraft after i loaded the gcode and set the xyz origen and started the gcode. it ran without problems!

(i could not get any photos because the stepcraft didnt work on my device BUTT i maneged to get 1 photo)

here is the finall look at the Hand!

img

Lasering

Introduction to lasering

The use of a laser beam to cut, divide, or dissolve a substance, or to treat an anatomic structure.

making a laser sketch

To make the laser sketch I used freecad.

First i installed the laser addon for freecad

Busines model canvas

introduction to Business Model Canvas

The Business Model Canvas is a strategic management template used for developing new business models and documenting existing ones. It offers a visual chart with elements describing a firm’s or product’s value propositio, infrastructure, customers, and finances, assisting businesses to align their activities by illustrating potential trade-offs.

A business model canvas is basicely a business plan(Plan for successful operation of a business or startup that identifies Sources of Revenue and Target Customer Base combined with details of Financing) oversite in one page.

a business model canvas is good for pitching, its Customer Focused, Easy for Presenting and many more

Canvas were initially proposed in 2005 by Alexander Osterwalder

The parts of a business model canvas

a business model canvas can be split in 9 different parts

and these are

. Key partners

here you specify who you need as a partner to run you business. The less partners you have the better because then you have less people to pay

. Key Activities

here you specify what processes or tasks need to be done to keep your business running

. Key Resources

here you specify what resources you need for your key activities

. Cost structure

here you specify all your costs to keep your business up and running(opperational expensis)

. Value proppositions

here you specify what kind of services or problem solvers your business has to ofer to the customer

. Costomer relationships

here you specify what you have to over that can keep your costomers hooked to your business(what sets you out from the others)

. Channels

here you specify how your business is going to bring there product or service to the costomers

. Customer Segments

here you specify your target audionce(the people who are mostly going to buy your product or service)

. Revenue Streams

here you specify all your income streams(all the ways that your business earns monney)

here is my business canvas

Pitch deck/Poster

the pitch deck is used for presenting or giving people a quice look into what your trying to do or doing

your pitch deck can have anything you want on it but it usualy has everything abput your project or business and it should attract people to your booth

here is my pitch deck

img

pitching

when your pitching your business you have to have a impact story about the pain your trying to solve at the beginning becuase that will draw the peoples attention and make them remember you business longer. use a lot of visualisations in your powerpoint

there is my powerpoint

Lasering

Introduction to lasering

The use of a laser beam to cut, divide, or dissolve a substance, or to treat an anatomic structure.

making a laser sketch

To make the laser sketch I used freecad.

First i installed the laser addon for freecad