Delta Calibration Wizard now online

A place to talk about developmental stuff (firmware/software/hardware etc)
grat
Noob
Posts: 2
Joined: Sat Nov 28, 2015 11:20 am

Re: Delta Calibration Wizard now online

Post by grat »

Yeah I contacted support over lunch and Ryan suggested the same and to try it again basically. So I went through the wizard for the 4th time and of course that time it worked as expected.

The results also fixed my bottom layer problems too!

fj..

User avatar
Tonkabot
Printmaster!
Posts: 233
Joined: Wed Mar 05, 2014 1:28 pm
Location: Minnesota

Re: Delta Calibration Wizard now online

Post by Tonkabot »

I have a Max V2 with upgraded arms from Brian. What would I have to do to add this capability to my machine?

I assume I would need the accelerometer board and newer software in my Rambo... And then mount my head in that new board?

Brynn

User avatar
Jimustanguitar
ULTIMATE 3D JEDI
Posts: 2631
Joined: Sun Mar 31, 2013 1:35 am
Location: Notre Dame area
Contact:

Re: Delta Calibration Wizard now online

Post by Jimustanguitar »

Tonkabot wrote:I have a Max V2 with upgraded arms from Brian. What would I have to do to add this capability to my machine?

I assume I would need the accelerometer board and newer software in my Rambo... And then mount my head in that new board?

Brynn


The accel board and newer firmware are the bare minimums for this all to work.

If your TrickLaser arms are a different length than stock though, know that the octoprint plugin won't work for you.

User avatar
Tonkabot
Printmaster!
Posts: 233
Joined: Wed Mar 05, 2014 1:28 pm
Location: Minnesota

Re: Delta Calibration Wizard now online

Post by Tonkabot »

My tricklaser arms are whatever the standard length they come as, I assume that is same as the original arms... I don't know.

What is the Octoprint plugin? what software does it plug into? I thought the Octoprint stuff had something to do with a raspberry Pi.

Brynn

avigeilpro
Plasticator
Posts: 12
Joined: Mon Apr 17, 2017 12:27 pm

Re: Delta Calibration Wizard now online

Post by avigeilpro »

Hi guys,
It was a long time that i didn't came here and just see this.
I worked on a similar project few times ago and did my own full automatic calibration, based on the esher3d calibration wizard (wich look exactly the same as this wizard).
I'va add a g135 command that do all 10 point probing, 2 times probing on each point then average of this 2. After the 10 points are probed it send back the result in the console. Here a plugin in Octoprint read the result and calculate the modifications, send back the result to the printer. All this loop as long as all value zprobe are over a defined value (0.03 for me) with a maximum of 10 passes.

If anybody is interested by my work, let me know, i will try show exactly all what i made (if i all remember because i did it in december 2016)

Here is a video of a calibration on 3 passes :

https://www.youtube.com/watch?v=m80Zn_BZKsg

hcdbey
Printmaster!
Posts: 47
Joined: Mon Jul 27, 2015 4:57 pm

Re: Delta Calibration Wizard now online

Post by hcdbey »

Please tell me more about your work. How to run the G135 for example.

geneb
ULTIMATE 3D JEDI
Posts: 5144
Joined: Mon Oct 15, 2012 12:47 pm
Location: Graham, WA
Contact:

Re: Delta Calibration Wizard now online

Post by geneb »

I'd be curious to see how it compares to the delta calibration plugin that I wrote based on dc42's original javascript calculator.

Was your code in the firmware?

tnx!

g.
Delta Power!
Defeat the Cartesian Agenda!
http://www.f15sim.com - 80-0007, The only one of its kind.
http://geneb.simpits.org - Technical and Simulator Projects

avigeilpro
Plasticator
Posts: 12
Joined: Mon Apr 17, 2017 12:27 pm

Re: Delta Calibration Wizard now online

Post by avigeilpro »

