[{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp class=\"p1\"\u003eIf you want to 3D print press-fit or snap-fit project enclosures, there are a few tricks you can use to get better dimensional accuracy. Unless you print in an extremely dry climate, it helps to dry your filament. You can also calibrate your printer's motion system, filament extrusion, and X-Y hole/contour compensation.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/449/original/xycal-block-6_10mm-hole.jpeg?1733866683","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n        \u003ch2 class=\"p1\"\u003e\u003cstrong\u003eDrying Your Filament\u003c/strong\u003e\u003c/h2\u003e\n\u003cp class=\"p2\"\u003eFDM 3D printers work by melting plastic filament and carefully extruding it layer by layer to build up the desired shapes. Filament absorbs water from the air, and manufacturing filament involves a water cooling step. Wet filament can break more easily, and it can cause bubbles and stringing. Keeping your filament dry helps to get stronger prints with a smooth surface finish.\u003c/p\u003e\n\u003ch3 class=\"p3\"\u003e\u003cstrong\u003eHow Dry is Dry Enough?\u003c/strong\u003e\u003c/h3\u003e\n\u003cp class=\"p2\"\u003ePeople have lots of opinions about drying (for example, see r/3dprinting on reddit). For me, starting prints with filament stored in a plastic cereal box at 15% relative humidity has been working great. No bubbles. No splattering. Very little stringing.\u003c/p\u003e\n\u003ch3 class=\"p3\"\u003e\u003cstrong\u003eHow To Dry Filament?\u003c/strong\u003e\u003c/h3\u003e\n\u003cp class=\"p2\"\u003eFor filament that's relatively dry to begin with, you just can put it in an air-tight plastic box with silica gel desiccant packs. In my experience, a plastic cereal box with about 50g of silica gel packets can take a roll of PLA filament from 25% to 15% relative humidity in less than a day. Starting at 15% out of the cereal box, if I print for a few hours in a room that's about 30% to 40% relative humidity, the hygrometer in my dry box usually reads 20% to 30% when I put the roll away. Within a few hours, that goes back down to 15%. But, it's important to note that silica gel can only absorb so much water before it needs replacement or drying, so this approach might not work well in humid conditions.\u003c/p\u003e\n\u003cp class=\"p2\"\u003eFor new filament, or filament that's been stored in anything other than crispy dry conditions, starting with a filament dryer may be quicker than relying on silica gel alone. Many makes and models of filament dryers are available, with new models introduced fairly often. To see what people currently recommend, you could check r/3dprinting on reddit.\u003c/p\u003e\n\u003cp class=\"p2\"\u003eFor new filament, I've been using a Sunlu FilaDryer S2 that I bought. The S2 works fine as long as I prop the lid open slightly (5mm to 8mm-ish gap). Typically, in 6 hours or less, the dryer will get a new roll of PLA filament down to about 25% relative humidity, but then it stops getting drier. From there, I put the roll in a cereal box with desiccant, wait a while, and it goes down to 15%.\u003c/p\u003e\n\u003ch2 class=\"p1\"\u003e\u003cstrong\u003eUpgrading Your Printer's Firmware\u003c/strong\u003e\u003c/h2\u003e\n\u003cp class=\"p2\"\u003eUpgrading your printer's firmware to the latest available version may result in improved print quality compared to the factory firmware. How to go about a firmware upgrade will depend on what type of printer you have. For example, the Bambu Lab wiki has a page, \u003ca href=\"https://wiki.bambulab.com/en/p1/manual/firmware-upgrading\"\u003eFirmware update guide for P1 Series\u003c/a\u003e, that explains how to update the Bambu Lab P1S.\u003c/p\u003e\n\u003ch2 class=\"p1\"\u003e\u003cstrong\u003eCalibrating Tool Head and Print Bed Movement\u003c/strong\u003e\u003c/h2\u003e\n\u003cp class=\"p2\"\u003eFDM printers use stepper motors with belts or drive screws to move the tool head and the print bed on 3 axes (X, Y, and Z). The stepper motors are controlled by the printer's firmware, which takes \u003ca href=\"https://en.wikipedia.org/wiki/G-code\"\u003eG-code\u003c/a\u003e instructions from a slicer (Bambu Studio, Cura, etc.). Calibration can help the motors move accurately, repeatably, and without problematic resonant vibrations.\u003c/p\u003e\n\u003cp class=\"p2\"\u003eTypically, printers will provide some way to make sure the bed is level and to calibrate stepper motor motion. Calibrating the motion system can help to avoid problems with waves in the surface of printed parts. Bed leveling helps with good first layer adhesion, avoiding warping, spaghetti prints, and various other problems.\u003c/p\u003e\n\u003cp class=\"p2\"\u003eHow motion calibration and bed leveling works depends on what kind of printer you have. My printer is a Bambu Lab P1S, which I bought. The P1S uses a Core X-Y design with automatic bed leveling. Since bed leveling is taken care of automatically, I can pretty much ignore that part.\u003c/p\u003e\n\u003cp class=\"p2\"\u003eFor calibrating the motion system to avoid problems with vibration and belt tension, the P1S has a calibration feature available in the menu system on the printer's LCD control panel. I did that when I first set up the printer. It made a bunch of noise for a while, but was otherwise unremarkable.\u003c/p\u003e\n\u003ch2 class=\"p1\"\u003e\u003cstrong\u003eCalibrating Filament Extrusion\u003c/strong\u003e\u003c/h2\u003e\n\u003cp class=\"p2\"\u003eTo extrude the right volume of filament so that each line your printer lays down will merge smoothly into the previous lines, without gaps or bulges, you can calibrate the extrusion of your filament. Extrusion calibration is complicated. Terms people often use to talk about it include over extrusion, under extrusion, K factor, and pressure advance. Options for calibrating different aspects of the extrusion process vary according to the model of your printer and which slicer software you use.\u003c/p\u003e\n\u003cp class=\"p2\"\u003eIn the Bambu Studio slicer software, the \u003cem\u003eCalibration\u003c/em\u003e tab offers two types of extrusion calibration, \u003ca href=\"https://wiki.bambulab.com/en/software/bambu-studio/calibration_pa\"\u003e\u003cem\u003eFlow Dynamics Calibration\u003c/em\u003e\u003c/a\u003e and \u003cem\u003eFlow Rate Calibration\u003c/em\u003e. According to the Bambu Lab wiki, Flow Rate calibration is typically not necessary, so I ignored that one. But, the wiki recommends doing a Flow Dynamics calibration to set the K factor for new filament. I did a Flow Dynamics calibration for the filament I've been using (Bambu PLA Basic), and came up with a K factor of 0.02. I didn't notice much difference compared to the factory settings. The top surfaces of my prints seemed pretty smooth before and after the calibration.\u003c/p\u003e\n\u003ch2 class=\"p1\"\u003e\u003cstrong\u003eCalibrating X-Y Compensation\u003c/strong\u003e\u003c/h2\u003e\n\u003cp class=\"p2\"\u003eIn my experience, this is the really useful part for improving dimensional accuracy. Once you know that your filament is dry, your motion system is working well, and your extrusion flow is reasonable, it's time to check your \u003ca href=\"https://wiki.bambulab.com/en/software/bambu-studio/xy-hole-contour-compensation\"\u003eX-Y hole and contour compensation\u003c/a\u003e. By printing a test block, measuring it, doing a little math, then setting the X-Y compensation values, I was able to improve my dimensional accuracy from about ± 0.12mm down to about ±0.5mm. That seems to be good enough for making press-fit bearing mounts without too much of wasted test prints.\u003c/p\u003e\n\u003cp class=\"p2\"\u003eIn Bambu Studio, under \u003cem\u003ePrepare\u003c/em\u003e tab \u0026gt; left sidebar \u0026gt; \u003cem\u003eProcess\u003c/em\u003e heading, you can turn on the \u003cem\u003eAdvanced\u003c/em\u003e process settings option. When you do that, it enables input fields for \"\u003cem\u003eX-Y hole compensation\u003c/em\u003e\" and \"\u003cem\u003eX-Y contour compensation\u003c/em\u003e\" under \u003cem\u003eProcess\u003c/em\u003e heading \u0026gt; \u003cem\u003eQuality\u003c/em\u003e tab \u0026gt; \u003cem\u003ePrecision\u003c/em\u003e sub-heading.\u003c/p\u003e\n\u003cp class=\"p2\"\u003eTo determine X-Y compensation values, you can print a test block, measure it with calipers, then do some simple math. Note that, similar to flow rate K factor calibration, your results here will likely be specific to the particular filament you're using and how dry it is.\u003c/p\u003e\n      \n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/450/original/xy-hole-comp-0_05mm.png?1733867133","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3 class=\"p1\"\u003e\u003cstrong\u003eX-Y Contour Compensation Howto\u003c/strong\u003e\u003c/h3\u003e\n\u003cp class=\"p2\"\u003eThis is for setting the amount of extra plastic that gets extruded on the outside faces (contours) of your objects.\u003c/p\u003e\n\u003col class=\"ol1\"\u003e\n\u003cli class=\"li3\"\u003ePrint a test block with some different spans sized so you can measure them with calipers. I made a test block in OpenSCAD (see download button and code listings below) with 10, 20, and 30 mm spans in the X and Y directions.\u003c/li\u003e\n\u003cli class=\"li3\"\u003eMeasure each of the 10, 20, and 30 mm spans with calipers that have a resolution of 0.01mm (0.1mm is too coarse).\u003c/li\u003e\n\u003cli class=\"li3\"\u003eCalculate the average of the error for each span. For example, if you measure 9.87 for 10mm, 19.83 for 20mm, and 29.90 for 30mm, the average would be ((10-9.87) + (20-19.83) + (30-29.90))/3 = 0.13mm\u003c/li\u003e\n\u003cli class=\"li3\"\u003eDivide the average error by 2, because half of your error came from each side of the print, but you need to know the error on just one side. For example: 0.13mm / 2 = 0.06mm.\u003c/li\u003e\n\u003cli class=\"li3\"\u003eIn Bambu Studio, enter that number in the X-Y contour compensation field (e.g. 0.06).\u003c/li\u003e\n\u003cli class=\"li3\"\u003ePrint the test block again with the new settings to see if you are satisfied with the resulting accuracy.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 class=\"p5\"\u003e\u003cstrong\u003eBefore X-Y Contour Compensation\u003c/strong\u003e\u003c/h3\u003e\n\u003cp class=\"p2\"\u003eThis was is my very first XY compensation test block, with no XY contour compensation in Bambu Studio:\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/451/original/xycal-block-1_30mm-X.jpeg?1733867190","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n        \u003ch3 class=\"p1\"\u003e\u003cstrong\u003eAfter X-Y Contour Compensation\u003c/strong\u003e\u003c/h3\u003e\n\u003cp class=\"p2\"\u003eThis is the result of setting my X-Y contour compensation in Bambu Studio. Note that I set a compensation value based on averaging error for various spans in the X and Y directions. I could have made this one measurement closer, but that would affect the other measurements too. I'm happy with anything inside of ±0.05mm.\u003c/p\u003e\n      \n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/452/original/xycal-block-6_30mm-X.jpeg?1733867235","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n        \u003ch3 class=\"p1\"\u003e\u003cstrong\u003eX-Y Hole Compensation Howto\u003c/strong\u003e\u003c/h3\u003e\n\u003cp class=\"p2\"\u003eThis is for setting the amount of extra plastic that gets extruded on the inside faces of holes in your objects.\u003c/p\u003e\n\u003col class=\"ol1\"\u003e\n\u003cli class=\"li3\"\u003ePrint a test block with some different sized holes so you can measure them with calipers. I made a test block in OpenSCAD (see download button and code listings below) with 3, 5, and 10 mm holes in the X and Y directions.\u003c/li\u003e\n\u003cli class=\"li3\"\u003eMeasure each of the holes with calipers that have a resolution of 0.01mm (0.1mm is too coarse).\u003c/li\u003e\n\u003cli class=\"li3\"\u003eCalculate the average of the error for each hole. For example, if you measure 2.87 for 3mm, 4.83 for 5mm, and 9.90 for 10mm, the average would be ((3-2.87) + (5-4.83) + (10-9.90))/3 = 0.13mm. Or, you might just calculate the error for the 10mm hole, since measuring small hole diameters accurately with calipers is really tricky.\u003c/li\u003e\n\u003cli class=\"li3\"\u003eDivide the average error by 2, because half of your error came from each side of the hole, but you need to know the error on just one side. For example: 0.13mm / 2 = 0.06mm.\u003c/li\u003e\n\u003cli class=\"li3\"\u003eIn Bambu Studio, enter that number (0.06 or whatever) in the X-Y hole compensation field.\u003c/li\u003e\n\u003cli class=\"li3\"\u003ePrint the test block again with the new settings to see if you are satisfied with the resulting accuracy.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 class=\"p6\"\u003e\u003cstrong\u003eBefore X-Y Hole Compensation\u003c/strong\u003e\u003c/h3\u003e\n\u003cp class=\"p2\"\u003eThis is my measurement, 9.91mm, of the 10mm hole before applying X-Y hole compensation in Bambu Studio. Note that measuring holes with calipers is tricky. You may need to wiggle it around a bit, try some different angles, and apply moderate pressure to the calipers' thumb grip.\u003c/p\u003e\n      \n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/453/original/xycal-block-5_10mm-hole.jpeg?1733867344","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3 class=\"p1\"\u003e\u003cstrong\u003eAfter X-Y Hole Compensation\u003c/strong\u003e\u003c/h3\u003e\n\u003cp class=\"p2\"\u003eThis is my measurement, 9.99mm, of the 10mm hole after applying X-Y hole compensation in Bambu Studio. Again, it's within ±0.05mm, so I'm happy with the result.\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/454/original/xycal-block-6_10mm-hole.jpeg?1733867398","metadata":{"caption":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2 class=\"p1\"\u003e\u003cstrong\u003eX-Y Test Block STL File\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003eThis is the download button for my X-Y hole/contour compensation test block:\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"button","content":"https://raw.githubusercontent.com/samblenny/spool-rollers/refs/tags/v0.0.1/xy-calibration-block.stl","metadata":{"class":"btn btn-large btn-block btn-primary","button_type":"primary","target":"_blank","zip_folder":"false"}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch2 class=\"p1\"\u003e\u003cstrong\u003eX-Y Test Block SCAD Code\u003c/strong\u003e\u003c/h2\u003e\n      \n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"embed","content":"https://github.com/samblenny/spool-rollers/blob/v0.0.1/xy-calibration-block.scad"},{"element_type":"text","content":"\n        \u003ch2 class=\"p1\"\u003e\u003cstrong\u003eTurning Down Acceleration\u003c/strong\u003e\u003c/h2\u003e\n\u003cp class=\"p2\"\u003eBambu Studio comes with defaults tuned for printing \u003cem\u003efast\u003c/em\u003e. The quality is still pretty good at high speed, but it makes a fair amount of noise and vibration. I've been happy with the results from adjusting a copy of the \u003cem\u003eStandard\u003c/em\u003e process preset in Bambu Studio to use lower acceleration.\u003c/p\u003e\n\u003cp class=\"p2\"\u003eIf you want to use lower acceleration, in Bambu Studio, under \u003cem\u003ePrepare\u003c/em\u003e tab \u0026gt; left sidebar \u0026gt; \u003cem\u003eProcess\u003c/em\u003e heading, you can turn on the \u003cem\u003eAdvanced\u003c/em\u003e process settings option. When you do that, it enables the \u003cem\u003eSpeed\u003c/em\u003e tab under the \u003cem\u003eProcess\u003c/em\u003e heading in the sidebar. In \u003cem\u003eProcess\u003c/em\u003e \u0026gt; \u003cem\u003eSpeed\u003c/em\u003e \u0026gt; \u003cem\u003eAcceleration\u003c/em\u003e sub-heading, I turned the \"\u003cem\u003eNormal printing\u003c/em\u003e\" setting down to 5000. Once I did that, the printer was quieter with a lot less vibration. I assume that probably makes at least a small contribution to improved print quality, but it's definitely nicer to be around during printing.\u003c/p\u003e\n\u003ch2 class=\"p1\"\u003e\u003cstrong\u003eSetting Infill Pattern\u003c/strong\u003e\u003c/h2\u003e\n\u003cp class=\"p2\"\u003eSlicers like Bambu Studio and Cura let you control the pattern they use to fill hollow spaces inside of 3D printed shapes. The type of infill you use affects how many grams of filament get used, how much noise the printer makes, how fast your nozzle wears out, and the strength of your finished parts.\u003c/p\u003e\n\u003cp class=\"p2\"\u003ePeople on forums seem to strongly dislike the \u003cem\u003egrid\u003c/em\u003e infill pattern that Bambu Studio uses for many of its default presets. Supposedly \u003cem\u003egrid\u003c/em\u003e infill can cause nozzles to wear out faster, which can mess with your dimensional accuracy and surface finish. I've had good results so far using 15% \u003cem\u003eline\u003c/em\u003e or \u003cem\u003ecubic\u003c/em\u003e infill. People also like \u003cem\u003egyroid\u003c/em\u003e infill, but it's slower and makes more noise.\u003c/p\u003e\n      ","metadata":{}}]