About Me

About Me

I am a co-founder of Artilect FabLab and Toulouse FabLab Festival. Artilect was the first FabLab create in France in 2009. I like to give access to people who like create things. I am also a researcher in a lab of aerospace in Toulouse. My Ph.D. was about evolving robot in 3D simulation. My post-doc was about how to build physical robots from modular bricks. For these research, I use a genetic algorithm to evolve: morphology, controller.

Why I do the Fab Academy

I would like to take the time to develop open hardware tools to democratize digital fabrication, iot device and robotics for everyone. The fab academy is the opportunity to learn, to share, to create and to document projects.















Final Project

Final Project








Video and presentation of the final project:








Introduction

The goal of this project is to create plug & play electronic modules and rigid structures to build any type of robots, iot devices or machines.

Inspirations

Inspiration from others projects :

What it will do?

Plug and play, auto detect topology: self detect the electronic modules and display the modules and the physical connections (topology) on an application.
To prototype quicky and easily electronic or IOT devices
To build cnc machines
To build modular robots

Who will use it?

It could be use by maker to make new thinks.
Children to learn robotics.
FabLab to make modular cnc machines.
Startup to prototype IOT devices

Bill of Material:

- wood 10$-50$ for 1 to 5 modules
- acrylic 10$ 20$ for 1 to 5 modules
- electronic ~10$

Assignements used for the project:

- Computer Aided design
- Computer Controled Cutter
- Electronic Design
- Electronic Input
- Networking and Communications
- Embedded programming

Licence

For the licence, I think I will protect the name ORCAS, "Open Robotics Cross Achitecture System" like Arduino does. I will keep open source the design. The protection will be also the website to load designs, applications, documentations, tutorials to how to build modules... Very similar to Arduino Website.

License :
- Design licensed under a Creative Commons Attribution Share-Alike license
- Name protection for ORCAS, "Open Robotics Cross Achitecture System"
















Project Management

Project Management

Assignements
Work through a git tutorial.
Build a personal site describing you and your final project.
Upload it to the class archive.

References
Git Tutorial: https://docs.gitlab.com/ee/gitlab-basics/start-using-git.html
Course FabAcademy: Project Management
Video FabAcademy: Git
Recitation Course: Version Control

Git and GitLab

The first thing done was to install git on my mac from source forge.
Generate the ssh key from your email address

        $ ssh-keygen -t rsa -f id_rsa -C "user@emailaddress" -b4096
       
Copy your private and public keys in the .ssh directory

         $ cp key_name ~/.ssh/id_rsa
         $ cp key_name.pub ~/.ssh/id_rsa.pub
       
Give Permissions

        $ chmod go-rwx ~/.ssh/id_rsa
        $ chmod go-rwx ~/.ssh/id_rsa.pub
        $ chmod go-rwx ~/.config/
      
Add your key to ssh

       $ ssh-add ~/.ssh/id_rsa.pub
       

Problem:
The size of the key is not the good one.

Solution
Don't forget the -b4096 to generate the good size of key. Copy ALL the content of file into your gitlab profile.


Give Permissions

       $ chmod go-rwx ~/.ssh/id_rsa
       $ chmod go-rwx ~/.ssh/id_rsa.pub
       $ chmod go-rwx ~/.config/
       
Add your key to ssh

       $ ssh-add ~/.ssh/id_rsa.pub
       
Try to clone your gitlab project with the following command (remplace nicolas-lassabe.git by the name of your project)

       $ git clone git@gitlab.fabcloud.org:academany/fabacademy/2018/labs/fablabdigiscope/students/nicolas-lassabe.git
       

Problem:


       git@gitlab.fabcloud.org: Permission denied (publickey).
       fatal: Could not read from remote repository.
       Please make sure you have the correct access rights
       and the repository exists.
       

Solution:
check if the key is inside your .ssh directory


       $ ls -la ~/.ssh/id_rsa
       $ ls -la ~/.ssh/id_rsa.pub
       
if not copy the key

       $ cp id_rsa ~/.ssh/id_rsa
       $ cp id_rsa.pub ~/.ssh/id_rsa.pub
       

documentation about gitLab
https://gitlab.fabcloud.org/help/ssh/README.md documentation about git
http://academy.cba.mit.edu/classes/project_management/archive.html
In French https://openclassrooms.com/courses/gerez-vos-codes-source-avec-git

Minimun of git's commands to know and to use at the beginning to upload files on gitlab:

Excute first a git status to know which files are new or modified or ..

       $ git status
       
Add the new files to your git repository with the command add, neither they will be not uploaded:

       $ git add namefile
       
Select what you want to upload with commit (-a for all the file) and comment your upload with -m:

       $ git commit -a -m "your comment"
       
Upload the files on gitlab with the push command:

       $ git push
       
Finish with a git status to know is every is fine and you upload everything:

        $ git status
        nothing to commit, working tree clea
        

Problem:
If you add files with the command add do commit : you will only commit the added files and not the modified files.

Don't forget the option -a to commit all files.

Additionnal Git Command

