Initial checkin downloaded from thingiverse
This commit is contained in:
parent
028dd4be4b
commit
d67ec15e6c
3
LICENSE.txt
Normal file
3
LICENSE.txt
Normal file
@ -0,0 +1,3 @@
|
||||
The Ultimate box maker (https://www.thingiverse.com/thing:1264391) by Heartman is licensed under the Creative Commons - Attribution - Non-Commercial license.
|
||||
http://creativecommons.org/licenses/by-nc/3.0/
|
||||
|
@ -1,2 +1,4 @@
|
||||
# Ultimate-Box-Maker
|
||||
Ultimate Box Maker
|
||||
|
||||
This is copied from https://www.thingiverse.com/thing:1264391 under the creative commons license with modifications logged here.
|
||||
|
213
README.txt
Normal file
213
README.txt
Normal file
@ -0,0 +1,213 @@
|
||||
.: :,
|
||||
,:::::::: ::` ::: :::
|
||||
,:::::::: ::` ::: :::
|
||||
.,,:::,,, ::`.:, ... .. .:, .:. ..`... ..` .. .:, .. :: .::, .:,`
|
||||
,:: ::::::: ::, ::::::: `:::::::.,:: ::: ::: .:::::: ::::: :::::: .::::::
|
||||
,:: :::::::: ::, :::::::: ::::::::.,:: ::: ::: :::,:::, ::::: ::::::, ::::::::
|
||||
,:: ::: ::: ::, ::: :::`::. :::.,:: ::,`::`::: ::: ::: `::,` ::: :::
|
||||
,:: ::. ::: ::, ::` :::.:: ::.,:: :::::: ::::::::: ::` :::::: :::::::::
|
||||
,:: ::. ::: ::, ::` :::.:: ::.,:: .::::: ::::::::: ::` :::::::::::::::
|
||||
,:: ::. ::: ::, ::` ::: ::: `:::.,:: :::: :::` ,,, ::` .:: :::.::. ,,,
|
||||
,:: ::. ::: ::, ::` ::: ::::::::.,:: :::: :::::::` ::` ::::::: :::::::.
|
||||
,:: ::. ::: ::, ::` ::: :::::::`,:: ::. :::::` ::` :::::: :::::.
|
||||
::, ,:: ``
|
||||
::::::::
|
||||
::::::
|
||||
`,,`
|
||||
|
||||
|
||||
https://www.thingiverse.com/thing:1264391
|
||||
The Ultimate box maker by Heartman is licensed under the Creative Commons - Attribution - Non-Commercial license.
|
||||
http://creativecommons.org/licenses/by-nc/3.0/
|
||||
|
||||
# Summary
|
||||
|
||||
<img src="http://heartygfx.free.fr/Thingiverse/Update.jpg">
|
||||
The file include now the Panel Maker.
|
||||
Check below in the <strong><font color="Grey">Experimental area</font></strong> to download it.
|
||||
<br>
|
||||
My first try with OpenScad,
|
||||
the box is fully customizable.
|
||||
I hope you will enjoy with it, and will show us many boxes made with.
|
||||
|
||||
If you play with the <strong><font color="Orange">Fillet</font></strong> value you will go from the sharp to the round sides box
|
||||
If you want a chanfered box, set <strong><font color="Orange">Resolution</font></strong> to 1.
|
||||
|
||||
To export each single piece, just set the other elements to <strong><font color="Orange">No</font></strong> value.
|
||||
The Top and Bottom Shells are the same,
|
||||
so it's not necessary to export them two times, except if you use the PCB feet option.
|
||||
|
||||
Check the animation below to see how to design your own box.
|
||||
|
||||
You can change the text shape with any <a href="http://www.google.com/fonts"> font listed here </a>.
|
||||
|
||||
Have fun ;)
|
||||
|
||||
<img src="http://heartygfx.free.fr/Thingiverse/Stick_New.png">
|
||||
|
||||
- Feb 12 2016
|
||||
Minor bug fixed on unaligned hole when using more than 2mm thickness.
|
||||
- March 01 2016
|
||||
Added the decoration/holes options. (Thanks <a href="http://www.thingiverse.com/Ettie">Ettie</a> for your contribution)
|
||||
- March 09 2016
|
||||
Added PCB feet support, fixed the shell artefact on export mode.
|
||||
|
||||
- March 01 2018
|
||||
<strong><font color="Red">It Seems, since few month the online customizer doesn't works, some lib missing. it's not under my hands, ask to makerbot/thingiverse staff.
|
||||
THE solution is,
|
||||
downloading the newest - Development Snapshot - release of Openscad software
|
||||
and activate in the Edit>preference>features menu
|
||||
and check the "Enable customizer" option.</font></strong> <br>link:
|
||||
<a href="http://www.openscad.org/downloads.html#snapshots">OpenScad-Customizer</a>
|
||||
|
||||
<br><b>
|
||||
<b>Please, read as well.
|
||||
The PCB feet dimensions are all starting from the foot axis center.
|
||||
it's not the circuit board size, holes center only(!)
|
||||
<br><br>
|
||||
<img src="http://heartygfx.free.fr/Thingiverse/Feet_Box.jpg">
|
||||
<br><br>
|
||||
|
||||
Check below, some animated pictures showing how to use the Ultimate Box maker online.
|
||||
<br><br>
|
||||
|
||||
# Print Settings
|
||||
|
||||
Printer Brand: RepRap
|
||||
Printer: Home made
|
||||
Rafts: Doesn't Matter
|
||||
Supports: Doesn't Matter
|
||||
Resolution: 0.2mm
|
||||
Infill: 30%
|
||||
|
||||
Notes:
|
||||
I printed some boxes horizontally or vertically, both without support.
|
||||
|
||||
|
||||
|
||||
|
||||
# How I Designed This
|
||||
|
||||
## <strong><font color="Orange">Overview & Background:</font></strong>
|
||||
|
||||
</br>
|
||||
The technology called, Stereolithography exists since the 80s.
|
||||
It allow you to design anything with a monomer polymerization, by deposition of successive layers.
|
||||
It's at the origin of our FDM printers, developed it's been 20 years.
|
||||
The STL file format was developed for stereolithography.
|
||||
|
||||
Why are we fascinated by this technology?
|
||||
Because we are witnesses and participants of an industrial revolution.
|
||||
A total change in the economic paradigm that has developed during the 19 and 20 th century.
|
||||
We become craftsmen, designers, and take in hand our evolution.
|
||||
|
||||
Why am I talking about that?
|
||||
I think it's a good introduction to show you a perfect demonstration of what we expect from this technology.
|
||||
|
||||
Design and answer to their own needs.
|
||||
The proposed application lets you quickly create a case whose use will be defined by the user, the shape and dimensions will be those you have identified and not that the industry proposes / imposes.
|
||||
|
||||
## <strong><font color="Orange">Objective:</font></strong>
|
||||
|
||||
</br>
|
||||
The student will have two objectives with a project like this one:
|
||||
|
||||
- Create an application that will be used for future projects , and definitively avoid buying boxes not always appropriate to the needs .
|
||||
|
||||
- Learn programming by a quasi - recreational way , since entirely graphic and visual .
|
||||
|
||||
- Many other knowledge can be transmitted based on the desire of the teacher to deepen a particular aspect of the design .
|
||||
|
||||
## <strong><font color="Orange">Audience</font></strong>
|
||||
|
||||
</br>
|
||||
I'm not familiar with the foreign school grades,
|
||||
in France, it's around 10/12 years old they begin to learn programming.
|
||||
So, it can be a nice starting way and support project to learn visually to code.
|
||||
|
||||
The presented project was made in two times,
|
||||
I did the box in the first time,
|
||||
then I dug more, for the Panel Maker.
|
||||
|
||||
Like I said in the begining, I was, myself, learning how OpenScad works,
|
||||
that will be the same for the students, learning and creating something more complex lesson after lesson. A perfect way to evaluate the level reached.
|
||||
|
||||
As an assessment
|
||||
|
||||
|
||||
|
||||
## <strong><font color="Orange">Skill learned</font></strong>
|
||||
|
||||
</br>
|
||||
- Programmation
|
||||
- 3D design
|
||||
- 3D printing
|
||||
|
||||
## <strong><font color="Orange">Duration:</font></strong>
|
||||
|
||||
</br>
|
||||
A project like this can be the string to follow throughout all the school year.
|
||||
|
||||
# Show me how it works...
|
||||
|
||||
</br>
|
||||
Here is a small demonstration how to use the Customizer to have separate pieces box.
|
||||
The top and bottom shells are the same, so it's not necessary to make 2 differents stl files.
|
||||
If the front Panel is without text, then the back and front panels are the same, so again,
|
||||
just export one.
|
||||
<br><br><br>
|
||||
<img src="http://heartygfx.free.fr/BlogImg/Thingiverse/Ultimate_Box.gif">
|
||||
<font size="1"><i>right click on the animated pic, and choose "view image" to watch it in full size</i></font>
|
||||
<br><br>
|
||||
|
||||
|
||||
## <strong><font color="Orange">PCB feet</font></strong>
|
||||
|
||||
<br>
|
||||
<img src="http://heartygfx.free.fr/Thingiverse/Feet_Box.gif">
|
||||
<font size="1">right click on the pic, and choose "view image" to watch it in full size</font>
|
||||
<br><br>
|
||||
|
||||
|
||||
Enjoy guys, and show us your printed boxes... ;)
|
||||
|
||||
# Experimental Area
|
||||
|
||||
## <strong><font color="Orange">With Panel Maker</font></strong>
|
||||
|
||||
This release include a panel maker.
|
||||
fully working, just for the moment, I didn't find the good way to present it within the online customizer.
|
||||
Not easy to make something easy to use...
|
||||
|
||||
Anyway, it stay easy to use, through Openscad. with few option, you will be able to create the panel that you need without limitation, or almost...
|
||||
<br>
|
||||
<img src="http://heartygfx.free.fr/Thingiverse/Experimental_Box.jpg">
|
||||
<br><br><br>
|
||||
<img src="http://heartygfx.free.fr/Thingiverse/Rendu 0002.png">
|
||||
<br><br>
|
||||
|
||||
To build your own panel, you have 4 tools:
|
||||
|
||||
<font size ="4">Cutting shapes</font>
|
||||
* Square
|
||||
* Circle
|
||||
|
||||
<font size ="4">Text label</font>
|
||||
* Linear text
|
||||
* Circular text
|
||||
|
||||
SquareHole (1,20,20,15,10,1); <font size ="2" color="Orange"> //(On/Off, Xpos,Ypos,Length,Width,Fillet)</font>
|
||||
CylinderHole(1,27,40,8); <font size ="2" color="Orange"> //(On/Off, Xpos, Ypos, Diameter)</font>
|
||||
|
||||
LText(1,20,83,"Arial Black",4,"Digital Screen"); <font size ="2" color="Orange"> //(On/Off, Xpos, Ypos, "Font", Size, "Text")</font>
|
||||
CText(1,93,29,"Arial",4,10,180,0,"ABCD"); <font size ="2" color="Orange">//(On/Off, Xpos, Ypos, "Font", Size, Diameter, Arc(Deg), Starting Angle(Deg),"Text")</font>
|
||||
<br><br>
|
||||
|
||||
<font size="1"><i>right click on the animated pic, and choose "view image" to watch it in full size</i></font>
|
||||
<img src="http://heartygfx.free.fr/Thingiverse/Box_Panel_Maker.gif">
|
||||
<br>
|
||||
You can download the animation and read it with the excellent <a href="https://sourceforge.net/projects/gifviewer/">Gifviewer open source freeware</a>, to pause the animation when needed.
|
||||
<br><br>
|
||||
Here you can download <a href="http://heartygfx.free.fr/Thingiverse/U_Box_V104_Test_Cleaned.scad">The Ultimate BOX & PANEL maker</a>.
|
||||
I hope you will enjoy with.
|
||||
<br><br><br>
|
41
attribution_card.html
Normal file
41
attribution_card.html
Normal file
@ -0,0 +1,41 @@
|
||||
<!-- from http://www.thingiverse.com/thing:8174 by whosawhatsis, used with permission -->
|
||||
<style type="text/css">
|
||||
#tagback {padding: 50px;background: white;}
|
||||
.tag {position: relative;border: 1px solid #eeeeee;width: 450px;height: 150px;margin: 0px;padding: 10px 10px 10px 120px;}
|
||||
.tag .qrcode-sidebar {float: right;margin: 0px;padding: 0px;}
|
||||
.tag a {color: black;text-decoration: none;}
|
||||
.tag h1 {font: bold 18px Arial,sans-serif;margin: 0px;padding: 0px;}
|
||||
.tag h2 {font: 14px Arial,sans-serif;margin: 0px;padding: 0px;}
|
||||
.tag h3 {font: 12px Courier,monospace;margin: 0px;padding: 0px;}
|
||||
.tag h4 {font: 9px Arial,sans-serif;position: absolute;bottom: 0px;left: 0px;margin: 0px 150px 0px 0px;padding: 0px;}
|
||||
.tag h4 div {float: left;margin: 0px 5px 15px 125px;height: 40px;}
|
||||
.tag h4 div img {height: 40px;}
|
||||
</style>
|
||||
|
||||
<div id="tagback"><div class="tag">
|
||||
<div class="qrcode-sidebar">
|
||||
<img src="//chart.apis.google.com/chart?chs=150x150&cht=qr&chl=thingiverse.com/thing:1264391&choe=UTF-8&chld=Q|1">
|
||||
</div>
|
||||
<h1>The Ultimate box maker by Heartman</h1>
|
||||
<h2>Published on January 13, 2016</h2>
|
||||
<h3>www.thingiverse.com/thing:1264391</h3>
|
||||
<h4>
|
||||
<div class="row-fluid cc-licenses">
|
||||
<span class="span4">
|
||||
<img src="//www.thingiverse.com/img/cc/chooser_cc.png" />
|
||||
</span>
|
||||
<span class="span4">
|
||||
<img src="//www.thingiverse.com/img/cc/chooser_by.png" />
|
||||
</span>
|
||||
<span class="span4">
|
||||
<img src="//www.thingiverse.com/img/cc/chooser_nc.png" />
|
||||
</span>
|
||||
</div>
|
||||
Creative Commons - Attribution - Non-Commercial<br /></h4>
|
||||
</div></div>
|
||||
|
||||
<script>
|
||||
window.onload = function(){
|
||||
document.getElementById('tagback').appendChild(document.getElementById('tagback').firstChild.cloneNode(true));
|
||||
};
|
||||
</script>
|
363
files/U_Box_V103.scad
Normal file
363
files/U_Box_V103.scad
Normal file
@ -0,0 +1,363 @@
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////
|
||||
- FB Aka Heartman/Hearty 2016 -
|
||||
- http://heartygfx.blogspot.com -
|
||||
- OpenScad Parametric Box -
|
||||
- CC BY-NC 3.0 License -
|
||||
////////////////////////////////////////////////////////////////////
|
||||
12/02/2016 - Fixed minor bug
|
||||
28/02/2016 - Added holes ventilation option
|
||||
09/03/2016 - Added PCB feet support, fixed the shell artefact on export mode.
|
||||
|
||||
*/////////////////////////// - Info - //////////////////////////////
|
||||
|
||||
// All coordinates are starting as integrated circuit pins.
|
||||
// From the top view :
|
||||
|
||||
// CoordD <--- CoordC
|
||||
// ^
|
||||
// ^
|
||||
// ^
|
||||
// CoordA ---> CoordB
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////// - Paramètres de la boite - Box parameters - /////////////
|
||||
|
||||
/* [Box dimensions] */
|
||||
// - Longueur - Length
|
||||
Length = 110;
|
||||
// - Largeur - Width
|
||||
Width = 90;
|
||||
// - Hauteur - Height
|
||||
Height = 30;
|
||||
// - Epaisseur - Wall thickness
|
||||
Thick = 2;//[2:5]
|
||||
|
||||
/* [Box options] */
|
||||
// Pieds PCB - PCB feet (x4)
|
||||
PCBFeet = 0;// [0:No, 1:Yes]
|
||||
// - Decorations to ventilation holes
|
||||
Vent = 0;// [0:No, 1:Yes]
|
||||
// - Decoration-Holes width (in mm)
|
||||
Vent_width = 1.5;
|
||||
// - Text you want
|
||||
txt = "HeartyGFX";
|
||||
// - Font size
|
||||
TxtSize = 3;
|
||||
// - Font
|
||||
Police ="Arial Black";
|
||||
// - Diamètre Coin arrondi - Filet diameter
|
||||
Filet = 2;//[0.1:12]
|
||||
// - lissage de l'arrondi - Filet smoothness
|
||||
Resolution = 50;//[1:100]
|
||||
// - Tolérance - Tolerance (Panel/rails gap)
|
||||
m = 0.9;
|
||||
|
||||
/* [PCB_Feet--the_board_will_not_be_exported) ] */
|
||||
//All dimensions are from the center foot axis
|
||||
// - Coin bas gauche - Low left corner X position
|
||||
PCBPosX = 7;
|
||||
// - Coin bas gauche - Low left corner Y position
|
||||
PCBPosY = 6;
|
||||
// - Longueur PCB - PCB Length
|
||||
PCBLength = 70;
|
||||
// - Largeur PCB - PCB Width
|
||||
PCBWidth = 50;
|
||||
// - Heuteur pied - Feet height
|
||||
FootHeight = 10;
|
||||
// - Diamètre pied - Foot diameter
|
||||
FootDia = 8;
|
||||
// - Diamètre trou - Hole diameter
|
||||
FootHole = 3;
|
||||
|
||||
|
||||
/* [STL element to export] */
|
||||
//Coque haut - Top shell
|
||||
TShell = 1;// [0:No, 1:Yes]
|
||||
//Coque bas- Bottom shell
|
||||
BShell = 1;// [0:No, 1:Yes]
|
||||
//Panneau arrière - Back panel
|
||||
BPanel = 1;// [0:No, 1:Yes]
|
||||
//Panneau avant - Front panel
|
||||
FPanel = 1;// [0:No, 1:Yes]
|
||||
//Texte façade - Front text
|
||||
Text = 1;// [0:No, 1:Yes]
|
||||
|
||||
|
||||
|
||||
/* [Hidden] */
|
||||
// - Couleur coque - Shell color
|
||||
Couleur1 = "Orange";
|
||||
// - Couleur panneaux - Panels color
|
||||
Couleur2 = "OrangeRed";
|
||||
// Thick X 2 - making decorations thicker if it is a vent to make sure they go through shell
|
||||
Dec_Thick = Vent ? Thick*2 : Thick;
|
||||
// - Depth decoration
|
||||
Dec_size = Vent ? Thick*2 : 0.8;
|
||||
|
||||
//////////////////// Oversize PCB limitation -Actually disabled - ////////////////////
|
||||
//PCBL= PCBLength+PCBPosX>Length-(Thick*2+7) ? Length-(Thick*3+20+PCBPosX) : PCBLength;
|
||||
//PCBW= PCBWidth+PCBPosY>Width-(Thick*2+10) ? Width-(Thick*2+12+PCBPosY) : PCBWidth;
|
||||
PCBL=PCBLength;
|
||||
PCBW=PCBWidth;
|
||||
//echo (" PCBWidth = ",PCBW);
|
||||
|
||||
|
||||
|
||||
/////////// - Boitier générique bord arrondis - Generic Fileted box - //////////
|
||||
|
||||
module RoundBox($a=Length, $b=Width, $c=Height){// Cube bords arrondis
|
||||
$fn=Resolution;
|
||||
translate([0,Filet,Filet]){
|
||||
minkowski (){
|
||||
cube ([$a-(Length/2),$b-(2*Filet),$c-(2*Filet)], center = false);
|
||||
rotate([0,90,0]){
|
||||
cylinder(r=Filet,h=Length/2, center = false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}// End of RoundBox Module
|
||||
|
||||
|
||||
////////////////////////////////// - Module Coque/Shell - //////////////////////////////////
|
||||
|
||||
module Coque(){//Coque - Shell
|
||||
Thick = Thick*2;
|
||||
difference(){
|
||||
difference(){//sides decoration
|
||||
union(){
|
||||
difference() {//soustraction de la forme centrale - Substraction Fileted box
|
||||
|
||||
difference(){//soustraction cube median - Median cube slicer
|
||||
union() {//union
|
||||
difference(){//Coque
|
||||
RoundBox();
|
||||
translate([Thick/2,Thick/2,Thick/2]){
|
||||
RoundBox($a=Length-Thick, $b=Width-Thick, $c=Height-Thick);
|
||||
}
|
||||
}//Fin diff Coque
|
||||
difference(){//largeur Rails
|
||||
translate([Thick+m,Thick/2,Thick/2]){// Rails
|
||||
RoundBox($a=Length-((2*Thick)+(2*m)), $b=Width-Thick, $c=Height-(Thick*2));
|
||||
}//fin Rails
|
||||
translate([((Thick+m/2)*1.55),Thick/2,Thick/2+0.1]){ // +0.1 added to avoid the artefact
|
||||
RoundBox($a=Length-((Thick*3)+2*m), $b=Width-Thick, $c=Height-Thick);
|
||||
}
|
||||
}//Fin largeur Rails
|
||||
}//Fin union
|
||||
translate([-Thick,-Thick,Height/2]){// Cube à soustraire
|
||||
cube ([Length+100, Width+100, Height], center=false);
|
||||
}
|
||||
}//fin soustraction cube median - End Median cube slicer
|
||||
translate([-Thick/2,Thick,Thick]){// Forme de soustraction centrale
|
||||
RoundBox($a=Length+Thick, $b=Width-Thick*2, $c=Height-Thick);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
difference(){// Fixation box legs
|
||||
union(){
|
||||
translate([3*Thick +5,Thick,Height/2]){
|
||||
rotate([90,0,0]){
|
||||
$fn=6;
|
||||
cylinder(d=16,Thick/2);
|
||||
}
|
||||
}
|
||||
|
||||
translate([Length-((3*Thick)+5),Thick,Height/2]){
|
||||
rotate([90,0,0]){
|
||||
$fn=6;
|
||||
cylinder(d=16,Thick/2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
translate([4,Thick+Filet,Height/2-57]){
|
||||
rotate([45,0,0]){
|
||||
cube([Length,40,40]);
|
||||
}
|
||||
}
|
||||
translate([0,-(Thick*1.46),Height/2]){
|
||||
cube([Length,Thick*2,10]);
|
||||
}
|
||||
} //Fin fixation box legs
|
||||
}
|
||||
|
||||
union(){// outbox sides decorations
|
||||
//if(Thick==1){Thick=2;
|
||||
for(i=[0:Thick:Length/4]){
|
||||
|
||||
// Ventilation holes part code submitted by Ettie - Thanks ;)
|
||||
translate([10+i,-Dec_Thick+Dec_size,1]){
|
||||
cube([Vent_width,Dec_Thick,Height/4]);
|
||||
}
|
||||
translate([(Length-10) - i,-Dec_Thick+Dec_size,1]){
|
||||
cube([Vent_width,Dec_Thick,Height/4]);
|
||||
}
|
||||
translate([(Length-10) - i,Width-Dec_size,1]){
|
||||
cube([Vent_width,Dec_Thick,Height/4]);
|
||||
}
|
||||
translate([10+i,Width-Dec_size,1]){
|
||||
cube([Vent_width,Dec_Thick,Height/4]);
|
||||
}
|
||||
|
||||
|
||||
}// fin de for
|
||||
// }
|
||||
}//fin union decoration
|
||||
}//fin difference decoration
|
||||
|
||||
|
||||
union(){ //sides holes
|
||||
$fn=50;
|
||||
translate([3*Thick+5,20,Height/2+4]){
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=2,20);
|
||||
}
|
||||
}
|
||||
translate([Length-((3*Thick)+5),20,Height/2+4]){
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=2,20);
|
||||
}
|
||||
}
|
||||
translate([3*Thick+5,Width+5,Height/2-4]){
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=2,20);
|
||||
}
|
||||
}
|
||||
translate([Length-((3*Thick)+5),Width+5,Height/2-4]){
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=2,20);
|
||||
}
|
||||
}
|
||||
}//fin de sides holes
|
||||
|
||||
}//fin de difference holes
|
||||
}// fin coque
|
||||
|
||||
////////////////////////////// - Experiment - ///////////////////////////////////////////
|
||||
|
||||
|
||||
///////////////////////////////// - Module Front/Back Panels - //////////////////////////
|
||||
|
||||
module Panels(){//Panels
|
||||
color(Couleur2){
|
||||
translate([Thick+m,m/2,m/2]){
|
||||
difference(){
|
||||
translate([0,Thick,Thick]){
|
||||
RoundBox(Length,Width-((Thick*2)+m),Height-((Thick*2)+m));}
|
||||
translate([Thick,-5,0]){
|
||||
cube([Length,Width+10,Height]);}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////// - Foot with base filet - /////////////////////////////
|
||||
module foot(FootDia,FootHole,FootHeight){
|
||||
Filet=2;
|
||||
color("Orange")
|
||||
translate([0,0,Filet-1.5])
|
||||
difference(){
|
||||
|
||||
difference(){
|
||||
//translate ([0,0,-Thick]){
|
||||
cylinder(d=FootDia+Filet,FootHeight-Thick, $fn=100);
|
||||
//}
|
||||
rotate_extrude($fn=100){
|
||||
translate([(FootDia+Filet*2)/2,Filet,0]){
|
||||
minkowski(){
|
||||
square(10);
|
||||
circle(Filet, $fn=100);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
cylinder(d=FootHole,FootHeight+1, $fn=100);
|
||||
}
|
||||
}// Fin module foot
|
||||
|
||||
module Feet(){
|
||||
//////////////////// - PCB only visible in the preview mode - /////////////////////
|
||||
translate([3*Thick+2,Thick+5,FootHeight+(Thick/2)-0.5]){
|
||||
|
||||
%square ([PCBL+10,PCBW+10]);
|
||||
translate([PCBL/2,PCBW/2,0.5]){
|
||||
color("Olive")
|
||||
%text("PCB", halign="center", valign="center", font="Arial black");
|
||||
}
|
||||
} // Fin PCB
|
||||
|
||||
|
||||
////////////////////////////// - 4 Feet - //////////////////////////////////////////
|
||||
translate([3*Thick+7,Thick+10,Thick/2]){
|
||||
foot(FootDia,FootHole,FootHeight);
|
||||
}
|
||||
translate([(3*Thick)+PCBL+7,Thick+10,Thick/2]){
|
||||
foot(FootDia,FootHole,FootHeight);
|
||||
}
|
||||
translate([(3*Thick)+PCBL+7,(Thick)+PCBW+10,Thick/2]){
|
||||
foot(FootDia,FootHole,FootHeight);
|
||||
}
|
||||
translate([3*Thick+7,(Thick)+PCBW+10,Thick/2]){
|
||||
foot(FootDia,FootHole,FootHeight);
|
||||
}
|
||||
|
||||
} // Fin du module Feet
|
||||
|
||||
|
||||
///////////////////////////////////// - Main - ///////////////////////////////////////
|
||||
|
||||
if(BPanel==1)
|
||||
//Back Panel
|
||||
translate ([-m/2,0,0]){
|
||||
Panels();
|
||||
}
|
||||
|
||||
if(FPanel==1)
|
||||
//Front Panel
|
||||
rotate([0,0,180]){
|
||||
translate([-Length-m/2,-Width,0]){
|
||||
Panels();
|
||||
}
|
||||
}
|
||||
|
||||
if(Text==1)
|
||||
// Front text
|
||||
color(Couleur1){
|
||||
translate([Length-(Thick),Thick*4,(Height-(Thick*4+(TxtSize/2)))]){// x,y,z
|
||||
rotate([90,0,90]){
|
||||
linear_extrude(height = 0.25){
|
||||
text(txt, font = Police, size = TxtSize, valign ="center", halign ="left");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(BShell==1)
|
||||
// Coque bas - Bottom shell
|
||||
color(Couleur1){
|
||||
Coque();
|
||||
}
|
||||
|
||||
|
||||
if(TShell==1)
|
||||
// Coque haut - Top Shell
|
||||
color( Couleur1,1){
|
||||
translate([0,Width,Height+0.2]){
|
||||
rotate([0,180,180]){
|
||||
Coque();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (PCBFeet==1)
|
||||
// Feet
|
||||
translate([PCBPosX,PCBPosY,0]){
|
||||
Feet();
|
||||
}
|
425
files/U_Box_V104_Test_Cleaned.scad
Normal file
425
files/U_Box_V104_Test_Cleaned.scad
Normal file
@ -0,0 +1,425 @@
|
||||
|
||||
/*//////////////////////////////////////////////////////////////////
|
||||
- FB Aka Heartman/Hearty 2016 -
|
||||
- http://heartygfx.blogspot.com -
|
||||
- OpenScad Parametric Box -
|
||||
- CC BY-NC 3.0 License -
|
||||
////////////////////////////////////////////////////////////////////
|
||||
12/02/2016 - Fixed minor bug
|
||||
28/02/2016 - Added holes ventilation option
|
||||
09/03/2016 - Added PCB feet support, fixed the shell artefact on export mode.
|
||||
|
||||
*/////////////////////////// - Info - //////////////////////////////
|
||||
|
||||
// All coordinates are starting as integrated circuit pins.
|
||||
// From the top view :
|
||||
|
||||
// CoordD <--- CoordC
|
||||
// ^
|
||||
// ^
|
||||
// ^
|
||||
// CoordA ---> CoordB
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////// - Paramètres de la boite - Box parameters - /////////////
|
||||
|
||||
/* [Box dimensions] */
|
||||
// - Longueur - Length
|
||||
Length = 160;
|
||||
// - Largeur - Width
|
||||
Width = 170;
|
||||
// - Hauteur - Height
|
||||
Height = 100;
|
||||
// - Epaisseur - Wall thickness
|
||||
Thick = 2;//[2:5]
|
||||
|
||||
/* [Box options] */
|
||||
// - Diamètre Coin arrondi - Filet diameter
|
||||
Filet = 2;//[0.1:12]
|
||||
// - lissage de l'arrondi - Filet smoothness
|
||||
Resolution = 50;//[1:100]
|
||||
// - Tolérance - Tolerance (Panel/rails gap)
|
||||
m = 0.9;
|
||||
// Pieds PCB - PCB feet (x4)
|
||||
PCBFeet = 1;// [0:No, 1:Yes]
|
||||
// - Decorations to ventilation holes
|
||||
Vent = 1;// [0:No, 1:Yes]
|
||||
// - Decoration-Holes width (in mm)
|
||||
Vent_width = 1.5;
|
||||
|
||||
|
||||
|
||||
/* [PCB_Feet] */
|
||||
//All dimensions are from the center foot axis
|
||||
|
||||
// - Coin bas gauche - Low left corner X position
|
||||
PCBPosX = 7;
|
||||
// - Coin bas gauche - Low left corner Y position
|
||||
PCBPosY = 6;
|
||||
// - Longueur PCB - PCB Length
|
||||
PCBLength = 70;
|
||||
// - Largeur PCB - PCB Width
|
||||
PCBWidth = 50;
|
||||
// - Heuteur pied - Feet height
|
||||
FootHeight = 10;
|
||||
// - Diamètre pied - Foot diameter
|
||||
FootDia = 8;
|
||||
// - Diamètre trou - Hole diameter
|
||||
FootHole = 3;
|
||||
|
||||
|
||||
/* [STL element to export] */
|
||||
//Coque haut - Top shell
|
||||
TShell = 0;// [0:No, 1:Yes]
|
||||
//Coque bas- Bottom shell
|
||||
BShell = 1;// [0:No, 1:Yes]
|
||||
//Panneau avant - Front panel
|
||||
FPanL = 1;// [0:No, 1:Yes]
|
||||
//Panneau arrière - Back panel
|
||||
BPanL = 1;// [0:No, 1:Yes]
|
||||
|
||||
|
||||
|
||||
/* [Hidden] */
|
||||
// - Couleur coque - Shell color
|
||||
Couleur1 = "Orange";
|
||||
// - Couleur panneaux - Panels color
|
||||
Couleur2 = "OrangeRed";
|
||||
// Thick X 2 - making decorations thicker if it is a vent to make sure they go through shell
|
||||
Dec_Thick = Vent ? Thick*2 : Thick;
|
||||
// - Depth decoration
|
||||
Dec_size = Vent ? Thick*2 : 0.8;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/////////// - Boitier générique bord arrondis - Generic rounded box - //////////
|
||||
|
||||
module RoundBox($a=Length, $b=Width, $c=Height){// Cube bords arrondis
|
||||
$fn=Resolution;
|
||||
translate([0,Filet,Filet]){
|
||||
minkowski (){
|
||||
cube ([$a-(Length/2),$b-(2*Filet),$c-(2*Filet)], center = false);
|
||||
rotate([0,90,0]){
|
||||
cylinder(r=Filet,h=Length/2, center = false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}// End of RoundBox Module
|
||||
|
||||
|
||||
////////////////////////////////// - Module Coque/Shell - //////////////////////////////////
|
||||
|
||||
module Coque(){//Coque - Shell
|
||||
Thick = Thick*2;
|
||||
difference(){
|
||||
difference(){//sides decoration
|
||||
union(){
|
||||
difference() {//soustraction de la forme centrale - Substraction Fileted box
|
||||
|
||||
difference(){//soustraction cube median - Median cube slicer
|
||||
union() {//union
|
||||
difference(){//Coque
|
||||
RoundBox();
|
||||
translate([Thick/2,Thick/2,Thick/2]){
|
||||
RoundBox($a=Length-Thick, $b=Width-Thick, $c=Height-Thick);
|
||||
}
|
||||
}//Fin diff Coque
|
||||
difference(){//largeur Rails
|
||||
translate([Thick+m,Thick/2,Thick/2]){// Rails
|
||||
RoundBox($a=Length-((2*Thick)+(2*m)), $b=Width-Thick, $c=Height-(Thick*2));
|
||||
}//fin Rails
|
||||
translate([((Thick+m/2)*1.55),Thick/2,Thick/2+0.1]){ // +0.1 added to avoid the artefact
|
||||
RoundBox($a=Length-((Thick*3)+2*m), $b=Width-Thick, $c=Height-Thick);
|
||||
}
|
||||
}//Fin largeur Rails
|
||||
}//Fin union
|
||||
translate([-Thick,-Thick,Height/2]){// Cube à soustraire
|
||||
cube ([Length+100, Width+100, Height], center=false);
|
||||
}
|
||||
}//fin soustraction cube median - End Median cube slicer
|
||||
translate([-Thick/2,Thick,Thick]){// Forme de soustraction centrale
|
||||
RoundBox($a=Length+Thick, $b=Width-Thick*2, $c=Height-Thick);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
difference(){// wall fixation box legs
|
||||
union(){
|
||||
translate([3*Thick +5,Thick,Height/2]){
|
||||
rotate([90,0,0]){
|
||||
$fn=6;
|
||||
cylinder(d=16,Thick/2);
|
||||
}
|
||||
}
|
||||
|
||||
translate([Length-((3*Thick)+5),Thick,Height/2]){
|
||||
rotate([90,0,0]){
|
||||
$fn=6;
|
||||
cylinder(d=16,Thick/2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
translate([4,Thick+Filet,Height/2-57]){
|
||||
rotate([45,0,0]){
|
||||
cube([Length,40,40]);
|
||||
}
|
||||
}
|
||||
translate([0,-(Thick*1.46),Height/2]){
|
||||
cube([Length,Thick*2,10]);
|
||||
}
|
||||
} //Fin fixation box legs
|
||||
}
|
||||
|
||||
union(){// outbox sides decorations
|
||||
|
||||
for(i=[0:Thick:Length/4]){
|
||||
|
||||
// Ventilation holes part code submitted by Ettie - Thanks ;)
|
||||
translate([10+i,-Dec_Thick+Dec_size,1]){
|
||||
cube([Vent_width,Dec_Thick,Height/4]);
|
||||
}
|
||||
translate([(Length-10) - i,-Dec_Thick+Dec_size,1]){
|
||||
cube([Vent_width,Dec_Thick,Height/4]);
|
||||
}
|
||||
translate([(Length-10) - i,Width-Dec_size,1]){
|
||||
cube([Vent_width,Dec_Thick,Height/4]);
|
||||
}
|
||||
translate([10+i,Width-Dec_size,1]){
|
||||
cube([Vent_width,Dec_Thick,Height/4]);
|
||||
}
|
||||
|
||||
|
||||
}// fin de for
|
||||
// }
|
||||
}//fin union decoration
|
||||
}//fin difference decoration
|
||||
|
||||
|
||||
union(){ //sides holes
|
||||
$fn=50;
|
||||
translate([3*Thick+5,20,Height/2+4]){
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=2,20);
|
||||
}
|
||||
}
|
||||
translate([Length-((3*Thick)+5),20,Height/2+4]){
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=2,20);
|
||||
}
|
||||
}
|
||||
translate([3*Thick+5,Width+5,Height/2-4]){
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=2,20);
|
||||
}
|
||||
}
|
||||
translate([Length-((3*Thick)+5),Width+5,Height/2-4]){
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=2,20);
|
||||
}
|
||||
}
|
||||
}//fin de sides holes
|
||||
|
||||
}//fin de difference holes
|
||||
}// fin coque
|
||||
|
||||
////////////////////////////// - Experiment - ///////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/////////////////////// - Foot with base filet - /////////////////////////////
|
||||
module foot(FootDia,FootHole,FootHeight){
|
||||
Filet=2;
|
||||
color(Couleur1)
|
||||
translate([0,0,Filet-1.5])
|
||||
difference(){
|
||||
|
||||
difference(){
|
||||
//translate ([0,0,-Thick]){
|
||||
cylinder(d=FootDia+Filet,FootHeight-Thick, $fn=100);
|
||||
//}
|
||||
rotate_extrude($fn=100){
|
||||
translate([(FootDia+Filet*2)/2,Filet,0]){
|
||||
minkowski(){
|
||||
square(10);
|
||||
circle(Filet, $fn=100);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
cylinder(d=FootHole,FootHeight+1, $fn=100);
|
||||
}
|
||||
}// Fin module foot
|
||||
|
||||
module Feet(){
|
||||
//////////////////// - PCB only visible in the preview mode - /////////////////////
|
||||
translate([3*Thick+2,Thick+5,FootHeight+(Thick/2)-0.5]){
|
||||
|
||||
%square ([PCBLength+10,PCBWidth+10]);
|
||||
translate([PCBLength/2,PCBWidth/2,0.5]){
|
||||
color("Olive")
|
||||
%text("PCB", halign="center", valign="center", font="Arial black");
|
||||
}
|
||||
} // Fin PCB
|
||||
|
||||
|
||||
////////////////////////////// - 4 Feet - //////////////////////////////////////////
|
||||
translate([3*Thick+7,Thick+10,Thick/2]){
|
||||
foot(FootDia,FootHole,FootHeight);
|
||||
}
|
||||
translate([(3*Thick)+PCBLength+7,Thick+10,Thick/2]){
|
||||
foot(FootDia,FootHole,FootHeight);
|
||||
}
|
||||
translate([(3*Thick)+PCBLength+7,(Thick)+PCBWidth+10,Thick/2]){
|
||||
foot(FootDia,FootHole,FootHeight);
|
||||
}
|
||||
translate([3*Thick+7,(Thick)+PCBWidth+10,Thick/2]){
|
||||
foot(FootDia,FootHole,FootHeight);
|
||||
}
|
||||
|
||||
} // Fin du module Feet
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
////////////////////// <- Holes Panel Manager -> ///////////////////////
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// <- Panel ->
|
||||
module Panel(Length,Width,Thick,Filet){
|
||||
scale([0.5,1,1])
|
||||
minkowski(){
|
||||
cube([Thick,Width-(Thick*2+Filet*2+m),Height-(Thick*2+Filet*2+m)]);
|
||||
translate([0,Filet,Filet])
|
||||
rotate([0,90,0])
|
||||
cylinder(r=Filet,h=Thick, $fn=100);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// <- Circle hole ->
|
||||
// Cx=Cylinder X position | Cy=Cylinder Y position | Cdia= Cylinder dia | Cheight=Cyl height
|
||||
module CylinderHole(OnOff,Cx,Cy,Cdia){
|
||||
if(OnOff==1)
|
||||
translate([Cx,Cy,-1])
|
||||
cylinder(d=Cdia,10, $fn=50);
|
||||
}
|
||||
// <- Square hole ->
|
||||
// Sx=Square X position | Sy=Square Y position | Sl= Square Length | Sw=Square Width | Filet = Round corner
|
||||
module SquareHole(OnOff,Sx,Sy,Sl,Sw,Filet){
|
||||
if(OnOff==1)
|
||||
minkowski(){
|
||||
translate([Sx+Filet/2,Sy+Filet/2,-1])
|
||||
cube([Sl-Filet,Sw-Filet,10]);
|
||||
cylinder(d=Filet,h=10, $fn=100);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// <- Linear text panel ->
|
||||
module LText(OnOff,Tx,Ty,Font,Size,Content){
|
||||
if(OnOff==1)
|
||||
translate([Tx,Ty,Thick+.5])
|
||||
linear_extrude(height = 0.5){
|
||||
text(Content, size=Size, font=Font);
|
||||
}
|
||||
}
|
||||
// <- Circular text panel->
|
||||
module CText(OnOff,Tx,Ty,Font,Size,TxtRadius,Angl,Turn,Content){
|
||||
if(OnOff==1) {
|
||||
Angle = -Angl / len(Content);
|
||||
translate([Tx,Ty,Thick+.5])
|
||||
for (i= [0:len(Content)-1] ){
|
||||
rotate([0,0,i*Angle+90+Turn])
|
||||
translate([0,TxtRadius,0]) {
|
||||
linear_extrude(height = 0.5){
|
||||
text(Content[i], font = Font, size = Size, valign ="baseline", halign ="center");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
////////////////////// <- New module Panel -> //////////////////////
|
||||
module FPanL(){
|
||||
difference(){
|
||||
color(Couleur2)
|
||||
Panel(Length,Width,Thick,Filet);
|
||||
|
||||
|
||||
rotate([90,0,90]){
|
||||
color(Couleur2){
|
||||
// <- Cutting shapes from here ->
|
||||
SquareHole (1,20,20,15,10,1); //(On/Off, Xpos,Ypos,Length,Width,Filet)
|
||||
SquareHole (1,40,20,15,10,1);
|
||||
SquareHole (1,60,20,15,10,1);
|
||||
CylinderHole(1,27,40,8); //(On/Off, Xpos, Ypos, Diameter)
|
||||
CylinderHole(1,47,40,8);
|
||||
CylinderHole(1,67,40,8);
|
||||
SquareHole (1,20,50,80,30,3);
|
||||
CylinderHole(1,93,30,10);
|
||||
SquareHole (1,120,20,30,60,3);
|
||||
// <- To here ->
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
color(Couleur1){
|
||||
translate ([-.5,0,0])
|
||||
rotate([90,0,90]){
|
||||
// <- Adding text from here ->
|
||||
LText(1,20,83,"Arial Black",4,"Digital Screen");//(On/Off, Xpos, Ypos, "Font", Size, "Text")
|
||||
LText(1,120,83,"Arial Black",4,"Level");
|
||||
LText(1,20,11,"Arial Black",6," 1 2 3");
|
||||
CText(1,93,29,"Arial Black",4,10,180,0,"1 . 2 . 3 . 4 . 5 . 6");//(On/Off, Xpos, Ypos, "Font", Size, Diameter, Arc(Deg), Starting Angle(Deg),"Text")
|
||||
// <- To here ->
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////// <- Main part -> /////////////////////////
|
||||
|
||||
if(TShell==1)
|
||||
// Coque haut - Top Shell
|
||||
color( Couleur1,1){
|
||||
translate([0,Width,Height+0.2]){
|
||||
rotate([0,180,180]){
|
||||
Coque();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(BShell==1)
|
||||
// Coque bas - Bottom shell
|
||||
color(Couleur1){
|
||||
Coque();
|
||||
}
|
||||
|
||||
// Pied support PCB - PCB feet
|
||||
if (PCBFeet==1)
|
||||
// Feet
|
||||
translate([PCBPosX,PCBPosY,0]){
|
||||
Feet();
|
||||
}
|
||||
|
||||
// Panneau avant - Front panel <<<<<< Text and holes only on this one.
|
||||
//rotate([0,-90,-90])
|
||||
if(FPanL==1)
|
||||
translate([Length-(Thick*2+m/2),Thick+m/2,Thick+m/2])
|
||||
FPanL();
|
||||
|
||||
//Panneau arrière - Back panel
|
||||
if(BPanL==1)
|
||||
color(Couleur2)
|
||||
translate([Thick+m/2,Thick+m/2,Thick+m/2])
|
||||
Panel(Length,Width,Thick,Filet);
|
BIN
images/5c2528d7dc69dc743380f6c7ddb887d5_preview_featured.jpg
Normal file
BIN
images/5c2528d7dc69dc743380f6c7ddb887d5_preview_featured.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 191 KiB |
BIN
images/74d1fa52020ccdc66438833ef1dfb658_preview_featured.jpg
Normal file
BIN
images/74d1fa52020ccdc66438833ef1dfb658_preview_featured.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 265 KiB |
BIN
images/7efb17c56cb85ef8a36d71741ac642c0_preview_featured.jpg
Normal file
BIN
images/7efb17c56cb85ef8a36d71741ac642c0_preview_featured.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 188 KiB |
BIN
images/9b60c601c6d0bcd0837e3c9c51fbf55f_preview_featured.jpg
Normal file
BIN
images/9b60c601c6d0bcd0837e3c9c51fbf55f_preview_featured.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 276 KiB |
BIN
images/bd4fbbd9aa4da913eb2d5eac3920107e_preview_featured.jpg
Normal file
BIN
images/bd4fbbd9aa4da913eb2d5eac3920107e_preview_featured.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 144 KiB |
BIN
images/dfdf5ceb28a5a7c63daad8bfc72fc554_preview_featured.jpg
Normal file
BIN
images/dfdf5ceb28a5a7c63daad8bfc72fc554_preview_featured.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 238 KiB |
Loading…
Reference in New Issue
Block a user