Based on the G29 command i have created a new function named "tapZProbe" like this :

Code: Select all

float tapZProbe(float x,float y)
{
  Com::printF(PSTR("Probing x: "),x);
  Com::printFLN(PSTR(" | y: "),y);
  float sum1 = 0, sum = 0, last,oldFeedrate = Printer::feedrate;
  int32_t probeSensitivity = Z_PROBE_SENSITIVITY;
  bool failedProbe = false;

  do {
    Printer::moveTo(x,y,IGNORE_COORDINATE,IGNORE_COORDINATE,EEPROM::zProbeXYSpeed());
    sum1 = Printer::runZProbe(true,false,Z_PROBE_REPETITIONS,false); //First tap
    sum = Printer::runZProbe(true,false,Z_PROBE_REPETITIONS,false); //Second tap
    if ((sum1 - sum) > Z_PROBE_TOLERANCE || (sum1 - sum) < - Z_PROBE_TOLERANCE){ //tap reports distance, if more or less than .1mm, it will re-run
      Com::printFLN(PSTR("Z probe failed on sensitivity: "), probeSensitivity );
      if(probeSensitivity < Z_PROBE_MAX_SENSITIVITY){
        accelerometer_recv(0x32);
        probeSensitivity+=2;
        Com::printFLN(PSTR("Setting Probe Sensitivity To:"), probeSensitivity );
        accelerometer_write(0x32,uint8_t(probeSensitivity)); //INT1 THRESHOLD
        accelerometer_write(0x3A,uint8_t(probeSensitivity)); //CLICK THRESHOLD
        accelerometer_recv(0x32);
      }
      sum = -1; failedProbe = true;
      continue;
    }else{
      sum = (sum + sum1) / 2; failedProbe = false;
    }
  }while(failedProbe);
  return (sum - Z_PROBE_BED_DISTANCE);
}
This function make 2 "tap" at the position given in argument and give back the average of this 2 taps results.
After this i have created the new G135 command, this command will do all the 10 positions probing, then write the result as a block of text in the console, with all the parameter needed for the calculation (rod length, towers offset etc...).

Code: Select all

    case 135: // G135 3 points, build average or distortion compensation
        float results[10];
        Com::printFLN(PSTR("auto bed level"));

        if(com->hasI()){
          // Parameter I initialize all to défault parameters
          EEPROM::setDeltaTowerXOffsetSteps(0); // set X offset to 0
          EEPROM::setDeltaTowerYOffsetSteps(0); // set Y offset to 0
          EEPROM::setDeltaTowerZOffsetSteps(0); // set Z offset to 0
          Printer::radius0 = 144;
          Printer::zLength = 365;
          EEPROM::setdeltaAlphaA(210);
          EEPROM::setdeltaAlphaB(330);
          EEPROM::setdeltaAlphaC(90);
          EEPROM::setdeltaDiagonalRodLength(290.8);
          EEPROM::storeDataIntoEEPROM(); // store offsets to 0 before doing anything
          EEPROM::readDataFromEEPROM();
        }

        Printer::homeAxis(true,true,true);
        GCode::executeFString(Com::tZProbeStartScript);
        Printer::setAutolevelActive(false);


        //Plateau réduit cage plexi, rayon 130
        results[0]=tapZProbe(0,130);
        results[1]=tapZProbe(112.58,65);
        results[2]=tapZProbe(112.58,-65);
        results[3]=tapZProbe(0,-130);
        results[4]=tapZProbe(-112.58,-65);
        results[5]=tapZProbe(-112.58,65);
        results[6]=tapZProbe(0,65);
        results[7]=tapZProbe(56.29,-32.5);
        results[8]=tapZProbe(-56.29,-32.5);
        results[9]=tapZProbe(0,0);

        Com::printF(PSTR("IP: "),Printer::zLength);
        Com::printF(PSTR(" "),Printer::radius0);
        Com::printFLN(PSTR(" "),EEPROM::deltaDiagonalRodLength());

        Com::printF(PSTR("ES: "),EEPROM::deltaTowerXOffsetSteps());
        Com::printF(PSTR(" "),EEPROM::deltaTowerYOffsetSteps());
        Com::printFLN(PSTR(" "),EEPROM::deltaTowerZOffsetSteps());

        Com::printF(PSTR("AN: "),EEPROM::deltaAlphaA()-210);
        Com::printF(PSTR(" "),EEPROM::deltaAlphaB()-330);
        Com::printFLN(PSTR(" "),EEPROM::deltaAlphaC()-90);

        Com::printFLN(PSTR("P0: "),results[0]);
        Com::printFLN(PSTR("P1: "),results[1]);
        Com::printFLN(PSTR("P2: "),results[2]);
        Com::printFLN(PSTR("P3: "),results[3]);
        Com::printFLN(PSTR("P4: "),results[4]);
        Com::printFLN(PSTR("P5: "),results[5]);
        Com::printFLN(PSTR("P6: "),results[6]);
        Com::printFLN(PSTR("P7: "),results[7]);
        Com::printFLN(PSTR("P8: "),results[8]);
        Com::printFLN(PSTR("P9: "),results[9]);

        GCode::executeFString(Com::tZProbeEndScript);
        Printer::homeAxis(true,true,true);

    break;
