Surinkta paprasčiausia, kokią tik sugalvojau, konstrukcija 3D spausdintuvo stalo padėties kompensavimui. Naudojamas vienas piezo diskas ir schemutė, kurios pagrindinis elementas atTiny45 mikrovaldiklis.
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:
Valdiklio elektrinė schema, plokštė surinkta ant universalios spausdintinės plokštės.
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į }