How can we build a Vertical Printhead?


#1

Hello, the plotter is great so far, but I’ve noticed the pressure and angle of the pen holder arm is aggressive at times. I’ve even broken a few technical pens from the arm slamming it down too hard and then trying to continue to draw.

Below is another plotter arm that raises and lowers straight up and down, without the stock cantilever approach. I’m sure this is possible with all the Makeblock parts available. Will be trying to piece this together myself but any insight is much appreciated.


#2

I’ve noticed that at init the servo gets set to some value that pushes the barrel of the pen against the carriage. Then when I do G01 Z34 or Z15 it’ll slam it down pretty hard. I haven’t debugged that yet because I just don’t put the pen in until init is done and I can set G01 Z15.

Is it that slam that broke your pens or the difference between Z15 and Z34 during a plot?

I expect the slam could be fixed by setting the servo to a different value during init or doing a slower move after init. I don’t think Z moves respect the feedrate parameter in g-code though.


#3

Yeah I’ve noticed when the servo pushes the pen barrel up way too high as soon as it gets usb power. Now I plug it in and then put a pen in after. But it wasn’t the slamming down inasmuch as the rapidograph pen bit into the paper and the carriage kept moving and well, the pen lost.

On a different note, how are you sending g-code to the orion chip? The registration in the Mdraw app isn’t all that great when trying to print multiple inks.


#4

I’m using the GCodeParser firmware with some minor modifications to allow the UniversalGCodeSender 3rd party application to send gcode. I’ve written it up here: http://forum.makeblock.cc/t/how-to-setup-the-plotter-for-g-code-use/5663/27

I think the pin settings in the firmware that I created disagree with the build instructions so I would ignore that part but they work for me because I wired it wrong :wink:


#5

Hey Right on, I will try this. I was thinking I was gonna have to hook up a raspberry pi and run that into the orion board.


#6

Oddly enough I solved this problem today. I’ve made a new file in the gcode parser called PenServo. Here’s an overview:

The function MoveServoToDegreesWithDelay will move the servo in 1 degree steps from where it is to where it needs to go. It pauses between each step for n milliseconds. The pause is programmable by setting ikServoDelayMsMax.

// PenServo.Ino Functions and variables for handling the servo which drives the pen up an down.
// 2016-11-05 : Started

#include <Servo.h>

Servo ZServo;  // Create the servo object

static float ServoDegrees = 0.0 ; // This is a copy of what we hope the Servo is at
static float kOffPaperDegrees = 60.0 ;

void LiftPen ()
{
    ZServo.write(kOffPaperDegrees);    
}

void MoveServoToDegreesDirect (const float kDegs)
{
    ZServo.write(kDegs); 
    ServoDegrees = kDegs ;
}

// These help set the speed of the servo
static int iServoMsDelayPerDeg = 10 ; 
static const int ikServoDelayMsMax = 1000 ; 

void MoveServoToDegreesWithDelay (const float kDegs)
{
    Serial.print("move servo with delay ="); 
    Serial.print(iServoMsDelayPerDeg) ;
    
    // How big is the arc we have to move through?
    const double kDeltaDegs = kDegs - ServoDegrees ;

    // We start here, from where the servo is currently at
    double IntermediateDegs = ServoDegrees ;
    if (kDeltaDegs > 0) {
        while (IntermediateDegs < kDegs) {
            delay (iServoMsDelayPerDeg) ;
            ZServo.write(IntermediateDegs); 
            IntermediateDegs += 1.0 ;
        }
        
    } else if (kDeltaDegs < 0) {
        while (IntermediateDegs > kDegs) {
            delay (iServoMsDelayPerDeg) ;
            ZServo.write(IntermediateDegs); 
            IntermediateDegs -= 1.0 ;
        }
        
    } else {
        // No movement required, do nothing
    }
    
    ServoDegrees = kDegs ;
}

void SetZServoDelayMs (const int ikMsDelay)
{
    if ((ikMsDelay > 0) && (ikMsDelay < ikServoDelayMsMax)) {
        iServoMsDelayPerDeg = ikMsDelay ;        
    }
}

#7

I’m also thinking of a pen in a tube. The servo lifts the pen off the paper. The pen presses down with gravity.

Maybe some adjustable weights, gravity is more reliable than a rubber band which will slowly lose it elasticity.


#8