How to get a quality print of a thin single-walled shell? I would like to 3D print a small thin tub/mold for an epoxy resin. I have tubings inserted into holes, and I need to fix these tubings securely with epoxy (see picture below). The space is very limited, and the whole assembly must have a smallest possible footprint, so I have to confine the epoxy from spreading to the sides - that's why I need a tub. The tub itself must have as thin walls as possibly for the same reason.

The wall thickness is constant, so theoretically the nozzle could just make one single loop to print a layer, and then move to the next one. Kinda a spiral motion. It seems to be so simple! How do I get the slicer (I use Ultimaker 2 with 0.4 mm nozzle, CoPA material, and slice in Cura 4.6.1) to produce single outline walls?

I tried so many things, but I couldn't get this.

With the default settings for 0.2 mm layer a 0.4 mm wall (or thinner) will not be printed at all (left - 0.35 mm wall, middle - 0.4 mm, right - 0.45 mm):

Occasionally even the 0.45 mm-thick wall gets excluded from the print, which is really bizarre:

If I make the wall thicker, then the slicer tries to pack two discontinued lines next to each other, which is even worse. Cura has an option 'print thin walls', but this results in jerky, discontinued tracks.

At the moment I print 0.45 mm walls with the 'print thin walls' option turned on, this is the closest to what I need that I could find so far.

This may look fine in Cura, but the result is pretty ugly due to the additional nozzle movements... I really don't understand why the printer has to do them. It prints the outline, then jumps to the 'corner' and deposits a blob there. I can carefully remove these blobs with a scalpel, but come on, this is a disposable part and I need a ton of these!!!

If that helps, here is a link to a sample STL file with 450 μm walls.

Cura is exceptionally bad at printing details comparable in size to the configured line width. Lower your wall line width to something like half the wall thickness (i.e. 0.225 mm) and see if that works. With a standard 0.4 mm nozzle I've had success printing tiny details with 0.2 mm line width or smaller. For example:

And here's your model printed at 0.225 mm line width:

I also had to slow down the print speed considerably to get first layer adhesion with such thin lines. I did 40% via the printer UI, relative to 30 mm/s base rate, so effectively 12 mm/s. After first layer increasing speed was no problem.

Important: You also need to set the "Outer Wall Inset" (wall_0_inset) setting to 0. This is a broken Cura feature that's supposed to compensate for wall line widths less than the nozzle width, but the math is incorrect and not actually needed, and if it's left at the default it will reproduce exactly the same "missing wall" issue you got with full wall line width.


Marlin move axis issue I have problems with setting up Marlin for my new printer. Each time I rotate the dial, axis move to the same amount. It doesn't matter how much I moved it, to 1mm or to 20 mm (according to screen), axis move to the same really small step. It happens with all of axis. I tried to change step per unit to much higher value and it still does the same. Maybe you have some ideas guys? :)

Update. Jumpers were inserted to 1/16, but stepper chip I have (9488) could not handle that many micro steps. I changed it to 1/8 and now it works good.


3D Printer makes steps at Y axis (in some cases) I have bought the Tevo Tarantula 3D Printer Kit.

When I'm printing something that I created (using Cinema 4D), the printer prints it without any problems, but, when I download something from the internet, my Y axis makes steps 1-3 mm per layer and it makes any product unusable at the end.

This is what is does.

It does every single layer, not just randomly. I don't know if I have bad configuration or something like that.

When you describe a problem like this, it is best to describe the effect, not what you think is the cause - particularly since others then might mis-read your description.

Each layer being offset in one direction suggests that there is a problem with either the part moving on the bed (unlikely), or in the registration of one axis drifting over time.

Most likely, your Y-axis is skipping steps. It could be several things:

the axis binding on it's runners
the drive belt skipping because it is loose
the drive belt binding because it is too tight
too fast a print/travel speed
the print nozzle catching on the print (bed too high, no z-hop)
not enough drive current to the stepper motor
stepper motor failing
belt drive loose on the stepper shaft

A common 'feature' of 3d printing is that different models might emphasise one problem, but a different shape might hide it.

Check that everything is properly tightened, moves freely, and the belts are undamaged - with luck you can find the problem and it's not electrical.


SkyNet3D firmware home settings I recently installed SkyNet3D V1.1 on my Anet A8 printer. When I prepare the printer and select "auto home" it moves the head close to the upper right hand side of the bed. How do I change these settings so the printer auto homes to the center of the bed? Any help is appreciated.

Please note that Skynet3D is OBSOLETE, this was a fork from Marlin Firmware that was created to support the "odd" displays (due to alternative pin layout) Anet use on their printers and has been completely integrated in Marlin.

Note that homing is used to hit the end stops to determine the positioning of the head. There is no such thing as homing in the center of the bed (apart from the Z-axis). How would the head know where it is just after switching the printer on?

When using the constant:

#define Z_SAFE_HOMING

the printer is instructed to move the head to (in this case to the middle of the bed):

#define Z_SAFE_HOMING_X_POINT (X_BED_SIZE / 2)    // X point for Z homing when homing all axis (G28).
#define Z_SAFE_HOMING_Y_POINT (Y_BED_SIZE / 2)    // Y point for Z homing when homing all axis (G28).

after sending the G28 homing command.

Basically it wil home X and Y, then move to the instructed position (in the example the middle of the bed) and then home Z.


Problem in X and Y-axis dimensions 3d printing is a fun hobby for me. The  problem that I face is deviation in X or Y axis dimensions. When I print something with specific dimensions there is 0.7 or 0.4 mm difference (smaller in X or Y dimension) when I compare it with the design. Even when I print a cylinder, it is oval. I don't have a problem with the Z-axis. My 3D printer is a Prusa i3.

How can I fix this problem?

Can I solve it it through the software?
Do I have to change something of the hardware of the printer?

Usually uneven dimensions in X and Y directions are a result of improper belt tension of one of your belts. With improper belt tension, the positioning of the printer head is less accurate and typically results in non-circular prints. You should check the belt tension and adjust the tension, not too sloppy, and not too much tension (as it stresses the stepper motor which can lead to missing micro steps).

Furthermore, the uneven dimensional differences you mention (are these values you mention for similar sized dimensions? e.g. is this measured on a test cube print), if they are smaller than the design, and if it is a complex design, can also be related to shrinkage, e.g. ABS is a well known material that shrinks. Plastic shrinkage is basically the same in all directions, but complex shapes could introduce stresses preventing even shrinkage in all directions. To counteract shrinkage, you should slice your model scaled, e.g. scale to 102% to counteract a 2% shrinkage.

If the belts check out right and you are printing in PLA, you may want to check the steps per mm value. This calibration is only useful when you print a test cube at e.g. 200%, the inaccuracies also increase with the same ratio. If not, than it is a positioning error, caused by some play in the machine. Please check the bearings.


What's the purpose of the "outlines" around prints? I am curious, what is the purpose of printing a single-height outline around the objects to be printed?
Also, how would it affect the outline if the object to be printed extends to (very near) the very edge of the print area?

Update, I received a hint that an existing question has the answer; that link was not really to my satisfaction -- but it did link to another one that did: What are main differences between rafts, skirts and brims?

I am curious, what is the purpose of printing a single-height outline around the objects to be printed?

The (equidistant) lines at distance from the print object is called the "skirt", the skirt is an option found under the "Build Plate Adhesion" options in your slicer. The primary function of the skirt is to get the flow going, but there are more benefits you can get from the skirt:

You can find out whether the bed is correctly levelled, or if the bed has concave or convex areas (the skirt should be a line, I prefer at least 2 lines, of consistent thickness, if not, this may hint to incorrect levelling;
You can find out if there is enough or a sufficient amount of adhesive (e.g. glue stick, hair spray, specific print adhesion sprays like 3DLAC or DimaFix, etc), if not the bed might be greasy or lacking the adhesion product;
You can configure the skirt height to use the skirt as a shield for draft or ooze and distance to product);

  Also, how would it affect the outline if the object to be printed extends to (very near) the very edge of the print area?

Do note that a skirt limits the useable build area by the distance and width of the skirt.

Basically this has been answered (see this answer and this answer) in a different question ("Random lines are being printed?"), but it might be beneficial to answer this question rather than closing this for a dupe.  This question is focussed on the skirt, the equidistant lines around the print object, while the other question focuses on the priming line.


DQ542MA Driver proper settings for NEMA 17 Stepper Motor Using a 24 V power supply I have two NEMA 17 stepper motors each driven by a DQ542MA stepper motor driver. I have the current settings on the driver set for a RMS of 1.69 and a pulse/rev of 400. When I run the motors they run extremely well but become extremely hot. I need help to figure out what would be the proper settings to use in order to stop the overheating.

Attached is a photo of the motor's setting tables:

It is completely normal for a stepper motor to get hot. Taking this datasheet for example, specifies a 80 °C temperature rise. That is, in an room that is 25 °C ambient temperature, the motors would get up to 105 °C.

To prevent the motors from getting as hot you could further reduce the operating current, but likely the temperature they're running at is normal.


Strange walls/faces when importing self made model from Blender to Cura 3 I wanted to create a coin stacking device similar to this one:

https://www.thingiverse.com/thing:499177

But I wanted to only 3 coins, 5c, 2c, and 1c. Unfortunately the STL came in pretty messy after importing to Blender, which made it difficult to edit the model to have only 3 stacks. So I decided to create my own. I used a box and three cylinders with the diameter of the coins + 2mm so the coins can fall loose into the stack. The cylinders where used for boolean modify the box to create the stack gaps.

Exporting the model as an obj and importing them to Cura showed it getting strange diagonal faces at the stack gaps and at the top.

After slicing however the faces were gone and the test print came out pretty decent, even on low quality settings the measurement were quite exact.

Still I would like to know why these additional faces appear and how to prevent that. I am not a blender expert, but I guess it has to do something with the topology/faces? I started creating additional edges in Blender for the isolated vertex created by the boolean modifier, but I don't know if that's actually necessary for a 3d printed model that's not going to be textured ect.

It is quite common for modelling operations to result in 'non manifold geometry', meaning that some of the faces intersect or are not perfectly joined.

Although there is nothing obvious in your model, you can check in blender by going into edit mode, unselect all, selecting nodes, and 'select all by attribute/non manifold' Ctl-Alt-Shift-M (if I remember right).

Usually this happens with boolean operations where you merge the same object twice (i.e. union for the hole, then difference with the cut part). You would need to apply the boolean to see the non-manifold result.

