/*Here is a sketch of the display. Holes C are the board mounting holes, about 3.1mm diameter. A is the viewable area, and B is a non-viewable area. Both A and B are 4.2mm above the top of the display PCB. G is the back connector, which protrudes up to 1.3mm above the PCB. The centres of the left hand holes C line up with the edge of the viewable area A. The dashed area is the outline of the board I am making. D is the hole for the rotary encoder bush and shaft. E is where there needs to be a small hole in the enclosure to allow the reset button to be pushed. F is the 4-pin connector for the Duet. It may be better to put it on the bottom of the enclosure instead of the side, depending on how the enclosure will be mounted. The micro USB connector (used only for programming) will be at the bottom right as shown. The exact positions of D, E, F and the USB connector are yet to be finalised. To secure my board, I was going to use the right hand holes C. But on reflection, I think it would be better if I add a couple of 3mm holes on either side of D, then use self-tapping screws inserted into the back of my board and screwed into bushes set into the front of the enclosure. At this stage the mechanical design is provisional. I am still considering whether to put the rotary encoder in the position shown, or to put it to the right of the display instead. I think that would be less satisfactory for left-handed users, but on the other hand it would allow larger displays to be used, such as the Itead 4.3 inch one (and for that display, the rotary encoder would then be below the display). What I would prefer is a parameterised design in OpenScad, so that I or anyone else can modify it easily. As for mounting, I think the only place that is accessible from the front and sides of the machine and where the print never gets in the way is on top of the Z axis. The mounting would ideally allow it to be swivelled round and then locked into place, so that it can be made to face in whatever is the most convenient direction. Looking at the display more closely, I see that what I said was the visible area actually includes a 1.5mm frame around the actual display matrix. So you could indeed have a recessed non-visible part all the way round. The real visible area is 44mm x 72mm. I have decided to put the rotary encoder to the right of the connector, and to put mounting holes for the board above and below the rotary encoder. So you will need to add 2 mounting bushes for the board. They need to be about 13mm deeper than the mounting bushes for the display, because of the depth of the connector that connects the two boards together. I'll provide the positions when the board layout is nearing completion. */ wall=3; LCDpcblength=86.9; LCDpcbwidth=50.8; LCDpcbdepth=1.6; LCDmountingholeDia=3.1; LCDmountingholeOffset=3.0; boardmountholeDia=3.0; boardmountholeVertseperation=64; boardmountholeHorseperation=80; backconnectorsdepth=1.3; standoffheight=4.2; standoffcube=6; screenlength=72; screenwidth=44; screenOffset=LCDmountingholeOffset; rotaryencoderDia=6; rotaryencodervertoffset=20; rotaryencoderhoroffset=15; resetholeDia=2; resetholevertoffset=8; resetholehoroffser=16; Duetconnectorlength=10; Duetconnectorwidth=6; USBconnectorlength=12; USBconnectorwidth=4; dc42boardextrawidth=24; dc42boardmountheight=13; dc42boardmountvertoffset=12; dc42boardmounthoroffset=15; dc42boardmountseperation=30; extraspace=5; tolerence=0.1; boxlength=LCDpcblength+dc42boardextrawidth+wall*2+extraspace; boxwidth=LCDpcbwidth+wall*2+extraspace*2; boxdepth=standoffheight+backconnectorsdepth+dc42boardmountheight+LCDpcbdepth+wall*2+extraspace; $fn=100; include ; include ; //%translate([0,0,-0.5])cube([200,200,1],center=true); //build platform module Box() { difference() { //solid round box translate([boxlength/2,boxwidth/2,boxdepth/2]) roundedBox([boxlength,boxwidth,boxdepth], 2, false); translate([boxlength/2,boxwidth/2,boxdepth/2+wall])roundedBox([boxlength-wall*2,boxwidth-wall*2,boxdepth-wall], 1, false); //screen cutout translate([boxlength/2+wall+extraspace+LCDmountingholeOffset,boxwidth/2,boxdepth/2+wall-tolerence-boxdepth/2]) roundedBox([screenlength,screenwidth,wall*2],1,false); //mounting holes /*translate([(boxlength-wall)/2-LCDmountingholeOffset,(boxwidth-wall)/2-LCDmountingholeOffset,-boxdepth/2]) cylinder(h=wall*2,r=LCDmountingholeDia/2); translate([(boxlength-wall)/2-boardmountholeHorseperation,(boxwidth-wall)/2-LCDmountingholeOffset,-boxdepth/2]) cylinder(h=wall*2,r=LCDmountingholeDia/2); translate([(boxlength-wall)/2-LCDmountingholeOffset,(boxwidth-wall)/2-LCDmountingholeOffset-boardmountholeVertseperation,-boxdepth/2]) cylinder(h=wall*2,r=LCDmountingholeDia/2); translate([(boxlength-wall)/2-boardmountholeHorseperation,(boxwidth-wall)/2-LCDmountingholeOffset-boardmountholeVertseperation,-boxdepth/2]) cylinder(h=wall*2,r=LCDmountingholeDia/2);*/ //rotary shaft hole translate([rotaryencoderhoroffset,boxwidth/2,0-tolerence]) cylinder(h=wall*2,r=rotaryencoderDia/2); //reset hole translate([wall+extraspace+rotaryencoderhoroffset,boxwidth-extraspace-resetholevertoffset-wall,0]) cylinder(h=wall*2,r=resetholeDia/2); }} module dc42boardstand(){ difference(){ cube([standoffcube,standoffcube,standoffheight+dc42boardmountheight],center=true); cylinder(h=wall+dc42boardmountheight,r=LCDmountingholeDia/2); }} module mountingstand(){ difference(){ cube([standoffcube,standoffcube,standoffheight],center=true); cylinder(h=wall*2,r=LCDmountingholeDia/2); }} module rearcoverstand(){ difference(){ cube([standoffcube,standoffcube,boxdepth],center=true); cylinder(h=wall+boxdepth,r=LCDmountingholeDia/2); }} Box(); //screen mounts translate([boxlength-wall-extraspace-standoffcube,boxwidth-wall-LCDmountingholeOffset,wall*2])mountingstand(); translate([boxlength-wall*2-extraspace-boardmountholeHorseperation,boxwidth-wall-LCDmountingholeOffset,wall*2]) mountingstand(); translate([boxlength-wall-extraspace-standoffcube,boxwidth+LCDmountingholeOffset-boardmountholeVertseperation,wall*2]) mountingstand(); translate([boxlength-wall*2-extraspace-boardmountholeHorseperation,boxwidth+LCDmountingholeOffset-boardmountholeVertseperation,wall*2]) mountingstand(); //dc42 board mount translate([dc42boardmounthoroffset,wall+extraspace+dc42boardmountvertoffset,boxdepth/2]) dc42boardstand(); translate([dc42boardmounthoroffset,extraspace+dc42boardmountvertoffset+dc42boardmountseperation,boxdepth/2]) dc42boardstand(); //rear cover stands translate([wall*2,boxwidth-wall*2,boxdepth/2]) rearcoverstand(); translate([boxlength-wall*2,boxwidth-wall*2,boxdepth/2]) rearcoverstand(); translate([wall*2,wall*2,boxdepth/2]) rearcoverstand(); translate([boxlength-wall*2,wall*2,boxdepth/2]) rearcoverstand();