{"id":6695,"date":"2022-01-02T14:02:03","date_gmt":"2022-01-02T13:02:03","guid":{"rendered":"https:\/\/willem.aandewiel.nl\/?p=6695"},"modified":"2023-12-04T10:38:43","modified_gmt":"2023-12-04T09:38:43","slug":"yet-another-parametric-projectbox-generator","status":"publish","type":"post","link":"https:\/\/willem.aandewiel.nl\/index.php\/2022\/01\/02\/yet-another-parametric-projectbox-generator\/","title":{"rendered":"Yet Another Parametric Projectbox generator"},"content":{"rendered":"\n<p>[ 59,961 keer bekeken \/ views ]<\/p>\n\n\n\n<p>Een Nederlandse vertaling van deze post kun je <a href=\"https:\/\/willem.aandewiel.nl\/index.php\/2022\/01\/01\/nog-een-geparameteriseerde-projectbox-generator\/\">hier<\/a> vinden.<\/p>\n\n\n\n<p id=\"tw-target-text\">With every electronic circuit I make, there comes a moment when the project is \u201cfinished\u201d\u2026. almost! <\/p>\n\n\n\n<p id=\"tw-target-text\">The last step is always to find a suitable projectbox and even then it is difficult to provide a (often plastic) projectbox with cutouts of the right size and in the right place. <\/p>\n\n\n\n<p id=\"tw-target-text\">Fortunately I have a 3D printer and in theory I can make a projectbox myself, but it always takes a lot of time. For standard processor boards you can find 3D STL files on the internet, but if you have &#8220;designed&#8221; a printed circuit board yourself, the only way is a &#8220;parameter controlled&#8221; solution that you can read in Fusion 360 or in openSCAD. Then you can specify the size of the box via parameters and sometimes a little more, but it never really \u201cfits\u201d well or it is so complex that you have to graduate before you can make something useful with it. <\/p>\n\n\n\n<p id=\"tw-target-text\">I think I&#8217;ve found a solution that can provide almost any printed circuit board with a nice projectbox: <em>the YAPP generator<\/em>! <\/p>\n\n\n\n<p id=\"tw-target-text\">In this post I explain what the principles of this YAPP generator are and how you can use it to 3D print beautiful projectboxes!<\/p>\n\n\n\n<p class=\"has-text-color has-background has-medium-font-size\" style=\"color:#f50c14;background-color:#aeabab\">Dec. 4, 2023: Rev 3.0 released<br><br>This release breaks with almost all API&#8217;s!<br><br><a rel=\"noreferrer noopener\" href=\"https:\/\/mrwheel-docs.gitbook.io\/yappgenerator_en\/\" target=\"_blank\">Here<\/a> you can find the official documentation.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What you need<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>openSCAD<br> A recent version of \u201copenSCAD\u201d can be <a href=\"https:\/\/openscad.org\/downloads.html\" target=\"_blank\" rel=\"noreferrer noopener\">downloaded here<\/a>. <\/li>\n\n\n\n<li>the YAPP generator <br>You can download this as a \u201c.zip\u201d file from <a href=\"https:\/\/github.com\/mrWheel\/YAPP_Box\" target=\"_blank\" rel=\"noreferrer noopener\">github<\/a>. Extract the \u201cYAPP_Box-main.zip\u201d file into your openSCAD projects folder. You now have a new folder \u201cYAPP_Box-main\u201d containing several sample files. In \u201cYAPP_Box-main\u201d there is also a folder \u201clibrary\u201d that contains the YAPP generator (so don&#8217;t throw it away!). It is wise to leave the folder structure as it is and save new box designs in this \u201cYAPP_Box-main\u201d folder.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_map.png\"><img loading=\"lazy\" decoding=\"async\" width=\"250\" height=\"188\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_map.png\" alt=\"\" class=\"wp-image-6662\"\/><\/a><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Design philosophy <\/h2>\n\n\n\n<p id=\"tw-target-text\">Most box generators that you can find on the internet allow you to specify the size of the box. Sometimes you have to give inside measurements and sometimes outside measurements. <\/p>\n\n\n\n<p id=\"tw-target-text\">YAPP does this differently and starts from the printed circuit board for which you need a projectbox. The most important measurements are therefore the length, width and thickness of the printed circuit board. Then you specify where the holes are with which the printed circuit board should be secured. The holes can be used to secure the PCB with screws or you can clamp the PCB between the standoffs in the bottom and top of the projectbox. Then you can specify for all surfaces (lid, base, front, back, left and right) of the projectbox where rectangular and\/or round cutouts should be placed. <\/p>\n\n\n\n<p id=\"tw-target-text\">Finally, texts can be entered that will be printed at the lid of the projectbox. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/08\/ESPotifyEcho_Design-1.gif\" alt=\"\" class=\"wp-image-6965\" width=\"450\" height=\"254\"\/><figcaption class=\"wp-element-caption\">With the YAPPgenerator as a <br>basis you can make complex project boxes<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Co\u00f6rdination System <\/h2>\n\n\n\n<p id=\"tw-target-text\">Before going further it is necessary to understand what the orientation of the projectbox is. It should be clear that the projectbox has six \u201cplanes\u201d. <\/p>\n\n\n\n<p id=\"tw-target-text\">The top is called &#8220;lid&#8221; the bottom is called &#8220;base&#8221;. The plane closest to the Y-axis is the \u201cback\u201d. \u201cleft\u201d is closest to the X-axis. The plane opposite \u201cback\u201d (which is furthest from the Y-axis) is called \u201cfront\u201d and the plane opposite \u201cleft\u201d is called \u201cright\u201d <\/p>\n\n\n\n<p id=\"tw-target-text\">The \u201czero point\u201d ([x=0, y=0, z=0]) is always left-back at the top of the PCB.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_0-0-0.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_0-0-0.png\" alt=\"\" class=\"wp-image-6576\" width=\"496\" height=\"318\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_0-0-0.png 991w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_0-0-0-300x193.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_0-0-0-768x493.png 768w\" sizes=\"auto, (max-width: 496px) 100vw, 496px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p id=\"tw-target-text\">For each plane there is an array in which you can specify where the cutouts should be in that plane. These cutouts all have (pcb)[0,0,0] as their starting point. So if at any time it is decided to enlarge the edges around the PCB (padding) or to make the \u201cpcbStandoffs\u201d higher, the cutouts will move neatly with the position of the PCB.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_padding.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_padding.png\" alt=\"\" class=\"wp-image-6577\" width=\"308\" height=\"384\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_padding.png 615w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_padding-241x300.png 241w\" sizes=\"auto, (max-width: 308px) 100vw, 308px\" \/><\/a><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Cutouts<\/h2>\n\n\n\n<p id=\"tw-target-text\">There are two types of cutouts: \u201crectangles\u201d and \u201ccircles\u201d. Rectangles can be created in two ways, either with the corners at coordinates or with coordinates in the center of the rectangle. For \u201ccircles\u201d the coordinates are always the center point.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_holes.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_holes.png\" alt=\"\" class=\"wp-image-6578\" width=\"374\" height=\"378\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_holes.png 748w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_holes-297x300.png 297w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_holes-50x50.png 50w\" sizes=\"auto, (max-width: 374px) 100vw, 374px\" \/><\/a><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Standoffs<\/h2>\n\n\n\n<p id=\"tw-target-text\">The \u201cpcbStandoffs\u201d defines the distance between the top of the \u201cbase plane\u201d and the bottom of the printed circuit board. Opposite the \u201cstandoffs\u201d are automatically made \u201cpushdowns\u201d on the \u201clid\u201d that are exactly so long that the circuit board is neatly clamped between them.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_stands.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_stands-1024x646.png\" alt=\"\" class=\"wp-image-6579\" width=\"512\" height=\"323\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_stands-1024x646.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_stands-300x189.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_stands-768x484.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/YAPP_stands.png 1086w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p id=\"tw-target-text\">The standoffs can be fitted with \u201cpins\u201d so that the printed circuit board is also fixed on the X and Y axes. How many \u201cpcb standoffs\u201d should come and where they should be is specified in the array \u201cpcbStands\u201d. Each pcbStand is specified in one line and the properties of a pcbStand are defined per line. <br>This is how you use the pcbStands arrayt: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_pcbStands.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_pcbStands-1024x501.png\" alt=\"\" class=\"wp-image-6786\" width=\"512\" height=\"251\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_pcbStands-1024x501.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_pcbStands-300x147.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_pcbStands-768x376.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_pcbStands.png 1200w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n\n\n\n<p id=\"tw-target-text\">Each line in the array provides one standoff. <\/p>\n\n\n\n<p id=\"tw-target-text\">The third (2) element has the following meaning:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"> yappBoth:       place both below a pcbStand and above a pcbStand.\n yappLidOnly:    the pcbStand is only printed above (lidHalf)\n yappBaseOnly:   the pcbStand will only be printed at the base (baseHalf). <\/pre>\n\n\n\n<p id=\"tw-target-text\">The meaning of the fourth (3) element is: <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"> yappHole:    the pcbStand is provided with a \u201chole\u201d (hole)\n yappPin:     the pcbStand is provided with a \u201cpin\u201d <\/pre>\n\n\n\n<p id=\"tw-target-text\">If the third (2) element is \u201cyappBoth\u201d and the fourth (3) element is specified as \u201cyappPin\u201d then the pin will be printed on the baseHalf and a hole on the lidHalf. <\/p>\n\n\n\n<p id=\"tw-target-text\">It is possible to print both below and above a hole by specifying \u201cyappHole\u201d as the fourth (3) element:   <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"> [3, 12, yappBoth, yappHole]<\/pre>\n\n\n\n<p class=\"has-background has-medium-font-size\" style=\"background-color:#f4dc58\">If you like this post please consider a small donation <br><!-- Begin PayPal Donations by https:\/\/www.tipsandtricks-hq.com\/paypal-donations-widgets-plugin -->\n\n<form action=\"https:\/\/www.paypal.com\/cgi-bin\/webscr\" method=\"post\" target=\"_blank\">\n    <div class=\"paypal-donations\">\n        <input type=\"hidden\" name=\"cmd\" value=\"_donations\" \/>\n        <input type=\"hidden\" name=\"bn\" value=\"TipsandTricks_SP\" \/>\n        <input type=\"hidden\" name=\"business\" value=\"Willem@Aandewiel.nl\" \/>\n        <input type=\"hidden\" name=\"return\" value=\"https:\/\/willem.aandewiel.nl\/index.php\/thank-you-for-your-donation\/\" \/>\n        <input type=\"hidden\" name=\"item_number\" value=\"YAPPgenerator\" \/>\n        <input type=\"hidden\" name=\"rm\" value=\"0\" \/>\n        <input type=\"hidden\" name=\"currency_code\" value=\"EUR\" \/>\n        <input type=\"image\" style=\"cursor: pointer;\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/09\/bmc-button-75.png\" name=\"submit\" alt=\"PayPal - The safer, easier way to pay online.\" \/>\n        <img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"https:\/\/www.paypalobjects.com\/en_US\/i\/scr\/pixel.gif\" width=\"1\" height=\"1\" \/>\n    <\/div>\n<\/form>\n<!-- End PayPal Donations -->\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Cutouts in the six faces <\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Pay attention!<\/p>\n<cite>All examples are made with version 1.3 of the YAPPgenerator. From version 1.4 on the rows in the cutouts arrays have an extra parameter &#8220;angle&#8221;. For existing designs it suffices to add them with the value \u201c0\u201d (zero) directly before yappRectangle or yappCircle.<\/cite><\/blockquote>\n\n\n\n<p id=\"tw-target-text\">For each face there is an array in which you can specify per line where cutouts should come, what the origin of such a recess is (for rectangles) and what shape the recess should have (rectangle or circle). Depending on the \u201cplane\u201d, the first element is the position on the X-axis (lid-, base-, left- or rightPlane) or the Y-axis (front- or backPlane) and the second element is the position on the Y-axis (lid-, base-, left- or rightPlane) and the Z-axis (front-, back-, left- or rightPlane). The third element always indicates the width of the rectangle or the diameter of the circle. The fourth element is, again depending on the plane, the width (lid- or basePlane) or the height (front-, back-, left- or rightPlane) of the rectangle. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Cutouts in the Front Plane<\/h2>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsFront.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsFront.png\" alt=\"\" class=\"wp-image-6783\" width=\"488\" height=\"211\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsFront.png 976w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsFront-300x129.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsFront-768x331.png 768w\" sizes=\"auto, (max-width: 488px) 100vw, 488px\" \/><\/a><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Cutouts in the Back Plane<\/h2>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBack.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBack-1024x341.png\" alt=\"\" class=\"wp-image-6782\" width=\"512\" height=\"171\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBack-1024x341.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBack-300x100.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBack-768x256.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBack.png 1080w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Cutouts in the Lid Plane<\/h2>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLid.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLid-1024x508.png\" alt=\"\" class=\"wp-image-6785\" width=\"512\" height=\"254\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLid-1024x508.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLid-300x149.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLid-768x381.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLid.png 1108w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Cutouts in the Base Plane<\/h2>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBase.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBase-1024x526.png\" alt=\"\" class=\"wp-image-6784\" width=\"512\" height=\"263\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBase-1024x526.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBase-300x154.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBase-768x395.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsBase.png 1136w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Cutouts in the Left Plane<\/h2>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLeft.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLeft-1024x497.png\" alt=\"\" class=\"wp-image-6781\" width=\"512\" height=\"249\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLeft-1024x497.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLeft-300x146.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLeft-768x373.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsLeft.png 1085w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Cutouts in the Right Plane<\/h2>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsRight.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsRight-1024x362.png\" alt=\"\" class=\"wp-image-6780\" width=\"512\" height=\"181\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsRight-1024x362.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsRight-300x106.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsRight-768x271.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_cutoutsRight.png 1200w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">Rectangular cutout at an angle<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangle40dgrs.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangle40dgrs-1024x513.png\" alt=\"\" class=\"wp-image-6890\" width=\"512\" height=\"257\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangle40dgrs-1024x513.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangle40dgrs-300x150.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangle40dgrs-768x385.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangle40dgrs.png 1200w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><figcaption class=\"wp-element-caption\">Rectangle rotated around the corner x\/y<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangleCenter20dgrs-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangleCenter20dgrs-1-1024x532.png\" alt=\"\" class=\"wp-image-6892\" width=\"512\" height=\"266\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangleCenter20dgrs-1-1024x532.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangleCenter20dgrs-1-300x156.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangleCenter20dgrs-1-768x399.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/03\/yappRectangleCenter20dgrs-1.png 1200w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><figcaption class=\"wp-element-caption\">Rectangle rotated around the center (x\/y) [yappCenter]<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Base Mounts<\/h2>\n\n\n\n<p>To be able to mount the project box you can define so called &#8220;Base Mounts&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/yappBaseStand.png\"><img loading=\"lazy\" decoding=\"async\" width=\"532\" height=\"212\" data-id=\"6827\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/yappBaseStand.png\" alt=\"\" class=\"wp-image-6827\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/yappBaseStand.png 532w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/yappBaseStand-300x120.png 300w\" sizes=\"auto, (max-width: 532px) 100vw, 532px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/yappBaseStand3D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"230\" data-id=\"6828\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/yappBaseStand3D.png\" alt=\"\" class=\"wp-image-6828\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/yappBaseStand3D.png 638w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/yappBaseStand3D-300x108.png 300w\" sizes=\"auto, (max-width: 638px) 100vw, 638px\" \/><\/a><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><br><br>Connectors to connect Base and Lid together<\/h2>\n\n\n\n<figure class=\"wp-block-gallery aligncenter has-nested-images columns-2 wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_connectors.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"267\" data-id=\"6779\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_connectors-1024x267.png\" alt=\"\" class=\"wp-image-6779\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_connectors-1024x267.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_connectors-300x78.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_connectors-768x200.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_connectors.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_connector_D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"535\" height=\"770\" data-id=\"6778\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_connector_D.png\" alt=\"\" class=\"wp-image-6778\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_connector_D.png 535w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_connector_D-208x300.png 208w\" sizes=\"auto, (max-width: 535px) 100vw, 535px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/Ruthex-insert-a.png\"><img loading=\"lazy\" decoding=\"async\" width=\"696\" height=\"368\" data-id=\"6791\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/Ruthex-insert-a.png\" alt=\"\" class=\"wp-image-6791\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/Ruthex-insert-a.png 696w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/Ruthex-insert-a-300x159.png 300w\" sizes=\"auto, (max-width: 696px) 100vw, 696px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/Ruthex-insert-b.png\"><img loading=\"lazy\" decoding=\"async\" width=\"360\" height=\"325\" data-id=\"6792\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/Ruthex-insert-b.png\" alt=\"\" class=\"wp-image-6792\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/Ruthex-insert-b.png 360w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/Ruthex-insert-b-300x271.png 300w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/a><\/figure>\n<\/figure>\n\n\n\n<p>The connectors are ideal for connecting the two halves with so-called &#8220;inserts&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><br>Snap Joins<\/h2>\n\n\n\n<p>With snapJoins the Base and Lid &#8220;click&#8221; together without the need for screws or other aids.<\/p>\n\n\n\n<figure class=\"wp-block-gallery aligncenter has-nested-images columns-1 wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSBS.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"370\" data-id=\"6871\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSBS-1024x370.png\" alt=\"\" class=\"wp-image-6871\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSBS-1024x370.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSBS-300x109.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSBS-768x278.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSBS.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJounsOnTOP.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"357\" data-id=\"6872\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJounsOnTOP-1024x357.png\" alt=\"\" class=\"wp-image-6872\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJounsOnTOP-1024x357.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJounsOnTOP-300x105.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJounsOnTOP-768x268.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJounsOnTOP.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/figure>\n\n\n\n<p class=\"has-background has-medium-font-size\" style=\"background-color:#f4dc58\">If you like this post please consider a small donation <br><!-- Begin PayPal Donations by https:\/\/www.tipsandtricks-hq.com\/paypal-donations-widgets-plugin -->\n\n<form action=\"https:\/\/www.paypal.com\/cgi-bin\/webscr\" method=\"post\" target=\"_blank\">\n    <div class=\"paypal-donations\">\n        <input type=\"hidden\" name=\"cmd\" value=\"_donations\" \/>\n        <input type=\"hidden\" name=\"bn\" value=\"TipsandTricks_SP\" \/>\n        <input type=\"hidden\" name=\"business\" value=\"Willem@Aandewiel.nl\" \/>\n        <input type=\"hidden\" name=\"return\" value=\"https:\/\/willem.aandewiel.nl\/index.php\/thank-you-for-your-donation\/\" \/>\n        <input type=\"hidden\" name=\"item_number\" value=\"YAPPgenerator\" \/>\n        <input type=\"hidden\" name=\"rm\" value=\"0\" \/>\n        <input type=\"hidden\" name=\"currency_code\" value=\"EUR\" \/>\n        <input type=\"image\" style=\"cursor: pointer;\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/09\/bmc-button-75.png\" name=\"submit\" alt=\"PayPal - The safer, easier way to pay online.\" \/>\n        <img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"https:\/\/www.paypalobjects.com\/en_US\/i\/scr\/pixel.gif\" width=\"1\" height=\"1\" \/>\n    <\/div>\n<\/form>\n<!-- End PayPal Donations -->\n<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"tw-target-text\">A life real example <\/h1>\n\n\n\n<p id=\"tw-target-text\">In this example we are going to create a projectbox for an Arduino UNO. <\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/ArduinoUno.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/ArduinoUno.jpg\" alt=\"\" class=\"wp-image-6569\" width=\"320\" height=\"240\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/ArduinoUno.jpg 640w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2021\/12\/ArduinoUno-300x225.jpg 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p id=\"tw-target-text\">We start in openSCAD by opening the file \u201cYACC_template.scad\u201d and immediately save it again (\u201c[Save as]) with the name \u201cArduinoUNO\u201d. <br>Make sure that the new file is saved in the folder \u201cYAPP_Box-main\u201d. <\/p>\n\n\n\n<p id=\"tw-target-text\">Now edit the comment lines at the top of the file so that it is clear that a projectbox for an Arduino UNO can be generated with this file. The first real line of code inserts the YACC generator after which the YAPPgenerate() module from this library can be used. <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">     include &lt;.\/library\/YAPPgenerator_v13.scad> <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Outer dimensions and stand-offs <\/h2>\n\n\n\n<p id=\"tw-target-text\">Now all variables that determine the final projectbox must be measured one by one and entered into the \u201cArduinoUNO.scad\u201d file. <\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_holes.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_holes-1024x721.png\" alt=\"\" class=\"wp-image-6607\" width=\"512\" height=\"361\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_holes-1024x721.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_holes-300x211.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_holes-768x541.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_holes.png 1200w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pcbLength    = 68.5; \npcbWidth     = 53.3; \npcbThickness = 1.5;                              \n\npcbStands = [\n                 [14.0, 2.5,  yappBoth,     yappPin]  \/\/ back-left \n               , [15.3, 50.7, yappBaseOnly, yappPin]  \/\/ back-right \n               , [66.1, 7.6,  yappBoth,     yappPin]  \/\/ front-left  \n               , [66.1, 35.5, yappBoth,     yappPin]  \/\/ front-right \n            ];<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Connectors <\/h2>\n\n\n\n<p id=\"tw-target-text\">The height of both the USB plug and the powerJack is 11mm. <\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_connectors.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_connectors-730x1024.png\" alt=\"\" class=\"wp-image-6608\" width=\"365\" height=\"512\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_connectors-730x1024.png 730w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_connectors-214x300.png 214w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_connectors-768x1077.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_connectors.png 856w\" sizes=\"auto, (max-width: 365px) 100vw, 365px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p id=\"tw-target-text\"><br>To add some slack, let&#8217;s start the USB plug and the powerJack 1mm closer to the X-axis and increase the width of the cutout for the USB plug by 2mm and the cutout for the powerJack by 3mm. We will also increase the length of both cutouts slightly. <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cutoutsLid = [ \n                 [0, 31.5-1, 12.2+2, 11.0, yappRectOrg] \/\/ USB \n               , [0, 3.5-1,  12.0,   13.5, yappRectOrg] \/\/ Power Jack  \n             ]; \n\ncutoutsBack = [ \n                 [31.5-1, -1, 12.2+2, 12, yappRectOrg] \/\/ USB  \n               , [ 3.5-1,  0, 12.0,   11, yappRectOrg] \/\/ Power Jack  \n             ]; <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Headers and ATmega <\/h2>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_headers.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_headers-1024x800.png\" alt=\"\" class=\"wp-image-6612\" width=\"512\" height=\"400\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_headers-1024x800.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_headers-300x234.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_headers-768x600.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_ArduinoUNO_headers.png 1200w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cutoutsLid = [\n                [0, 31.5-1, 12.2+2, 11.0,           yappRectOrg] \/\/ USB\n              , [0, 3.5-1,  12.0,   13.5,           yappRectOrg] \/\/ Power Jack\n              , [29-1,      12.5-1,  8.5+2, 35.0+2, yappRectOrg] \/\/ ATmega328\n              , [17.2-1,    49.5-1,  5.0, 47.4+2,   yappRectOrg] \/\/ right headers\n              , [26.5-1,     1.0-1,  5.0, 38.0+2,   yappRectOrg] \/\/ left headers\n             ];<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">Other cutouts <\/h2>\n\n\n\n<p id=\"tw-target-text\">Finally, the positions and size of the ICSP connectors, reset button and LEDs must be measured. <\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPPdesign_big.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPPdesign_big.gif\" alt=\"\" class=\"wp-image-6635\" width=\"360\" height=\"203\"\/><\/a><\/figure>\n<\/div>\n\n\n<p id=\"tw-target-text\">The total definition of the cutoutsLid array then looks like this:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cutoutsLid =  [\n                 [0,      31.5-1, 12.2+2, 11.0,   yappRectOrg]    \/\/ USB\n               , [0,       3.5-1, 12.0,   13.5,   yappRectOrg]    \/\/ Power Jack\n               , [29.0-1, 12.5-1, 8.5+2,  35+2,   yappRectOrg]    \/\/ ATmega328\n               , [17.2-1, 49.5-1, 5.0,    47.4+2, yappRectOrg]    \/\/ right headers\n               , [26.5-1,  1.0-1, 5.0,    38.0+2, yappRectOrg]    \/\/ left headers\n               , [65.5,   28.5,   8.0,     5.5,   yappRectCenter] \/\/ ICSP1\n               , [18.0,   45.5,   6.5,     8.0,   yappRectCenter] \/\/ ICSP2\n               , [6.0,    49.0,   8.0,     0.0,   yappCircle]     \/\/ reset button\n\/\/-- if space between pcb and lidPlane > 5.5 we don't need holes for the elco's --\n\/\/             , [18.0,    8.6,   7.2,     0.0,   yappCircle]     \/\/ elco1\n\/\/             , [26.0,    8.6,   7.2,     0.0,   yappCircle]     \/\/ elco2\n\/\/             , [21.5,    8.6,   7.2,     7.0,   yappRectCenter] \/\/ connect elco's\n               , [28.2,   35.2,   5.0,     3.5,   yappRectCenter] \/\/ TX\/RX leds\n               , [28.2,   42.5,   3.0,     3.5,   yappRectCenter] \/\/ led13\n               , [58.5,   37.0,   3.0,     3.5,   yappRectCenter] \/\/ ON led\n              ];\n<\/pre>\n\n\n\n<p id=\"tw-target-text\">In order to actually generate the projectbox, this module call must be placed at the bottom of the program:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">     \/\/--- this is where the magic happens --- \n     YAPPgenerate(); <\/pre>\n\n\n\n<p id=\"tw-target-text\">Then click on [F5] or [F6] to see the result of your work. <\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"tw-target-text\">Second example (Wemos D1) <\/h1>\n\n\n\n<p id=\"tw-target-text\">In this example we will create a projectbox for a Wemos D1 mini (V3.0.0). The starting point is again the YAPP_template.scad file which we read in and immediately write back as \u201cWemosD1Mini.scad\u201c. <\/p>\n\n\n\n<p id=\"tw-target-text\">First we have to measure all sizes again.<\/p>\n\n\n\n<figure class=\"wp-block-gallery aligncenter has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"6665\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_v3_top-1024x768.jpg\" alt=\"\" class=\"wp-image-6665\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_v3_top-1024x768.jpg 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_v3_top-300x225.jpg 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_v3_top-768x576.jpg 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_v3_top.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"6664\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Minit_v3_front-1024x768.jpg\" alt=\"\" class=\"wp-image-6664\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Minit_v3_front-1024x768.jpg 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Minit_v3_front-300x225.jpg 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Minit_v3_front-768x576.jpg 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Minit_v3_front.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n\n\n\n<p id=\"tw-target-text\">The \u201couter dimensions\u201d are put at the top of the script. <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"> wallThickness        = 1.5;\n basePlaneThickness   = 1.0;\n lidPlaneThickness    = 1.0;\n\n baseWallHeight       = 4;\n lidWallHeight        = 4;\n\n pcbLength            = 35.0;\n pcbWidth             = 26.0;\n pcbThickness         = 1.0; \n\n \/\/ padding between pcb and inside wall\n paddingFront         = 1;\n paddingBack          = 1;\n paddingRight         = 1.5;\n paddingLeft          = 1.5;\n\n \/\/ ridge where base and lid off box can overlap\n \/\/ Make sure this isn't less than lidWallHeight\n ridgeHeight          = 2; \n ridgeSlack           = 0.1;\n\n \/\/ How much the PCB needs to be raised from the bottom \n \/\/ to leave room for solderings and whatnot\n standoffHeight       = 2.0; \n pinDiameter          = 1.8;\n pinHoleSlack         = 0.1; \/\/ depending on nozzle diameter\n standoffDiameter     = 4;\n<\/pre>\n\n\n\n<p id=\"tw-target-text\">The positions and size of the cutouts are included in the cutoutsLid, cutoutsBase, cutoutsFront, and cutoutsRight arrays.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/-- pcb standoffs -- origin is pcb-0,0\npcbStands =    [\n                   [3.4,         3.0,        yappBoth, yappPin]  \/\/ back-left\n                 , [3.4,         pcbWidth-3, yappBoth, yappHole] \/\/ back-right\n                 , [pcbLength-3, 7.5,        yappBoth, yappHole] \/\/ front-left\n                 , [pcbLength-3, pcbWidth-3, yappBoth, yappPin]  \/\/ front-right\n               ];\n\n\/\/-- front plane -- origin is pcb-0,0 (red)\ncutoutsFront = [\n                    [14.0, 1.0, 12.0, 10.0, yappRectCenter] \/\/ microUSB\n               ];\n\n\/\/-- top plane -- origin is pcb-0,0\ncutoutsLid =   [\n                    [6.0, -1.0,       6.0, pcbLength-12, yappRectOrg] \/\/ left-header\n                  , [6.0, pcbWidth-4, 6.0, pcbLength-12, yappRectOrg] \/\/ right-header\n                  , [18.7, 8.8,       2.0, 0.0,          yappCircle]  \/\/ blue led\n               ];\n\n\/\/-- bottom plane -- origin is pcb-0,0\ncutoutsBase =  [ \n                    [6.0, -1.0,       6.0, pcbLength-12, yappRectOrg] \/\/ left-header\n                  , [6.0, pcbWidth-4, 6.0, pcbLength-12, yappRectOrg] \/\/ right-header\n               ];\n\n\/\/-- left plane -- origin is pcb-0,0\ncutoutsLeft =  [\n                    [31.0, 0.5, 4.5, 3, yappRectCenter] \/\/ reset button\n               ];<\/pre>\n\n\n\n<p id=\"tw-target-text\">Note that there are only two holes in the circuit board. To keep the printed circuit board in place, four pcbStand are made, but two of them have no pins. Because there is a reset switch in the left front corner, the pcbStand must also be placed in a slightly shifted place in this corner.<\/p>\n\n\n\n<p>Last step is to make some &#8220;snapJoins&#8221; in the left, right and front panes:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/-- snap Joins -- origen = box[x0,y0]\n\/\/ (0) = posx | posy\n\/\/ (1) = width\n\/\/ (2..5) = yappLeft \/ yappRight \/ yappFront \/ yappBack (one or more)\n\/\/ (n) = { yappSymmetric }\nsnapJoins   =   [\n                    [shellLength-17, 5, yappLeft]\n                  , [shellLength-10, 5, yappRight]\n                  , [(shellWidth\/2)-2.5, 5, yappBack]\n                ];\n<\/pre>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/WemonSnapJoins.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/WemonSnapJoins.png\" alt=\"\" class=\"wp-image-6865\" width=\"395\" height=\"228\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/WemonSnapJoins.png 789w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/WemonSnapJoins-300x173.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/WemonSnapJoins-768x444.png 768w\" sizes=\"auto, (max-width: 395px) 100vw, 395px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p id=\"tw-target-text\">Finally, the YAPPgenerate() module must be called:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/--- this is where the magic happens ---\n   YAPPgenerate();<\/pre>\n\n\n\n<p id=\"tw-target-text\">Then press [F5] or [F6] to check if the project box looks as you imagined.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_box_F5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1038\" height=\"803\" data-id=\"6670\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_box_F5.png\" alt=\"\" class=\"wp-image-6670\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_box_F5.png 1038w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_box_F5-300x232.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_box_F5-1024x792.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_box_F5-768x594.png 768w\" sizes=\"auto, (max-width: 1038px) 100vw, 1038px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"725\" data-id=\"6673\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox1.png\" alt=\"\" class=\"wp-image-6673\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox1.png 1200w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox1-300x181.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox1-1024x619.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox1-768x464.png 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"834\" data-id=\"6672\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox2.png\" alt=\"\" class=\"wp-image-6672\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox2.png 1200w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox2-300x209.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox2-1024x712.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/WemosD1Mini_inBox2-768x534.png 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/WemosD1mini.png\"><img loading=\"lazy\" decoding=\"async\" width=\"986\" height=\"777\" data-id=\"6868\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/WemosD1mini.png\" alt=\"\" class=\"wp-image-6868\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/WemosD1mini.png 986w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/WemosD1mini-300x236.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/WemosD1mini-768x605.png 768w\" sizes=\"auto, (max-width: 986px) 100vw, 986px\" \/><\/a><\/figure>\n<\/figure>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"tw-target-text\">Debug options <\/h1>\n\n\n\n<p id=\"tw-target-text\">There are several options for viewing additional information about the generated projectbox so that it can be checked during the design phase whether the script does what it should do. <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  printLidShell    = true; \n  printBaseShell   = true; \n\n  \/\/-- D E B U G -------------------- default \n  showSideBySide      = true;      \/\/ true \n  hideLidShell        = false;     \/\/ false \n  colorLid            = \"yellow\";  \/\/ yellow \n  hideBaseShell       = false;     \/\/ false\n  colorBase           = \"white\";   \/\/ white \n  showPCB             = false;     \/\/ false \n  showPCBmarkers      = false;     \/\/ false \n  inspectX            = 0;         \/\/ 0=none, -pcbLength .. +pcbLength \n  inspectY            = 0;         \/\/ 0=none, -pcbWidth .. +pcbWidth \n  \/\/-- D E B U G ------------------- <\/pre>\n\n\n\n<p id=\"tw-target-text\">The first two variables (printLid and printBase) indicate whether the top half of the projectbox or the bottom half should be printed. This can be useful if your 3D printer is not large enough to print both halves side by side or if you have only made adjustments in one of the two and (so) only want to 3D print that half again.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">showSideBySide<\/h2>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped aligncenter wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"748\" height=\"465\" data-id=\"6675\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_side_by_side_false.png\" alt=\"\" class=\"wp-image-6675\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_side_by_side_false.png 748w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_side_by_side_false-300x186.png 300w\" sizes=\"auto, (max-width: 748px) 100vw, 748px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"671\" data-id=\"6674\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_side_by_side_true-1024x671.png\" alt=\"\" class=\"wp-image-6674\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_side_by_side_true-1024x671.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_side_by_side_true-300x197.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_side_by_side_true-768x504.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_side_by_side_true.png 1063w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<figcaption class=\"blocks-gallery-caption wp-element-caption\"><meta charset=\"utf-8\">showSideBySide=false | showSideBySide=true<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">hideLidShell \/ hideBaseShell <\/h2>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped aligncenter wp-block-gallery-7 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"340\" data-id=\"6676\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_show_TB_false.png\" alt=\"\" class=\"wp-image-6676\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_show_TB_false.png 720w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_show_TB_false-300x142.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"794\" height=\"425\" data-id=\"6677\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_show_T_false.png\" alt=\"\" class=\"wp-image-6677\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_show_T_false.png 794w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_show_T_false-300x161.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_show_T_false-768x411.png 768w\" sizes=\"auto, (max-width: 794px) 100vw, 794px\" \/><\/figure>\n<figcaption class=\"blocks-gallery-caption wp-element-caption\"><meta charset=\"utf-8\">hideLidShell=true, hideBaseShell=true | hideLidShell=true, hideBaseShell=false<\/figcaption><\/figure>\n\n\n\n<p id=\"tw-target-text\">This setting provides insight into the \u201cinside\u201d of the projectbox.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">showPCB <\/h2>\n\n\n\n<p id=\"tw-target-text\">This option is especially useful in side-by-side presentation or when showLid and\/or showBase are \u201cfalse\u201d. <\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped aligncenter wp-block-gallery-8 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"458\" data-id=\"6678\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showPCB_SideBySide.png\" alt=\"\" class=\"wp-image-6678\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showPCB_SideBySide.png 940w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showPCB_SideBySide-300x146.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showPCB_SideBySide-768x374.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1010\" height=\"512\" data-id=\"6679\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showPCB.png\" alt=\"\" class=\"wp-image-6679\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showPCB.png 1010w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showPCB-300x152.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showPCB-768x389.png 768w\" sizes=\"auto, (max-width: 1010px) 100vw, 1010px\" \/><\/figure>\n<figcaption class=\"blocks-gallery-caption wp-element-caption\"><meta charset=\"utf-8\">showPCB=true, showSideBySide=true | showPCB=true, showSideBySide=false<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">showPCBmarkers <\/h2>\n\n\n\n<p id=\"tw-target-text\">Markers are displayed on the four corners of the circuit board and on the rear left corner of the box. <\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped aligncenter wp-block-gallery-9 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"663\" height=\"509\" data-id=\"6680\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showMarkers.png\" alt=\"\" class=\"wp-image-6680\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showMarkers.png 663w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showMarkers-300x230.png 300w\" sizes=\"auto, (max-width: 663px) 100vw, 663px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"938\" height=\"430\" data-id=\"6681\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showMarkersSbyS.png\" alt=\"\" class=\"wp-image-6681\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showMarkersSbyS.png 938w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showMarkersSbyS-300x138.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_showMarkersSbyS-768x352.png 768w\" sizes=\"auto, (max-width: 938px) 100vw, 938px\" \/><\/figure>\n<figcaption class=\"blocks-gallery-caption wp-element-caption\"><meta charset=\"utf-8\">showMarkers=true<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tw-target-text\">inspectX \/ inspectY <\/h2>\n\n\n\n<p id=\"tw-target-text\">With a value of -pcbLength  to +pcbLength, a cross section of the projectbox is shown. <\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-10 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"855\" height=\"530\" data-id=\"6682\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_intersect-6.png\" alt=\"\" class=\"wp-image-6682\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_intersect-6.png 855w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_intersect-6-300x186.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_intersect-6-768x476.png 768w\" sizes=\"auto, (max-width: 855px) 100vw, 855px\" \/><figcaption class=\"wp-element-caption\">inspectX negative<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"978\" height=\"598\" data-id=\"6683\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_intersect_17.png\" alt=\"\" class=\"wp-image-6683\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_intersect_17.png 978w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_intersect_17-300x183.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/01\/YAPP_intersect_17-768x470.png 768w\" sizes=\"auto, (max-width: 978px) 100vw, 978px\" \/><figcaption class=\"wp-element-caption\">inspectX positive<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><br>Other Exampels<\/h2>\n\n\n\n<p><br><meta charset=\"utf-8\">In special cases you want to be able to create objects that cannot be created with the standard arrays. For this, there are four so-called \u201chooks\u201d that make it possible to define these special objects in the project box or outside the project box. These hooks are called:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>lidHookInside()<\/li>\n\n\n\n<li>baseHookInside()<\/li>\n\n\n\n<li>lidHookOutside()<\/li>\n\n\n\n<li>baseHookOutside()<\/li>\n<\/ul>\n\n\n\n<p id=\"tw-target-text\">Suppose you have two push buttons on the PCB that you of course want to be able to operate when the PCB is in the project box. Three things have to be arranged for this.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You have to define two round holes in the Lid;<\/li>\n\n\n\n<li>On the inside of the lid there should be two round guides for the \u201cswitchExtenders\u201d;<\/li>\n\n\n\n<li>The switchExtenders must be printed. Because they are not connected to the project box, they can be included in a separate scad file or simply printed \u201cnext to the project box\u201d.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-2 wp-block-gallery-11 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"564\" height=\"274\" data-id=\"6814\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside2.png\" alt=\"\" class=\"wp-image-6814\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside2.png 564w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside2-300x146.png 300w\" sizes=\"auto, (max-width: 564px) 100vw, 564px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside3Db.png\"><img loading=\"lazy\" decoding=\"async\" width=\"431\" height=\"188\" data-id=\"6819\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside3Db.png\" alt=\"\" class=\"wp-image-6819\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside3Db.png 431w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside3Db-300x131.png 300w\" sizes=\"auto, (max-width: 431px) 100vw, 431px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"491\" height=\"403\" data-id=\"6818\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside1.png\" alt=\"\" class=\"wp-image-6818\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside1.png 491w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside1-300x246.png 300w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside3Da.png\"><img loading=\"lazy\" decoding=\"async\" width=\"545\" height=\"406\" data-id=\"6815\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside3Da.png\" alt=\"\" class=\"wp-image-6815\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside3Da.png 545w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/lidHooksInside3Da-300x223.png 300w\" sizes=\"auto, (max-width: 545px) 100vw, 545px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/SwitchExtenders3D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"364\" height=\"318\" data-id=\"6817\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/SwitchExtenders3D.png\" alt=\"\" class=\"wp-image-6817\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/SwitchExtenders3D.png 364w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/SwitchExtenders3D-300x262.png 300w\" sizes=\"auto, (max-width: 364px) 100vw, 364px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/SwitchExtenders.png\"><img loading=\"lazy\" decoding=\"async\" width=\"241\" height=\"191\" data-id=\"6816\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/SwitchExtenders.png\" alt=\"\" class=\"wp-image-6816\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<p id=\"tw-target-text\"><br>For an ESP-CAM you want to make it possible to put it \u201ctiltable\u201d on a foot. You can use the \u201clid- or baseHookOutside\u201d modules for this.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-2 wp-block-gallery-12 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"525\" height=\"524\" data-id=\"6840\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside-1.png\" alt=\"\" class=\"wp-image-6840\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside-1.png 525w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside-1-300x300.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside-1-150x150.png 150w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside-1-50x50.png 50w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside3D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"448\" height=\"454\" data-id=\"6824\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside3D.png\" alt=\"\" class=\"wp-image-6824\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside3D.png 448w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside3D-296x300.png 296w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/baseHookOutside3D-50x50.png 50w\" sizes=\"auto, (max-width: 448px) 100vw, 448px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/ESP-CAM-Stand3D.png\"><img loading=\"lazy\" decoding=\"async\" width=\"698\" height=\"538\" data-id=\"6822\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/ESP-CAM-Stand3D.png\" alt=\"\" class=\"wp-image-6822\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/ESP-CAM-Stand3D.png 698w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/ESP-CAM-Stand3D-300x231.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/a><\/figure>\n<figcaption class=\"blocks-gallery-caption wp-element-caption\">You can find the scad file for the stand on github<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><br>Snap Joins<\/h2>\n\n\n\n<p id=\"tw-target-text\">A &#8220;snapJoin&#8221; is a bulge in the Base that fits exactly in a hole in the Lid. A snapJoin clicks the Lid onto the Base without screws or anything else.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins1-1024x384.png\" alt=\"\" class=\"wp-image-6848\" width=\"512\" height=\"192\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins1-1024x384.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins1-300x113.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins1-768x288.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins1.png 1200w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins2.png\" alt=\"\" class=\"wp-image-6850\" width=\"403\" height=\"275\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins2.png 806w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins2-300x205.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoins2-768x524.png 768w\" sizes=\"auto, (max-width: 403px) 100vw, 403px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p id=\"tw-target-text\">Often you want the snapJoins to be applied symmetrically on one or two sides. This can be done by specifying &#8220;yappSymmetric&#8221; in a snapJoin row as the last argument.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSymetric.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSymetric-1024x247.png\" alt=\"\" class=\"wp-image-6849\" width=\"512\" height=\"124\" srcset=\"https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSymetric-1024x247.png 1024w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSymetric-300x73.png 300w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSymetric-768x186.png 768w, https:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2022\/02\/snapJoinsSymetric.png 1200w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p id=\"tw-target-text\">Note: snapJoins can only be created if the ridgeHeight is not lower than 3mm!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ ] Een Nederlandse vertaling van deze post kun je hier vinden. With every electronic circuit I make, there comes a moment when the project is \u201cfinished\u201d\u2026. almost! The last step is always to find a suitable projectbox and even &hellip; <a href=\"https:\/\/willem.aandewiel.nl\/index.php\/2022\/01\/02\/yet-another-parametric-projectbox-generator\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[153,2,3,6,10,15],"tags":[],"class_list":["post-6695","post","type-post","status-publish","format-standard","hentry","category-3d-printing","category-arduino","category-computer","category-esp8266","category-hardware","category-scripts"],"views":59961,"_links":{"self":[{"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/posts\/6695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/comments?post=6695"}],"version-history":[{"count":48,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/posts\/6695\/revisions"}],"predecessor-version":[{"id":7934,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/posts\/6695\/revisions\/7934"}],"wp:attachment":[{"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/media?parent=6695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/categories?post=6695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/tags?post=6695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}