To rename a file or a directory

       $ git mv oldfile newfile
       

My plan and ideas for my fabacademy webpage

Make a website like a file explorer: each directory and file will be displayed like inside Explorer or Finder with an icon or a block of texts or images. The order of the items will be described by three numbers x,y, and z inside the name file x_y_z_name.extention. X.Y is the numbers to describe the order outside blocks. Z inside a block. A block can display a gallery of pictures, a text of documentation, a step of a project, a plan, an idea, a problem. etc

What I learned?

I use to program in C, C++ with Emacs on Linux. I am less familiar with web development but I am very interested to learn javascript to develop web application and website. I know a little HTML, and CSS but I am not a specialist. I would like to try to code from scratch to understand how HTML and javascript interact. For the code editor, I plan to use Atom as the main editor. For the command line editor, I would like to learn to use vi. vi is very useful on Linux but I never spend the time to use it.

Vi editor

Vi is a text editor in text mode that can be executed in a terminal. It is very useful when you operate on a server or you want to edit quickly a config file. The difficulties and the advantages of Vi are that you could not use a mouse and you need to know keyboard command. Here the minimum commands to know to use vi:

       i to insert text (insert mode)
       ESC to leave insert mode
       :w to save
       :q to quit
        

Atom editor

Atom is a very modern text editor. I used to program with emacs text editor that is very nice far highlight code and completion. Atom has the same characteristics but more user-friendly.

What I did for the website?

I did the website from scratch in HTML and javascript. There are two javascript main functions: One is to format the style of the icon and another one to format the page. I don't use CSS because my goal was to learn javascript. And I wanted to keep the possibility changed dynamically the design of the website.

Responsive website?

The website is in part responsive. The icon keeps the same size but its reorganize when the width of the page is smaller. Still some problem with the text block. Some pictures need to be inserted here... To inspire me I used the following website: http://jsbin.com/utupuw/5/edit?html

How to reduce or convert the size or the format of many images on MacOS X?

To convert pictures, screenshots or photos, I find sips. A command line tool very usefull. Here the command to convert all the png images from a directory with a width of 1024:

        $ sips *.png  --resampleWidth 1024
        

How to reduce or convert the size or the format of many videos on MacOS X?

To convert videos on Mac OS, the best is to use ffmpeg.

        /Applications/ffmpeg -i "video.mp4" -vcodec libx264 -b:v 1000k -vf scale=-1:1080 -acodec mp2 -b:a 256k -ar 48000 -ac 2 video2.mp4
        

How to include html, images and files?

The next step will be to generate locally the tree structure of the website to know where the files are. This is not possible in HTML because you need to execute code on the server to do it. One way could be to generate from the yml file (To test). The following command displays all the files and directories from the current directory that begin with a number and all the files inside these directories excluded the hidden files:

        $ find ./[0-9]* -not -path '*/\.*'
        ./0_About_Me
        ./0_About_Me/index.html
        ./0_About_Me/0.jpg
        ./1_Final_Project
        ./1_Final_Project/index.html
        ./1_Final_Project/0.jpg
        ./2_Project_Management
        ./2_Project_Management/1_0_0_Installation_of_git.step
        ./2_Project_Management/0_0_Plan_for_the_website.plan
        ./2_Project_Management/1_Atom.jpg
        ./2_Project_Management/0.jpg
        ./3_Computer-Aided_Design
        ./3_Computer-Aided_Design/index.html
        ./3_Computer-Aided_Design/1_3.png
        ./3_Computer-Aided_Design/1_2.png
        ./3_Computer-Aided_Design/1_0.png
        ./3_Computer-Aided_Design/1_1.png
        ./3_Computer-Aided_Design/2_0.png
        ./3_Computer-Aided_Design/0.jpg
        
The next command saves the result inside a tree.txt files.

        $ find ./[0-9]* -not -path '*/\.*' >> tree.txt
        
The next step is to read this file with javascript to display images and pictures.

Learning
I learned some javascript, more css and html.
I already used git by the pass.

Achievements
I install Git and I setup my keys.
I upload my archive on the gitlab
















Computer-Aided Design

Computer-Aided Design

Assignements
Model (raster, vector, 2D, 3D, render, animate, simulate,...) a possible final project, and post it on your class page.

References
Openscad WebSite
FreeCAD Website
Course FabAcademy: Management
Recitation Course: Computer Design

To Computer-Aided Design I propose to test OpenScad, FreeCad and Solidwork as a 2D and 3D tools.

2D

The goal is to sketch a part of our hexagonal module for the final project. Each module could be a fixe on a 3D structure. For this, we need small bumpers on the slide of the face.

FreeCAD

FreeCAD is a Wysiwyg open-source similar to Solidwork. The software is easy to install but it difficult to use for me. It's not enought an intitive software. In this example, I tried to have a parametric design with variable like on OpenScad.
First, I designed a hexagone primite

I add dimensions

I try to add variable for parametric design

I see to add contraint also

Conclusion FreeCAD:

