verzameling oude spullen
This commit is contained in:
commit
7ed9544283
119 changed files with 1288059 additions and 0 deletions
47
arduino/SafetyBoard
Normal file
47
arduino/SafetyBoard
Normal file
|
@ -0,0 +1,47 @@
|
|||
|
||||
|
||||
void pulseCounter(); //
|
||||
void setupFlowMeter(); //
|
||||
void checkFlow() ;
|
||||
|
||||
void getInfo(); //here we get info like temp etc
|
||||
|
||||
void checkMenu();
|
||||
void pwdKeypadEvent();
|
||||
void menuKeypadEvent();
|
||||
|
||||
int laserEnablePin = 50;
|
||||
int waterCoolerPin = 51;
|
||||
int airAssistPin = 52;
|
||||
int ventilationPin = 53;
|
||||
int lichtPin = 49;
|
||||
//int lichtPin = 48; spare
|
||||
int testEnablePin = 47;
|
||||
int potMeterEnable = 46;
|
||||
|
||||
|
||||
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
|
||||
int passwordCorrect = false;
|
||||
Password password = Password( "123456" );
|
||||
const byte ROWS = 4; // Four rows
|
||||
const byte COLS = 3; // Three columns
|
||||
|
||||
char keys[ROWS][COLS] = { // Define the Keymap
|
||||
{ '1','2','3' } ,
|
||||
{ '4','5','6' } ,
|
||||
{ '7','8','9' } ,
|
||||
{ '*','0','#' } };
|
||||
|
||||
byte rowPins[ROWS] = { 15, 20, 17, 19 }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
|
||||
byte colPins[COLS] = { 18, 14, 16 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
|
||||
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Create the Keypad
|
||||
float tempIn;
|
||||
float tempOut;
|
||||
int tempPinIn = 0;
|
||||
int tempPinOut = 0;
|
||||
volatile int pulseCount; //measuring the rising edges of the signal
|
||||
int Calc;
|
||||
int hallsensor = 2; //The pin location of the sensor
|
||||
unsigned long loopTime;
|
||||
|
||||
|
BIN
arduino/SafetyBoard20140216.zip
Normal file
BIN
arduino/SafetyBoard20140216.zip
Normal file
Binary file not shown.
41
arduino/SafetyBoard3/SafetyBoardFinal.ino
Normal file
41
arduino/SafetyBoard3/SafetyBoardFinal.ino
Normal file
|
@ -0,0 +1,41 @@
|
|||
|
||||
#include <LiquidCrystal.h>
|
||||
#include <Keypad.h>
|
||||
#include <Password.h>
|
||||
#include "safetyboard.h";
|
||||
|
||||
void setup() {
|
||||
pinMode(airAssistPin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(ventilationPin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(waterCoolerPin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(laserEnablePin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(lichtPin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(testEnablePin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(potMeterEnable, OUTPUT); // sets the digital pin as output
|
||||
digitalWrite(airAssistPin, LOW); // sets the airAssist on
|
||||
digitalWrite(ventilationPin, LOW); // sets the air ventilation on
|
||||
digitalWrite(waterCoolerPin, LOW); // sets the watercooler on
|
||||
digitalWrite(laserEnablePin, LOW); // sets the laserEnable on
|
||||
digitalWrite(lichtPin, HIGH); // sets the licht pin (inverted) on
|
||||
digitalWrite(testEnablePin, LOW); // sets the test enable pin ()
|
||||
digitalWrite(potMeterEnable, LOW); // sets the watercooler fans on
|
||||
Serial.begin(9600);
|
||||
lcd.begin(16, 4); // set up the LCD's number of columns and rows:
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Bitlair lasercutter"); // Print a message to the LCD.
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Password?");
|
||||
lcd.setCursor(0, 2);
|
||||
lcd.print("Press * to confirm");
|
||||
kpd.addEventListener(pwdKeypadEvent); //add an event listener for this keypad
|
||||
}
|
||||
void loop() {
|
||||
if (passwordCorrect) {
|
||||
checkMenu();
|
||||
checkFlow();
|
||||
} else {
|
||||
kpd.getKey();
|
||||
}
|
||||
}
|
||||
|
||||
|
30
arduino/SafetyBoard3/flowMeter.ino
Normal file
30
arduino/SafetyBoard3/flowMeter.ino
Normal file
|
@ -0,0 +1,30 @@
|
|||
//*******************************************************
|
||||
// FlowMeter
|
||||
//*******************************************************
|
||||
void setupFlowMeter() {
|
||||
pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
|
||||
attachInterrupt(0, pulseCounter, RISING); //and the interrupt is attached
|
||||
loopTime = millis();
|
||||
sei(); //enable interupts
|
||||
}
|
||||
void pulseCounter() { //This is the function that the interupt calls
|
||||
pulseCount++; //This function measures the rising and falling edge of the hall effect sensors signal
|
||||
}
|
||||
void checkFlow() {
|
||||
if(millis() >= (loopTime + 2000)){
|
||||
Calc = (pulseCount * 60 / (7.5 * 2)); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour
|
||||
Serial.print (Calc, DEC); //Prints the number calculated above
|
||||
Serial.print (" L/hour\r\n"); //Prints "L/hour" and returns a new line
|
||||
lcd.setCursor(18, 3);
|
||||
lcd.print(" "); //Prints the number calculated above
|
||||
//lcd.setCursor(15, 1);
|
||||
//lcd.print(millis()/1000);
|
||||
lcd.setCursor(11, 3);
|
||||
lcd.print(Calc, DEC); //Prints the number calculated above
|
||||
lcd.print (" L/h "); //Prints "L/hour" a
|
||||
//lcd.print(pulseCount);
|
||||
//lcd.print (" "); //Prints "L/hour" a
|
||||
pulseCount = 0;
|
||||
loopTime = millis();; // Updates loopTime
|
||||
}
|
||||
}
|
78
arduino/SafetyBoard3/menu.ino
Normal file
78
arduino/SafetyBoard3/menu.ino
Normal file
|
@ -0,0 +1,78 @@
|
|||
//******************************************************
|
||||
// M
|
||||
//******************************************************
|
||||
void getInfo() {
|
||||
//HERE WE WILL GET THE INFO LIKE TEMP etc
|
||||
}
|
||||
void checkMenu() {
|
||||
lcd.setCursor(0,0);
|
||||
lcd.print("press * for info ");
|
||||
lcd.setCursor(0,1);
|
||||
lcd.print("1 air-assist 2 vent");
|
||||
lcd.setCursor(0,2);
|
||||
lcd.print("3 watercool 4 laser");
|
||||
lcd.setCursor(0,3);
|
||||
lcd.print("0 off 9 on");
|
||||
|
||||
char key = kpd.getKey();
|
||||
}
|
||||
void menuKeypadEvent(KeypadEvent eKey) {
|
||||
switch (kpd.getState()){
|
||||
case PRESSED:
|
||||
switch (eKey){
|
||||
case '*':
|
||||
getInfo();
|
||||
break;
|
||||
case '#':
|
||||
password.reset();
|
||||
break;
|
||||
case '0':
|
||||
digitalWrite(airAssistPin, LOW);
|
||||
digitalWrite(ventilationPin, LOW);
|
||||
digitalWrite(waterCoolerPin, LOW);
|
||||
digitalWrite(laserEnablePin, LOW);
|
||||
digitalWrite(lichtPin, HIGH); // sets the licht pin (inverted) on
|
||||
digitalWrite(testEnablePin, LOW); // sets the test enable pin ()
|
||||
digitalWrite(potMeterEnable, LOW); // sets the watercooler fans on
|
||||
break;
|
||||
case '9':
|
||||
digitalWrite(airAssistPin, HIGH);
|
||||
digitalWrite(ventilationPin, HIGH);
|
||||
digitalWrite(waterCoolerPin, HIGH);
|
||||
digitalWrite(laserEnablePin, HIGH);
|
||||
digitalWrite(lichtPin, LOW); // sets the licht pin (inverted) on
|
||||
// digitalWrite(testEnablePin, LOW); // sets the test enable pin ()
|
||||
// digitalWrite(potMeterEnable, LOW); // sets the watercooler fans on
|
||||
|
||||
break;
|
||||
case '1':
|
||||
digitalWrite(airAssistPin, !digitalRead(airAssistPin));
|
||||
break;
|
||||
case '2':
|
||||
digitalWrite(ventilationPin, !digitalRead(ventilationPin));
|
||||
break;
|
||||
case '3':
|
||||
digitalWrite(waterCoolerPin, !digitalRead(waterCoolerPin));
|
||||
break;
|
||||
case '4':
|
||||
digitalWrite(laserEnablePin, !digitalRead(laserEnablePin));
|
||||
break;
|
||||
case '5':
|
||||
digitalWrite(lichtPin, !digitalRead(lichtPin));
|
||||
break;
|
||||
case '6':
|
||||
digitalWrite(testEnablePin, !digitalRead(testEnablePin));
|
||||
break;
|
||||
case '7':
|
||||
digitalWrite(potMeterEnable, !digitalRead(potMeterEnable));
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
default:
|
||||
password.append(eKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
1
arduino/SafetyBoard3/password.h
Normal file
1
arduino/SafetyBoard3/password.h
Normal file
|
@ -0,0 +1 @@
|
|||
//
|
47
arduino/SafetyBoard3/password.ino
Normal file
47
arduino/SafetyBoard3/password.ino
Normal file
|
@ -0,0 +1,47 @@
|
|||
//#include "safetyboard.h";
|
||||
//******************************************************
|
||||
// Password related stuff
|
||||
//******************************************************
|
||||
//take care of some special events
|
||||
void pwdKeypadEvent(KeypadEvent eKey) {
|
||||
switch (kpd.getState()){
|
||||
case PRESSED:
|
||||
Serial.print("Pressed: ");
|
||||
Serial.println(eKey);
|
||||
lcd.setCursor(0, 4);
|
||||
lcd.print(" "); //empty "Wrong"
|
||||
switch (eKey){
|
||||
case '*':
|
||||
checkPassword();
|
||||
break;
|
||||
case '#':
|
||||
password.reset();
|
||||
break;
|
||||
default:
|
||||
password.append(eKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
void checkPassword() {
|
||||
if (password.evaluate()) {
|
||||
Serial.println("Success");
|
||||
passwordCorrect = true;
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Menu"); // Print a message to the LCD.
|
||||
setupFlowMeter();
|
||||
digitalWrite(airAssistPin, HIGH); // sets the airAssist on
|
||||
digitalWrite(ventilationPin, HIGH); // sets the air ventilation on
|
||||
digitalWrite(waterCoolerPin, HIGH); // sets the watercooler fans on
|
||||
digitalWrite(laserEnablePin, HIGH); // sets the watercooler fans on
|
||||
|
||||
|
||||
|
||||
kpd.addEventListener(menuKeypadEvent); //add an event listener for this keypad
|
||||
} else {
|
||||
Serial.println("Wrong");
|
||||
password.reset();
|
||||
lcd.setCursor(0, 4);
|
||||
lcd.print("Wrong");
|
||||
}
|
||||
}
|
47
arduino/SafetyBoard3/safetyboard.h
Normal file
47
arduino/SafetyBoard3/safetyboard.h
Normal file
|
@ -0,0 +1,47 @@
|
|||
|
||||
|
||||
void pulseCounter(); //
|
||||
void setupFlowMeter(); //
|
||||
void checkFlow() ;
|
||||
|
||||
void getInfo(); //here we get info like temp etc
|
||||
|
||||
void checkMenu();
|
||||
void pwdKeypadEvent();
|
||||
void menuKeypadEvent();
|
||||
|
||||
int laserEnablePin = 50;
|
||||
int waterCoolerPin = 51;
|
||||
int airAssistPin = 52;
|
||||
int ventilationPin = 53;
|
||||
int lichtPin = 49;
|
||||
//int lichtPin = 48; spare
|
||||
int testEnablePin = 47;
|
||||
int potMeterEnable = 46;
|
||||
|
||||
|
||||
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
|
||||
int passwordCorrect = false;
|
||||
Password password = Password( "123456" );
|
||||
const byte ROWS = 4; // Four rows
|
||||
const byte COLS = 3; // Three columns
|
||||
|
||||
char keys[ROWS][COLS] = { // Define the Keymap
|
||||
{ '1','2','3' } ,
|
||||
{ '4','5','6' } ,
|
||||
{ '7','8','9' } ,
|
||||
{ '*','0','#' } };
|
||||
|
||||
byte rowPins[ROWS] = { 15, 20, 17, 19 }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
|
||||
byte colPins[COLS] = { 18, 14, 16 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
|
||||
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Create the Keypad
|
||||
float tempIn;
|
||||
float tempOut;
|
||||
int tempPinIn = 0;
|
||||
int tempPinOut = 0;
|
||||
volatile int pulseCount; //measuring the rising edges of the signal
|
||||
int Calc;
|
||||
int hallsensor = 2; //The pin location of the sensor
|
||||
unsigned long loopTime;
|
||||
|
||||
|
BIN
arduino/SafetyBoard4/.DS_Store
vendored
Normal file
BIN
arduino/SafetyBoard4/.DS_Store
vendored
Normal file
Binary file not shown.
20
arduino/SafetyBoard4/flowMeter.ino
Normal file
20
arduino/SafetyBoard4/flowMeter.ino
Normal file
|
@ -0,0 +1,20 @@
|
|||
//*******************************************************
|
||||
// FlowMeter
|
||||
//*******************************************************
|
||||
void setupFlowMeter() {
|
||||
pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
|
||||
attachInterrupt(0, pulseCounter, RISING); //and the interrupt is attached
|
||||
loopTime = millis();
|
||||
sei(); //enable interupts
|
||||
}
|
||||
void pulseCounter() { //This is the function that the interupt calls
|
||||
pulseCount++; //This function measures the rising and falling edge of the hall effect sensors signal
|
||||
}
|
||||
void checkFlow() {
|
||||
if(millis() >= (loopTime + 2000)){
|
||||
Calc = (pulseCount * 60 / (7.5 * 2)); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour
|
||||
flowMenu();
|
||||
pulseCount = 0;
|
||||
loopTime = millis();; // Updates loopTime
|
||||
}
|
||||
}
|
BIN
arduino/SafetyBoard4/keypad.zip
Normal file
BIN
arduino/SafetyBoard4/keypad.zip
Normal file
Binary file not shown.
106
arduino/SafetyBoard4/menu.ino
Normal file
106
arduino/SafetyBoard4/menu.ino
Normal file
|
@ -0,0 +1,106 @@
|
|||
void firstMenu() {
|
||||
lcd.begin(20, 4); // set up the LCD's number of columns and rows:
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("Manfreds lasercutter"); // Print a message to the LCD.
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Password?");
|
||||
lcd.setCursor(0, 2);
|
||||
lcd.print("Press * to confirm");
|
||||
}
|
||||
void menuPasswordReset(){
|
||||
lcd.setCursor(0, 4);
|
||||
lcd.print(" "); //empty "Wrong"
|
||||
}
|
||||
void menuPasswordWrong(){
|
||||
lcd.setCursor(0, 3);
|
||||
lcd.print("Wrong");
|
||||
}
|
||||
void checkMenu() {
|
||||
if (menuType==1) {
|
||||
lcd.setCursor(0,0);
|
||||
lcd.print("Manfreds lasercutter");
|
||||
lcd.setCursor(0,1);
|
||||
lcd.print("press * for choices ");
|
||||
} else {
|
||||
lcd.setCursor(0,0);
|
||||
lcd.print("press * for back ");
|
||||
lcd.setCursor(0,1);
|
||||
lcd.print("1 air-assist 2 vent ");
|
||||
lcd.setCursor(0,2);
|
||||
lcd.print("3 watercool 4 laser ");
|
||||
lcd.setCursor(0,3);
|
||||
lcd.print("6 testmode 0 off 9 on ");
|
||||
}
|
||||
char key = kpd.getKey();
|
||||
}
|
||||
void flowMenu(){
|
||||
if (menuType==1) {
|
||||
lcd.setCursor(0, 3);
|
||||
lcd.print(" Water");
|
||||
lcd.setCursor(11, 3);
|
||||
lcd.print(Calc, DEC); //Prints the number calculated abov
|
||||
lcd.print (" L/h "); //Prints "L/hour" a
|
||||
}
|
||||
}
|
||||
void menuKeypadEvent(KeypadEvent eKey) {
|
||||
switch (kpd.getState()){
|
||||
case PRESSED:
|
||||
switch (eKey){
|
||||
case '*':
|
||||
if (menuType==1) {
|
||||
menuType=2;
|
||||
lcd.clear();
|
||||
} else {
|
||||
menuType = 1;
|
||||
lcd.clear();
|
||||
}
|
||||
break;
|
||||
case '#':
|
||||
password.reset();
|
||||
break;
|
||||
case '9':
|
||||
digitalWrite(airAssistPin, LOW);
|
||||
digitalWrite(ventilationPin, LOW);
|
||||
digitalWrite(waterCoolerPin, LOW);
|
||||
digitalWrite(laserEnablePin, LOW);
|
||||
digitalWrite(lichtPin, LOW); // sets the licht pin (inverted) on
|
||||
digitalWrite(testEnablePin, HIGH); // sets the test enable pin ()
|
||||
digitalWrite(potMeterEnable, HIGH); // sets the watercooler fans on
|
||||
break;
|
||||
case '0':
|
||||
digitalWrite(airAssistPin, HIGH);
|
||||
digitalWrite(ventilationPin, HIGH);
|
||||
digitalWrite(waterCoolerPin, HIGH);
|
||||
digitalWrite(laserEnablePin, HIGH);
|
||||
digitalWrite(lichtPin, HIGH); // sets the licht pin (inverted) on
|
||||
digitalWrite(testEnablePin, HIGH); // sets the test enable pin ()
|
||||
digitalWrite(potMeterEnable, HIGH); // sets the watercooler fans off
|
||||
|
||||
break;
|
||||
case '1':
|
||||
digitalWrite(airAssistPin, !digitalRead(airAssistPin));
|
||||
break;
|
||||
case '2':
|
||||
digitalWrite(ventilationPin, !digitalRead(ventilationPin));
|
||||
break;
|
||||
case '3':
|
||||
digitalWrite(waterCoolerPin, !digitalRead(waterCoolerPin));
|
||||
break;
|
||||
case '4':
|
||||
digitalWrite(laserEnablePin, !digitalRead(laserEnablePin));
|
||||
break;
|
||||
case '5':
|
||||
digitalWrite(lichtPin, !digitalRead(lichtPin));
|
||||
break;
|
||||
case '6':
|
||||
digitalWrite(testEnablePin, !digitalRead(testEnablePin));
|
||||
digitalWrite(potMeterEnable, !digitalRead(potMeterEnable));
|
||||
break;
|
||||
case '7':
|
||||
break;
|
||||
default:
|
||||
password.append(eKey);
|
||||
}
|
||||
}
|
||||
}
|
41
arduino/SafetyBoard4/password.ino
Normal file
41
arduino/SafetyBoard4/password.ino
Normal file
|
@ -0,0 +1,41 @@
|
|||
//#include "safetyboard.h";
|
||||
//******************************************************
|
||||
// Password related stuff
|
||||
//******************************************************
|
||||
//take care of some special events
|
||||
void pwdKeypadEvent(KeypadEvent eKey) {
|
||||
switch (kpd.getState()){
|
||||
case PRESSED:
|
||||
menuPasswordReset();
|
||||
switch (eKey){
|
||||
case '*':
|
||||
checkPassword();
|
||||
break;
|
||||
case '#':
|
||||
password.reset();
|
||||
break;
|
||||
default:
|
||||
password.append(eKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
void checkPassword() {
|
||||
if (password.evaluate()) {
|
||||
Serial.println("Success");
|
||||
lcd.clear();
|
||||
passwordCorrect = true;
|
||||
setupFlowMeter();
|
||||
digitalWrite(airAssistPin, LOW); // sets the airAssist on
|
||||
digitalWrite(ventilationPin, LOW); // sets the air ventilation on
|
||||
digitalWrite(waterCoolerPin, LOW); // sets the watercooler fans on
|
||||
digitalWrite(laserEnablePin, LOW); // sets the watercooler fans on
|
||||
digitalWrite(lichtPin, LOW); // sets the licht pin (inverted) on
|
||||
digitalWrite(powerWH, LOW); // sets the waterpump and high voltage on
|
||||
menuType = 1; // inportant information
|
||||
kpd.addEventListener(menuKeypadEvent); //add an event listener for this keypad
|
||||
} else {
|
||||
Serial.println("Wrong");
|
||||
password.reset();
|
||||
menuPasswordWrong();
|
||||
}
|
||||
}
|
46
arduino/SafetyBoard4/safetyboard.h
Normal file
46
arduino/SafetyBoard4/safetyboard.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
void pulseCounter(); //
|
||||
void setupFlowMeter(); //
|
||||
void checkFlow() ;
|
||||
void flowMenu();
|
||||
void getInfo(); //here we get info like temp etc
|
||||
void checkMenu();
|
||||
void firstMenu();
|
||||
void pwdKeypadEvent();
|
||||
void menuKeypadEvent();
|
||||
void choiceMenu() ;
|
||||
int menuType = 0;
|
||||
|
||||
int potMeterEnable = 46;
|
||||
int testEnablePin = 47;
|
||||
int lichtPin = 49;
|
||||
int laserEnablePin = 50;
|
||||
int waterCoolerPin = 51;
|
||||
int airAssistPin = 52;
|
||||
int ventilationPin = 53;
|
||||
int powerWH = 48;
|
||||
|
||||
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
|
||||
int passwordCorrect = false;
|
||||
Password password = Password( "123456" );
|
||||
const byte ROWS = 4; // Four rows
|
||||
const byte COLS = 3; // Three columns
|
||||
|
||||
char keys[ROWS][COLS] = { // Define the Keymap
|
||||
{ '1','2','3' } ,
|
||||
{ '4','5','6' } ,
|
||||
{ '7','8','9' } ,
|
||||
{ '*','0','#' } };
|
||||
|
||||
byte rowPins[ROWS] = { 15, 20, 17, 19 }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
|
||||
byte colPins[COLS] = { 18, 14, 16 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
|
||||
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Create the Keypad
|
||||
float tempIn;
|
||||
float tempOut;
|
||||
int tempPinIn = 0;
|
||||
int tempPinOut = 0;
|
||||
volatile int pulseCount; //measuring the rising edges of the signal
|
||||
int Calc;
|
||||
int hallsensor = 2; //The pin location of the sensor
|
||||
unsigned long loopTime;
|
||||
|
||||
|
36
arduino/SafetyBoard4/safetyboard.ino
Normal file
36
arduino/SafetyBoard4/safetyboard.ino
Normal file
|
@ -0,0 +1,36 @@
|
|||
|
||||
#include <LiquidCrystal.h>
|
||||
#include <Keypad.h>
|
||||
#include <Password.h>
|
||||
#include "safetyboard.h"
|
||||
|
||||
void setup() {
|
||||
pinMode(airAssistPin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(ventilationPin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(waterCoolerPin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(laserEnablePin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(lichtPin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(testEnablePin, OUTPUT); // sets the digital pin as output
|
||||
pinMode(potMeterEnable, OUTPUT); // sets the digital pin as output
|
||||
pinMode(powerWH, OUTPUT); // sets the digital pin as output
|
||||
|
||||
digitalWrite(airAssistPin, HIGH); // sets the airAssist off
|
||||
digitalWrite(ventilationPin, HIGH); // sets the air ventilation off
|
||||
digitalWrite(waterCoolerPin, HIGH); // sets the watercooler off
|
||||
digitalWrite(laserEnablePin, HIGH); // sets the laserEnable off
|
||||
digitalWrite(lichtPin, HIGH); // sets the licht pin (inverted) off
|
||||
digitalWrite(testEnablePin, HIGH); // sets the test enable pin () off
|
||||
digitalWrite(potMeterEnable, HIGH); // sets the watercooler fans off
|
||||
digitalWrite(powerWH, HIGH); // sets the waterpump and high voltage off
|
||||
Serial.begin(9600);
|
||||
firstMenu();
|
||||
kpd.addEventListener(pwdKeypadEvent); //add an event listener for this keypad
|
||||
}
|
||||
void loop() {
|
||||
if (passwordCorrect) {
|
||||
checkMenu();
|
||||
checkFlow();
|
||||
} else {
|
||||
kpd.getKey();
|
||||
}
|
||||
}
|
BIN
arduino/SafetyBoardFinal.zip
Normal file
BIN
arduino/SafetyBoardFinal.zip
Normal file
Binary file not shown.
BIN
arduino/Safetyboard2/safetyboard2.fzz
Normal file
BIN
arduino/Safetyboard2/safetyboard2.fzz
Normal file
Binary file not shown.
BIN
arduino/safety/Keypad.zip
Normal file
BIN
arduino/safety/Keypad.zip
Normal file
Binary file not shown.
BIN
arduino/safety/Password.zip
Normal file
BIN
arduino/safety/Password.zip
Normal file
Binary file not shown.
1996
arduino/safety/klepsafetyswitchplaat.dxf
Normal file
1996
arduino/safety/klepsafetyswitchplaat.dxf
Normal file
File diff suppressed because it is too large
Load diff
104
arduino/safety/menu.txt
Normal file
104
arduino/safety/menu.txt
Normal file
|
@ -0,0 +1,104 @@
|
|||
password
|
||||
password set = false
|
||||
msg "Bitlair Lasercutter"
|
||||
msg "Bitlair Lasercutter"
|
||||
information page
|
||||
* for menu
|
||||
Ready to burn? status
|
||||
watertemp
|
||||
tube in
|
||||
tube out
|
||||
|
||||
menu
|
||||
manual control
|
||||
details
|
||||
waterflow
|
||||
high voltage power status
|
||||
airflow status
|
||||
status laser enable (emergency button)
|
||||
watertemp in tank
|
||||
high voltage power
|
||||
off/on (default on)
|
||||
airflow
|
||||
off/on (default on)
|
||||
|
||||
checks -
|
||||
waterflow
|
||||
watertemp-tube-in > 50° => warning
|
||||
watertemp-tube-in > 60° => turn off
|
||||
|
||||
|
||||
|
||||
pins (renumber to better pins)
|
||||
D05 lcd data1
|
||||
D04 lcd data2
|
||||
D03 lcd data3
|
||||
D02 lcd data4
|
||||
D11 lcd Register Select (RS). RS=0: Command, RS=1: Data
|
||||
D12 lcd Clock (Enable). Falling edge triggered
|
||||
VCC lcd Vcc
|
||||
GND lcd gnd
|
||||
d15 keyb row 1
|
||||
d20 keyb row 2
|
||||
d19 keyb row 3
|
||||
d17 keyb row 4
|
||||
d16 keyb col 1
|
||||
d14 keyb col 2
|
||||
d18 keyb col 3
|
||||
A01 watertemp-tube-in
|
||||
A02 watertemp-tube-in
|
||||
|
||||
/*****************************************/
|
||||
float temp;
|
||||
int tempPin = 0;
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
temp = analogRead(tempPin);
|
||||
temp = temp * 0.48828125;
|
||||
Serial.print("TEMPRATURE = ");
|
||||
Serial.print(temp);
|
||||
Serial.print("*C");
|
||||
Serial.println();
|
||||
delay(1000);
|
||||
}
|
||||
/*******************************************/
|
||||
// reading liquid flow rate using Seeeduino and Water Flow Sensor from Seeedstudio.com
|
||||
// Code adapted by Charles Gantt from PC Fan RPM code written by Crenn @thebestcasescenario.com
|
||||
// http:/themakersworkbench.com http://thebestcasescenario.com http://seeedstudio.com
|
||||
|
||||
volatile int NbTopsFan; //measuring the rising edges of the signal
|
||||
int Calc;
|
||||
int hallsensor = 2; //The pin location of the sensor
|
||||
|
||||
void rpm () //This is the function that the interupt calls
|
||||
{
|
||||
NbTopsFan++; //This function measures the rising and falling edge of the hall effect sensors signal
|
||||
}
|
||||
// The setup() method runs once, when the sketch starts
|
||||
void setup() //
|
||||
{
|
||||
pinMode(hallsensor, INPUT); //initializes digital pin 2 as an input
|
||||
Serial.begin(9600); //This is the setup function where the serial port is
|
||||
|
||||
initialised,
|
||||
attachInterrupt(0, rpm, RISING); //and the interrupt is attached
|
||||
}
|
||||
// the loop() method runs over and over again,
|
||||
// as long as the Arduino has power
|
||||
void loop ()
|
||||
{
|
||||
NbTopsFan = 0; //Set NbTops to 0 ready for calculations
|
||||
sei(); //Enables interrupts
|
||||
delay (1000); //Wait 1 second
|
||||
cli(); //Disable interrupts
|
||||
Calc = (NbTopsFan * 60 / 7.5); //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour
|
||||
Serial.print (Calc, DEC); //Prints the number calculated above
|
||||
Serial.print (" L/hour\r\n"); //Prints "L/hour" and returns a new line
|
||||
}
|
||||
|
BIN
arduino/safety/now.mjpg
Normal file
BIN
arduino/safety/now.mjpg
Normal file
Binary file not shown.
1970
arduino/safety/scharnierafstandplaat.dxf
Normal file
1970
arduino/safety/scharnierafstandplaat.dxf
Normal file
File diff suppressed because it is too large
Load diff
2234
beplating/TopBack.dxf
Normal file
2234
beplating/TopBack.dxf
Normal file
File diff suppressed because it is too large
Load diff
2962
beplating/TopCover.dxf
Normal file
2962
beplating/TopCover.dxf
Normal file
File diff suppressed because it is too large
Load diff
1970
beplating/TopLeft.dxf
Normal file
1970
beplating/TopLeft.dxf
Normal file
File diff suppressed because it is too large
Load diff
2114
beplating/TopRightBack.dxf
Normal file
2114
beplating/TopRightBack.dxf
Normal file
File diff suppressed because it is too large
Load diff
5074
beplating/TopRightFront.dxf
Normal file
5074
beplating/TopRightFront.dxf
Normal file
File diff suppressed because it is too large
Load diff
5830
beplating/TopRightFrontPanel.dxf
Normal file
5830
beplating/TopRightFrontPanel.dxf
Normal file
File diff suppressed because it is too large
Load diff
BIN
beplating/beplating.ods
Normal file
BIN
beplating/beplating.ods
Normal file
Binary file not shown.
975
beplating/frontview.svg
Normal file
975
beplating/frontview.svg
Normal file
File diff suppressed because one or more lines are too long
202
beplating/lasercuttermount/ISOThread_20120823.scad
Normal file
202
beplating/lasercuttermount/ISOThread_20120823.scad
Normal file
|
@ -0,0 +1,202 @@
|
|||
// ISO Metric Thread Implementation
|
||||
// Trevor Moseley
|
||||
// 23/08/2012
|
||||
|
||||
// For thread dimensions see
|
||||
// http://en.wikipedia.org/wiki/File:ISO_and_UTS_Thread_Dimensions.svg
|
||||
|
||||
//hex_nut(6);
|
||||
//hex_nut(8);
|
||||
//hex_nut(10);
|
||||
|
||||
//hex_bolt(6,12);
|
||||
//hex_bolt(8,16);
|
||||
//hex_bolt(10,16);
|
||||
//hex_bolt(12,24);
|
||||
|
||||
//thread_out(8,16);
|
||||
|
||||
defQ = 32;
|
||||
|
||||
// function for thread quality
|
||||
function get_thr_qual(dia) = lookup(dia, [
|
||||
[5,10],[6,12],[7,14],[8,16],[10,20],[12,12],[14,28],[16,32],[18,36],[20,40],[22,44],[24,48],[27,54],[30,60],[33,66],[36,72],[39,78],[42,84],[45,90],[48,96],[52,104],[56,112],[60,120],[64,128],[78,156]]);
|
||||
|
||||
// function for shaft quality
|
||||
function get_sh_qual(dia) = lookup(dia, [
|
||||
[5,10],[6,12],[7,14],[8,16],[10,20],[12,24],[14,28],[16,32],[18,36],[20,40],[22,44],[24,48],[27,54],[30,60],[33,66],[36,72],[39,78],[42,84],[45,90],[48,96],[52,104],[56,112],[60,120],[64,128],[78,156]]);
|
||||
|
||||
module hex_nut(dia)
|
||||
{
|
||||
$fn = get_sh_qual(dia);
|
||||
thr = get_thr_qual(dia);
|
||||
hi = hex_nut_hi(dia);
|
||||
difference()
|
||||
{
|
||||
cylinder(r = hex_nut_dia(dia)/2,h = hi, $fn=6);
|
||||
translate([0,0,-0.1]) cylinder(r = dia/2, h =hi + 0.2);
|
||||
}
|
||||
translate([0,0,0.1]) thread_in(dia,hi-0.2,thr);
|
||||
}
|
||||
|
||||
module hex_bolt(dia,hi)
|
||||
{
|
||||
$fn = get_sh_qual(dia);
|
||||
thr = get_thr_qual(dia);
|
||||
hhi = hex_bolt_hi(dia);
|
||||
cylinder(r = hex_bolt_dia(dia)/2,h = hhi, $fn=6);
|
||||
translate([0,0,hhi-0.1]) thread_out(dia,hi+0.1,thr);
|
||||
}
|
||||
|
||||
// function for thread pitch
|
||||
function get_coarse_pitch(dia) = lookup(dia, [
|
||||
[1,0.25],[1.2,0.25],[1.4,0.3],[1.6,0.35],[1.8,0.35],[2,0.4],[2.5,0.45],[3,0.5],[3.5,0.6],[4,0.7],[5,0.8],[6,1],[7,1],[8,1.25],[10,1.5],[12,1.75],[14,2],[16,2],[18,2.5],[20,2.5],[22,2.5],[24,3],[27,3],[30,3.5],[33,3.5],[36,4],[39,4],[42,4.5],[45,4.5],[48,5],[52,5],[56,5.5],[60,5.5],[64,6],[78,5]]);
|
||||
|
||||
// function for hex nut diameter from thread size
|
||||
function hex_nut_dia(dia) = lookup(dia, [
|
||||
[3,6.4],[4,8.1],[5,9.2],[6,11.5],[8,16.0],[10,19.6],[12,22.1],[16,27.7],[20,34.6],[24,41.6],[30,53.1],[36,63.5]]);
|
||||
// function for hex nut height from thread size
|
||||
function hex_nut_hi(dia) = lookup(dia, [
|
||||
[3,2.4],[4,3.2],[5,4],[6,3],[8,5],[10,5],[12,10],[16,13],[20,16],[24,19],[30,24],[36,29]]);
|
||||
|
||||
// function for hex bolt head diameter from thread size
|
||||
function hex_bolt_dia(dia) = lookup(dia, [
|
||||
[3,6.4],[4,8.1],[5,9.2],[6,11.5],[8,14.0],[10,16],[12,22.1],[16,27.7],[20,34.6],[24,41.6],[30,53.1],[36,63.5]]);
|
||||
// function for hex bolt head height from thread size
|
||||
function hex_bolt_hi(dia) = lookup(dia, [
|
||||
[3,2.4],[4,3.2],[5,4],[6,3.5],[8,4.5],[10,5],[12,10],[16,13],[20,16],[24,19],[30,24],[36,29]]);
|
||||
|
||||
module thread_out(dia,hi,thr=defQ)
|
||||
{
|
||||
p = get_coarse_pitch(dia);
|
||||
h = (cos(30)*p)/8;
|
||||
Rmin = (dia/2) - (5*h); // as wiki Dmin
|
||||
s = 360/thr;
|
||||
t = (hi-p)/p; // number of turns
|
||||
n = t*thr; // number of segments
|
||||
//echo(str("dia=",dia," hi=",hi," p=",p," h=",h," Rmin=",Rmin," s=",s));
|
||||
cylinder(r = Rmin, h = hi);
|
||||
for(sg=[0:n])
|
||||
th_out_pt(Rmin-0.1,p,s,sg,thr,h,(hi-p)/n);
|
||||
}
|
||||
|
||||
module th_out_pt(rt,p,s,sg,thr,h,sh)
|
||||
// rt = radius of thread (nearest centre)
|
||||
// p = pitch
|
||||
// s = segment length (degrees)
|
||||
// sg = segment number
|
||||
// thr = segments in circumference
|
||||
// h = ISO h of thread / 8
|
||||
// sh = segment height (z)
|
||||
{
|
||||
as = (sg % thr) * s; // angle to start of seg
|
||||
ae = as + s - (s/100); // angle to end of seg (with overlap)
|
||||
z = sh*sg;
|
||||
|
||||
cas=cos(as);
|
||||
sas=sin(as);
|
||||
cae=cos(ae);
|
||||
sae=sin(ae);
|
||||
rtp=rt+(5*h);
|
||||
|
||||
casrt=cas*rt;
|
||||
sasrt=sas*rt;
|
||||
caert=cae*rt;
|
||||
saert=sae*rt;
|
||||
|
||||
// 1,4
|
||||
// |\
|
||||
// | \ 2,5
|
||||
// | /
|
||||
// |/
|
||||
// 0,3
|
||||
// view from front (x & z) extruded in y by sg
|
||||
//
|
||||
//echo(str("as=",as,", ae=",ae," z=",z));
|
||||
polyhedron(
|
||||
points = [
|
||||
[casrt,sasrt,z], // 0
|
||||
[casrt,sasrt,z+(3/4*p)], // 1
|
||||
[cas*rtp,sas*rtp,z+(3/8*p)], // 2
|
||||
[caert,saert,z+sh], // 3
|
||||
[caert,saert,z+(3/4*p)+sh], // 4
|
||||
[cae*rtp,sae*rtp,z+sh+(3/8*p)]], // 5
|
||||
triangles = [
|
||||
[0,1,2], // near face
|
||||
[3,5,4], // far face
|
||||
[0,3,4],[0,4,1], // left face
|
||||
[0,5,3],[0,2,5], // bottom face
|
||||
[1,4,5],[1,5,2]]); // top face
|
||||
}
|
||||
|
||||
module thread_in(dia,hi,thr=defQ)
|
||||
{
|
||||
p = get_coarse_pitch(dia);
|
||||
h = (cos(30)*p)/8;
|
||||
Rmin = (dia/2) - (5*h); // as wiki Dmin
|
||||
s = 360/thr;
|
||||
t = (hi-p)/p; // number of turns
|
||||
n = t*thr; // number of segments
|
||||
//echo(str("dia=",dia," hi=",hi," p=",p," h=",h," Rmin=",Rmin," s=",s));
|
||||
difference()
|
||||
{
|
||||
cylinder(r = (dia/2)+0.5,h = hi);
|
||||
translate([0,0,-1]) cylinder(r = (dia/2)+0.1, h = hi+2);
|
||||
}
|
||||
for(sg=[0:n])
|
||||
th_in_pt(Rmin+0.2,p,s,sg,thr,h,(hi-p)/n);
|
||||
}
|
||||
|
||||
module th_in_pt(rt,p,s,sg,thr,h,sh)
|
||||
// rt = radius of thread (nearest centre)
|
||||
// p = pitch
|
||||
// s = segment length (degrees)
|
||||
// sg = segment number
|
||||
// thr = segments in circumference
|
||||
// h = ISO h of thread / 8
|
||||
// sh = segment height (z)
|
||||
{
|
||||
// as = 360 - (((sg % thr) * s) - 180); // angle to start of seg
|
||||
// ae = as - s + (s/100); // angle to end of seg (with overlap)
|
||||
as = ((sg % thr) * s - 180); // angle to start of seg
|
||||
ae = as + s -(s/100); // angle to end of seg (with overlap)
|
||||
z = sh*sg;
|
||||
|
||||
cas=cos(as);
|
||||
sas=sin(as);
|
||||
cae=cos(ae);
|
||||
sae=sin(ae);
|
||||
rtp=rt+(5*h);
|
||||
|
||||
casrt=cas*rt;
|
||||
casrtp=cas*rtp;
|
||||
sasrt=sas*rt;
|
||||
sasrtp=sas*rtp;
|
||||
caert=cae*rt;
|
||||
caertp=cae*rtp;
|
||||
saert=sae*rt;
|
||||
saertp=sae*rtp;
|
||||
|
||||
// 2,5
|
||||
// /|
|
||||
// 1,4 / |
|
||||
// \ |
|
||||
// \|
|
||||
// 0,3
|
||||
// view from front (x & z) extruded in y by sg
|
||||
//
|
||||
polyhedron(
|
||||
points = [
|
||||
[casrtp,sasrtp,z], //0
|
||||
[casrt,sasrt,z+(3/8*p)], //1
|
||||
[casrtp,sasrtp,z+(3/4*p)], //2
|
||||
[caertp,saertp,z+sh], //3
|
||||
[caert,saert,z+(3/8*p)+sh], //4
|
||||
[caertp,saertp,z+(3/4*p)+sh]], //5
|
||||
triangles = [
|
||||
[0,1,2], // near face
|
||||
[3,5,4], // far face
|
||||
[0,3,4],[0,4,1], // left face
|
||||
[0,5,3],[0,2,5], // bottom face
|
||||
[1,4,5],[1,5,2]]); // top face
|
||||
}
|
202
beplating/lasercuttermount/ISOThread_20120823.scad~
Normal file
202
beplating/lasercuttermount/ISOThread_20120823.scad~
Normal file
|
@ -0,0 +1,202 @@
|
|||
// ISO Metric Thread Implementation
|
||||
// Trevor Moseley
|
||||
// 23/08/2012
|
||||
|
||||
// For thread dimensions see
|
||||
// http://en.wikipedia.org/wiki/File:ISO_and_UTS_Thread_Dimensions.svg
|
||||
|
||||
//hex_nut(6);
|
||||
//hex_nut(8);
|
||||
//hex_nut(10);
|
||||
|
||||
hex_bolt(6,12);
|
||||
//hex_bolt(8,16);
|
||||
//hex_bolt(10,16);
|
||||
//hex_bolt(12,24);
|
||||
|
||||
//thread_out(8,16);
|
||||
|
||||
defQ = 32;
|
||||
|
||||
// function for thread quality
|
||||
function get_thr_qual(dia) = lookup(dia, [
|
||||
[5,10],[6,12],[7,14],[8,16],[10,20],[12,12],[14,28],[16,32],[18,36],[20,40],[22,44],[24,48],[27,54],[30,60],[33,66],[36,72],[39,78],[42,84],[45,90],[48,96],[52,104],[56,112],[60,120],[64,128],[78,156]]);
|
||||
|
||||
// function for shaft quality
|
||||
function get_sh_qual(dia) = lookup(dia, [
|
||||
[5,10],[6,12],[7,14],[8,16],[10,20],[12,24],[14,28],[16,32],[18,36],[20,40],[22,44],[24,48],[27,54],[30,60],[33,66],[36,72],[39,78],[42,84],[45,90],[48,96],[52,104],[56,112],[60,120],[64,128],[78,156]]);
|
||||
|
||||
module hex_nut(dia)
|
||||
{
|
||||
$fn = get_sh_qual(dia);
|
||||
thr = get_thr_qual(dia);
|
||||
hi = hex_nut_hi(dia);
|
||||
difference()
|
||||
{
|
||||
cylinder(r = hex_nut_dia(dia)/2,h = hi, $fn=6);
|
||||
translate([0,0,-0.1]) cylinder(r = dia/2, h =hi + 0.2);
|
||||
}
|
||||
translate([0,0,0.1]) thread_in(dia,hi-0.2,thr);
|
||||
}
|
||||
|
||||
module hex_bolt(dia,hi)
|
||||
{
|
||||
$fn = get_sh_qual(dia);
|
||||
thr = get_thr_qual(dia);
|
||||
hhi = hex_bolt_hi(dia);
|
||||
cylinder(r = hex_bolt_dia(dia)/2,h = hhi, $fn=6);
|
||||
translate([0,0,hhi-0.1]) thread_out(dia,hi+0.1,thr);
|
||||
}
|
||||
|
||||
// function for thread pitch
|
||||
function get_coarse_pitch(dia) = lookup(dia, [
|
||||
[1,0.25],[1.2,0.25],[1.4,0.3],[1.6,0.35],[1.8,0.35],[2,0.4],[2.5,0.45],[3,0.5],[3.5,0.6],[4,0.7],[5,0.8],[6,1],[7,1],[8,1.25],[10,1.5],[12,1.75],[14,2],[16,2],[18,2.5],[20,2.5],[22,2.5],[24,3],[27,3],[30,3.5],[33,3.5],[36,4],[39,4],[42,4.5],[45,4.5],[48,5],[52,5],[56,5.5],[60,5.5],[64,6],[78,5]]);
|
||||
|
||||
// function for hex nut diameter from thread size
|
||||
function hex_nut_dia(dia) = lookup(dia, [
|
||||
[3,6.4],[4,8.1],[5,9.2],[6,11.5],[8,16.0],[10,19.6],[12,22.1],[16,27.7],[20,34.6],[24,41.6],[30,53.1],[36,63.5]]);
|
||||
// function for hex nut height from thread size
|
||||
function hex_nut_hi(dia) = lookup(dia, [
|
||||
[3,2.4],[4,3.2],[5,4],[6,3],[8,5],[10,5],[12,10],[16,13],[20,16],[24,19],[30,24],[36,29]]);
|
||||
|
||||
// function for hex bolt head diameter from thread size
|
||||
function hex_bolt_dia(dia) = lookup(dia, [
|
||||
[3,6.4],[4,8.1],[5,9.2],[6,11.5],[8,14.0],[10,16],[12,22.1],[16,27.7],[20,34.6],[24,41.6],[30,53.1],[36,63.5]]);
|
||||
// function for hex bolt head height from thread size
|
||||
function hex_bolt_hi(dia) = lookup(dia, [
|
||||
[3,2.4],[4,3.2],[5,4],[6,3.5],[8,4.5],[10,5],[12,10],[16,13],[20,16],[24,19],[30,24],[36,29]]);
|
||||
|
||||
module thread_out(dia,hi,thr=defQ)
|
||||
{
|
||||
p = get_coarse_pitch(dia);
|
||||
h = (cos(30)*p)/8;
|
||||
Rmin = (dia/2) - (5*h); // as wiki Dmin
|
||||
s = 360/thr;
|
||||
t = (hi-p)/p; // number of turns
|
||||
n = t*thr; // number of segments
|
||||
//echo(str("dia=",dia," hi=",hi," p=",p," h=",h," Rmin=",Rmin," s=",s));
|
||||
cylinder(r = Rmin, h = hi);
|
||||
for(sg=[0:n])
|
||||
th_out_pt(Rmin-0.1,p,s,sg,thr,h,(hi-p)/n);
|
||||
}
|
||||
|
||||
module th_out_pt(rt,p,s,sg,thr,h,sh)
|
||||
// rt = radius of thread (nearest centre)
|
||||
// p = pitch
|
||||
// s = segment length (degrees)
|
||||
// sg = segment number
|
||||
// thr = segments in circumference
|
||||
// h = ISO h of thread / 8
|
||||
// sh = segment height (z)
|
||||
{
|
||||
as = (sg % thr) * s; // angle to start of seg
|
||||
ae = as + s - (s/100); // angle to end of seg (with overlap)
|
||||
z = sh*sg;
|
||||
|
||||
cas=cos(as);
|
||||
sas=sin(as);
|
||||
cae=cos(ae);
|
||||
sae=sin(ae);
|
||||
rtp=rt+(5*h);
|
||||
|
||||
casrt=cas*rt;
|
||||
sasrt=sas*rt;
|
||||
caert=cae*rt;
|
||||
saert=sae*rt;
|
||||
|
||||
// 1,4
|
||||
// |\
|
||||
// | \ 2,5
|
||||
// | /
|
||||
// |/
|
||||
// 0,3
|
||||
// view from front (x & z) extruded in y by sg
|
||||
//
|
||||
//echo(str("as=",as,", ae=",ae," z=",z));
|
||||
polyhedron(
|
||||
points = [
|
||||
[casrt,sasrt,z], // 0
|
||||
[casrt,sasrt,z+(3/4*p)], // 1
|
||||
[cas*rtp,sas*rtp,z+(3/8*p)], // 2
|
||||
[caert,saert,z+sh], // 3
|
||||
[caert,saert,z+(3/4*p)+sh], // 4
|
||||
[cae*rtp,sae*rtp,z+sh+(3/8*p)]], // 5
|
||||
triangles = [
|
||||
[0,1,2], // near face
|
||||
[3,5,4], // far face
|
||||
[0,3,4],[0,4,1], // left face
|
||||
[0,5,3],[0,2,5], // bottom face
|
||||
[1,4,5],[1,5,2]]); // top face
|
||||
}
|
||||
|
||||
module thread_in(dia,hi,thr=defQ)
|
||||
{
|
||||
p = get_coarse_pitch(dia);
|
||||
h = (cos(30)*p)/8;
|
||||
Rmin = (dia/2) - (5*h); // as wiki Dmin
|
||||
s = 360/thr;
|
||||
t = (hi-p)/p; // number of turns
|
||||
n = t*thr; // number of segments
|
||||
//echo(str("dia=",dia," hi=",hi," p=",p," h=",h," Rmin=",Rmin," s=",s));
|
||||
difference()
|
||||
{
|
||||
cylinder(r = (dia/2)+0.5,h = hi);
|
||||
translate([0,0,-1]) cylinder(r = (dia/2)+0.1, h = hi+2);
|
||||
}
|
||||
for(sg=[0:n])
|
||||
th_in_pt(Rmin+0.2,p,s,sg,thr,h,(hi-p)/n);
|
||||
}
|
||||
|
||||
module th_in_pt(rt,p,s,sg,thr,h,sh)
|
||||
// rt = radius of thread (nearest centre)
|
||||
// p = pitch
|
||||
// s = segment length (degrees)
|
||||
// sg = segment number
|
||||
// thr = segments in circumference
|
||||
// h = ISO h of thread / 8
|
||||
// sh = segment height (z)
|
||||
{
|
||||
// as = 360 - (((sg % thr) * s) - 180); // angle to start of seg
|
||||
// ae = as - s + (s/100); // angle to end of seg (with overlap)
|
||||
as = ((sg % thr) * s - 180); // angle to start of seg
|
||||
ae = as + s -(s/100); // angle to end of seg (with overlap)
|
||||
z = sh*sg;
|
||||
|
||||
cas=cos(as);
|
||||
sas=sin(as);
|
||||
cae=cos(ae);
|
||||
sae=sin(ae);
|
||||
rtp=rt+(5*h);
|
||||
|
||||
casrt=cas*rt;
|
||||
casrtp=cas*rtp;
|
||||
sasrt=sas*rt;
|
||||
sasrtp=sas*rtp;
|
||||
caert=cae*rt;
|
||||
caertp=cae*rtp;
|
||||
saert=sae*rt;
|
||||
saertp=sae*rtp;
|
||||
|
||||
// 2,5
|
||||
// /|
|
||||
// 1,4 / |
|
||||
// \ |
|
||||
// \|
|
||||
// 0,3
|
||||
// view from front (x & z) extruded in y by sg
|
||||
//
|
||||
polyhedron(
|
||||
points = [
|
||||
[casrtp,sasrtp,z], //0
|
||||
[casrt,sasrt,z+(3/8*p)], //1
|
||||
[casrtp,sasrtp,z+(3/4*p)], //2
|
||||
[caertp,saertp,z+sh], //3
|
||||
[caert,saert,z+(3/8*p)+sh], //4
|
||||
[caertp,saertp,z+(3/4*p)+sh]], //5
|
||||
triangles = [
|
||||
[0,1,2], // near face
|
||||
[3,5,4], // far face
|
||||
[0,3,4],[0,4,1], // left face
|
||||
[0,5,3],[0,2,5], // bottom face
|
||||
[1,4,5],[1,5,2]]); // top face
|
||||
}
|
11
beplating/lasercuttermount/lagerSubst.scad
Normal file
11
beplating/lasercuttermount/lagerSubst.scad
Normal file
|
@ -0,0 +1,11 @@
|
|||
$fn=60;
|
||||
|
||||
union(){
|
||||
difference(){
|
||||
translate([-20,-40,0])cube([40,60,5]);
|
||||
translate([0,5,-7])cylinder(r=8.5,h=20);
|
||||
# translate([10,-30,-2])cube([4,20,10]);
|
||||
# translate([-14,-30,-2])cube([4,20,10]);
|
||||
}
|
||||
}
|
||||
|
14
beplating/lasercuttermount/lagerSubst2.scad
Normal file
14
beplating/lasercuttermount/lagerSubst2.scad
Normal file
|
@ -0,0 +1,14 @@
|
|||
$fn=60;
|
||||
|
||||
union(){
|
||||
difference(){
|
||||
translate([0,0,0])cube([40,57,5]);
|
||||
translate([20,41,0])cylinder(r=8.5,h=20);
|
||||
#translate([10,10,0])cylinder(r=3,h=20);
|
||||
#translate([30,10,0])cylinder(r=3,h=20);
|
||||
//translate([10,-30,-2])cube([4,20,10]);
|
||||
//translate([-14,-30,-2])cube([4,20,10]);
|
||||
//translate([-20,-37,0])cube([30,20,10]);
|
||||
}
|
||||
}
|
||||
|
5210
beplating/lasercuttermount/lagerSubst2.stl
Normal file
5210
beplating/lasercuttermount/lagerSubst2.stl
Normal file
File diff suppressed because it is too large
Load diff
42960
beplating/lasercuttermount/mount.gcode
Normal file
42960
beplating/lasercuttermount/mount.gcode
Normal file
File diff suppressed because it is too large
Load diff
39
beplating/lasercuttermount/mount.scad
Normal file
39
beplating/lasercuttermount/mount.scad
Normal file
|
@ -0,0 +1,39 @@
|
|||
buisdikte=86;
|
||||
hoogte=20;
|
||||
bloklengte=40;
|
||||
blokdikte=20;
|
||||
bd = 2; // dikte vevestigingsbout
|
||||
tm = 75; //afstand tussen mitsumi's onder buis
|
||||
mh = 20; //mitsumi height
|
||||
$fn=200;
|
||||
/***************************************/
|
||||
include <ISOThread_20120823.scad>
|
||||
/***************************************/
|
||||
dia=buisdikte/2;
|
||||
module tubeholder(){
|
||||
union(){
|
||||
difference(){
|
||||
union(){
|
||||
cylinder(r=dia+hoogte/2,h=hoogte);
|
||||
translate([-dia-8,-20-tm/2,0])cube([40,tm+40,20]);
|
||||
}
|
||||
translate([0,0,-0.1])cylinder(r=dia,h=hoogte+0.2);
|
||||
}
|
||||
translate([-20,dia,0])rotate([0,0,0])cube([bloklengte,15,hoogte]);
|
||||
translate([-20,-dia-blokdikte+5,0])cube([bloklengte,15,hoogte]);
|
||||
}
|
||||
}
|
||||
module fastner() {
|
||||
difference() {
|
||||
cube([10,20,20]); //holder1
|
||||
translate([-10,10,10])rotate([0,90,0])cylinder(r=3,h=40);
|
||||
}
|
||||
}
|
||||
difference(){
|
||||
tubeholder();
|
||||
translate([0,-110,-20])cube([100,235,50]);
|
||||
//translate([-100,-110,-10])cube([100,235,30]);
|
||||
}
|
||||
translate([-dia-mh-8,-tm/2,0])cube([mh,tm,mh]); //20*20 voor tussen mitsumi
|
||||
#translate([-51,37.5,20])fastner();
|
||||
#translate([-51,-57.5,20])fastner();
|
23550
beplating/lasercuttermount/mount.stl
Normal file
23550
beplating/lasercuttermount/mount.stl
Normal file
File diff suppressed because it is too large
Load diff
48996
beplating/lasercuttermount/mount2.0.1.gcode
Normal file
48996
beplating/lasercuttermount/mount2.0.1.gcode
Normal file
File diff suppressed because it is too large
Load diff
14534
beplating/lasercuttermount/mount2.0.1.stl
Normal file
14534
beplating/lasercuttermount/mount2.0.1.stl
Normal file
File diff suppressed because it is too large
Load diff
68516
beplating/lasercuttermount/mount2.0.2.gcode
Normal file
68516
beplating/lasercuttermount/mount2.0.2.gcode
Normal file
File diff suppressed because it is too large
Load diff
47991
beplating/lasercuttermount/mount2.0.gcode
Normal file
47991
beplating/lasercuttermount/mount2.0.gcode
Normal file
File diff suppressed because it is too large
Load diff
14534
beplating/lasercuttermount/mount2.0.stl
Normal file
14534
beplating/lasercuttermount/mount2.0.stl
Normal file
File diff suppressed because it is too large
Load diff
39
beplating/lasercuttermount/mount2.scad
Normal file
39
beplating/lasercuttermount/mount2.scad
Normal file
|
@ -0,0 +1,39 @@
|
|||
buisdikte=86;
|
||||
hoogte=20;
|
||||
bloklengte=40;
|
||||
blokdikte=20;
|
||||
bd = 2; // dikte vevestigingsbout
|
||||
tm = 75; //afstand tussen mitsumi's onder buis
|
||||
mh = 20; //mitsumi height
|
||||
$fn=200;
|
||||
/***************************************/
|
||||
include <ISOThread_20120823.scad>
|
||||
/***************************************/
|
||||
dia=buisdikte/2;
|
||||
module tubeholder(){
|
||||
union(){
|
||||
difference(){
|
||||
union(){
|
||||
cylinder(r=dia+hoogte/2,h=hoogte);
|
||||
translate([-dia-8,-20-tm/2,0])cube([40,tm+40,20]);
|
||||
}
|
||||
translate([0,0,-0.1])cylinder(r=dia,h=hoogte+0.2);
|
||||
}
|
||||
translate([-20,dia,0])rotate([0,0,0])cube([bloklengte,15,hoogte]);
|
||||
translate([-20,-dia-blokdikte+5,0])cube([bloklengte,15,hoogte]);
|
||||
}
|
||||
}
|
||||
module fastner() {
|
||||
difference() {
|
||||
cube([14,20,20]); //holder1
|
||||
translate([-10,10,10])rotate([0,90,0])cylinder(r=3,h=40);
|
||||
}
|
||||
}
|
||||
difference(){
|
||||
tubeholder();
|
||||
translate([0,-110,-20])cube([100,235,50]);
|
||||
//translate([-100,-110,-10])cube([100,235,30]);
|
||||
}
|
||||
translate([-dia-mh-2+10,-20-tm/2,0])cube([4,115,20]); //20*20 voor tussen mitsumi
|
||||
#translate([-55,37.5,20])fastner();
|
||||
#translate([-55,-57.5,20])fastner();
|
14450
beplating/lasercuttermount/mount2.stl
Normal file
14450
beplating/lasercuttermount/mount2.stl
Normal file
File diff suppressed because it is too large
Load diff
17705
beplating/lasercuttermount/mount3.gcode
Normal file
17705
beplating/lasercuttermount/mount3.gcode
Normal file
File diff suppressed because it is too large
Load diff
19434
beplating/lasercuttermount/mount3.stl
Normal file
19434
beplating/lasercuttermount/mount3.stl
Normal file
File diff suppressed because it is too large
Load diff
1477
beplating/machinecompartmentinside.svg
Normal file
1477
beplating/machinecompartmentinside.svg
Normal file
File diff suppressed because it is too large
Load diff
After Width: | Height: | Size: 57 KiB |
47170
beplating/mdf/machinecompartmentinside.dxf
Normal file
47170
beplating/mdf/machinecompartmentinside.dxf
Normal file
File diff suppressed because it is too large
Load diff
2712
beplating/mdf/machinecompartmentinside.dxf.2014_05_02.svg
Normal file
2712
beplating/mdf/machinecompartmentinside.dxf.2014_05_02.svg
Normal file
File diff suppressed because it is too large
Load diff
After Width: | Height: | Size: 123 KiB |
2286
beplating/metaal/back.dxf
Normal file
2286
beplating/metaal/back.dxf
Normal file
File diff suppressed because it is too large
Load diff
2516
beplating/metaal/bottom.dxf
Normal file
2516
beplating/metaal/bottom.dxf
Normal file
File diff suppressed because it is too large
Load diff
11286
beplating/metaal/front r2.dxf
Normal file
11286
beplating/metaal/front r2.dxf
Normal file
File diff suppressed because it is too large
Load diff
11026
beplating/metaal/front.dxf
Normal file
11026
beplating/metaal/front.dxf
Normal file
File diff suppressed because it is too large
Load diff
50630
beplating/metaal/frontPanel bordje+aangepast.dxf
Normal file
50630
beplating/metaal/frontPanel bordje+aangepast.dxf
Normal file
File diff suppressed because it is too large
Load diff
50682
beplating/metaal/frontPanel bordje+aangepast2.dxf
Normal file
50682
beplating/metaal/frontPanel bordje+aangepast2.dxf
Normal file
File diff suppressed because it is too large
Load diff
5664
beplating/metaal/panel.dxf
Normal file
5664
beplating/metaal/panel.dxf
Normal file
File diff suppressed because it is too large
Load diff
1919
beplating/rookkanaal.svg
Normal file
1919
beplating/rookkanaal.svg
Normal file
File diff suppressed because it is too large
Load diff
After Width: | Height: | Size: 75 KiB |
199
beplating/rookkanaalsvg.svg
Normal file
199
beplating/rookkanaalsvg.svg
Normal file
|
@ -0,0 +1,199 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="744.094488189"
|
||||
height="1052.36220472"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="onderbuisrechts.dxf">
|
||||
<metadata
|
||||
id="metadata74">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1766"
|
||||
inkscape:window-height="480"
|
||||
id="namedview72"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.27769373"
|
||||
inkscape:cx="372.04724"
|
||||
inkscape:cy="526.18109"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g20" />
|
||||
<desc
|
||||
id="desc4">/mnt/hd2/Data/projecten/prive/lasercutter/frame/onderbuisrechts.dxf - scale = 1.000000</desc>
|
||||
<defs
|
||||
id="defs6">
|
||||
<marker
|
||||
id="DistanceX"
|
||||
orient="auto"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
d="M 3,-3 L -3,3 M 0,-5 L 0,5"
|
||||
style="stroke:#000000; stroke-width:0.5"
|
||||
id="path9" />
|
||||
</marker>
|
||||
<pattern
|
||||
height="8"
|
||||
id="Hatch"
|
||||
patternUnits="userSpaceOnUse"
|
||||
width="8"
|
||||
x="0"
|
||||
y="0">
|
||||
<path
|
||||
d="M8 4 l-4,4"
|
||||
linecap="square"
|
||||
stroke="#000000"
|
||||
stroke-width="0.25"
|
||||
id="path12" />
|
||||
<path
|
||||
d="M6 2 l-4,4"
|
||||
linecap="square"
|
||||
stroke="#000000"
|
||||
stroke-width="0.25"
|
||||
id="path14" />
|
||||
<path
|
||||
d="M4 0 l-4,4"
|
||||
linecap="square"
|
||||
stroke="#000000"
|
||||
stroke-width="0.25"
|
||||
id="path16" />
|
||||
</pattern>
|
||||
<symbol
|
||||
id="*Model_Space" />
|
||||
<symbol
|
||||
id="*Paper_Space" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="0"
|
||||
id="g20">
|
||||
<path
|
||||
d="M 0.000000,1052.362205 0.000000,698.031496"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path22" />
|
||||
<path
|
||||
d="M 0.000000,698.031496 141.732283,698.031496"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path24" />
|
||||
<path
|
||||
d="M 141.732283,698.031496 141.732283,634.251969"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path26" />
|
||||
<path
|
||||
d="M 0.000000,1052.362205 1119.685039,1052.362205"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path28" />
|
||||
<path
|
||||
d="M 1119.685039,1052.362205 1119.685039,981.496063"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path30" />
|
||||
<path
|
||||
d="M 1119.685039,981.496063 1084.251969,981.496063"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path32" />
|
||||
<path
|
||||
d="M 1084.251969,981.496063 1084.251969,946.062992"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path34" />
|
||||
<path
|
||||
d="M 1084.251969,946.062992 1119.685039,946.062992"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path36" />
|
||||
<path
|
||||
d="M 1119.685039,775.984252 1119.685039,946.062992"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path38" />
|
||||
<path
|
||||
d="M 977.952756,775.984252 1119.685039,775.984252"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path40" />
|
||||
<path
|
||||
d="M 977.952756,634.251969 977.952756,775.984252"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path42" />
|
||||
<path
|
||||
d="M 729.921260,634.251969 729.921260,775.984252"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path44" />
|
||||
<path
|
||||
d="M 676.771654,634.251969 676.771654,829.133858"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path46" />
|
||||
<path
|
||||
d="M 141.732283,634.251969 676.771654,634.251969"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path48" />
|
||||
<path
|
||||
d="M 729.921260,634.251969 977.952756,634.251969"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path50" />
|
||||
<path
|
||||
d="M 676.771654,829.133858 818.503937,829.133858"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path52" />
|
||||
<path
|
||||
d="M 818.503937,829.133858 818.503937,775.984252"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path54" />
|
||||
<path
|
||||
d="M 729.921260,775.984252 818.503937,775.984252"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path56" />
|
||||
<path
|
||||
d="M 359.645669,933.661417 A 5.314961,5.314961 -0.000000 1 0 349.015748,933.661417 5.314961,5.314961 -0.000000 1 0 359.645669,933.661417 z"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path58" />
|
||||
<path
|
||||
d="M 643.110236,933.661417 A 5.314961,5.314961 -0.000000 1 0 632.480315,933.661417 5.314961,5.314961 -0.000000 1 0 643.110236,933.661417 z"
|
||||
style="stroke:#000000;stroke-width:0.5;fill:none;stroke-linecap: round"
|
||||
id="path60" />
|
||||
<path
|
||||
d="M 116.929134,1016.929134 A 10.629921,10.629921 -0.000000 1 0 95.669291,1016.929134 10.629921,10.629921 -0.000000 1 0 116.929134,1016.929134 z"
|
||||
style="stroke:#000000;stroke-width:1.0;fill:none;stroke-linecap: round"
|
||||
id="path62" />
|
||||
<path
|
||||
d="M 1024.015748,1016.929134 A 10.629921,10.629921 -0.000000 1 0 1002.755906,1016.929134 10.629921,10.629921 -0.000000 1 0 1024.015748,1016.929134 z"
|
||||
style="stroke:#000000;stroke-width:1.0;fill:none;stroke-linecap: round"
|
||||
id="path64" />
|
||||
<path
|
||||
d="M 917.716535,669.685039 A 10.629921,10.629921 -0.000000 1 0 896.456693,669.685039 10.629921,10.629921 -0.000000 1 0 917.716535,669.685039 z"
|
||||
style="stroke:#000000;stroke-width:1.0;fill:none;stroke-linecap: round"
|
||||
id="path66" />
|
||||
<path
|
||||
d="M 651.968504,669.685039 A 10.629921,10.629921 -0.000000 1 0 630.708661,669.685039 10.629921,10.629921 -0.000000 1 0 651.968504,669.685039 z"
|
||||
style="stroke:#000000;stroke-width:1.0;fill:none;stroke-linecap: round"
|
||||
id="path68" />
|
||||
<path
|
||||
d="M 187.795276,669.685039 A 10.629921,10.629921 -0.000000 1 0 166.535433,669.685039 10.629921,10.629921 -0.000000 1 0 187.795276,669.685039 z"
|
||||
style="stroke:#000000;stroke-width:1.0;fill:none;stroke-linecap: round"
|
||||
id="path70" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.3 KiB |
2128
beplating/stand1.dxf
Normal file
2128
beplating/stand1.dxf
Normal file
File diff suppressed because it is too large
Load diff
2124
beplating/stand2.dxf
Normal file
2124
beplating/stand2.dxf
Normal file
File diff suppressed because it is too large
Load diff
216
beplating/stands 4.5cm.svg
Normal file
216
beplating/stands 4.5cm.svg
Normal file
|
@ -0,0 +1,216 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="744.094488189"
|
||||
height="1052.36220472"
|
||||
id="svg3004"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="stands 8cm.svg">
|
||||
<metadata
|
||||
id="metadata3051">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1185"
|
||||
inkscape:window-height="943"
|
||||
id="namedview3049"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.96253025"
|
||||
inkscape:cx="378.42688"
|
||||
inkscape:cy="180.13987"
|
||||
inkscape:window-x="138"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g3023" />
|
||||
<desc
|
||||
id="desc3006">/home/mro/prive/lasercutter/stand1.dxf - scale = 1.000000</desc>
|
||||
<defs
|
||||
id="defs3008">
|
||||
<marker
|
||||
id="DistanceX"
|
||||
orient="auto"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
d="M 3,-3 L -3,3 M 0,-5 L 0,5"
|
||||
style="stroke:#000000; stroke-width:0.5"
|
||||
id="path3011" />
|
||||
</marker>
|
||||
<pattern
|
||||
height="8"
|
||||
id="Hatch"
|
||||
patternUnits="userSpaceOnUse"
|
||||
width="8"
|
||||
x="0"
|
||||
y="0">
|
||||
<path
|
||||
d="M8 4 l-4,4"
|
||||
linecap="square"
|
||||
stroke="#000000"
|
||||
stroke-width="0.25"
|
||||
id="path3014" />
|
||||
<path
|
||||
d="M6 2 l-4,4"
|
||||
linecap="square"
|
||||
stroke="#000000"
|
||||
stroke-width="0.25"
|
||||
id="path3016" />
|
||||
<path
|
||||
d="M4 0 l-4,4"
|
||||
linecap="square"
|
||||
stroke="#000000"
|
||||
stroke-width="0.25"
|
||||
id="path3018" />
|
||||
</pattern>
|
||||
<symbol
|
||||
id="*Model_Space" />
|
||||
<symbol
|
||||
id="*Paper_Space" />
|
||||
<symbol
|
||||
id="*Paper_Space0" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="0"
|
||||
id="g3023">
|
||||
<path
|
||||
d="m 0.49641089,1052.1836 105.93986911,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.35827053;stroke-linecap:round"
|
||||
id="path3025"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 53.149606,981.80262 0,-123.51173"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.66009235;stroke-linecap:round"
|
||||
id="path3027"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.460163;stroke-linecap:round"
|
||||
d="m 0.05775225,981.45972 0,70.40428 0,-70.40428 z"
|
||||
id="path3029"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 106.26858,1051.9474 0,-98.99685"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.28864416;stroke-linecap:round"
|
||||
id="path3031"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 0.29762843,981.19841 53.14960557,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.59525687;stroke-linecap:round"
|
||||
id="path3033"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 106.76626,952.97776 13.23913,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.34364527;stroke-linecap:round"
|
||||
id="path3035"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 120.11836,1052.1944 0,-98.87708"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.44909185;stroke-linecap:round"
|
||||
id="path3037"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 53.149998,856.98029 120.472002,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.99999821;stroke-linecap:round"
|
||||
id="path3039"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 173.62205,981.80247 0,-123.51291"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.66009551;stroke-linecap:round"
|
||||
id="path3041"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 173.5689,982.26494 53.25324,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.00352411;stroke-linecap:round"
|
||||
id="path3043"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 226.95236,1052.1821 0,-69.88006"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.36074919;stroke-linecap:round"
|
||||
id="path3045"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 120.93882,1052.4751 105.36645,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.00141601;stroke-linecap:round"
|
||||
id="path3047"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 248.90325,1052.0707 226.00734,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.52329022;stroke-linecap:round"
|
||||
id="path3025-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 301.35343,981.68968 0,-123.51173"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.66009235;stroke-linecap:round"
|
||||
id="path3027-6"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.460163;stroke-linecap:round"
|
||||
d="m 248.26158,981.34678 0,70.40432 0,-70.40432 z"
|
||||
id="path3029-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 354.4724,956.54857 0,-98.99689"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.28864416;stroke-linecap:round"
|
||||
id="path3031-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 248.50145,981.08547 53.14961,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.59525687;stroke-linecap:round"
|
||||
id="path3033-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 354.97008,952.97776 13.23913,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.34364527;stroke-linecap:round"
|
||||
id="path3035-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 368.32218,956.46835 0,-98.87712"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.44909185;stroke-linecap:round"
|
||||
id="path3037-7"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 301.35382,856.86735 120.472,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.99999821;stroke-linecap:round"
|
||||
id="path3039-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 421.82587,981.68953 0,-123.51291"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.66009551;stroke-linecap:round"
|
||||
id="path3041-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 421.77272,982.152 53.25324,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.00352411;stroke-linecap:round"
|
||||
id="path3043-4"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 475.15618,1052.0692 0,-69.8801"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.36074919;stroke-linecap:round"
|
||||
id="path3045-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.2 KiB |
332
beplating/stands 8cm.svg
Normal file
332
beplating/stands 8cm.svg
Normal file
|
@ -0,0 +1,332 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="744.094488189"
|
||||
height="1052.36220472"
|
||||
id="svg3004"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="stand1.dxf">
|
||||
<metadata
|
||||
id="metadata3051">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1185"
|
||||
inkscape:window-height="943"
|
||||
id="namedview3049"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.2900929"
|
||||
inkscape:cx="378.42688"
|
||||
inkscape:cy="180.13987"
|
||||
inkscape:window-x="617"
|
||||
inkscape:window-y="38"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g3023" />
|
||||
<desc
|
||||
id="desc3006">/home/mro/prive/lasercutter/stand1.dxf - scale = 1.000000</desc>
|
||||
<defs
|
||||
id="defs3008">
|
||||
<marker
|
||||
id="DistanceX"
|
||||
orient="auto"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
d="M 3,-3 L -3,3 M 0,-5 L 0,5"
|
||||
style="stroke:#000000; stroke-width:0.5"
|
||||
id="path3011" />
|
||||
</marker>
|
||||
<pattern
|
||||
height="8"
|
||||
id="Hatch"
|
||||
patternUnits="userSpaceOnUse"
|
||||
width="8"
|
||||
x="0"
|
||||
y="0">
|
||||
<path
|
||||
d="M8 4 l-4,4"
|
||||
linecap="square"
|
||||
stroke="#000000"
|
||||
stroke-width="0.25"
|
||||
id="path3014" />
|
||||
<path
|
||||
d="M6 2 l-4,4"
|
||||
linecap="square"
|
||||
stroke="#000000"
|
||||
stroke-width="0.25"
|
||||
id="path3016" />
|
||||
<path
|
||||
d="M4 0 l-4,4"
|
||||
linecap="square"
|
||||
stroke="#000000"
|
||||
stroke-width="0.25"
|
||||
id="path3018" />
|
||||
</pattern>
|
||||
<symbol
|
||||
id="*Model_Space" />
|
||||
<symbol
|
||||
id="*Paper_Space" />
|
||||
<symbol
|
||||
id="*Paper_Space0" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="0"
|
||||
id="g3023">
|
||||
<path
|
||||
d="M 0.000000,1052.362205 106.299213,1052.362205"
|
||||
style="stroke:#000000;fill:none;stroke-linecap: round"
|
||||
id="path3025" />
|
||||
<path
|
||||
d="m 53.149606,981.62238 0,-211.85106"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.86450183;stroke-linecap:round"
|
||||
id="path3027"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="stroke:#000000;fill:none;stroke-linecap: round"
|
||||
d="M 0 981.5 L 0 1052.375 L 0 981.5 z "
|
||||
id="path3029" />
|
||||
<path
|
||||
d="M 106.299213,1052.362205 106.299213,875.196850"
|
||||
style="stroke:#000000;fill:none;stroke-linecap: round"
|
||||
id="path3031" />
|
||||
<path
|
||||
d="M 0.000000,981.496063 53.149606,981.496063"
|
||||
style="stroke:#000000;fill:none;stroke-linecap: round"
|
||||
id="path3033" />
|
||||
<path
|
||||
d="M 106.299213,875.196850 120.472441,875.196850"
|
||||
style="stroke:#000000;fill:none;stroke-linecap: round"
|
||||
id="path3035" />
|
||||
<path
|
||||
d="M 120.472441,1052.362205 120.472441,875.196850"
|
||||
style="stroke:#000000;fill:none;stroke-linecap: round"
|
||||
id="path3037" />
|
||||
<path
|
||||
d="m 53.15,768.39762 120.47244,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3039"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 173.62205,981.62062 0,-212.84676"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.86653107;stroke-linecap:round"
|
||||
id="path3041"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="M 173.622047,981.496063 226.771654,981.496063"
|
||||
style="stroke:#000000;fill:none;stroke-linecap: round"
|
||||
id="path3043" />
|
||||
<path
|
||||
d="M 226.771654,1052.362205 226.771654,981.496063"
|
||||
style="stroke:#000000;fill:none;stroke-linecap: round"
|
||||
id="path3045" />
|
||||
<path
|
||||
d="M 120.472441,1052.362205 226.771654,1052.362205"
|
||||
style="stroke:#000000;fill:none;stroke-linecap: round"
|
||||
id="path3047" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 329.65817,981.27936 0,-212.84676"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.86653107;stroke-linecap:round"
|
||||
id="path3099" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 276.50856,1052.0209 0,-70.8661"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3101" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 276.50856,981.1548 53.14961,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3103" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 382.80777,768.55611 0,177.16535"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round"
|
||||
id="path3105" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 329.65817,768.5561 53.1496,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3107" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 382.80777,945.72146 14.17323,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3109" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 396.981,768.55611 0,177.16535"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round"
|
||||
id="path3111" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 396.981,768.5561 53.14961,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3113" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 450.13061,981.27936 0,-212.84676"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.86653107;stroke-linecap:round"
|
||||
id="path3115" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 450.13061,981.1548 53.1496,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3117" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 503.28021,1052.0209 0,-70.8661"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3119" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 276.50856,1052.0209 226.77165,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3121" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 194.00903,763.52913 0,212.84677"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.86653107;stroke-linecap:round"
|
||||
id="path3099-1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 140.85942,692.78763 0,70.8661"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3101-5" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 140.85942,763.65373 53.14961,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3103-8" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 247.15863,976.25239 0,-177.16536"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round"
|
||||
id="path3105-2" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 194.00903,976.2524 53.1496,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3107-6" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 247.15863,799.08703 14.17323,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3109-4" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 261.33186,976.25239 0,-177.16536"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round"
|
||||
id="path3111-8" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 261.33186,976.2524 53.14961,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3113-6" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 314.48147,763.52913 0,212.84677"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.86653107;stroke-linecap:round"
|
||||
id="path3115-8" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 314.48147,763.65373 53.1496,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3117-4" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 367.63107,692.78763 0,70.8661"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3119-5" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 140.85942,692.78763 226.77165,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3121-4" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 406.73174,691.87285 106.29921,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3025-4" />
|
||||
<path
|
||||
d="m 459.88135,762.61265 0,211.8511"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.86450183;stroke-linecap:round"
|
||||
id="path3027-4"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
d="m 406.73174,762.73505 0,-70.875 0,70.875 z"
|
||||
id="path3029-6" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 513.03095,691.87285 0,177.1654"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3031-8" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 406.73174,762.73905 53.14961,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3033-2" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 513.03095,869.03825 14.17323,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3035-5" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 527.20418,691.87285 0,177.1654"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3037-0" />
|
||||
<path
|
||||
d="m 459.88174,975.83745 120.47244,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3039-4"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 580.35379,762.61445 0,212.84676"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.86653107;stroke-linecap:round"
|
||||
id="path3041-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 580.35379,762.73905 53.1496,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3043-5" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 633.50339,691.87285 0,70.8662"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3045-2" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 527.20418,691.87285 106.29921,0"
|
||||
style="fill:none;stroke:#000000;stroke-linecap:round"
|
||||
id="path3047-1" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
BIN
beplating/stands.plf
Normal file
BIN
beplating/stands.plf
Normal file
Binary file not shown.
BIN
beplating/stands2.plf
Normal file
BIN
beplating/stands2.plf
Normal file
Binary file not shown.
6
beplating/wijzigingen aan machinecompartmentinside.dxf
Normal file
6
beplating/wijzigingen aan machinecompartmentinside.dxf
Normal file
|
@ -0,0 +1,6 @@
|
|||
beide zijplaten 2cm te hoog, gaten meeverplaatsen + doorvoer draad leds
|
||||
voorste zijplaat mitsumi 40 ipv 20
|
||||
plaat onder laserbuis 2* extra gaatje 1.5 cm naar voren (voor tyraps)
|
||||
staandetr achterplaat 472 van uiterste tand tot achterwand
|
||||
staanse achterplaat 285 van kortste tand (op bodemplaat)
|
||||
plaatje 65*75 hart 50 2 gaten op 15*15 en 10*16 (10 is op mitsumi)
|
BIN
documentation/INTRODUCTION TO LIBRECAD.doc
Normal file
BIN
documentation/INTRODUCTION TO LIBRECAD.doc
Normal file
Binary file not shown.
BIN
documentation/Instruction Manual of the SDZ CO₂ Laser Power.pdf
Normal file
BIN
documentation/Instruction Manual of the SDZ CO₂ Laser Power.pdf
Normal file
Binary file not shown.
BIN
documentation/LaserSnijderHowTo.pdf
Normal file
BIN
documentation/LaserSnijderHowTo.pdf
Normal file
Binary file not shown.
BIN
documentation/SDZ CO₂ Laser Tube User Guide.pdf
Normal file
BIN
documentation/SDZ CO₂ Laser Tube User Guide.pdf
Normal file
Binary file not shown.
47
frame/GT2_Belt_Clamp_For_Ecksbot/belt-clamp_GT2.scad
Normal file
47
frame/GT2_Belt_Clamp_For_Ecksbot/belt-clamp_GT2.scad
Normal file
|
@ -0,0 +1,47 @@
|
|||
// PRUSA Mendel
|
||||
// Belt clamp
|
||||
// GNU GPL v3
|
||||
// Josef Průša
|
||||
// josefprusa@me.com
|
||||
// prusadjs.cz
|
||||
// http://www.reprap.org/wiki/Prusa_Mendel
|
||||
// http://github.com/prusajr/PrusaMendel
|
||||
//
|
||||
// modified by neurofun
|
||||
|
||||
include <configuration.scad>
|
||||
|
||||
|
||||
module beltclamp(){
|
||||
|
||||
clamp_height = 3;
|
||||
clamp_width = 10;
|
||||
clamp_length = 16; // distance between the center of the 2 holes
|
||||
belt_pitch = 2;
|
||||
belt_width = 10;
|
||||
tooth_width = 1.3;
|
||||
tooth_heigth = .75;
|
||||
offset = belt_pitch/4;
|
||||
// uncomment next line for a symetric clamp
|
||||
//offset = 0;
|
||||
|
||||
difference(){
|
||||
// basic shape
|
||||
union(0){
|
||||
translate(v = [0,0,clamp_height/2]) cube([clamp_length,clamp_width,clamp_height], center=true);
|
||||
translate(v = [-clamp_length/2, 0, 0]) cylinder(r=clamp_width/2,h=clamp_height);
|
||||
translate(v = [clamp_length/2, 0, 0]) cylinder(r=clamp_width/2,h=clamp_height);
|
||||
}
|
||||
// screw holes
|
||||
translate(v = [-clamp_length/2, 0, -1])polyhole(m3_diameter, clamp_height+2);
|
||||
translate(v = [clamp_length/2, 0, -1]) polyhole(m3_diameter, clamp_height+2);
|
||||
// belt grip
|
||||
translate(v = [0,offset,clamp_height-tooth_heigth])
|
||||
for ( i = [round(-clamp_width/belt_pitch/2) : round(clamp_width/belt_pitch/2)]){
|
||||
translate(v = [0,belt_pitch*i,tooth_heigth])cube(size = [belt_width, tooth_width, tooth_heigth*2], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
beltclamp();
|
1654
frame/GT2_Belt_Clamp_For_Ecksbot/belt-clamp_GT2.stl
Normal file
1654
frame/GT2_Belt_Clamp_For_Ecksbot/belt-clamp_GT2.stl
Normal file
File diff suppressed because it is too large
Load diff
62
frame/GT2_Belt_Clamp_For_Ecksbot/configuration.scad
Normal file
62
frame/GT2_Belt_Clamp_For_Ecksbot/configuration.scad
Normal file
|
@ -0,0 +1,62 @@
|
|||
// PRUSA Mendel
|
||||
// Configuration file
|
||||
// GNU GPL v3
|
||||
// Josef Průša
|
||||
// josefprusa@me.com
|
||||
// prusadjs.cz
|
||||
// http://www.reprap.org/wiki/Prusa_Mendel
|
||||
// http://github.com/prusajr/PrusaMendel
|
||||
|
||||
// PLEASE SELECT ONE OF THE CONFIGURATIONS BELOW
|
||||
// BY UN-COMMENTING IT
|
||||
|
||||
// Uncomment for metric settings
|
||||
// METRIC METRIC METRIC METRIC METRIC METRIC METRIC METRIC
|
||||
|
||||
include <metric.scad>;
|
||||
|
||||
// CUSTOM CUSTOM CUSTOM CUSTOM CUSTOM CUSTOM CUSTOM CUSTOM CUSTOM
|
||||
|
||||
thin_wall = 3;
|
||||
|
||||
|
||||
// Linear bearing version
|
||||
linear = false;
|
||||
// set false for LM-8UU, true for LM-E-8UU (ignore if linear is set to false)
|
||||
lme8uu = false;
|
||||
|
||||
|
||||
|
||||
// CHANGE ONLY THE STUFF YOU KNOW
|
||||
// IT WILL REPLACE DEFAULT SETTING
|
||||
|
||||
// RODS
|
||||
|
||||
// threaded_rod_diameter = 0;
|
||||
// threaded_rod_diameter_horizontal = 0;
|
||||
// smooth_bar_diameter = 0;
|
||||
// smooth_bar_diameter_horizontal = 0;
|
||||
|
||||
// Nuts and bolts
|
||||
|
||||
// m8_diameter = 0;
|
||||
// m8_nut_diameter = 0;
|
||||
|
||||
// m4_diameter = 0;
|
||||
// m4_nut_diameter = 0;
|
||||
|
||||
// m3_diameter = 0;
|
||||
// m3_nut_diameter = 0;
|
||||
|
||||
// Bushing holder
|
||||
|
||||
// bushing_core_diameter = smooth_bar_diameter;
|
||||
// bushing_material_thickness = 0;
|
||||
|
||||
|
||||
///counted stuff
|
||||
m3_nut_diameter_bigger = ((m3_nut_diameter / 2) / cos (180 / 6))*2;
|
||||
|
||||
// functions
|
||||
include <functions.scad>
|
||||
|
35
frame/GT2_Belt_Clamp_For_Ecksbot/functions.scad
Normal file
35
frame/GT2_Belt_Clamp_For_Ecksbot/functions.scad
Normal file
|
@ -0,0 +1,35 @@
|
|||
// PRUSA Mendel
|
||||
// Functions used in many files
|
||||
// GNU GPL v3
|
||||
// Josef Průša
|
||||
// josefprusa@me.com
|
||||
// prusadjs.cz
|
||||
// http://www.reprap.org/wiki/Prusa_Mendel
|
||||
// http://github.com/prusajr/PrusaMendel
|
||||
|
||||
|
||||
module nut(d,h,horizontal=true){
|
||||
cornerdiameter = (d / 2) / cos (180 / 6);
|
||||
cylinder(h = h, r = cornerdiameter, $fn = 6);
|
||||
if(horizontal){
|
||||
for(i = [1:6]){
|
||||
rotate([0,0,60*i]) translate([-cornerdiameter-0.2,0,0]) rotate([0,0,-45]) cube(size = [2,2,h]);
|
||||
}}
|
||||
}
|
||||
|
||||
// Based on nophead research
|
||||
module polyhole(d,h) {
|
||||
n = max(round(2 * d),3);
|
||||
rotate([0,0,180])
|
||||
cylinder(h = h, r = (d / 2) / cos (180 / n), $fn = n);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
module roundcorner(diameter){
|
||||
difference(){
|
||||
cube(size = [diameter,diameter,99], center = false);
|
||||
translate(v = [diameter, diameter, 0]) cylinder(h = 100, r=diameter, center=true);
|
||||
}
|
||||
}
|
38
frame/GT2_Belt_Clamp_For_Ecksbot/metric.scad
Normal file
38
frame/GT2_Belt_Clamp_For_Ecksbot/metric.scad
Normal file
|
@ -0,0 +1,38 @@
|
|||
// PRUSA Mendel
|
||||
// Default metric sizes
|
||||
// GNU GPL v3
|
||||
// Josef Průša
|
||||
// josefprusa@me.com
|
||||
// prusadjs.cz
|
||||
// http://www.reprap.org/wiki/Prusa_Mendel
|
||||
// http://github.com/prusajr/PrusaMendel
|
||||
|
||||
// DONT CHANGE THIS FILE! ALTER VALUES IN CONFIGURATION.SCAD INSTEAD
|
||||
|
||||
// RODS
|
||||
|
||||
threaded_rod_diameter = 8.7;
|
||||
threaded_rod_diameter_horizontal = 8.7;
|
||||
smooth_bar_diameter = 8;
|
||||
smooth_bar_diameter_horizontal = 8.5;
|
||||
|
||||
// Nuts and bolts
|
||||
|
||||
m8_diameter = 9;
|
||||
m8_nut_diameter = 14.1;
|
||||
|
||||
m4_diameter = 4.5;
|
||||
m4_nut_diameter = 9;
|
||||
|
||||
m3_diameter = 3.6;
|
||||
m3_nut_diameter = 5.3;
|
||||
m3_nut_diameter_horizontal = 6.1;
|
||||
|
||||
// Bushing holder
|
||||
|
||||
bushing_core_diameter = smooth_bar_diameter;
|
||||
bushing_material_thickness = 1;
|
||||
|
||||
// Motors
|
||||
|
||||
motor_shaft = 5.5;
|
782
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter.scad
Normal file
782
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter.scad
Normal file
|
@ -0,0 +1,782 @@
|
|||
use <vwheel_single_bearing_b17001_rev_2.scad>;
|
||||
use <makerslide.scad>;
|
||||
use <carriage_plate_standard_c14005_rev_2.scad>;
|
||||
use <misumi_2020.scad>;
|
||||
use <misumi_2040.scad>;
|
||||
use <skins.scad>;
|
||||
PI=3.14159265358979323846;
|
||||
|
||||
|
||||
|
||||
// Specify the dimensions of the usable cutting envelope you need:
|
||||
|
||||
xtravel = 1300;
|
||||
ytravel = 640;
|
||||
ztravel = 60;
|
||||
|
||||
// That's it. Configured. Hit F5.
|
||||
// Check the console window for parts list with scaled dimensions.
|
||||
// Check the display to see if everything really does line up.
|
||||
|
||||
// Set the folowing items to 1 or 0 to display or hide different
|
||||
// sections of the assembly. Probaly the first thing you want to
|
||||
// turn off is the skins, to get a better look at everything
|
||||
// else inside.
|
||||
|
||||
xy_gantry = 0 ;
|
||||
xbelt = 1 ;
|
||||
ybelts = 1 ;
|
||||
driveshafts = 1 ;
|
||||
zsystem = 0 ;
|
||||
frame = 1 ;
|
||||
cover = 0 ; cover_is_open = 1 ;
|
||||
skins = 0 ;
|
||||
skins_flat = 1 ; // hi-res 2D layout, for DXF export
|
||||
//(disables rendering of everything else)
|
||||
// press F6 for this one, then "Design"
|
||||
// menu --> "Export as DXF".
|
||||
//////////////////////////////////
|
||||
// bitlair additions //
|
||||
//////////////////////////////////
|
||||
tube = 1;
|
||||
reservoir = 1;
|
||||
voeding = 1;
|
||||
luchtcompressor = 1;
|
||||
waterpomp = 1;
|
||||
radiator = 1;
|
||||
|
||||
///////////
|
||||
// INTRO //
|
||||
///////////
|
||||
|
||||
// This is a parametric three axis motion system
|
||||
// based on Barton Dring's Buildlog.net Laser 2.0 design
|
||||
// and MakerSlide V rail system.
|
||||
// (www.buildlog.net) (www.makerslide.com)
|
||||
|
||||
// I've tried to identify all the parts that need to scale
|
||||
// to adjust the cutting envelope. This script calculates
|
||||
// the new dimensions required just for the parts that need
|
||||
// to change, and lists those results in the console window.
|
||||
// Combine these results with the Laser 2.0 BOM at Buildlog.net
|
||||
// to work up your parts orders for your own custom-sized machine.
|
||||
|
||||
// (To copy the text in the console, you might have to
|
||||
// right click --> Select All --> Copy.)
|
||||
|
||||
// The scaled skin panels can be rendered flat and exported as
|
||||
// 2D DXF files, suitable for generating cut files for a CNC
|
||||
// router, or patterns to print and cut by hand.
|
||||
|
||||
// Is it all correct? Will this really give a workable set of
|
||||
// scaled parts? Explore the model and consider it. I'm not
|
||||
// making any claims - I can only attest to my intent. I'll
|
||||
// be using it though, if I come up with money for a build soon.
|
||||
|
||||
// This work is Copyright 2011 by Michael Sheldrake
|
||||
// and licensed under a Creative Commons Attribute-Share Alike 3.0 License
|
||||
// http://creativecommons.org/licenses/by-sa/3.0/
|
||||
// Thanks go to Barton Dring for releasing his designs under
|
||||
// that same license.
|
||||
|
||||
|
||||
////////////////////////////////
|
||||
// SPECIFYING AXIS DIMENSIONS //
|
||||
////////////////////////////////
|
||||
|
||||
// The Buildlog 2.0 Laser claims "just under" a 20"x12"x4"
|
||||
// working envelope (508mm x 304.8mm x 101.6mm).
|
||||
// If you specify those dimensions here (in millimeters), the parts
|
||||
// generated should match the dimensions in bdring's Laser 2.0
|
||||
// drawings.
|
||||
|
||||
//xtravel = 508.0; // everything in millimeters
|
||||
//ytravel = 304.8; // These are the Buildlog.net
|
||||
//ztravel = 101.6; // Laser 2.0 standard dimensions.
|
||||
|
||||
//// DON'T GO TOO BIG ///
|
||||
// You want a 2'x2' system? 4'x4'? You can model that here.
|
||||
// But don't count on that design to actually work.
|
||||
// Maybe, though? Every extra inch makes it that much more
|
||||
// difficult to align and maintain rigity of the system.
|
||||
// Surely the Laser 2.0 design can add a half inch here or
|
||||
// there and work about as well. But 12"? Yards?
|
||||
// Probably not, but it's fun to look and dream:
|
||||
|
||||
//xtravel = 1500; // Way too big,
|
||||
//ytravel = 1500; // probably.
|
||||
//ztravel = 2500; // Or is it?
|
||||
|
||||
//// DON'T GO TOO SMALL ///
|
||||
// ... because a laser tube and electronics won't fit in there.
|
||||
// But if you're adapting the Laser 2.0 design to work as a
|
||||
// plotter, or something else, here's a pretty small system:
|
||||
|
||||
//xtravel = 1; // We call this
|
||||
//ytravel = 1; // "tugging the
|
||||
//ztravel = 1; // envelope".
|
||||
|
||||
// OpenSCAD FUN //
|
||||
// Animate the envelope - grow from 1x1x1 to standard Laser 2.0 size.
|
||||
// Use OpenSCAD's Animate option in the View menu.
|
||||
// (Normally animate just makes the x and y axes move.)
|
||||
// (Make sure all other lines above that set
|
||||
// xtravel, ytravel and ztravel are commented
|
||||
// out before trying this animated version.)
|
||||
|
||||
//ztarg=101.6;
|
||||
//xfact=508.0/ztarg;
|
||||
//yfact=304.8/ztarg;
|
||||
//xtravel = $t*ztarg * xfact;
|
||||
//ytravel = $t*ztarg * yfact;
|
||||
//ztravel = $t*ztarg;
|
||||
|
||||
|
||||
|
||||
|
||||
/////////////////////////
|
||||
// Constant Dimensions //
|
||||
/////////////////////////
|
||||
// Some frame dimensions don't change as we scale
|
||||
// the cutting envelope. These are candidates for
|
||||
// becoming parameters too, but I didn't do all the
|
||||
// math with changing these in mind. So inspect
|
||||
// results closely if you alter them.
|
||||
|
||||
beam_width = 20; // width of square aluminum extrusions
|
||||
half_beam_width = beam_width/2; // handy
|
||||
shaftmotorspan = 82; // stepper motor between two drive shafts
|
||||
skinThickness = 3; // Alupanel, 3mm thick
|
||||
control_space_X = 210; // width of where electroncs go
|
||||
tube_space_Y = 80; // space for laser tube behind cutting area
|
||||
top_space_Z = 140; // parts above z=0 don't scale
|
||||
wheel_plate_thk = 0.125*25.4; // MakerSlide wheel plates / brackets, 1/8" Al
|
||||
wheel_standoff = 0.25 *25.4; //
|
||||
wheel_center_off= 3; // for single-bearing delrin vwheel
|
||||
imperialFudge = 1.95; // Gantry assembly v wheel center to v wheel center comes
|
||||
// out to 728.05mm on ref design. Frame bars that seem to
|
||||
// match that length don't - they're 730mm.
|
||||
// So this little extra gets us even frame dims that match
|
||||
// reference, based on a metric span of MakerSlide, and then
|
||||
// plates and vwheels that have some imperial dimensions mixed in.
|
||||
|
||||
|
||||
///////////////////////////
|
||||
/// THE SCALING MATH ///
|
||||
///////////////////////////
|
||||
// Here's the math to make the the Buildlog 2.0 reference dimensions adjustable,
|
||||
// xyz reference frame parts - travel you get from that = base xyz vals to add your own desired travel dimensions to
|
||||
// (x rail,y rail,frame height) - ( 12" , 20" , 4" )
|
||||
// ( 703 , 560 , 310 ) - ( 508 , 304.8 , 101.6) = ( 195 , 255.2 , 208.4 )
|
||||
|
||||
// Note that we snap up to next whole mm:
|
||||
|
||||
MakerSlideXLength = ceil( 195.0 + xtravel ); // Note that we snap
|
||||
MakerSlideYLength = ceil( 255.2 + ytravel ); // up to next whole
|
||||
FrameHeight = ceil( 208.4 + ztravel ); // millimeter.
|
||||
|
||||
// similar for belts, except relative to roughly 1/2 belt length, since they loop
|
||||
// original x,y = 60",40" (1524mm,1016mm); half: (762 , 508)
|
||||
//(762 , 508) - ( 508 , 304.8 ) = ( 254 , 203.2)
|
||||
BeltXLength = 2 * (254 + xtravel);
|
||||
BeltYLength = 2 * (203.2 + ytravel);
|
||||
|
||||
// similar for Y drive shafts
|
||||
// recently updated to 14" and 12"
|
||||
// just split the difference of requested and reference ytravel between the shafts,
|
||||
// but note that these shafts at McMaster mostly come in 2" increments (and 9 and 15, and not 22)
|
||||
// original shaft sum - original xtravel
|
||||
// 26" - 20" = 6"
|
||||
shaftsum=ceil(6+(xtravel/25.4)); // inches here
|
||||
ShaftOneLength=25.4 * floor(shaftsum/2 + 1); // longer shaft, back to mm
|
||||
ShaftTwoLength=25.4 * ceil(shaftsum/2 - 1); // short shaft - there's more space
|
||||
// in assy to make this one longer
|
||||
|
||||
///////////////////////////////////
|
||||
// Derived and Scaled Dimensions //
|
||||
///////////////////////////////////
|
||||
|
||||
to_vwheel_center= wheel_plate_thk + wheel_standoff + wheel_center_off;
|
||||
scaledX = MakerSlideXLength + 2 * to_vwheel_center + imperialFudge;
|
||||
halfScaledX = scaledX/2;
|
||||
halfScaledXPlus = halfScaledX + half_beam_width;
|
||||
scaledY = MakerSlideYLength;
|
||||
halfScaledY = scaledY/2;
|
||||
halfScaledYPlus = halfScaledY + half_beam_width;
|
||||
shortHalfScaledY= halfScaledY - tube_space_Y - beam_width; // not really a half of anything
|
||||
scaledZDown = FrameHeight - top_space_Z;
|
||||
activeMakerSlideYLength = MakerSlideYLength - // this is just the portion that
|
||||
tube_space_Y - // you would use if the beam didn't
|
||||
beam_width; // reach back in to the tube space
|
||||
// to the back of the machine
|
||||
// and now ...
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////
|
||||
// RENDER THE SCALED SUBSECTIONS //
|
||||
///////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///
|
||||
if (skins_flat==1) {skins_flat();}
|
||||
else {
|
||||
if (xy_gantry==1) xy_gantry();
|
||||
if (xbelt==1) xbelt(BeltXLength);
|
||||
if (ybelts==1) ybelts(BeltYLength);
|
||||
if (driveshafts==1) driveshafts(ShaftOneLength,ShaftTwoLength);
|
||||
if (zsystem==1) zsystem();
|
||||
if (frame==1) frame();
|
||||
if (cover==1) cover(open=(cover_is_open==1));
|
||||
if (skins==1) skins();
|
||||
if (tube==1) tube();
|
||||
if (reservoir==1) reservoir();
|
||||
if (voeding==1) voeding();
|
||||
if (luchtcompressor==1) luchtcompressor();
|
||||
if (waterpomp==1) waterpomp();
|
||||
if (radiator==1) radiator();
|
||||
|
||||
|
||||
}
|
||||
///
|
||||
///
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////
|
||||
// MakerSlide components //
|
||||
///////////////////////////
|
||||
makerslide_color=[0.6,0.6,0.7];
|
||||
|
||||
// These two modules are not used
|
||||
// for the laser design, but might
|
||||
// be useful for visualizing other
|
||||
// non-laser concepts that use the
|
||||
// standard MakerSlide wheel plates.
|
||||
|
||||
module wheel_plate_assy(flip=false) {
|
||||
wheelelevation= (flip ? -1 : 1) * to_vwheel_center;
|
||||
color([0.6,0.2,0.2]) rotate(a=180) translate([-55,-80,0])
|
||||
import_stl("standard_wheel_carriage_plate.stl", convexity = 5);
|
||||
translate([42.3, -70, wheelelevation]) vwheel();
|
||||
translate([42.3, 70, wheelelevation]) vwheel();
|
||||
translate([-22.3, 0, wheelelevation]) vwheel();
|
||||
}
|
||||
module tool_carriage_assy() {
|
||||
wheelelevation= -(wheel_standoff + wheel_center_off);
|
||||
translate([0.6,0,beam_width + -wheelelevation]) {
|
||||
color([0.6,0.2,0.2]) translate([-80,45,0]) rotate([0,0,-90])
|
||||
import_stl("standard_wheel_carriage_plate.stl",convexity=5);
|
||||
translate([-32.663,0,wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
translate([32.3,-32.3,wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
translate([32.3, 32.3,wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
}
|
||||
}
|
||||
|
||||
// These three modules bring in the laser-specific
|
||||
// MakerSlide plates for the gantry assembly.
|
||||
|
||||
module left_bracket_assy() {
|
||||
color([0.6,0.2,0.2]) import_stl("gantry_end_bracket_left_rev4_mm.stl", convexity = 10);
|
||||
// Warning:
|
||||
// The bracket plus the first wheel alone, cause OpenSCAD to crash on CGAL render.
|
||||
// That region of the bracket is like a Bermuda Triangle for CGAL.
|
||||
// There should be no need to CGAL-render this assembly, but if you do,
|
||||
// comment out this first wheel.
|
||||
translate([10 + 0.315 * 25.4 , -10 - 0.719 * 25.4 , to_vwheel_center]) vwheel();
|
||||
translate([10 + 0.315 * 25.4 , 10 + 1.574 * 25.4 , to_vwheel_center]) vwheel();
|
||||
translate([10 - 2.221 * 25.4 - 0.94 , 10 - 0.01 * 25.4 , to_vwheel_center]) vwheel();
|
||||
}
|
||||
module right_bracket_assy() {
|
||||
color([0.6,0.2,0.2]) import_stl("gantry_end_bracket_right_rev_3_mm.stl", convexity = 5);
|
||||
translate([10 + 0.315 * 25.4 , -10 - 0.719 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
|
||||
translate([10 + 0.315 * 25.4 , 10 + 1.574 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
|
||||
translate([10 - 2.221 * 25.4 - 0.94 , 10 + 0.236 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
|
||||
}
|
||||
module laser_carriage_assy() {
|
||||
wheelelevation= -(wheel_standoff + wheel_center_off);
|
||||
translate([0.6,0,20 + -wheelelevation]) {
|
||||
color([0.2,0.2,0.2]) rotate([0,0,-90]) import_stl("laser_carriage_plate_rev_4_mm.stl",convexity=5);
|
||||
translate([ 32.163 , -34.925 , wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
translate([ 32.163 , 34.925 , wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
translate([-32.663 - 0.94 , 0 , wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
}
|
||||
}
|
||||
|
||||
// Gantry assembly from wheel plates above and a piece of MakerSlide V rail extrusion.
|
||||
module gantry(xref=400) {
|
||||
echo(str("GANTRY"));
|
||||
echo(str(" MakerSlide: 1 x ",MakerSlideXLength,"mm (",(MakerSlideXLength/25.4),"in)"));
|
||||
translate([0,0,25])
|
||||
rotate([0,0,-90])
|
||||
rotate([-90,-90,0]) {
|
||||
color(makerslide_color) makerslide(xref - 0.02); // minus 0.02 to avoid co-planar display glitches with end plates
|
||||
translate([0,0, xref/2]) left_bracket_assy();
|
||||
translate([0,0,-xref/2]) right_bracket_assy();
|
||||
// you might use these standard plates instead, for a non-laser assembly
|
||||
//translate([0,0, xref/2]) wheel_plate_assy();
|
||||
//translate([0,0,-xref/2]) wheel_plate_assy(flip=true);
|
||||
}
|
||||
rotate([0,0,-90])
|
||||
translate([0,sin(2*$t*360) * (xref/2 - 85),25]) { // for optional animation
|
||||
//tool_carriage_assy(); // standard plate option
|
||||
laser_carriage_assy();
|
||||
}
|
||||
}
|
||||
|
||||
// Gantry, with two pieces of MakerSlide to ride on.
|
||||
// Note the belt model thrown in, so it can ride with the gantry when animated.
|
||||
module xy_gantry() {
|
||||
animlowy = -MakerSlideYLength/2 + 80;
|
||||
animhalfspan = (MakerSlideYLength - (tube_space_Y+beam_width) - 160)/2;
|
||||
translate([-imperialFudge/2,0,0]) { // to align the whole thing with the frame assembly
|
||||
translate([0,(animlowy+animhalfspan)+sin(180+$t*360)*animhalfspan,0]) { // for animation
|
||||
gantry(MakerSlideXLength);
|
||||
}
|
||||
echo(str(" MakerSlide: 2 x ",MakerSlideYLength,"mm (",(MakerSlideYLength/25.4),"in)"));
|
||||
translate([-(MakerSlideXLength/2 + beam_width + to_vwheel_center),0,half_beam_width]) rotate([-90,0,0]) color(makerslide_color) makerslide(MakerSlideYLength);
|
||||
translate([ (MakerSlideXLength/2 + beam_width + to_vwheel_center),0,half_beam_width]) rotate([-90,0,180]) color(makerslide_color) makerslide(MakerSlideYLength);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////
|
||||
// Misumi components //
|
||||
///////////////////////////
|
||||
module frame(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight) {
|
||||
|
||||
echo(str("FRAME"));
|
||||
echo(str(" Misumi 2040:"));
|
||||
|
||||
d30027r3_9_length = scaledX + control_space_X + beam_width;
|
||||
d30027r3_9_partno = str("HFS5-2040-",d30027r3_9_length);
|
||||
d30027r3_9_count = 2;
|
||||
echo(str(" ",d30027r3_9_count," x ",d30027r3_9_partno," ",d30027r3_9_length,"mm (",(d30027r3_9_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledX , halfScaledYPlus , 0],
|
||||
[-halfScaledX ,-halfScaledYPlus , 0],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2040( d30027r3_9_length );
|
||||
}
|
||||
|
||||
echo(str(" Misumi 2020:"));
|
||||
|
||||
d30027r3_4_length = zref;
|
||||
d30027r3_4_partno = str("HFS5-2020-",d30027r3_4_length);
|
||||
d30027r3_4_count = 4;
|
||||
echo(str(" ",d30027r3_4_count," x ",d30027r3_4_partno," ",d30027r3_4_length,"mm (",(d30027r3_4_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledXPlus , halfScaledYPlus ,-scaledZDown],
|
||||
[-halfScaledXPlus ,-halfScaledYPlus ,-scaledZDown],
|
||||
[ halfScaledXPlus + control_space_X + beam_width , halfScaledYPlus ,-scaledZDown],
|
||||
[ halfScaledXPlus + control_space_X + beam_width ,-halfScaledYPlus ,-scaledZDown]
|
||||
]) {
|
||||
translate(i) misumi_2020(d30027r3_4_length);
|
||||
}
|
||||
|
||||
d30027r3_8_length = scaledX + control_space_X + beam_width;
|
||||
d30027r3_8_partno = str("HFS5-2020-",d30027r3_8_length);
|
||||
d30027r3_8_count = 3;
|
||||
echo(str(" ",d30027r3_8_count," x ",d30027r3_8_partno," ",d30027r3_8_length,"mm (",(d30027r3_8_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledX ,-halfScaledYPlus ,-scaledZDown],
|
||||
[-halfScaledX , halfScaledYPlus ,-scaledZDown],
|
||||
[-halfScaledX , halfScaledYPlus , top_space_Z - beam_width],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_8_length );
|
||||
}
|
||||
|
||||
d30027r3_6_length = scaledX;
|
||||
d30027r3_6_partno = str("HFS5-2020-",d30027r3_6_length);
|
||||
d30027r3_6_count = 3;
|
||||
echo(str(" ",d30027r3_6_count," x ",d30027r3_6_partno," ",d30027r3_6_length,"mm (",(d30027r3_6_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledX ,-halfScaledYPlus , top_space_Z - 2*beam_width],
|
||||
[-halfScaledX , halfScaledYPlus - (tube_space_Y+beam_width),-scaledZDown],
|
||||
[-halfScaledX , halfScaledYPlus - (tube_space_Y+beam_width), top_space_Z - beam_width],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_6_length );
|
||||
}
|
||||
|
||||
d30027r3_notshown_length = scaledX - 5;
|
||||
d30027r3_notshown_partno = str("HFS5-2020-",d30027r3_notshown_length);
|
||||
d30027r3_notshown_count = 1;
|
||||
echo(str(" ",d30027r3_notshown_count," x ",d30027r3_notshown_partno," ",d30027r3_notshown_length,"mm (",(d30027r3_notshown_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledX ,halfScaledYPlus - (tube_space_Y+beam_width), half_beam_width],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_notshown_length );
|
||||
}
|
||||
|
||||
d30027r3_5_length = yref;
|
||||
d30027r3_5_partno = str("HFS5-2020-",d30027r3_5_length);
|
||||
d30027r3_5_count = 7; // drawing shows 6, coming revision has one more
|
||||
echo(str(" ",d30027r3_5_count," x ",d30027r3_5_partno," ",d30027r3_5_length,"mm (",(d30027r3_5_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledXPlus , halfScaledY ,-scaledZDown],
|
||||
[-halfScaledXPlus , halfScaledY , top_space_Z-beam_width],
|
||||
[ halfScaledXPlus , halfScaledY ,-scaledZDown],
|
||||
[ halfScaledXPlus , halfScaledY , top_space_Z-beam_width],
|
||||
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY ,-scaledZDown],
|
||||
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY , half_beam_width],
|
||||
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY , top_space_Z-beam_width]
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020(d30027r3_5_length);
|
||||
}
|
||||
|
||||
d30027r3_3_length = control_space_X + beam_width;
|
||||
d30027r3_3_partno = str("HFS5-2020-",d30027r3_3_length);;
|
||||
d30027r3_3_count = 1;
|
||||
echo(str(" ",d30027r3_3_count," x ",d30027r3_3_partno," ",d30027r3_3_length,"mm (",(d30027r3_3_length/25.4),"in)"));
|
||||
translate([halfScaledX,-halfScaledYPlus, top_space_Z-half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_3_length );
|
||||
|
||||
d30027r3_7_length = top_space_Z - beam_width - beam_width - half_beam_width;
|
||||
d30027r3_7_partno = str("HFS5-2020-",d30027r3_7_length);
|
||||
d30027r3_7_count = 1;
|
||||
echo(str(" ",d30027r3_7_count," x ",d30027r3_7_partno," ",d30027r3_7_length,"mm (",(d30027r3_7_length/25.4),"in)"));
|
||||
translate([halfScaledXPlus,-halfScaledYPlus,3*half_beam_width]) misumi_2020( d30027r3_7_length );
|
||||
|
||||
d30027r3_2_length = scaledZDown - half_beam_width;
|
||||
d30027r3_2_partno = str("HFS5-2020-",d30027r3_2_length);
|
||||
d30027r3_2_count = 1;
|
||||
echo(str(" ",d30027r3_2_count," x ",d30027r3_2_partno," ",d30027r3_2_length,"mm (",(d30027r3_2_length/25.4),"in)"));
|
||||
translate([half_beam_width,halfScaledYPlus - (tube_space_Y+beam_width),-scaledZDown + 2*half_beam_width]) misumi_2020( d30027r3_2_length );
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/////////////////////
|
||||
// cover, or lid //
|
||||
/////////////////////
|
||||
|
||||
module cover(open=false) {
|
||||
lidSideGap = 2.5; //mm
|
||||
lidHingeGap = 0; //mm, maybe up to 1mm , based on Misumi hinge drawing
|
||||
lidYPartLength=scaledY - tube_space_Y - 2*beam_width;
|
||||
echo(str("COVER"));
|
||||
|
||||
d30013r3_8_length = scaledX - 2 * lidSideGap;
|
||||
d30013r3_8_partno = str("HFS5-2020-",d30013r3_8_length);
|
||||
d30013r3_8_count = 2;
|
||||
echo(str(" ",d30013r3_8_count," x ",d30013r3_8_partno," ",d30013r3_8_length,"mm (",(d30013r3_8_length/25.4),"in)"));
|
||||
|
||||
d30013r3_7_length = lidYPartLength;
|
||||
d30013r3_7_partno = str("HFS5-2020-",d30013r3_7_length);
|
||||
d30013r3_7_count = 2;
|
||||
echo(str(" ",d30013r3_7_count," x ",d30013r3_7_partno," ",d30013r3_7_length,"mm (",(d30013r3_7_length/25.4),"in)"));
|
||||
|
||||
// cover window panel
|
||||
echo(str("COVER WINDOW PANEL"));
|
||||
echo(str(" ",(2 * (halfScaledX - lidSideGap)),"mm x ",(lidYPartLength+2*beam_width),"mm (",((2 * (halfScaledX - lidSideGap))/25.4),"in x ",((lidYPartLength+2*beam_width)/25.4),"in)"));
|
||||
|
||||
ot=[0,-shortHalfScaledY,-top_space_Z-5];
|
||||
or=[-92*(open?1:0),0,0];
|
||||
translate(-1*ot) rotate(or) translate(ot) {
|
||||
for(i=[
|
||||
[-halfScaledX + lidSideGap , shortHalfScaledY - half_beam_width - lidHingeGap - beam_width - lidYPartLength, top_space_Z-beam_width],
|
||||
[-halfScaledX + lidSideGap , shortHalfScaledY - half_beam_width - lidHingeGap, top_space_Z-beam_width],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30013r3_8_length );
|
||||
}
|
||||
for(i=[
|
||||
[-(halfScaledXPlus - 2*half_beam_width - lidSideGap) , shortHalfScaledY - beam_width - lidHingeGap , top_space_Z-beam_width],
|
||||
[ (halfScaledXPlus - 2*half_beam_width - lidSideGap) , shortHalfScaledY - beam_width - lidHingeGap , top_space_Z-beam_width],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020( d30013r3_7_length );
|
||||
}
|
||||
color([0.7,0.7,1.0,0.5]) translate([-halfScaledX + lidSideGap,-halfScaledY - beam_width - lidHingeGap ,top_space_Z]) cube([(2 * (halfScaledX - lidSideGap)),(lidYPartLength+2*beam_width),skinThickness]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////
|
||||
// gantry timing belts //
|
||||
///////////////////////////
|
||||
module xbelt(beltlength=20) {
|
||||
echo(str(" EconoBelt: 1 x ",beltlength,"mm (cut) (",ceil(beltlength/25.4),"in, rounded up)"));
|
||||
animlowy = -MakerSlideYLength/2 + 80;
|
||||
animhalfspan = (MakerSlideYLength - (tube_space_Y+beam_width) - 160)/2;
|
||||
translate([-imperialFudge/2,(animlowy+animhalfspan)+sin(180+$t*360)*animhalfspan,0]) { // animation - should correspond to gantry motion
|
||||
translate([-MakerSlideXLength/2 + 4,35,65]) rotate([90,0,0]) belt(beltlength);
|
||||
}
|
||||
}
|
||||
module ybelts(beltlength=20) {
|
||||
echo(str(" EconoBelt: 2 x ",beltlength,"mm (cut) (",ceil(beltlength/25.4),"in, rounded up)"));
|
||||
translate([-MakerSlideXLength/2 + 5 ,(MakerSlideYLength)/2-55,-34]) rotate([90,0,-90]) belt(beltlength);
|
||||
translate([ MakerSlideXLength/2 - 5 - imperialFudge,(MakerSlideYLength)/2-55,-34]) rotate([90,0,-90]) belt(beltlength);
|
||||
}
|
||||
module belt(ref) {
|
||||
geardiam=25.4 * 0.489; //0.489" OD, but that might be for flange?
|
||||
beltwidth=25.4/4;
|
||||
beltthick=25.4/16;
|
||||
halflength=ref/2;
|
||||
gearcenter=(ref - (PI * geardiam)) / 2;
|
||||
color([0.2,0.2,0.2])
|
||||
difference() {
|
||||
intersection() {
|
||||
union() {
|
||||
cylinder(r=geardiam/2,h=beltwidth*1.1,center=true);
|
||||
translate([gearcenter,0,0]) cylinder(r=geardiam/2,h=beltwidth*1.1,center=true);
|
||||
translate([0,-geardiam/2,-beltwidth*1.11/2]) cube([gearcenter,geardiam,beltwidth*1.11],center=false);
|
||||
}
|
||||
translate([(gearcenter + geardiam*2.2)/2 - geardiam,0,0]) cube([gearcenter + geardiam*2.2,geardiam*2.2,beltwidth],center=true);
|
||||
}
|
||||
union() {
|
||||
translate([0,0,0]) cylinder(r=geardiam/2 - beltthick,h=beltwidth*1.2,center=true);
|
||||
translate([gearcenter,0,0]) cylinder(r=geardiam/2-beltthick,h=beltwidth*1.2,center=true);
|
||||
translate([0,-(geardiam-2*beltthick)/2,-beltwidth*1.12/2]) cube([gearcenter,geardiam-2*beltthick,beltwidth*1.21],center=false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////
|
||||
// y drive shafts //
|
||||
//////////////////////
|
||||
|
||||
module driveshafts(shaftlengthone=14*25.4,shaftlengthtwo=12*25.4) {
|
||||
echo(str(" (shaft src): 1 x ",ShaftOneLength,"mm (",(ShaftOneLength/25.4),"in)"));
|
||||
echo(str(" (shaft src): 1 x ",ShaftTwoLength,"mm (",(ShaftTwoLength/25.4),"in)"));
|
||||
translate([-12.525,MakerSlideYLength/2 - (tube_space_Y+beam_width) + half_beam_width + 32.766,-34]) {
|
||||
translate([-MakerSlideXLength/2,0,0]) driveshaft(shaftlengthone);
|
||||
translate([-MakerSlideXLength/2+shaftlengthone+shaftmotorspan,0,0]) driveshaft(shaftlengthtwo);
|
||||
}
|
||||
}
|
||||
module driveshaft(length=254) {
|
||||
color([0.35,0.35,0.4]) rotate([0,90,0]) cylinder(r=25.4*0.125,h=length,center=false);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
// z table, leadscrews, drive belt //
|
||||
///////////////////////////////////////
|
||||
module zsystem() {
|
||||
|
||||
// z table frame - ref is 580 wide, with 370s butting
|
||||
halfZsX = halfScaledX - 100;
|
||||
halfZsOtherX = halfScaledX - 50; // from original specs, where 730 - (580 + 100) = right side spacing of z table = 50
|
||||
zXSpan=halfZsOtherX + halfZsX;
|
||||
zYGap=25;//from original specs, where[ (halfScaledY + (halfScaledYPlus - 100 - half_beam_width)) - (370+2*20) ] * 0.5 = gap
|
||||
//[ (280 + (290 - 100 - 10)) - (370+2*20) ] * 0.5 = gap = (460 - 410) *0.5 = 25 = nice.
|
||||
zYSpan=(halfScaledY + (halfScaledYPlus - (tube_space_Y+beam_width) - half_beam_width)) - 2*zYGap;
|
||||
echo(str("Z TABLE"));
|
||||
|
||||
d30014r2_4_length = zXSpan;
|
||||
d30014r2_4_partno = str("HFS5-2020-",d30014r2_4_length);
|
||||
d30014r2_4_count = 2;
|
||||
echo(str(" ",d30014r2_4_count," x ",d30014r2_4_partno," ",d30014r2_4_length,"mm (",(d30014r2_4_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfZsX , -halfScaledY + half_beam_width + zYGap , -scaledZDown/6],
|
||||
[-halfZsX ,-(halfScaledY-half_beam_width - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30014r2_4_length );
|
||||
}
|
||||
|
||||
d30014r2_3_length = zYSpan-2*beam_width;
|
||||
d30014r2_3_partno = str("HFS5-2020-",d30014r2_3_length);
|
||||
d30014r2_3_count = 2;
|
||||
echo(str(" ",d30014r2_3_count," x ",d30014r2_3_partno," ",d30014r2_3_length,"mm (",(d30014r2_3_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-(halfZsX - half_beam_width) , -(halfScaledY - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
|
||||
[(halfZsOtherX - half_beam_width) , -(halfScaledY - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020( d30014r2_3_length );
|
||||
}
|
||||
|
||||
|
||||
// z table panel
|
||||
echo(str("Z TABLE PANEL"));
|
||||
echo(str(" 1 x C19010 ",zXSpan,"mm x ",zYSpan,"mm (",(zXSpan/25.4),"in x ",(zYSpan/25.4),"in)"));
|
||||
// (not shown)
|
||||
|
||||
// z lead screws
|
||||
zLeadScrewHeight=scaledZDown - 2*half_beam_width + (11/16)*25.4 + 3*half_beam_width + 5.7375;
|
||||
echo(str("Z LEADSCREWS"));
|
||||
|
||||
B18009_0800_length = zLeadScrewHeight;
|
||||
B18009_0800_partno = str("B18009-xxxx (0.25in,20tpi threaded rod)");
|
||||
B18009_0800_count = 3;
|
||||
echo(str(" ",B18009_0800_count," x ",B18009_0800_partno," ",B18009_0800_length,"mm (",(B18009_0800_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfZsX + zXSpan*(85/580) , -halfScaledY + half_beam_width ,0],
|
||||
[-halfZsX + zXSpan*(435/580), -halfScaledY + half_beam_width ,0],
|
||||
[-halfZsX + zXSpan*(435/580), (halfScaledY - half_beam_width) - (tube_space_Y+beam_width),0],
|
||||
]) {
|
||||
translate(i) translate([0,0,-scaledZDown+(2*half_beam_width - (11/16)*25.4)]) color([0.3,0.3,0.5]) cylinder(r=25.4/8,h=B18009_0800_length,center=false);
|
||||
}
|
||||
|
||||
B18009_1000_length = zLeadScrewHeight+(2*25.4);
|
||||
B18009_1000_partno = str("B18009-xxxx (0.25in,20tpi threaded rod)");
|
||||
B18009_1000_count = 1;
|
||||
echo(str(" ",B18009_1000_count," x ",B18009_1000_partno," ",B18009_1000_length,"mm (",(B18009_1000_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfZsX + zXSpan*(85/580) , (halfScaledY - half_beam_width) - (tube_space_Y+beam_width),0],
|
||||
]) {
|
||||
translate(i) translate([0,0,-scaledZDown+(2*half_beam_width - (11/16)*25.4)]) color([0.3,0.3,0.5]) cylinder(r=25.4/8,h=B18009_1000_length,center=false);
|
||||
}
|
||||
|
||||
//z belt - belt display is more approximate than actual length calculation
|
||||
beltthick=1.14;//mm
|
||||
pd=0.48*25.4 + beltthick;
|
||||
pext=PI*pd;
|
||||
zby1=(((halfScaledY - half_beam_width) - (tube_space_Y+beam_width)) + (halfScaledY - half_beam_width)); //yspans
|
||||
zby2=zby1;
|
||||
zbx1=(zXSpan*(435/580) - zXSpan*(85/580)); // straight xspan
|
||||
zbx2=sqrt(pow(30,2)+pow(pd,2)) + sqrt( pow( (zXSpan*(435/580) - zXSpan*(85/580)) - 30 , 2 ) + pow(pd,2)); // xspan with slack for tensioner
|
||||
zbl = zby1 +
|
||||
zby2 +
|
||||
zbx1 +
|
||||
zbx2 +
|
||||
pext // extra around corners of pulleys
|
||||
;
|
||||
|
||||
echo(str("Z CLOSED BELT"));
|
||||
B28035_length = zbl;
|
||||
B28035_partno = str("B28035 (loop timing belt)");
|
||||
B28035_count = 1;
|
||||
echo(str(" EconoBelt: ",B28035_count," x ",B28035_partno," : close to ",B28035_length,"mm (~",(round(10*B28035_length/25.4)/10),"in, rounded)"));
|
||||
color([0.2,0.2,0.2])
|
||||
translate([(zbx1+pd)/2 + (-halfZsX + zXSpan*(85/580)) - pd/2,- ((zby1+pd)/2 + (-(halfScaledY - half_beam_width)+ (tube_space_Y+beam_width)) - pd/2),-scaledZDown+5.5/16*25.4]) {
|
||||
difference() {
|
||||
difference() {
|
||||
cube([zbx1+pd,zby1+pd,25.4/4],center=true);
|
||||
translate([-(zbx1+pd)/2 + 30+pd,(zby1+pd)/2 - pd,-25.4/4.5])
|
||||
rotate([0,0,90 - atan2(0.48*25.4,30)])
|
||||
cube([zbx1+pd,zby1+pd,25.4/2]);
|
||||
translate([-(zbx1+pd)/2 + 30+pd,(zby1+pd)/2 - pd,-25.4/4.5])
|
||||
rotate([0,0,90 - atan2( (zXSpan*(435/580) - zXSpan*(85/580)) - 30 ,0.48*25.4)])
|
||||
cube([zbx1+pd,zby1+pd,25.4/2]);
|
||||
}
|
||||
difference() {
|
||||
cube([zbx1+pd-4,zby1+pd-4,25.4/2],center=true);
|
||||
translate([-(zbx1+pd+4)/2 + 30+pd,(zby1+pd-4)/2 - pd,-25.4/4.5])
|
||||
rotate([0,0,90 - atan2(0.48*25.4,30)])
|
||||
cube([zbx1+pd,zby1+pd,25.4/2]);
|
||||
translate([-(zbx1+pd+4)/2 + 30+pd,(zby1+pd-4)/2 - pd,-25.4/4.5])
|
||||
rotate([0,0,90 - atan2((zXSpan*(435/580) - zXSpan*(85/580)) - 30,0.48*25.4)])
|
||||
cube([zbx1+pd,zby1+pd,25.4/2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////
|
||||
// skins //
|
||||
//////////////////////
|
||||
module skins(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight,skinThickness=skinThickness) {
|
||||
|
||||
S_L = -2 + beam_width + scaledX + beam_width + control_space_X + beam_width;
|
||||
S_W = -2 + yref + beam_width + beam_width;
|
||||
S_H = -2 + zref;
|
||||
|
||||
//echo(str("SKIN DIMS LxWxH: ",S_L," x ",S_W," x ",S_H)); // s/b 998 x 598 x 308 for reference design
|
||||
|
||||
color([0.25,0.30,0.45]) {
|
||||
|
||||
translate([1 + -halfScaledX-2*half_beam_width,-halfScaledY-2*half_beam_width,1 + -scaledZDown])
|
||||
rotate([90,0,0])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_front(S_L,S_H);
|
||||
translate([1 + -halfScaledX-2*half_beam_width + S_L,halfScaledY+2*half_beam_width,1 + -scaledZDown])
|
||||
rotate([90,0,180])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_back(S_L,S_H);
|
||||
translate([1 + -halfScaledX-2*half_beam_width + S_L-1,-halfScaledY-2*half_beam_width + 1,1 + -scaledZDown])
|
||||
rotate([90,0,90])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_side(S_W,S_H);
|
||||
translate([1 + -halfScaledX-2*half_beam_width -1 , halfScaledY+2*half_beam_width - 1,1 + -scaledZDown])
|
||||
rotate([90,0,-90])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_side(S_W,S_H);
|
||||
translate([1 + -halfScaledX-2*half_beam_width,1 + -halfScaledY-2*half_beam_width,-scaledZDown-skinThickness])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_bottom(S_L,S_W);
|
||||
translate([ -halfScaledX-2*half_beam_width , halfScaledY - 99,zref-scaledZDown])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_top_back(S_L,S_W);
|
||||
translate([1 + -halfScaledX-2*half_beam_width + S_L ,1 + -halfScaledY-2*half_beam_width,zref-scaledZDown])
|
||||
rotate([0,0,90])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_top_right(S_W);
|
||||
translate([1 + -halfScaledX-2*half_beam_width + 18,1 + -halfScaledY-2*half_beam_width,zref-scaledZDown])
|
||||
rotate([0,0,90])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_top_left(S_W);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////
|
||||
// skins for DXF - 2D layout //
|
||||
//////////////////////////////////
|
||||
module skins_flat(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight) {
|
||||
|
||||
// Turn up the resolution on this one
|
||||
$fa=2;
|
||||
$fs=0.2;
|
||||
echo("\nCGAL RENDER MIGHT TAKE A FEW MINUTES\n(resolution turned up to get smooth circles)\n");
|
||||
|
||||
//!linear_extrude(height=10) cable_slot();
|
||||
S_L = -2 + beam_width + scaledX + beam_width + control_space_X + beam_width;
|
||||
S_W = -2 + yref + beam_width + beam_width;
|
||||
S_H = -2 + zref;
|
||||
|
||||
//echo(str("SKIN DIMS LxWxH: ",S_L," x ",S_W," x ",S_H)); // s/b 998 x 598 x 308 for reference design
|
||||
|
||||
margin=25.4;
|
||||
|
||||
color([0.25,0.30,0.45]) {
|
||||
|
||||
|
||||
skin_bottom(S_L,S_W);
|
||||
translate([0,S_W + margin + 0 * (S_H + margin)]) 2D_stack_layout(S_H + margin) {
|
||||
skin_front(S_L,S_H);
|
||||
skin_back(S_L,S_H);
|
||||
skin_side(S_W,S_H);
|
||||
skin_side(S_W,S_H);
|
||||
skin_top_back(S_L,S_W);
|
||||
skin_top_right(S_W);
|
||||
skin_top_left(S_W);
|
||||
}
|
||||
}
|
||||
}
|
||||
//////////////////////////////////////////////////////////
|
||||
// tube //
|
||||
//////////////////////////////////////////////////////////
|
||||
module tube() {
|
||||
echo(str("tube"));
|
||||
translate([-720,405,70])rotate([0,90,0])cylinder(r=28,h=1600);
|
||||
}
|
||||
module reservoir() {
|
||||
echo(str("reservoir"));
|
||||
color([0,0,10])translate([915,80,-110])rotate([0,0,90])cylinder(r=62,h=210);
|
||||
}
|
||||
module voeding() {
|
||||
echo(str("voeding 173 * 97 * 280"));
|
||||
translate([980,180,-110])rotate([0,0,90])cube([280,173,97]);
|
||||
}
|
||||
module luchtcompressor() {
|
||||
echo(str("luchtcompressor 182*95*116"));
|
||||
color([0.3,0.2,0.9])translate([920,-400,-100])rotate([0,0,90])cube([182,95,116]);
|
||||
}
|
||||
module waterpomp() {
|
||||
echo(str("waterpomp 147*115*75"));
|
||||
color([0,0,10])translate([850,-150,-100])rotate([90,0,90])cube([147,115,75]);
|
||||
}
|
||||
module radiator() {
|
||||
echo(str("radiator 396*120*30 ==> 60 incl fans"));
|
||||
color([0,0,10])translate([950,-380,-105])rotate([90,0,90])cube([396,120,60]);
|
||||
}
|
||||
module 2D_stack_layout(step) {for (i=[0:$children-1]) {translate([0,i*step]) child(i);}}
|
144848
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter24-10.bak000.dxf
Normal file
144848
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter24-10.bak000.dxf
Normal file
File diff suppressed because it is too large
Load diff
93254
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter24-10.dxf
Normal file
93254
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter24-10.dxf
Normal file
File diff suppressed because it is too large
Load diff
144622
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter31-10.dxf
Normal file
144622
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutter31-10.dxf
Normal file
File diff suppressed because it is too large
Load diff
74408
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels.bak000.dxf
Normal file
74408
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels.bak000.dxf
Normal file
File diff suppressed because it is too large
Load diff
64210
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels.dxf
Normal file
64210
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels.dxf
Normal file
File diff suppressed because it is too large
Load diff
61246
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels17-10.dxf
Normal file
61246
frame/Scalable_Buildlog_net_Laser_2/bitlairlasercutterpanels17-10.dxf
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,83 @@
|
|||
// MakerSlide Component
|
||||
// http://www.makerslide.com
|
||||
// c14005_rev_2
|
||||
// Standard Wheel Carriage Plate
|
||||
// Original by Barton Dring
|
||||
// OpenSCAD model by Mike Sheldrake
|
||||
|
||||
standard_wheel_carriage_plate();
|
||||
|
||||
module standard_wheel_carriage_plate(thickness=3.175) {
|
||||
color([175/255,178/255,183/255])
|
||||
difference() {
|
||||
|
||||
// 90mm by 160mm plate
|
||||
// 3.175mm thick by default,
|
||||
// but you can pass a different thickness to this module
|
||||
cube([90,160,3.175],center=false);
|
||||
|
||||
// 5mm diam. holes
|
||||
for(i=[
|
||||
[12.7,10],
|
||||
[12.7,30],
|
||||
[12.7,70],
|
||||
[12.7,80],
|
||||
[12.7,90],
|
||||
[12.7,112.3],
|
||||
[12.7,130],
|
||||
[12.7,150],
|
||||
[35,10],
|
||||
[35,60],
|
||||
[35,80],
|
||||
[35,100],
|
||||
[35,150],
|
||||
[45,70],
|
||||
[45,90],
|
||||
[55,10],
|
||||
[55,60],
|
||||
[55,80],
|
||||
[55,100],
|
||||
[55,150],
|
||||
[77.3,30],
|
||||
[77.3,70],
|
||||
[77.3,90],
|
||||
[77.3,112.3],
|
||||
[77.3,130],
|
||||
|
||||
//These are 5mm holes in the 7mm hole spots that we will do next.
|
||||
//For some reason including them here too makes the OpenCSG display look right.
|
||||
//Not needed for CGAL render though.
|
||||
[12.7,47.7],
|
||||
[45,47.7],
|
||||
[77.3,10],
|
||||
[77.3,47.7],
|
||||
[77.3,80],
|
||||
[77.3,150]
|
||||
|
||||
]) { translate([i[0],i[1],-0.2]) cylinder(h=thickness+1,r=5/2,center=false); }
|
||||
|
||||
// 7mm diam. holes
|
||||
for(i=[
|
||||
[12.7,47.7],
|
||||
[45,47.7],
|
||||
[77.3,10],
|
||||
[77.3,47.7],
|
||||
[77.3,80],
|
||||
[77.3,150]
|
||||
]) { translate([i[0],i[1],-0.2]) cylinder(h=thickness+1,r=7/2,center=false); }
|
||||
|
||||
// rounded corners on plate
|
||||
for(i=[
|
||||
[0,0,0],
|
||||
[90,160,180],
|
||||
[90,0,90],
|
||||
[0,160,270]
|
||||
]
|
||||
) {
|
||||
translate([i[0],i[1],0]) rotate(a=[0,0,i[2]]) translate([10,10,-0.1]) rotate(a=[0,0,180]) difference() {
|
||||
cube([11,11,thickness+1],center=false);
|
||||
translate([0,0,-0.1]) cylinder(h=thickness+2,r=10,center=false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
5
frame/Scalable_Buildlog_net_Laser_2/makerslide.scad
Normal file
5
frame/Scalable_Buildlog_net_Laser_2/makerslide.scad
Normal file
|
@ -0,0 +1,5 @@
|
|||
module makerslide(h=100) {
|
||||
linear_extrude(file="makerslide_extrusion_profile.dxf", layer="makerslide",height=h, center=true, convexity=10);
|
||||
}
|
||||
|
||||
makerslide(100);
|
4134
frame/Scalable_Buildlog_net_Laser_2/makerslide_extrusion_profile.dxf
Normal file
4134
frame/Scalable_Buildlog_net_Laser_2/makerslide_extrusion_profile.dxf
Normal file
File diff suppressed because it is too large
Load diff
2
frame/Scalable_Buildlog_net_Laser_2/misumi_2020.scad
Normal file
2
frame/Scalable_Buildlog_net_Laser_2/misumi_2020.scad
Normal file
|
@ -0,0 +1,2 @@
|
|||
module misumi_2020(h=100) {color([0.7,0.7,0.7]) linear_extrude(file="misumi_2020_extrusion_profile.dxf", layer="8",height=h, center=false, convexity=10);}
|
||||
misumi_2020();
|
File diff suppressed because it is too large
Load diff
2
frame/Scalable_Buildlog_net_Laser_2/misumi_2040.scad
Normal file
2
frame/Scalable_Buildlog_net_Laser_2/misumi_2040.scad
Normal file
|
@ -0,0 +1,2 @@
|
|||
module misumi_2040(h=100) {color([0.7,0.7,0.7]) linear_extrude(file="misumi_2040_extrusion_profile.dxf", layer="0",height=h, center=false, convexity=10);}
|
||||
misumi_2040();
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,740 @@
|
|||
use <vwheel_single_bearing_b17001_rev_2.scad>;
|
||||
use <makerslide.scad>;
|
||||
use <carriage_plate_standard_c14005_rev_2.scad>;
|
||||
use <misumi_2020.scad>;
|
||||
use <misumi_2040.scad>;
|
||||
use <skins.scad>;
|
||||
PI=3.14159265358979323846;
|
||||
|
||||
|
||||
|
||||
// Specify the dimensions of the usable cutting envelope you need:
|
||||
|
||||
xtravel = 26.5 * 25.4; // The dims I need.
|
||||
ytravel = 13.5 * 25.4; // Over-spec'd a bit.
|
||||
ztravel = 2.5 * 25.4; // Millimeters.
|
||||
|
||||
// That's it. Configured. Hit F5.
|
||||
// Check the console window for parts list with scaled dimensions.
|
||||
// Check the display to see if everything really does line up.
|
||||
|
||||
// Set the folowing items to 1 or 0 to display or hide different
|
||||
// sections of the assembly. Probaly the first thing you want to
|
||||
// turn off is the skins, to get a better look at everything
|
||||
// else inside.
|
||||
|
||||
xy_gantry = 1 ;
|
||||
xbelt = 1 ;
|
||||
ybelts = 1 ;
|
||||
driveshafts = 1 ;
|
||||
zsystem = 1 ;
|
||||
frame = 1 ;
|
||||
cover = 1 ; cover_is_open = 1 ;
|
||||
skins = 1 ;
|
||||
skins_flat = 0 ; // hi-res 2D layout, for DXF export
|
||||
//(disables rendering of everything else)
|
||||
// press F6 for this one, then "Design"
|
||||
// menu --> "Export as DXF".
|
||||
|
||||
|
||||
///////////
|
||||
// INTRO //
|
||||
///////////
|
||||
|
||||
// This is a parametric three axis motion system
|
||||
// based on Barton Dring's Buildlog.net Laser 2.0 design
|
||||
// and MakerSlide V rail system.
|
||||
// (www.buildlog.net) (www.makerslide.com)
|
||||
|
||||
// I've tried to identify all the parts that need to scale
|
||||
// to adjust the cutting envelope. This script calculates
|
||||
// the new dimensions required just for the parts that need
|
||||
// to change, and lists those results in the console window.
|
||||
// Combine these results with the Laser 2.0 BOM at Buildlog.net
|
||||
// to work up your parts orders for your own custom-sized machine.
|
||||
|
||||
// (To copy the text in the console, you might have to
|
||||
// right click --> Select All --> Copy.)
|
||||
|
||||
// The scaled skin panels can be rendered flat and exported as
|
||||
// 2D DXF files, suitable for generating cut files for a CNC
|
||||
// router, or patterns to print and cut by hand.
|
||||
|
||||
// Is it all correct? Will this really give a workable set of
|
||||
// scaled parts? Explore the model and consider it. I'm not
|
||||
// making any claims - I can only attest to my intent. I'll
|
||||
// be using it though, if I come up with money for a build soon.
|
||||
|
||||
// This work is Copyright 2011 by Michael Sheldrake
|
||||
// and licensed under a Creative Commons Attribute-Share Alike 3.0 License
|
||||
// http://creativecommons.org/licenses/by-sa/3.0/
|
||||
// Thanks go to Barton Dring for releasing his designs under
|
||||
// that same license.
|
||||
|
||||
|
||||
////////////////////////////////
|
||||
// SPECIFYING AXIS DIMENSIONS //
|
||||
////////////////////////////////
|
||||
|
||||
// The Buildlog 2.0 Laser claims "just under" a 20"x12"x4"
|
||||
// working envelope (508mm x 304.8mm x 101.6mm).
|
||||
// If you specify those dimensions here (in millimeters), the parts
|
||||
// generated should match the dimensions in bdring's Laser 2.0
|
||||
// drawings.
|
||||
|
||||
//xtravel = 508.0; // everything in millimeters
|
||||
//ytravel = 304.8; // These are the Buildlog.net
|
||||
//ztravel = 101.6; // Laser 2.0 standard dimensions.
|
||||
|
||||
//// DON'T GO TOO BIG ///
|
||||
// You want a 2'x2' system? 4'x4'? You can model that here.
|
||||
// But don't count on that design to actually work.
|
||||
// Maybe, though? Every extra inch makes it that much more
|
||||
// difficult to align and maintain rigity of the system.
|
||||
// Surely the Laser 2.0 design can add a half inch here or
|
||||
// there and work about as well. But 12"? Yards?
|
||||
// Probably not, but it's fun to look and dream:
|
||||
|
||||
//xtravel = 1500; // Way too big,
|
||||
//ytravel = 1500; // probably.
|
||||
//ztravel = 2500; // Or is it?
|
||||
|
||||
//// DON'T GO TOO SMALL ///
|
||||
// ... because a laser tube and electronics won't fit in there.
|
||||
// But if you're adapting the Laser 2.0 design to work as a
|
||||
// plotter, or something else, here's a pretty small system:
|
||||
|
||||
//xtravel = 1; // We call this
|
||||
//ytravel = 1; // "tugging the
|
||||
//ztravel = 1; // envelope".
|
||||
|
||||
// OpenSCAD FUN //
|
||||
// Animate the envelope - grow from 1x1x1 to standard Laser 2.0 size.
|
||||
// Use OpenSCAD's Animate option in the View menu.
|
||||
// (Normally animate just makes the x and y axes move.)
|
||||
// (Make sure all other lines above that set
|
||||
// xtravel, ytravel and ztravel are commented
|
||||
// out before trying this animated version.)
|
||||
|
||||
//ztarg=101.6;
|
||||
//xfact=508.0/ztarg;
|
||||
//yfact=304.8/ztarg;
|
||||
//xtravel = $t*ztarg * xfact;
|
||||
//ytravel = $t*ztarg * yfact;
|
||||
//ztravel = $t*ztarg;
|
||||
|
||||
|
||||
|
||||
|
||||
/////////////////////////
|
||||
// Constant Dimensions //
|
||||
/////////////////////////
|
||||
// Some frame dimensions don't change as we scale
|
||||
// the cutting envelope. These are candidates for
|
||||
// becoming parameters too, but I didn't do all the
|
||||
// math with changing these in mind. So inspect
|
||||
// results closely if you alter them.
|
||||
|
||||
beam_width = 20; // width of square aluminum extrusions
|
||||
half_beam_width = beam_width/2; // handy
|
||||
shaftmotorspan = 82; // stepper motor between two drive shafts
|
||||
skinThickness = 3; // Alupanel, 3mm thick
|
||||
control_space_X = 210; // width of where electroncs go
|
||||
tube_space_Y = 80; // space for laser tube behind cutting area
|
||||
top_space_Z = 140; // parts above z=0 don't scale
|
||||
wheel_plate_thk = 0.125*25.4; // MakerSlide wheel plates / brackets, 1/8" Al
|
||||
wheel_standoff = 0.25 *25.4; //
|
||||
wheel_center_off= 3; // for single-bearing delrin vwheel
|
||||
imperialFudge = 1.95; // Gantry assembly v wheel center to v wheel center comes
|
||||
// out to 728.05mm on ref design. Frame bars that seem to
|
||||
// match that length don't - they're 730mm.
|
||||
// So this little extra gets us even frame dims that match
|
||||
// reference, based on a metric span of MakerSlide, and then
|
||||
// plates and vwheels that have some imperial dimensions mixed in.
|
||||
|
||||
|
||||
///////////////////////////
|
||||
/// THE SCALING MATH ///
|
||||
///////////////////////////
|
||||
// Here's the math to make the the Buildlog 2.0 reference dimensions adjustable,
|
||||
// xyz reference frame parts - travel you get from that = base xyz vals to add your own desired travel dimensions to
|
||||
// (x rail,y rail,frame height) - ( 12" , 20" , 4" )
|
||||
// ( 703 , 560 , 310 ) - ( 508 , 304.8 , 101.6) = ( 195 , 255.2 , 208.4 )
|
||||
|
||||
// Note that we snap up to next whole mm:
|
||||
|
||||
MakerSlideXLength = ceil( 195.0 + xtravel ); // Note that we snap
|
||||
MakerSlideYLength = ceil( 255.2 + ytravel ); // up to next whole
|
||||
FrameHeight = ceil( 208.4 + ztravel ); // millimeter.
|
||||
|
||||
// similar for belts, except relative to roughly 1/2 belt length, since they loop
|
||||
// original x,y = 60",40" (1524mm,1016mm); half: (762 , 508)
|
||||
//(762 , 508) - ( 508 , 304.8 ) = ( 254 , 203.2)
|
||||
BeltXLength = 2 * (254 + xtravel);
|
||||
BeltYLength = 2 * (203.2 + ytravel);
|
||||
|
||||
// similar for Y drive shafts
|
||||
// recently updated to 14" and 12"
|
||||
// just split the difference of requested and reference ytravel between the shafts,
|
||||
// but note that these shafts at McMaster mostly come in 2" increments (and 9 and 15, and not 22)
|
||||
// original shaft sum - original xtravel
|
||||
// 26" - 20" = 6"
|
||||
shaftsum=ceil(6+(xtravel/25.4)); // inches here
|
||||
ShaftOneLength=25.4 * floor(shaftsum/2 + 1); // longer shaft, back to mm
|
||||
ShaftTwoLength=25.4 * ceil(shaftsum/2 - 1); // short shaft - there's more space
|
||||
// in assy to make this one longer
|
||||
|
||||
///////////////////////////////////
|
||||
// Derived and Scaled Dimensions //
|
||||
///////////////////////////////////
|
||||
|
||||
to_vwheel_center= wheel_plate_thk + wheel_standoff + wheel_center_off;
|
||||
scaledX = MakerSlideXLength + 2 * to_vwheel_center + imperialFudge;
|
||||
halfScaledX = scaledX/2;
|
||||
halfScaledXPlus = halfScaledX + half_beam_width;
|
||||
scaledY = MakerSlideYLength;
|
||||
halfScaledY = scaledY/2;
|
||||
halfScaledYPlus = halfScaledY + half_beam_width;
|
||||
shortHalfScaledY= halfScaledY - tube_space_Y - beam_width; // not really a half of anything
|
||||
scaledZDown = FrameHeight - top_space_Z;
|
||||
activeMakerSlideYLength = MakerSlideYLength - // this is just the portion that
|
||||
tube_space_Y - // you would use if the beam didn't
|
||||
beam_width; // reach back in to the tube space
|
||||
// to the back of the machine
|
||||
// and now ...
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////
|
||||
// RENDER THE SCALED SUBSECTIONS //
|
||||
///////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///
|
||||
if (skins_flat==1) {skins_flat();}
|
||||
else {
|
||||
if (xy_gantry==1) xy_gantry();
|
||||
if (xbelt==1) xbelt(BeltXLength);
|
||||
if (ybelts==1) ybelts(BeltYLength);
|
||||
if (driveshafts==1) driveshafts(ShaftOneLength,ShaftTwoLength);
|
||||
if (zsystem==1) zsystem();
|
||||
if (frame==1) frame();
|
||||
if (cover==1) cover(open=(cover_is_open==1));
|
||||
if (skins==1) skins();
|
||||
}
|
||||
///
|
||||
///
|
||||
/////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////
|
||||
// MakerSlide components //
|
||||
///////////////////////////
|
||||
makerslide_color=[0.6,0.6,0.7];
|
||||
|
||||
// These two modules are not used
|
||||
// for the laser design, but might
|
||||
// be useful for visualizing other
|
||||
// non-laser concepts that use the
|
||||
// standard MakerSlide wheel plates.
|
||||
|
||||
module wheel_plate_assy(flip=false) {
|
||||
wheelelevation= (flip ? -1 : 1) * to_vwheel_center;
|
||||
color([0.6,0.2,0.2]) rotate(a=180) translate([-55,-80,0])
|
||||
import_stl("standard_wheel_carriage_plate.stl", convexity = 5);
|
||||
translate([42.3, -70, wheelelevation]) vwheel();
|
||||
translate([42.3, 70, wheelelevation]) vwheel();
|
||||
translate([-22.3, 0, wheelelevation]) vwheel();
|
||||
}
|
||||
module tool_carriage_assy() {
|
||||
wheelelevation= -(wheel_standoff + wheel_center_off);
|
||||
translate([0.6,0,beam_width + -wheelelevation]) {
|
||||
color([0.6,0.2,0.2]) translate([-80,45,0]) rotate([0,0,-90])
|
||||
import_stl("standard_wheel_carriage_plate.stl",convexity=5);
|
||||
translate([-32.663,0,wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
translate([32.3,-32.3,wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
translate([32.3, 32.3,wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
}
|
||||
}
|
||||
|
||||
// These three modules bring in the laser-specific
|
||||
// MakerSlide plates for the gantry assembly.
|
||||
|
||||
module left_bracket_assy() {
|
||||
color([0.6,0.2,0.2]) import_stl("gantry_end_bracket_left_rev4_mm.stl", convexity = 10);
|
||||
// Warning:
|
||||
// The bracket plus the first wheel alone, cause OpenSCAD to crash on CGAL render.
|
||||
// That region of the bracket is like a Bermuda Triangle for CGAL.
|
||||
// There should be no need to CGAL-render this assembly, but if you do,
|
||||
// comment out this first wheel.
|
||||
translate([10 + 0.315 * 25.4 , -10 - 0.719 * 25.4 , to_vwheel_center]) vwheel();
|
||||
translate([10 + 0.315 * 25.4 , 10 + 1.574 * 25.4 , to_vwheel_center]) vwheel();
|
||||
translate([10 - 2.221 * 25.4 - 0.94 , 10 - 0.01 * 25.4 , to_vwheel_center]) vwheel();
|
||||
}
|
||||
module right_bracket_assy() {
|
||||
color([0.6,0.2,0.2]) import_stl("gantry_end_bracket_right_rev_3_mm.stl", convexity = 5);
|
||||
translate([10 + 0.315 * 25.4 , -10 - 0.719 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
|
||||
translate([10 + 0.315 * 25.4 , 10 + 1.574 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
|
||||
translate([10 - 2.221 * 25.4 - 0.94 , 10 + 0.236 * 25.4 , -to_vwheel_center]) rotate([180,0,0]) vwheel();
|
||||
}
|
||||
module laser_carriage_assy() {
|
||||
wheelelevation= -(wheel_standoff + wheel_center_off);
|
||||
translate([0.6,0,20 + -wheelelevation]) {
|
||||
color([0.2,0.2,0.2]) rotate([0,0,-90]) import_stl("laser_carriage_plate_rev_4_mm.stl",convexity=5);
|
||||
translate([ 32.163 , -34.925 , wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
translate([ 32.163 , 34.925 , wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
translate([-32.663 - 0.94 , 0 , wheelelevation]) rotate([180,0,0]) vwheel();
|
||||
}
|
||||
}
|
||||
|
||||
// Gantry assembly from wheel plates above and a piece of MakerSlide V rail extrusion.
|
||||
module gantry(xref=400) {
|
||||
echo(str("GANTRY"));
|
||||
echo(str(" MakerSlide: 1 x ",MakerSlideXLength,"mm (",(MakerSlideXLength/25.4),"in)"));
|
||||
translate([0,0,25])
|
||||
rotate([0,0,-90])
|
||||
rotate([-90,-90,0]) {
|
||||
color(makerslide_color) makerslide(xref - 0.02); // minus 0.02 to avoid co-planar display glitches with end plates
|
||||
translate([0,0, xref/2]) left_bracket_assy();
|
||||
translate([0,0,-xref/2]) right_bracket_assy();
|
||||
// you might use these standard plates instead, for a non-laser assembly
|
||||
//translate([0,0, xref/2]) wheel_plate_assy();
|
||||
//translate([0,0,-xref/2]) wheel_plate_assy(flip=true);
|
||||
}
|
||||
rotate([0,0,-90])
|
||||
translate([0,sin(2*$t*360) * (xref/2 - 85),25]) { // for optional animation
|
||||
//tool_carriage_assy(); // standard plate option
|
||||
laser_carriage_assy();
|
||||
}
|
||||
}
|
||||
|
||||
// Gantry, with two pieces of MakerSlide to ride on.
|
||||
// Note the belt model thrown in, so it can ride with the gantry when animated.
|
||||
module xy_gantry() {
|
||||
animlowy = -MakerSlideYLength/2 + 80;
|
||||
animhalfspan = (MakerSlideYLength - (tube_space_Y+beam_width) - 160)/2;
|
||||
translate([-imperialFudge/2,0,0]) { // to align the whole thing with the frame assembly
|
||||
translate([0,(animlowy+animhalfspan)+sin(180+$t*360)*animhalfspan,0]) { // for animation
|
||||
gantry(MakerSlideXLength);
|
||||
}
|
||||
echo(str(" MakerSlide: 2 x ",MakerSlideYLength,"mm (",(MakerSlideYLength/25.4),"in)"));
|
||||
translate([-(MakerSlideXLength/2 + beam_width + to_vwheel_center),0,half_beam_width]) rotate([-90,0,0]) color(makerslide_color) makerslide(MakerSlideYLength);
|
||||
translate([ (MakerSlideXLength/2 + beam_width + to_vwheel_center),0,half_beam_width]) rotate([-90,0,180]) color(makerslide_color) makerslide(MakerSlideYLength);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////
|
||||
// Misumi components //
|
||||
///////////////////////////
|
||||
module frame(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight) {
|
||||
|
||||
echo(str("FRAME"));
|
||||
echo(str(" Misumi 2040:"));
|
||||
|
||||
d30027r3_9_length = scaledX + control_space_X + beam_width;
|
||||
d30027r3_9_partno = str("HFS5-2040-",d30027r3_9_length);
|
||||
d30027r3_9_count = 2;
|
||||
echo(str(" ",d30027r3_9_count," x ",d30027r3_9_partno," ",d30027r3_9_length,"mm (",(d30027r3_9_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledX , halfScaledYPlus , 0],
|
||||
[-halfScaledX ,-halfScaledYPlus , 0],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2040( d30027r3_9_length );
|
||||
}
|
||||
|
||||
echo(str(" Misumi 2020:"));
|
||||
|
||||
d30027r3_4_length = zref;
|
||||
d30027r3_4_partno = str("HFS5-2020-",d30027r3_4_length);
|
||||
d30027r3_4_count = 4;
|
||||
echo(str(" ",d30027r3_4_count," x ",d30027r3_4_partno," ",d30027r3_4_length,"mm (",(d30027r3_4_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledXPlus , halfScaledYPlus ,-scaledZDown],
|
||||
[-halfScaledXPlus ,-halfScaledYPlus ,-scaledZDown],
|
||||
[ halfScaledXPlus + control_space_X + beam_width , halfScaledYPlus ,-scaledZDown],
|
||||
[ halfScaledXPlus + control_space_X + beam_width ,-halfScaledYPlus ,-scaledZDown]
|
||||
]) {
|
||||
translate(i) misumi_2020(d30027r3_4_length);
|
||||
}
|
||||
|
||||
d30027r3_8_length = scaledX + control_space_X + beam_width;
|
||||
d30027r3_8_partno = str("HFS5-2020-",d30027r3_8_length);
|
||||
d30027r3_8_count = 3;
|
||||
echo(str(" ",d30027r3_8_count," x ",d30027r3_8_partno," ",d30027r3_8_length,"mm (",(d30027r3_8_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledX ,-halfScaledYPlus ,-scaledZDown],
|
||||
[-halfScaledX , halfScaledYPlus ,-scaledZDown],
|
||||
[-halfScaledX , halfScaledYPlus , top_space_Z - beam_width],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_8_length );
|
||||
}
|
||||
|
||||
d30027r3_6_length = scaledX;
|
||||
d30027r3_6_partno = str("HFS5-2020-",d30027r3_6_length);
|
||||
d30027r3_6_count = 3;
|
||||
echo(str(" ",d30027r3_6_count," x ",d30027r3_6_partno," ",d30027r3_6_length,"mm (",(d30027r3_6_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledX ,-halfScaledYPlus , top_space_Z - 2*beam_width],
|
||||
[-halfScaledX , halfScaledYPlus - (tube_space_Y+beam_width),-scaledZDown],
|
||||
[-halfScaledX , halfScaledYPlus - (tube_space_Y+beam_width), top_space_Z - beam_width],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_6_length );
|
||||
}
|
||||
|
||||
d30027r3_notshown_length = scaledX - 5;
|
||||
d30027r3_notshown_partno = str("HFS5-2020-",d30027r3_notshown_length);
|
||||
d30027r3_notshown_count = 1;
|
||||
echo(str(" ",d30027r3_notshown_count," x ",d30027r3_notshown_partno," ",d30027r3_notshown_length,"mm (",(d30027r3_notshown_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledX ,halfScaledYPlus - (tube_space_Y+beam_width), half_beam_width],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_notshown_length );
|
||||
}
|
||||
|
||||
d30027r3_5_length = yref;
|
||||
d30027r3_5_partno = str("HFS5-2020-",d30027r3_5_length);
|
||||
d30027r3_5_count = 7; // drawing shows 6, coming revision has one more
|
||||
echo(str(" ",d30027r3_5_count," x ",d30027r3_5_partno," ",d30027r3_5_length,"mm (",(d30027r3_5_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfScaledXPlus , halfScaledY ,-scaledZDown],
|
||||
[-halfScaledXPlus , halfScaledY , top_space_Z-beam_width],
|
||||
[ halfScaledXPlus , halfScaledY ,-scaledZDown],
|
||||
[ halfScaledXPlus , halfScaledY , top_space_Z-beam_width],
|
||||
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY ,-scaledZDown],
|
||||
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY , half_beam_width],
|
||||
[ halfScaledXPlus + control_space_X + beam_width , halfScaledY , top_space_Z-beam_width]
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020(d30027r3_5_length);
|
||||
}
|
||||
|
||||
d30027r3_3_length = control_space_X + beam_width;
|
||||
d30027r3_3_partno = str("HFS5-2020-",d30027r3_3_length);;
|
||||
d30027r3_3_count = 1;
|
||||
echo(str(" ",d30027r3_3_count," x ",d30027r3_3_partno," ",d30027r3_3_length,"mm (",(d30027r3_3_length/25.4),"in)"));
|
||||
translate([halfScaledX,-halfScaledYPlus, top_space_Z-half_beam_width]) rotate([0,90,0]) misumi_2020( d30027r3_3_length );
|
||||
|
||||
d30027r3_7_length = top_space_Z - beam_width - beam_width - half_beam_width;
|
||||
d30027r3_7_partno = str("HFS5-2020-",d30027r3_7_length);
|
||||
d30027r3_7_count = 1;
|
||||
echo(str(" ",d30027r3_7_count," x ",d30027r3_7_partno," ",d30027r3_7_length,"mm (",(d30027r3_7_length/25.4),"in)"));
|
||||
translate([halfScaledXPlus,-halfScaledYPlus,3*half_beam_width]) misumi_2020( d30027r3_7_length );
|
||||
|
||||
d30027r3_2_length = scaledZDown - half_beam_width;
|
||||
d30027r3_2_partno = str("HFS5-2020-",d30027r3_2_length);
|
||||
d30027r3_2_count = 1;
|
||||
echo(str(" ",d30027r3_2_count," x ",d30027r3_2_partno," ",d30027r3_2_length,"mm (",(d30027r3_2_length/25.4),"in)"));
|
||||
translate([half_beam_width,halfScaledYPlus - (tube_space_Y+beam_width),-scaledZDown + 2*half_beam_width]) misumi_2020( d30027r3_2_length );
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/////////////////////
|
||||
// cover, or lid //
|
||||
/////////////////////
|
||||
|
||||
module cover(open=false) {
|
||||
lidSideGap = 2.5; //mm
|
||||
lidHingeGap = 0; //mm, maybe up to 1mm , based on Misumi hinge drawing
|
||||
lidYPartLength=scaledY - tube_space_Y - 2*beam_width;
|
||||
echo(str("COVER"));
|
||||
|
||||
d30013r3_8_length = scaledX - 2 * lidSideGap;
|
||||
d30013r3_8_partno = str("HFS5-2020-",d30013r3_8_length);
|
||||
d30013r3_8_count = 2;
|
||||
echo(str(" ",d30013r3_8_count," x ",d30013r3_8_partno," ",d30013r3_8_length,"mm (",(d30013r3_8_length/25.4),"in)"));
|
||||
|
||||
d30013r3_7_length = lidYPartLength;
|
||||
d30013r3_7_partno = str("HFS5-2020-",d30013r3_7_length);
|
||||
d30013r3_7_count = 2;
|
||||
echo(str(" ",d30013r3_7_count," x ",d30013r3_7_partno," ",d30013r3_7_length,"mm (",(d30013r3_7_length/25.4),"in)"));
|
||||
|
||||
// cover window panel
|
||||
echo(str("COVER WINDOW PANEL"));
|
||||
echo(str(" ",(2 * (halfScaledX - lidSideGap)),"mm x ",(lidYPartLength+2*beam_width),"mm (",((2 * (halfScaledX - lidSideGap))/25.4),"in x ",((lidYPartLength+2*beam_width)/25.4),"in)"));
|
||||
|
||||
ot=[0,-shortHalfScaledY,-top_space_Z-5];
|
||||
or=[-92*(open?1:0),0,0];
|
||||
translate(-1*ot) rotate(or) translate(ot) {
|
||||
for(i=[
|
||||
[-halfScaledX + lidSideGap , shortHalfScaledY - half_beam_width - lidHingeGap - beam_width - lidYPartLength, top_space_Z-beam_width],
|
||||
[-halfScaledX + lidSideGap , shortHalfScaledY - half_beam_width - lidHingeGap, top_space_Z-beam_width],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30013r3_8_length );
|
||||
}
|
||||
for(i=[
|
||||
[-(halfScaledXPlus - 2*half_beam_width - lidSideGap) , shortHalfScaledY - beam_width - lidHingeGap , top_space_Z-beam_width],
|
||||
[ (halfScaledXPlus - 2*half_beam_width - lidSideGap) , shortHalfScaledY - beam_width - lidHingeGap , top_space_Z-beam_width],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020( d30013r3_7_length );
|
||||
}
|
||||
color([0.7,0.7,1.0,0.5]) translate([-halfScaledX + lidSideGap,-halfScaledY - beam_width - lidHingeGap ,top_space_Z]) cube([(2 * (halfScaledX - lidSideGap)),(lidYPartLength+2*beam_width),skinThickness]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////
|
||||
// gantry timing belts //
|
||||
///////////////////////////
|
||||
module xbelt(beltlength=20) {
|
||||
echo(str(" EconoBelt: 1 x ",beltlength,"mm (cut) (",ceil(beltlength/25.4),"in, rounded up)"));
|
||||
animlowy = -MakerSlideYLength/2 + 80;
|
||||
animhalfspan = (MakerSlideYLength - (tube_space_Y+beam_width) - 160)/2;
|
||||
translate([-imperialFudge/2,(animlowy+animhalfspan)+sin(180+$t*360)*animhalfspan,0]) { // animation - should correspond to gantry motion
|
||||
translate([-MakerSlideXLength/2 + 4,35,65]) rotate([90,0,0]) belt(beltlength);
|
||||
}
|
||||
}
|
||||
module ybelts(beltlength=20) {
|
||||
echo(str(" EconoBelt: 2 x ",beltlength,"mm (cut) (",ceil(beltlength/25.4),"in, rounded up)"));
|
||||
translate([-MakerSlideXLength/2 + 5 ,(MakerSlideYLength)/2-55,-34]) rotate([90,0,-90]) belt(beltlength);
|
||||
translate([ MakerSlideXLength/2 - 5 - imperialFudge,(MakerSlideYLength)/2-55,-34]) rotate([90,0,-90]) belt(beltlength);
|
||||
}
|
||||
module belt(ref) {
|
||||
geardiam=25.4 * 0.489; //0.489" OD, but that might be for flange?
|
||||
beltwidth=25.4/4;
|
||||
beltthick=25.4/16;
|
||||
halflength=ref/2;
|
||||
gearcenter=(ref - (PI * geardiam)) / 2;
|
||||
color([0.2,0.2,0.2])
|
||||
difference() {
|
||||
intersection() {
|
||||
union() {
|
||||
cylinder(r=geardiam/2,h=beltwidth*1.1,center=true);
|
||||
translate([gearcenter,0,0]) cylinder(r=geardiam/2,h=beltwidth*1.1,center=true);
|
||||
translate([0,-geardiam/2,-beltwidth*1.11/2]) cube([gearcenter,geardiam,beltwidth*1.11],center=false);
|
||||
}
|
||||
translate([(gearcenter + geardiam*2.2)/2 - geardiam,0,0]) cube([gearcenter + geardiam*2.2,geardiam*2.2,beltwidth],center=true);
|
||||
}
|
||||
union() {
|
||||
translate([0,0,0]) cylinder(r=geardiam/2 - beltthick,h=beltwidth*1.2,center=true);
|
||||
translate([gearcenter,0,0]) cylinder(r=geardiam/2-beltthick,h=beltwidth*1.2,center=true);
|
||||
translate([0,-(geardiam-2*beltthick)/2,-beltwidth*1.12/2]) cube([gearcenter,geardiam-2*beltthick,beltwidth*1.21],center=false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////
|
||||
// y drive shafts //
|
||||
//////////////////////
|
||||
|
||||
module driveshafts(shaftlengthone=14*25.4,shaftlengthtwo=12*25.4) {
|
||||
echo(str(" (shaft src): 1 x ",ShaftOneLength,"mm (",(ShaftOneLength/25.4),"in)"));
|
||||
echo(str(" (shaft src): 1 x ",ShaftTwoLength,"mm (",(ShaftTwoLength/25.4),"in)"));
|
||||
translate([-12.525,MakerSlideYLength/2 - (tube_space_Y+beam_width) + half_beam_width + 32.766,-34]) {
|
||||
translate([-MakerSlideXLength/2,0,0]) driveshaft(shaftlengthone);
|
||||
translate([-MakerSlideXLength/2+shaftlengthone+shaftmotorspan,0,0]) driveshaft(shaftlengthtwo);
|
||||
}
|
||||
}
|
||||
module driveshaft(length=254) {
|
||||
color([0.35,0.35,0.4]) rotate([0,90,0]) cylinder(r=25.4*0.125,h=length,center=false);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
// z table, leadscrews, drive belt //
|
||||
///////////////////////////////////////
|
||||
module zsystem() {
|
||||
|
||||
// z table frame - ref is 580 wide, with 370s butting
|
||||
halfZsX = halfScaledX - 100;
|
||||
halfZsOtherX = halfScaledX - 50; // from original specs, where 730 - (580 + 100) = right side spacing of z table = 50
|
||||
zXSpan=halfZsOtherX + halfZsX;
|
||||
zYGap=25;//from original specs, where[ (halfScaledY + (halfScaledYPlus - 100 - half_beam_width)) - (370+2*20) ] * 0.5 = gap
|
||||
//[ (280 + (290 - 100 - 10)) - (370+2*20) ] * 0.5 = gap = (460 - 410) *0.5 = 25 = nice.
|
||||
zYSpan=(halfScaledY + (halfScaledYPlus - (tube_space_Y+beam_width) - half_beam_width)) - 2*zYGap;
|
||||
echo(str("Z TABLE"));
|
||||
|
||||
d30014r2_4_length = zXSpan;
|
||||
d30014r2_4_partno = str("HFS5-2020-",d30014r2_4_length);
|
||||
d30014r2_4_count = 2;
|
||||
echo(str(" ",d30014r2_4_count," x ",d30014r2_4_partno," ",d30014r2_4_length,"mm (",(d30014r2_4_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfZsX , -halfScaledY + half_beam_width + zYGap , -scaledZDown/6],
|
||||
[-halfZsX ,-(halfScaledY-half_beam_width - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([0,90,0]) misumi_2020( d30014r2_4_length );
|
||||
}
|
||||
|
||||
d30014r2_3_length = zYSpan-2*beam_width;
|
||||
d30014r2_3_partno = str("HFS5-2020-",d30014r2_3_length);
|
||||
d30014r2_3_count = 2;
|
||||
echo(str(" ",d30014r2_3_count," x ",d30014r2_3_partno," ",d30014r2_3_length,"mm (",(d30014r2_3_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-(halfZsX - half_beam_width) , -(halfScaledY - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
|
||||
[(halfZsOtherX - half_beam_width) , -(halfScaledY - zYGap) + zYSpan - 2*half_beam_width , -scaledZDown/6],
|
||||
]) {
|
||||
translate(i) translate([0,0,half_beam_width]) rotate([90,0,0]) misumi_2020( d30014r2_3_length );
|
||||
}
|
||||
|
||||
|
||||
// z table panel
|
||||
echo(str("Z TABLE PANEL"));
|
||||
echo(str(" 1 x C19010 ",zXSpan,"mm x ",zYSpan,"mm (",(zXSpan/25.4),"in x ",(zYSpan/25.4),"in)"));
|
||||
// (not shown)
|
||||
|
||||
// z lead screws
|
||||
zLeadScrewHeight=scaledZDown - 2*half_beam_width + (11/16)*25.4 + 3*half_beam_width + 5.7375;
|
||||
echo(str("Z LEADSCREWS"));
|
||||
|
||||
B18009_0800_length = zLeadScrewHeight;
|
||||
B18009_0800_partno = str("B18009-xxxx (0.25in,20tpi threaded rod)");
|
||||
B18009_0800_count = 3;
|
||||
echo(str(" ",B18009_0800_count," x ",B18009_0800_partno," ",B18009_0800_length,"mm (",(B18009_0800_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfZsX + zXSpan*(85/580) , -halfScaledY + half_beam_width ,0],
|
||||
[-halfZsX + zXSpan*(435/580), -halfScaledY + half_beam_width ,0],
|
||||
[-halfZsX + zXSpan*(435/580), (halfScaledY - half_beam_width) - (tube_space_Y+beam_width),0],
|
||||
]) {
|
||||
translate(i) translate([0,0,-scaledZDown+(2*half_beam_width - (11/16)*25.4)]) color([0.3,0.3,0.5]) cylinder(r=25.4/8,h=B18009_0800_length,center=false);
|
||||
}
|
||||
|
||||
B18009_1000_length = zLeadScrewHeight+(2*25.4);
|
||||
B18009_1000_partno = str("B18009-xxxx (0.25in,20tpi threaded rod)");
|
||||
B18009_1000_count = 1;
|
||||
echo(str(" ",B18009_1000_count," x ",B18009_1000_partno," ",B18009_1000_length,"mm (",(B18009_1000_length/25.4),"in)"));
|
||||
for(i=[
|
||||
[-halfZsX + zXSpan*(85/580) , (halfScaledY - half_beam_width) - (tube_space_Y+beam_width),0],
|
||||
]) {
|
||||
translate(i) translate([0,0,-scaledZDown+(2*half_beam_width - (11/16)*25.4)]) color([0.3,0.3,0.5]) cylinder(r=25.4/8,h=B18009_1000_length,center=false);
|
||||
}
|
||||
|
||||
//z belt - belt display is more approximate than actual length calculation
|
||||
beltthick=1.14;//mm
|
||||
pd=0.48*25.4 + beltthick;
|
||||
pext=PI*pd;
|
||||
zby1=(((halfScaledY - half_beam_width) - (tube_space_Y+beam_width)) + (halfScaledY - half_beam_width)); //yspans
|
||||
zby2=zby1;
|
||||
zbx1=(zXSpan*(435/580) - zXSpan*(85/580)); // straight xspan
|
||||
zbx2=sqrt(pow(30,2)+pow(pd,2)) + sqrt( pow( (zXSpan*(435/580) - zXSpan*(85/580)) - 30 , 2 ) + pow(pd,2)); // xspan with slack for tensioner
|
||||
zbl = zby1 +
|
||||
zby2 +
|
||||
zbx1 +
|
||||
zbx2 +
|
||||
pext // extra around corners of pulleys
|
||||
;
|
||||
|
||||
echo(str("Z CLOSED BELT"));
|
||||
B28035_length = zbl;
|
||||
B28035_partno = str("B28035 (loop timing belt)");
|
||||
B28035_count = 1;
|
||||
echo(str(" EconoBelt: ",B28035_count," x ",B28035_partno," : close to ",B28035_length,"mm (~",(round(10*B28035_length/25.4)/10),"in, rounded)"));
|
||||
color([0.2,0.2,0.2])
|
||||
translate([(zbx1+pd)/2 + (-halfZsX + zXSpan*(85/580)) - pd/2,- ((zby1+pd)/2 + (-(halfScaledY - half_beam_width)+ (tube_space_Y+beam_width)) - pd/2),-scaledZDown+5.5/16*25.4]) {
|
||||
difference() {
|
||||
difference() {
|
||||
cube([zbx1+pd,zby1+pd,25.4/4],center=true);
|
||||
translate([-(zbx1+pd)/2 + 30+pd,(zby1+pd)/2 - pd,-25.4/4.5])
|
||||
rotate([0,0,90 - atan2(0.48*25.4,30)])
|
||||
cube([zbx1+pd,zby1+pd,25.4/2]);
|
||||
translate([-(zbx1+pd)/2 + 30+pd,(zby1+pd)/2 - pd,-25.4/4.5])
|
||||
rotate([0,0,90 - atan2( (zXSpan*(435/580) - zXSpan*(85/580)) - 30 ,0.48*25.4)])
|
||||
cube([zbx1+pd,zby1+pd,25.4/2]);
|
||||
}
|
||||
difference() {
|
||||
cube([zbx1+pd-4,zby1+pd-4,25.4/2],center=true);
|
||||
translate([-(zbx1+pd+4)/2 + 30+pd,(zby1+pd-4)/2 - pd,-25.4/4.5])
|
||||
rotate([0,0,90 - atan2(0.48*25.4,30)])
|
||||
cube([zbx1+pd,zby1+pd,25.4/2]);
|
||||
translate([-(zbx1+pd+4)/2 + 30+pd,(zby1+pd-4)/2 - pd,-25.4/4.5])
|
||||
rotate([0,0,90 - atan2((zXSpan*(435/580) - zXSpan*(85/580)) - 30,0.48*25.4)])
|
||||
cube([zbx1+pd,zby1+pd,25.4/2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////
|
||||
// skins //
|
||||
//////////////////////
|
||||
module skins(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight,skinThickness=skinThickness) {
|
||||
|
||||
S_L = -2 + beam_width + scaledX + beam_width + control_space_X + beam_width;
|
||||
S_W = -2 + yref + beam_width + beam_width;
|
||||
S_H = -2 + zref;
|
||||
|
||||
//echo(str("SKIN DIMS LxWxH: ",S_L," x ",S_W," x ",S_H)); // s/b 998 x 598 x 308 for reference design
|
||||
|
||||
color([0.25,0.30,0.45]) {
|
||||
|
||||
translate([1 + -halfScaledX-2*half_beam_width,-halfScaledY-2*half_beam_width,1 + -scaledZDown])
|
||||
rotate([90,0,0])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_front(S_L,S_H);
|
||||
translate([1 + -halfScaledX-2*half_beam_width + S_L,halfScaledY+2*half_beam_width,1 + -scaledZDown])
|
||||
rotate([90,0,180])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_back(S_L,S_H);
|
||||
translate([1 + -halfScaledX-2*half_beam_width + S_L-1,-halfScaledY-2*half_beam_width + 1,1 + -scaledZDown])
|
||||
rotate([90,0,90])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_side(S_W,S_H);
|
||||
translate([1 + -halfScaledX-2*half_beam_width -1 , halfScaledY+2*half_beam_width - 1,1 + -scaledZDown])
|
||||
rotate([90,0,-90])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_side(S_W,S_H);
|
||||
translate([1 + -halfScaledX-2*half_beam_width,1 + -halfScaledY-2*half_beam_width,-scaledZDown-skinThickness])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_bottom(S_L,S_W);
|
||||
translate([ -halfScaledX-2*half_beam_width , halfScaledY - 99,zref-scaledZDown])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_top_back(S_L,S_W);
|
||||
translate([1 + -halfScaledX-2*half_beam_width + S_L ,1 + -halfScaledY-2*half_beam_width,zref-scaledZDown])
|
||||
rotate([0,0,90])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_top_right(S_W);
|
||||
translate([1 + -halfScaledX-2*half_beam_width + 18,1 + -halfScaledY-2*half_beam_width,zref-scaledZDown])
|
||||
rotate([0,0,90])
|
||||
linear_extrude(height=skinThickness)
|
||||
skin_top_left(S_W);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////
|
||||
// skins for DXF - 2D layout //
|
||||
//////////////////////////////////
|
||||
module skins_flat(xref=MakerSlideXLength,yref=MakerSlideYLength,zref=FrameHeight) {
|
||||
|
||||
// Turn up the resolution on this one
|
||||
$fa=2;
|
||||
$fs=0.2;
|
||||
echo("\nCGAL RENDER MIGHT TAKE A FEW MINUTES\n(resolution turned up to get smooth circles)\n");
|
||||
|
||||
//!linear_extrude(height=10) cable_slot();
|
||||
S_L = -2 + beam_width + scaledX + beam_width + control_space_X + beam_width;
|
||||
S_W = -2 + yref + beam_width + beam_width;
|
||||
S_H = -2 + zref;
|
||||
|
||||
//echo(str("SKIN DIMS LxWxH: ",S_L," x ",S_W," x ",S_H)); // s/b 998 x 598 x 308 for reference design
|
||||
|
||||
margin=25.4;
|
||||
|
||||
color([0.25,0.30,0.45]) {
|
||||
|
||||
|
||||
skin_bottom(S_L,S_W);
|
||||
translate([0,S_W + margin + 0 * (S_H + margin)]) 2D_stack_layout(S_H + margin) {
|
||||
skin_front(S_L,S_H);
|
||||
skin_back(S_L,S_H);
|
||||
skin_side(S_W,S_H);
|
||||
skin_side(S_W,S_H);
|
||||
skin_top_back(S_L,S_W);
|
||||
skin_top_right(S_W);
|
||||
skin_top_left(S_W);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module 2D_stack_layout(step) {for (i=[0:$children-1]) {translate([0,i*step]) child(i);}}
|
992
frame/Scalable_Buildlog_net_Laser_2/prerendered_tube_slots.dxf
Normal file
992
frame/Scalable_Buildlog_net_Laser_2/prerendered_tube_slots.dxf
Normal file
|
@ -0,0 +1,992 @@
|
|||
0
|
||||
SECTION
|
||||
2
|
||||
HEADER
|
||||
9
|
||||
$ACADVER
|
||||
1
|
||||
AC1015
|
||||
0
|
||||
ENDSEC
|
||||
0
|
||||
SECTION
|
||||
2
|
||||
BLOCKS
|
||||
0
|
||||
ENDSEC
|
||||
0
|
||||
SECTION
|
||||
2
|
||||
ENTITIES
|
||||
0
|
||||
LWPOLYLINE
|
||||
8
|
||||
0
|
||||
90
|
||||
78
|
||||
70
|
||||
1
|
||||
10
|
||||
-12.500000
|
||||
20
|
||||
-2.000000
|
||||
10
|
||||
-12.500000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
-12.000000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
-12.000000
|
||||
20
|
||||
0.010000
|
||||
10
|
||||
-11.453000
|
||||
20
|
||||
0.030000
|
||||
10
|
||||
-10.735000
|
||||
20
|
||||
0.163000
|
||||
10
|
||||
-10.044000
|
||||
20
|
||||
0.398000
|
||||
10
|
||||
-9.395000
|
||||
20
|
||||
0.732000
|
||||
10
|
||||
-8.802000
|
||||
20
|
||||
1.157000
|
||||
10
|
||||
-8.276000
|
||||
20
|
||||
1.663000
|
||||
10
|
||||
-7.830000
|
||||
20
|
||||
2.241000
|
||||
10
|
||||
-7.473000
|
||||
20
|
||||
2.878000
|
||||
10
|
||||
-7.212000
|
||||
20
|
||||
3.560000
|
||||
10
|
||||
-7.053000
|
||||
20
|
||||
4.272000
|
||||
10
|
||||
-7.000000
|
||||
20
|
||||
5.000000
|
||||
10
|
||||
-7.000000
|
||||
20
|
||||
21.876000
|
||||
10
|
||||
-7.053000
|
||||
20
|
||||
22.604000
|
||||
10
|
||||
-7.212000
|
||||
20
|
||||
23.316000
|
||||
10
|
||||
-7.473000
|
||||
20
|
||||
23.998000
|
||||
10
|
||||
-7.744000
|
||||
20
|
||||
24.482000
|
||||
10
|
||||
-8.249000
|
||||
20
|
||||
25.237000
|
||||
10
|
||||
-8.800000
|
||||
20
|
||||
26.355000
|
||||
10
|
||||
-9.200000
|
||||
20
|
||||
27.535000
|
||||
10
|
||||
-9.444000
|
||||
20
|
||||
28.757000
|
||||
10
|
||||
-9.525000
|
||||
20
|
||||
30.000000
|
||||
10
|
||||
-9.444000
|
||||
20
|
||||
31.243000
|
||||
10
|
||||
-9.200000
|
||||
20
|
||||
32.465000
|
||||
10
|
||||
-8.800000
|
||||
20
|
||||
33.645000
|
||||
10
|
||||
-8.249000
|
||||
20
|
||||
34.763000
|
||||
10
|
||||
-7.557000
|
||||
20
|
||||
35.798000
|
||||
10
|
||||
-6.735000
|
||||
20
|
||||
36.735000
|
||||
10
|
||||
-5.798000
|
||||
20
|
||||
37.557000
|
||||
10
|
||||
-4.763000
|
||||
20
|
||||
38.249000
|
||||
10
|
||||
-3.645000
|
||||
20
|
||||
38.800000
|
||||
10
|
||||
-2.465000
|
||||
20
|
||||
39.200000
|
||||
10
|
||||
-1.243000
|
||||
20
|
||||
39.444000
|
||||
10
|
||||
0.000000
|
||||
20
|
||||
39.525000
|
||||
10
|
||||
1.243000
|
||||
20
|
||||
39.444000
|
||||
10
|
||||
2.465000
|
||||
20
|
||||
39.200000
|
||||
10
|
||||
3.645000
|
||||
20
|
||||
38.800000
|
||||
10
|
||||
4.763000
|
||||
20
|
||||
38.249000
|
||||
10
|
||||
5.798000
|
||||
20
|
||||
37.557000
|
||||
10
|
||||
6.735000
|
||||
20
|
||||
36.735000
|
||||
10
|
||||
7.557000
|
||||
20
|
||||
35.798000
|
||||
10
|
||||
8.249000
|
||||
20
|
||||
34.763000
|
||||
10
|
||||
8.800000
|
||||
20
|
||||
33.645000
|
||||
10
|
||||
9.200000
|
||||
20
|
||||
32.465000
|
||||
10
|
||||
9.444000
|
||||
20
|
||||
31.243000
|
||||
10
|
||||
9.525000
|
||||
20
|
||||
30.000000
|
||||
10
|
||||
9.444000
|
||||
20
|
||||
28.757000
|
||||
10
|
||||
9.200000
|
||||
20
|
||||
27.535000
|
||||
10
|
||||
8.800000
|
||||
20
|
||||
26.355000
|
||||
10
|
||||
8.249000
|
||||
20
|
||||
25.237000
|
||||
10
|
||||
7.843000
|
||||
20
|
||||
24.629000
|
||||
10
|
||||
7.640000
|
||||
20
|
||||
24.323000
|
||||
10
|
||||
7.330000
|
||||
20
|
||||
23.662000
|
||||
10
|
||||
7.120000
|
||||
20
|
||||
22.963000
|
||||
10
|
||||
7.013000
|
||||
20
|
||||
22.241000
|
||||
10
|
||||
7.013000
|
||||
20
|
||||
21.876000
|
||||
10
|
||||
7.000000
|
||||
20
|
||||
21.876000
|
||||
10
|
||||
7.000000
|
||||
20
|
||||
5.000000
|
||||
10
|
||||
7.013000
|
||||
20
|
||||
5.000000
|
||||
10
|
||||
7.013000
|
||||
20
|
||||
4.635000
|
||||
10
|
||||
7.120000
|
||||
20
|
||||
3.913000
|
||||
10
|
||||
7.330000
|
||||
20
|
||||
3.214000
|
||||
10
|
||||
7.640000
|
||||
20
|
||||
2.553000
|
||||
10
|
||||
8.043000
|
||||
20
|
||||
1.944000
|
||||
10
|
||||
8.530000
|
||||
20
|
||||
1.400000
|
||||
10
|
||||
9.091000
|
||||
20
|
||||
0.934000
|
||||
10
|
||||
9.714000
|
||||
20
|
||||
0.553000
|
||||
10
|
||||
10.386000
|
||||
20
|
||||
0.268000
|
||||
10
|
||||
11.092000
|
||||
20
|
||||
0.083000
|
||||
10
|
||||
11.817000
|
||||
20
|
||||
0.003000
|
||||
10
|
||||
12.000000
|
||||
20
|
||||
0.010000
|
||||
10
|
||||
12.000000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
12.500000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
12.500000
|
||||
20
|
||||
-2.000000
|
||||
10
|
||||
-12.500000
|
||||
20
|
||||
-2.000000
|
||||
0
|
||||
LWPOLYLINE
|
||||
8
|
||||
0
|
||||
90
|
||||
78
|
||||
70
|
||||
1
|
||||
10
|
||||
17.500000
|
||||
20
|
||||
-2.000000
|
||||
10
|
||||
17.500000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
18.000000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
18.000000
|
||||
20
|
||||
0.010000
|
||||
10
|
||||
18.547000
|
||||
20
|
||||
0.030000
|
||||
10
|
||||
19.265000
|
||||
20
|
||||
0.163000
|
||||
10
|
||||
19.956000
|
||||
20
|
||||
0.398000
|
||||
10
|
||||
20.605000
|
||||
20
|
||||
0.732000
|
||||
10
|
||||
21.198000
|
||||
20
|
||||
1.157000
|
||||
10
|
||||
21.724000
|
||||
20
|
||||
1.663000
|
||||
10
|
||||
22.170000
|
||||
20
|
||||
2.241000
|
||||
10
|
||||
22.527000
|
||||
20
|
||||
2.878000
|
||||
10
|
||||
22.788000
|
||||
20
|
||||
3.560000
|
||||
10
|
||||
22.947000
|
||||
20
|
||||
4.272000
|
||||
10
|
||||
23.000000
|
||||
20
|
||||
5.000000
|
||||
10
|
||||
23.000000
|
||||
20
|
||||
21.876000
|
||||
10
|
||||
22.947000
|
||||
20
|
||||
22.604000
|
||||
10
|
||||
22.788000
|
||||
20
|
||||
23.316000
|
||||
10
|
||||
22.527000
|
||||
20
|
||||
23.998000
|
||||
10
|
||||
22.256000
|
||||
20
|
||||
24.482000
|
||||
10
|
||||
21.751000
|
||||
20
|
||||
25.237000
|
||||
10
|
||||
21.200000
|
||||
20
|
||||
26.355000
|
||||
10
|
||||
20.800000
|
||||
20
|
||||
27.535000
|
||||
10
|
||||
20.556000
|
||||
20
|
||||
28.757000
|
||||
10
|
||||
20.475000
|
||||
20
|
||||
30.000000
|
||||
10
|
||||
20.556000
|
||||
20
|
||||
31.243000
|
||||
10
|
||||
20.800000
|
||||
20
|
||||
32.465000
|
||||
10
|
||||
21.200000
|
||||
20
|
||||
33.645000
|
||||
10
|
||||
21.751000
|
||||
20
|
||||
34.763000
|
||||
10
|
||||
22.443000
|
||||
20
|
||||
35.798000
|
||||
10
|
||||
23.265000
|
||||
20
|
||||
36.735000
|
||||
10
|
||||
24.202000
|
||||
20
|
||||
37.557000
|
||||
10
|
||||
25.237000
|
||||
20
|
||||
38.249000
|
||||
10
|
||||
26.355000
|
||||
20
|
||||
38.800000
|
||||
10
|
||||
27.535000
|
||||
20
|
||||
39.200000
|
||||
10
|
||||
28.757000
|
||||
20
|
||||
39.444000
|
||||
10
|
||||
30.000000
|
||||
20
|
||||
39.525000
|
||||
10
|
||||
31.243000
|
||||
20
|
||||
39.444000
|
||||
10
|
||||
32.465000
|
||||
20
|
||||
39.200000
|
||||
10
|
||||
33.645000
|
||||
20
|
||||
38.800000
|
||||
10
|
||||
34.763000
|
||||
20
|
||||
38.249000
|
||||
10
|
||||
35.798000
|
||||
20
|
||||
37.557000
|
||||
10
|
||||
36.735000
|
||||
20
|
||||
36.735000
|
||||
10
|
||||
37.557000
|
||||
20
|
||||
35.798000
|
||||
10
|
||||
38.249000
|
||||
20
|
||||
34.763000
|
||||
10
|
||||
38.800000
|
||||
20
|
||||
33.645000
|
||||
10
|
||||
39.200000
|
||||
20
|
||||
32.465000
|
||||
10
|
||||
39.444000
|
||||
20
|
||||
31.243000
|
||||
10
|
||||
39.525000
|
||||
20
|
||||
30.000000
|
||||
10
|
||||
39.444000
|
||||
20
|
||||
28.757000
|
||||
10
|
||||
39.200000
|
||||
20
|
||||
27.535000
|
||||
10
|
||||
38.800000
|
||||
20
|
||||
26.355000
|
||||
10
|
||||
38.249000
|
||||
20
|
||||
25.237000
|
||||
10
|
||||
37.843000
|
||||
20
|
||||
24.629000
|
||||
10
|
||||
37.640000
|
||||
20
|
||||
24.323000
|
||||
10
|
||||
37.330000
|
||||
20
|
||||
23.662000
|
||||
10
|
||||
37.120000
|
||||
20
|
||||
22.963000
|
||||
10
|
||||
37.013000
|
||||
20
|
||||
22.241000
|
||||
10
|
||||
37.013000
|
||||
20
|
||||
21.876000
|
||||
10
|
||||
37.000000
|
||||
20
|
||||
21.876000
|
||||
10
|
||||
37.000000
|
||||
20
|
||||
5.000000
|
||||
10
|
||||
37.013000
|
||||
20
|
||||
5.000000
|
||||
10
|
||||
37.013000
|
||||
20
|
||||
4.635000
|
||||
10
|
||||
37.120000
|
||||
20
|
||||
3.913000
|
||||
10
|
||||
37.330000
|
||||
20
|
||||
3.214000
|
||||
10
|
||||
37.640000
|
||||
20
|
||||
2.553000
|
||||
10
|
||||
38.043000
|
||||
20
|
||||
1.944000
|
||||
10
|
||||
38.530000
|
||||
20
|
||||
1.400000
|
||||
10
|
||||
39.091000
|
||||
20
|
||||
0.934000
|
||||
10
|
||||
39.714000
|
||||
20
|
||||
0.553000
|
||||
10
|
||||
40.386000
|
||||
20
|
||||
0.268000
|
||||
10
|
||||
41.092000
|
||||
20
|
||||
0.083000
|
||||
10
|
||||
41.817000
|
||||
20
|
||||
0.003000
|
||||
10
|
||||
42.000000
|
||||
20
|
||||
0.010000
|
||||
10
|
||||
42.000000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
42.500000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
42.500000
|
||||
20
|
||||
-2.000000
|
||||
10
|
||||
17.500000
|
||||
20
|
||||
-2.000000
|
||||
0
|
||||
LWPOLYLINE
|
||||
8
|
||||
0
|
||||
90
|
||||
78
|
||||
70
|
||||
1
|
||||
10
|
||||
47.500000
|
||||
20
|
||||
-2.000000
|
||||
10
|
||||
47.500000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
48.000000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
48.000000
|
||||
20
|
||||
0.010000
|
||||
10
|
||||
48.547000
|
||||
20
|
||||
0.030000
|
||||
10
|
||||
49.265000
|
||||
20
|
||||
0.163000
|
||||
10
|
||||
49.956000
|
||||
20
|
||||
0.398000
|
||||
10
|
||||
50.605000
|
||||
20
|
||||
0.732000
|
||||
10
|
||||
51.198000
|
||||
20
|
||||
1.157000
|
||||
10
|
||||
51.724000
|
||||
20
|
||||
1.663000
|
||||
10
|
||||
52.170000
|
||||
20
|
||||
2.241000
|
||||
10
|
||||
52.527000
|
||||
20
|
||||
2.878000
|
||||
10
|
||||
52.788000
|
||||
20
|
||||
3.560000
|
||||
10
|
||||
52.947000
|
||||
20
|
||||
4.272000
|
||||
10
|
||||
53.000000
|
||||
20
|
||||
5.000000
|
||||
10
|
||||
53.000000
|
||||
20
|
||||
21.876000
|
||||
10
|
||||
52.947000
|
||||
20
|
||||
22.604000
|
||||
10
|
||||
52.788000
|
||||
20
|
||||
23.316000
|
||||
10
|
||||
52.527000
|
||||
20
|
||||
23.998000
|
||||
10
|
||||
52.256000
|
||||
20
|
||||
24.482000
|
||||
10
|
||||
51.751000
|
||||
20
|
||||
25.237000
|
||||
10
|
||||
51.200000
|
||||
20
|
||||
26.355000
|
||||
10
|
||||
50.800000
|
||||
20
|
||||
27.535000
|
||||
10
|
||||
50.556000
|
||||
20
|
||||
28.757000
|
||||
10
|
||||
50.475000
|
||||
20
|
||||
30.000000
|
||||
10
|
||||
50.556000
|
||||
20
|
||||
31.243000
|
||||
10
|
||||
50.800000
|
||||
20
|
||||
32.465000
|
||||
10
|
||||
51.200000
|
||||
20
|
||||
33.645000
|
||||
10
|
||||
51.751000
|
||||
20
|
||||
34.763000
|
||||
10
|
||||
52.443000
|
||||
20
|
||||
35.798000
|
||||
10
|
||||
53.265000
|
||||
20
|
||||
36.735000
|
||||
10
|
||||
54.202000
|
||||
20
|
||||
37.557000
|
||||
10
|
||||
55.237000
|
||||
20
|
||||
38.249000
|
||||
10
|
||||
56.355000
|
||||
20
|
||||
38.800000
|
||||
10
|
||||
57.535000
|
||||
20
|
||||
39.200000
|
||||
10
|
||||
58.757000
|
||||
20
|
||||
39.444000
|
||||
10
|
||||
60.000000
|
||||
20
|
||||
39.525000
|
||||
10
|
||||
61.243000
|
||||
20
|
||||
39.444000
|
||||
10
|
||||
62.465000
|
||||
20
|
||||
39.200000
|
||||
10
|
||||
63.645000
|
||||
20
|
||||
38.800000
|
||||
10
|
||||
64.763000
|
||||
20
|
||||
38.249000
|
||||
10
|
||||
65.798000
|
||||
20
|
||||
37.557000
|
||||
10
|
||||
66.735000
|
||||
20
|
||||
36.735000
|
||||
10
|
||||
67.557000
|
||||
20
|
||||
35.798000
|
||||
10
|
||||
68.249000
|
||||
20
|
||||
34.763000
|
||||
10
|
||||
68.800000
|
||||
20
|
||||
33.645000
|
||||
10
|
||||
69.200000
|
||||
20
|
||||
32.465000
|
||||
10
|
||||
69.444000
|
||||
20
|
||||
31.243000
|
||||
10
|
||||
69.525000
|
||||
20
|
||||
30.000000
|
||||
10
|
||||
69.444000
|
||||
20
|
||||
28.757000
|
||||
10
|
||||
69.200000
|
||||
20
|
||||
27.535000
|
||||
10
|
||||
68.800000
|
||||
20
|
||||
26.355000
|
||||
10
|
||||
68.249000
|
||||
20
|
||||
25.237000
|
||||
10
|
||||
67.843000
|
||||
20
|
||||
24.629000
|
||||
10
|
||||
67.640000
|
||||
20
|
||||
24.323000
|
||||
10
|
||||
67.330000
|
||||
20
|
||||
23.662000
|
||||
10
|
||||
67.120000
|
||||
20
|
||||
22.963000
|
||||
10
|
||||
67.013000
|
||||
20
|
||||
22.241000
|
||||
10
|
||||
67.013000
|
||||
20
|
||||
21.876000
|
||||
10
|
||||
67.000000
|
||||
20
|
||||
21.876000
|
||||
10
|
||||
67.000000
|
||||
20
|
||||
5.000000
|
||||
10
|
||||
67.013000
|
||||
20
|
||||
5.000000
|
||||
10
|
||||
67.013000
|
||||
20
|
||||
4.635000
|
||||
10
|
||||
67.120000
|
||||
20
|
||||
3.913000
|
||||
10
|
||||
67.330000
|
||||
20
|
||||
3.214000
|
||||
10
|
||||
67.640000
|
||||
20
|
||||
2.553000
|
||||
10
|
||||
68.043000
|
||||
20
|
||||
1.944000
|
||||
10
|
||||
68.530000
|
||||
20
|
||||
1.400000
|
||||
10
|
||||
69.091000
|
||||
20
|
||||
0.934000
|
||||
10
|
||||
69.714000
|
||||
20
|
||||
0.553000
|
||||
10
|
||||
70.386000
|
||||
20
|
||||
0.268000
|
||||
10
|
||||
71.092000
|
||||
20
|
||||
0.083000
|
||||
10
|
||||
71.817000
|
||||
20
|
||||
0.003000
|
||||
10
|
||||
72.000000
|
||||
20
|
||||
0.010000
|
||||
10
|
||||
72.000000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
72.500000
|
||||
20
|
||||
0.000000
|
||||
10
|
||||
72.500000
|
||||
20
|
||||
-2.000000
|
||||
10
|
||||
47.500000
|
||||
20
|
||||
-2.000000
|
||||
0
|
||||
ENDSEC
|
||||
0
|
||||
SECTION
|
||||
2
|
||||
OBJECTS
|
||||
0
|
||||
DICTIONARY
|
||||
0
|
||||
ENDSEC
|
||||
0
|
||||
EOF
|
334
frame/Scalable_Buildlog_net_Laser_2/skins.scad
Normal file
334
frame/Scalable_Buildlog_net_Laser_2/skins.scad
Normal file
|
@ -0,0 +1,334 @@
|
|||
|
||||
|
||||
//
|
||||
// Use this to prerender a set of tube slots for the back panel, so you can load them as dxf.
|
||||
// Rendering these slots in combination with other geometry just kills opencsg,
|
||||
// though CGAL didn't have a problem with them.
|
||||
// Save the CGAL-rendered slot set as "prerendered_tube_slots.dxf", since that's what the
|
||||
// code in skin_back() below expects.
|
||||
// Just do this once any time you need to update just these slots, then comment out again.
|
||||
prerender_cable_notches_space=30;
|
||||
!for (i=[0:2]) {translate([i*prerender_cable_notches_space,0,0]) cable_slot();}
|
||||
|
||||
|
||||
|
||||
//skin_front();
|
||||
//skin_back();
|
||||
//skin_side();
|
||||
//skin_top_back();
|
||||
//skin_top_right();
|
||||
//skin_top_left();
|
||||
//skin_bottom();
|
||||
|
||||
module skin_front(S_L=998,S_H=308) { // based on c51004_1.dxf
|
||||
S_SL=S_L-248-18; //figure size of span under lid cutout, so we can set up vent slots there
|
||||
vent_strip_offset=[18+32,S_H - 20 - 86]; // lower left corner of vent area
|
||||
vent_width = 4; // each vent slot
|
||||
vent_height = 60; //
|
||||
vent_space = 30; // space between slot centers
|
||||
vent_span = S_SL-(32+40);// whole span to be filled with multiple slots
|
||||
interface_pocket_width=170;
|
||||
interface_pocket_height=65;
|
||||
interface_center=[S_L-129,S_H-63];
|
||||
interface_mount_holes=[
|
||||
[interface_center[0]-50,interface_center[1]+interface_pocket_height/2+5],
|
||||
[interface_center[0]+50,interface_center[1]+interface_pocket_height/2+5],
|
||||
[interface_center[0]+50,interface_center[1]-interface_pocket_height/2-5],
|
||||
[interface_center[0]-50,interface_center[1]-interface_pocket_height/2-5],
|
||||
];
|
||||
h_dist = (S_L-99-99)/5;
|
||||
panel_mount_holes=[
|
||||
[99 , 9], // first hole bottom
|
||||
[99+h_dist , 9],
|
||||
[99+(h_dist*2) , 9],
|
||||
[99+(h_dist*3) , 9],
|
||||
[99+(h_dist*4) , 9],
|
||||
[S_L-99 , 9], //last hole bottom
|
||||
[S_L-9 , S_H/2], // side
|
||||
[S_L-50 , S_H-9], // first top
|
||||
[S_L-198 , S_H-9], // top next to klep
|
||||
[99 , S_H - 20 - 9],
|
||||
[99+(h_dist) , S_H - 20 - 9],
|
||||
[99+(h_dist*2) , S_H - 20 - 9],
|
||||
[99+(h_dist*3) , S_H - 20 - 9],
|
||||
[99+(h_dist*4) , S_H - 20 - 9],
|
||||
|
||||
// [18 + S_SL - S_SL*(200/732) , S_H - 20 - 9],
|
||||
// [18 + S_SL*(200/732) , S_H - 20 - 9],
|
||||
[9 , S_H-9],
|
||||
[9 , S_H/2]
|
||||
];
|
||||
|
||||
// now, set up a panel area, and then difference out all the drill holes, slots and pockets
|
||||
difference() {
|
||||
// front panel area
|
||||
difference(){square([S_L,S_H]);translate([18,S_H-20]) square([S_SL,20]);}
|
||||
// drill
|
||||
drill(5,panel_mount_holes);
|
||||
// drill(5,interface_mount_holes);
|
||||
// route pockets
|
||||
//pocket([interface_center]) roundedSquare(interface_pocket_width,interface_pocket_height,10,center=true);
|
||||
pocket([vent_strip_offset]) roundedSlotSet( vent_span , vent_space , vent_width , vent_height);
|
||||
}
|
||||
}
|
||||
|
||||
module skin_back(S_L=998,S_H=308) { // based on c51004_2.dxf
|
||||
S_SL=S_L-248-18; // this time we'll use this to place the air vent hole
|
||||
pmsw=5.04;
|
||||
h_dist = (S_L-99-99)/5;
|
||||
panel_mount_slots=[
|
||||
[99 , 5], // first hole bottom
|
||||
[99+h_dist , 5],
|
||||
[99+(h_dist*2) , 5],
|
||||
[99+(h_dist*3) , 5],
|
||||
[99+(h_dist*4) , 5],
|
||||
[99+(h_dist*5) , 5],
|
||||
// [120-pmsw/2 , 5 , 0],
|
||||
// [S_L/2,5,0],
|
||||
// [S_L - (120+pmsw/2) , 5 , 0],
|
||||
[99 , S_H-5,180 ], // first hole bottom
|
||||
[99+h_dist , S_H-5 , 180],
|
||||
[99+(h_dist*2) , S_H-5 , 180],
|
||||
[99+(h_dist*3) , S_H-5 , 180],
|
||||
[99+(h_dist*4) , S_H-5 , 180],
|
||||
[99+(h_dist*5) , S_H-5 , 180],
|
||||
|
||||
[S_L-5 ,S_H/2 , 180], //side
|
||||
// [S_L - (120+pmsw/2) , S_H-5 , 180],
|
||||
// [S_L/2,S_H-5,180],
|
||||
// [120-pmsw/2 , S_H-5 , 180],
|
||||
[5,S_H/2,-90], // side
|
||||
];
|
||||
cable_notches_offset=260;
|
||||
cable_notches_space=30;
|
||||
airvent_center=[S_L - (18+S_SL/2),90,0];
|
||||
airvent_radius=2*25.4;
|
||||
back_interface_hole_width=187;
|
||||
back_interface_hole_height=115;
|
||||
back_interface_hole_center=[121.5,83.5,0];
|
||||
difference() {
|
||||
// back panel area
|
||||
square([S_L,S_H]);
|
||||
//translate([(cable_notches_offset),0,0]) {import_dxf(file="prerendered_tube_slots.dxf", layer="0");}
|
||||
|
||||
//pocket([airvent_center]) circle(airvent_radius);
|
||||
//pocket([airvent_center]) rotate(30) roundedSlotCircleSet(360,60,5.2,12,airvent_radius+8.7);
|
||||
//pocket([back_interface_hole_center]) roundedSquare(back_interface_hole_width,back_interface_hole_height,12.5,center=true);
|
||||
|
||||
pocket(panel_mount_slots) translate([-5.04/2,0,0]) roundedSlot(5.04,8);
|
||||
//drill
|
||||
// drill(5,[[back_interface_hole_center[0]+6.5,back_interface_hole_center[1]+back_interface_hole_height/2+5]]);
|
||||
}
|
||||
}
|
||||
|
||||
module skin_side(S_W=598,S_H=308) {
|
||||
h_dist = (S_W-200)/3;
|
||||
panel_mount_slots=[
|
||||
[100 , 5 , 0],
|
||||
[100+h_dist , 5 , 0],
|
||||
[100+(h_dist*2), 5 , 0],
|
||||
// [100+(h_dist*3), 5 , 0],
|
||||
|
||||
[S_W - 100 , 5 , 0],
|
||||
|
||||
[S_W - 5 , S_H/2 , 90], //side
|
||||
[S_W - 100 , S_H - 5 , 180],
|
||||
[100 , S_H - 5 , 180],
|
||||
[100+h_dist , S_H -5 , 180],
|
||||
[100+(h_dist*2), S_H - 5 , 180],
|
||||
// [100+(h_dist*3), S_H -5 , 180],
|
||||
|
||||
|
||||
[5 , S_H/2 ,-90],
|
||||
];
|
||||
difference() {
|
||||
square([S_W,S_H]);
|
||||
pocket(panel_mount_slots) translate([-5.01/2,0,0]) roundedSlot(5.01,8);
|
||||
}
|
||||
}
|
||||
|
||||
module skin_top_back(S_L=998) {
|
||||
S_SL=S_L-248-18; //
|
||||
hinge_slot_pair_center_x_from_edge=round(10*S_SL*(144.5/730))/10;//or so
|
||||
|
||||
// hinge_slots=[
|
||||
// [(19+hinge_slot_pair_center_x_from_edge) - 25/2 , 0 , 0],
|
||||
// [(19+hinge_slot_pair_center_x_from_edge) + 25/2 , 0 , 0],
|
||||
// [(19+S_SL) - hinge_slot_pair_center_x_from_edge - 25/2 , 0 , 0],
|
||||
// [(19+S_SL) - hinge_slot_pair_center_x_from_edge + 25/2 , 0 , 0],
|
||||
// ];
|
||||
h_dist=(S_L-99)/5;
|
||||
panel_mount_holes=[
|
||||
[99 , 118 - 9 ],
|
||||
[(99+h_dist) , 118 - 9 ],
|
||||
[(99+(h_dist*2)) , 118 - 9 ],
|
||||
[(99+(h_dist*3)) , 118 - 9 ],
|
||||
[(99+(h_dist*4)) , 118 - 9 ],
|
||||
[(S_L-99) , 118 - 9 ],
|
||||
[99 , 9 ],
|
||||
[(99+h_dist) , 9 ],
|
||||
[(99+(h_dist*2)) , 9 ],
|
||||
[(99+(h_dist*3)) , 9 ],
|
||||
[(99+(h_dist*4)) , 9 ],
|
||||
[(S_L-99) , 9 ],
|
||||
];
|
||||
difference() {
|
||||
square([19+S_SL,118]);
|
||||
drill(5,panel_mount_holes);
|
||||
//pocket(hinge_slots) translate([-6/2,-4,0]) roundedSlot(6,12+4);
|
||||
}
|
||||
}
|
||||
|
||||
module skin_top_right(S_W=598) {
|
||||
panel_mount_holes=[
|
||||
[100 , 248 - 9 ],
|
||||
[100 , 9 ],
|
||||
[S_W/2 , 9 ],
|
||||
[S_W-100 , 9 ],
|
||||
[S_W/2 , 248 - 9 ],
|
||||
[S_W-100 , 248 - 9 ],
|
||||
];
|
||||
difference() {
|
||||
square([S_W,248]);
|
||||
drill(5,panel_mount_holes);
|
||||
}
|
||||
}
|
||||
module skin_top_left(S_W=598) {
|
||||
L=S_W-(598-479);
|
||||
panel_mount_holes=[
|
||||
[9 , 9 ],
|
||||
[L/2, , 9 ],
|
||||
[L - 9 , 9 ],
|
||||
];
|
||||
difference() {
|
||||
square([L,18]);
|
||||
drill(5,panel_mount_holes);
|
||||
}
|
||||
}
|
||||
|
||||
module skin_bottom(S_L=998,S_W=598) {
|
||||
L=S_W-(598-479);
|
||||
S_SL=S_L-248-18;
|
||||
S_SL_reference=998-248-18;
|
||||
cab_guide_ystart =L*(180/479);
|
||||
cab_guide_ystart2=L*(318/479);
|
||||
foot_holes=[
|
||||
[ 9, 9 ],
|
||||
[S_L - 9, 9 ],
|
||||
[S_L - 9, S_W - 9 ],
|
||||
[ 9, S_W - 9 ],
|
||||
];
|
||||
cable_guide_holes=[
|
||||
[S_L - 286 , cab_guide_ystart ],
|
||||
[S_L - 286 , cab_guide_ystart - 8 ],
|
||||
[S_L - 286 , cab_guide_ystart2 ],
|
||||
[S_L - 286 , cab_guide_ystart2 - 8 ],
|
||||
];
|
||||
h_dist=(S_L-(99*2))/5;
|
||||
h_dist2=(S_W-(99*2))/3;
|
||||
panel_mount_slots=[
|
||||
[99,5,0],
|
||||
[99 ,5,0], // first hole bottom
|
||||
[99+h_dist ,5,0],
|
||||
[99+(h_dist*2) ,5,0],
|
||||
[99+(h_dist*3) ,5,0],
|
||||
[99+(h_dist*4) ,5,0],
|
||||
[S_L-99 ,5,0], //last hole bottom
|
||||
|
||||
// [S_L/2,5,0],
|
||||
// [S_L-120,5,0],
|
||||
// [S_L-5,80,90],
|
||||
// [S_L-5,S_W/2,90],
|
||||
// [S_L-5,S_W-80,90],
|
||||
[S_L-5,S_W-99,90],
|
||||
[S_L-5,S_W-(99+h_dist2),90],
|
||||
[S_L-5,S_W-99-(h_dist2*2),90],
|
||||
[S_L-5,99,90],
|
||||
// [S_L-120,S_W-5,180],
|
||||
// [S_L/2,S_W-5,180],
|
||||
// [120,S_W-5,180],
|
||||
[99,5,180],
|
||||
[99 ,S_W-5,180], // first hole bottom
|
||||
[99+h_dist ,S_W-5,180],
|
||||
[99+(h_dist*2) ,S_W-5,180],
|
||||
[99+(h_dist*3) ,S_W-5,180],
|
||||
[99+(h_dist*4) ,S_W-5,180],
|
||||
[S_L-99 ,S_W-5,180], //last hole bottom
|
||||
[5,S_W-99,-90],
|
||||
[5,S_W-(99+h_dist2),-90],
|
||||
[5,S_W-99-(h_dist2*2),-90],
|
||||
[5,99,-90],
|
||||
// [S_L-235,S_W/2,90],
|
||||
// [18 + S_SL*((400-18)/S_SL_reference),S_W-105,180], // hopefully
|
||||
];
|
||||
difference() {
|
||||
square([S_L,S_W]);
|
||||
// drill(7,foot_holes);
|
||||
// drill(3.1749492,cable_guide_holes);
|
||||
pocket(panel_mount_slots) translate([-5.1/2,0,0]) roundedSlot(5.1,8);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
module drill(d,dl) {for(i=dl) {
|
||||
//echo(str("drill ",(d)," ",i));
|
||||
translate(i) circle(d/2);}
|
||||
}
|
||||
module pocket(o=[[0,0,0]]) {
|
||||
for ( i = [ 0 : $children-1 ] ) {
|
||||
//echo(str("pocket",(($children>1)?str(" ",(j+1)," of ",$children," "):str(" ")), "at ",o));
|
||||
for (j=o) {
|
||||
translate([j[0],j[1]]) rotate (j[2]) child(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module cable_slot() { // nice, but for some reason really hard on OpenCSG (no problem in CGAL render)
|
||||
// so use it to pre-render sets of these slots, then save as DXF, and import
|
||||
// those for integration with models
|
||||
blendnudge=0.06;
|
||||
union() {
|
||||
//translate([0,blendnudge])
|
||||
difference() {
|
||||
translate([-25/2,-2,0]) square([25,blendnudge+2+30-5.3666898]);
|
||||
translate([ 7,0,0]) roundedSquare(16,blendnudge+16.8161462+10,5,$fn=43);
|
||||
translate([-16-7,0,0]) roundedSquare(16,blendnudge+16.8161462+10,5,$fn=43);
|
||||
}
|
||||
translate([0,30]) circle(9.525,$fn=48);
|
||||
}
|
||||
}
|
||||
module roundedSlot(w=4,h=30) {
|
||||
$fn=20;
|
||||
union() {
|
||||
translate([w/2,w/2]) circle(r=w/2);
|
||||
translate([0,w/2]) square([w,h-w]);
|
||||
translate([w/2,h-w/2]) circle(r=w/2);
|
||||
}
|
||||
}
|
||||
module roundedSlotSet(span,slot_spacing_base=30,slotwidth,slotheight) {
|
||||
number_of_slots = span/slot_spacing_base;
|
||||
rem = number_of_slots - floor(number_of_slots);
|
||||
slot_spacing=slot_spacing_base + slot_spacing_base * (rem/number_of_slots);
|
||||
for(i=[0:floor(number_of_slots)]) {translate([i*slot_spacing,0,0]) roundedSlot(slotwidth,slotheight);}
|
||||
}
|
||||
module roundedSlotCircleSet(span,slot_spacing_base=30,slotwidth,slotheight,slotoffset) {
|
||||
number_of_slots = span/slot_spacing_base;
|
||||
rem = number_of_slots - floor(number_of_slots);
|
||||
slot_spacing=slot_spacing_base + slot_spacing_base * (rem/number_of_slots);
|
||||
for(i=[0:floor(number_of_slots)]) {rotate([0,0,i*slot_spacing]) translate([0,slotoffset,0]) roundedSlot(slotwidth,slotheight);}
|
||||
}
|
||||
module roundedSquare(w,h,r,center=false) {
|
||||
coffx=(center)?-w/2:0;
|
||||
coffy=(center)?-h/2:0;
|
||||
union() {
|
||||
translate([coffx + 0 ,coffy + r]) square([w,h-2*r]);
|
||||
translate([coffx + r ,coffy + 0]) square([w-2*r,h]);
|
||||
translate([coffx + r ,coffy + r]) circle(r);
|
||||
translate([coffx + r ,coffy + h-r]) circle(r);
|
||||
translate([coffx + w-r,coffy + h-r]) circle(r);
|
||||
translate([coffx + w-r,coffy + r]) circle(r);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,50 @@
|
|||
// MakerSlide Component
|
||||
// http://www.makerslide.com
|
||||
// b17001_rev_2
|
||||
// Single Bearing Delrin V Wheel
|
||||
// Original by Barton Dring
|
||||
// OpenSCAD model by Mike Sheldrake
|
||||
|
||||
vwheel(false);
|
||||
|
||||
module vwheelbearing() { //id=5mm,od=16mm,width=5mm
|
||||
color([0.5,0.5,0.5])
|
||||
difference() {
|
||||
cylinder(r=8,h=5,$fn=24);
|
||||
translate([0,0,-0.05]) cylinder(r=2.5,h=5.1,$fn=12);
|
||||
}
|
||||
}
|
||||
|
||||
module vwheel(withbearing=true) { //MakerSlide.com delrin v wheel
|
||||
id1=15.9743;
|
||||
id2=14.8;
|
||||
od1=23.5;
|
||||
od2=18.75;
|
||||
color([0.2,0.2,0.2])
|
||||
rotate_extrude(convexity = 10,$fn=40)
|
||||
translate([id1/2, 0, 0])
|
||||
rotate([0,0,-90])
|
||||
polygon(points = [
|
||||
[3 - 0.3/sqrt(2),0],
|
||||
[-2,0],
|
||||
[-2,-(id1-id2)/2],
|
||||
[-3,-(id1-id2)/2],
|
||||
[-3,(od1-id1)/2 - 0.2/sqrt(2)],
|
||||
[-3 + 0.2/sqrt(2),(od1-id1)/2],
|
||||
[-3 + 0.75,(od1-id1)/2],
|
||||
[-0.55/2, (od1-id1)/2 - (3 - (0.75+(0.55/2)))],
|
||||
[-0.55/2,(od2-id1)/2],
|
||||
[0.55/2,(od2-id1)/2],
|
||||
[0.55/2, (od1-id1)/2 - (3 - (0.75+(0.55/2)))],
|
||||
[3 - 0.75,(od1-id1)/2],
|
||||
[3 - 0.2/sqrt(2),(od1-id1)/2],
|
||||
[3,(od1-id1)/2 - 0.2/sqrt(2)],
|
||||
[3,0.3/sqrt(2)]
|
||||
],
|
||||
paths = [
|
||||
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
|
||||
], convexity = 10);
|
||||
|
||||
if (withbearing) {translate([0,0,-3]) vwheelbearing();}
|
||||
|
||||
}
|
75272
frame/Scalable_Buildlog_net_Laser_2/~bitlairlasercutterpanels.dxf
Normal file
75272
frame/Scalable_Buildlog_net_Laser_2/~bitlairlasercutterpanels.dxf
Normal file
File diff suppressed because it is too large
Load diff
1698
frame/amperemetertest.dxf
Normal file
1698
frame/amperemetertest.dxf
Normal file
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue