├── .DS_Store ├── 3D_Printables_WIP(NOT_Perfect) ├── .DS_Store ├── Lid-largerWireHole.stl ├── enclosureWITHRIB.stl ├── hx711 enclosure │ ├── .DS_Store │ ├── HX711Bottom.stl │ └── hx711Top.stl ├── lidv4.stl ├── load SensorMounts │ ├── .DS_Store │ ├── LeftLoadSensorV6.stl │ └── RightLoadSensorV6.stl └── timerScreenClip.stl ├── EspressoBrainMVP.ino └── EspressoBrainMVP.ino.ino ├── Espresso_Brain_By_Weight_Alternatetiming └── Espresso_Brain_By_Weight_Alternatetiming.ino ├── LoadCellTrayFeet.step └── RancilioBrain.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/.DS_Store -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/.DS_Store -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/Lid-largerWireHole.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/Lid-largerWireHole.stl -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/enclosureWITHRIB.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/enclosureWITHRIB.stl -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/hx711 enclosure/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/hx711 enclosure/.DS_Store -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/hx711 enclosure/HX711Bottom.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/hx711 enclosure/HX711Bottom.stl -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/hx711 enclosure/hx711Top.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/hx711 enclosure/hx711Top.stl -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/lidv4.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/lidv4.stl -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/load SensorMounts/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/load SensorMounts/.DS_Store -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/load SensorMounts/LeftLoadSensorV6.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/load SensorMounts/LeftLoadSensorV6.stl -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/load SensorMounts/RightLoadSensorV6.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/load SensorMounts/RightLoadSensorV6.stl -------------------------------------------------------------------------------- /3D_Printables_WIP(NOT_Perfect)/timerScreenClip.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PostModernDesign/RancilioBrain/a4f61984e064caa98ba20489d1a8f0f209d4b043/3D_Printables_WIP(NOT_Perfect)/timerScreenClip.stl -------------------------------------------------------------------------------- /EspressoBrainMVP.ino/EspressoBrainMVP.ino.ino: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | –––––––––––––––––––––– 4 | Espresso Timer Intention 5 | –––––––––––––––––––––– 6 | 7 | 8 | ___  Current Functions ___  9 | – Set a brew time- turn on pump, open solenoid, count down on OLED, Turn off pump close solenoid. 10 | 11 | ___  Future Functions ___  12 | – Menu to change modes and change parameters 13 | – Optize code becuase running out of space 14 | – Set a preinfusion time and delay time – Open Solenoid, count, close solenoid, count, turn on pump, open solenoid, count down, etc.. 15 | – Backflush Mode - 15sec on, 15 sec rest - 5 times 16 | – Manual Mode - Start pump and count up 17 | – Wire up Load Cells 18 | – Target weight mode - set weight and brew up until that weight. 19 | */ 20 | 21 | //1st order variables and functions 22 | bool setupDone=0; 23 | bool timerRunning = 0; 24 | #include 25 | 26 | 27 | /*––––––––––––––––––––––––––––– 28 | Display Setup 29 | –––––––––––––––––––––––––––––*/ 30 | #include 31 | #include 32 | #define SCREEN_WIDTH 128 33 | #define SCREEN_HEIGHT 64 34 | #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) 35 | Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); 36 | 37 | 38 | //LayoutFunctions 39 | void topLeftLabel(String j) { 40 | display.setTextSize(2); // scale 2 41 | display.setTextColor(SSD1306_WHITE); // Draw white text 42 | display.setCursor(0, 0); // Start at top-left corn 43 | display.print(j); 44 | } 45 | 46 | void middleLeftTime(float j) { 47 | display.setTextSize(5); // scale 5 48 | display.setTextColor(SSD1306_WHITE); // Draw white text 49 | display.setCursor(0, 24); // these are coordinates(x, y) 50 | display.print(j, 1); // in this sketch this parameter is the time value aka (tV) 51 | } 52 | 53 | 54 | /*––––––––––––––––––––––––––––– 55 | Encoder Setup 56 | –––––––––––––––––––––––––––––*/ 57 | 58 | 59 | //Tactile Switch Setup 60 | int buttonPin = 4; 61 | int buttonPinState = 1; 62 | int buttonPinLast = 1; 63 | bool buttonPressed = 0; 64 | 65 | 66 | //Tactile Switch Detection--------------- 67 | void buttonDetect(){ 68 | buttonPinState=digitalRead(buttonPin); 69 | if (buttonPinState != buttonPinLast){ 70 | if ((buttonPinState==1) && (timerRunning==0)){ 71 | buttonPressed=1; 72 | extractOn(); 73 | } 74 | buttonPinLast=buttonPinState; 75 | } 76 | } 77 | 78 | //Rotary Encoder Turn Detection 79 | //you need to use these pins because the support interupt 80 | int pinA = 3; 81 | int pinB = 2; 82 | int pinAStateCurrent = LOW; 83 | int pinAStateLast = pinAStateCurrent; 84 | bool turnDetected = false; 85 | 86 | /*––––––––––––––––––––––––––––– 87 | Timer Setup 88 | –––––––––––––––––––––––––––––*/ 89 | //millis Function 90 | 91 | const unsigned long eventInterval = 100; 92 | unsigned long previousTime =0; 93 | int storedTime; 94 | float tV; 95 | float countDownDefault; 96 | 97 | 98 | 99 | /*––––––––––––––––––––––––––––– 100 | Menu Setup 101 | –––––––––––––––––––––––––––––*/ 102 | //to do one day 103 | 104 | 105 | /*––––––––––––––––––––––––––––– 106 | Relay Setup 107 | –––––––––––––––––––––––––––––*/ 108 | 109 | int threeWay = 9; 110 | int pump = 10; 111 | 112 | void extractOn(){ 113 | digitalWrite(pump, HIGH); 114 | digitalWrite(threeWay, HIGH); 115 | } 116 | 117 | void extractOff(){ 118 | digitalWrite(pump, LOW); 119 | digitalWrite(threeWay, LOW); 120 | } 121 | 122 | 123 | 124 | //update encoder function 125 | void rotaryIncrement(){ 126 | turnDetected = true; 127 | //Rotation 128 | pinAStateCurrent = digitalRead(pinA); 129 | if((pinAStateLast == LOW) && (pinAStateCurrent == HIGH)){ 130 | if(digitalRead(pinB) == HIGH){ 131 | if(tV>=.1){ 132 | tV-= 0.1; 133 | } 134 | countDownDefault = tV; 135 | // storedTime=countDownDefault/0.1; 136 | delay(15); 137 | } 138 | else { 139 | tV += 0.1; 140 | countDownDefault = tV; 141 | // storedTime=countDownDefault/0.1; 142 | delay(15); 143 | } 144 | } 145 | pinAStateLast = pinAStateCurrent; 146 | } 147 | 148 | void update(){ 149 | if((!timerRunning) && (setupDone)) { 150 | rotaryIncrement(); 151 | } 152 | else{ 153 | // Serial.println("ignored input, timer is running"); 154 | } 155 | } 156 | 157 | 158 | 159 | 160 | 161 | void setup() { 162 | Serial.begin(9600); 163 | //display setup 164 | if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32 165 | Serial.println(F("SSD1306 allocation failed")); 166 | for(;;); // Don't proceed, loop forever 167 | } 168 | 169 | 170 | if (EEPROM.read(256) != 123){ 171 | EEPROM.write(256, 123); 172 | storedTime = 0; 173 | } 174 | else { 175 | EEPROM.get(0, storedTime); 176 | } 177 | tV = storedTime*0.1; 178 | 179 | // tactile setup 180 | pinMode (buttonPin, INPUT_PULLUP); 181 | display.clearDisplay(); 182 | topLeftLabel("Shot Time"); 183 | middleLeftTime(tV); 184 | display.display(); 185 | 186 | 187 | 188 | //Rotary Setup 189 | pinMode (pinA, INPUT_PULLUP); 190 | pinMode (pinB, INPUT_PULLUP); 191 | pinMode (buttonPin, INPUT_PULLUP); 192 | attachInterrupt(digitalPinToInterrupt(pinA), update, CHANGE); 193 | countDownDefault = tV; 194 | 195 | //SSR Setup 196 | pinMode (pump, OUTPUT); 197 | pinMode(threeWay, OUTPUT); 198 | extractOff(); 199 | setupDone=1; 200 | 201 | } 202 | 203 | 204 | 205 | 206 | void loop() { 207 | 208 | if (turnDetected){ 209 | turnDetected=false; 210 | display.clearDisplay(); 211 | topLeftLabel("Shot Time"); 212 | middleLeftTime(tV); 213 | display.display(); 214 | } 215 | 216 | //buttonDetection 217 | buttonDetect(); 218 | /* Updates frequently */ 219 | unsigned long currentTime = millis(); 220 | if(buttonPressed){ 221 | timerRunning=1; 222 | 223 | if( currentTime - previousTime >= eventInterval){ 224 | if(tV >= 0.1){ 225 | tV -= 0.1; 226 | previousTime = currentTime; 227 | display.clearDisplay(); 228 | topLeftLabel("Extracting"); 229 | middleLeftTime(tV); 230 | display.display(); 231 | } 232 | else { 233 | display.clearDisplay(); 234 | topLeftLabel("Extracting"); 235 | middleLeftTime(0.0); 236 | display.display(); 237 | extractOff(); 238 | // Serial.println("End countDownDefault: "); 239 | // Serial.println(countDownDefault); 240 | // Serial.println("storedTime: "); 241 | // Serial.println(storedTime); 242 | timerRunning=0; 243 | tV=countDownDefault; 244 | if (storedTime != round(countDownDefault/0.1)) { 245 | storedTime = round(countDownDefault/0.1); 246 | EEPROM.put(0, storedTime); 247 | // Serial.println("yes EEPROM: "); 248 | // Serial.println(storedTime); 249 | } 250 | delay(1000); 251 | buttonPressed=0; 252 | display.clearDisplay(); 253 | topLeftLabel("Shot Time"); 254 | middleLeftTime(tV); 255 | display.display(); 256 | } 257 | } 258 | } 259 | } 260 | -------------------------------------------------------------------------------- /Espresso_Brain_By_Weight_Alternatetiming/Espresso_Brain_By_Weight_Alternatetiming.ino: -------------------------------------------------------------------------------- 1 | //FYI I used this hx711 library 2 | // URL: https://github.com/RobTillaart/HX711 3 | 4 | 5 | //Screen Stuff 6 | #include 7 | //#include 8 | #define SCREEN_WIDTH 128 9 | #define SCREEN_HEIGHT 64 10 | #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) 11 | Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); 12 | 13 | #include //This is being used to store the target weight so when arduino power cycles it retains last used weight 14 | 15 | //this is the little board that comes with each load cell 16 | #include "HX711.h" 17 | HX711 scale; 18 | HX711 scale2; 19 | 20 | // pins for the first load cell 21 | uint8_t dataPin = 5; 22 | uint8_t clockPin = 6; 23 | 24 | // pins for the second load cell 25 | uint8_t dataPin2 = 11; 26 | uint8_t clockPin2 = 12; 27 | 28 | //the variable to hold a value for each load cell (float because it is a decimal) 29 | float w1; 30 | float w2; 31 | 32 | //Obviously we use this stuff for weight 33 | float currentWeight; 34 | float lastWeight; 35 | bool weightReached = false; 36 | float targetWeight; 37 | float weightOffset = 1.2; // This value is how many grams before the target should the pump shut off, you need to test 38 | 39 | //This stuff is all related to timing 40 | const unsigned long eventInterval = 100; 41 | const unsigned long reachedInterval = 3000; // how long to keep reading and updating the weight after the target weight is reached (btw 1000 = 1s) 42 | unsigned long previousTime = 0; 43 | unsigned long startCounting; 44 | float elapsedTime; 45 | unsigned long currentTime; 46 | float tV = 0.0; 47 | 48 | //This is the weight that arduino will default to when powered on 49 | int storedWeight; 50 | 51 | 52 | //This is rudamentary state logic 53 | bool started = false; 54 | bool preStarted = false; 55 | 56 | 57 | //-------------- the rotary encoder //-------------- 58 | int buttonPin = 4; 59 | int buttonPinState = 1; 60 | int buttonPinLast = 1; 61 | bool buttonPressed = 0; 62 | int pinA =3; 63 | int pinB = 2; 64 | int pinAStateCurrent = HIGH; 65 | int pinAStateLast = pinAStateCurrent; 66 | bool turnDetected = false; 67 | 68 | 69 | //-------------- The Relays //-------------- 70 | int threeWay = 9; 71 | int pump = 10; 72 | 73 | //Helper functions that turn the relays on and off 74 | void extractOn(){ 75 | digitalWrite(pump, HIGH); 76 | digitalWrite(threeWay, HIGH); 77 | } 78 | 79 | void extractOff(){ 80 | digitalWrite(pump, LOW); 81 | digitalWrite(threeWay, LOW); 82 | } 83 | 84 | 85 | 86 | //-------------- These are the different layouts for each screen that we will use, helps keep our code more readable to break them out like this//-------------- 87 | 88 | 89 | //When you first turn the machine on 90 | void preStartedDisplay(){ 91 | display.setTextSize(1); 92 | display.setTextColor(SSD1306_WHITE); // Draw white text 93 | display.setCursor(0, 0); 94 | display.print("Target Weight"); 95 | display.setTextSize(3); 96 | display.setTextColor(SSD1306_WHITE); // Draw white text 97 | display.setCursor(0, 14); 98 | display.print(targetWeight, 1); 99 | 100 | 101 | //if you've pulled a shot already put the info on screen (if TV isnt 0 you've pulled a shot) 102 | if (tV !=0){ 103 | display.setTextSize(1); // this is size.. 1 is 8 pixels tall, 2 is 16, and so on 104 | display.setTextColor(SSD1306_WHITE); // Draw white text 105 | display.setCursor(0, 44); // this is position in (x,y) 106 | display.print("Previous Weight"); //display.print sends this to buffer 107 | display.setTextSize(1); 108 | display.setTextColor(SSD1306_WHITE); // Draw white text 109 | display.setCursor(98, 44); 110 | display.print(lastWeight, 1); 111 | display.setTextSize(1); 112 | display.setTextColor(SSD1306_WHITE); // Draw white text 113 | display.setCursor(0, 56); 114 | display.print("Previous Time"); 115 | display.setTextSize(1); 116 | display.setTextColor(SSD1306_WHITE); // Draw white text 117 | display.setCursor(98, 56); 118 | display.print(tV, 1); 119 | } 120 | } 121 | 122 | //-------------- when the shot is being pulled this is what is shown 123 | void startedDisplay(){ 124 | 125 | display.setTextSize(1); 126 | display.setTextColor(SSD1306_WHITE); // Draw white text 127 | display.setCursor(0, 0); 128 | display.print("Target Weight"); 129 | display.setTextSize(1); 130 | display.setTextColor(SSD1306_WHITE); // Draw white text 131 | display.setCursor(85, 0); 132 | display.print(targetWeight, 1); 133 | display.setTextSize(2); 134 | display.setTextColor(SSD1306_WHITE); // Draw white text 135 | display.setCursor(0,22); 136 | display.print("Weight"); 137 | display.setTextSize(2); 138 | display.setTextColor(SSD1306_WHITE); // Draw white text 139 | display.setCursor(80,22); 140 | display.print(currentWeight, 1); 141 | display.setTextSize(2); 142 | display.setTextColor(SSD1306_WHITE); // Draw white text 143 | display.setCursor(0, 46); 144 | display.print("Time"); 145 | display.setTextSize(2); 146 | display.setTextColor(SSD1306_WHITE); // Draw white text 147 | display.setCursor(80, 46); 148 | display.print(tV,1); 149 | 150 | 151 | } 152 | 153 | //-------------- This is identical to when a shot is pulled only we switch to a more precise method of reading the scale (called lastWeight) 154 | 155 | void justEndedDisplay(){ 156 | display.setTextSize(1); 157 | display.setTextColor(SSD1306_WHITE); // Draw white text 158 | display.setCursor(0, 0); 159 | display.print("Target Weight"); 160 | display.setTextSize(1); 161 | display.setTextColor(SSD1306_WHITE); // Draw white text 162 | display.setCursor(85, 0); 163 | display.print(targetWeight, 1); 164 | display.setTextSize(2); 165 | display.setTextColor(SSD1306_WHITE); // Draw white text 166 | display.setCursor(0,22); 167 | display.print("Weight"); 168 | display.setTextSize(2); 169 | display.setTextColor(SSD1306_WHITE); // Draw white text 170 | display.setCursor(80,22); 171 | display.print(lastWeight, 1); 172 | display.setTextSize(2); 173 | display.setTextColor(SSD1306_WHITE); // Draw white text 174 | display.setCursor(0, 46); 175 | display.print("Time"); 176 | display.setTextSize(2); 177 | display.setTextColor(SSD1306_WHITE); // Draw white text 178 | display.setCursor(80, 46); 179 | display.print(tV,1); 180 | 181 | } 182 | 183 | 184 | //-------------- This is just that text "starting" that appears after you click the encoder but before the pump is on. 185 | 186 | 187 | void startingDisplay(){ 188 | display.clearDisplay(); 189 | display.setTextSize(2); 190 | display.setTextColor(SSD1306_WHITE); // Draw white text 191 | display.setCursor(15,18); 192 | display.print("Starting"); 193 | display.display(); 194 | } 195 | 196 | 197 | //-------------- This function adds or subtracts .1 to the target weight if you turn left or right 198 | void increment(){ 199 | turnDetected = true; 200 | //Rotation 201 | pinAStateCurrent = digitalRead(pinA); 202 | if((pinAStateLast == LOW) && (pinAStateCurrent == HIGH)){ 203 | if(digitalRead(pinB) == HIGH){ 204 | Serial.println("decremented"); 205 | targetWeight -= 0.1; 206 | delay(15); 207 | } 208 | else { 209 | targetWeight += 0.1; 210 | delay(15); 211 | } 212 | } 213 | pinAStateLast = pinAStateCurrent; 214 | } 215 | 216 | //-------------- This function checks to see if the button was pressed 217 | void buttonDetect(){ 218 | buttonPinState=digitalRead(buttonPin); 219 | if (buttonPinState != buttonPinLast){ 220 | if ((buttonPinState==1) && (!started)) /*I just started extracting*/{ 221 | preStarted = false; 222 | startingDisplay(); 223 | tareScales(); 224 | delay(250); 225 | tV=0; 226 | currentWeight=0; 227 | elapsedTime=0; 228 | preStarted = false; 229 | started=true; 230 | extractOn(); 231 | startCounting = millis(); 232 | display.clearDisplay(); 233 | } 234 | if ((elapsedTime>1.0) &&(buttonPinState==1) && (started)) /*I want to stop the extraction manually*/{ 235 | weightReached = true; 236 | } 237 | buttonPinLast=buttonPinState; 238 | } 239 | } 240 | //-------------- This is the interupt that we create in our setup, the conditional statement means if you rotate the encoder while a shot is extracting it wont run any code and cause lag 241 | 242 | void update(){ 243 | if(preStarted) { 244 | increment(); 245 | } 246 | } 247 | 248 | //--------------//--------------//--------------//--------------//--------------//--------------//--------------//--------------//-------------- 249 | //--------------//--------------//--------------//--------------//--------------//--------------//--------------//--------------//-------------- 250 | 251 | void setup() 252 | { 253 | Serial.begin(9600); 254 | 255 | //display setup 256 | if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32 257 | Serial.println(F("SSD1306 allocation failed")); 258 | for(;;); // Don't proceed, loop forever 259 | 260 | } 261 | 262 | //This is seeing if this is the first time you are writing to the eeprom and if it is just put a 0 for now 263 | if (EEPROM.read(256) != 123){ 264 | EEPROM.write(256, 123); 265 | storedWeight = 0; 266 | } 267 | 268 | //This code runs every time the arduino powers back on... it sets the target weight to the last weight used so that it "remmbers" 269 | else { 270 | EEPROM.get(0, storedWeight); 271 | } 272 | // This is a trick to convert our int back into a float, eeprom floats cant go very high because you only have like a byte so we store the weigth as an int and convert it back 273 | targetWeight = storedWeight*0.1; 274 | 275 | //setting up the relays 276 | pinMode (pump, OUTPUT); 277 | pinMode(threeWay, OUTPUT); 278 | 279 | //making sure the pump and valve are off, probably dont need but just in case 280 | extractOff(); 281 | 282 | // inital display 283 | display.clearDisplay(); 284 | preStartedDisplay(); 285 | display.display(); 286 | 287 | // This is our rotary encoder setup 288 | pinMode(buttonPin, INPUT_PULLUP); // initialize the button pin as a input 289 | pinMode (pinA, INPUT_PULLUP); 290 | pinMode (pinB, INPUT_PULLUP); 291 | attachInterrupt(digitalPinToInterrupt(pinA), update, CHANGE); 292 | 293 | 294 | // This initiallizes the scales 295 | scale.begin(dataPin, clockPin); 296 | scale2.begin(dataPin2, clockPin2); 297 | 298 | //This is the callibration value for each load cell, you need to calibrate 299 | //them with a known weight The good thing is that the value is linear so if 300 | //you know somethign weights 100g you can calculate what the value should be. 301 | scale.set_scale(1091); 302 | scale2.set_scale(1105); 303 | 304 | //set the scales to 0 305 | scale.tare(); 306 | scale2.tare(); 307 | 308 | //Set the state of the system 309 | preStarted = true; 310 | } 311 | 312 | //--------------//--------------//--------------//--------------//--------------//--------------//--------------//--------------//--------------//-------------- 313 | //--------------//--------------//--------------//--------------//--------------//--------------//--------------//--------------//--------------//-------------- 314 | 315 | void loop(){ 316 | 317 | //check to see if extraction is running and perform a get weigth if it is 318 | if ((preStarted == false) && (!weightReached)){ 319 | scaleFunc(); 320 | } 321 | // check to see if the shot just ended and switch to doing multiple averaged readings for more accuracy 322 | if ((preStarted == false) && (weightReached)){ 323 | precisionScale(); 324 | } 325 | 326 | 327 | currentTime = millis(); 328 | //check if button is pressed and run the button detect code we defined earlier 329 | buttonDetect(); 330 | 331 | // –––––––––––––––––––––––––––––––––––––––– 332 | 333 | //This is the code that updates the time and weight value while the extraction is happening 334 | if(started){ 335 | if(!weightReached){ 336 | elapsedTime = ((currentTime - startCounting)*.001); 337 | tV = elapsedTime; 338 | previousTime = currentTime; 339 | display.clearDisplay(); 340 | startedDisplay(); 341 | display.display(); 342 | } 343 | } 344 | 345 | // –––––––––––––––––––––––––––––––––––––––– 346 | 347 | //This is the code that updates the weight for a few more moments just after the shot has stopped extracting and timer has stopped 348 | if (weightReached && started){ 349 | extractOff(); 350 | display.clearDisplay(); 351 | justEndedDisplay(); 352 | display.display(); 353 | if(currentWeight>lastWeight){ 354 | lastWeight = currentWeight; 355 | } 356 | } 357 | //This is the code that goes back to the inial standby screen when you are finished extracting so you can set another weight 358 | if(!started){ 359 | display.clearDisplay(); 360 | preStartedDisplay(); 361 | display.display(); 362 | } 363 | 364 | 365 | //This is the code to stop the extraction once the target weight is reached. 366 | //I added the conditional to only runs 5s after extraction starts because 367 | //sometimes you need to reposition your cup and that would trip 368 | //the weight and stop extraction and ruin your shot :( 369 | 370 | if (tV>5){ 371 | if ((currentWeight) > (targetWeight-weightOffset)){ 372 | lastWeight=currentWeight; 373 | weightReached = true; 374 | if (storedWeight != round(targetWeight/0.1)) { 375 | storedWeight= round(targetWeight/0.1); 376 | EEPROM.put(0, storedWeight); 377 | } 378 | } 379 | } 380 | 381 | // this code runs after your weight is reached AND a certain extra 382 | //amount of time has passed, you know for the last few drips... 383 | //it resets the states so you are ready to brew again... 384 | // e.g you can change it to 5s if you update your reached interval value to 5000 at the top. 385 | if( currentTime - previousTime >= reachedInterval){ 386 | started=0; 387 | weightReached = false; 388 | preStarted = true; 389 | currentWeight=0; 390 | } 391 | 392 | 393 | // Post pump shutoff / residual flow compensation (WIP) –––––––––––––––––––––––––––––––––––––––– 394 | 395 | //the idea behind this is if your shot is reaching weight quickly, cut the pump more grams before the target weight 396 | //and the other way around, if your shot is coming out slow, only cut the pump just before the target. 397 | // There is a smarter way to do this, I haven't discoverd it yet. 398 | 399 | if (tV <= 20){ 400 | weightOffset = 3.0; 401 | } 402 | if ((tV >20) && (tV<= 22)){ 403 | weightOffset = 1.9; 404 | } 405 | if ((tV >22) && (tV<= 24)){ 406 | weightOffset = 1.5; 407 | } 408 | if ((tV >24) && (tV<= 26)){ 409 | weightOffset = 1.2; 410 | } 411 | if ((tV >26) && (tV<= 28)){ 412 | weightOffset = 1; 413 | } 414 | if ((tV >28) && (tV<= 30)){ 415 | weightOffset = .9; 416 | } 417 | if ((tV >30) && (tV<= 33)){ 418 | weightOffset = 1; 419 | } 420 | if (tV >33){ 421 | weightOffset = .75; 422 | } 423 | 424 | 425 | }//This is the end of our loop 426 | 427 | //--------------//--------------//--------------//--------------//--------------//--------------//--------------//--------------//--------------//-------------- 428 | //--------------//--------------//--------------//--------------//--------------//--------------//--------------//--------------//--------------//-------------- 429 | 430 | //A few helper functions 431 | 432 | //This asks the scales to get the weight and add them up 433 | void scaleFunc(){ 434 | w1 = scale.get_units(); 435 | w2 = scale2.get_units(); 436 | if((w1+w2)>1){ 437 | currentWeight=(w1+w2); 438 | } 439 | } 440 | //This asks the scales to check the weight twice so in theory its more accurate, this is how the shot is weighed just after the pump is off 441 | void precisionScale(){ 442 | w1 = scale.get_units(2); 443 | w2 = scale2.get_units(2); 444 | currentWeight= (w1+w2); 445 | } 446 | 447 | //We tare the cells just after the rotary knob is clicked, this helper function is almost not worth writing, but whatevs 448 | void tareScales(){ 449 | scale.tare(); 450 | scale2.tare(); 451 | } 452 | 453 | //-------------- 454 | -------------------------------------------------------------------------------- /LoadCellTrayFeet.step: -------------------------------------------------------------------------------- 1 | ISO-10303-21; 2 | HEADER; 3 | /* Generated by software containing ST-Developer 4 | * from STEP Tools, Inc. (www.steptools.com) 5 | */ 6 | 7 | FILE_DESCRIPTION( 8 | /* description */ (''), 9 | /* implementation_level */ '2;1'); 10 | 11 | FILE_NAME( 12 | /* name */ '/Users/nick.todd/Desktop/LoadCellTrayFeet.step', 13 | /* time_stamp */ '2020-10-07T23:53:54-07:00', 14 | /* author */ (''), 15 | /* organization */ (''), 16 | /* preprocessor_version */ 'ST-DEVELOPER v18.1', 17 | /* originating_system */ 'Autodesk Translation Framework v9.3.0.1241', 18 | /* authorisation */ ''); 19 | 20 | FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }')); 21 | ENDSEC; 22 | 23 | DATA; 24 | #10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#13,#14), 25 | #1042); 26 | #11=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#1049,#12); 27 | #12=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#15,#16),#1041); 28 | #13=STYLED_ITEM('',(#1058),#15); 29 | #14=STYLED_ITEM('',(#1058),#16); 30 | #15=MANIFOLD_SOLID_BREP('Body1',#605); 31 | #16=MANIFOLD_SOLID_BREP('Body2',#606); 32 | #17=CYLINDRICAL_SURFACE('',#629,3.5); 33 | #18=CYLINDRICAL_SURFACE('',#639,3.5); 34 | #19=CYLINDRICAL_SURFACE('',#642,4.); 35 | #20=CYLINDRICAL_SURFACE('',#645,4.); 36 | #21=CYLINDRICAL_SURFACE('',#647,4.); 37 | #22=CYLINDRICAL_SURFACE('',#648,4.); 38 | #23=CYLINDRICAL_SURFACE('',#650,1.2645); 39 | #24=CYLINDRICAL_SURFACE('',#651,1.2645); 40 | #25=CYLINDRICAL_SURFACE('',#661,3.5); 41 | #26=CYLINDRICAL_SURFACE('',#671,3.5); 42 | #27=CYLINDRICAL_SURFACE('',#674,4.); 43 | #28=CYLINDRICAL_SURFACE('',#677,4.); 44 | #29=CYLINDRICAL_SURFACE('',#679,4.); 45 | #30=CYLINDRICAL_SURFACE('',#680,4.); 46 | #31=CYLINDRICAL_SURFACE('',#682,1.2645); 47 | #32=CYLINDRICAL_SURFACE('',#683,1.2645); 48 | #33=FACE_BOUND('',#74,.T.); 49 | #34=FACE_BOUND('',#75,.T.); 50 | #35=FACE_BOUND('',#78,.T.); 51 | #36=FACE_BOUND('',#79,.T.); 52 | #37=FACE_BOUND('',#94,.T.); 53 | #38=FACE_BOUND('',#95,.T.); 54 | #39=FACE_BOUND('',#98,.T.); 55 | #40=FACE_BOUND('',#99,.T.); 56 | #41=FACE_OUTER_BOUND('',#73,.T.); 57 | #42=FACE_OUTER_BOUND('',#76,.T.); 58 | #43=FACE_OUTER_BOUND('',#77,.T.); 59 | #44=FACE_OUTER_BOUND('',#80,.T.); 60 | #45=FACE_OUTER_BOUND('',#81,.T.); 61 | #46=FACE_OUTER_BOUND('',#82,.T.); 62 | #47=FACE_OUTER_BOUND('',#83,.T.); 63 | #48=FACE_OUTER_BOUND('',#84,.T.); 64 | #49=FACE_OUTER_BOUND('',#85,.T.); 65 | #50=FACE_OUTER_BOUND('',#86,.T.); 66 | #51=FACE_OUTER_BOUND('',#87,.T.); 67 | #52=FACE_OUTER_BOUND('',#88,.T.); 68 | #53=FACE_OUTER_BOUND('',#89,.T.); 69 | #54=FACE_OUTER_BOUND('',#90,.T.); 70 | #55=FACE_OUTER_BOUND('',#91,.T.); 71 | #56=FACE_OUTER_BOUND('',#92,.T.); 72 | #57=FACE_OUTER_BOUND('',#93,.T.); 73 | #58=FACE_OUTER_BOUND('',#96,.T.); 74 | #59=FACE_OUTER_BOUND('',#97,.T.); 75 | #60=FACE_OUTER_BOUND('',#100,.T.); 76 | #61=FACE_OUTER_BOUND('',#101,.T.); 77 | #62=FACE_OUTER_BOUND('',#102,.T.); 78 | #63=FACE_OUTER_BOUND('',#103,.T.); 79 | #64=FACE_OUTER_BOUND('',#104,.T.); 80 | #65=FACE_OUTER_BOUND('',#105,.T.); 81 | #66=FACE_OUTER_BOUND('',#106,.T.); 82 | #67=FACE_OUTER_BOUND('',#107,.T.); 83 | #68=FACE_OUTER_BOUND('',#108,.T.); 84 | #69=FACE_OUTER_BOUND('',#109,.T.); 85 | #70=FACE_OUTER_BOUND('',#110,.T.); 86 | #71=FACE_OUTER_BOUND('',#111,.T.); 87 | #72=FACE_OUTER_BOUND('',#112,.T.); 88 | #73=EDGE_LOOP('',(#389,#390,#391,#392,#393,#394,#395,#396,#397,#398,#399, 89 | #400)); 90 | #74=EDGE_LOOP('',(#401)); 91 | #75=EDGE_LOOP('',(#402)); 92 | #76=EDGE_LOOP('',(#403,#404,#405,#406)); 93 | #77=EDGE_LOOP('',(#407,#408,#409,#410,#411,#412,#413,#414,#415,#416,#417, 94 | #418)); 95 | #78=EDGE_LOOP('',(#419)); 96 | #79=EDGE_LOOP('',(#420)); 97 | #80=EDGE_LOOP('',(#421,#422,#423,#424)); 98 | #81=EDGE_LOOP('',(#425,#426,#427,#428)); 99 | #82=EDGE_LOOP('',(#429,#430,#431,#432)); 100 | #83=EDGE_LOOP('',(#433,#434,#435,#436)); 101 | #84=EDGE_LOOP('',(#437,#438,#439,#440)); 102 | #85=EDGE_LOOP('',(#441,#442,#443,#444)); 103 | #86=EDGE_LOOP('',(#445,#446,#447,#448)); 104 | #87=EDGE_LOOP('',(#449,#450,#451,#452)); 105 | #88=EDGE_LOOP('',(#453,#454,#455,#456)); 106 | #89=EDGE_LOOP('',(#457,#458,#459,#460)); 107 | #90=EDGE_LOOP('',(#461,#462,#463,#464)); 108 | #91=EDGE_LOOP('',(#465,#466,#467,#468)); 109 | #92=EDGE_LOOP('',(#469,#470,#471,#472)); 110 | #93=EDGE_LOOP('',(#473,#474,#475,#476,#477,#478,#479,#480,#481,#482,#483, 111 | #484)); 112 | #94=EDGE_LOOP('',(#485)); 113 | #95=EDGE_LOOP('',(#486)); 114 | #96=EDGE_LOOP('',(#487,#488,#489,#490)); 115 | #97=EDGE_LOOP('',(#491,#492,#493,#494,#495,#496,#497,#498,#499,#500,#501, 116 | #502)); 117 | #98=EDGE_LOOP('',(#503)); 118 | #99=EDGE_LOOP('',(#504)); 119 | #100=EDGE_LOOP('',(#505,#506,#507,#508)); 120 | #101=EDGE_LOOP('',(#509,#510,#511,#512)); 121 | #102=EDGE_LOOP('',(#513,#514,#515,#516)); 122 | #103=EDGE_LOOP('',(#517,#518,#519,#520)); 123 | #104=EDGE_LOOP('',(#521,#522,#523,#524)); 124 | #105=EDGE_LOOP('',(#525,#526,#527,#528)); 125 | #106=EDGE_LOOP('',(#529,#530,#531,#532)); 126 | #107=EDGE_LOOP('',(#533,#534,#535,#536)); 127 | #108=EDGE_LOOP('',(#537,#538,#539,#540)); 128 | #109=EDGE_LOOP('',(#541,#542,#543,#544)); 129 | #110=EDGE_LOOP('',(#545,#546,#547,#548)); 130 | #111=EDGE_LOOP('',(#549,#550,#551,#552)); 131 | #112=EDGE_LOOP('',(#553,#554,#555,#556)); 132 | #113=LINE('',#872,#165); 133 | #114=LINE('',#876,#166); 134 | #115=LINE('',#880,#167); 135 | #116=LINE('',#884,#168); 136 | #117=LINE('',#888,#169); 137 | #118=LINE('',#891,#170); 138 | #119=LINE('',#898,#171); 139 | #120=LINE('',#901,#172); 140 | #121=LINE('',#904,#173); 141 | #122=LINE('',#908,#174); 142 | #123=LINE('',#912,#175); 143 | #124=LINE('',#916,#176); 144 | #125=LINE('',#920,#177); 145 | #126=LINE('',#923,#178); 146 | #127=LINE('',#929,#179); 147 | #128=LINE('',#930,#180); 148 | #129=LINE('',#932,#181); 149 | #130=LINE('',#935,#182); 150 | #131=LINE('',#936,#183); 151 | #132=LINE('',#939,#184); 152 | #133=LINE('',#941,#185); 153 | #134=LINE('',#942,#186); 154 | #135=LINE('',#944,#187); 155 | #136=LINE('',#947,#188); 156 | #137=LINE('',#950,#189); 157 | #138=LINE('',#952,#190); 158 | #139=LINE('',#958,#191); 159 | #140=LINE('',#962,#192); 160 | #141=LINE('',#966,#193); 161 | #142=LINE('',#970,#194); 162 | #143=LINE('',#974,#195); 163 | #144=LINE('',#977,#196); 164 | #145=LINE('',#984,#197); 165 | #146=LINE('',#987,#198); 166 | #147=LINE('',#990,#199); 167 | #148=LINE('',#994,#200); 168 | #149=LINE('',#998,#201); 169 | #150=LINE('',#1002,#202); 170 | #151=LINE('',#1006,#203); 171 | #152=LINE('',#1009,#204); 172 | #153=LINE('',#1015,#205); 173 | #154=LINE('',#1016,#206); 174 | #155=LINE('',#1018,#207); 175 | #156=LINE('',#1021,#208); 176 | #157=LINE('',#1022,#209); 177 | #158=LINE('',#1025,#210); 178 | #159=LINE('',#1027,#211); 179 | #160=LINE('',#1028,#212); 180 | #161=LINE('',#1030,#213); 181 | #162=LINE('',#1033,#214); 182 | #163=LINE('',#1036,#215); 183 | #164=LINE('',#1038,#216); 184 | #165=VECTOR('',#690,10.); 185 | #166=VECTOR('',#693,10.); 186 | #167=VECTOR('',#696,10.); 187 | #168=VECTOR('',#699,10.); 188 | #169=VECTOR('',#702,10.); 189 | #170=VECTOR('',#705,10.); 190 | #171=VECTOR('',#712,10.); 191 | #172=VECTOR('',#715,10.); 192 | #173=VECTOR('',#718,10.); 193 | #174=VECTOR('',#721,10.); 194 | #175=VECTOR('',#724,10.); 195 | #176=VECTOR('',#727,10.); 196 | #177=VECTOR('',#730,10.); 197 | #178=VECTOR('',#733,10.); 198 | #179=VECTOR('',#740,10.); 199 | #180=VECTOR('',#741,10.); 200 | #181=VECTOR('',#744,10.); 201 | #182=VECTOR('',#749,10.); 202 | #183=VECTOR('',#750,10.); 203 | #184=VECTOR('',#755,10.); 204 | #185=VECTOR('',#758,10.); 205 | #186=VECTOR('',#759,10.); 206 | #187=VECTOR('',#762,10.); 207 | #188=VECTOR('',#767,10.); 208 | #189=VECTOR('',#772,1.64999999999999); 209 | #190=VECTOR('',#775,1.65000000000001); 210 | #191=VECTOR('',#780,10.); 211 | #192=VECTOR('',#783,10.); 212 | #193=VECTOR('',#786,10.); 213 | #194=VECTOR('',#789,10.); 214 | #195=VECTOR('',#792,10.); 215 | #196=VECTOR('',#795,10.); 216 | #197=VECTOR('',#802,10.); 217 | #198=VECTOR('',#805,10.); 218 | #199=VECTOR('',#808,10.); 219 | #200=VECTOR('',#811,10.); 220 | #201=VECTOR('',#814,10.); 221 | #202=VECTOR('',#817,10.); 222 | #203=VECTOR('',#820,10.); 223 | #204=VECTOR('',#823,10.); 224 | #205=VECTOR('',#830,10.); 225 | #206=VECTOR('',#831,10.); 226 | #207=VECTOR('',#834,10.); 227 | #208=VECTOR('',#839,10.); 228 | #209=VECTOR('',#840,10.); 229 | #210=VECTOR('',#845,10.); 230 | #211=VECTOR('',#848,10.); 231 | #212=VECTOR('',#849,10.); 232 | #213=VECTOR('',#852,10.); 233 | #214=VECTOR('',#857,10.); 234 | #215=VECTOR('',#862,1.64999999999999); 235 | #216=VECTOR('',#865,1.65000000000001); 236 | #217=CIRCLE('',#621,3.5); 237 | #218=CIRCLE('',#622,3.5); 238 | #219=CIRCLE('',#623,4.); 239 | #220=CIRCLE('',#624,4.); 240 | #221=CIRCLE('',#625,4.); 241 | #222=CIRCLE('',#626,4.); 242 | #223=CIRCLE('',#627,1.2645); 243 | #224=CIRCLE('',#628,1.2645); 244 | #225=CIRCLE('',#630,3.5); 245 | #226=CIRCLE('',#632,4.); 246 | #227=CIRCLE('',#633,4.); 247 | #228=CIRCLE('',#634,4.); 248 | #229=CIRCLE('',#635,4.); 249 | #230=CIRCLE('',#636,3.5); 250 | #231=CIRCLE('',#637,1.2645); 251 | #232=CIRCLE('',#638,1.2645); 252 | #233=CIRCLE('',#653,3.5); 253 | #234=CIRCLE('',#654,3.5); 254 | #235=CIRCLE('',#655,4.); 255 | #236=CIRCLE('',#656,4.); 256 | #237=CIRCLE('',#657,4.); 257 | #238=CIRCLE('',#658,4.); 258 | #239=CIRCLE('',#659,1.2645); 259 | #240=CIRCLE('',#660,1.2645); 260 | #241=CIRCLE('',#662,3.5); 261 | #242=CIRCLE('',#664,4.); 262 | #243=CIRCLE('',#665,4.); 263 | #244=CIRCLE('',#666,4.); 264 | #245=CIRCLE('',#667,4.); 265 | #246=CIRCLE('',#668,3.5); 266 | #247=CIRCLE('',#669,1.2645); 267 | #248=CIRCLE('',#670,1.2645); 268 | #249=VERTEX_POINT('',#868); 269 | #250=VERTEX_POINT('',#869); 270 | #251=VERTEX_POINT('',#871); 271 | #252=VERTEX_POINT('',#873); 272 | #253=VERTEX_POINT('',#875); 273 | #254=VERTEX_POINT('',#877); 274 | #255=VERTEX_POINT('',#879); 275 | #256=VERTEX_POINT('',#881); 276 | #257=VERTEX_POINT('',#883); 277 | #258=VERTEX_POINT('',#885); 278 | #259=VERTEX_POINT('',#887); 279 | #260=VERTEX_POINT('',#889); 280 | #261=VERTEX_POINT('',#892); 281 | #262=VERTEX_POINT('',#894); 282 | #263=VERTEX_POINT('',#897); 283 | #264=VERTEX_POINT('',#899); 284 | #265=VERTEX_POINT('',#903); 285 | #266=VERTEX_POINT('',#905); 286 | #267=VERTEX_POINT('',#907); 287 | #268=VERTEX_POINT('',#909); 288 | #269=VERTEX_POINT('',#911); 289 | #270=VERTEX_POINT('',#913); 290 | #271=VERTEX_POINT('',#915); 291 | #272=VERTEX_POINT('',#917); 292 | #273=VERTEX_POINT('',#919); 293 | #274=VERTEX_POINT('',#921); 294 | #275=VERTEX_POINT('',#924); 295 | #276=VERTEX_POINT('',#926); 296 | #277=VERTEX_POINT('',#954); 297 | #278=VERTEX_POINT('',#955); 298 | #279=VERTEX_POINT('',#957); 299 | #280=VERTEX_POINT('',#959); 300 | #281=VERTEX_POINT('',#961); 301 | #282=VERTEX_POINT('',#963); 302 | #283=VERTEX_POINT('',#965); 303 | #284=VERTEX_POINT('',#967); 304 | #285=VERTEX_POINT('',#969); 305 | #286=VERTEX_POINT('',#971); 306 | #287=VERTEX_POINT('',#973); 307 | #288=VERTEX_POINT('',#975); 308 | #289=VERTEX_POINT('',#978); 309 | #290=VERTEX_POINT('',#980); 310 | #291=VERTEX_POINT('',#983); 311 | #292=VERTEX_POINT('',#985); 312 | #293=VERTEX_POINT('',#989); 313 | #294=VERTEX_POINT('',#991); 314 | #295=VERTEX_POINT('',#993); 315 | #296=VERTEX_POINT('',#995); 316 | #297=VERTEX_POINT('',#997); 317 | #298=VERTEX_POINT('',#999); 318 | #299=VERTEX_POINT('',#1001); 319 | #300=VERTEX_POINT('',#1003); 320 | #301=VERTEX_POINT('',#1005); 321 | #302=VERTEX_POINT('',#1007); 322 | #303=VERTEX_POINT('',#1010); 323 | #304=VERTEX_POINT('',#1012); 324 | #305=EDGE_CURVE('',#249,#250,#217,.T.); 325 | #306=EDGE_CURVE('',#249,#251,#113,.T.); 326 | #307=EDGE_CURVE('',#252,#251,#218,.T.); 327 | #308=EDGE_CURVE('',#252,#253,#114,.T.); 328 | #309=EDGE_CURVE('',#254,#253,#219,.T.); 329 | #310=EDGE_CURVE('',#254,#255,#115,.T.); 330 | #311=EDGE_CURVE('',#256,#255,#220,.T.); 331 | #312=EDGE_CURVE('',#256,#257,#116,.T.); 332 | #313=EDGE_CURVE('',#258,#257,#221,.T.); 333 | #314=EDGE_CURVE('',#258,#259,#117,.T.); 334 | #315=EDGE_CURVE('',#260,#259,#222,.T.); 335 | #316=EDGE_CURVE('',#260,#250,#118,.T.); 336 | #317=EDGE_CURVE('',#261,#261,#223,.F.); 337 | #318=EDGE_CURVE('',#262,#262,#224,.F.); 338 | #319=EDGE_CURVE('',#250,#263,#119,.T.); 339 | #320=EDGE_CURVE('',#263,#264,#225,.T.); 340 | #321=EDGE_CURVE('',#264,#249,#120,.T.); 341 | #322=EDGE_CURVE('',#265,#263,#121,.T.); 342 | #323=EDGE_CURVE('',#266,#265,#226,.T.); 343 | #324=EDGE_CURVE('',#267,#266,#122,.T.); 344 | #325=EDGE_CURVE('',#268,#267,#227,.T.); 345 | #326=EDGE_CURVE('',#269,#268,#123,.T.); 346 | #327=EDGE_CURVE('',#270,#269,#228,.T.); 347 | #328=EDGE_CURVE('',#271,#270,#124,.T.); 348 | #329=EDGE_CURVE('',#272,#271,#229,.T.); 349 | #330=EDGE_CURVE('',#272,#273,#125,.T.); 350 | #331=EDGE_CURVE('',#274,#273,#230,.T.); 351 | #332=EDGE_CURVE('',#274,#264,#126,.T.); 352 | #333=EDGE_CURVE('',#275,#275,#231,.T.); 353 | #334=EDGE_CURVE('',#276,#276,#232,.T.); 354 | #335=EDGE_CURVE('',#251,#274,#127,.T.); 355 | #336=EDGE_CURVE('',#273,#252,#128,.T.); 356 | #337=EDGE_CURVE('',#253,#272,#129,.T.); 357 | #338=EDGE_CURVE('',#265,#260,#130,.T.); 358 | #339=EDGE_CURVE('',#259,#266,#131,.T.); 359 | #340=EDGE_CURVE('',#267,#258,#132,.T.); 360 | #341=EDGE_CURVE('',#255,#270,#133,.T.); 361 | #342=EDGE_CURVE('',#269,#256,#134,.T.); 362 | #343=EDGE_CURVE('',#257,#268,#135,.T.); 363 | #344=EDGE_CURVE('',#271,#254,#136,.T.); 364 | #345=EDGE_CURVE('',#262,#275,#137,.T.); 365 | #346=EDGE_CURVE('',#261,#276,#138,.T.); 366 | #347=EDGE_CURVE('',#277,#278,#233,.T.); 367 | #348=EDGE_CURVE('',#277,#279,#139,.T.); 368 | #349=EDGE_CURVE('',#280,#279,#234,.T.); 369 | #350=EDGE_CURVE('',#280,#281,#140,.T.); 370 | #351=EDGE_CURVE('',#282,#281,#235,.T.); 371 | #352=EDGE_CURVE('',#282,#283,#141,.T.); 372 | #353=EDGE_CURVE('',#284,#283,#236,.T.); 373 | #354=EDGE_CURVE('',#284,#285,#142,.T.); 374 | #355=EDGE_CURVE('',#286,#285,#237,.T.); 375 | #356=EDGE_CURVE('',#286,#287,#143,.T.); 376 | #357=EDGE_CURVE('',#288,#287,#238,.T.); 377 | #358=EDGE_CURVE('',#288,#278,#144,.T.); 378 | #359=EDGE_CURVE('',#289,#289,#239,.F.); 379 | #360=EDGE_CURVE('',#290,#290,#240,.F.); 380 | #361=EDGE_CURVE('',#278,#291,#145,.T.); 381 | #362=EDGE_CURVE('',#291,#292,#241,.T.); 382 | #363=EDGE_CURVE('',#292,#277,#146,.T.); 383 | #364=EDGE_CURVE('',#293,#291,#147,.T.); 384 | #365=EDGE_CURVE('',#294,#293,#242,.T.); 385 | #366=EDGE_CURVE('',#295,#294,#148,.T.); 386 | #367=EDGE_CURVE('',#296,#295,#243,.T.); 387 | #368=EDGE_CURVE('',#297,#296,#149,.T.); 388 | #369=EDGE_CURVE('',#298,#297,#244,.T.); 389 | #370=EDGE_CURVE('',#299,#298,#150,.T.); 390 | #371=EDGE_CURVE('',#300,#299,#245,.T.); 391 | #372=EDGE_CURVE('',#300,#301,#151,.T.); 392 | #373=EDGE_CURVE('',#302,#301,#246,.T.); 393 | #374=EDGE_CURVE('',#302,#292,#152,.T.); 394 | #375=EDGE_CURVE('',#303,#303,#247,.T.); 395 | #376=EDGE_CURVE('',#304,#304,#248,.T.); 396 | #377=EDGE_CURVE('',#279,#302,#153,.T.); 397 | #378=EDGE_CURVE('',#301,#280,#154,.T.); 398 | #379=EDGE_CURVE('',#281,#300,#155,.T.); 399 | #380=EDGE_CURVE('',#293,#288,#156,.T.); 400 | #381=EDGE_CURVE('',#287,#294,#157,.T.); 401 | #382=EDGE_CURVE('',#295,#286,#158,.T.); 402 | #383=EDGE_CURVE('',#283,#298,#159,.T.); 403 | #384=EDGE_CURVE('',#297,#284,#160,.T.); 404 | #385=EDGE_CURVE('',#285,#296,#161,.T.); 405 | #386=EDGE_CURVE('',#299,#282,#162,.T.); 406 | #387=EDGE_CURVE('',#290,#303,#163,.T.); 407 | #388=EDGE_CURVE('',#289,#304,#164,.T.); 408 | #389=ORIENTED_EDGE('',*,*,#305,.F.); 409 | #390=ORIENTED_EDGE('',*,*,#306,.T.); 410 | #391=ORIENTED_EDGE('',*,*,#307,.F.); 411 | #392=ORIENTED_EDGE('',*,*,#308,.T.); 412 | #393=ORIENTED_EDGE('',*,*,#309,.F.); 413 | #394=ORIENTED_EDGE('',*,*,#310,.T.); 414 | #395=ORIENTED_EDGE('',*,*,#311,.F.); 415 | #396=ORIENTED_EDGE('',*,*,#312,.T.); 416 | #397=ORIENTED_EDGE('',*,*,#313,.F.); 417 | #398=ORIENTED_EDGE('',*,*,#314,.T.); 418 | #399=ORIENTED_EDGE('',*,*,#315,.F.); 419 | #400=ORIENTED_EDGE('',*,*,#316,.T.); 420 | #401=ORIENTED_EDGE('',*,*,#317,.T.); 421 | #402=ORIENTED_EDGE('',*,*,#318,.T.); 422 | #403=ORIENTED_EDGE('',*,*,#305,.T.); 423 | #404=ORIENTED_EDGE('',*,*,#319,.T.); 424 | #405=ORIENTED_EDGE('',*,*,#320,.T.); 425 | #406=ORIENTED_EDGE('',*,*,#321,.T.); 426 | #407=ORIENTED_EDGE('',*,*,#320,.F.); 427 | #408=ORIENTED_EDGE('',*,*,#322,.F.); 428 | #409=ORIENTED_EDGE('',*,*,#323,.F.); 429 | #410=ORIENTED_EDGE('',*,*,#324,.F.); 430 | #411=ORIENTED_EDGE('',*,*,#325,.F.); 431 | #412=ORIENTED_EDGE('',*,*,#326,.F.); 432 | #413=ORIENTED_EDGE('',*,*,#327,.F.); 433 | #414=ORIENTED_EDGE('',*,*,#328,.F.); 434 | #415=ORIENTED_EDGE('',*,*,#329,.F.); 435 | #416=ORIENTED_EDGE('',*,*,#330,.T.); 436 | #417=ORIENTED_EDGE('',*,*,#331,.F.); 437 | #418=ORIENTED_EDGE('',*,*,#332,.T.); 438 | #419=ORIENTED_EDGE('',*,*,#333,.T.); 439 | #420=ORIENTED_EDGE('',*,*,#334,.T.); 440 | #421=ORIENTED_EDGE('',*,*,#307,.T.); 441 | #422=ORIENTED_EDGE('',*,*,#335,.T.); 442 | #423=ORIENTED_EDGE('',*,*,#331,.T.); 443 | #424=ORIENTED_EDGE('',*,*,#336,.T.); 444 | #425=ORIENTED_EDGE('',*,*,#336,.F.); 445 | #426=ORIENTED_EDGE('',*,*,#330,.F.); 446 | #427=ORIENTED_EDGE('',*,*,#337,.F.); 447 | #428=ORIENTED_EDGE('',*,*,#308,.F.); 448 | #429=ORIENTED_EDGE('',*,*,#321,.F.); 449 | #430=ORIENTED_EDGE('',*,*,#332,.F.); 450 | #431=ORIENTED_EDGE('',*,*,#335,.F.); 451 | #432=ORIENTED_EDGE('',*,*,#306,.F.); 452 | #433=ORIENTED_EDGE('',*,*,#323,.T.); 453 | #434=ORIENTED_EDGE('',*,*,#338,.T.); 454 | #435=ORIENTED_EDGE('',*,*,#315,.T.); 455 | #436=ORIENTED_EDGE('',*,*,#339,.T.); 456 | #437=ORIENTED_EDGE('',*,*,#319,.F.); 457 | #438=ORIENTED_EDGE('',*,*,#316,.F.); 458 | #439=ORIENTED_EDGE('',*,*,#338,.F.); 459 | #440=ORIENTED_EDGE('',*,*,#322,.T.); 460 | #441=ORIENTED_EDGE('',*,*,#339,.F.); 461 | #442=ORIENTED_EDGE('',*,*,#314,.F.); 462 | #443=ORIENTED_EDGE('',*,*,#340,.F.); 463 | #444=ORIENTED_EDGE('',*,*,#324,.T.); 464 | #445=ORIENTED_EDGE('',*,*,#311,.T.); 465 | #446=ORIENTED_EDGE('',*,*,#341,.T.); 466 | #447=ORIENTED_EDGE('',*,*,#327,.T.); 467 | #448=ORIENTED_EDGE('',*,*,#342,.T.); 468 | #449=ORIENTED_EDGE('',*,*,#342,.F.); 469 | #450=ORIENTED_EDGE('',*,*,#326,.T.); 470 | #451=ORIENTED_EDGE('',*,*,#343,.F.); 471 | #452=ORIENTED_EDGE('',*,*,#312,.F.); 472 | #453=ORIENTED_EDGE('',*,*,#313,.T.); 473 | #454=ORIENTED_EDGE('',*,*,#343,.T.); 474 | #455=ORIENTED_EDGE('',*,*,#325,.T.); 475 | #456=ORIENTED_EDGE('',*,*,#340,.T.); 476 | #457=ORIENTED_EDGE('',*,*,#329,.T.); 477 | #458=ORIENTED_EDGE('',*,*,#344,.T.); 478 | #459=ORIENTED_EDGE('',*,*,#309,.T.); 479 | #460=ORIENTED_EDGE('',*,*,#337,.T.); 480 | #461=ORIENTED_EDGE('',*,*,#341,.F.); 481 | #462=ORIENTED_EDGE('',*,*,#310,.F.); 482 | #463=ORIENTED_EDGE('',*,*,#344,.F.); 483 | #464=ORIENTED_EDGE('',*,*,#328,.T.); 484 | #465=ORIENTED_EDGE('',*,*,#318,.F.); 485 | #466=ORIENTED_EDGE('',*,*,#345,.T.); 486 | #467=ORIENTED_EDGE('',*,*,#333,.F.); 487 | #468=ORIENTED_EDGE('',*,*,#345,.F.); 488 | #469=ORIENTED_EDGE('',*,*,#317,.F.); 489 | #470=ORIENTED_EDGE('',*,*,#346,.T.); 490 | #471=ORIENTED_EDGE('',*,*,#334,.F.); 491 | #472=ORIENTED_EDGE('',*,*,#346,.F.); 492 | #473=ORIENTED_EDGE('',*,*,#347,.F.); 493 | #474=ORIENTED_EDGE('',*,*,#348,.T.); 494 | #475=ORIENTED_EDGE('',*,*,#349,.F.); 495 | #476=ORIENTED_EDGE('',*,*,#350,.T.); 496 | #477=ORIENTED_EDGE('',*,*,#351,.F.); 497 | #478=ORIENTED_EDGE('',*,*,#352,.T.); 498 | #479=ORIENTED_EDGE('',*,*,#353,.F.); 499 | #480=ORIENTED_EDGE('',*,*,#354,.T.); 500 | #481=ORIENTED_EDGE('',*,*,#355,.F.); 501 | #482=ORIENTED_EDGE('',*,*,#356,.T.); 502 | #483=ORIENTED_EDGE('',*,*,#357,.F.); 503 | #484=ORIENTED_EDGE('',*,*,#358,.T.); 504 | #485=ORIENTED_EDGE('',*,*,#359,.T.); 505 | #486=ORIENTED_EDGE('',*,*,#360,.T.); 506 | #487=ORIENTED_EDGE('',*,*,#347,.T.); 507 | #488=ORIENTED_EDGE('',*,*,#361,.T.); 508 | #489=ORIENTED_EDGE('',*,*,#362,.T.); 509 | #490=ORIENTED_EDGE('',*,*,#363,.T.); 510 | #491=ORIENTED_EDGE('',*,*,#362,.F.); 511 | #492=ORIENTED_EDGE('',*,*,#364,.F.); 512 | #493=ORIENTED_EDGE('',*,*,#365,.F.); 513 | #494=ORIENTED_EDGE('',*,*,#366,.F.); 514 | #495=ORIENTED_EDGE('',*,*,#367,.F.); 515 | #496=ORIENTED_EDGE('',*,*,#368,.F.); 516 | #497=ORIENTED_EDGE('',*,*,#369,.F.); 517 | #498=ORIENTED_EDGE('',*,*,#370,.F.); 518 | #499=ORIENTED_EDGE('',*,*,#371,.F.); 519 | #500=ORIENTED_EDGE('',*,*,#372,.T.); 520 | #501=ORIENTED_EDGE('',*,*,#373,.F.); 521 | #502=ORIENTED_EDGE('',*,*,#374,.T.); 522 | #503=ORIENTED_EDGE('',*,*,#375,.T.); 523 | #504=ORIENTED_EDGE('',*,*,#376,.T.); 524 | #505=ORIENTED_EDGE('',*,*,#349,.T.); 525 | #506=ORIENTED_EDGE('',*,*,#377,.T.); 526 | #507=ORIENTED_EDGE('',*,*,#373,.T.); 527 | #508=ORIENTED_EDGE('',*,*,#378,.T.); 528 | #509=ORIENTED_EDGE('',*,*,#378,.F.); 529 | #510=ORIENTED_EDGE('',*,*,#372,.F.); 530 | #511=ORIENTED_EDGE('',*,*,#379,.F.); 531 | #512=ORIENTED_EDGE('',*,*,#350,.F.); 532 | #513=ORIENTED_EDGE('',*,*,#363,.F.); 533 | #514=ORIENTED_EDGE('',*,*,#374,.F.); 534 | #515=ORIENTED_EDGE('',*,*,#377,.F.); 535 | #516=ORIENTED_EDGE('',*,*,#348,.F.); 536 | #517=ORIENTED_EDGE('',*,*,#365,.T.); 537 | #518=ORIENTED_EDGE('',*,*,#380,.T.); 538 | #519=ORIENTED_EDGE('',*,*,#357,.T.); 539 | #520=ORIENTED_EDGE('',*,*,#381,.T.); 540 | #521=ORIENTED_EDGE('',*,*,#361,.F.); 541 | #522=ORIENTED_EDGE('',*,*,#358,.F.); 542 | #523=ORIENTED_EDGE('',*,*,#380,.F.); 543 | #524=ORIENTED_EDGE('',*,*,#364,.T.); 544 | #525=ORIENTED_EDGE('',*,*,#381,.F.); 545 | #526=ORIENTED_EDGE('',*,*,#356,.F.); 546 | #527=ORIENTED_EDGE('',*,*,#382,.F.); 547 | #528=ORIENTED_EDGE('',*,*,#366,.T.); 548 | #529=ORIENTED_EDGE('',*,*,#353,.T.); 549 | #530=ORIENTED_EDGE('',*,*,#383,.T.); 550 | #531=ORIENTED_EDGE('',*,*,#369,.T.); 551 | #532=ORIENTED_EDGE('',*,*,#384,.T.); 552 | #533=ORIENTED_EDGE('',*,*,#384,.F.); 553 | #534=ORIENTED_EDGE('',*,*,#368,.T.); 554 | #535=ORIENTED_EDGE('',*,*,#385,.F.); 555 | #536=ORIENTED_EDGE('',*,*,#354,.F.); 556 | #537=ORIENTED_EDGE('',*,*,#355,.T.); 557 | #538=ORIENTED_EDGE('',*,*,#385,.T.); 558 | #539=ORIENTED_EDGE('',*,*,#367,.T.); 559 | #540=ORIENTED_EDGE('',*,*,#382,.T.); 560 | #541=ORIENTED_EDGE('',*,*,#371,.T.); 561 | #542=ORIENTED_EDGE('',*,*,#386,.T.); 562 | #543=ORIENTED_EDGE('',*,*,#351,.T.); 563 | #544=ORIENTED_EDGE('',*,*,#379,.T.); 564 | #545=ORIENTED_EDGE('',*,*,#383,.F.); 565 | #546=ORIENTED_EDGE('',*,*,#352,.F.); 566 | #547=ORIENTED_EDGE('',*,*,#386,.F.); 567 | #548=ORIENTED_EDGE('',*,*,#370,.T.); 568 | #549=ORIENTED_EDGE('',*,*,#360,.F.); 569 | #550=ORIENTED_EDGE('',*,*,#387,.T.); 570 | #551=ORIENTED_EDGE('',*,*,#375,.F.); 571 | #552=ORIENTED_EDGE('',*,*,#387,.F.); 572 | #553=ORIENTED_EDGE('',*,*,#359,.F.); 573 | #554=ORIENTED_EDGE('',*,*,#388,.T.); 574 | #555=ORIENTED_EDGE('',*,*,#376,.F.); 575 | #556=ORIENTED_EDGE('',*,*,#388,.F.); 576 | #557=PLANE('',#620); 577 | #558=PLANE('',#631); 578 | #559=PLANE('',#640); 579 | #560=PLANE('',#641); 580 | #561=PLANE('',#643); 581 | #562=PLANE('',#644); 582 | #563=PLANE('',#646); 583 | #564=PLANE('',#649); 584 | #565=PLANE('',#652); 585 | #566=PLANE('',#663); 586 | #567=PLANE('',#672); 587 | #568=PLANE('',#673); 588 | #569=PLANE('',#675); 589 | #570=PLANE('',#676); 590 | #571=PLANE('',#678); 591 | #572=PLANE('',#681); 592 | #573=ADVANCED_FACE('',(#41,#33,#34),#557,.T.); 593 | #574=ADVANCED_FACE('',(#42),#17,.T.); 594 | #575=ADVANCED_FACE('',(#43,#35,#36),#558,.F.); 595 | #576=ADVANCED_FACE('',(#44),#18,.T.); 596 | #577=ADVANCED_FACE('',(#45),#559,.T.); 597 | #578=ADVANCED_FACE('',(#46),#560,.T.); 598 | #579=ADVANCED_FACE('',(#47),#19,.F.); 599 | #580=ADVANCED_FACE('',(#48),#561,.T.); 600 | #581=ADVANCED_FACE('',(#49),#562,.T.); 601 | #582=ADVANCED_FACE('',(#50),#20,.T.); 602 | #583=ADVANCED_FACE('',(#51),#563,.T.); 603 | #584=ADVANCED_FACE('',(#52),#21,.T.); 604 | #585=ADVANCED_FACE('',(#53),#22,.F.); 605 | #586=ADVANCED_FACE('',(#54),#564,.T.); 606 | #587=ADVANCED_FACE('',(#55),#23,.F.); 607 | #588=ADVANCED_FACE('',(#56),#24,.F.); 608 | #589=ADVANCED_FACE('',(#57,#37,#38),#565,.T.); 609 | #590=ADVANCED_FACE('',(#58),#25,.T.); 610 | #591=ADVANCED_FACE('',(#59,#39,#40),#566,.F.); 611 | #592=ADVANCED_FACE('',(#60),#26,.T.); 612 | #593=ADVANCED_FACE('',(#61),#567,.T.); 613 | #594=ADVANCED_FACE('',(#62),#568,.T.); 614 | #595=ADVANCED_FACE('',(#63),#27,.F.); 615 | #596=ADVANCED_FACE('',(#64),#569,.T.); 616 | #597=ADVANCED_FACE('',(#65),#570,.T.); 617 | #598=ADVANCED_FACE('',(#66),#28,.T.); 618 | #599=ADVANCED_FACE('',(#67),#571,.T.); 619 | #600=ADVANCED_FACE('',(#68),#29,.T.); 620 | #601=ADVANCED_FACE('',(#69),#30,.F.); 621 | #602=ADVANCED_FACE('',(#70),#572,.T.); 622 | #603=ADVANCED_FACE('',(#71),#31,.F.); 623 | #604=ADVANCED_FACE('',(#72),#32,.F.); 624 | #605=CLOSED_SHELL('',(#573,#574,#575,#576,#577,#578,#579,#580,#581,#582, 625 | #583,#584,#585,#586,#587,#588)); 626 | #606=CLOSED_SHELL('',(#589,#590,#591,#592,#593,#594,#595,#596,#597,#598, 627 | #599,#600,#601,#602,#603,#604)); 628 | #607=DERIVED_UNIT_ELEMENT(#609,1.); 629 | #608=DERIVED_UNIT_ELEMENT(#1044,3.); 630 | #609=( 631 | MASS_UNIT() 632 | NAMED_UNIT(*) 633 | SI_UNIT(.KILO.,.GRAM.) 634 | ); 635 | #610=DERIVED_UNIT((#607,#608)); 636 | #611=MEASURE_REPRESENTATION_ITEM('density measure', 637 | POSITIVE_RATIO_MEASURE(7850.),#610); 638 | #612=PROPERTY_DEFINITION_REPRESENTATION(#617,#614); 639 | #613=PROPERTY_DEFINITION_REPRESENTATION(#618,#615); 640 | #614=REPRESENTATION('material name',(#616),#1041); 641 | #615=REPRESENTATION('density',(#611),#1041); 642 | #616=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel'); 643 | #617=PROPERTY_DEFINITION('material property','material name',#1051); 644 | #618=PROPERTY_DEFINITION('material property','density of part',#1051); 645 | #619=AXIS2_PLACEMENT_3D('placement',#866,#684,#685); 646 | #620=AXIS2_PLACEMENT_3D('',#867,#686,#687); 647 | #621=AXIS2_PLACEMENT_3D('',#870,#688,#689); 648 | #622=AXIS2_PLACEMENT_3D('',#874,#691,#692); 649 | #623=AXIS2_PLACEMENT_3D('',#878,#694,#695); 650 | #624=AXIS2_PLACEMENT_3D('',#882,#697,#698); 651 | #625=AXIS2_PLACEMENT_3D('',#886,#700,#701); 652 | #626=AXIS2_PLACEMENT_3D('',#890,#703,#704); 653 | #627=AXIS2_PLACEMENT_3D('',#893,#706,#707); 654 | #628=AXIS2_PLACEMENT_3D('',#895,#708,#709); 655 | #629=AXIS2_PLACEMENT_3D('',#896,#710,#711); 656 | #630=AXIS2_PLACEMENT_3D('',#900,#713,#714); 657 | #631=AXIS2_PLACEMENT_3D('',#902,#716,#717); 658 | #632=AXIS2_PLACEMENT_3D('',#906,#719,#720); 659 | #633=AXIS2_PLACEMENT_3D('',#910,#722,#723); 660 | #634=AXIS2_PLACEMENT_3D('',#914,#725,#726); 661 | #635=AXIS2_PLACEMENT_3D('',#918,#728,#729); 662 | #636=AXIS2_PLACEMENT_3D('',#922,#731,#732); 663 | #637=AXIS2_PLACEMENT_3D('',#925,#734,#735); 664 | #638=AXIS2_PLACEMENT_3D('',#927,#736,#737); 665 | #639=AXIS2_PLACEMENT_3D('',#928,#738,#739); 666 | #640=AXIS2_PLACEMENT_3D('',#931,#742,#743); 667 | #641=AXIS2_PLACEMENT_3D('',#933,#745,#746); 668 | #642=AXIS2_PLACEMENT_3D('',#934,#747,#748); 669 | #643=AXIS2_PLACEMENT_3D('',#937,#751,#752); 670 | #644=AXIS2_PLACEMENT_3D('',#938,#753,#754); 671 | #645=AXIS2_PLACEMENT_3D('',#940,#756,#757); 672 | #646=AXIS2_PLACEMENT_3D('',#943,#760,#761); 673 | #647=AXIS2_PLACEMENT_3D('',#945,#763,#764); 674 | #648=AXIS2_PLACEMENT_3D('',#946,#765,#766); 675 | #649=AXIS2_PLACEMENT_3D('',#948,#768,#769); 676 | #650=AXIS2_PLACEMENT_3D('',#949,#770,#771); 677 | #651=AXIS2_PLACEMENT_3D('',#951,#773,#774); 678 | #652=AXIS2_PLACEMENT_3D('',#953,#776,#777); 679 | #653=AXIS2_PLACEMENT_3D('',#956,#778,#779); 680 | #654=AXIS2_PLACEMENT_3D('',#960,#781,#782); 681 | #655=AXIS2_PLACEMENT_3D('',#964,#784,#785); 682 | #656=AXIS2_PLACEMENT_3D('',#968,#787,#788); 683 | #657=AXIS2_PLACEMENT_3D('',#972,#790,#791); 684 | #658=AXIS2_PLACEMENT_3D('',#976,#793,#794); 685 | #659=AXIS2_PLACEMENT_3D('',#979,#796,#797); 686 | #660=AXIS2_PLACEMENT_3D('',#981,#798,#799); 687 | #661=AXIS2_PLACEMENT_3D('',#982,#800,#801); 688 | #662=AXIS2_PLACEMENT_3D('',#986,#803,#804); 689 | #663=AXIS2_PLACEMENT_3D('',#988,#806,#807); 690 | #664=AXIS2_PLACEMENT_3D('',#992,#809,#810); 691 | #665=AXIS2_PLACEMENT_3D('',#996,#812,#813); 692 | #666=AXIS2_PLACEMENT_3D('',#1000,#815,#816); 693 | #667=AXIS2_PLACEMENT_3D('',#1004,#818,#819); 694 | #668=AXIS2_PLACEMENT_3D('',#1008,#821,#822); 695 | #669=AXIS2_PLACEMENT_3D('',#1011,#824,#825); 696 | #670=AXIS2_PLACEMENT_3D('',#1013,#826,#827); 697 | #671=AXIS2_PLACEMENT_3D('',#1014,#828,#829); 698 | #672=AXIS2_PLACEMENT_3D('',#1017,#832,#833); 699 | #673=AXIS2_PLACEMENT_3D('',#1019,#835,#836); 700 | #674=AXIS2_PLACEMENT_3D('',#1020,#837,#838); 701 | #675=AXIS2_PLACEMENT_3D('',#1023,#841,#842); 702 | #676=AXIS2_PLACEMENT_3D('',#1024,#843,#844); 703 | #677=AXIS2_PLACEMENT_3D('',#1026,#846,#847); 704 | #678=AXIS2_PLACEMENT_3D('',#1029,#850,#851); 705 | #679=AXIS2_PLACEMENT_3D('',#1031,#853,#854); 706 | #680=AXIS2_PLACEMENT_3D('',#1032,#855,#856); 707 | #681=AXIS2_PLACEMENT_3D('',#1034,#858,#859); 708 | #682=AXIS2_PLACEMENT_3D('',#1035,#860,#861); 709 | #683=AXIS2_PLACEMENT_3D('',#1037,#863,#864); 710 | #684=DIRECTION('axis',(0.,0.,1.)); 711 | #685=DIRECTION('refdir',(1.,0.,0.)); 712 | #686=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 713 | 1.)); 714 | #687=DIRECTION('ref_axis',(-1.,9.56208302928179E-47,-1.03229845063695E-30)); 715 | #688=DIRECTION('center_axis',(1.03229845063695E-30,5.55111512312574E-17, 716 | -1.)); 717 | #689=DIRECTION('ref_axis',(-0.707106781186546,-0.707106781186549,8.97195690676446E-16)); 718 | #690=DIRECTION('',(-2.95822839457887E-30,1.,-3.00178187071815E-16)); 719 | #691=DIRECTION('center_axis',(1.03229845063695E-30,5.55111512312574E-17, 720 | -1.)); 721 | #692=DIRECTION('ref_axis',(-0.707106781186544,0.707106781186551,0.)); 722 | #693=DIRECTION('',(0.,-1.,-5.55111512312574E-17)); 723 | #694=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 724 | 1.)); 725 | #695=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); 726 | #696=DIRECTION('',(-1.,9.56208302928179E-47,-1.03229845063695E-30)); 727 | #697=DIRECTION('center_axis',(1.03229845063695E-30,5.55111512312574E-17, 728 | -1.)); 729 | #698=DIRECTION('ref_axis',(-0.707106781186551,0.707106781186544,0.)); 730 | #699=DIRECTION('',(0.,-1.,-5.55111512312574E-17)); 731 | #700=DIRECTION('center_axis',(1.03229845063695E-30,5.55111512312574E-17, 732 | -1.)); 733 | #701=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); 734 | #702=DIRECTION('',(1.,-9.56208302928179E-47,1.03229845063695E-30)); 735 | #703=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 736 | 1.)); 737 | #704=DIRECTION('ref_axis',(0.707106781186551,0.707106781186544,-9.81307786677359E-16)); 738 | #705=DIRECTION('',(2.95822839457879E-30,-1.,-5.55111512312574E-17)); 739 | #706=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 740 | 1.)); 741 | #707=DIRECTION('ref_axis',(-1.,9.56208302928179E-47,0.)); 742 | #708=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 743 | 1.)); 744 | #709=DIRECTION('ref_axis',(-1.,9.56208302928179E-47,0.)); 745 | #710=DIRECTION('center_axis',(0.,-3.48919246540068E-30,1.)); 746 | #711=DIRECTION('ref_axis',(0.707106781186549,-0.707106781186546,0.)); 747 | #712=DIRECTION('',(-1.37496851511279E-15,-1.87073344987363E-43,-1.)); 748 | #713=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 749 | 1.)); 750 | #714=DIRECTION('ref_axis',(-0.707106781186546,-0.707106781186549,8.97195690676446E-16)); 751 | #715=DIRECTION('',(0.,-3.48919246540068E-30,1.)); 752 | #716=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 753 | 1.)); 754 | #717=DIRECTION('ref_axis',(-1.,9.56208302928179E-47,-1.03229845063695E-30)); 755 | #718=DIRECTION('',(2.95822839457879E-30,-1.,-5.55111512312574E-17)); 756 | #719=DIRECTION('center_axis',(1.03229845063695E-30,5.55111512312574E-17, 757 | -1.)); 758 | #720=DIRECTION('ref_axis',(0.707106781186551,0.707106781186544,-9.81307786677359E-16)); 759 | #721=DIRECTION('',(1.,-9.56208302928179E-47,1.03229845063695E-30)); 760 | #722=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 761 | 1.)); 762 | #723=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); 763 | #724=DIRECTION('',(0.,-1.,-5.55111512312574E-17)); 764 | #725=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 765 | 1.)); 766 | #726=DIRECTION('ref_axis',(-0.707106781186551,0.707106781186544,0.)); 767 | #727=DIRECTION('',(-1.,9.56208302928179E-47,-1.03229845063695E-30)); 768 | #728=DIRECTION('center_axis',(1.03229845063695E-30,5.55111512312574E-17, 769 | -1.)); 770 | #729=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); 771 | #730=DIRECTION('',(0.,1.,5.55111512312574E-17)); 772 | #731=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 773 | 1.)); 774 | #732=DIRECTION('ref_axis',(-0.707106781186544,0.707106781186551,0.)); 775 | #733=DIRECTION('',(0.,-1.,-5.55111512312574E-17)); 776 | #734=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 777 | 1.)); 778 | #735=DIRECTION('ref_axis',(-1.,9.56208302928179E-47,0.)); 779 | #736=DIRECTION('center_axis',(-1.03229845063695E-30,-5.55111512312574E-17, 780 | 1.)); 781 | #737=DIRECTION('ref_axis',(-1.,9.56208302928179E-47,0.)); 782 | #738=DIRECTION('center_axis',(0.,1.79694632761153E-43,1.)); 783 | #739=DIRECTION('ref_axis',(0.707106781186548,0.707106781186548,0.)); 784 | #740=DIRECTION('',(0.,-1.79694632761153E-43,-1.)); 785 | #741=DIRECTION('',(0.,1.79694632761153E-43,1.)); 786 | #742=DIRECTION('center_axis',(-1.,0.,0.)); 787 | #743=DIRECTION('ref_axis',(0.,-1.,-5.55111512312574E-17)); 788 | #744=DIRECTION('',(0.,0.,-1.)); 789 | #745=DIRECTION('center_axis',(1.,0.,0.)); 790 | #746=DIRECTION('ref_axis',(0.,1.,5.55111512312574E-17)); 791 | #747=DIRECTION('center_axis',(1.37496851511279E-15,-1.31475631041568E-61, 792 | 1.)); 793 | #748=DIRECTION('ref_axis',(0.707106781186551,0.707106781186544,-9.81307786677359E-16)); 794 | #749=DIRECTION('',(1.37496851511279E-15,-1.31475631041568E-61,1.)); 795 | #750=DIRECTION('',(-1.37496851511279E-15,1.31475631041568E-61,-1.)); 796 | #751=DIRECTION('center_axis',(-1.,-3.03455447975944E-30,1.37496851511279E-15)); 797 | #752=DIRECTION('ref_axis',(2.95822839457879E-30,-1.,-5.55111512312574E-17)); 798 | #753=DIRECTION('center_axis',(-9.56208302928179E-47,-1.,0.)); 799 | #754=DIRECTION('ref_axis',(1.,-9.56208302928179E-47,1.03229845063695E-30)); 800 | #755=DIRECTION('',(0.,0.,1.)); 801 | #756=DIRECTION('center_axis',(0.,0.,1.)); 802 | #757=DIRECTION('ref_axis',(-0.707106781186551,0.707106781186544,0.)); 803 | #758=DIRECTION('',(0.,0.,-1.)); 804 | #759=DIRECTION('',(0.,0.,1.)); 805 | #760=DIRECTION('center_axis',(-1.,0.,0.)); 806 | #761=DIRECTION('ref_axis',(0.,-1.,-5.55111512312574E-17)); 807 | #762=DIRECTION('',(0.,0.,-1.)); 808 | #763=DIRECTION('center_axis',(0.,0.,1.)); 809 | #764=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,0.)); 810 | #765=DIRECTION('center_axis',(0.,0.,1.)); 811 | #766=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,0.)); 812 | #767=DIRECTION('',(0.,0.,1.)); 813 | #768=DIRECTION('center_axis',(9.56208302928179E-47,1.,0.)); 814 | #769=DIRECTION('ref_axis',(-1.,9.56208302928179E-47,-1.03229845063695E-30)); 815 | #770=DIRECTION('center_axis',(0.,0.,1.)); 816 | #771=DIRECTION('ref_axis',(-1.,9.56208302928179E-47,0.)); 817 | #772=DIRECTION('',(0.,0.,-1.)); 818 | #773=DIRECTION('center_axis',(0.,0.,1.)); 819 | #774=DIRECTION('ref_axis',(-1.,9.56208302928179E-47,0.)); 820 | #775=DIRECTION('',(0.,0.,-1.)); 821 | #776=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 822 | -1.)); 823 | #777=DIRECTION('ref_axis',(1.,9.56208302928179E-47,-1.22464679914734E-16)); 824 | #778=DIRECTION('center_axis',(1.22464679914734E-16,5.55111512312574E-17, 825 | 1.)); 826 | #779=DIRECTION('ref_axis',(0.707106781186546,-0.707106781186549,-9.83791296299995E-16)); 827 | #780=DIRECTION('',(2.99498962017601E-30,1.,3.00178187071815E-16)); 828 | #781=DIRECTION('center_axis',(1.22464679914734E-16,5.55111512312574E-17, 829 | 1.)); 830 | #782=DIRECTION('ref_axis',(0.707106781186544,0.707106781186551,-8.65956056235489E-17)); 831 | #783=DIRECTION('',(6.7981553672344E-33,-1.,5.55111512312574E-17)); 832 | #784=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 833 | -1.)); 834 | #785=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,8.65956056235493E-17)); 835 | #786=DIRECTION('',(1.,9.56208302928179E-47,-1.22464679914734E-16)); 836 | #787=DIRECTION('center_axis',(1.22464679914734E-16,5.55111512312574E-17, 837 | 1.)); 838 | #788=DIRECTION('ref_axis',(0.707106781186551,0.707106781186544,-8.65956056235497E-17)); 839 | #789=DIRECTION('',(6.7981553672344E-33,-1.,5.55111512312574E-17)); 840 | #790=DIRECTION('center_axis',(1.22464679914734E-16,5.55111512312574E-17, 841 | 1.)); 842 | #791=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,-8.65956056235493E-17)); 843 | #792=DIRECTION('',(-1.,-9.56208302928179E-47,1.22464679914734E-16)); 844 | #793=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 845 | -1.)); 846 | #794=DIRECTION('ref_axis',(-0.707106781186551,0.707106781186544,1.06790339230091E-15)); 847 | #795=DIRECTION('',(-2.95143023921156E-30,-1.,5.55111512312574E-17)); 848 | #796=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 849 | -1.)); 850 | #797=DIRECTION('ref_axis',(1.,9.56208302928179E-47,-1.22464679914735E-16)); 851 | #798=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 852 | -1.)); 853 | #799=DIRECTION('ref_axis',(1.,9.56208302928179E-47,-1.22464679914735E-16)); 854 | #800=DIRECTION('center_axis',(-1.22464679914735E-16,-3.48919246540068E-30, 855 | -1.)); 856 | #801=DIRECTION('ref_axis',(-0.707106781186549,-0.707106781186546,8.65956056235496E-17)); 857 | #802=DIRECTION('',(1.49743319502752E-15,-1.87073344987363E-43,1.)); 858 | #803=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 859 | -1.)); 860 | #804=DIRECTION('ref_axis',(0.707106781186546,-0.707106781186549,-9.83791296299995E-16)); 861 | #805=DIRECTION('',(-1.22464679914735E-16,-3.48919246540068E-30,-1.)); 862 | #806=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 863 | -1.)); 864 | #807=DIRECTION('ref_axis',(1.,9.56208302928179E-47,-1.22464679914734E-16)); 865 | #808=DIRECTION('',(-2.95143023921156E-30,-1.,5.55111512312574E-17)); 866 | #809=DIRECTION('center_axis',(1.22464679914734E-16,5.55111512312574E-17, 867 | 1.)); 868 | #810=DIRECTION('ref_axis',(-0.707106781186551,0.707106781186544,1.06790339230091E-15)); 869 | #811=DIRECTION('',(-1.,-9.56208302928179E-47,1.22464679914734E-16)); 870 | #812=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 871 | -1.)); 872 | #813=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,-8.65956056235493E-17)); 873 | #814=DIRECTION('',(6.7981553672344E-33,-1.,5.55111512312574E-17)); 874 | #815=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 875 | -1.)); 876 | #816=DIRECTION('ref_axis',(0.707106781186551,0.707106781186544,-8.65956056235497E-17)); 877 | #817=DIRECTION('',(1.,9.56208302928179E-47,-1.22464679914734E-16)); 878 | #818=DIRECTION('center_axis',(1.22464679914734E-16,5.55111512312574E-17, 879 | 1.)); 880 | #819=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,8.65956056235493E-17)); 881 | #820=DIRECTION('',(-6.7981553672344E-33,1.,-5.55111512312574E-17)); 882 | #821=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 883 | -1.)); 884 | #822=DIRECTION('ref_axis',(0.707106781186544,0.707106781186551,-8.65956056235489E-17)); 885 | #823=DIRECTION('',(6.7981553672344E-33,-1.,5.55111512312574E-17)); 886 | #824=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 887 | -1.)); 888 | #825=DIRECTION('ref_axis',(1.,9.56208302928179E-47,-1.22464679914735E-16)); 889 | #826=DIRECTION('center_axis',(-1.22464679914734E-16,-5.55111512312574E-17, 890 | -1.)); 891 | #827=DIRECTION('ref_axis',(1.,9.56208302928179E-47,-1.22464679914735E-16)); 892 | #828=DIRECTION('center_axis',(-1.22464679914735E-16,1.79694632761153E-43, 893 | -1.)); 894 | #829=DIRECTION('ref_axis',(-0.707106781186548,0.707106781186548,8.65956056235493E-17)); 895 | #830=DIRECTION('',(1.22464679914735E-16,-1.79694632761153E-43,1.)); 896 | #831=DIRECTION('',(-1.22464679914735E-16,1.79694632761153E-43,-1.)); 897 | #832=DIRECTION('center_axis',(1.,0.,-1.22464679914735E-16)); 898 | #833=DIRECTION('ref_axis',(6.7981553672344E-33,-1.,5.55111512312574E-17)); 899 | #834=DIRECTION('',(1.22464679914735E-16,0.,1.)); 900 | #835=DIRECTION('center_axis',(-1.,0.,1.22464679914735E-16)); 901 | #836=DIRECTION('ref_axis',(-6.7981553672344E-33,1.,-5.55111512312574E-17)); 902 | #837=DIRECTION('center_axis',(-1.49743319502752E-15,-1.31475631041568E-61, 903 | -1.)); 904 | #838=DIRECTION('ref_axis',(-0.707106781186551,0.707106781186544,1.06790339230091E-15)); 905 | #839=DIRECTION('',(-1.49743319502752E-15,-1.31475631041568E-61,-1.)); 906 | #840=DIRECTION('',(1.49743319502752E-15,1.31475631041568E-61,1.)); 907 | #841=DIRECTION('center_axis',(1.,-3.03455447975944E-30,-1.49743319502752E-15)); 908 | #842=DIRECTION('ref_axis',(-2.95143023921156E-30,-1.,5.55111512312574E-17)); 909 | #843=DIRECTION('center_axis',(9.56208302928179E-47,-1.,-1.17101743749912E-62)); 910 | #844=DIRECTION('ref_axis',(-1.,-9.56208302928179E-47,1.22464679914734E-16)); 911 | #845=DIRECTION('',(-1.22464679914735E-16,0.,-1.)); 912 | #846=DIRECTION('center_axis',(-1.22464679914735E-16,0.,-1.)); 913 | #847=DIRECTION('ref_axis',(0.707106781186551,0.707106781186544,-8.65956056235497E-17)); 914 | #848=DIRECTION('',(1.22464679914735E-16,0.,1.)); 915 | #849=DIRECTION('',(-1.22464679914735E-16,0.,-1.)); 916 | #850=DIRECTION('center_axis',(1.,0.,-1.22464679914735E-16)); 917 | #851=DIRECTION('ref_axis',(6.7981553672344E-33,-1.,5.55111512312574E-17)); 918 | #852=DIRECTION('',(1.22464679914735E-16,0.,1.)); 919 | #853=DIRECTION('center_axis',(-1.22464679914735E-16,0.,-1.)); 920 | #854=DIRECTION('ref_axis',(0.707106781186548,-0.707106781186548,-8.65956056235493E-17)); 921 | #855=DIRECTION('center_axis',(-1.22464679914735E-16,0.,-1.)); 922 | #856=DIRECTION('ref_axis',(-0.707106781186548,-0.707106781186548,8.65956056235493E-17)); 923 | #857=DIRECTION('',(-1.22464679914735E-16,0.,-1.)); 924 | #858=DIRECTION('center_axis',(-9.56208302928179E-47,1.,1.17101743749912E-62)); 925 | #859=DIRECTION('ref_axis',(1.,9.56208302928179E-47,-1.22464679914734E-16)); 926 | #860=DIRECTION('center_axis',(-1.22464679914735E-16,0.,-1.)); 927 | #861=DIRECTION('ref_axis',(1.,9.56208302928179E-47,-1.22464679914735E-16)); 928 | #862=DIRECTION('',(1.22464679914735E-16,0.,1.)); 929 | #863=DIRECTION('center_axis',(-1.22464679914735E-16,0.,-1.)); 930 | #864=DIRECTION('ref_axis',(1.,9.56208302928179E-47,-1.22464679914735E-16)); 931 | #865=DIRECTION('',(1.22464679914735E-16,0.,1.)); 932 | #866=CARTESIAN_POINT('',(0.,0.,0.)); 933 | #867=CARTESIAN_POINT('Origin',(-91.8592785593675,105.933774701197,3.11532875784766)); 934 | #868=CARTESIAN_POINT('',(-84.8592785593674,54.9969260833183,3.11532875784771)); 935 | #869=CARTESIAN_POINT('',(-91.8592785593675,54.9969260833183,3.11532875784768)); 936 | #870=CARTESIAN_POINT('Origin',(-88.3592785593675,54.9969260833183,3.11532875784766)); 937 | #871=CARTESIAN_POINT('',(-84.8592785593674,151.91076376949,3.11532875784769)); 938 | #872=CARTESIAN_POINT('',(-84.8592785593674,155.41076376949,3.11532875784768)); 939 | #873=CARTESIAN_POINT('',(-91.8592785593675,151.91076376949,3.11532875784767)); 940 | #874=CARTESIAN_POINT('Origin',(-88.3592785593675,151.91076376949,3.11532875784766)); 941 | #875=CARTESIAN_POINT('',(-91.8592785593675,106.801358370715,3.11532875784766)); 942 | #876=CARTESIAN_POINT('',(-91.8592785593675,53.9361910316811,3.11532875784766)); 943 | #877=CARTESIAN_POINT('',(-95.8592785593675,102.801358370715,3.11532875784766)); 944 | #878=CARTESIAN_POINT('Origin',(-95.8592785593675,106.801358370715,3.11532875784766)); 945 | #879=CARTESIAN_POINT('',(-102.859278559367,102.801358370715,3.11532875784766)); 946 | #880=CARTESIAN_POINT('',(-91.8592785593675,102.801358370715,3.11532875784766)); 947 | #881=CARTESIAN_POINT('',(-106.859278559367,98.8013583707146,3.11532875784766)); 948 | #882=CARTESIAN_POINT('Origin',(-102.859278559367,98.8013583707146,3.11532875784766)); 949 | #883=CARTESIAN_POINT('',(-106.859278559367,86.8013583707146,3.11532875784766)); 950 | #884=CARTESIAN_POINT('',(-106.859278559367,102.801358370715,3.11532875784766)); 951 | #885=CARTESIAN_POINT('',(-102.859278559367,82.8013583707146,3.11532875784766)); 952 | #886=CARTESIAN_POINT('Origin',(-102.859278559367,86.8013583707146,3.11532875784766)); 953 | #887=CARTESIAN_POINT('',(-95.8592785593675,82.8013583707146,3.11532875784766)); 954 | #888=CARTESIAN_POINT('',(-106.859278559367,82.8013583707146,3.11532875784766)); 955 | #889=CARTESIAN_POINT('',(-91.8592785593675,78.8013583707146,3.11532875784768)); 956 | #890=CARTESIAN_POINT('Origin',(-95.8592785593675,78.8013583707146,3.11532875784767)); 957 | #891=CARTESIAN_POINT('',(-91.8592785593675,116.368774701198,3.11532875784768)); 958 | #892=CARTESIAN_POINT('',(-99.2547785593676,98.6013583707142,3.11532875784766)); 959 | #893=CARTESIAN_POINT('Origin',(-100.519278559368,98.6013583707142,3.11532875784766)); 960 | #894=CARTESIAN_POINT('',(-99.2547785593676,88.4513583707145,3.11532875784766)); 961 | #895=CARTESIAN_POINT('Origin',(-100.519278559368,88.4513583707145,3.11532875784766)); 962 | #896=CARTESIAN_POINT('Origin',(-88.3592785593675,54.9969260833183,-0.134671242152329)); 963 | #897=CARTESIAN_POINT('',(-91.8592785593675,54.9969260833183,-0.134671242152321)); 964 | #898=CARTESIAN_POINT('',(-91.8592785593675,54.9969260833183,-0.134671242152314)); 965 | #899=CARTESIAN_POINT('',(-84.8592785593675,54.9969260833183,-0.134671242152339)); 966 | #900=CARTESIAN_POINT('Origin',(-88.3592785593675,54.9969260833183,-0.134671242152342)); 967 | #901=CARTESIAN_POINT('',(-84.8592785593675,54.9969260833183,-0.134671242152329)); 968 | #902=CARTESIAN_POINT('Origin',(-91.8592785593675,105.933774701197,-0.134671242152337)); 969 | #903=CARTESIAN_POINT('',(-91.8592785593675,78.8013583707146,-0.134671242152319)); 970 | #904=CARTESIAN_POINT('',(-91.8592785593675,116.368774701198,-0.134671242152317)); 971 | #905=CARTESIAN_POINT('',(-95.8592785593675,82.8013583707146,-0.134671242152338)); 972 | #906=CARTESIAN_POINT('Origin',(-95.8592785593675,78.8013583707146,-0.134671242152331)); 973 | #907=CARTESIAN_POINT('',(-102.859278559367,82.8013583707146,-0.134671242152338)); 974 | #908=CARTESIAN_POINT('',(-106.859278559367,82.8013583707146,-0.134671242152338)); 975 | #909=CARTESIAN_POINT('',(-106.859278559367,86.8013583707146,-0.134671242152338)); 976 | #910=CARTESIAN_POINT('Origin',(-102.859278559367,86.8013583707146,-0.134671242152337)); 977 | #911=CARTESIAN_POINT('',(-106.859278559367,98.8013583707146,-0.134671242152337)); 978 | #912=CARTESIAN_POINT('',(-106.859278559367,102.801358370715,-0.134671242152337)); 979 | #913=CARTESIAN_POINT('',(-102.859278559367,102.801358370715,-0.134671242152337)); 980 | #914=CARTESIAN_POINT('Origin',(-102.859278559367,98.8013583707146,-0.134671242152337)); 981 | #915=CARTESIAN_POINT('',(-95.8592785593675,102.801358370715,-0.134671242152337)); 982 | #916=CARTESIAN_POINT('',(-91.8592785593675,102.801358370715,-0.134671242152337)); 983 | #917=CARTESIAN_POINT('',(-91.8592785593675,106.801358370715,-0.134671242152337)); 984 | #918=CARTESIAN_POINT('Origin',(-95.8592785593675,106.801358370715,-0.134671242152337)); 985 | #919=CARTESIAN_POINT('',(-91.8592785593675,151.91076376949,-0.134671242152334)); 986 | #920=CARTESIAN_POINT('',(-91.8592785593675,53.9361910316811,-0.13467124215234)); 987 | #921=CARTESIAN_POINT('',(-84.8592785593675,151.91076376949,-0.134671242152334)); 988 | #922=CARTESIAN_POINT('Origin',(-88.3592785593675,151.91076376949,-0.134671242152337)); 989 | #923=CARTESIAN_POINT('',(-84.8592785593675,79.9349828664389,-0.134671242152338)); 990 | #924=CARTESIAN_POINT('',(-99.2547785593676,88.4513583707145,-0.134671242152337)); 991 | #925=CARTESIAN_POINT('Origin',(-100.519278559368,88.4513583707145,-0.134671242152337)); 992 | #926=CARTESIAN_POINT('',(-99.2547785593676,98.6013583707142,-0.134671242152337)); 993 | #927=CARTESIAN_POINT('Origin',(-100.519278559368,98.6013583707142,-0.134671242152337)); 994 | #928=CARTESIAN_POINT('Origin',(-88.3592785593675,151.91076376949,-0.134671242152327)); 995 | #929=CARTESIAN_POINT('',(-84.8592785593675,151.91076376949,-0.134671242152327)); 996 | #930=CARTESIAN_POINT('',(-91.8592785593675,151.91076376949,-0.134671242152325)); 997 | #931=CARTESIAN_POINT('Origin',(-91.8592785593675,153.936191031681,-0.134671242152334)); 998 | #932=CARTESIAN_POINT('',(-91.8592785593675,106.801358370715,-0.134671242152336)); 999 | #933=CARTESIAN_POINT('Origin',(-84.8592785593675,53.9361910316811,-0.13467124215234)); 1000 | #934=CARTESIAN_POINT('Origin',(-95.8592785593675,78.8013583707146,-0.134671242152334)); 1001 | #935=CARTESIAN_POINT('',(-91.8592785593675,78.8013583707146,-0.134671242152339)); 1002 | #936=CARTESIAN_POINT('',(-95.8592785593675,82.8013583707146,-0.134671242152334)); 1003 | #937=CARTESIAN_POINT('Origin',(-91.8592785593675,80.0285904058574,-0.134671242152319)); 1004 | #938=CARTESIAN_POINT('Origin',(-106.859278559367,82.8013583707146,-0.134671242152338)); 1005 | #939=CARTESIAN_POINT('',(-102.859278559367,82.8013583707146,-0.134671242152338)); 1006 | #940=CARTESIAN_POINT('Origin',(-102.859278559367,98.8013583707146,-0.134671242152337)); 1007 | #941=CARTESIAN_POINT('',(-102.859278559367,102.801358370715,-0.134671242152337)); 1008 | #942=CARTESIAN_POINT('',(-106.859278559367,98.8013583707146,-0.134671242152337)); 1009 | #943=CARTESIAN_POINT('Origin',(-106.859278559367,102.801358370715,-0.134671242152337)); 1010 | #944=CARTESIAN_POINT('',(-106.859278559367,86.8013583707146,-0.134671242152338)); 1011 | #945=CARTESIAN_POINT('Origin',(-102.859278559367,86.8013583707146,-0.134671242152338)); 1012 | #946=CARTESIAN_POINT('Origin',(-95.8592785593675,106.801358370715,-0.134671242152336)); 1013 | #947=CARTESIAN_POINT('',(-95.8592785593675,102.801358370715,-0.134671242152336)); 1014 | #948=CARTESIAN_POINT('Origin',(-91.8592785593675,102.801358370715,-0.134671242152337)); 1015 | #949=CARTESIAN_POINT('Origin',(-100.519278559368,88.4513583707145,-0.134671242152338)); 1016 | #950=CARTESIAN_POINT('',(-99.2547785593676,88.4513583707145,-0.134671242152338)); 1017 | #951=CARTESIAN_POINT('Origin',(-100.519278559368,98.6013583707142,-0.134671242152337)); 1018 | #952=CARTESIAN_POINT('',(-99.2547785593676,98.6013583707142,-0.134671242152337)); 1019 | #953=CARTESIAN_POINT('Origin',(-71.0811050711912,106.130936992948,-0.134671242152355)); 1020 | #954=CARTESIAN_POINT('',(-78.0811050711912,55.1940883750693,-0.134671242152405)); 1021 | #955=CARTESIAN_POINT('',(-71.0811050711912,55.1940883750693,-0.134671242152372)); 1022 | #956=CARTESIAN_POINT('Origin',(-74.5811050711912,55.1940883750693,-0.13467124215235)); 1023 | #957=CARTESIAN_POINT('',(-78.0811050711912,152.107926061241,-0.134671242152376)); 1024 | #958=CARTESIAN_POINT('',(-78.0811050711912,155.607926061241,-0.134671242152375)); 1025 | #959=CARTESIAN_POINT('',(-71.0811050711912,152.107926061241,-0.134671242152358)); 1026 | #960=CARTESIAN_POINT('Origin',(-74.5811050711912,152.107926061241,-0.134671242152355)); 1027 | #961=CARTESIAN_POINT('',(-71.0811050711912,106.998520662466,-0.134671242152356)); 1028 | #962=CARTESIAN_POINT('',(-71.0811050711912,54.1333533234321,-0.134671242152353)); 1029 | #963=CARTESIAN_POINT('',(-67.0811050711912,102.998520662466,-0.134671242152356)); 1030 | #964=CARTESIAN_POINT('Origin',(-67.0811050711912,106.998520662466,-0.134671242152356)); 1031 | #965=CARTESIAN_POINT('',(-60.0811050711912,102.998520662466,-0.134671242152356)); 1032 | #966=CARTESIAN_POINT('',(-71.0811050711912,102.998520662466,-0.134671242152355)); 1033 | #967=CARTESIAN_POINT('',(-56.0811050711912,98.9985206624657,-0.134671242152357)); 1034 | #968=CARTESIAN_POINT('Origin',(-60.0811050711912,98.9985206624657,-0.134671242152356)); 1035 | #969=CARTESIAN_POINT('',(-56.0811050711912,86.9985206624657,-0.134671242152356)); 1036 | #970=CARTESIAN_POINT('',(-56.0811050711912,102.998520662466,-0.134671242152357)); 1037 | #971=CARTESIAN_POINT('',(-60.0811050711912,82.9985206624657,-0.134671242152355)); 1038 | #972=CARTESIAN_POINT('Origin',(-60.0811050711912,86.9985206624657,-0.134671242152356)); 1039 | #973=CARTESIAN_POINT('',(-67.0811050711912,82.9985206624657,-0.134671242152355)); 1040 | #974=CARTESIAN_POINT('',(-56.0811050711912,82.9985206624657,-0.134671242152356)); 1041 | #975=CARTESIAN_POINT('',(-71.0811050711912,78.9985206624657,-0.134671242152373)); 1042 | #976=CARTESIAN_POINT('Origin',(-67.0811050711912,78.9985206624657,-0.134671242152362)); 1043 | #977=CARTESIAN_POINT('',(-71.0811050711912,116.565936992949,-0.134671242152375)); 1044 | #978=CARTESIAN_POINT('',(-63.6856050711911,98.7985206624652,-0.134671242152356)); 1045 | #979=CARTESIAN_POINT('Origin',(-62.4211050711911,98.7985206624652,-0.134671242152356)); 1046 | #980=CARTESIAN_POINT('',(-63.685605071191,88.6485206624655,-0.134671242152356)); 1047 | #981=CARTESIAN_POINT('Origin',(-62.421105071191,88.6485206624655,-0.134671242152356)); 1048 | #982=CARTESIAN_POINT('Origin',(-74.5811050711912,55.1940883750693,3.11532875784764)); 1049 | #983=CARTESIAN_POINT('',(-71.0811050711912,55.1940883750693,3.11532875784763)); 1050 | #984=CARTESIAN_POINT('',(-71.0811050711912,55.1940883750693,3.11532875784762)); 1051 | #985=CARTESIAN_POINT('',(-78.0811050711912,55.1940883750693,3.11532875784765)); 1052 | #986=CARTESIAN_POINT('Origin',(-74.5811050711912,55.1940883750693,3.11532875784765)); 1053 | #987=CARTESIAN_POINT('',(-78.0811050711912,55.1940883750693,3.11532875784764)); 1054 | #988=CARTESIAN_POINT('Origin',(-71.0811050711912,106.130936992948,3.11532875784764)); 1055 | #989=CARTESIAN_POINT('',(-71.0811050711912,78.9985206624657,3.11532875784763)); 1056 | #990=CARTESIAN_POINT('',(-71.0811050711912,116.565936992949,3.11532875784763)); 1057 | #991=CARTESIAN_POINT('',(-67.0811050711912,82.9985206624657,3.11532875784765)); 1058 | #992=CARTESIAN_POINT('Origin',(-67.0811050711912,78.9985206624657,3.11532875784764)); 1059 | #993=CARTESIAN_POINT('',(-60.0811050711912,82.9985206624657,3.11532875784764)); 1060 | #994=CARTESIAN_POINT('',(-56.0811050711912,82.9985206624657,3.11532875784764)); 1061 | #995=CARTESIAN_POINT('',(-56.0811050711912,86.9985206624657,3.11532875784764)); 1062 | #996=CARTESIAN_POINT('Origin',(-60.0811050711912,86.9985206624657,3.11532875784764)); 1063 | #997=CARTESIAN_POINT('',(-56.0811050711912,98.9985206624657,3.11532875784764)); 1064 | #998=CARTESIAN_POINT('',(-56.0811050711912,102.998520662466,3.11532875784764)); 1065 | #999=CARTESIAN_POINT('',(-60.0811050711912,102.998520662466,3.11532875784764)); 1066 | #1000=CARTESIAN_POINT('Origin',(-60.0811050711912,98.9985206624657,3.11532875784764)); 1067 | #1001=CARTESIAN_POINT('',(-67.0811050711912,102.998520662466,3.11532875784764)); 1068 | #1002=CARTESIAN_POINT('',(-71.0811050711912,102.998520662466,3.11532875784765)); 1069 | #1003=CARTESIAN_POINT('',(-71.0811050711912,106.998520662466,3.11532875784765)); 1070 | #1004=CARTESIAN_POINT('Origin',(-67.0811050711912,106.998520662466,3.11532875784764)); 1071 | #1005=CARTESIAN_POINT('',(-71.0811050711912,152.107926061241,3.11532875784764)); 1072 | #1006=CARTESIAN_POINT('',(-71.0811050711912,54.1333533234321,3.11532875784765)); 1073 | #1007=CARTESIAN_POINT('',(-78.0811050711912,152.107926061241,3.11532875784764)); 1074 | #1008=CARTESIAN_POINT('Origin',(-74.5811050711912,152.107926061241,3.11532875784765)); 1075 | #1009=CARTESIAN_POINT('',(-78.0811050711912,80.1321451581899,3.11532875784765)); 1076 | #1010=CARTESIAN_POINT('',(-63.685605071191,88.6485206624655,3.11532875784764)); 1077 | #1011=CARTESIAN_POINT('Origin',(-62.421105071191,88.6485206624655,3.11532875784764)); 1078 | #1012=CARTESIAN_POINT('',(-63.6856050711911,98.7985206624652,3.11532875784764)); 1079 | #1013=CARTESIAN_POINT('Origin',(-62.4211050711911,98.7985206624652,3.11532875784764)); 1080 | #1014=CARTESIAN_POINT('Origin',(-74.5811050711912,152.107926061241,3.11532875784764)); 1081 | #1015=CARTESIAN_POINT('',(-78.0811050711912,152.107926061241,3.11532875784764)); 1082 | #1016=CARTESIAN_POINT('',(-71.0811050711912,152.107926061241,3.11532875784763)); 1083 | #1017=CARTESIAN_POINT('Origin',(-71.0811050711912,154.133353323432,3.11532875784764)); 1084 | #1018=CARTESIAN_POINT('',(-71.0811050711912,106.998520662466,3.11532875784764)); 1085 | #1019=CARTESIAN_POINT('Origin',(-78.0811050711912,54.1333533234321,3.11532875784765)); 1086 | #1020=CARTESIAN_POINT('Origin',(-67.0811050711912,78.9985206624657,3.11532875784764)); 1087 | #1021=CARTESIAN_POINT('',(-71.0811050711912,78.9985206624657,3.11532875784765)); 1088 | #1022=CARTESIAN_POINT('',(-67.0811050711912,82.9985206624657,3.11532875784764)); 1089 | #1023=CARTESIAN_POINT('Origin',(-71.0811050711912,80.2257526976084,3.11532875784763)); 1090 | #1024=CARTESIAN_POINT('Origin',(-56.0811050711912,82.9985206624657,3.11532875784764)); 1091 | #1025=CARTESIAN_POINT('',(-60.0811050711912,82.9985206624657,3.11532875784764)); 1092 | #1026=CARTESIAN_POINT('Origin',(-60.0811050711912,98.9985206624657,3.11532875784764)); 1093 | #1027=CARTESIAN_POINT('',(-60.0811050711912,102.998520662466,3.11532875784764)); 1094 | #1028=CARTESIAN_POINT('',(-56.0811050711912,98.9985206624657,3.11532875784764)); 1095 | #1029=CARTESIAN_POINT('Origin',(-56.0811050711912,102.998520662466,3.11532875784764)); 1096 | #1030=CARTESIAN_POINT('',(-56.0811050711912,86.9985206624657,3.11532875784764)); 1097 | #1031=CARTESIAN_POINT('Origin',(-60.0811050711912,86.9985206624657,3.11532875784764)); 1098 | #1032=CARTESIAN_POINT('Origin',(-67.0811050711912,106.998520662466,3.11532875784764)); 1099 | #1033=CARTESIAN_POINT('',(-67.0811050711912,102.998520662466,3.11532875784764)); 1100 | #1034=CARTESIAN_POINT('Origin',(-71.0811050711912,102.998520662466,3.11532875784765)); 1101 | #1035=CARTESIAN_POINT('Origin',(-62.421105071191,88.6485206624655,3.11532875784764)); 1102 | #1036=CARTESIAN_POINT('',(-63.685605071191,88.6485206624655,3.11532875784764)); 1103 | #1037=CARTESIAN_POINT('Origin',(-62.4211050711911,98.7985206624652,3.11532875784764)); 1104 | #1038=CARTESIAN_POINT('',(-63.6856050711911,98.7985206624652,3.11532875784764)); 1105 | #1039=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#1043, 1106 | 'DISTANCE_ACCURACY_VALUE', 1107 | 'Maximum model space distance between geometric entities at asserted c 1108 | onnectivities'); 1109 | #1040=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#1043, 1110 | 'DISTANCE_ACCURACY_VALUE', 1111 | 'Maximum model space distance between geometric entities at asserted c 1112 | onnectivities'); 1113 | #1041=( 1114 | GEOMETRIC_REPRESENTATION_CONTEXT(3) 1115 | GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1039)) 1116 | GLOBAL_UNIT_ASSIGNED_CONTEXT((#1043,#1045,#1046)) 1117 | REPRESENTATION_CONTEXT('','3D') 1118 | ); 1119 | #1042=( 1120 | GEOMETRIC_REPRESENTATION_CONTEXT(3) 1121 | GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1040)) 1122 | GLOBAL_UNIT_ASSIGNED_CONTEXT((#1043,#1045,#1046)) 1123 | REPRESENTATION_CONTEXT('','3D') 1124 | ); 1125 | #1043=( 1126 | LENGTH_UNIT() 1127 | NAMED_UNIT(*) 1128 | SI_UNIT(.MILLI.,.METRE.) 1129 | ); 1130 | #1044=( 1131 | LENGTH_UNIT() 1132 | NAMED_UNIT(*) 1133 | SI_UNIT($,.METRE.) 1134 | ); 1135 | #1045=( 1136 | NAMED_UNIT(*) 1137 | PLANE_ANGLE_UNIT() 1138 | SI_UNIT($,.RADIAN.) 1139 | ); 1140 | #1046=( 1141 | NAMED_UNIT(*) 1142 | SI_UNIT($,.STERADIAN.) 1143 | SOLID_ANGLE_UNIT() 1144 | ); 1145 | #1047=SHAPE_DEFINITION_REPRESENTATION(#1048,#1049); 1146 | #1048=PRODUCT_DEFINITION_SHAPE('',$,#1051); 1147 | #1049=SHAPE_REPRESENTATION('',(#619),#1041); 1148 | #1050=PRODUCT_DEFINITION_CONTEXT('part definition',#1055,'design'); 1149 | #1051=PRODUCT_DEFINITION('FusionComponent','FusionComponent',#1052,#1050); 1150 | #1052=PRODUCT_DEFINITION_FORMATION('',$,#1057); 1151 | #1053=PRODUCT_RELATED_PRODUCT_CATEGORY('FusionComponent', 1152 | 'FusionComponent',(#1057)); 1153 | #1054=APPLICATION_PROTOCOL_DEFINITION('international standard', 1154 | 'automotive_design',2009,#1055); 1155 | #1055=APPLICATION_CONTEXT( 1156 | 'Core Data for Automotive Mechanical Design Process'); 1157 | #1056=PRODUCT_CONTEXT('part definition',#1055,'mechanical'); 1158 | #1057=PRODUCT('FusionComponent','FusionComponent',$,(#1056)); 1159 | #1058=PRESENTATION_STYLE_ASSIGNMENT((#1059)); 1160 | #1059=SURFACE_STYLE_USAGE(.BOTH.,#1060); 1161 | #1060=SURFACE_SIDE_STYLE('',(#1061)); 1162 | #1061=SURFACE_STYLE_FILL_AREA(#1062); 1163 | #1062=FILL_AREA_STYLE('Steel - Satin',(#1063)); 1164 | #1063=FILL_AREA_STYLE_COLOUR('Steel - Satin',#1064); 1165 | #1064=COLOUR_RGB('Steel - Satin',0.627450980392157,0.627450980392157,0.627450980392157); 1166 | ENDSEC; 1167 | END-ISO-10303-21; 1168 | -------------------------------------------------------------------------------- /RancilioBrain.md: -------------------------------------------------------------------------------- 1 | ### This is a work in progress 2 | 3 | # Interface Parts 4 | ![InstallationRender](https://i.imgur.com/howaFJhh.png) 5 | ![partStack](https://i.imgur.com/dXTC4qBh.jpg) 6 | 7 | You certainly dont need to puchase these components from amazon, you can find them on ebay or banggood or aliexpress as well. It's usually worth it to get a few of the same because it's easy to ruin them during prototyping. 8 | 9 | 1 [5.08mm Pitch Screw Terminals](https://www.amazon.com/gp/product/B07DQNVLL8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) 10 | 2 [128 x 64 OLED](https://www.amazon.com/gp/product/B085WCRS7C/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) 11 | 4 [Perf Board](https://www.amazon.com/Solderable-BreadBoard-matches-breadboards-1-85in/dp/B00LLO4Q7W/ref=sr_1_5?dchild=1&keywords=perforated+breadboard&qid=1601417642&sr=8-5) 12 | 5 [120v AC to 5v DC](https://www.amazon.com/gp/product/B07YXN8J6R/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) 13 | 6 [Large Aluminum Knob](https://www.amazon.com/gp/product/B087M2QCC2/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) 14 | 7 [Rotary Encoder](https://www.amazon.com/gp/product/B07DM2YMT4/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) 15 | 8 [Arduino Nano](https://www.amazon.com/gp/product/B07KCH534K/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) 16 | 11 [2.54mm Pitch Screw Terminals](https://www.amazon.com/gp/product/B07NSJV6NW/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) 17 | 18 | 19 | # Other Parts 20 | ![SSRs](https://i.imgur.com/JKYPX55h.jpg) 21 | 22 | Besides the enclosure assembly, you will need suitable wire, various [spade connectors](https://www.amazon.com/gp/product/B078PMWNJC/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) and 2 quality [40A Relays](https://www.amazon.com/gp/product/B00E1LC1VK/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1). I've used 200ºC Temp resistant silicone wire for all lengths runnning inside the machine, [18AWG](https://www.amazon.com/gp/product/B0746HMTPP/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) for the relays and [22AWG](https://www.amazon.com/gp/product/B01M0O1NXM/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) for the 5V signal wires. 23 | ![wiring diagram](https://i.imgur.com/Tp9VdDOh.jpg) 24 | You will also need to reroute the ground to the 3 way valve so that solenoid if you plan to have solenoid control independent of pump control like I do. Otherwise just piggyback the poles of the brew switch. 25 | --------------------------------------------------------------------------------