I think FreeCAD is a nice alternative if you like interface software and solid 3D sofware design like Solidware or Catia. It is necessary to spend more time to learn all the commands. Personnaly, I prefere command line software like Openscad

Photoshop

Photoshop is a very easy software to use. There is many tutorial on the web.

Resize a photo with Photoshop
Final presentation with Photoshop

Openscad 2D

There is the possiblity with Openscad to do projection from 3D to 2D. The project generate a DXF that could be use for laser or CNC.

3D

Openscad

Modular design on OpenScad with inculed files (arduino, wheel, sensor, motor).

Here, a arduinoUno desing on OpenScad

The Arduino could be add to a Face Module and a support.

A servo Motor.

A sensor SFR04

A sensor SFR04 could be add to faceSfr04

A battery module

A empty module

A full assembly reboot

Learning
I learn how to use photoshop
I try FreeCAD.
I improved my knowledge on OpenScad.

Achievements
I did my final project presentation with Photoshop.
I did modular parametric modelisation of a robot on OpenScad.

Source :
Photoshop 2D
presentation.psd

Openscad 2D
OrcasConstructionKit_7.scad
OrcasConstructionKit_7.dxf

Openscad 3D
Main: main.scad
Header: orcas.scad
Actuator: arduinoUno.scad
Actuator: arduinoUno.scad
Actuator: battery.scad
Actuator: servo.scad
Actuator: stepper.scad
Bot: bot.scad
Bot: orientation.scad
Connector: faceArduino.scad
Connector: faceServo.scad
Connector: faceBattery4xAA.scad
Connector: connector.scad
Connector: faceFull.scad
Connector: faceServo.scad
Connector: faceSfr04.scad.scad
Connector: supportArduinoUno.scad
Math: math.scad
Screw: m.scad
Sensor: sfr04.scad
Accessory: wheel.scad

Openscad 2D
Wood or PMMA Support FinalProject : WoodSupport.scad
Wood or PMMA Support FinalProject : WoodSupport.dxf
















Computer Controlled Cutter

Computer Controlled Cutting

Assignements
characterize your lasercutter's focus, power, speed, rate, kerf, and joint clearance
Design, lasercut, and document a parametric press-fit construction kit, which can be assembled in multiple ways. Account for the lasercutter kerf.
For extra credit include elements that aren't flat.

References
Course FabAcademy: Computer Cutting
Video FabAcademy: Computer Cutting

Learning
Design a press-fit kit on OpenScad.
Use vynilycutter.

Achievements

This week the goal is to use a laser cutter and a vynil cutter.

Realisation of a 2D construction kit with a laser cutter

My idea was to find a way to build any types of solids: cubes, pyramids with the same construction kit laser cut. For this problem, I start to find a solution for a simple cube. To assemble each face of my cube, I propose to use some connectors. The connectors are designed with OpenScad with a parametric code. The laser cutter used for this kit is a Chinese laser cutter machine from Columbia's University Makerspace. (Thanks, Mo to allow me to use this machine). Usually, I use a Trotec or an Epilog laser machine. So this is nice exercise to use different machines for the same job.

Parametric design on OpenScad

The connector model is parametric. You can add connectors with parametric angels, chamfer. The thickness of the material could be changed also with various other parameters.

         segmentSize=50;       //mm
         tickness = 3;         //mm material
         resolution=50;        //number of segment $fn
         connectorLength=10;
         deepBump=0.5;
         widthBump=0.2;
         chamfer=1;
         chamferOffset=0;
         chamferConnector=1;
         chamferConnectorOffset=0.5;
         offSetLaser=-0.05;
         

First test on the laser cutter

The first test is to calibrate the laser offset and to check if our model works. To test, we need to export our 3D model in 2D vectors. With OpenScad, we can use the function projection() to get a 2D vectorial projection and the function export as DXF from the file's menu. Import your dxf file, with your laser cutter software and apply the material to cut your matérial. Depending on the thickness and the machine but to cut acrylic, we use:

         My parameters on Trotec speedy 500 120Watts
         power: 100%
         speed:   1%
         frequency : 10000
         My parameters on Epilog 40Watts
         power: 100%
         speed:   12%
         frequency : 5000
         

Adjustment of the parameters

After a first assemblage, we can see that the connectors are moving and do not fit. In fact, after control, the thickness of the acrylic is not 3mm but 2.85mm. After an adjustment of the thickness, the result is much better.

Final Results

For the final cut, I chose a transparent acrylic. The width was first not correct. I adjust two time before to get the good value.

Improvements

The last change was not the good one. The laser offset was too much increase and too large to be assembled nicely. A lot of connectors were broken before to get a correct assemblage. This could be improved. The code could be improved too. The last version of the source code: OrcasConstructionKit_7.scad.

           offSetLaser=0.15;
           segmentSize=75; //mm
           tickness = 3.18;   //mm material
           resolution=50;
           connectorLength=10;
           deepBump=0.5;
           widthBump=0.2;
           chamfer=1;
           chamferOffset=1;
           chamferConnector=1;
           chamferConnectorOffset=0.5;
         

Realisation of a sticker