Any of the standard mesh fixing tools will attempt to clean up your exported STL, and you could then import the model back into blender (but then it is a one way process, and you can't make updates to the base model).


How can I learn to create models for 3D printing? I've recently bought a 3D printer and waiting for it to be delivered I've given quite a lot of time to looking things up on Thingiverse. I see people create incredible models with gears, screws, lids and a lot of very cool and functional connectors (there are some project for boxes with an iris tipe lid that can be printed already assembled as a single model). I'd like to learn to do some of that as well. At the moment I have some proficiency with Blender where I can navigate the interface and sketch up some simple shaped model without any of the functional parts described above. My question therefore is:
Are there any tutorials that could help me create better models? If I need to I'm ready to learn to use a software other than Blender. I've tried searching for a similar question but found nothing.

The answer to your question is yes, there are tutorials to help you create better models. Unfortunately, the back-story to the answer is beyond the scope of StackExchange.

Don't limit yourself to Blender, especially if you are attempting to create non-organic (engineering-type) models. Blender is great for curves and bulges and bumps (and animation, and so much else) but not so great for parametric modeling. Meshmixer is a useful program, but more organic than engineering.

Consider to search for OpenSCAD, Fusion 360, TinkerCAD, but also use terms such as "parametric 3d modeling software" to find a wider range of solutions to your quest.  The above programs are free, there are too many paid programs to list even a small number.

Oh, yeah, stay away from SketchUp for any 3d print modeling. So many failure modes result from models created with that program.


Can you replace broken 100k thermistor with thermocouple - potentially blown analogue input as well I have bought myself an I3 3D printer - it comes with a thermistor which is then placed into a hole in the hotend and held in place by a grub screw.

Sadly due to my lack of care I managed to crush the wires with a pair of vice pliers whilst trying to remove the nozzle as it was clogged.

I have since unblocked it but now every time I turn on the 3D printer instead of giving a minimum temperature error it says it's 260°C - even if it's left off all night and I unplugged the thermistor. Otherwise, it seems to be fine.

I want to know can I just replace it with a thermocouple and a Maxim amplifier board (the one that Marlin supports, I forget the name)?  The thermocouple I have in mind is one that has the junction exposed (see image below), does this matter?

I plan to re-route it in the firmware to use A15 instead as I believe I must have blown the analogue input, right?

Thermistors and thermocouples are different animals.  A thermistor changes resistance based on the temperature at the junction.  A thermocouple generates a small voltage (mV range) which varies depending on the temperature.  Higher temps typically use a thermocouple because thermistors tend to not be as accurate at those elevated temps.

My printer uses thermocouples, and it appears that yours does also.  I'm not sure what you mean by "crushed", but you can check to see if the wires are shorted to the heat block or to each other.  It is unlikely that you've damaged the input to the control board by doing this.  Shorted wires can give the same readings as no thermocouple attached.  You can also get errors induced through ground isolation if wires are shorted to the heating block.

Changing this out for a different system with a different input amplifier sounds like a nightmare in the making, and I'd only attempt it if I could not fix the existing problem or find a direct replacement.


Jerk causing vibration and Y layer shift... Bad stepper? This issue just started recently; I am not sure if it is because of the specific part I am printing or whether something on the printer is going bad. Up until now, I have been printing all kinds of parts with no problems whatsoever.
I am printing a hollow sphere whose walls have fill paths that require the X and Y to change rapidly. i.e. the wall is 2 mm thick and the wall-line-count setting is set to 2.
When the print head is jerking back and forth to fill in this area it causes horrible vibrations and really bad Y layer shift. You can see the vibrations transferred through the flexible neck of the black LED light in the foreground.

All the Cura settings are at default- I have not tried to speed up my printing in any way by adjusting the settings.
The vibration seems to be coming from the Y stepper.
I have already tried tightening the belt; everything else seems tight.
It is an Ender 3 Pro with a stock mainboard and probably around 50 hours on it +/- 20 hours.
I have printed the same part on my other printer with no issues.
This is happening now on other parts that do not have particularly high jerk paths, it is shifting the Y by a full mm or more at a time.
Would you say the stepper motor is going bad? Or the driver? Or something else?
Here is the part in the video; I of course stopped the print after it started shifting:

And this is how it is supposed to look:

EDIT:
Here is the path that causes the problem:

Your video doesn’t show a printer moving terribly fast, which makes it seem like it could be a problem with the motion or the electronics. Check the movement of the Y axis by hand, is it smooth? With the belt on, and the stepper motor attached, you’ll feel some resistance and little bumps, from the steps in the motor, but it should be pretty smooth, and especially it should be consistent across the range the bed can move. If you take the belt off, the motion should be like butter. Check the belt pulley isn’t slipping on the motor shaft. Check the idler on the other end of the belt spins freely.
The motor could be suspect, the driver could be suspect. Try running the printer so it sends the bed back and forth, and push against it with your hand a little as it moves. It should be pretty strong, and shouldn’t skip steps from some light pressure. If it does skip easily, it’s something with the motor or driver, or possibly the wiring to the motor (I had a failing connection on my extruder stepper that manifested as wimpy torque and skipped steps). You can beep the wire with a multimeter, and wiggle it around as you beep in case it is a loose/flaky connection. I’m not sure if the creality printers have trimpots for the motor drivers, but some drivers have a bias adjustment where you adjust a voltage with a multimeter, to decide how much current the motor gets. It’s not usually something that goes out of adjustment.
If it doesn’t skip steps easily from adding some resistance with your hand, then it might be an incorrect jerk setting on the printer, or the slicer travel speed is too fast, or, the hot end is hitting some plastic that is sticking up (an overhang curled up possibly), and skipping a step there maybe.


Getting bumps/warts on surface, Cura doesn't want to comb? I have not been able to print smooth and round shapes using Cura 3.3.1 (or earlier) without bumps. I think they are seams? The filament is PLA.

Combing is enabled, which I thought makes it so that the nozzle travels over already printed areas, instead of flying over the air...right?

I have been able to keep the seems hidden for the most part when there are sharp corners. Sometimes cura hides the seems properly...sometimes it doesn't.

Here is an example shape I have tried printing with several different settings:

The object above was printed using "random" seam corner preference. If I had chosen "sharpest corner", the bumps would all just stack up in one place, but still stick out.

Just look at the travel lines below! Why is it jumping all over the place?

I have tried "Avoid printed parts when traveling" enabled and disabled, doesn't seem to make much difference.

I feel that there should be a configuration that results in the nozzle not jumping through the air like that, but I can't find it. Perhaps that's not related to the bumps?

The printer is a MonoPrice Mini Delta.

Following on from Toon's answer, here is a run down of Thomas Sanladerer's excellent
 video: 3D printing guides: Calibration and why you might be doing it wrong.

However, this may not be a definitive answer to the actual question about warts and bumps...

0:08 - A step back

Back in time - when the RepRap project (and the hobby grade 3D printing market) was new territory - it was seen to be a doable technology, with no restrictions imposed by patents. The new printers created and developed included Darwin, Sells Mendel and Prusa Mendel. These often produced unusable parts.

However, impromptu solutions, or kludges led to poor quality fixes giving poor quality prints, by today's standards. However, people (today) believe that because they worked back then,. that they must still be valid solutions today. However this is not necessarily the case.

The common misconception is that it is necessary to calibrate the esteps per mm for all axes other than extruder - adjusting the x, y and z esteps per mm until the 10 mm cube measures exactly 10x10x10 mm, even if that means squeezing the callipers.

  1:25 - Car analogy

  You find that your car pulls to the left, when going in a straight
  line, so you adjust the steering. However, then in hard corners and
  the rain the car handles poorly.

  Upon closer inspection, it then turns out that the car had a flat
  tyre. You wouldn't compensate for having a flat tyre by adjusting the
  steering, now would you?

In order to get that 10 mm cube precise, it is usual to calibrate for the filament diameter, and extrusion multiplier (most straightforward option), but some printers aren't even that precise in the first place.

Mechanical, ripple, slaw, blacklash, can throw you off by 0.1 mm.  Compensation for this 0.1 mm is certainly possible and achievable. However, then for a larger print, say 100 mm, then these overcompensation will become more evident, and you will be one entire milimeter off the desired dimensions.

So, use the ideal calculated esteps per mm. Timing belts and threaded rods are made to tight tolerances. therefore the worst case of ideal step per mm setting is an inaccuracy of 0.5%.

So, to find the ideal calculated steps use Prusa's calculator which is very good indeed.

If you are not using belts, or very large printer, then it is worth recalibrating the steps per mm for x and y, as 0.5%  will make a noticeable difference in larger parts.

Use the files and instructions for these Calibration sticks on Youmagine, for proper recalibrating without results slewed by the extrusion multiplier being off by a bit.

3:45 - So what do I need to do?

What do you need to empirically calibrate your printer?  In actual fact, not all that much:

extruder steps per mm setting
extrusion multiplier (see video link - Extruder calibration)
print speed, jerk and acceleration settings - These depend upon how much quality you want to sacrifice for increased speed.

Pro-tip: slow your printing down. For example, try printing at half speed. Quality may be improved, and even if it isn't you will be able to observe more clearly what is happening, and going wrong.
(see video link - Super Fast Guide:Tuning Speeds)

4:30 - Other than that?

There is not much else needs calibrating, per se.

With regards to slicer software, there are only a certain range of settings make sense, but this isn't printer calibration. You simply learn the slicer software and, with familiarity, see how far you can go.

These days any well maintained and well built and solid printer will produce good prints.

Most slicers give you decent prints without tweaking or calibrating, other than the basic settings about your printer and deciding how the part should be printed.

What about print temp and retract settings? Well, just use the default settings, or settings which depend upon the type of filament.  So, no calibration is required there, as it is a property of the filament.

5:24 - Summing up

Don't try to calibrate everything

The technology, in particular the software, i.e. slicers, is still developing and improving. Slic3r's prototpye beta (in Nov 2014) has added compensation for fitting errors(?) without messing other things up, which is essentially what the cube calibration tries to do, but in the correct way.


Ender 3 has developed a tendancy to skip Y steps Recently my Ender 3 has developed a problem of skipping Y steps (layer shift in the Y direction), and it seems to be getting progressively worse. I'd never experienced layer shift before a few weeks ago when I tried some extreme accelerations (up to 3000 mm/s²), which mostly worked fine, but I stopped after getting a couple layer shifts, and now have X acceleration at 2000 mm/s² and Y acceleration back at the default of 500 mm/s².

When the layer shifts happen, I usually hear "grinding" sounds that seem like they're coming from friction of the nozzle moving over the already-deposited material. Bed leveling/height is correct though.

Magnitude of the layer shifts varies between 1 mm and 3 mm. They're all in the positive direction (layers shifts towards the back of the bed).

Speeds are reasonable, 30 mm/s for outer walls, 60 mm/s for inner and infill, 120 mm/s for travel.

Is there a likely mechanical or electrical cause for the onset of skipped steps/layer shift?

Is it possible that the high X acceleration is what's allowing the very high travel speed to be achieved, and that such high travel speed is putting the nozzle on top of cold material that it drags on without giving it a chance to soften it first? Or is the printer underpowered such that there's insufficient current to provide the necessary Y motor torque while the X is under high acceleration? Lowering the X acceleration back to default (500 mm/s²) does seem to make it less likely or less severe, but it's still happening.

While I first experienced layer shifts a couple times before upgrading, only while using extreme acceleration settings (3000 mm/s² is fairly extreme for moving the bed), their regular occurrance, which is near-constant with some files, seems to have started after I upgraded the firmware to Marlin 1.1.9. Reverting to the manufacturer's firmware, with no mechanical changes to the printer whatsoever, has the same file printing now with no layer shifts. So I think it's safe to say that this is a firmware problem - either a bug in Marlin, or a problem with the Ender 3 configuration headers for it. The bug tracker suggests this kind of thing is an ongoing issue; here are two among a large number of related bug tracker threads:

https://github.com/MarlinFirmware/Marlin/issues/9768
https://github.com/MarlinFirmware/Marlin/issues/10446

I'll try the latest 2.0.x, and/or turning features off one at a time in 1.1.9, and see if I can isolate the cause, then open a new question about bugs in Marlin causing layer shifts if needed.


Is there lead in brass 3D printer nozzles? I was just wondering whether or not there is lead in brass 3D printer nozzles as I read that they do add lead when making brass to improve reliabilty or something along those lines?
I was curious as to whether the same reason applies to 3D printer nozzles and if it is enough to warrant buying a steel nozzle instead?

It's very likely that leaded brass is used in the manufacture of nozzles for 3D printers -- as noted by @AndrewMorton, this is done to improve machinability (the same is true of some steels, by the way) -- and when you're going to have to drill a hole potentially as small as 0.1 mm diameter, you want all the machinability you can get (I can say from experience that brass without the lead is very annoying to machine and likely to produce unacceptably high rates of broken tools and destroyed parts during that drilling operation).
That said, the amount of lead found in a single nozzle is very small, generally between 1.5% and 2.5% by mass -- a typical nozzle is only a few grams, so the lead content would be a few tens of milligrams.  Further, ingested lead (as metal) is not a major toxicity issue, because stomach acid reacts to form insoluble lead chloride, which then passes through the gut almost unchanged (some lead will still be absorbed, but swallowing a whole lead bullet raises bodily lead loading less than breathing in a shooting range for an hour or two each week for a year, where lead compounds float in the air as smoke, both from primers and from unjacketed lead bullets).
If you, a child, or a pet ingested a used nozzle (say, you dropped it and couldn't find it and worry about your dog), it would be more likely to do harm by abrading the intestinal lining as it passes than by the toxicity of the tiny amount of lead in the metal.  If this is a "today or yesterday" event, you should promptly consult an appropriate health care professional (physician, pediatrician, or veterinarian), who will likely want to take x-rays or CT scans to ensure the item passes through the gut rather than lodging somewhere along the way, as well as monitoring for symptoms of a complication (a perforated intestine is life-threatening, but relatively easy to repair if caught promptly; the surgery needed is similar to an appendectomy).


How to compensate for bad quality filament? Bad filament with changing diameter causes an uneven flow of plastic out of the nozzle. Besides buying very high quality filament (do we really want to be dependent on professional Filament producers?), what other ideas and methods could be used to mitigate the differences in diameter?

Could a pellet extruder be a solution?

I am only going to answer the part of the question about how to improve the results from low-quality filament:

There have already been projects going on dealing with the issue of varying filament diameter. A sensor that detects the filament's diameter and sends its value to the printers firmware can compensate for the varying volume of the filament pushed into the hotend by simply changing the extrusion speed. You could think of an extrusion multiplier or a change in the steps/mm value. Of course this has to be calibrated for the distance the filament needs to travel from measurement to hotend.

A good first read can be found in the following project:
http://forums.reprap.org/read.php?13,222517

And the corresponding Thing page:
http://www.thingiverse.com/thing:454584


Uploading Repetier firmware to Arduino? I have a prusa i3 and have been trying to calibrate it. I have been trying to upload the new steps per mm and I get to done uploading. However when I go into Repetier host and type M503 to get the printers settings it still shows the steps as 100 for the y axis, it needs to be 96.1810. I am using ramps 1.4 I think, with Adrunio mega 2560. If I am remembering this correctly isn't there something you have to do when uploading a new sketch like hold the rest button or something?

If your firmware doesn't store values you modified after flashing, for example using Repetier's option "Firmware EEPROM configuration", you probably didn't define EEPROM setting in Marlin.

To do this you have to uncomment the option in Marlin's Configuration.h:

// EEPROM
// The microcontroller can store settings in the EEPROM, e.g. max velocity...
// M500 - stores parameters in EEPROM
// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
// M502 - reverts to the default "factory settings".  You still need to store them in EEPROM afterwards if you want to.
//define this to enable EEPROM support
  #define EEPROM_SETTINGS

#if ENABLED(EEPROM_SETTINGS)
// To disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
#define EEPROM_CHITCHAT // Please keep turned on if you can.
#endif

Check that the lines #define EEPROM_SETTINGS and #define EEPROM_CHITCHAT are both uncommented (i.e. defined)


Relative move affected by home offset I set a home offset on my Ender 3 running Marlin firmware so that it starts printing from the corner of a custom build surface which doesn't cover the entire bed:

M206 X-10 Y-10

Now, when I run this:

G1 X0 Y0 Z1

the head moved to 1 mm above the bottom left most edge of the sticker (good!)

However, I notice when I do relative moves like this:

G91
G1 X-1 Y-1

The head actually moves in the opposite direction than you would expect, because it's subtracting the offset from the relative coordinates, which I didn't expect.

Put another way, the following G-code:

M206 X-10 Y-10
G91
G1 X0 Y0

Moves the head to x=20 y=20 measured against the original coordinate system.

Is this expected? It seems rather undesirable behaviour to me. Bug?

Yes this is expected, with M206 you set a relative offset!

  The values specified are added to the endstop position when the axes are referenced.

reference: G-code wiki M206

So when you issue the command M206 X-10 Y-10 twice (or already have an offset set), the offset is 20, 20 (X, Y) and when instructed to move "nothing" (G1 X0 Y0) the printer moves "nothing" from (thus to!) the newly defined origin at (20, 20). Basically it is relative movement from the set coordinate system, not the position of the carriage. In effect you have changed the reference frame, the printer just responds to that action.


White blocks on LCD screen after Anet A8 power up I just completed assembly of the Anet A8 and powered it up.

Powering up shows white blocks on LED and a series of clicking noise for about three seconds with flashing red LED. During power-up, the following happens:

The side heat sink fans start (Blower fan remains off)
LED comes up with all white blocks and buttons do nothing
No motor moves in any way
Motherboard show not light except a three-flash-red-LEDnear the corner (fan connector)
Printer remains in the state
Reset button only repeats the clicking sound + red flashing LED

Video: https://photos.app.goo.gl/mxNNeK5o13a9C6TC8

The display of the Anet A8 now shows white blocks.

Any hints as to what could be wrong?

Update 1:
The clicking sound is actually the blower powering up and then going off immediately after.

Update 2:
I just did a blind flash to Marlin 1.18 and the firmware deployed successfully. Now, the boot sequence is almost 4 secs longer (previously, it was 3) and the clicking sound of the blower fan slowly spinning is replaced by a high spin-up of the blower. but after that, we are back to a dead printer with all whites.

This is a known and documented problem of this printer. I'm afraid your printer board is dead.

If you have white squares on the display like this picture:

  You need to check Anet A8's mainboard - click reset button and check
  the D1 indicator:

  If D1 lights on for a second then went out and the screen is full of white square, try to reconnect screen wire for several times. When
  it's well connected, click the reset button. If still not working, you
  need to replace a screen.
  If the D1 indicator is always off and the screen is full of white square, you need to replace a mainboard.

From the video you posted it can be seen that the D1 LED does not light up, it is off the whole time. Hence the main board is dead.


Resources on getting horus/ciclop scanners to work? I have a Ciclop (HE3D version) scanner ready to try to use, but it seems the Horus software is hopelessly bitrotted. It has breakage from API-level changes at least in the Python bindings for OpenGL, OpenCV, matplotlib, and wxPython, and possibly also incompatibility with the V4L2 camera drivers for Linux versions later than whatever the authors were using at the time. After attempting to fix those as best I can, I'm still getting no output from the camera. (Note: The camera works fine with other apps and OpenCV test program, so it's not a camera problem.)

Is anyone using the Horus software successfully? Are there forks or alternate software that are usable, or exact details on what historical operating system and Python ecosystem version is needed to make it work?

I don't know if this will work but BQ commercializes a Ciclops scanner and have some downloads in their webpage (https://www.bq.com/en/support/ciclop/support-sheet).

There are different Horus and driver versions, maybe some will work for you(?).

Hope it helps!


Carbon fiber instead of smooth steel rods? I have a long 8 mm smooth steel rod of about 55 cm long. This rods bend easily due to the length. If I replace them with 8mm solid carbon fiber rods, will the bending reduce? Will the bearings wear off the carbon fiber rod? I couldn't find too much information about this.

Steel is the best material for a linear rod when you have a fixed cross-section. It will have the least flex of any rod (aside from some exotic metals) of the same size.

Carbon fiber's material properties might seem superior at first sight, but the stiffness is very anisotropic -- it's very stiff along the grain and not very stiff across the grain. So multi-axis stresses like bending aren't necessarily going to perform up to the theoretical specs. Carbon fiber has exceptional stiffness-to-weight ratio, but the stiffness-per-area isn't necessarily superior in this application.

People do occasionally use carbon fiber for linear rods/rails, but only in much larger sizes than 8 mm. Think >25 mm.

And that's really the problem here. 8 mm diameter at 550 mm long is well outside what's reasonable for bending stiffness. Bending deflection increases with the CUBE of length, and this is simply far too long for the size of rod. The general rule of thumb for precision motion applications is length < 25*diameter. That's a conservative rule, but it's the right ballpark. You really shouldn't be going over 200-250 mm or so with an 8 mm rod.


What actual dyes are used in filaments? I've seen several questions about dyes in regards to food-safety, with no conclusive answers, as well as anecdotes on the RepRap wiki about how the mechanical properties of dyed PLA tend to vary by color. The general unsatisfactory answer is that dyes and additives used are proprietary secrets of filament manufacturers. However, 3D printer filament is a sufficiently large industry, with sufficiently many players now, that many of these "secrets" surely have to be "open secrets" to some extent by now.

What is known about what types of dyes and additives that tend to be used in filaments for 3D printing? Is there information on distinguishing between them with optical, chemical, etc. properties?

My thought is that by knowing some of the common dyes used by some manufacturers, it would be possible to:

choose those if interested in properties of them, and;
devise test procedures to evaluate if a different/"generic" filament seems to be using the same ones.

I spoke with a chemist tonight.   He said to start with the SDS (or MSDS) for the filament,  which is required to be available for most materials.   It should list the pigments and additives if they are not recognized as safe.  If they are safe,  non-toxic, not flammable, non-reactive, they might not be disclosed on the data sheet.

He warns that sometimes the SDS lists just an industry name for a common pigment,  and sometimes is the full chemical name.   IMO, Google may help with translation.

The chemist has a deep background in color science and pigments.


FlashPrint visual glitch on Linux (Debian testing) I have a problem with all versions of FlashPrint on Linux (Linux Debian 5.4.0-4-amd64 #1 SMP Debian 5.4.19-1 (2020-02-13) x86_64 GNU/Linux).

I tried to install versions from 3.28 to the latest 4.2, and it's always the same problem, when I try to preview the print, I see a purple glitch.

I think it's more a dependency problem, but if someone car help me figuring this out, it will be great.

I have no error when I launch in a console, and here is the dependency :

ldd FlashPrint
linux-vdso.so.1 (0x00007fff1d3ea000)
libGLU.so.1 => /usr/lib/x86_64-linux-gnu/libGLU.so.1 (0x00007f57cb19f000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f57cb194000)
libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f57cb169000)
libQt5OpenGL.so.5 => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5 (0x00007f57cb10f000)
libQt5Widgets.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007f57caa8a000)
libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007f57ca4ae000)
libQt5Network.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Network.so.5 (0x00007f57ca2f1000)
libQt5Xml.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Xml.so.5 (0x00007f57ca2b0000)
libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007f57c9d76000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f57c9cef000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f57c9cce000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f57c9b89000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f57c9b6d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f57c99aa000)
/lib64/ld-linux-x86-64.so.2 (0x00007f57cb25c000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f57c97dd000)
libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f57c97a4000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f57c9787000)
libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f57c9682000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f57c967b000)
libicui18n.so.63 => /usr/lib/x86_64-linux-gnu/libicui18n.so.63 (0x00007f57c93a4000)
libicuuc.so.63 => /usr/lib/x86_64-linux-gnu/libicuuc.so.63 (0x00007f57c91d3000)
libpcre2-16.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007f57c9150000)
libdouble-conversion.so.3 => /usr/lib/x86_64-linux-gnu/libdouble-conversion.so.3 (0x00007f57c9139000)
libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f57c9010000)
libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f57c8f58000)
libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f57c8f24000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f57c8e65000)
libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f57c8e39000)
libicudata.so.63 => /usr/lib/x86_64-linux-gnu/libicudata.so.63 (0x00007f57c7448000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f57c73d2000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f57c7290000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f57c7266000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f57c7062000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f57c6e5c000)
libbsd.so.0 => /usr/lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f57c6e40000)