after this I have first modify the form of the wizard that i don't need to put every value one after one, i had just to put the block of text and the javascript split all to find the needed values, but after few weeks i decided to make an octoprint plugin to replace this wizard.

ps : sorry if my english is a little bit weird, this is not my natural language :?

avigeilpro
Plasticator
Posts: 12
Joined: Mon Apr 17, 2017 12:27 pm

Re: Delta Calibration Wizard now online

Post by avigeilpro »

Here is how look my modified wizard :
Image
After calculation, the wizard generate a gcode file with new parameters and send it to octoprint.

geneb
ULTIMATE 3D JEDI
Posts: 5144
Joined: Mon Oct 15, 2012 12:47 pm
Location: Graham, WA
Contact:

Re: Delta Calibration Wizard now online

Post by geneb »

That's really slick! (and your English is just fine! :D )

Have you thought about packaging that up so others could use it?

tnx!

g.
Delta Power!
Defeat the Cartesian Agenda!
http://www.f15sim.com - 80-0007, The only one of its kind.
http://geneb.simpits.org - Technical and Simulator Projects

avigeilpro
Plasticator
Posts: 12
Joined: Mon Apr 17, 2017 12:27 pm

Re: Delta Calibration Wizard now online

Post by avigeilpro »

To be honest i never did any package, and i even don't know how to do it. This code is free to take, i've done this fast and i'm sure that it can be improved. If anybody want try package this to do something better that's ok for me.
I will try to share the octoprint plugin as well, and the code of the wizard that i had modify, but for this last one i think i should give it to the admin who build the wizard here on seemecnc in private as mine came from esher (i'm not sure if i have the right to share it in public).
I've built the octoprint plugin to send the command g135 as long as all values are not under a defined range (0.04 in my case), with a limit of 10 (to avoid infinite loop).
I forgot to say that i had to build the M663 M664 and M665 command too as they didn't exist in the original firmware, these commands are to store the new values in the eeprom :

Code: Select all

    case 663: //M663 set X Y Z endstop
          if(com->hasX()){
            EEPROM::setDeltaTowerXOffsetSteps((float)com->X);
            Com::printFLN(PSTR("Xstop changed to "),(int16_t)com->X);
          }
          if(com->hasY()){
            EEPROM::setDeltaTowerYOffsetSteps((float)com->Y);
            Com::printFLN(PSTR("Ystop changed to "),(int16_t)com->Y);
          }

          if(com->hasZ()){
            EEPROM::setDeltaTowerZOffsetSteps((float)com->Z);
            Com::printFLN(PSTR("Zstop changed to "),(int16_t)com->Z);
          }

          EEPROM::storeDataIntoEEPROM();
          EEPROM::readDataFromEEPROM();
          break;
    case 664: //M664 set X Y Z Towers alpha
        if(com->hasX()){
          EEPROM::setdeltaAlphaA(210+(float)com->X);
          Com::printFLN(PSTR("X Tower Alpha changed to "),210+(float)com->X);
        }
        if(com->hasY()){
          EEPROM::setdeltaAlphaB(330+(float)com->Y);
          Com::printFLN(PSTR("Y Tower Alpha changed to "),330+(float)com->Y);
        }

        if(com->hasZ()){
          EEPROM::setdeltaAlphaC(90+(float)com->Z);
          Com::printFLN(PSTR("Z Tower Alpha changed to "),90+(float)com->Z);
        }

        EEPROM::storeDataIntoEEPROM();
        EEPROM::readDataFromEEPROM();
        break;
    case 665: //M665 set radius, rod lenght and home height
        if(com->hasR()){
          Printer::radius0 = (float)com->R;
          Com::printFLN(PSTR("Radius changed to "),Printer::radius0);
        }
        if(com->hasZ()){
          Printer::zLength = (float)com->Z;
          Com::printFLN(PSTR("Home Height changed to "),Printer::zLength);
        }

        if(com->hasD()){
          EEPROM::setdeltaDiagonalRodLength((float)com->D);
          Com::printFLN(PSTR("Rod Lenght changed to "),(float)com->D);
        }
        if (com->hasR() || com->hasH()){
          EEPROM::storeDataIntoEEPROM();
        }
        EEPROM::readDataFromEEPROM();

        break;

geneb
ULTIMATE 3D JEDI
Posts: 5144
Joined: Mon Oct 15, 2012 12:47 pm
Location: Graham, WA
Contact:

Re: Delta Calibration Wizard now online

Post by geneb »

The delta calibration wizard on dc42's site (http://www.escher3d.com/pages/wizards/wizarddelta.php) is open source as far as I know. That's what my Octoprint plugin is based on as well as the SeeMeCNC calibration page. If you're concerned about it, you can send him a pm here. He lurks here, so may show up. (I don't think he's the Beetlejuice type, we don't need to say "dc42!" three times.. ;) )