The vinyl cutter I used was the Roland Camm-1.
The goal is to realize a sticker with the logo of Artilect FabLab Toulouse. The logo from a jpg image. The first step was to convert the raster logo into a vectorial representation. The conversion is getting with a tool that converts the logo in black & white by contrast. The second step is to setup the vynil cutter and cut the vynil. I apply two times the process to be sure the vinyl is cut correctly. Slowly I removed the negative par. Be careful, some small letters can move. Remove the small part with a small knife. Clean the surface where the sticker will be applied and use the transfer paper to do it. To get the expected results I repeat all the process three times but with the experience, you find the good way to do it.

Parameter: To parameter the knife, you can try to cut manullely some vinyl. Adjust the size of the knife until you cut correclty.

The vinyl cutter I used was the Roland Camm-1. (see the photo)

Source Files :
OrcasConstructionKit_7.scad
OrcasConstructionKit_7.dxf
Artilect Logo for vinyl cutter Openscad 2D Wood or PMMA Support FinalProject : WoodSupport.scad Wood or PMMA Support FinalProject : WoodSupport.dxfs

What parameters did you use for vinyl cutting? what machine? what materiales? was it easy? any learned lessons? where is the file?















Electronics Production

Electronics production

Assignements
Characterize the design rules for your PCB production process
Make an in-circuit programmer by milling the PCB, program it, then optionally, trying other processes.

References
Brian FabISP
FabAcademy Course: Electronics Production
FabAcademy Video: Electronics Production
Recitation: Electronics Production

Learning
I learn how to use a Lpkf cnc machine.

I produce my Fab ISP I am inspired from the page of Brian. To design the Fab ISP I used eagle.
A 0.2 mm universal cutting tool
A micro cutter 0.1 mm to 0.15 mm
0.8mm , 1.0 mm and 2.0 mm end mills
2mm contour routing tools

Characterize the design rules for your PCB production process Make an in-circuit programmer by milling the PCB, program it, then optionally, trying other processes.

I produce my Fab ISP I am inspired from the page of Brian. To design the Fab ISP I used eagle.


To produce the board, I used a LPKF CNC machine. I did 4 tests to find the good paraemeters.

Problem :
My pcb was not engrave enougth.

solution:
At first, I remove only 18microns of copper but remove 40microns was necessary

Problem :
The pcb was to large to be plug inside a usb port.

Solution:
I redesign the PCB to have a smaller usb connector.

Finaly, I was able to assemble my PCB. I used an attiny85V and try with an attiny45v.

Problem :
I spend many days to program my Fab ISP with an arduino as ISP. My board was not reconize. I dont why...

solution:
First I add some pins connect an external oscilator. Finaly this was not necessary. But I keep on the pcb the possibily to add it.
I tried again and again from scratch... I think my problem come from of one of my head pins.

The command line, I used to finaly programm the FabISP.

              avrdude -v -pattiny85 -carduino -P/dev/cu.usbmodem14201 -b19200 -Uflash:w:fts_firmware.hex:i
              


avrdude: Version 6.0.1, compiled on Dec 16 2013 at 17:26:24
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "/usr/local/CrossPack-AVR-20131216/etc/avrdude.conf"
         User configuration file is "/Users/nicolaslassabe/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/cu.usbmodem14201
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
         AVR Part                      : ATtiny85
         Chip Erase delay              : 4500 us
         PAGEL                         : P00
         BS2                           : P00
         RESET disposition             : possible i/o
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65     6     4    0 no        512    4      0  4000  4500 0xff 0xff
           flash         65     6    32    0 yes      8192   64    128  4500  4500 0xff 0xff
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           calibration    0     0     0    0 no          2    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e930b
avrdude: safemode: lfuse reads as E2
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "fts_firmware.hex"
avrdude: writing flash (2488 bytes):

Writing | ################################################## | 100% 3.52s

avrdude: 2488 bytes of flash written
avrdude: verifying flash memory against fts_firmware.hex:
avrdude: load data flash data from input file fts_firmware.hex:
avrdude: input file fts_firmware.hex contains 2488 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 1.76s

avrdude: verifying ...
avrdude: 2488 bytes of flash verified

avrdude: safemode: lfuse reads as E2
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF
avrdude: safemode: Fuses OK (H:FF, E:DF, L:E2)

avrdude done.  Thank you.

Source Files :
My Fab IPS : schematic (For Eagle)
My Fab IPS board : (For Eagle)
















3D Scanning and Printing

3D Scanning

Assignements
Test the design rules for your printer(s)
Design and 3D print an object (small, few cm3, limited by printer time) that could not be made subtractively
3D scan an object (and optionally print it)

References
Course: Scanning Printing
video: Scanning Printing

Learning
Scanning an object with a phone is possible but it is difficult to exploit the objects.

I tried different application on Iphone to 3D scan a small plane : QLone, Capture and 3D ScanR.

QLone