In addition to open source niceties of OpenGL, you need to will often need to install and update the drivers for your GPU.  If you do not wish to or cannot utilize your GPU (it'll cost u in performance), look for options to turn off hardware acceleration or use a purely "software renderer" type setting.  I don't know if FlashPrint has such settings, but i do know that OpenGL can do some screwy stuff if you lack correct Nvidia drivers (and have an nvidia gpu).


If I have a nozzle clog, can I easily get rid of it by simply replacing the nozzle? I'm getting a Prusa i3 with a replaceable nozzle.

If I have a nozzle clog, can I easily get rid of it by simply:

replacing the nozzle, or;
removing it and submerging it in acetone, or;
removing it and cleaning it with a blowtorch, or;
removing it and cleaning it.

Or can the clog get so bad that the whole extruder has to be cleaned, and if so how could I clean it?

The nozzle on a Prusa i3, if a genuine Prusa, would be part of the E3Dv6 assembly and is removable. It's wise to heat the nozzle to 150°C or higher, and handle with the care necessary for something that hot. When loosened, be prepared for it to fall onto the surface below. A catching tin would be a good idea, at the very least.

Once removed, you can test that it's the nozzle that is clogged by pushing or extruding filament via the control panel to confirm that the rest of the system is clear.

Consider also to perform a nylon cleaning of the nozzle before you perform the above disassembly. I've performed this process more than a few times and disagree with one aspect of the process. The process describes heating the nozzle to 250°C and forcing nylon filament into the hot end. I suggest doing so manually, not via the extruder controls, as it give you better feedback and control.

Once you've forced as much through as you can, allow the hot end to cool. Not included in the steps reference above is a part of the process that is semi-automated on my printer. Heat the nozzle to about 140-150°C and carefully and slowly pull the filament back out of the hot end. The above link suggests yanking it sharply. The article also includes a caution that doing so is brutal and could damage your machine. Carefully and slowly will not damage your machine. I have to use pliers to get sufficient grip on the nylon but that's a trivial aspect.

The nylon will come out with debris and previous color filament. Clip off the debris and perform the task again. Repeat until the nylon is clean and you have good flow through the nozzle.

Acetone will not dissolve PLA filament. Extreme heat may carbonize the material in the nozzle and render it useless. The nylon cleaning method is nearly universally successful unless you have a physically damaged nozze.

There are kits to be purchased which are described as nylon cleaning kits, and include a small length of nylon filament and sometimes a cleaning drill. Using such a drill may damage the nozzle and is contraindicated. If you can afford to purchase a half-kilogram or full kilogram of nylon in the diameter specific to your printer, it will last quite some time. You can share segments with friends and/or members of your local makerspace and improve circumstances for many.

Nylon absorbs moisture more quickly than any other filament, making storage for extended periods challenging if you intend to print with nylon, but for cleaning, it matters little that there's moisture boiling out of it as you clean your nozzle. I've found the little bubbles in the extruded nylon to be a sign that I'm getting clean nylon through the nozzle and can expect good results.

In the worst case I've had thus far, I've had to push nylon four times to clear a clogged nozzle. I had some overheated PVA support material jam the nozzle and once cleared, everything flowed properly.


How to write arcs directly in G-code? How can I write G-code for a triangle without sharp tips?

I want to generate the corners manually, rather than using a slicer to generate them, just to know how it is done.

Marlin has G2 (clockwise arc) and G3 (counterclockwise arc) commands that could be used to do this. You can find detailed documentation for the command here.

Basically, you can use

  G2 R1 X5 Y5

to draw a (clockwise) arc from the current position to $(X,Y)=(5,5)$ with a radius of $1$.

So, your rounded triangle could be drawn with 3 straight line moves and 3 arc moves. Figuring out the exact coordinates for each move would be a quite challenging geometry exercise, as you'd need to know where the straight line portion of each side ends and the rounded portion starts.


What the adjective "downstream" is used for? I'm working with a project involving 3D printing's terminology, but I'm not such an expert... so I was asking myself if someone can explain the meaning of the "downstream" adjective in this field.

More precisely, I'm dealing with this sentence: "Handle any downstream task", which I really can't understand because it has a very poor context.

I also have this sentence with the adjective that I'm having trouble with:

  Confidently send your surfaces downstream knowing your results are usable design surfaces.

Without more anymore context "downstream" could be in reference to a print that would be sent to another machine for post-processing. The post-processing machine is "downstream" from the machine used to make the print in the first place.


Can I use a 12 V single channel optocoupler module in a 24 V machine? I have a Tevo Tornado Gold 24 V. I want to use this LJ12 A3-4-Z/BX Inductive NPN NO 4 mm with 6-36 V operation current as a Z probe. I do not want to fry my machine by putting in 24 V into the sensor input.

What do I have is a 12 V, single channel optocoupler isolation module.

I want to know if this 12 V optocoupler module can be used with a 24 V power supply, or do I need another module in order to prevent me frying my sensor.

If I do need another what would I need?

You can safely use the module with 24V.

The input side shows a red LED, optocoupler and 1k resistor in series. The LED and optocoupler probably have a voltage drop in the neighbourhood of 3.1-3.5 V put together, so for a 12 V input you will get a current of approximately 9 mA-.

For a 24 V input voltage the increased current will cause a slightly higher voltage drop, but even if the voltage drop remains as low as 3.1 V the current will still only be 21 mA. This is well within the rating of the optocoupler (similar optocouplers are often rated for 60 mA) and slightly pushing the rating of the LED (similar LEDs are usually rated for 20 mA) but it will probably be fine.

For extra peace of mind you could connect an additional resistor in series with the input. The "ideal" value (that is, to keep the current identical to that at 12 V) would be 1.3 kΩ, though any small value resistor (above 100 Ω) would be fine.


Unable to compile Marlin for Anet A8 Printer: Prusa i3 clone / Anet A8
Arduino IDE: Ver 1.8.12
Firmware: Marlin-2.0.2
anet-board-master: 1.5.6 (from hardware/anet/avr/platform.txt 2018-03-02)
Configurations-relese: 2.0.5 (Configuration.h, -adv.h)
OS: Windows 10
Board selection: Anet V1.0

I successfully upgraded the stock firmware to a version with bootloader, calibrated and had it running. I started to add features one at a time, recompile and upload. I managed to break it while trying to improve the LCD button debounce which I increased to 25 ms:

#if HAS_ADC_BUTTONS
  #define ADC_BUTTON_DEBOUNCE_DELAY 16  // (ms) Increase if buttons bounce or repeat too fast
#endif

The compile worked, transferred, showed the splash screen and went blank. This repeated on power-cycle. I reversed the change but was unable to restore operation.

I have tried reinstalling Arduino IDE, copying the folders in again and compiling with the default configurations. I'm getting lots of errors and the compiler exits with:

C:\Users\username\AppData\Local\Temp\arduino_build_938465\sketch\src\MarlinCore.cpp:470:11: note: in expansion of macro 'disable_Z'
       disable_Z();
       ^~~~~~~~~
exit status 1
Error compiling for board Anet V1.0.

Can anyone give me some guidance on how to get going again?

I'm almost back in business.

I reinstalled the bootloader.
I switched from Arduino IDE to Visual Studio Code to compile using Crosslink's Anet A8 (Plus) Marlin 2.0 Installation Upgrade YouTube tutorial.

1. Bootloader

I'm using a Chinese USBasp and there are some confusing tutorials on the web which require upgrading the USBasp firmware using another USBasp or Arduino. I avoided this as follows:

I used the Arduino IDE to open the Example | Blink.ino.
Tools | Board: "Anet V1.0 (Optiboot)". (Opti in optiboot means "optimised" so the bootloader will take up less space allowing you to use more options in your Marlin configuration.h.)
Tools | Programmer: "USBasp".
Tools | Burn Booloader. (This will generate the hex file to be transferred to the Anet board. Save it somewhere you will find it.)

Download and install AVRDUDESS if you haven't got it. I used Ver. 2.11. Connect the USBasp to the Anet board and your computer.

Start AVRDUDESS.
Port: usb.
Baud rate: 250000.
Hit the Detect button and it should identify your Anet board.
Hit the Flash [...] button and select the Blink.ino.with_bootloader.sanguino.hex file.
Hit the Program button. It should all work.

You now have an Anet board with the OptiBootLoader installed.

Now follow Crosslink's video tutorial above using the normal USB connection.


How can I add auto bed leveling before print? I want to add auto bed leveling before each print. When I enable auto bed level in configuration.h, it only shows auto bed in menu. I found this code in cardreader.cpp

void CardReader::openAndPrintFile(const char *name) {
    char cmd[4 + strlen(name) + 1]; // Room for "M23 ", filename, and null
    sprintf_P(cmd, PSTR("M23 %s"), name);
    for (char *c = &cmd[4]; *c; c++) *c = tolower(*c);
    enqueue_and_echo_command(cmd);
    enqueue_and_echo_commands_P(PSTR("M24"));
}

and changed it to

void CardReader::openAndPrintFile(const char *name) {
    char cmd[4 + strlen(name) + 1]; // Room for "M23 ", filename, and null
    sprintf_P(cmd, PSTR("M23 %s"), name);
    for (char *c = &cmd[4]; *c; c++) *c = tolower(*c);
    enqueue_and_echo_command("G28");
    enqueue_and_echo_command("G29");
    enqueue_and_echo_command(cmd);
    enqueue_and_echo_commands_P(PSTR("M24"));
}

Now before each print, the printer does auto bedding two times but when print starts the auto bedding is ignored and printer acts like before doing auto bed.

Please help me solve this.

I'm using Marlin Firmware 1.1.0.

Rather than modifying the firmware to handle this, have you considered a pre-processing script on your computer, greping for a G29 in the G-code, then adding a G28/G29 pair at the start of the file if no G29 is found?


Take a detailed model and make it suitable for 3D printing? I have a model I would like to print, specifically it is a free-for-personal-use model of a car, complete with interior.

I would like to print it, but it is unprintable. I have tried to fix it in netfabb, which works OK. But now I realised I have another problem - the inside of the car is hollow, and has a full interior. I just want the shell of the car and a solid block (complete with opaque 'windows').

How would I take a detailed model and somehow extract a solid 3D printable model from it?

I would recommend "The Maker's Muse" youtube video channel.

In particular this video Fixing impossible STL's with Meshmixer 3.1.118 BETA might solve your problem.

Few other videos which might help:

How to make Engineering Assemblies 3D Printable using Meshmixer
Add smoothness to your meshes using remeshing! 3D 101
A Detailed look at Processes and Profiles in Simplify3D
Tidy up your prints with the Modifi3D
How to Print Bigger Things - 3D Printing 101


Can't find a usable temperature for PLA I have a Monoprice MP10 Mini, a cut-down Creality CR-10 with lobotomized firmware. Heated bed.

I'm trying to do PLA prints, but have been unable to find a usable temperature.

If I set the temperatures (either nozzle or bed) too low, the initial raft layers don't stick, the print shrivels up, and the result is a tangle.

If I set the temperatures high enough to allow initial sticking, the raft prints okay, but after that the filament leaks out of the nozzle during long moves producing strings (only a little unsightly when outside the print area, but causing bumps when moves over the build and eventually the nozzle knocks into them) and all solid flat areas (ceilings/floors) warp.

If I start with a high temp but reduce it during the print, the layers stop sticking to each other, solid areas still warp, and the printer eventually fails to extrude anything (presumably the filament congeals inside the extruder or tube, that's very unpleasant to recover from, fortunately I have some cleaning filament).

Tried with multiple types of filament and multiple models (from thingiverse, converted into gcode using cura 3.6)

What should I be trying?

First, you shouldn't need a raft for most PLA prints. That will help you get better bed adhesion at lower temperatures.

Second, you can reduce the stringing by increasing travel speeds (120 mm/s is not too fast) and a small amount of retraction: around 1.5 mm for direct drive and 5-6 mm for bowden.

With those settings, you should be able to print most PLA with a bed at anywhere from 50-60 °C and an extruder at anywhere from 190 to 215 °C.


Ender 3 with BLTouch prints slanted lines I'm having a problem getting a clean first layer on an Ender 3 with BLTouch auto bed leveling. Thickness seems to fluctuate all over the bed, but in a consistent (repeatable) way. Here's my attempt to print a single layer 5 square bed calibration test:

I stopped the print midway through filling the first square, but you get the idea. Lines go from too low so no filament comes out to too high.

I printed this several (many) times with slight settings tweaks and it looks pretty much the same every time; the ups and downs aren't random. For example, the center square always is always too low on the left and too high on the right:

The printer is a SainSmart Ender 3 Pro with a BLTouch V3.1 and Creality glass bed, otherwise stock. I flashed a bootloader and Marlin 2.0 using the instructions and pre-compiled firmware from 3D Printing Canada. I'm using the glass bed upside-down on the plain glass side (no coating).

I pre-heated and leveled the four corners manually using the paper method. I auto-homed and then lowered the hot end until it would just catch a piece of paper and used that height to set the Z offset using M851 and saved it with M500. It's currently set at -2.80.

I added G29 to GCode start in Cura, and it does a 3x3 probe before the print starts. Here's the output when I run M420 V:

Bilinear Leveling Grid:
      0      1      2
 0 -0.207 +0.172 +0.162
 1 -0.100 -0.160 +0.220
 2 -0.118 +0.215 +0.295

Here's what it looks like in the Bed Visualizer plug-in in Octoprint:

If I understand this right (dubious) it's showing that the glass is lower toward the front and left, highest at back-right. But it's only 0.4mm from the lowest to highest points. And the whole point of mesh leveling is to compensate for this anyway.

At Paulster's suggestion I turned off mesh leveling using M420 S0, leveled manually, and printed again. The result is pretty similar (note that this time I let it run all the way through):

Where should I start looking to diagnose this problem?

Update

I noticed my X-axis belt was a bit loose, so I tightened it up. It seems to have helped with the odd Z slanting. My test print is still not great though, so this may not be the whole problem. Also I've never seen this effect listed as one caused by loose belts, so it's dubious as the cause. Here's the current test print after tightening the belt:

It's flatter, but I'm still getting (I think) under-extrusion and some odd wobbles at the corners.

This turned out to be a problem with the tightness of the rollers at the left and right sides of the X-axis gantry (that roll up and down the Z rails).
Z-axis motion is driven by a single stepper motor on the left side, so the rollers have to be just the right amount of tight to keep the right side in sync. If the right side is tighter or looser than the left then it lags behind, which gives the gantry a slight slant which changes as it goes up and down.
If the gantry is changing pitch throughout the print, no amount of bed leveling will help. Even auto-leveling is worthless, because the readings the BLTouch takes become immediately out of sync with the gantry as soon as it moves again.
The solution is to adjust the eccentric nuts in the rollers on the left and right. The best description I could find is that they need to be just tight enough that there's some resistance if you roll the top wheel with your finger, but loose enough that you can roll it without forcing the gantry up and down.
I ended up putting a magnetic digital level on top of the gantry rail so I could see exactly how much its incline changed. Send gcode to slide it up and down, then adjust the eccentric nuts a little bit, then repeat. Once I got it so the level didn't change, I re-leveled the bed and printed a beautiful first layer.
That was almost a year ago and it's been working ever since. I've had to re-adjust the eccentric nuts periodically when things start to get off, probably due to thermal expansion when the weather changes.


Test print coming out spongy I acquired an Anycubic Chiron yesterday. I went through the leveling procedure and I think the level test print came out okay so I printed a 20 mm calibration cube and a benchy. Both of these came out with a sort of spongy consistency.

I have no idea what could be causing this so some advice would be appreciated.

I'm using Ultimaker Cura 4.0.0 and printing in PLA.

It turned out I had the wrong filament size set in Ultimaker Cura. Fixing this resolved the issue.


Why do I have problems trying to get Slic3r to load a config file? I decided to fire up my 3D Printer again after a while.  I have new PCs, so I had to download Slic3r fresh, so I got the latest version (1.2.9).  Then I went and found my old config file.  It's really old, from 2013!
And Slic3r did not load it when I told it to, and consequently, when Octoprint was telling my Printrbot LC (custom) to print my things off Thingiverse, it was not in the bed, and the x axis skipped a few nubs, as would happen when you tell it it's too far away.
I recall having to double and triple check Slic3r to make sure that it actually loaded the configuration I spent time crafting and honing.  However, it's obviously been 3-4 years since I last played with this stuff, and this is a very low level feature that should have been fixed at Day 0 or 1.
I presume that I'm doing something wrong.  Do I need to stand on 1 leg and hold my mouth just right?  I don't even know how I could screw it up...
Update
I changed from "Simple" mode to "Advanced" mode, and the config imported fine.  Though, I don't think it was my most recent config.  C'est la software!

I changed from "Simple" mode to "Advanced" mode, and the config imported fine. Though, I don't think it was my most recent config. C'est la software!

Also, I switched to Cura after this.


OpenSCAD linear_extrude from multiple path svg import In OpenSCAD, I am trying to make a linear_extrude on a shape imported from an svg. The svg file contains multiple path. I would like to scale each path separately. I have tried the following code, but the whole import is considered a single shape resulting in the image below.
linear_extrude(height = 5, center = true, scale=1.2)
    import(file = "xxx.svg", center = true, dpi = 96);

How can I have each of the letters to have 'its own pyramid' ?
I know I could create one SVG per letter. But for simplicity sake I would like to have only one SVG file, as I want to create much more complex motives in the future. My final goal is to create stamps from SVG drawings.
Edit:
Alternative tried after Mick's comment (same result):
module pyramidChildren(height){
    for ( i= [0:1:$children-1])
      linear_extrude(height = height, scale=1.5)
        children(i);
 }

 pyramidChildren(5)
    import(file = "xxx.svg", center = true, dpi = 96);

I have tried to use the basic svg (multiple paths) and also to group each path (with only itself) without changes in the result.

Lame solution: creating stepped pyramid with offset. I realized that scale will not worked for motives with holes inside. Offset seems then more appropriate than scale for my application (creation of stamps)
It takes ages to render, but it could be enough for simple patterns. Any better solution are still welcome...
module buildPyramidalExtrude(height,maxOffset,nSlices){
    heightIncrement = height/nSlices;
    offsetIncrement = maxOffset/(nSlices-1);
    for(i=[1:nSlices])
        linear_extrude(height=i*heightIncrement)
              offset(r = maxOffset-(i-1)*offsetIncrement)
                children();
}

buildPyramidalExtrude(4,2.5,20)
   import(file = "Farm/cow.svg", center = true);


Does filament have to be stored in an airtight environment? For standard ABS and PLA filament, most distributors recommend storing the filament in an airtight bag.  Does not doing this actually make print quality worse?  I have left mine in the open for a year and have had no noticeable problems.

It makes a difference where I live, and I'm not in a particularly humid climate (California).  When printing with wet filament, you'll sometimes hear it popping and see steam coming out of the extruder (it's usually only this extreme with nylon).  With most other filaments, when they're wet, the extruded filament will have small bubbles in it and the surface finish of the parts will be rougher, with breaks in the layer lines.  It can also lead to more oozing and stringing.  Air print a few centimeters of filament and look at it closely to see if there's any bubbles, if not, it's probably dry enough.  Whether the filament absorbs enough water to be noticeable in a few hours, in a day, or in a week depends a lot on the filament (and I assume the humidity too).  I'm mostly noticed problems with nylon, ABS, and NinjaFlex, less with PLA and PETG (though I avoid leaving any filament out for more than a day).

If you're not seeing any difference between, then I wouldn't worry about it.  Storing filament dry is a hassle.


What causes this "stringing" and can my print recover from this? Here's what it looks like

This is the model
thingiverse linky

It looks like it couldn't print the edge, but this happened many many hours after printing the brim.

This did not happen with my 1st attempt at this print. The last print lost adhesion and I had to scrap it. This time, adhesion looks good so not sure why this happened.

Printing with Monoprice Select V2 with ABS, sliced with Cura. 100C bed / 250C extruder. 15mm/s initial layer speed. 60 mm/s print speed.

Update
It looks like the printer is starting to smooth it out like so. Still not sure if this will lead to an ok print or will fail because of this layer.
And it seems the stringing area does not have a brim underneath it. Did Cura just not calculate the brim size correctly?

Update2
Here's a few screenshots from Cura to show that the model is lying completely flat.

I let the print go on overnight and here's where I stopped it

It almost seems like the print shifted completely after printing the initial layer. Have you ever seen anything like this or is there anything in my Cura model that would make it do this?

No, your problem is not related to slicing, this is a hardware problem. Your complete print has shifted, this is called layer shift.

This could happen when the nozzle hits an obstruction while printing while the Y stepper continues. This could lead to skipping teeth on the belts, slipping of the pulley or missing steps. This results in printing over air as the print progresses. This manifests itself as stringing, but in fact is unsupported printing (in the air). In this case it is unrecoverable as the printer has lost the reference frame, it just continues to print with the new reference frame caused by the layer shift.

A Prusa MK3, or any printerboard using trinamic stepper drivers would be able to recover (if the belt and pulley are correctly attached, and steps are missed) as the skipping of steps is detected, in case of a Prusa  MK3 the machine will re-home when it detects skipped steps and continue printing. See also this answer for more details.

Possible solutions are increasing the belt tension, increase the stepper torque by increasing the current through the stepper drivers or re-tighten the pulley on the stepper of the Y belt.


Problem in 3D printing of an empty model I'm new to 3D printing. I modeled an empty bird in Blender (the stl file of model is presented). I tested the model in Blender (using 3D printing tool) and also the Netfabb software. They don't show any error. However, when I load this model in Ultimaker Cura for printing, as shown in the last image, the result is only a cylinder shape bird. I have seen many 3D printed empty models on internet.  Why can't my model be printed correctly?
the download link of the model

You have modeled your bird. So far so good, but you likely only modeled a single surface and not a closed surface body. The crucial step was forgotten, as your pictures 1 and 2 show: you have designed a single surface for most of the object, not a body. To turn the bird into a printable object needs it not to be a single surface but a surface enclosing a volume that has some thickness.

At the moment, it looks like this: 640 vertices, NO enclosed space.

To achieve an even thickness object in blender:

A to choose the whole model
E for extrude Region
Z Z to constrain movement to Z axis
type in the wanted thickness

remember, that the grid in Blender is usually in cm, while slicing programs reference in mm!

close the edges by creating faces there (chose 3 and F)

A to grab everything
W then R to remove doubles, increase the merging distance to 0.05 (it takes away hundreds of superfluous, slightly shifted vertices!)
CTRL+N to recalculate normals

Make sure to check the slicer, because we have some strays, visible in red... where are those? They are faces hidden in the body!

Hide the underside (Select nothing, allow viewing through the object, 3 > B > draw a box around the lowest layer > H)

If you have the normals visible, you'll see the iffy areas now. Fix them by removing the superfluous faces and flipping those that are not superfuous but just inside out (W>F). One example area I highlight in the next picture

In the end, it should look like this in cura:

Make sure to check layer view and possibly thicken some areas manually - or make a box-part for the top, so you can ensure printability. As you'll see, at some scales, some walls are too thin due to how we extruded along Z only.

Alternate ways

As noted in the comments, instead of the Z-Extrude, a model with very vertical walls could benefit from using the solidify modifier. You will have to add it via object mode, modifiers and then choosing solidify and setting a positive thickness. To properly convert the visible modifier into an actual change of the model for the export, you will have to Apply the modifier.

Afterwards, go back to hunting stray internal surfaces and flipped faces.


How to configure Marlin to enable auto-fans with dual extruder I have successfully assembled my custom-built 3D printer and configured Marlin for two extruders and one heated bed. Here is a picture of the printer.

My heated bed runs on a linear axis with ball bearings. When the printer has been running for an hour or so these parts get really hot and I am afraid that the plastic parts will melt if I print any longer or with higher temperatures. So I decided to add fans below the heated bed to keep them cool.
A known problem when using two extruders and a heated bed is, that all three power outputs D8, D9, D10 are in use (in my setup D8 belongs to the first extruder, D9 to the bed, and D10 to the second extruder). If you want to have software-controlled fans on top of that, you need to use a workaround. I bought the RRD fan extender which does exactly what I need. You plug it into the RAMPS 1.4 board and get two new outputs D6 and D11.

Currently I have configured the firmware as follows:
#define E0_AUTO_FAN_PIN 11
#define E1_AUTO_FAN_PIN 6

This automatically enables the fan of the left extruder E0 when its hotend exceeds 50 °C. The same goes for the right extruder E1. The fans are plugged into the fan extender's outputs D6 and D11. It all works fine.
Now to add fans to the heated bed, I have modified the firmware so that D11 controls both extruder fans. As long as at least one extruder is hot, both fans are running. For that purpose, I connected both extruder fans in parallel to D11 and modified the firmware as follows:
#define E0_AUTO_FAN_PIN 11
#define E1_AUTO_FAN_PIN 11

That part works fine and was quite easy to achieve. What I would like to do next is connect the other pin, D6, to the temperature sensor of the heated bed, so that the fans underneath the bed become active when the bed is at 50 °C or more.
I made several attempts to trick the firmware into believing that there are three hotends, registering the heated bed as E2.
#define E2_AUTO_FAN_PIN 6

I manually defined the temperature sensor of the bed for E2 and commented out some sanity checks and conditionals to enable some parts of the firmware that control the auto-fans. While I get the code to compile, the printer usually halts immediately after it is turned on or as soon as an extruder or the bed is activated. The error messages are not very helpful ("killed, please restart" etc).
Does anybody know a good way how to achieve my goal? Any help would be appreciated. Thank you in advance.

After trying many different things, I found out that the solution is really simple and requires only a few lines of code. I'll answer my own question in the hope that this will help someone.
First, I defined a few constants (macros actually). To keep my own stuff separate, I created a new file for them called myconfig.h:
#define MY_BED_TEMP_THRESHOLD 50
#define MY_BED_AUTO_FAN_PIN 6
#define MY_BED_AUTO_FAN_SPEED 255

The pin constant corresponds to D6 which is the green marked output of the RRD Fan Extender where I connected the fans under my bed.

Second, in the file temperature.cpp of the Marlin Firmware, I included my file and added four lines of code:
#include "myconfig.h"

...

#if HAS_AUTO_FAN

  void Temperature::checkExtruderAutoFans() {

    ...

    HOTEND_LOOP() {
      if (current_temperature[e] > EXTRUDER_AUTO_FAN_TEMPERATURE)
        SBI(fanState, fanBit[e]);
    }

    // --- start of my code ----------
    if (current_temperature_bed > MY_BED_TEMP_THRESHOLD)
      digitalWrite(MY_BED_AUTO_FAN_PIN, MY_BED_AUTO_FAN_SPEED);
    else
      digitalWrite(MY_BED_AUTO_FAN_PIN, 0);
    // --- end of my code ------------

    ...

#endif // HAS_AUTO_FAN
...

Now my fans are automatically turned on while the bed temperature is higher than 50 °C and are turned off again after the bed has cooled down far enough.


What causes this characteristic pattern and what is it called? I am using a Qidi Tech 1 (Flashforge Creator Pro). There is no auto bed leveling and I have done my best to tweak it by hand using the screws underneath the heated bed plate.
What is causing this characteristic pattern? This while printing the first layer of some test pattern. I don't know what the end result is supposed to look like.

These "stretch marks" are typically the result of a nozzle that is a little too close to the build surface. Next time levelling be sure to use a thicker piece of paper or allow for less drag when moving the the paper between nozzle and bed.


Prusa XI3 Extruder Calibration I have done the calibration for the x, y, and z axis and everything works fine there. However when I went to do the calibration for extruder things got a little weird. The original number programmed on the board for the step per mm was 98 When I did my first measurements I used 120mm as the mark on the filament then extruded 100mm then remeasured the mark it was 37.66. Then by using the new_e_steps = old_e_steps * (100/(120-distance). I would use the new number and upload it to the printer which was 119.0187. After that I took another measurement, the new measurement was 61.27mm after marking 120mm then extruding 100mm of filament. Using the formula it came out to be 202.6540. Then the new measurement was some where around 80 some MM. It seams that the more I do the calibration the less accurate it gets. What am I doing wrong here?Triffid Hunters Calibration is the guide I have been using and this link is to the specifications to the printer HE3D Prusa XI3.

It is really strange that although you increased the steps per mm, the amount extruded was less. I can think of two possible explanations:

You are extruding too quickly, at a rate at which the extruder can't keep up melting the filament fast enough, causing the filament to slip or the extruder to miss steps: try lowering the feedrate (a feedrate like 100mm/min is typical for 1.75mm filament) and make sure that the temperature is appropriate to your filament.
You are in absolute coordinate mode, and when you try to extrude 100mm it actually extrudes a different amount (based on the previous "position" of the extruder). Enter relative coordinate mode using G91.


MakerBot replicator 2x glitches I have access to a MakerBot Replicator 2X which I use to try to print ABS + dissoluble (both are MakerBot's original filaments). It is really a pain and the filaments most often gets clogged (80% of the prints have to be thrown away). I a supposed to use the printer in a professional context, but at the moment it is really problematic and I feel pressure going up...

I have initially tried the default parameters provided by the machine for known filaments (ABS: 230°C / dissoluble: 250°C / plate: 110°C + 0.1mm layers). As the nozzle got clogged I have made many other attempts with varying parameters and up to (250°C / 270°C / 135°C), which slightly improves things but is far from being really usable.

Any idea of where this comes from?
 - ABS being notoriously difficult to print?
 - The Replicator 2x being old tech?
 - A parameters problem?

Any advice on what I should do to improve the situation?

I don't have a profile that has settings for the dissolvable filament anymore, but this is one I use for thin layers (second extruder at 232C my first extruder isn't working so just ignore that one).

You may want to try printing small simple objects with each extruder independently first to confirm that you have good settings, then try both together after you know you have good settings. ABS is a pain but mostly for warping and sticking to the build plate. The dissolvable filament I believe is PLA if you're using Makerbot materials.

{
       "_attached_extruders" : [ "mk8", "mk8" ],
       "_bot" : "replicator2x",
       "_extruders" : [ 0 ],
       "_materials" : [ "abs", "abs" ],
       "adjacentFillLeakyConnections" : false,
       "adjacentFillLeakyDistanceRatio" : 0,
       "anchorExtrusionAmount" : 5.0,
       "anchorExtrusionSpeed" : 2.0,
       "anchorWidth" : 2.0,
       "backlashEpsilon" : 0.050,
       "backlashFeedback" : 0.90,
       "backlashX" : 0.0,
       "backlashY" : 0.090,
       "bedZOffset" : 0.0,
       "bridgeAnchorMinimumLength" : 0.80,
       "bridgeAnchorWidth" : 0.80,
       "bridgeMaximumLength" : 80.0,
       "bridgeSpacingMultiplier" : 1.0,
       "coarseness" : 9.999999747378752e-005,
       "commentClose" : "",
       "commentOpen" : ";",
       "computeVolumeLike2_1_0" : false,
       "defaultExtruder" : 0,
       "defaultRaftMaterial" : 0,
       "defaultSupportMaterial" : 0,
       "description" : "External Definition",
       "doAnchor" : true,
       "doBacklashCompensation" : false,
       "doBreakawaySupport" : true,
       "doBridging" : true,
       "doDynamicSpeed" : false,
       "doDynamicSpeedGradually" : true,
       "doDynamicSpeedInteriorShells" : false,
       "doDynamicSpeedOutermostShell" : true,
       "doExponentialDeceleration" : false,
       "doExternalSpurs" : true,
       "doFixedLayerStart" : false,
       "doFixedShellStart" : true,
       "doInfills" : true,
       "doInsets" : true,
       "doInternalSpurs" : false,
       "doMixedRaft" : false,
       "doMixedSupport" : false,
       "doOutlines" : true,
       "doPrintLayerMessages" : false,
       "doPrintProgress" : true,
       "doPurgeWall" : false,
       "doRaft" : true,
       "doSplitLongMoves" : true,
       "doSupport" : true,
       "doSupportUnderBridges" : false,
       "endGcode" : "",
       "exponentialDecelerationMinSpeed" : 0.0,
       "extruderProfiles" : [
          {
             "bridgesExtrusionProfile" : "bridges",
             "feedDiameter" : 1.820000052452087,
             "feedstockMultiplier" : 0.9300000000000001,
             "firstLayerExtrusionProfile" : "firstLayer",
             "firstLayerRaftExtrusionProfile" : "firstLayerRaft",
             "floorSurfaceFillsExtrusionProfile" : "floorSurfaceFills",
             "infillsExtrusionProfile" : "infill",
             "insetsExtrusionProfile" : "insets",
             "layerHeight" : 0.20,
             "maxSparseFillThickness" : 0.20,
             "nozzleDiameter" : 0.40,
             "outlinesExtrusionProfile" : "outlines",
             "raftBaseExtrusionProfile" : "raftBase",
             "raftExtrusionProfile" : "raft",
             "restartExtraDistance" : 0.0,
             "restartExtraDistance2" : 0,
             "restartExtraRate" : 25.0,
             "restartExtraRate2" : -1,
             "restartRate" : 25.0,
             "restartRate2" : 25,
             "retractDistance" : 1.700000047683716,
             "retractDistance2" : 0,
             "retractRate" : 25.0,
             "retractRate2" : 50,
             "roofSurfaceFillsExtrusionProfile" : "roofSurfaceFills",
             "sparseRoofSurfaceFillsExtrusionProfile" : "sparseRoofSurfaceFills",
             "toolchangeRestartDistance" : 18.50,
             "toolchangeRestartRate" : 6.0,
             "toolchangeRetractDistance" : 19.0,
             "toolchangeRetractRate" : 6.0
          },
          {
             "bridgesExtrusionProfile" : "bridges",
             "feedDiameter" : 1.769999980926514,
             "feedstockMultiplier" : 0.9300000000000001,
             "firstLayerExtrusionProfile" : "firstLayer",
             "firstLayerRaftExtrusionProfile" : "firstLayerRaft",
             "floorSurfaceFillsExtrusionProfile" : "floorSurfaceFills",
             "infillsExtrusionProfile" : "infill",
             "insetsExtrusionProfile" : "insets",
             "layerHeight" : 0.20,
             "maxSparseFillThickness" : 0.20,
             "nozzleDiameter" : 0.40,
             "outlinesExtrusionProfile" : "outlines",
             "raftBaseExtrusionProfile" : "raftBase",
             "raftExtrusionProfile" : "raft",
             "restartExtraDistance" : 0.0,
             "restartExtraDistance2" : 0,
             "restartExtraRate" : 25.0,
             "restartExtraRate2" : -1,
             "restartRate" : 25.0,
             "restartRate2" : 25,
             "retractDistance" : 1.399999976158142,
             "retractDistance2" : 0,
             "retractRate" : 25.0,
             "retractRate2" : 50,
             "roofSurfaceFillsExtrusionProfile" : "roofSurfaceFills",
             "sparseRoofSurfaceFillsExtrusionProfile" : "sparseRoofSurfaceFills",
             "toolchangeRestartDistance" : 18.50,
             "toolchangeRestartRate" : 6.0,
             "toolchangeRetractDistance" : 19.0,
             "toolchangeRetractRate" : 6.0
          }
       ],
       "extruderTemp0" : 228,
       "extruderTemp1" : 232,
       "extrusionProfiles" : {
          "bridges" : {
             "fanSpeed" : 0.50,
             "feedrate" : 40.0
          },
          "firstLayer" : {
             "fanSpeed" : 0.50,
             "feedrate" : 10.0
          },
          "firstLayerRaft" : {
             "fanSpeed" : 0.50,
             "feedrate" : 50.0
          },
          "floorSurfaceFills" : {
             "fanSpeed" : 0.50,
             "feedrate" : 40.0
          },
          "infill" : {
             "fanSpeed" : 0.50,
             "feedrate" : 40.0
          },
          "insets" : {
             "fanSpeed" : 0.50,
             "feedrate" : 40.0
          },
          "outlines" : {
             "fanSpeed" : 0.50,
             "feedrate" : 10.0
          },
          "raft" : {
             "fanSpeed" : 0.50,
             "feedrate" : 90.0
          },
          "raftBase" : {
             "fanSpeed" : 0.50,
             "feedrate" : 10.0
          },
          "roofSurfaceFills" : {
             "fanSpeed" : 0.50,
             "feedrate" : 90.0
          },
          "sparseRoofSurfaceFills" : {
             "fanSpeed" : 0.50,
             "feedrate" : 90.0
          }
       },
       "fixedLayerStartX" : 0.0,
       "fixedLayerStartY" : 0.0,
       "fixedShellStartDirection" : 215.0,
       "floorSolidThickness" : 0,
       "floorSurfaceThickness" : 0,
       "floorThickness" : 1.0,
       "gridSpacingMultiplier" : 1.0,
       "infillDensity" : 0.3000000119209290,
       "infillOrientationInterval" : 90,
       "infillOrientationOffset" : 0,
       "infillOrientationRange" : 90,
       "infillShellSpacingMultiplier" : 0.70,
       "insetDistanceMultiplier" : 1.0,
       "jsonToolpathOutput" : false,
       "layerHeight" : 0.1199999973177910,
       "leakyConnectionsAdjacentDistance" : 0.0,
       "maxConnectionLength" : 10.0,
       "maxSparseFillThickness" : 0.1000000014901161,
       "maxSpurWidth" : 0.50,
       "minLayerDuration" : 5.0,
       "minLayerHeight" : 0.010,
       "minRaftBaseGap" : 0.0,
       "minSpeedMultiplier" : 0.30,
       "minSpurLength" : 0.40,
       "minSpurWidth" : 0.120,
       "minThickInfillImprovement" : 1.0,
       "modelFillProfiles" : {},
       "numberOfShells" : 2,
       "platformTemp" : 110,
       "purgeBucketSide" : 4.0,
       "purgeWallBaseFilamentWidth" : 2.0,
       "purgeWallBasePatternLength" : 10.0,
       "purgeWallBasePatternWidth" : 8.0,
       "purgeWallModelOffset" : 2.0,
       "purgeWallPatternWidth" : 2.0,
       "purgeWallSpacing" : 1.0,
       "purgeWallWidth" : 0.50,
       "purgeWallXLength" : 30.0,
       "raftAligned" : true,
       "raftBaseAngle" : 0.0,
       "raftBaseDensity" : 0.6999999880790710,
       "raftBaseLayers" : 1,
       "raftBaseRunGapRatio" : 0.8000000119209290,
       "raftBaseRunLength" : 15.0,
       "raftBaseThickness" : 0.3000000119209290,
       "raftBaseWidth" : 2.50,
       "raftExtraOffset" : 0.0,
       "raftFillProfiles" : {},
       "raftInterfaceAngle" : 45.0,
       "raftInterfaceDensity" : 0.3000000119209290,
       "raftInterfaceLayers" : 1,
       "raftInterfaceThickness" : 0.2700000107288361,
       "raftInterfaceWidth" : 0.4000000059604645,
       "raftModelSpacing" : 0.3499999940395355,
       "raftOutset" : 4.0,
       "raftSurfaceAngle" : 0.0,
       "raftSurfaceLayers" : 3,
       "raftSurfaceShellSpacingMultiplier" : 0.6999999880790710,
       "raftSurfaceShells" : 2,
       "raftSurfaceThickness" : 0.1400000005960465,
       "roofAnchorMargin" : 0.40,
       "roofSolidThickness" : 0,
       "roofSurfaceThickness" : 0,
       "roofThickness" : 1.0,
       "shellsLeakyConnections" : false,
       "solidFillOrientationInterval" : 90,
       "solidFillOrientationOffset" : -45,
       "solidFillOrientationRange" : 90,
       "sparseInfillPattern" : "hexagonal",
       "splitMinimumDistance" : 0.40,
       "spurOverlap" : 0.0010,
       "startGcode" : "",
       "startPosition" : {
          "x" : -112,
          "y" : -73.0,
          "z" : 0
       },
       "supportAligned" : false,
       "supportAngle" : 30.0,
       "supportDensity" : 0.2000000029802322,
       "supportExcessive" : false,
       "supportExtraDistance" : 0.50,
       "supportFillProfiles" : {},
       "supportLayerHeight" : 0.2000000029802322,
       "supportLeakyConnections" : false,
       "supportModelSpacing" : 0.2000000029802322,
       "supportRoofModelSpacing" : 0.4000000059604645,
       "thickLayerThreshold" : 0,
       "thickLayerVolumeMultiplier" : 1,
       "travelSpeedXY" : 150.0,
       "travelSpeedZ" : 23.0,
       "version" : "3.9.4"
    }


It isn't hidden at all. It's just that the Z-axis position only changes with each layer change, so the Z coordinate is only passed at layer change. On line 17 of your example G-code, it starts the first layer at Z=0.5mm:

G1 Z0.500 F7800.000

The next time you should expect Z to appear is on the next layer.


Layer 1 won't adhere anymore I have a new Tevo Tornado, which I have completed two good prints with, a 20x20 test cube from the supplied SD and the spool holder also from the SD. I say this to note that the printer was capable of producing a good print.

Print 3 was a design I created in Fusion and it printed badly, very disappointing holes missing. Stringing gaps between material just rubbish. I downloaded a simple print from Thingiverse just to see if it was my poor design skills or the printer and that came out just as poorly: lots of strings between details. Both of these were sliced in Cura. As that doesn't have a tornado driver, I downloaded one from the support group and the prints have not even started properly, see pictures for example.

I might be going down rabbit holes here but this is what I have found and tried:

1 relieved bed - done to ridiculous degree of accuracy, cold gross levelling then bed and nozzle at PLA working temp using feeler gauges. I have done 0.1 mm, 0.15 mm, 0.2 mm

Now I have added to the suspicion the z axis coupler see images below:

YouTube videos, that I have seen, show couplers that are not a spring - any thoughts? I would certainly appreciate the time anyone has to impart their knowledge.

EDIT 1: (Additional information posted as comment, now moved to question)

The print bed is brand new from Tevo the unit has only done a few prints most aborted, and I also thought perhaps a residue from the feeler gauges had contaminated the bed, but I have cleaned it with alcohol wipes and also tried putting prints on to unused parts of the bed. You are right the g-code from the test print was from an unknown slicer, no doubt tuned by the manufacturer the part I designed in Fusion was sliced by cura. I have since tried the original test piece and it fouls the extruder nozzle almost straight away.

The main differences and there are not many between the set up parts, are that the Cura code does a G92 E0 G1 F1500 E-3.5 before starting layer 0 (both set z0,3). The test piece just does a G92 E0 G1 F7200 the feed rates are different the cura print sets M204 S500 and the test sample sets no acceleration. I assume there is a default in the Marlin firmware.. there is no doubt some globs of PLA stick like in dots between the strings, but the extrusion between direction changes do not kind of like join the dots where dots stick and joins don't.

I am going to change the coupler because, well, I don't know what else to do. Replacing it with a better one can't help. Other things I have thought about - PLA temps - I have gone up the whole range according to the manufacturers bandwidth in 5 degree increments no difference I have also done some bed changes but neither hotter nor colder (it's 30°C and humid at the moment, so maybe a materials property issue, but then again no difference in conditions between a successful first test and all the messes). I am storing the PLA in a gel bead box to reduce humidity. still basically stumped!

EDIT 2: (Additional information posted as comment, now moved to question)

Thanks for your observation, it's a new bed and I clean down with alcohol wipes ( isopropyl) I don't think I have ever put a finger on the bed - very aware of that. While I don't know what I am talking about on the one hand I am semi convinced it is not the bed, anyway I am going to get a glass bed in part to deal with the protruding screw head issue.

The "springs" connected to the stepper motors aren't a problem.  They are special shaft couplers which allow some relief if the motor mounts are not strictly perpendicular to the lead screws.  They are very rotationally stiff and allow just a little bit of misalignment between the shafts.

The first two prints were from the SD card.  You didn't talk about slicing from an STL file, so it is possible that they were pre-sliced for this machine.  Every G-code file has introductory code that initializes some aspects of the operation.  Check the "preamble" code at the front of the files you have sliced.  Are there commands that look different?  Is the Z parameter for the first layer different from the pre-sliced files?  Are there G-codes missing from the files you sliced?

If you are trying to understand what the G-codes do, this resource may be helpful.  Some possible commands could be commands to limit acceleration, jerk, speed, or introduce offsets.  Also check that the temperatures are being set correctly in the G-code you generated.

If you had sliced the files on the SD card, then double check that the parameters were the same.  Try re-slicing the object and comparing the G-code that is generated.


What pins do I use for UART control on a RUMBA board for tmc2208? I have been looking in the Marlin firmware for about an hour or two now to find what pins I should use for UART for my tmc2208 drivers and I have come up with nothing.

Does anyone know what they are or how to assign them? BTW, I am using the regular version of the RUMBA board not the RUMBA+ version.

For somereason i didn't put that i want to control my stepper motor drivers through uart they are tmc2208

The RUMBA schematic is available on the RUMBA wiki.

From the schematic, I see that UART3 (with +5V logic levels, not RS232) is presented on the EXP3 connector.  I don't know if Marlin firmware can be controlled through a UART other than UART0, which is converted to USB through an FDDI chip.  The Arduino bootloader is not expecting another UART, so you may still need to program it through the USB port (and UART0).


ANet A8 running Marlin v1.1.9 Auto Bedlevel with ROKO SN04-N I'm trying to get the ROKO (SN04-N) sensor to work with my Anet A8. First of all, while trying to screw it to the extruder, I tightened it too much and sort of broke the acrylic plate... sort of. I had to use a very thin steel plate with two holes to enforce the acrylic plate. It still works.

Now, I followed instructions in this video. (Please note that the video is not in English.) After the first "Auto Home" operation, the guy draws on the bed and then measures. My measurements are slightly different.

At the 19-minute mark, the guy is hard-coding the values but I don’t understand how he calculated them? My measured offsets are: X_PROBE_OFFSET_FROM_EXTRUDER 16 and Y_PROBE_OFFSET_FROM_EXTRUDER 58. In his video, his calculations were 18 mm for the X offset and 57 mm for the Y offset. Either way, I’m not able to compile the code as a sanity check fails:

`static_assert(FRONT_PROBE_BED_POSITION >= MIN_PROBE_Y, "FRONT_PROBE_BED_POSITION is outside the probe region.");`

Here are the sensor limitation values from the configuration file:

// Set the boundaries for probing (where the probe can reach).
#define LEFT_PROBE_BED_POSITION 20 //MIN_PROBE_EDGE
#define RIGHT_PROBE_BED_POSITION 200 //(X_BED_SIZE - MIN_PROBE_EDGE)
#define FRONT_PROBE_BED_POSITION 47 //MIN_PROBE_EDGE
#define BACK_PROBE_BED_POSITION 200 //(Y_BED_SIZE - MIN_PROBE_EDGE)

What am I doing wrong?

Note that I'm using Marlin Firmware v1.1.9

Too bad you broke the acrylic plate (nice temporary fix though), but you can easily print a replacement part once your machine is up and running.

Probe positioning is defined in the Marlin configuration as:

 *      +-- BACK ---+
 *      |           |
 *    L |    (+) P  | R -- probe (20,20)
 *    E |           | I
 *    F | (-) N (+) | G -- nozzle (10,10)
 *    T |           | H
 *      |    (-)    | T
 *      |           |
 *      O-- FRONT --+
 *    (0,0)

This implies that your sensor is located on the back-right when facing the machine and need to have the following constants set:

#define X_PROBE_OFFSET_FROM_EXTRUDER 16   // X offset: -left  +right  [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 58   // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0    // Z offset: -below +above  [the nozzle]

In order to calculate the correct limits of travel for the sensor, you need to subtract the offset values from the bed size at the max limits.

An additional offset may be required for some sensors, so please add an additional offset in the configuration by defining:

#define MIN_PROBE_EDGE 10

As the sensor is off-center with respect to your nozzle, one can only assume that you have no extra space to move the whole printhead and therefore need to confine the head within the limits of the max/min bed size (there should be some extra space, this can be seen from the offsets for the origin as in values for X_MIN_POS and Y_MIN_POS, but for the sake of simplicity these will not be taken into account).

Basically, your positive Y and positive X offset result in the following schematic.

Or, if you include the #define MIN_PROBE_EDGE [value]

Bed limits for the sensor then will need to be calculated based on the values of your offset of the sensor. E.g. when your nozzle is at (X=0, Y-0), or (0, 0), your sensor is at (16, 58). If you don't want to move the head further left and forward (to respect to origin as limit!), this is the minimum position of the sensor. When the sensor is at the back-right position of (220, 220), the actual head is at (220-16=204, 220-58=162).

This means that the limits for the sensor without a minimum offset are (16, 58) and (220, 220):

#define LEFT_PROBE_BED_POSITION (X_PROBE_OFFSET_FROM_EXTRUDER + MIN_PROBE_EDGE)
#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - MIN_PROBE_EDGE)
#define FRONT_PROBE_BED_POSITION (Y_PROBE_OFFSET_FROM_EXTRUDER + MIN_PROBE_EDGE)
#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - MIN_PROBE_EDGE)

would translate with a MIN_PROBE_EDGE = 0 to:

#define LEFT_PROBE_BED_POSITION 16
#define RIGHT_PROBE_BED_POSITION 220
#define FRONT_PROBE_BED_POSITION 58
#define BACK_PROBE_BED_POSITION 220

and would translate with a MIN_PROBE_EDGE = 10 to:

#define LEFT_PROBE_BED_POSITION 26
#define RIGHT_PROBE_BED_POSITION 210
#define FRONT_PROBE_BED_POSITION 68
#define BACK_PROBE_BED_POSITION 210

The assertion in code: FRONT_PROBE_BED_POSITION >= MIN_PROBE_Y would now translate to (58 >= 58) (or 68 >= 58), in your case it was (47 >= 58) which clearly is not true.

Please look into this answer, this answer or this answer for more information.


How to prevent bend (or warping) with M3D printer? Hello is there a way to prevent bend on print with M3D printer?

You can to print a brim, a thin layer on the bottom connected to the model. This will help hold it in place. Since it is thin (one or two layers) it will not warp itself.

The brim is not the same thing as a raft. A raft is under the model. The brim is on the same layer as the models bottom layer but outside the model. It looks something like this:

I assume that you use a heated bed if you have one?

Also, it is imperative that you get a good first layer. Calibrate your machine carefully.