Z-probe 3D spausdintuvui

Valdiklis

Surinkta paprasčiausia, kokią tik sugalvojau, konstrukcija 3D spausdintuvo stalo padėties kompensavimui. Naudojamas vienas piezo diskas ir schemutė, kurios pagrindinis elementas atTiny45 mikrovaldiklis.

Piezo disko padėtis

Diskas įstatytas į tarpelį tarp ekstruderio laikiklio ir x ašies guolių laikiklio. Diską spaudžiant generuojama elektros srovė, kurią registruoja mikrovaldiklis ir pastebėjęs įtampos šuolį išėjime duoda trumpą signalą. Konstrukcijos privalumas: kaip jutiklis naudojama pati spausdinimo galvutė, nereikia nustatinėti jutiklio padėties ir ilgio kaip būtų naudojant bltouch jutiklį, nereikia papildomo servo laido, pakeitus galvutę nereikia jokių papildomų kalibracijų. Bet yra ir trūkumas: jei kalibruoti su karšta galvute, ir iš jos yra ištekėjusio minkšto plastiko galiukas, daviklis nevisada sureaguoja į prisilietimą prie stalo paviršiaus.

Kaip viskas veikia matosi čia:

3D spausdintuvo padėties nustatymas

Valdiklio elektrinė schema, plokštė surinkta ant universalios spausdintinės plokštės.

Valdiklio elektrinė schema

Programa nekeičiant schemos veiktų su atTiny25, atTiny45, atTiny85. Programos tekstas Arduino aplinkoje:

const int isejimas = 0; //išėjimo pinas
const int jutiklis = A2; //ADC keitiklio pinas prijungtas prie piezo disko
uint16_t signalas = 0; //kintamasis nuskaityto signalo lygio saugojimui
uint16_t lygis = 0; // suvidurkintas signalo lygis
int diodas = 1; //diodo būsena
int jautrumas = 12; //mažinant didinam jautrumą prisilietimui

void setup() {
  pinMode(isejimas, OUTPUT);
  for ( int i = 0; i <=6000; i++) { //ciklas pradiniam signalo lygiui kalibruoti
    signalas = analogRead(jutiklis);
    lygis = (lygis * 3 + signalas) / 4;
    if ( (i % 500) == 0) { //mirksinam diodą po maitinimo įjungimo
      digitalWrite(isejimas, diodas);
      diodas = !diodas;
    }
  }
  digitalWrite(isejimas, LOW);
}

void loop() {
  signalas = analogRead(jutiklis);
  if (signalas > (lygis + jautrumas)) { // jeigu signalas didesnis už (vidutinis lygis + jautrumas) siunčiam signalą
    digitalWrite(isejimas, HIGH);
    delay(250);
    digitalWrite(isejimas, LOW);
  }
  lygis = (lygis * 3 + signalas) / 4; //koreguojame vidutinį signalo lygį
}

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.