This application is very easy to use. You just go around your object with your camera. A VR mention the missing part. The scanner uses a matrix to scan object. The main difficultie is to get a complet object (under the object). The resolution is good enougth to print but not without reparation of the file. You get all the mapping. The scanned object could be upload to SketchFab.
Qlone use a matrix to adjuste parameters and to scan an object

Capture

Capture uses the IR scanner from the Iphone XR, same technologie as Face ID from Apple. It is still difficulte to scan a complete object with this application.

3DScanR

The last application use only visual camera to track the object and build the 3D. Same as before, we dont have a complete object and it is difficult to keep the tracking when we slowly move around the object.

Printing

To print we used a Up printer. The parameter of layer thickness is 0.1. Quality: fine, Infill: Average
The module of the mechanical machine could be done only additionnally
The modules were printed because they can be done subtractively.

sources
plane.stl
plane.scad
Bot: bot.scad
















Electronics Design

Electronics Design

Assignements
Use the test equipment in your lab to observe the operation of a microcontroller circuit board
Redraw the echo hello-world board, add (at least) a button and LED (with current-limiting resistor), check the design rules, make it, test it.
Extra credits: Simulate its operation. Render it.

References
Software: Eagle
FabAcademy Course: Electronics Design
Videos: Electronics Design
Recitation: Electronics Design
Tutorial : Introdudction to Eagle
Tutorial : Eagle Workflow

Learning
I select Eagle to Design my PCB. It is very easy to install. I did'nt know how to use it before the Fab Academy. It was the first time, I used a software like Eagle. I still need to learn lot of things from it. I just use component from libraries. The next step is to learn how to integrate new component inside the library.

First window appears after the inslation of Eagle
The schematic of my FabISP inspiered by the one of Brian. I add the possiblity to connect Pin3 and Pin4 for an oscilator.
I reproduce the board FabISP of Brian and I adjusted the USB connector.

For my first Hello World PCB, I wanted to use an attiny85 instead of attiny44.

The goal of my PCB is to be programmed by a Fab ISP. For the communication, I plan to use I2C instead FDTI to communicate with a raspberry PI or a PC.

The schematic of my board. I design one node board with an attiny85 and 4 I2C connector.
The board is very small and some hole are too small to use them manullely.

Here the realisation on the CNC LPKF

My goal was to have to side board with 2 PCB. One main side with PCB with the microcontroller and one side with one sensor or one activator. For the communication between the PCB, I wanted to use the small holes in the middle of the board... but they are too small...

Make a new version with long pins head through the board.

This new main node board schematic, some pins go through the board to be connect to a sensor or activator.
This is the new main node board. the pins on the right go through the board to remove the previsous small holes. (Top side)

The schematic pot board for the potentiometer
The pot board on eagle (Bottom side)

New version with long pins head through the board to connect sensor or actuator on the main board (2 boards)

Source Files :
My Fab IPS: schematic (For Eagle)
My Fab IPS: board (For Eagle)
Board V1: Schematic (For Eagle)
Board V1: Board (For Eagle)
Board V2: Schematic (For Eagle)
Board V2: Board (For Eagle)
Board Pot V1: Schematic (For Eagle)
Board Pot V1: Board (For Eagle)
















Computer Controlled Machining

Computer Controlled Machining

Assignements
Test runout, alignment, speeds, feeds, and toolpaths for your machine.
Make (design+mill+assemble) something big.

References
FabAcademy Course Computer Controlled Machining
FabAcademy Video Computer Controlled Machining

Learning: If you use a cnc you learn how to calcul:
- select tool 6mm of Diamater, 1 flute, length of cut (50mm - That was to long, I broke it quickly. I changed of one of 20mm)
- the speed of the spindle Speed: 3cm/s in our case
- RPM : 20000

The design is parametric to be adapted to the widness of the wood, tool...
thickness=18; //Thickness wood
L=250;
H=250;
roofH=250;
hole=70;
explode=0;
drill=6; //tool diameter
holeBlock=8;
laser=0; //1 to generate DXF - 0 for 3D view

The cnc is used is a makko (1000x7000mm). Router are nice to design funiture. I fixed the wood directly with screws.
The first tool was too long (50mm - That was to long, I broke it quickly. I changed of one of 20mm)
To assemble the bird house, the joint are in-large to be asssembled. I used holes with rope to fixe joint.
This part was not with a size... I cut inside my contour and not oudside.
To generate dxf file, I used openscad to project 3D in 2D.
The bird house assembled fit perfectly.
The bird house was installed with a rope. I fixed the front with small branches, this way is possible to clean inside
The bird house with view on Toulouse.

