├── .gitignore ├── img ├── assembly-01.jpg ├── assembly-02.jpg ├── assembly-05.jpg ├── assembly-06.jpg ├── assembly-07.jpg ├── stand-front.jpg ├── stand-rear.jpg ├── assembled-rear.png ├── assembly-03-04.jpg ├── exploded-front.png ├── exploded-rear.png └── assembled-front.png ├── LICENSE ├── README.md ├── inky-impression-case-button.stl └── inky-impression-case.scad /.gitignore: -------------------------------------------------------------------------------- 1 | *.3mf 2 | *.obj 3 | buildproject 4 | tmp/* 5 | -------------------------------------------------------------------------------- /img/assembly-01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/assembly-01.jpg -------------------------------------------------------------------------------- /img/assembly-02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/assembly-02.jpg -------------------------------------------------------------------------------- /img/assembly-05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/assembly-05.jpg -------------------------------------------------------------------------------- /img/assembly-06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/assembly-06.jpg -------------------------------------------------------------------------------- /img/assembly-07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/assembly-07.jpg -------------------------------------------------------------------------------- /img/stand-front.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/stand-front.jpg -------------------------------------------------------------------------------- /img/stand-rear.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/stand-rear.jpg -------------------------------------------------------------------------------- /img/assembled-rear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/assembled-rear.png -------------------------------------------------------------------------------- /img/assembly-03-04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/assembly-03-04.jpg -------------------------------------------------------------------------------- /img/exploded-front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/exploded-front.png -------------------------------------------------------------------------------- /img/exploded-rear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/exploded-rear.png -------------------------------------------------------------------------------- /img/assembled-front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scripsi/inky-impression-case/HEAD/img/assembled-front.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Douglas Reed 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Inky Impression Case 2 | 3 | ![Case on stand - Front](img/stand-front.jpg) 4 | ## Introduction 5 | 6 | This is a wall-mounting or desk-stand case for the [Pimoroni Inky Impression](https://shop.pimoroni.com/products/inky-impression) 7-colour e-ink display. I wanted to make a simple protective case for the display and a Raspberry Pi Zero W which had the following features: 7 | 8 | * A clean front with no visible fixings and a symmetrical border around the image area 9 | * No pressure applied to the fragile glass screen of the Inky Impression 10 | * Access to the 4 buttons on the Inky Impression board 11 | * Access to the breakout connector on the Inky Impression board 12 | * Simple wall-mounting 13 | * An optional desk-stand 14 | 15 | ![Exploded Front View](img/exploded-front.png "Exploded Front View") 16 | 17 | The Inky Impression only has mounting points on the back surface, which makes it hard to produce a standard, 3d-printable case that doesn't put any pressure on the fragile glass front. Pressing it into a frame or sliding it into slots might put too much strain on some areas. I solved this by adding a backplane within the case, which screws to the Inky Impression's mount points and holds it slightly away from the front of the case. 18 | 19 | Side-mounted buttons are also held in position by the backplane and help activate the switches on the Inky Impression board when it is in the case. The rear panel has keyholes for wall-mounting on screws, and is held onto the front of the case by 4 bolts (with optional threaded inserts). The case has a cutout at the bottom for access to the breakout connector and as a cable-exit for the Raspberry Pi's power cable. 20 | 21 | ![Exploded Rear View](img/exploded-rear.png "Exploded Rear View") 22 | 23 | ## Printing 24 | 25 | Print the following parts: 26 | 27 | * 1 x inky-impression-case-frame.stl 28 | * 1 x inky-impression-case-backplane.stl 29 | * 4 x inky-impression-case-button.stl 30 | 31 | And, depending on whether or not you are using threaded inserts, either: 32 | 33 | * 1 x inky-impression-case-rearpanel.stl (with inserts) 34 | 35 | or: 36 | 37 | * 1 x inky-impression-case-rearpanel-no-inserts.stl (without inserts) 38 | 39 | There is also an optional stand that clips into the keyholes on the rear panel: 40 | 41 | * [OPTIONAL: 1 x inky-impression-case-stand.stl] 42 | 43 | 44 | ![Front View](img/assembled-front.png "Front View") 45 | 46 | 47 | The design is optimised for a 0.4mm nozzle and 0.2mm layer height with 20% infill. Using a concentric pattern on the bottom layer gives a nice finish to the frame. 48 | 49 | You will also need: 50 | 51 | * 4 x M2.5 bolts, 6mm long (you can use the ones supplied with the Inky Impression) 52 | * 4 x M2.5 countersunk bolts, 6mm long 53 | * [OPTIONAL: 4 x M2.5 threaded inserts - brass heat-set type, external diameter 3.5mm, length 4-6mm] 54 | 55 | ## Construction 56 | 57 | 1. Test that the backplane fits right down into the frame to rest on the ledges around the top and sides. It should be a really snug fit - sandpaper the edges of the backplane a bit if it won't go in on the first try! 58 | ![Assembly - stage 1](img/assembly-01.jpg) 59 | 2. Mount the backplane to the Inky Impression using the M2.5 bolts that are supplied with the display. 60 | ![Assembly - stage 2](img/assembly-02.jpg) 61 | 3. Lay the frame face down on a worksurface and slide the four buttons into the slots in the side, with the rectangular lugs on each button facing towards you. 62 | 4. Gently slide the Inky Impression on its backplane into the frame, with the screen facing down and the slots for the buttons on the correct side. 63 | ![Assembly - stages 3 and 4](img/assembly-03-04.jpg) 64 | 5. Carefully press the Raspberry Pi Zero onto the header on the Inky Impression so that it is held firmly in place. Attach a Micro USB cable to the connector nearest the corner of the Pi and lead the cable through the slot in the bottom of the frame. 65 | ![Assembly - stage 5](img/assembly-05.jpg) 66 | 6. [Heat-set the inserts](https://markforged.com/resources/blog/heat-set-inserts) (if using) into the mounts on the rear panel. 67 | ![Assembly - stage 6](img/assembly-06.jpg) 68 | 7. Place the rear panel into the frame. The pads on the rear panel mounts should hold the backplane in place within the case. Use the M2.5 countersunk bolts to secure the rear panel to the case. 69 | ![Assembly - stage 7](img/assembly-07.jpg) 70 | 8. To wall-mount, place two screws on the wall, 100mm apart and horizontally in line with where you want the centre of the screen, then slot the keyholes in the rear panel onto the screws. 71 | 72 | ## Customisation 73 | 74 | I have included the OpenScad file for the design. It has some basic parameters that allow you to change the size and type of the fixing bolts for the case. Read the comments in the file to see how to use it. 75 | -------------------------------------------------------------------------------- /inky-impression-case-button.stl: -------------------------------------------------------------------------------- 1 | solid OpenSCAD_Model 2 | facet normal 1 0 0 3 | outer loop 4 | vertex -0.5 -2 7.35 5 | vertex -0.5 -5 7.35 6 | vertex -0.5 -2 5.75 7 | endloop 8 | endfacet 9 | facet normal 1 -0 0 10 | outer loop 11 | vertex -0.5 -2 5.75 12 | vertex -0.5 0 2.75 13 | vertex -0.5 0 5.75 14 | endloop 15 | endfacet 16 | facet normal 1 0 0 17 | outer loop 18 | vertex -0.5 -5 5.75 19 | vertex -0.5 -2 5.75 20 | vertex -0.5 -5 7.35 21 | endloop 22 | endfacet 23 | facet normal 1 0 0 24 | outer loop 25 | vertex -0.5 -2 5.75 26 | vertex -0.5 -5 5.75 27 | vertex -0.5 0 2.75 28 | endloop 29 | endfacet 30 | facet normal 1 0 0 31 | outer loop 32 | vertex -0.5 -7 2.75 33 | vertex -0.5 -5 5.75 34 | vertex -0.5 -7 5.75 35 | endloop 36 | endfacet 37 | facet normal 1 0 0 38 | outer loop 39 | vertex -0.5 -5 5.75 40 | vertex -0.5 -7 2.75 41 | vertex -0.5 0 2.75 42 | endloop 43 | endfacet 44 | facet normal 0 -1 0 45 | outer loop 46 | vertex -7 -7 2.75 47 | vertex -0.5 -7 5.75 48 | vertex -7 -7 5.75 49 | endloop 50 | endfacet 51 | facet normal 0 -1 -0 52 | outer loop 53 | vertex -0.5 -7 5.75 54 | vertex -7 -7 2.75 55 | vertex -0.5 -7 2.75 56 | endloop 57 | endfacet 58 | facet normal 0 1 -0 59 | outer loop 60 | vertex -0.5 0 2.75 61 | vertex -7 0 5.75 62 | vertex -0.5 0 5.75 63 | endloop 64 | endfacet 65 | facet normal 0 1 0 66 | outer loop 67 | vertex -7 0 5.75 68 | vertex -0.5 0 2.75 69 | vertex -7 0 2.75 70 | endloop 71 | endfacet 72 | facet normal -1 0 0 73 | outer loop 74 | vertex -7 -7 2.75 75 | vertex -7 -6.99309 5.75 76 | vertex -7 -6.99309 2.75 77 | endloop 78 | endfacet 79 | facet normal -1 -0 0 80 | outer loop 81 | vertex -7 -6.99309 5.75 82 | vertex -7 -7 2.75 83 | vertex -7 -7 5.75 84 | endloop 85 | endfacet 86 | facet normal -1 0 0 87 | outer loop 88 | vertex -7 -0.00690556 2.75 89 | vertex -7 0 5.75 90 | vertex -7 0 2.75 91 | endloop 92 | endfacet 93 | facet normal -1 -0 0 94 | outer loop 95 | vertex -7 0 5.75 96 | vertex -7 -0.00690556 2.75 97 | vertex -7 -0.00690556 5.75 98 | endloop 99 | endfacet 100 | facet normal 0 0 1 101 | outer loop 102 | vertex -0.5 0 5.75 103 | vertex -5.2 -2 5.75 104 | vertex -0.5 -2 5.75 105 | endloop 106 | endfacet 107 | facet normal -0 0 1 108 | outer loop 109 | vertex -7 -0.00690556 5.75 110 | vertex -5.2 -2 5.75 111 | vertex -7 0 5.75 112 | endloop 113 | endfacet 114 | facet normal -0 0 1 115 | outer loop 116 | vertex -7 0 5.75 117 | vertex -5.2 -2 5.75 118 | vertex -0.5 0 5.75 119 | endloop 120 | endfacet 121 | facet normal -0 0 1 122 | outer loop 123 | vertex -5.2 -5 5.75 124 | vertex -0.5 -7 5.75 125 | vertex -0.5 -5 5.75 126 | endloop 127 | endfacet 128 | facet normal -0 0 1 129 | outer loop 130 | vertex -7.21977 -0.00690556 5.75 131 | vertex -5.2 -2 5.75 132 | vertex -7 -0.00690556 5.75 133 | endloop 134 | endfacet 135 | facet normal -0 0 1 136 | outer loop 137 | vertex -8.08156 -0.171302 5.75 138 | vertex -5.2 -2 5.75 139 | vertex -7.65583 -0.0619946 5.75 140 | endloop 141 | endfacet 142 | facet normal 0 0 1 143 | outer loop 144 | vertex -7 -7 5.75 145 | vertex -5.2 -5 5.75 146 | vertex -7 -6.99309 5.75 147 | endloop 148 | endfacet 149 | facet normal 0 0 1 150 | outer loop 151 | vertex -5.2 -5 5.75 152 | vertex -7 -7 5.75 153 | vertex -0.5 -7 5.75 154 | endloop 155 | endfacet 156 | facet normal 0 0 1 157 | outer loop 158 | vertex -5.2 -2 5.75 159 | vertex -7.21977 -0.00690556 5.75 160 | vertex -7.65583 -0.0619946 5.75 161 | endloop 162 | endfacet 163 | facet normal -0 0 1 164 | outer loop 165 | vertex -8.49023 -0.333105 5.75 166 | vertex -5.2 -2 5.75 167 | vertex -8.08156 -0.171302 5.75 168 | endloop 169 | endfacet 170 | facet normal -0 0 1 171 | outer loop 172 | vertex -8.87539 -0.544852 5.75 173 | vertex -5.2 -2 5.75 174 | vertex -8.49023 -0.333105 5.75 175 | endloop 176 | endfacet 177 | facet normal 0 0 1 178 | outer loop 179 | vertex -5.2 -5 5.75 180 | vertex -7.21977 -6.99309 5.75 181 | vertex -7 -6.99309 5.75 182 | endloop 183 | endfacet 184 | facet normal 0 -0 1 185 | outer loop 186 | vertex -7.65583 -6.938 5.75 187 | vertex -5.2 -5 5.75 188 | vertex -8.08156 -6.8287 5.75 189 | endloop 190 | endfacet 191 | facet normal 0 -0 1 192 | outer loop 193 | vertex -7.21977 -6.99309 5.75 194 | vertex -5.2 -5 5.75 195 | vertex -7.65583 -6.938 5.75 196 | endloop 197 | endfacet 198 | facet normal -0 0 1 199 | outer loop 200 | vertex -9.23098 -0.803204 5.75 201 | vertex -5.2 -2 5.75 202 | vertex -8.87539 -0.544852 5.75 203 | endloop 204 | endfacet 205 | facet normal 0 0 1 206 | outer loop 207 | vertex -5.2 -5 5.75 208 | vertex -8.49023 -6.66689 5.75 209 | vertex -8.08156 -6.8287 5.75 210 | endloop 211 | endfacet 212 | facet normal -0 0 1 213 | outer loop 214 | vertex -9.55139 -1.10408 5.75 215 | vertex -5.2 -2 5.75 216 | vertex -9.23098 -0.803204 5.75 217 | endloop 218 | endfacet 219 | facet normal 0 0 1 220 | outer loop 221 | vertex -5.2 -5 5.75 222 | vertex -8.87539 -6.45515 5.75 223 | vertex -8.49023 -6.66689 5.75 224 | endloop 225 | endfacet 226 | facet normal -0 0 1 227 | outer loop 228 | vertex -9.83156 -1.44275 5.75 229 | vertex -5.2 -2 5.75 230 | vertex -9.55139 -1.10408 5.75 231 | endloop 232 | endfacet 233 | facet normal 0 0 1 234 | outer loop 235 | vertex -5.2 -5 5.75 236 | vertex -9.23098 -6.1968 5.75 237 | vertex -8.87539 -6.45515 5.75 238 | endloop 239 | endfacet 240 | facet normal -0 0 1 241 | outer loop 242 | vertex -10.0671 -1.81386 5.75 243 | vertex -5.2 -2 5.75 244 | vertex -9.83156 -1.44275 5.75 245 | endloop 246 | endfacet 247 | facet normal 0 0 1 248 | outer loop 249 | vertex -5.2 -5 5.75 250 | vertex -9.55139 -5.89591 5.75 251 | vertex -9.23098 -6.1968 5.75 252 | endloop 253 | endfacet 254 | facet normal 0 0 1 255 | outer loop 256 | vertex -10.2542 -2.21156 5.75 257 | vertex -5.2 -2 5.75 258 | vertex -10.0671 -1.81386 5.75 259 | endloop 260 | endfacet 261 | facet normal 0 0 1 262 | outer loop 263 | vertex -5.2 -5 5.75 264 | vertex -9.83156 -5.55725 5.75 265 | vertex -9.55139 -5.89591 5.75 266 | endloop 267 | endfacet 268 | facet normal 0 0 1 269 | outer loop 270 | vertex -10.39 -2.62959 5.75 271 | vertex -5.2 -2 5.75 272 | vertex -10.2542 -2.21156 5.75 273 | endloop 274 | endfacet 275 | facet normal 0 0 1 276 | outer loop 277 | vertex -5.2 -5 5.75 278 | vertex -10.0671 -5.18614 5.75 279 | vertex -9.83156 -5.55725 5.75 280 | endloop 281 | endfacet 282 | facet normal 0 0 1 283 | outer loop 284 | vertex -10.4724 -3.06133 5.75 285 | vertex -5.2 -2 5.75 286 | vertex -10.39 -2.62959 5.75 287 | endloop 288 | endfacet 289 | facet normal 0 0 1 290 | outer loop 291 | vertex -5.2 -5 5.75 292 | vertex -10.2542 -4.78843 5.75 293 | vertex -10.0671 -5.18614 5.75 294 | endloop 295 | endfacet 296 | facet normal 0 0 1 297 | outer loop 298 | vertex -10.5 -3.5 5.75 299 | vertex -5.2 -2 5.75 300 | vertex -10.4724 -3.06133 5.75 301 | endloop 302 | endfacet 303 | facet normal 0 0 1 304 | outer loop 305 | vertex -5.2 -5 5.75 306 | vertex -10.39 -4.37041 5.75 307 | vertex -10.2542 -4.78843 5.75 308 | endloop 309 | endfacet 310 | facet normal 0 0 1 311 | outer loop 312 | vertex -5.2 -2 5.75 313 | vertex -10.5 -3.5 5.75 314 | vertex -5.2 -5 5.75 315 | endloop 316 | endfacet 317 | facet normal 0 0 1 318 | outer loop 319 | vertex -5.2 -5 5.75 320 | vertex -10.4724 -3.93867 5.75 321 | vertex -10.39 -4.37041 5.75 322 | endloop 323 | endfacet 324 | facet normal 0 0 1 325 | outer loop 326 | vertex -5.2 -5 5.75 327 | vertex -10.5 -3.5 5.75 328 | vertex -10.4724 -3.93867 5.75 329 | endloop 330 | endfacet 331 | facet normal 0 0 -1 332 | outer loop 333 | vertex -7.65583 -6.938 2.75 334 | vertex -7 -6.99309 2.75 335 | vertex -7.21977 -6.99309 2.75 336 | endloop 337 | endfacet 338 | facet normal 0 0 -1 339 | outer loop 340 | vertex -8.08156 -6.8287 2.75 341 | vertex -7 -6.99309 2.75 342 | vertex -7.65583 -6.938 2.75 343 | endloop 344 | endfacet 345 | facet normal 0 0 -1 346 | outer loop 347 | vertex -7 -6.99309 2.75 348 | vertex -8.08156 -6.8287 2.75 349 | vertex -7 -0.00690556 2.75 350 | endloop 351 | endfacet 352 | facet normal -0 0 -1 353 | outer loop 354 | vertex -7 -0.00690556 2.75 355 | vertex -7.65583 -0.0619946 2.75 356 | vertex -7.21977 -0.00690556 2.75 357 | endloop 358 | endfacet 359 | facet normal 0 0 -1 360 | outer loop 361 | vertex -8.08156 -0.171302 2.75 362 | vertex -7 -0.00690556 2.75 363 | vertex -8.08156 -6.8287 2.75 364 | endloop 365 | endfacet 366 | facet normal 0 0 -1 367 | outer loop 368 | vertex -7 -0.00690556 2.75 369 | vertex -8.08156 -0.171302 2.75 370 | vertex -7.65583 -0.0619946 2.75 371 | endloop 372 | endfacet 373 | facet normal 0 0 -1 374 | outer loop 375 | vertex -8.49023 -6.66689 2.75 376 | vertex -8.08156 -0.171302 2.75 377 | vertex -8.08156 -6.8287 2.75 378 | endloop 379 | endfacet 380 | facet normal 0 0 -1 381 | outer loop 382 | vertex -8.49023 -6.66689 2.75 383 | vertex -8.49023 -0.333105 2.75 384 | vertex -8.08156 -0.171302 2.75 385 | endloop 386 | endfacet 387 | facet normal 0 0 -1 388 | outer loop 389 | vertex -8.87539 -6.45515 2.75 390 | vertex -8.49023 -0.333105 2.75 391 | vertex -8.49023 -6.66689 2.75 392 | endloop 393 | endfacet 394 | facet normal 0 0 -1 395 | outer loop 396 | vertex -8.87539 -6.45515 2.75 397 | vertex -8.87539 -0.544852 2.75 398 | vertex -8.49023 -0.333105 2.75 399 | endloop 400 | endfacet 401 | facet normal 0 0 -1 402 | outer loop 403 | vertex -9.23098 -6.1968 2.75 404 | vertex -8.87539 -0.544852 2.75 405 | vertex -8.87539 -6.45515 2.75 406 | endloop 407 | endfacet 408 | facet normal 0 0 -1 409 | outer loop 410 | vertex -9.23098 -6.1968 2.75 411 | vertex -9.23098 -0.803204 2.75 412 | vertex -8.87539 -0.544852 2.75 413 | endloop 414 | endfacet 415 | facet normal 0 0 -1 416 | outer loop 417 | vertex -9.55139 -5.89591 2.75 418 | vertex -9.23098 -0.803204 2.75 419 | vertex -9.23098 -6.1968 2.75 420 | endloop 421 | endfacet 422 | facet normal 0 0 -1 423 | outer loop 424 | vertex -9.55139 -5.89591 2.75 425 | vertex -9.55139 -1.10408 2.75 426 | vertex -9.23098 -0.803204 2.75 427 | endloop 428 | endfacet 429 | facet normal 0 0 -1 430 | outer loop 431 | vertex -9.83156 -5.55725 2.75 432 | vertex -9.55139 -1.10408 2.75 433 | vertex -9.55139 -5.89591 2.75 434 | endloop 435 | endfacet 436 | facet normal 0 0 -1 437 | outer loop 438 | vertex -9.83156 -5.55725 2.75 439 | vertex -9.83156 -1.44275 2.75 440 | vertex -9.55139 -1.10408 2.75 441 | endloop 442 | endfacet 443 | facet normal 0 0 -1 444 | outer loop 445 | vertex -10.0671 -5.18614 2.75 446 | vertex -9.83156 -1.44275 2.75 447 | vertex -9.83156 -5.55725 2.75 448 | endloop 449 | endfacet 450 | facet normal 0 0 -1 451 | outer loop 452 | vertex -10.0671 -5.18614 2.75 453 | vertex -10.0671 -1.81386 2.75 454 | vertex -9.83156 -1.44275 2.75 455 | endloop 456 | endfacet 457 | facet normal 0 0 -1 458 | outer loop 459 | vertex -10.2542 -4.78843 2.75 460 | vertex -10.0671 -1.81386 2.75 461 | vertex -10.0671 -5.18614 2.75 462 | endloop 463 | endfacet 464 | facet normal 0 0 -1 465 | outer loop 466 | vertex -10.2542 -4.78843 2.75 467 | vertex -10.2542 -2.21156 2.75 468 | vertex -10.0671 -1.81386 2.75 469 | endloop 470 | endfacet 471 | facet normal 0 0 -1 472 | outer loop 473 | vertex -10.39 -4.37041 2.75 474 | vertex -10.2542 -2.21156 2.75 475 | vertex -10.2542 -4.78843 2.75 476 | endloop 477 | endfacet 478 | facet normal 0 0 -1 479 | outer loop 480 | vertex -10.39 -4.37041 2.75 481 | vertex -10.39 -2.62959 2.75 482 | vertex -10.2542 -2.21156 2.75 483 | endloop 484 | endfacet 485 | facet normal 0 0 -1 486 | outer loop 487 | vertex -10.4724 -3.93867 2.75 488 | vertex -10.39 -2.62959 2.75 489 | vertex -10.39 -4.37041 2.75 490 | endloop 491 | endfacet 492 | facet normal 0 0 -1 493 | outer loop 494 | vertex -10.4724 -3.93867 2.75 495 | vertex -10.4724 -3.06133 2.75 496 | vertex -10.39 -2.62959 2.75 497 | endloop 498 | endfacet 499 | facet normal 0 -0 -1 500 | outer loop 501 | vertex -10.4724 -3.06133 2.75 502 | vertex -10.4724 -3.93867 2.75 503 | vertex -10.5 -3.5 2.75 504 | endloop 505 | endfacet 506 | facet normal 0 0 -1 507 | outer loop 508 | vertex -7 -6.99309 2.75 509 | vertex -0.5 -7 2.75 510 | vertex -7 -7 2.75 511 | endloop 512 | endfacet 513 | facet normal 0 0 -1 514 | outer loop 515 | vertex -0.5 -7 2.75 516 | vertex -7 -6.99309 2.75 517 | vertex -0.5 0 2.75 518 | endloop 519 | endfacet 520 | facet normal 0 0 -1 521 | outer loop 522 | vertex -7 -0.00690556 2.75 523 | vertex -0.5 0 2.75 524 | vertex -7 -6.99309 2.75 525 | endloop 526 | endfacet 527 | facet normal -0 0 -1 528 | outer loop 529 | vertex -0.5 0 2.75 530 | vertex -7 -0.00690556 2.75 531 | vertex -7 0 2.75 532 | endloop 533 | endfacet 534 | facet normal -0.248671 -0.968588 0 535 | outer loop 536 | vertex -8.08156 -6.8287 2.75 537 | vertex -7.65583 -6.938 5.75 538 | vertex -8.08156 -6.8287 5.75 539 | endloop 540 | endfacet 541 | facet normal -0.248671 -0.968588 -0 542 | outer loop 543 | vertex -7.65583 -6.938 5.75 544 | vertex -8.08156 -6.8287 2.75 545 | vertex -7.65583 -6.938 2.75 546 | endloop 547 | endfacet 548 | facet normal 0 1 -0 549 | outer loop 550 | vertex -7 -0.00690556 2.75 551 | vertex -7.21977 -0.00690556 5.75 552 | vertex -7 -0.00690556 5.75 553 | endloop 554 | endfacet 555 | facet normal 0 1 0 556 | outer loop 557 | vertex -7.21977 -0.00690556 5.75 558 | vertex -7 -0.00690556 2.75 559 | vertex -7.21977 -0.00690556 2.75 560 | endloop 561 | endfacet 562 | facet normal -0.12534 -0.992114 0 563 | outer loop 564 | vertex -7.65583 -6.938 2.75 565 | vertex -7.21977 -6.99309 5.75 566 | vertex -7.65583 -6.938 5.75 567 | endloop 568 | endfacet 569 | facet normal -0.12534 -0.992114 -0 570 | outer loop 571 | vertex -7.21977 -6.99309 5.75 572 | vertex -7.65583 -6.938 2.75 573 | vertex -7.21977 -6.99309 2.75 574 | endloop 575 | endfacet 576 | facet normal -0.770506 -0.637432 0 577 | outer loop 578 | vertex -9.55139 -5.89591 2.75 579 | vertex -9.83156 -5.55725 5.75 580 | vertex -9.83156 -5.55725 2.75 581 | endloop 582 | endfacet 583 | facet normal -0.770506 -0.637432 0 584 | outer loop 585 | vertex -9.83156 -5.55725 5.75 586 | vertex -9.55139 -5.89591 2.75 587 | vertex -9.55139 -5.89591 5.75 588 | endloop 589 | endfacet 590 | facet normal -0.684536 0.728979 0 591 | outer loop 592 | vertex -9.23098 -0.803204 2.75 593 | vertex -9.55139 -1.10408 5.75 594 | vertex -9.23098 -0.803204 5.75 595 | endloop 596 | endfacet 597 | facet normal -0.684536 0.728979 0 598 | outer loop 599 | vertex -9.55139 -1.10408 5.75 600 | vertex -9.23098 -0.803204 2.75 601 | vertex -9.55139 -1.10408 2.75 602 | endloop 603 | endfacet 604 | facet normal -0.587783 -0.809018 0 605 | outer loop 606 | vertex -9.23098 -6.1968 2.75 607 | vertex -8.87539 -6.45515 5.75 608 | vertex -9.23098 -6.1968 5.75 609 | endloop 610 | endfacet 611 | facet normal -0.587783 -0.809018 -0 612 | outer loop 613 | vertex -8.87539 -6.45515 5.75 614 | vertex -9.23098 -6.1968 2.75 615 | vertex -8.87539 -6.45515 2.75 616 | endloop 617 | endfacet 618 | facet normal -0.684553 -0.728963 0 619 | outer loop 620 | vertex -9.55139 -5.89591 2.75 621 | vertex -9.23098 -6.1968 5.75 622 | vertex -9.55139 -5.89591 5.75 623 | endloop 624 | endfacet 625 | facet normal -0.684553 -0.728963 -0 626 | outer loop 627 | vertex -9.23098 -6.1968 5.75 628 | vertex -9.55139 -5.89591 2.75 629 | vertex -9.23098 -6.1968 2.75 630 | endloop 631 | endfacet 632 | facet normal -0.844301 0.53587 0 633 | outer loop 634 | vertex -10.0671 -1.81386 2.75 635 | vertex -9.83156 -1.44275 5.75 636 | vertex -9.83156 -1.44275 2.75 637 | endloop 638 | endfacet 639 | facet normal -0.844301 0.53587 0 640 | outer loop 641 | vertex -9.83156 -1.44275 5.75 642 | vertex -10.0671 -1.81386 2.75 643 | vertex -10.0671 -1.81386 5.75 644 | endloop 645 | endfacet 646 | facet normal -0.125337 0.992114 0 647 | outer loop 648 | vertex -7.21977 -0.00690556 2.75 649 | vertex -7.65583 -0.0619946 5.75 650 | vertex -7.21977 -0.00690556 5.75 651 | endloop 652 | endfacet 653 | facet normal -0.125337 0.992114 0 654 | outer loop 655 | vertex -7.65583 -0.0619946 5.75 656 | vertex -7.21977 -0.00690556 2.75 657 | vertex -7.65583 -0.0619946 2.75 658 | endloop 659 | endfacet 660 | facet normal -0.368123 0.929777 0 661 | outer loop 662 | vertex -8.08156 -0.171302 2.75 663 | vertex -8.49023 -0.333105 5.75 664 | vertex -8.08156 -0.171302 5.75 665 | endloop 666 | endfacet 667 | facet normal -0.368123 0.929777 0 668 | outer loop 669 | vertex -8.49023 -0.333105 5.75 670 | vertex -8.08156 -0.171302 2.75 671 | vertex -8.49023 -0.333105 2.75 672 | endloop 673 | endfacet 674 | facet normal -0.98227 -0.187472 0 675 | outer loop 676 | vertex -10.39 -4.37041 2.75 677 | vertex -10.4724 -3.93867 5.75 678 | vertex -10.4724 -3.93867 2.75 679 | endloop 680 | endfacet 681 | facet normal -0.98227 -0.187472 0 682 | outer loop 683 | vertex -10.4724 -3.93867 5.75 684 | vertex -10.39 -4.37041 2.75 685 | vertex -10.39 -4.37041 5.75 686 | endloop 687 | endfacet 688 | facet normal -0.904869 -0.42569 0 689 | outer loop 690 | vertex -10.0671 -5.18614 2.75 691 | vertex -10.2542 -4.78843 5.75 692 | vertex -10.2542 -4.78843 2.75 693 | endloop 694 | endfacet 695 | facet normal -0.904869 -0.42569 0 696 | outer loop 697 | vertex -10.2542 -4.78843 5.75 698 | vertex -10.0671 -5.18614 2.75 699 | vertex -10.0671 -5.18614 5.75 700 | endloop 701 | endfacet 702 | facet normal -0.951074 0.308963 0 703 | outer loop 704 | vertex -10.39 -2.62959 2.75 705 | vertex -10.2542 -2.21156 5.75 706 | vertex -10.2542 -2.21156 2.75 707 | endloop 708 | endfacet 709 | facet normal -0.951074 0.308963 0 710 | outer loop 711 | vertex -10.2542 -2.21156 5.75 712 | vertex -10.39 -2.62959 2.75 713 | vertex -10.39 -2.62959 5.75 714 | endloop 715 | endfacet 716 | facet normal -0.248687 0.968584 0 717 | outer loop 718 | vertex -7.65583 -0.0619946 2.75 719 | vertex -8.08156 -0.171302 5.75 720 | vertex -7.65583 -0.0619946 5.75 721 | endloop 722 | endfacet 723 | facet normal -0.248687 0.968584 0 724 | outer loop 725 | vertex -8.08156 -0.171302 5.75 726 | vertex -7.65583 -0.0619946 2.75 727 | vertex -8.08156 -0.171302 2.75 728 | endloop 729 | endfacet 730 | facet normal 0 -1 0 731 | outer loop 732 | vertex -7.21977 -6.99309 2.75 733 | vertex -7 -6.99309 5.75 734 | vertex -7.21977 -6.99309 5.75 735 | endloop 736 | endfacet 737 | facet normal 0 -1 -0 738 | outer loop 739 | vertex -7 -6.99309 5.75 740 | vertex -7.21977 -6.99309 2.75 741 | vertex -7 -6.99309 2.75 742 | endloop 743 | endfacet 744 | facet normal -0.844301 -0.53587 0 745 | outer loop 746 | vertex -9.83156 -5.55725 2.75 747 | vertex -10.0671 -5.18614 5.75 748 | vertex -10.0671 -5.18614 2.75 749 | endloop 750 | endfacet 751 | facet normal -0.844301 -0.53587 0 752 | outer loop 753 | vertex -10.0671 -5.18614 5.75 754 | vertex -9.83156 -5.55725 2.75 755 | vertex -9.83156 -5.55725 5.75 756 | endloop 757 | endfacet 758 | facet normal -0.998027 -0.0627933 0 759 | outer loop 760 | vertex -10.4724 -3.93867 2.75 761 | vertex -10.5 -3.5 5.75 762 | vertex -10.5 -3.5 2.75 763 | endloop 764 | endfacet 765 | facet normal -0.998027 -0.0627933 0 766 | outer loop 767 | vertex -10.5 -3.5 5.75 768 | vertex -10.4724 -3.93867 2.75 769 | vertex -10.4724 -3.93867 5.75 770 | endloop 771 | endfacet 772 | facet normal -0.951072 -0.30897 0 773 | outer loop 774 | vertex -10.2542 -4.78843 2.75 775 | vertex -10.39 -4.37041 5.75 776 | vertex -10.39 -4.37041 2.75 777 | endloop 778 | endfacet 779 | facet normal -0.951072 -0.30897 0 780 | outer loop 781 | vertex -10.39 -4.37041 5.75 782 | vertex -10.2542 -4.78843 2.75 783 | vertex -10.2542 -4.78843 5.75 784 | endloop 785 | endfacet 786 | facet normal -0.48176 0.876303 0 787 | outer loop 788 | vertex -8.49023 -0.333105 2.75 789 | vertex -8.87539 -0.544852 5.75 790 | vertex -8.49023 -0.333105 5.75 791 | endloop 792 | endfacet 793 | facet normal -0.48176 0.876303 0 794 | outer loop 795 | vertex -8.87539 -0.544852 5.75 796 | vertex -8.49023 -0.333105 2.75 797 | vertex -8.87539 -0.544852 2.75 798 | endloop 799 | endfacet 800 | facet normal -0.998027 0.0627933 0 801 | outer loop 802 | vertex -10.5 -3.5 2.75 803 | vertex -10.4724 -3.06133 5.75 804 | vertex -10.4724 -3.06133 2.75 805 | endloop 806 | endfacet 807 | facet normal -0.998027 0.0627933 0 808 | outer loop 809 | vertex -10.4724 -3.06133 5.75 810 | vertex -10.5 -3.5 2.75 811 | vertex -10.5 -3.5 5.75 812 | endloop 813 | endfacet 814 | facet normal -0.368137 -0.929772 0 815 | outer loop 816 | vertex -8.49023 -6.66689 2.75 817 | vertex -8.08156 -6.8287 5.75 818 | vertex -8.49023 -6.66689 5.75 819 | endloop 820 | endfacet 821 | facet normal -0.368137 -0.929772 -0 822 | outer loop 823 | vertex -8.08156 -6.8287 5.75 824 | vertex -8.49023 -6.66689 2.75 825 | vertex -8.08156 -6.8287 2.75 826 | endloop 827 | endfacet 828 | facet normal -0.770516 0.637421 0 829 | outer loop 830 | vertex -9.83156 -1.44275 2.75 831 | vertex -9.55139 -1.10408 5.75 832 | vertex -9.55139 -1.10408 2.75 833 | endloop 834 | endfacet 835 | facet normal -0.770516 0.637421 0 836 | outer loop 837 | vertex -9.55139 -1.10408 5.75 838 | vertex -9.83156 -1.44275 2.75 839 | vertex -9.83156 -1.44275 5.75 840 | endloop 841 | endfacet 842 | facet normal -0.98227 0.187472 0 843 | outer loop 844 | vertex -10.4724 -3.06133 2.75 845 | vertex -10.39 -2.62959 5.75 846 | vertex -10.39 -2.62959 2.75 847 | endloop 848 | endfacet 849 | facet normal -0.98227 0.187472 0 850 | outer loop 851 | vertex -10.39 -2.62959 5.75 852 | vertex -10.4724 -3.06133 2.75 853 | vertex -10.4724 -3.06133 5.75 854 | endloop 855 | endfacet 856 | facet normal -0.587786 0.809016 0 857 | outer loop 858 | vertex -8.87539 -0.544852 2.75 859 | vertex -9.23098 -0.803204 5.75 860 | vertex -8.87539 -0.544852 5.75 861 | endloop 862 | endfacet 863 | facet normal -0.587786 0.809016 0 864 | outer loop 865 | vertex -9.23098 -0.803204 5.75 866 | vertex -8.87539 -0.544852 2.75 867 | vertex -9.23098 -0.803204 2.75 868 | endloop 869 | endfacet 870 | facet normal -0.481748 -0.87631 0 871 | outer loop 872 | vertex -8.87539 -6.45515 2.75 873 | vertex -8.49023 -6.66689 5.75 874 | vertex -8.87539 -6.45515 5.75 875 | endloop 876 | endfacet 877 | facet normal -0.481748 -0.87631 -0 878 | outer loop 879 | vertex -8.49023 -6.66689 5.75 880 | vertex -8.87539 -6.45515 2.75 881 | vertex -8.49023 -6.66689 2.75 882 | endloop 883 | endfacet 884 | facet normal -0.904865 0.425698 0 885 | outer loop 886 | vertex -10.2542 -2.21156 2.75 887 | vertex -10.0671 -1.81386 5.75 888 | vertex -10.0671 -1.81386 2.75 889 | endloop 890 | endfacet 891 | facet normal -0.904865 0.425698 0 892 | outer loop 893 | vertex -10.0671 -1.81386 5.75 894 | vertex -10.2542 -2.21156 2.75 895 | vertex -10.2542 -2.21156 5.75 896 | endloop 897 | endfacet 898 | facet normal 0 -1 0 899 | outer loop 900 | vertex -5.2 -5 5.75 901 | vertex -0.5 -5 7.35 902 | vertex -5.2 -5 7.35 903 | endloop 904 | endfacet 905 | facet normal 0 -1 -0 906 | outer loop 907 | vertex -0.5 -5 7.35 908 | vertex -5.2 -5 5.75 909 | vertex -0.5 -5 5.75 910 | endloop 911 | endfacet 912 | facet normal 0 1 -0 913 | outer loop 914 | vertex -0.5 -2 5.75 915 | vertex -5.2 -2 7.35 916 | vertex -0.5 -2 7.35 917 | endloop 918 | endfacet 919 | facet normal 0 1 0 920 | outer loop 921 | vertex -5.2 -2 7.35 922 | vertex -0.5 -2 5.75 923 | vertex -5.2 -2 5.75 924 | endloop 925 | endfacet 926 | facet normal -1 0 0 927 | outer loop 928 | vertex -5.2 -5 5.75 929 | vertex -5.2 -2 7.35 930 | vertex -5.2 -2 5.75 931 | endloop 932 | endfacet 933 | facet normal -1 -0 0 934 | outer loop 935 | vertex -5.2 -2 7.35 936 | vertex -5.2 -5 5.75 937 | vertex -5.2 -5 7.35 938 | endloop 939 | endfacet 940 | facet normal -0 0 1 941 | outer loop 942 | vertex -5.2 -2 7.35 943 | vertex -0.5 -5 7.35 944 | vertex -0.5 -2 7.35 945 | endloop 946 | endfacet 947 | facet normal 0 0 1 948 | outer loop 949 | vertex -0.5 -5 7.35 950 | vertex -5.2 -2 7.35 951 | vertex -5.2 -5 7.35 952 | endloop 953 | endfacet 954 | endsolid OpenSCAD_Model 955 | -------------------------------------------------------------------------------- /inky-impression-case.scad: -------------------------------------------------------------------------------- 1 | // inky-impression-case.scad 2 | // 3 | // Copyright: Douglas Reed, January 2021 4 | // 5 | // This is a wall-mounting case for: 6 | // 7 | // Pimoroni Inky Impression 7-colour e-ink display 8 | // https://shop.pimoroni.com/products/inky-impression 9 | // 10 | // See accompanying readme.md for full details 11 | 12 | // The case consists of the following parts: 13 | // 14 | // 1 x FRAME - The front and sides of the case 15 | // 1 x REARPANEL - The rear panel and wall-mount 16 | // 1 x BACKPLANE - An internal panel to hold the Inky Impression in position 17 | // 4 x BUTTON - Button extensions to allow operation of the Inky Impression's 18 | // buttons 19 | // 20 | // There is also an optional addition: 21 | // 22 | // 1 x STAND - A desk stand that clips into the wall-mount keyholes 23 | // on the rear panel 24 | 25 | // Use the customizer in OpenScad (Menu: Window -> Customizer) to set the 26 | // following parameters and show different parts or views of the model. Only set 27 | // one of these to "true" at a time, and keep the others "false"! 28 | 29 | // The frame in printable orientation. 30 | FRAME = false; 31 | 32 | // The backplane in printable orientation. 33 | BACKPLANE = false; 34 | 35 | // The rear panel in printable orientation. 36 | REARPANEL = false; 37 | 38 | // A button in printable orientation 39 | BUTTON = false; 40 | 41 | // A desk stand in printable orientation 42 | STAND = false; 43 | 44 | // Show the fully assembled case 45 | ASSEMBLED = false; 46 | 47 | // Show an exploded view of the case 48 | EXPLODED = false; 49 | 50 | // The rear panel is held on by fixing bolts. Set the following parameters 51 | // According to the bolts you are using 52 | 53 | // The diameter of the rear panel fixing bolts 54 | BOLT_DIAMETER = 2.5; // M2.5 bolts 55 | 56 | // Countersunk fixing bolts 57 | BOLT_COUNTERSUNK = true; 58 | 59 | // The rear panel mounts can take heat-set threaded inserts to make it easier to 60 | // screw in the bolts. Set the following parameter to the recommended hole 61 | // diameter for the inserts you are using (max: 6). If you don't want to 62 | // use inserts and just want to self-tap the bolts into the plastic, set 63 | // this to slightly less than the diameter of the bolts you are using, 64 | // for example: 2.3 for M2.5 bolts 65 | 66 | // Threaded insert outer diameter 67 | INSERT_DIAMETER = 3.5; 68 | 69 | // Other editable parameters are at the end of the file! 70 | 71 | // *** MAIN ROUTINE *** 72 | 73 | if (ASSEMBLED) { 74 | // shows the case fully assembled with Inky Impression and Raspberry Pi Zero 75 | // boards in position. Prefix any of the lines below with "*" to temporarily 76 | // remove that element and see inside the case 77 | frame(); 78 | rearpanel(); 79 | backplane(); 80 | buttons(); 81 | stand(); 82 | inky(); 83 | rpizero(); 84 | } else 85 | if (EXPLODED) { 86 | rotate([-stand_angle,0,0]) { 87 | translate([0,-50,0]) frame(); 88 | translate([0,130,0]) rearpanel(); 89 | translate([0,150,0]) stand(); 90 | translate([0,50,0]) backplane(); 91 | translate([-50,-50,0]) buttons(); 92 | inky(); 93 | translate([0,80,0]) rpizero(); 94 | } 95 | } else { 96 | // shows case parts in the correct orientation for printing 97 | if (FRAME) { rotate([90,0,0]) frame(); } 98 | if (REARPANEL) { rotate([-90,0,0]) rearpanel(); } 99 | if (BACKPLANE) { rotate([90,0,0]) backplane(); } 100 | if (BUTTON) { rotate([90,0,0]) button(0); } 101 | if (STAND) { rotate([-stand_angle,0,0]) stand(); } 102 | } 103 | 104 | 105 | // *** MODULES *** 106 | 107 | module frame() { 108 | // The front and sides of the case 109 | difference() { 110 | union() { // union of solids 111 | translate([frame_offset_w,frame_offset_d,frame_offset_h]) 112 | color("SlateGray") cube([frame_w,frame_d,frame_h]); 113 | } // union of solids 114 | 115 | union() { // union of holes 116 | // screen cutout 117 | translate([inky_screen_offset_w, frame_offset_d - a_bit, inky_screen_offset_h]) 118 | cube([inky_screen_w, frame_thickness_front + a_bit_more, inky_screen_h]); 119 | // inky board cutout 120 | translate([-frame_clearance_w, frame_offset_d + frame_thickness_front, -inky_screen_cable_h - frame_clearance_h]) 121 | cube([inky_board_w + frame_clearance_w * 2, frame_d, inky_board_h+inky_screen_cable_h + frame_clearance_h]); 122 | // backplane ledge cutout 123 | translate([frame_offset_w + frame_thickness_sides, backplane_offset_d, frame_offset_h+frame_thickness_sides]) 124 | cube([frame_w - (frame_thickness_sides * 2), frame_d, frame_h - (frame_thickness_sides * 2)]); 125 | 126 | // inky connector cutout 127 | translate([inky_conn_offset_w, inky_board_d, frame_offset_h - a_bit]) 128 | cube([inky_conn_w, frame_d, frame_thickness_sides + a_bit_more]); 129 | 130 | // mount holes 131 | translate([rearpanel_offset_w, rearpanel_offset_d - rearpanel_mount_d, frame_offset_h]) { 132 | translate([rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,-a_bit]) bolt(radius=rearpanel_mount_bolt_r + rearpanel_mount_bolt_clearance,length=rearpanel_mount_bolt_length); 133 | } 134 | translate([rearpanel_offset_w + rearpanel_w - rearpanel_mount_w, rearpanel_offset_d - rearpanel_mount_d, frame_offset_h]) { 135 | translate([rearpanel_mount_w-rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,-a_bit]) bolt(radius=rearpanel_mount_bolt_r + rearpanel_mount_bolt_clearance,length=rearpanel_mount_bolt_length); 136 | } 137 | translate([rearpanel_offset_w + rearpanel_w - rearpanel_mount_w, rearpanel_offset_d - rearpanel_mount_d, frame_offset_h + frame_h]) { 138 | translate([rearpanel_mount_w-rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,a_bit]) rotate([180,0,0]) bolt(radius=rearpanel_mount_bolt_r + rearpanel_mount_bolt_clearance,length=rearpanel_mount_bolt_length); 139 | } 140 | translate([rearpanel_offset_w, rearpanel_offset_d - rearpanel_mount_d, frame_offset_h + frame_h]) { 141 | translate([rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,a_bit]) rotate([180,0,0]) bolt(radius=rearpanel_mount_bolt_r + rearpanel_mount_bolt_clearance,length=rearpanel_mount_bolt_length); 142 | } 143 | 144 | // buttons 145 | translate([-frame_border - a_bit, inky_board_d, inky_btn_a_offset_h - button_clearance]) 146 | cube([frame_border + a_bit_more, button_d + button_clearance * 2 , button_h + button_clearance * 2]); 147 | translate([-frame_border - a_bit, inky_board_d, inky_btn_b_offset_h - button_clearance]) 148 | cube([frame_border + a_bit_more, button_d + button_clearance * 2 , button_h + button_clearance * 2]); 149 | translate([-frame_border - a_bit, inky_board_d, inky_btn_c_offset_h - button_clearance]) 150 | cube([frame_border + a_bit_more, button_d + button_clearance * 2 , button_h + button_clearance * 2]); 151 | translate([-frame_border - a_bit, inky_board_d, inky_btn_d_offset_h - button_clearance]) 152 | cube([frame_border + a_bit_more, button_d + button_clearance * 2 , button_h + button_clearance * 2]); 153 | } // union of holes 154 | } 155 | } // module frame() 156 | 157 | module backplane() { 158 | // Backplane to support the Inky Impression and hold it 159 | // in the right position within the case 160 | 161 | difference(){ 162 | color("SlateGray") union() { //union of solids 163 | // backplane 164 | translate([backplane_offset_w,backplane_offset_d,backplane_offset_h]) 165 | cube([backplane_w,backplane_d,backplane_h]); 166 | // Mounting risers 167 | translate([inky_mount_a_offset_w,inky_board_d+inky_mount_d,inky_mount_a_offset_h]) 168 | rotate([-90,0,0]) cylinder(h=backplane_d + backplane_mount_riser_d, r=backplane_mount_riser_r); 169 | translate([inky_mount_b_offset_w,inky_board_d+inky_mount_d,inky_mount_b_offset_h]) 170 | rotate([-90,0,0]) cylinder(h=backplane_d + backplane_mount_riser_d, r=backplane_mount_riser_r); 171 | translate([inky_mount_c_offset_w,inky_board_d+inky_mount_d,inky_mount_c_offset_h]) 172 | rotate([-90,0,0]) cylinder(h=backplane_d + backplane_mount_riser_d, r=backplane_mount_riser_r); 173 | translate([inky_mount_d_offset_w,inky_board_d+inky_mount_d,inky_mount_d_offset_h]) 174 | rotate([-90,0,0]) cylinder(h=backplane_d + backplane_mount_riser_d, r=backplane_mount_riser_r); 175 | } // union of solids 176 | 177 | union() { // union of holes 178 | 179 | // mounting holes 180 | translate([inky_mount_a_offset_w,inky_board_d+inky_mount_d-a_bit,inky_mount_a_offset_h]) 181 | rotate([-90,0,0]) cylinder(h=backplane_d+backplane_mount_riser_d+a_bit_more, r=backplane_mount_hole_r); 182 | translate([inky_mount_b_offset_w,inky_board_d+inky_mount_d-a_bit,inky_mount_b_offset_h]) 183 | rotate([-90,0,0]) cylinder(h=backplane_d+backplane_mount_riser_d+a_bit_more, r=backplane_mount_hole_r); 184 | translate([inky_mount_c_offset_w,inky_board_d+inky_mount_d-a_bit,inky_mount_c_offset_h]) 185 | rotate([-90,0,0]) cylinder(h=backplane_d+backplane_mount_riser_d+a_bit_more, r=backplane_mount_hole_r); 186 | translate([inky_mount_d_offset_w,inky_board_d+inky_mount_d-a_bit,inky_mount_d_offset_h]) 187 | rotate([-90,0,0]) cylinder(h=backplane_d+backplane_mount_riser_d+a_bit_more, r=backplane_mount_hole_r); 188 | 189 | // button cutouts 190 | translate([inky_btn_offset_w - backplane_clearance, inky_board_d + inky_mount_d - a_bit, inky_btn_a_offset_h - backplane_clearance]) { 191 | cube([inky_btn_w + backplane_clearance * 2,backplane_d + a_bit_more, inky_btn_h + backplane_clearance * 2]); 192 | translate([a_bit-button_w,0,inky_btn_h/2-inky_btn_striker_h/2]) 193 | cube([button_w, backplane_d + a_bit_more, inky_btn_striker_h + backplane_clearance * 2]); 194 | } 195 | translate([inky_btn_offset_w - backplane_clearance, inky_board_d + inky_mount_d - a_bit, inky_btn_b_offset_h - backplane_clearance]) { 196 | cube([inky_btn_w + backplane_clearance * 2,backplane_d + a_bit_more, inky_btn_h + backplane_clearance * 2]); 197 | translate([a_bit-button_w,0,inky_btn_h/2-inky_btn_striker_h/2]) 198 | cube([button_w, backplane_d + a_bit_more, inky_btn_striker_h + backplane_clearance * 2]); 199 | } 200 | translate([inky_btn_offset_w - backplane_clearance, inky_board_d + inky_mount_d - a_bit, inky_btn_c_offset_h - backplane_clearance]) { 201 | cube([inky_btn_w + backplane_clearance * 2,backplane_d + a_bit_more, inky_btn_h + backplane_clearance * 2]); 202 | translate([a_bit-button_w,0,inky_btn_h/2-inky_btn_striker_h/2]) 203 | cube([button_w, backplane_d + a_bit_more, inky_btn_striker_h + backplane_clearance * 2]); 204 | } 205 | translate([inky_btn_offset_w - backplane_clearance, inky_board_d + inky_mount_d - a_bit, inky_btn_d_offset_h - backplane_clearance]) { 206 | cube([inky_btn_w + backplane_clearance * 2,backplane_d + a_bit_more, inky_btn_h + backplane_clearance * 2]); 207 | translate([a_bit-button_w,0,inky_btn_h/2-inky_btn_striker_h/2]) 208 | cube([button_w, backplane_d + a_bit_more, inky_btn_striker_h + backplane_clearance * 2]); 209 | } 210 | 211 | // pi header cutout 212 | translate([inky_hdr_offset_w-backplane_clearance,inky_board_d+inky_mount_d-a_bit,inky_hdr_offset_h-backplane_clearance]) 213 | cube([inky_hdr_w+backplane_clearance*2,backplane_d+a_bit_more,inky_hdr_h+backplane_clearance*2]); 214 | // breakout connector cutout 215 | translate([inky_conn_offset_w-backplane_clearance,inky_board_d+inky_mount_d-a_bit,-inky_conn_offset_h]) 216 | cube([inky_conn_w+backplane_clearance*2,inky_board_d+a_bit_more,inky_conn_offset_h+inky_conn_h*2.5+a_bit]); 217 | } // union of holes 218 | } // difference() 219 | } // module backplane() 220 | 221 | module buttons() { 222 | color("red") button(inky_btn_a_offset_h); 223 | color("yellow") button(inky_btn_b_offset_h); 224 | color("green") button(inky_btn_c_offset_h); 225 | color("blue") button(inky_btn_d_offset_h); 226 | } // module buttons() 227 | 228 | module button(offset_h) { 229 | translate([button_offset_w, inky_board_d, offset_h]) 230 | union() { 231 | cube([button_w, button_d, button_h]); 232 | translate([0,0,button_h/2]) rotate([-90,0,0]) cylinder(h=button_d, r=button_h/2); 233 | translate([button_lug_offset_w,button_lug_offset_d,button_lug_offset_h]) cube([button_lug_w,button_lug_d,button_lug_h]); 234 | } 235 | } // module button(offset_h) 236 | 237 | module rearpanel() { 238 | difference() { 239 | color("LightSlateGray") union() { // union of solids 240 | // panel 241 | translate([rearpanel_offset_w, rearpanel_offset_d, rearpanel_offset_h]) 242 | cube([rearpanel_w, rearpanel_d, rearpanel_h]); 243 | 244 | // mounts 245 | translate([rearpanel_offset_w, rearpanel_offset_d - rearpanel_mount_d, rearpanel_offset_h]) { 246 | cube([rearpanel_mount_w, rearpanel_mount_d, rearpanel_mount_h]); 247 | translate([rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,0]) cylinder(h=rearpanel_mount_h, r=rearpanel_mount_r); 248 | } 249 | translate([rearpanel_offset_w + rearpanel_w - rearpanel_mount_w, rearpanel_offset_d - rearpanel_mount_d, rearpanel_offset_h]) { 250 | cube([rearpanel_mount_w, rearpanel_mount_d, rearpanel_mount_h]); 251 | translate([rearpanel_mount_w-rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,0]) cylinder(h=rearpanel_mount_h, r=rearpanel_mount_r); 252 | } 253 | translate([rearpanel_offset_w + rearpanel_w - rearpanel_mount_w, rearpanel_offset_d - rearpanel_mount_d, rearpanel_offset_h + rearpanel_h - rearpanel_mount_h]) { 254 | cube([rearpanel_mount_w, rearpanel_mount_d, rearpanel_mount_h]); 255 | translate([rearpanel_mount_w-rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,0]) cylinder(h=rearpanel_mount_h, r=rearpanel_mount_r); 256 | } 257 | translate([rearpanel_offset_w, rearpanel_offset_d - rearpanel_mount_d, rearpanel_offset_h + rearpanel_h - rearpanel_mount_h]) { 258 | cube([rearpanel_mount_w, rearpanel_mount_d, rearpanel_mount_h]); 259 | translate([rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,0]) cylinder(h=rearpanel_mount_h, r=rearpanel_mount_r); 260 | } 261 | } // union of solids 262 | 263 | union() { //union of holes 264 | // mounting bolt holes 265 | translate([rearpanel_offset_w, rearpanel_offset_d - rearpanel_mount_d, rearpanel_offset_h]) { 266 | translate([rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,-a_bit]) cylinder(h=rearpanel_mount_h+a_bit_more, r=rearpanel_mount_insert_r); 267 | } 268 | translate([rearpanel_offset_w + rearpanel_w - rearpanel_mount_w, rearpanel_offset_d - rearpanel_mount_d, rearpanel_offset_h]) { 269 | translate([rearpanel_mount_w-rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,-a_bit]) cylinder(h=rearpanel_mount_h+a_bit_more, r=rearpanel_mount_insert_r); 270 | } 271 | translate([rearpanel_offset_w + rearpanel_w - rearpanel_mount_w, rearpanel_offset_d - rearpanel_mount_d, rearpanel_offset_h + rearpanel_h - rearpanel_mount_h]) { 272 | translate([rearpanel_mount_w-rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,-a_bit]) cylinder(h=rearpanel_mount_h+a_bit_more, r=rearpanel_mount_insert_r); 273 | } 274 | translate([rearpanel_offset_w, rearpanel_offset_d - rearpanel_mount_d, rearpanel_offset_h + rearpanel_h - rearpanel_mount_h]) { 275 | translate([rearpanel_mount_r,rearpanel_mount_d-rearpanel_mount_r+rearpanel_d,-a_bit]) cylinder(h=rearpanel_mount_h+a_bit_more, r=rearpanel_mount_insert_r); 276 | } 277 | 278 | // keyholes for wall-mounting 279 | key1_offset_w = rearpanel_key_spacing_w / 2; 280 | key2_offset_w = -rearpanel_key_spacing_w / 2; 281 | 282 | translate([rearpanel_offset_w + rearpanel_w / 2 + key1_offset_w, rearpanel_offset_d - a_bit, rearpanel_offset_h + rearpanel_h / 2]) 283 | union() { 284 | translate([0, 0, 0]) rotate([-90,0,0]) cylinder(h=rearpanel_d + a_bit_more, r=rearpanel_key_slot_r); 285 | translate([0, 0, -rearpanel_key_slot_h]) rotate([-90,0,0]) cylinder(h=rearpanel_d + a_bit_more, r=rearpanel_key_hole_r); 286 | translate([-rearpanel_key_slot_r, 0, -rearpanel_key_slot_h]) cube([rearpanel_key_slot_r * 2,rearpanel_d + a_bit_more,rearpanel_key_slot_h]); 287 | } 288 | 289 | translate([rearpanel_offset_w + rearpanel_w / 2 + key2_offset_w, rearpanel_offset_d - a_bit, rearpanel_offset_h + rearpanel_h / 2]) 290 | union() { 291 | translate([0, 0, 0]) rotate([-90,0,0]) cylinder(h=rearpanel_d + a_bit_more, r=rearpanel_key_slot_r); 292 | translate([0, 0, -rearpanel_key_slot_h]) rotate([-90,0,0]) cylinder(h=rearpanel_d + a_bit_more, r=rearpanel_key_hole_r); 293 | translate([-rearpanel_key_slot_r, 0, -rearpanel_key_slot_h]) cube([rearpanel_key_slot_r * 2,rearpanel_d + a_bit_more,rearpanel_key_slot_h]); 294 | } 295 | } // union of holes 296 | } // difference() 297 | } // module rearpanel() 298 | 299 | module stand() { 300 | difference() { 301 | color("LightGray") union() { // union of solids 302 | // leg1 303 | translate([stand_leg1_offset_w-stand_leg_r,stand_offset_d,stand_offset_h]) 304 | union() { 305 | cube([stand_leg_w,stand_leg_r,stand_leg_h]); 306 | translate([stand_leg_r,stand_leg_r,0]) cylinder(r=stand_leg_r,h=stand_leg_h); 307 | } 308 | translate([stand_leg1_offset_w-stand_leg_r,stand_offset_d,stand_offset_h]) 309 | rotate([-90+stand_angle,0,0]) 310 | union() { 311 | cube([stand_leg_w,stand_leg_r,stand_leg_d]); 312 | translate([stand_leg_r,0,stand_leg_r]) cylinder(r=stand_leg_r,h=stand_leg_d-stand_leg_r); 313 | } 314 | // peg1 315 | translate([stand_leg1_offset_w,stand_offset_d,stand_peg_offset_h+stand_peg_stem_r]) 316 | rotate([90,0,0]) 317 | union() { 318 | cylinder(r=stand_peg_stem_r,h=stand_peg_stem_d); 319 | hull(){ 320 | translate([0,0,stand_peg_stem_d]) cylinder(r=stand_peg_stem_r,h=stand_peg_flange_d); 321 | translate([0,stand_peg_flange_r,stand_peg_stem_d]) cylinder(r=stand_peg_flange_r,h=stand_peg_flange_d); 322 | } 323 | } 324 | // leg2 325 | translate([stand_leg2_offset_w-stand_leg_r,stand_offset_d,stand_offset_h]) 326 | union() { 327 | cube([stand_leg_w,stand_leg_r,stand_leg_h]); 328 | translate([stand_leg_r,stand_leg_r,0]) cylinder(r=stand_leg_r,h=stand_leg_h); 329 | } 330 | translate([stand_leg2_offset_w-stand_leg_r,stand_offset_d,stand_offset_h]) 331 | rotate([-90+stand_angle,0,0]) 332 | union() { 333 | cube([stand_leg_w,stand_leg_r,stand_leg_d]); 334 | translate([stand_leg_r,0,stand_leg_r]) cylinder(r=stand_leg_r,h=stand_leg_d-stand_leg_r); 335 | } 336 | // peg2 337 | translate([stand_leg2_offset_w,stand_offset_d,stand_peg_offset_h+stand_peg_stem_r]) 338 | rotate([90,0,0]) 339 | union() { 340 | cylinder(r=stand_peg_stem_r,h=stand_peg_stem_d); 341 | hull(){ 342 | translate([0,0,stand_peg_stem_d]) cylinder(r=stand_peg_stem_r,h=stand_peg_flange_d); 343 | translate([0,stand_peg_flange_r,stand_peg_stem_d]) cylinder(r=stand_peg_flange_r,h=stand_peg_flange_d); 344 | } 345 | } 346 | //crossbar 347 | translate([stand_crossbar_offset_w,stand_offset_d,stand_offset_h]) 348 | rotate([-90+stand_angle,0,0]) 349 | translate([0,0,-stand_crossbar_d]) union() { 350 | cube([stand_crossbar_w,stand_crossbar_r,stand_crossbar_d]); 351 | translate([0,stand_crossbar_r,0]) rotate([0,90,0]) cylinder(r=stand_crossbar_r,h=stand_crossbar_w); 352 | } 353 | } // union of solids 354 | union() { // union of holes 355 | // shave pegs 356 | translate([stand_leg1_offset_w,stand_offset_d,stand_peg_offset_h]) 357 | rotate([stand_angle * 2,0,0]) 358 | translate([-stand_leg_w/2,-stand_leg_w,0]) cube([stand_leg_w,stand_leg_w,stand_peg_flange_r*2]); 359 | translate([stand_leg2_offset_w,stand_offset_d,stand_peg_offset_h]) 360 | rotate([stand_angle * 2,0,0]) 361 | translate([-stand_leg_w/2,-stand_leg_w,0]) cube([stand_leg_w,stand_leg_w,stand_peg_flange_r*2]); 362 | // cut off base of crossbar 363 | //crossbar 364 | translate([stand_crossbar_offset_w,stand_offset_d,stand_offset_h]) 365 | rotate([-90+stand_angle,0,0]) 366 | translate([0,0,-stand_crossbar_d]) union() { 367 | translate([-a_bit,stand_crossbar_r,-stand_crossbar_r]) cube([stand_crossbar_w+a_bit_more,stand_crossbar_r,stand_crossbar_d]); 368 | } 369 | } // union of holes 370 | } // difference() 371 | } // module stand() 372 | 373 | module rpizero() { 374 | // Crude Raspberry Pi Zero model to check for fit 375 | translate([rpizero_offset_w, rpizero_offset_d, rpizero_offset_h]) 376 | color("Green") cube([rpizero_w, rpizero_d, rpizero_h]); 377 | } // module rpizero() 378 | 379 | module inky() { 380 | // Model of the Inky Impression to test fit within the case 381 | 382 | // mainboard 383 | color("DarkSlateGray") cube([inky_board_w, inky_board_d, inky_board_h]); 384 | 385 | // active area of screen 386 | translate([inky_screen_offset_w,-a_bit,inky_screen_offset_h]) 387 | color("White") cube([inky_screen_w,a_bit_more,inky_screen_h]); 388 | 389 | // coloured text on screen - just a bit of fun! 390 | t = ["D","E","P","L","O","Y","R","A","I","N","B","O","W","S"]; 391 | c = ["red","darkorange","gold","greenyellow","dodgerblue"]; 392 | 393 | translate([inky_screen_offset_w,0.4,inky_screen_offset_h]) 394 | rotate([90,0,0]) 395 | union() { 396 | for (x = [0:11]) { 397 | for (y = [8:-1:0]) { 398 | tpos = (x+(y*11)) % 14; 399 | cpos = (x+(y*11)) % 5; 400 | translate([x*10,y*10]) color(c[cpos]) text(t[tpos],size = 6,font="Liberation Mono:style=Bold",valign = "bottom"); 401 | } 402 | } 403 | } 404 | 405 | // buttons 406 | translate([inky_btn_offset_w,inky_board_d,inky_btn_a_offset_h]) 407 | union() { 408 | color("Ivory") cube([inky_btn_w,inky_btn_d,inky_btn_h]); 409 | translate([-inky_btn_striker_w,inky_btn_d/2-inky_btn_striker_d/2,inky_btn_h/2-inky_btn_striker_h/2]) 410 | color("Black") cube([inky_btn_striker_w,inky_btn_striker_d,inky_btn_striker_h]); 411 | } 412 | translate([inky_btn_offset_w,inky_board_d,inky_btn_b_offset_h]) 413 | union() { 414 | color("Ivory") cube([inky_btn_w,inky_btn_d,inky_btn_h]); 415 | translate([-inky_btn_striker_w,inky_btn_d/2-inky_btn_striker_d/2,inky_btn_h/2-inky_btn_striker_h/2]) 416 | color("Black") cube([inky_btn_striker_w,inky_btn_striker_d,inky_btn_striker_h]); 417 | } 418 | translate([inky_btn_offset_w,inky_board_d,inky_btn_c_offset_h]) 419 | union() { 420 | color("Ivory") cube([inky_btn_w,inky_btn_d,inky_btn_h]); 421 | translate([-inky_btn_striker_w,inky_btn_d/2-inky_btn_striker_d/2,inky_btn_h/2-inky_btn_striker_h/2]) 422 | color("Black") cube([inky_btn_striker_w,inky_btn_striker_d,inky_btn_striker_h]); 423 | } 424 | translate([inky_btn_offset_w,inky_board_d,inky_btn_d_offset_h]) 425 | union() { 426 | color("Ivory") cube([inky_btn_w,inky_btn_d,inky_btn_h]); 427 | translate([-inky_btn_striker_w,inky_btn_d/2-inky_btn_striker_d/2,inky_btn_h/2-inky_btn_striker_h/2]) 428 | color("Black") cube([inky_btn_striker_w,inky_btn_striker_d,inky_btn_striker_h]); 429 | } 430 | 431 | // mounts 432 | color("silver") { 433 | translate([inky_mount_a_offset_w,inky_board_d,inky_mount_a_offset_h]) 434 | rotate([-90,0,0]) cylinder(h=inky_mount_d, r=inky_mount_outer_r); 435 | translate([inky_mount_b_offset_w,inky_board_d,inky_mount_b_offset_h]) 436 | rotate([-90,0,0]) cylinder(h=inky_mount_d, r=inky_mount_outer_r); 437 | translate([inky_mount_c_offset_w,inky_board_d,inky_mount_c_offset_h]) 438 | rotate([-90,0,0]) cylinder(h=inky_mount_d, r=inky_mount_outer_r); 439 | translate([inky_mount_d_offset_w,inky_board_d,inky_mount_d_offset_h]) 440 | rotate([-90,0,0]) cylinder(h=inky_mount_d, r=inky_mount_outer_r); 441 | } 442 | 443 | // pi header 444 | translate([inky_hdr_offset_w,inky_board_d,inky_hdr_offset_h]) 445 | color("Black") cube([inky_hdr_w,inky_hdr_d,inky_hdr_h]); 446 | 447 | // breakout connector 448 | translate([inky_conn_offset_w,inky_board_d,inky_conn_offset_h]) 449 | color("Black") cube([inky_conn_w,inky_conn_d,inky_conn_h]); 450 | 451 | // screen cable 452 | translate([inky_board_w/2-inky_screen_cable_w/2,0,-inky_screen_cable_h]) 453 | color("Goldenrod") cube([inky_screen_cable_w,inky_board_d,inky_screen_cable_h]); 454 | 455 | } // module inky() 456 | 457 | module bolt(radius,length) { 458 | h1=0.6*radius*2; 459 | h2=length-h1; 460 | cylinder(r=radius,h=length); 461 | if (BOLT_COUNTERSUNK) { cylinder(r1=radius*2,r2=radius,h=h1); } 462 | } // module bolt() 463 | 464 | 465 | // *** PARAMETERS *** 466 | 467 | // Conventions: 468 | // 469 | // origin = [0,0,0] = bottom, left, front corner of Inky Impression 470 | // with the screen facing towards you 471 | // _w = width = x-axis 472 | // _d = depth = y-axis 473 | // _h = height = z-axis 474 | // _offset = distance from origin 475 | 476 | // Fudge factors to extend cutouts slightly beyond surfaces 477 | a_bit = 0.01; 478 | a_bit_more = a_bit * 2; 479 | 480 | // Make round things nicely rounded 481 | $fn=50; 482 | 483 | // Inky Impression dimensions 484 | inky_board_w = 125; 485 | inky_board_h = 100; 486 | inky_board_d = 2.75; 487 | inky_screen_w = 115; 488 | inky_screen_h = 86; 489 | inky_screen_offset_w = 5; 490 | inky_screen_offset_h = 9; 491 | inky_screen_cable_w = 23; 492 | inky_screen_cable_h = 1; 493 | inky_btn_a_offset_h = 81; 494 | inky_btn_b_offset_h = 59.5; 495 | inky_btn_c_offset_h = 38; 496 | inky_btn_d_offset_h = 16.5; 497 | inky_btn_offset_w = 0.5; 498 | inky_btn_h = 7; 499 | inky_btn_w = 3.5; 500 | inky_btn_d = 3; 501 | inky_btn_striker_w = 1; 502 | inky_btn_striker_d = 1.5; 503 | inky_btn_striker_h = 3; 504 | inky_hdr_w = 52; 505 | inky_hdr_h = 5; 506 | inky_hdr_d = 5; 507 | inky_hdr_offset_w = 43.5; 508 | inky_hdr_offset_h = 76; 509 | inky_conn_w = 26; 510 | inky_conn_h = 8; 511 | inky_conn_d = 3.5; 512 | inky_conn_offset_w = 95.5; 513 | inky_conn_offset_h = 3; 514 | inky_mount_a_offset_w = 98.5; 515 | inky_mount_a_offset_h = 29.5; 516 | inky_mount_b_offset_w = 40.5; 517 | inky_mount_b_offset_h = 78.5; 518 | inky_mount_c_offset_w = 40.5; 519 | inky_mount_c_offset_h = 29.5; 520 | inky_mount_d_offset_w = 98.5; 521 | inky_mount_d_offset_h = 78.5; 522 | inky_mount_outer_r = 2.75; 523 | inky_mount_d = 2.5; 524 | 525 | // Raspberry Pi Zero dimensions 526 | rpizero_w = 66; 527 | rpizero_h = 30; 528 | rpizero_d = 3; 529 | rpizero_offset_w = 37; 530 | rpizero_offset_h = 52; 531 | rpizero_offset_d = 11.5; 532 | 533 | // Frame dimensions 534 | frame_thickness_front = 0.8; 535 | frame_thickness_sides = 1.6; 536 | frame_clearance_d = 0.5; 537 | frame_clearance_w = 1; 538 | frame_clearance_h = 0.5; 539 | frame_border = 12; 540 | frame_d = 20; 541 | frame_w = inky_screen_w + (frame_border * 2); 542 | frame_h = inky_screen_h + (frame_border * 2); 543 | frame_offset_w = inky_screen_offset_w - frame_border; 544 | frame_offset_h = inky_screen_offset_h - frame_border; 545 | frame_offset_d = 0 - frame_clearance_d - frame_thickness_front; 546 | 547 | // Backplane dimensions 548 | backplane_clearance = 0.5; // cutout clearance around obstructions 549 | backplane_mount_hole_r = 1.35; 550 | backplane_mount_riser_d = 1.5; 551 | backplane_mount_riser_r = backplane_mount_hole_r * 2; 552 | backplane_offset_w = frame_offset_w + frame_thickness_sides; 553 | backplane_offset_h = frame_offset_h + frame_thickness_sides; 554 | backplane_offset_d = inky_board_d + inky_mount_d; 555 | backplane_w = frame_w - frame_thickness_sides * 2; 556 | backplane_h = frame_h - frame_thickness_sides * 2; 557 | backplane_d = 1.6; // backplane thickness 558 | 559 | // Button dimensions 560 | button_w = inky_btn_offset_w - frame_offset_w - inky_btn_striker_w; 561 | button_h = inky_btn_h; 562 | button_d = inky_btn_d; 563 | button_clearance = 0.2; 564 | button_offset_w = inky_btn_offset_w - button_w - inky_btn_striker_w; 565 | button_lug_d = backplane_d; 566 | button_lug_h = inky_btn_striker_h; 567 | button_lug_w = button_w - frame_thickness_sides - button_clearance; 568 | button_lug_offset_w = frame_thickness_sides + button_clearance; 569 | button_lug_offset_h = button_h / 2 - button_lug_h / 2; 570 | button_lug_offset_d = button_d; 571 | 572 | // rear panel dimensions 573 | rearpanel_clearance = 0.2; 574 | rearpanel_w = frame_w - frame_thickness_sides * 2 - rearpanel_clearance * 2; 575 | rearpanel_h = frame_h - frame_thickness_sides * 2 - rearpanel_clearance * 2; 576 | rearpanel_d = 1.6; 577 | rearpanel_offset_w = frame_offset_w + frame_thickness_sides + rearpanel_clearance; 578 | rearpanel_offset_h = frame_offset_h + frame_thickness_sides + rearpanel_clearance; 579 | rearpanel_offset_d = frame_offset_d + frame_d - rearpanel_d; 580 | rearpanel_mount_w = -frame_offset_w - frame_thickness_sides; 581 | rearpanel_mount_d = rearpanel_offset_d - backplane_offset_d - backplane_d; 582 | rearpanel_mount_h = 8; 583 | rearpanel_mount_r = 5; 584 | rearpanel_mount_insert_r = INSERT_DIAMETER / 2; 585 | rearpanel_mount_bolt_r = BOLT_DIAMETER / 2; 586 | rearpanel_mount_bolt_length = 6; 587 | rearpanel_mount_bolt_clearance = 0.1; 588 | rearpanel_key_slot_r = 2.5; 589 | rearpanel_key_hole_r = 4.5; 590 | rearpanel_key_slot_h = 7; 591 | rearpanel_key_spacing_w = 100; 592 | 593 | // stand dimensions 594 | stand_angle = 20; 595 | stand_offset_d = rearpanel_offset_d + rearpanel_d; 596 | stand_offset_h = frame_offset_h; 597 | stand_leg_w = 8; 598 | stand_leg_h = inky_board_h * 2/3; 599 | stand_leg_d = 40; 600 | stand_leg_r = stand_leg_w / 2; 601 | stand_peg_offset_h = inky_board_h / 2; 602 | stand_peg_clearance = 0.1; 603 | stand_peg_stem_r = rearpanel_key_slot_r - stand_peg_clearance; 604 | stand_peg_stem_d = rearpanel_d + (stand_peg_clearance * 2); 605 | stand_peg_flange_r = 4; 606 | stand_peg_flange_d = rearpanel_d; 607 | 608 | stand_leg1_offset_w = (inky_board_w / 2) - rearpanel_key_spacing_w / 2; 609 | stand_leg2_offset_w = (inky_board_w / 2) + rearpanel_key_spacing_w / 2; 610 | stand_crossbar_w = rearpanel_key_spacing_w + stand_leg_w; 611 | stand_crossbar_d = stand_leg_w; 612 | stand_crossbar_r = stand_leg_r; 613 | stand_crossbar_offset_w = stand_leg1_offset_w - (stand_leg_w / 2) ; 614 | stand_crossbar_offset_d = stand_offset_d + (stand_leg_d / 2) - stand_crossbar_r; 615 | --------------------------------------------------------------------------------