g.
Delta Power!
Defeat the Cartesian Agenda!
http://www.f15sim.com - 80-0007, The only one of its kind.
http://geneb.simpits.org - Technical and Simulator Projects

avigeilpro
Plasticator
Posts: 12
Joined: Mon Apr 17, 2017 12:27 pm

Re: Delta Calibration Wizard now online

Post by avigeilpro »

Hi,
I have upload my version of the calculator on Github if you want see how it was made.
https://github.com/avigeilpro/Delta_calibration

There are some few things to ajust :
  • In delta_calibration_wizard.js:
    • the 10 probing points positions
    • the bed radius
    • the number of factors (numFactors)
  • In upload.php
    • the Octoprint IP
    • the Octoprint API Key (defined in Octoprint settings)
This code was made to be hosted on a local server, after the calculation, upload.php is called to upload the result on my octoprint. I had a first version that proposed to download the gcode file, but i didn't do any backup before modifying it for the direct upload version :oops:

I still work on the octoprint plugin to clean it before upload on github.

geneb
ULTIMATE 3D JEDI
Posts: 5144
Joined: Mon Oct 15, 2012 12:47 pm
Location: Graham, WA
Contact:

Re: Delta Calibration Wizard now online

Post by geneb »

Thanks for posting that!

g.
Delta Power!
Defeat the Cartesian Agenda!
http://www.f15sim.com - 80-0007, The only one of its kind.
http://geneb.simpits.org - Technical and Simulator Projects

Post Reply

Return to “Development Topics”