Source Files :
Openscad
Front DXF
Top DXF
Bottom DXF
Side DXF
Back DXF


             thickness=18;
            L=250;
 H=250;
 roofH=250;
 hole=70;
 explode=0;
 drill=6;
 holeBlock=8;

 laser=0;

 module frontBack(hole){
     difference(){
         cube([2*thickness+L,thickness,H+thickness*6],center=true);
         translate([0,0,-H/10]){
             rotate([90,0,0])
                cylinder(d=hole,H,center=true,$fn=100);
                 translate([0,0,-hole/4])
                    cube([hole,hole,hole/2],center=true);
         }

         minkowski(){
             translate([0,0,(-H-thickness)/2])
                 cube([L-thickness*4+thickness,thickness*2,thickness-drill+2],center=true);
             rotate([90,0,0])
                cylinder(d=drill,h=0.01,center=true,$fn=40);
         }
         minkowski(){
             translate([0,0,(H+thickness)/2])
                 cube([L/2+thickness,thickness*2,thickness-drill+2],center=true);
             rotate([90,0,0])
                 cylinder(d=drill,h=0.01,center=true,$fn=40);
         }

    }

 }



 module bottom(){

 difference(){
     union(){
     cube([L,H,thickness],center=true);

     minkowski(){
        cube([L+thickness*4,H/2,thickness],center=true);
        cylinder(d=thickness,h=0.001,$fn=100);
     }

     translate([0,-thickness*4,0])
         minkowski(){
         cube([L-thickness*4,H+thickness*4+thickness*8,thickness],center=true);
         cylinder(d=thickness,h=0.001,$fn=100);
    }
    }

    for(i=[0:3])
    rotate([0,0,90*i]){
    translate([L/4.5,L/2+thickness+holeBlock/2,0])
         cylinder(d=8,h=thickness+1,center=true,$fn=20);
    translate([0,L/2+thickness+holeBlock/2,0])
         cylinder(d=8,h=thickness+1,center=true,$fn=20);
    translate([-L/4.5,L/2+thickness+holeBlock/2,0])
         cylinder(d=8,h=thickness+1,center=true,$fn=20);
    }
 }
 }

 module top(){
     difference(){
     union(){
     cube([L,H,thickness],center=true);
     minkowski(){
         cube([L+thickness*4,H/2,thickness],center=true);
         cylinder(d=thickness,h=0.001,$fn=100);
     }
     minkowski(){
         cube([L/2,H+thickness*4,thickness],center=true);
         cylinder(d=thickness,h=0.001,$fn=100);
     }
    }
    for(i=[0:3])
    rotate([0,0,90*i]){
    translate([L/4.5,L/2+thickness+holeBlock/2,0])
         cylinder(d=8,h=thickness+1,center=true,$fn=20);
    translate([0,L/2+thickness+holeBlock/2,0])
         cylinder(d=8,h=thickness+1,center=true,$fn=20);
    translate([-L/4.5,L/2+thickness+holeBlock/2,0])
         cylinder(d=8,h=thickness+1,center=true,$fn=20);
    }
    }
 }

 module side(){
 difference(){
     cube([thickness,L,H+thickness*6],center=true);
     minkowski(){
         translate([0,0,(-H-thickness)/2])
             cube([thickness*2,H/2+thickness,thickness-drill+2],center=true);
         rotate([0,90,0])
            cylinder(d=drill,h=0.01,center=true,$fn=40);
     }
     minkowski(){
         translate([0,0,(H+thickness)/2])
             cube([thickness*2,H/2+thickness,thickness-drill+2],center=true);
         rotate([0,90,0])
            cylinder(d=drill,h=0.01,center=true,$fn=40);
     }
 }
 }

 if(laser==0)
 {
     translate([0,0,H/2]){
        translate([0,0,(-H-thickness)/2-explode])
            bottom();

        translate([0,0,(H+thickness)/2+explode])
            top();

        translate([0,(H+thickness)/2-explode,0])
             frontBack(hole=0);

         translate([0,(-H-thickness)/2-explode,0])
             frontBack(hole=hole);

         translate([(-H-thickness)/2-explode,0,0])
             side();

         translate([(H+thickness)/2+explode,0,0])
             side();
         }
     }
  else
     projection(){
         //rotate([90,0,0])
         //frontBack(hole=hole);
         bottom();
         //translate([H+100,0,0])
         //top();
         //rotate([0,0,90])
         //rotate([0,90,0])
         //side();
         rotate([90,0,0])
             frontBack(hole=0);
    }

  















Embedded Programming

Embedded Programming

Assignements
Compare the performance and development workflows for other architecture
Read a microcontroller data sheet.
Program your board to do something, with as many different programming languages and programming environments as possible.

References
wikipedia AVR microcontrollers
wikipedia ATtiny comparaison

Learning
Compare stm32, Attiny85

STM32

STM32 is a powerfull 32bits microcontroller from STMicroelectronics. Similaire to the Atmega328 of Atmel.

Architecture stm32

ATtiny85

ATiny85 is a small and very powerfull microcontroller with 8 pins. Similar to the Atmega328 but smaller.

Architecture ATtiny85
All the function of pins of the attiny85


              #include Adafruit_NeoPixel.h

              #define PIN 3
              int n=0;
              Adafruit_NeoPixel strip = Adafruit_NeoPixel(3, PIN, NEO_GRB + NEO_KHZ800);


              void setup() {
                strip.begin();
                strip.show();
              }

              void loop() {
                  strip.setPixelColor(n%3,255,0,0);
                  strip.setPixelColor((n+1)%3,0,255,0);
                  strip.setPixelColor((n+2)%3,0,0,255);
                  strip.show();
                  delay(1000);
                  n++;
              }
              

What this program do ?
This programe use a library from Adafruit to turn on RGB led.
The setup initialize the led strip (3 leds).
The loop is the main. It will be repeated until you unpowerd or reset the board.
For each step the n variable will be added of one. This will changed the color of each led each second.
This is do a rotation of the red, green and blue color one each led.

To upload the program I use the Arduino IDE through the FabISP.
I also used atome like IDE to program.
The attiny85 programs by the FabISP command the rgb led from PB3 pin in the code (pin 2 on attiny85)

sources:
rvb.ino
















Moulding And Casting

3D Moulding And Casting

Assignements
Review the safety data sheets for each of your molding and casting materials
Make and compare test casts with each of them
Design a 3D mould around the stock and tooling that you'll be using, mill it (rough cut + (at least) three-axis finish cut), and use it to cast parts.

References
Fab Academy Course: Molding Casting
Fab Academy Video: Molding Casting
Fab Academy Recitation Video: Molding Casting

Learning: At the beginning I was planning to cast the same plane 3D print. But the plane seem a bit to complex to cast with only one mold.

The plane was my first choice to cast but it seem to complex to cast. Two mold seen necessary to do it correctly.

So I selected a simplest model. I Choice a face.jpg to transform into 3D gcode file with Fab Module.
The face selected to be moulding and casting. I used Fab Module to generate Gcode and nc file. I used two nc to control the cnc.
View of the movement of milling machine.
First Step to get all the level (faceR.nc file). And Second step to smooth the result (faceF.nc file). Mould results.
Mix one part of hardener for two parts resine.
Application of the resine.
I used aliginate for casting.

Achievements :
- generation a 3D gcode file for the CNC machine.
- Moulding with CNC
- Casting with resine and alginate

Source Files :
Face : (Gcode)
Face First Steps : (nc)
Face Smooth Steps : (nc)
















Input Devices

Input Devices

Assignements
Probe an input device's analog levels and digital signals
Measure something: add a sensor to a microcontroller board that you have designed and read it.

References
Fab Academy Course: Input Devices
Fab Academy Video: Input Devices

The schematic of my node board. I design one node board with an attiny85 and 4 I2C connector.
The node board.

The schematic pot board for the potentiometer
The pot board on eagle
New version with long pins head through the board to connect sensor or actuator on the main board
The board is the potentiometer
Embedded sensor inside a module

This code get the value from the potentiometer from an attiny85. The value could be not display directly on a terminal with usb with attiny85.

                  int val=0;

                  void setup() {
                  }

                  void loop() {
                       val=analogRead(2);

                    }
                  

Code the change the delay of rotation on three leds on the same node (attiny85)
Embedded sensor inside a module

#include Adafruit_NeoPixel.h
#define PIN 3
int n=0;
int val=0;

Adafruit_NeoPixel strip = Adafruit_NeoPixel(3, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.show();
}

void loop() {
     val=analogRead(2);
     strip.setPixelColor(n%3,255,255,255);
     strip.setPixelColor((n+1)%3,0,0,0);
     strip.setPixelColor((n+2)%3,0,0,0);
     strip.show();
     delay(val);
     n++;
  }



Source Files :
Board V2: Schematic (For Eagle)
Board V2: Board (For Eagle)
Board Pot V1: schematic (For Eagle)
Board Pot V2: (For Eagle)
















Output Devices

Output Devices

Assignements
Measure the power consumption of an output device
Add an output device to a microcontroller board you've designed and program it to do something

References
Fab Academy Course Output Device
Fab Academy Video Output Device
Fab Academy Recitation Output Device

Learning
Design a board for ouput device

V1 : The schematic is of the main board is the same for the input and outup device. I design one node board with an attiny85 and 4 I2C connector.

V2 : The schematic is of the main board is the same for the input and outup device. I design one node board with an attiny85 and 4 I2C connector.

Output RGB led from Adafruit
This code for the node led. With the I2C communication the node pod and the node led are separated.

                 #include Adafruit_NeoPixel.h
                 #define PIN 3
                 int n=0;
                 int val=0;

                 Adafruit_NeoPixel strip = Adafruit_NeoPixel(3, PIN, NEO_GRB + NEO_KHZ800);

                 void setup() {
                   strip.begin();
                   strip.show();
                 }

                 void loop() {
                      val=analogRead(2);
                      strip.setPixelColor(n%3,255,0,0);
                      strip.setPixelColor((n+1)%3,0,255,0);
                      strip.setPixelColor((n+2)%3,0,0,255);
                      strip.show();
                      delay(val);
                      strip.setPixelColor(n%3,0,0,0);
                      strip.setPixelColor((n+1)%3,0,0,0);
                      strip.setPixelColor((n+2)%3,0,0,0);
                      delay(val);
                      n++;
                   }

                 

Source Files :
Board V1Schematic (For Eagle)
Board V1Board (For Eagle)
Board V2: Schematic (For Eagle)
Board V2: Board (For Eagle)
















Applications And Implications

13 Application And Implication

Assignements
Your project should incorporate 2D and 3D design,
additive and subtractive fabrication processes,
electronics design and production,
microcontroller interfacing and programming,
system integration and packaging
Where possible, you should make rather than buy the parts of your project
Projects can be separate or joint, but need to show individual mastery of the skills,


what will it do?
The goal of this project is to create plug & play electronic modules and rigid structures to build any type of robots, iot devices or machines.
Plug and play, auto detect topology: self detect the electronic modules and display the modules and the physical connections (topology) on an application.
To prototype quicky and easily electronic or IOT devices
To build cnc machines
To build modular robots

who has done what beforehand?
See final project page


What will you design?
See final project page

what materials and components will be used?
I will use wood, plexiglas, ABS

where will they come from?
The wood from France, plexiglass from French Shop RichardSon, ABS from

how much will they cost?
In total around 100$ by module 20$

what parts and systems will be made?
All the system will be made

what processes will be used?
Laser cutting, engraving, electronic

what questions need to be answered?
Can we evoluve the project in the future

how will it be evaluated?
If it is easy to use, open to be modified
















Embedded Networking And Communication

Embedded Networking And Communication

Assignements
Send a message between two projects (assignments made by different students)
Design, build, and connect wired or wireless node(s) with network or bus addresses

References
Fab Academy Course: Networking Communication
Fab Academy Video: Networking Communication
Fab Academy Recitation: Networking Communication<

Learning
sdfjslkfj

Achievements
sdfjslkfj

sources
sdfjslkfj
















Mechanical/Machine Design

Mechanical/Machine Design

Assignements
Design a machine (mechanism + actuation + automation)
Build the mechanical parts and operate it manually.
Document your individual contribution.
Actuate and automate your machine.
Document the group project
Document your individual contribution.

References:
FabAcademy: Course
FabAcademy: Video

Learning
I learn to design modular machines.

3D model raytracing version 0
How to assemble a module
Orcas concept printer
X,Y assembled axis
The assembled printer
First printed object

Video:

Achievements
I designed the main module and the concept of the printer on Openscad. Kevin Hové design a solidwork version and the header.
Louis Connel did 3d rendering with Rhino.
We assemble and test the printer together.

Problem and next steps :
The machine is complex to assemble, there is lot of parts... but is completely modular.
A PMMA boxe around structure of the printer should be better for the rigidity of structure, to enclose the temperature inside the printer.

sources:
Openscad 3D from me
Main: main.scad
Header: orcas.scad
Actuator: stepper.scad
Bot: bot.scad
Bot: orientation.scad
Connector: connector.scad
Connector: faceFull.scad
Connector: faceServo.scad
















Interface/Application Programm

Interface And Application Programm

Assignements - Write an application that interfaces with an input and/or output device that you made - Compare as many tool options as possible

References
Website https://nodejs.org/
Website https://threejs.org
Website https://www.openscad.org

Learning
I learn who to create a server with node.js.
I used three.js to display realtime 3D.
A parametric model interpreted by openscad is used to dynamically changed the model.
I used interface to change the variables dynamically.
I map dynamically the new geometry of the 3D model with a texture.

Achievements
That's work on pc. Should works on Raspberry Py. The goal still to connect my electronic module to control 3D models by I2C.

Video


sources
coming soon today...
















Wildcard

Wildcard


Design and produce something with a digital fabrication 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. Possibilities include (but are not limited to composites, textiles, biotechnology, robotics, folding, and cooking.

References
Video Wildcard

Learning
Print clay with a peristaltic pump.

Achievements
This pump was done with a collaboration with Kevin Hové.

Pump peristaltic : animation from wikipedia
Pump peristaltic: raytracing from Kevin Hove
Pump peristaltic printed

Video


Achievements
The pumpe works but still very slow and could be improve. The material could be improve with more time.
Contribution is the structure of the module, stepper motor connector. Kevin design the mechanical pump.

sources:
Openscad 3D
Main: main.scad
Header: orcas.scad
Actuator: stepper.scad
Bot: bot.scad
Bot: orientation.scad
Connector: connector.scad
Connector: faceFull.scad
Connector: faceServo.scad
















Invention Intellectual Property

Presentation project:

For the licence, I think I will protect the name ORCAS, "Open Robotics Cross Achitecture System" like Arduino does : restrict use of the name "ORCAS" to the official boards. I will keep open source the design licensed under a Creative Commons Attribution Share-Alike license, which allows for both personal personal and commercial derivative works, as long as they credit Arduino and release their designs under the same license. The documentation will be also on the website to load designs, applications, documentations, tutorials to how to build modules... Very similar to Arduino Website.

- The goal will be to design more modules with sensors and activators.

- The surface resolution was not so smooth. This is because I didn't select the good diameter of the tool. Anyway, I keept it like this to see if we can get these details during the casting with the resine.

License :
- Design licensed under a Creative Commons Attribution Share-Alike license
- Name protection for ORCAS, "Open Robotics Cross Achitecture System"