Updated documentation in README.md

This commit is contained in:
erwin 2023-07-22 22:34:24 +02:00
parent 3e8cce4202
commit 395ea1a556
5 changed files with 136 additions and 1 deletions

View File

@ -1,3 +1,68 @@
# laserhead-distance-sensor
A distance sensor for focusing the head of a galvo laser.
## The problem
On my fiber laser, I have to manually set the focus of the laser by adjusting the height of the laser head which houses the focussing lens.
That means I have to accurately set the distance between the lens and the object with a ruler. This is very inprecise and requires a lot of fiddling with said ruler, the object and the calibration line on the laserhead.
## A solution
I can create some sort of stick that has the exact height of the lens being in focus on the bed.
When I have to focus the laser, I try to fit this stick between the lens and the object and adjust the height accordingly.
![drawing of a solution with a stick](img/a_solution.jpg)
## The solution
A digital distance sensor that helps to set the correct height for the galvo laser head of my fiber laser.
![a drawing of a control loop](img/controlloop.jpg)
> _Because everything worth doing is worth overdoing!_
## Installation
Installation is done by sticking the sensor to the side of the laser arm. The location is not important, but the sensor must be pointing down towards the bed. The height is not important, as the sensor will be calibrated to its current location.
The display can be attached wherever is most convenient and readable when adjusting the height of the laser arm.
![drawing of the sensor and display installation](img/installation.jpg)
After installation, connect the USB-C power source and verify the display is showing two numbers.
```
^ 127 | 0
```
Press the knob and the calibration menu will appear.
```
Calibrate
YES / NO
```
Rotate the knob so YES is highlighted and press the knob.
The sensor will now take a measurement and store this in EEPROM. This measurement will be retrieved from EEPROM every time the sensor is started, so it starts in a calibrated way.
```
0 | 0
```
> **Note**
> If you change your lens, you have to recalibrate the sensor.
## Operation
There are two ways of operating the sensor.
### Option 1: Set object height
Rotate the knob till the right number displays the height of the object.
```
^ 8 | 13
```
The sensor will now calculate the difference between the measured height and the set height. (In the above example, the head must be raised by 8 mm to have the object of 13 mm in focus.)
Change the height of the laser arm till the left number displays "0" and no arrow is visible. The laser is now in focus.
### Option 2: Measure object height
Rotate the knob till the right number displays "0".
```
v 5 | 0
```
Place the object under the sensor. (In the above example, the head must be lowered by 5 mm to have the object in focus.)
Change the height of the laser arm till the left number displays "0" and no arrow is visible. The laser is now in focus.
> **Note**
> I prefer option 2, because this is a quick and easy way of working. The set height of the object is lost after the power is turned off.
## Build
To be documented.

70
cad/images.drawio Normal file
View File

@ -0,0 +1,70 @@
<mxfile host="Electron" modified="2023-07-02T08:47:53.457Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.3.7 Chrome/112.0.5615.204 Electron/24.5.0 Safari/537.36" etag="9V9i2ZHjO2KAMOXz_0WO" version="21.3.7" type="device">
<diagram name="Page-1" id="apkLY82v2svt43NLXheB">
<mxGraphModel dx="144" dy="113" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-12" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="rbrn1IwdH5oRhUIE0Q6u-1" target="rbrn1IwdH5oRhUIE0Q6u-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-1" value="display" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="80" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-2" value="sensor" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="160" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-3" value="human&lt;br&gt;turning cranck" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="440" y="80" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="rbrn1IwdH5oRhUIE0Q6u-4" target="rbrn1IwdH5oRhUIE0Q6u-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-4" value="setpoint" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="40" y="80" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-11" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="rbrn1IwdH5oRhUIE0Q6u-5" target="rbrn1IwdH5oRhUIE0Q6u-1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-13" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="rbrn1IwdH5oRhUIE0Q6u-3" target="rbrn1IwdH5oRhUIE0Q6u-2">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="480" y="200" as="sourcePoint" />
<mxPoint x="530" y="150" as="targetPoint" />
<Array as="points">
<mxPoint x="500" y="180" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-14" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="rbrn1IwdH5oRhUIE0Q6u-2" target="rbrn1IwdH5oRhUIE0Q6u-5">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="140" y="200" as="sourcePoint" />
<mxPoint x="190" y="150" as="targetPoint" />
<Array as="points">
<mxPoint x="220" y="180" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-5" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="200" y="80" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-7" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="210" y="100" as="sourcePoint" />
<mxPoint x="230" y="100" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-8" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="110" as="sourcePoint" />
<mxPoint x="220" y="90" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-15" value="+" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="180" y="80" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="rbrn1IwdH5oRhUIE0Q6u-16" value="-" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="200" y="120" width="20" height="20" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

BIN
img/a_solution.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
img/controlloop.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
img/installation.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB