9.1  Lab instruction – Bolted joints

This lab is about getting acquainted with screws and their properties under different lubrication conditions.

You will mount an M10 screw around a ring load cell and measure the tightening/loosening torque and axial force in the screw. Mount with washers on both sides. See figure Figure 9.1.1 for correct assembly.

You will perform measurements at three different lubrication conditions:

  1. Dry screw
  2. Lubricated screw with oil
  3. Lubricated screw with grease

Change the screw and nut between experiments.

Workflow

  1. Mount a screw without tightening it
  2. Start the load cell (instructions below)
  3. Start a measurement series
    1. Either tighten the screw to a suitable torque (not exceeding the recommended torque), note the torque
    1. Alternatively, tighten the screw to a suitable axial force (70% of the yield strength), note the torque.
  4. Loosen the screw and note the torque required.
  5. Repeat a number of times (3-5 times depending on the spread in the measured values)
  6. Save the measurement series and plot with python

Questions

  1. How does the tightening torque differ between the different lubrication conditions?
  2. How does the loosening torque differ between the different lubrication conditions?
  3. How does the tightening torque differ from the loosening torque?
  4. How does the spread in the measured values differ between the different lubrication conditions?
  5. How much force can the screw take before it breaks? (Use table values for the material and compare with your measured values)
  6. How much force does a vise generate?
  7. Lubricate the vise screw and compare with previous measurements. What happens and why?

Can you think of more questions? Discuss with your supervisor. Test if time permits!

Getting started with the Load Cell

  1. Connect the USB cable from the load cell to the computer.
  2. Start CoolTerm.exe, available for download here: CoolTerm
  3. Select “Options”

CoolTerm connection options
  1. Select the USB port to which the load cell is connected (in my case “COM7”). Unplug and plug the USB cable back in to see which one disappears and comes back.
  2. Select “9600” as Baudrate.

CoolTerm terminal options
  1. In the Terminal tab, select Line Mode and set Key Emulation to LF.

CoolTerm load cell welcome text
  1. Connect the load cell by clicking on Connect.
  2. Now the load cell starts, give it a few seconds and you should see the welcome text from the load cell. Otherwise, you can press Reset on the load cell. Then you should see the text in the image above.
  3. Type L and press enter to start/stop the measurement.
  4. The load cell sends values in kg
  5. Click on the view icon to select plot, then the values are displayed in a graph. It is possible to reset the graph by clicking on Clear.
  6. If the load cell is not close enough to 0 for your taste, you can send T to tare it.

Save data

  1. When the load cell is running, press CTRL+R, save with a suitable name
  2. When you are satisfied with the experiment, press CTRL+SHIFT+R to save
  3. Open the txt file in excel or in python for visualization.

Assembly instructions

This lab is about getting acquainted with screws and their properties under different lubrication conditions.

You will mount an M10 screw around a ring load cell and measure the tightening/loosening torque and axial force in the screw. Mount with washers on both sides. See figure Figure 9.1.1 for correct assembly.

Figure 9.1.1: Correct assembly of M10 screw in vise. The head of the screw should be mounted in the upper part of the vise.
Figure 9.1.2: Setup of measuring equipment. The head of the screw is clamped in the vise. The nut should be tightened with a torque sensor.

Plotting serial data with python

Let ’s say you have saved your data from CoolTerm in a file called CoolTerm Capture 2024-11-19 23-14-21.txt. You can use the following Python code to read and plot the data:

fileName = "assets/CoolTerm Capture 2024-11-19 23-14-21.txt"
with open(fileName, "r") as file: 
    data = [float(num) for line in file for num in line.split()] 

import matplotlib.pyplot as plt

plt.plot(data)
plt.ylabel('Load Cell Data')
plt.show()

Or use plotly for a more interactive visualization:

import pandas as pd # uv pip install pandas
import plotly.express as px

df = pd.DataFrame({'y': data,
                  })

fig = px.line(df, 
              y="y", 
              title="Raw Data",
              template="plotly_dark")
fig

Loading data from Excel

Here we want to load the data from loadcell_data.xlsx and plot it.

import pandas as pd
# Note: Takes a little time to load
excelData = pd.read_excel('assets/loadcell_data.xlsx', usecols="D:E",header=None, names=["D", "E"])
excelData
D E
0 0.000 0.000
1 0.013 0.039
2 0.090 0.270
3 0.041 0.123
4 0.010 0.030
... ... ...
395 -0.091 -0.273
396 -0.082 -0.246
397 -0.122 -0.366
398 -0.131 -0.393
399 -0.100 -0.300

400 rows × 2 columns

Above, we have the data from the file loadcell_data.xlsx.

We read in the columns D to E with usecols="D:E".

We name the columns with names=["D", "E"]

Below, we plot the columns D and E against each other.

import pandas as pd
import plotly.express as px

fig = px.line(excelData, 
              y=["D", "E"], 
              title="Excel columns",
              template="plotly_dark")
fig.update_xaxes(range=[90, 180]) # Here we set the x-data to start at 90 and end at 180
fig.show()

Why not create a shaded area between the two curves to visualize the difference?

import pandas as pd 
import plotly.express as px
import plotly.graph_objects as go

fig = px.line(excelData, 
              y=["D", "E"], 
              title="Excel columns",
              template="plotly_dark")
fig.update_xaxes(range=[90, 180])

# Add shaded area between the lines
fig.add_traces([
    go.Scatter(
        x=excelData.index, y=excelData["D"],
        mode='lines', line=dict(width=0),
        showlegend=False
    ),
    go.Scatter(
        x=excelData.index, y=excelData["E"],
        mode='lines', line=dict(width=0),
        fill='tonexty', fillcolor='rgba(0,100,80,0.2)',
        showlegend=False
    )
])

# Show the plot
fig.show()

It is interesting to see the average difference between the two curves, which we can get directly with pandas using our excelData dataframe.

# Calculate the average
excelData['Average'] = excelData[['D', 'E']].mean(axis=1)

# Create the line plot
fig = px.line(excelData, y=["D", "E"], title="Excel columns", template="plotly_dark")
fig.update_xaxes(range=[90, 180])

# Add shaded area between the lines
fig.add_traces([
    go.Scatter(
        x=excelData.index, y=excelData["D"],
        mode='lines', line=dict(width=0),
        showlegend=False
    ),
    go.Scatter(
        x=excelData.index, y=excelData["E"],
        mode='lines', line=dict(width=0),
        fill='tonexty', fillcolor='rgba(0,100,80,0.2)',
        showlegend=False
    )
])

# Add the average line
fig.add_trace(
    go.Scatter(
        x=excelData.index, y=excelData['Average'],
        mode='lines', name='Average',
        line=dict(color='yellow', width=2, dash='dash')
    )
)

# Show the plot
fig.show()