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 » Wed Jan 10, 2018 4:23 pm

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 » Fri Mar 16, 2018 11:57 am

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 JEDDI
Posts: 2631
Joined: Sun Mar 31, 2013 1:35 am
Location: Notre Dame area
Contact:

Re: Delta Calibration Wizard now online

Post by Jimustanguitar » Mon Mar 19, 2018 8:17 am

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 » Tue Mar 20, 2018 2:29 pm

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 » Sat Nov 10, 2018 5:07 am

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: 46
Joined: Mon Jul 27, 2015 4:57 pm

Re: Delta Calibration Wizard now online

Post by hcdbey » Fri Aug 30, 2019 7:33 am

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

User avatar
geneb
ULTIMATE 3D JEDDI
Posts: 4926
Joined: Mon Oct 15, 2012 12:47 pm
Location: Graham, WA
Contact:

Re: Delta Calibration Wizard now online

Post by geneb » Fri Aug 30, 2019 7:47 am

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 » Tue Sep 03, 2019 4:58 am

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 » Tue Sep 03, 2019 5:38 am

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

User avatar
geneb
ULTIMATE 3D JEDDI
Posts: 4926
Joined: Mon Oct 15, 2012 12:47 pm
Location: Graham, WA
Contact:

Re: Delta Calibration Wizard now online

Post by geneb » Tue Sep 03, 2019 8:14 am

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 » Tue Sep 03, 2019 8:18 pm

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;

User avatar
geneb
ULTIMATE 3D JEDDI
Posts: 4926
Joined: Mon Oct 15, 2012 12:47 pm
Location: Graham, WA
Contact:

Re: Delta Calibration Wizard now online

Post by geneb » Wed Sep 04, 2019 7:37 am

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 » Sun Sep 08, 2019 8:04 am

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.

User avatar
geneb
ULTIMATE 3D JEDDI
Posts: 4926
Joined: Mon Oct 15, 2012 12:47 pm
Location: Graham, WA
Contact:

Re: Delta Calibration Wizard now online

Post by geneb » Sun Sep 08, 2019 9:27 am

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”