2.1 硬さ試験の基礎
硬さとは、塑性変形または押込みに対する抵抗のことです。代表的な試験法にはブリネル、ビッカース、ロックウェル、ナノインデンテーションがあります。
📐 硬さの定義
ブリネル硬さ(HB): $$HB = \frac{2F}{\pi D(D - \sqrt{D^2 - d^2})}$$ ここで $F$ は荷重(kgf)、$D$ は圧子球の直径(mm)、$d$ は圧痕の直径(mm)です。
ビッカース硬さ(HV): $$HV = \frac{1.854F}{d^2}$$ ここで $F$ は荷重(kgf)、$d$ は対角線長さ(mm)です。
ブリネル硬さ(HB): $$HB = \frac{2F}{\pi D(D - \sqrt{D^2 - d^2})}$$ ここで $F$ は荷重(kgf)、$D$ は圧子球の直径(mm)、$d$ は圧痕の直径(mm)です。
ビッカース硬さ(HV): $$HV = \frac{1.854F}{d^2}$$ ここで $F$ は荷重(kgf)、$d$ は対角線長さ(mm)です。
💻 コード例1: 硬さの計算
# 動作環境:
# - Python 3.9+
# - numpy>=1.24.0, <2.0.0
import numpy as np
class HardnessTester:
"""硬さ試験計算クラス"""
def brinell_hardness(self, force, ball_diameter, indent_diameter):
"""ブリネル硬さ(HB)を計算"""
F = force # kgf
D = ball_diameter # mm
d = indent_diameter # mm
HB = (2 * F) / (np.pi * D * (D - np.sqrt(D**2 - d**2)))
return HB
def vickers_hardness(self, force, diagonal):
"""ビッカース硬さ(HV)を計算"""
F = force # kgf
d = diagonal # mm
HV = 1.854 * F / (d**2)
return HV
def rockwell_c_hardness(self, depth):
"""ロックウェルC硬さ(HRC)を計算"""
HRC = 100 - 500 * depth # depth の単位は mm
return HRC
tester = HardnessTester()
# 計算例
hb = tester.brinell_hardness(force=3000, ball_diameter=10, indent_diameter=4.5)
hv = tester.vickers_hardness(force=30, diagonal=0.5)
hrc = tester.rockwell_c_hardness(depth=0.15)
print(f"ブリネル硬さ: {hb:.1f} HB")
print(f"ビッカース硬さ: {hv:.1f} HV")
print(f"ロックウェルC硬さ: {hrc:.1f} HRC")2.2 硬さと強度の相関
硬さは引張強さと相関します。鋼の場合、UTS(MPa)≈ 3.45 × HB です。
💻 コード例2: 硬さと強度の換算
# 動作環境:
# - Python 3.9+
# - matplotlib>=3.7.0
def hardness_to_tensile_strength(hardness, method='HB', material='steel'):
"""硬さを近似的な引張強さに換算"""
if material == 'steel':
if method == 'HB':
UTS = 3.45 * hardness
elif method == 'HV':
UTS = 3.2 * hardness
elif method == 'HRC':
UTS = (HRC + 18) * 10
return UTS
hb_values = np.array([150, 200, 250, 300, 350])
uts_values = [hardness_to_tensile_strength(hb, 'HB') for hb in hb_values]
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plt.plot(hb_values, uts_values, 'bo-', linewidth=2, markersize=8)
plt.xlabel('Brinell Hardness (HB)')
plt.ylabel('Tensile Strength (MPa)')
plt.title('Hardness-Strength Correlation for Steel')
plt.grid(True, alpha=0.3)
plt.show()2.3 衝撃試験
衝撃試験は、動的負荷の際に吸収されるエネルギーを測定します。シャルピー試験とアイゾット試験は、靱性と延性-脆性遷移を評価します。
📐 衝撃エネルギー
シャルピー衝撃エネルギー: $$E = mgh_0 - mgh_f = mgh_0(1 - \cos\alpha)$$ ここで $m$ はハンマー質量、$h_0$ は初期高さ、$\alpha$ は振り上げ角です。
シャルピー衝撃エネルギー: $$E = mgh_0 - mgh_f = mgh_0(1 - \cos\alpha)$$ ここで $m$ はハンマー質量、$h_0$ は初期高さ、$\alpha$ は振り上げ角です。
💻 コード例3: 衝撃エネルギーの計算
class ImpactTest:
"""シャルピー/アイゾット衝撃試験計算クラス"""
def __init__(self, hammer_mass=25, pendulum_length=0.75):
self.mass = hammer_mass # kg
self.length = pendulum_length # m
self.g = 9.81 # m/s^2
def calculate_energy(self, initial_angle, final_angle):
"""吸収エネルギーを計算"""
theta_0 = np.radians(initial_angle)
theta_f = np.radians(final_angle)
h_0 = self.length * (1 - np.cos(theta_0))
h_f = self.length * (1 - np.cos(theta_f))
E = self.mass * self.g * (h_0 - h_f)
return E
impact = ImpactTest()
energy = impact.calculate_energy(initial_angle=140, final_angle=45)
print(f"吸収衝撃エネルギー: {energy:.1f} J")2.4 延性-脆性遷移
多くの材料は低温で延性から脆性へと挙動が遷移し、これは極低温用途において重要です。
💻 コード例4: DBTT解析
def dbtt_curve(temperature, T_dbtt=-20, E_upper=200, E_lower=20):
"""延性-脆性遷移温度(DBTT)をモデル化"""
# シグモイド遷移
k = 0.1
energy = E_lower + (E_upper - E_lower) / (1 + np.exp(-k * (temperature - T_dbtt)))
return energy
temperatures = np.linspace(-100, 100, 200)
energies = dbtt_curve(temperatures)
plt.figure(figsize=(10, 6))
plt.plot(temperatures, energies, 'b-', linewidth=2)
plt.axvline(-20, color='r', linestyle='--', label='DBTT = -20°C')
plt.axhline(110, color='g', linestyle='--', alpha=0.5, label='50% Energy')
plt.xlabel('Temperature (°C)')
plt.ylabel('Impact Energy (J)')
plt.title('Ductile-Brittle Transition Curve')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()2.5 ナノインデンテーション
ナノインデンテーションは、連続的な荷重-押込み深さ測定を用いて、ナノスケールでの機械的特性を測定します。
💻 コード例5: Oliver-Pharr解析
def oliver_pharr_analysis(load, depth, tip_angle=70.3):
"""ナノインデンテーションのためのOliver-Pharr法"""
# バーコビッチ圧子の面積関数
C = 24.5 # バーコビッチ圧子の定数
A_c = C * depth**2
# 硬さ
H = load / A_c
# 換算弾性率(簡略化)
S = np.gradient(load, depth)[-1] # 剛性
E_r = (np.sqrt(np.pi) / 2) * S / np.sqrt(A_c)
return H, E_r, A_c
depths = np.linspace(0, 1000, 100) # nm
loads = 0.1 * depths**1.5 # 模擬データ
H, E_r, A_c = oliver_pharr_analysis(loads, depths)
print(f"硬さ: {H[-1]:.2f} GPa")
print(f"換算弾性率: {E_r:.1f} GPa")2.6 マイクロ硬さマッピング
硬さの空間的マッピングにより、微視組織の変化や相分布を明らかにできます。
💻 コード例6: 硬さマッピング
def generate_hardness_map(grid_size=20):
"""合成硬さマップを生成"""
x = np.linspace(0, 10, grid_size)
y = np.linspace(0, 10, grid_size)
X, Y = np.meshgrid(x, y)
# 硬さの変化をシミュレート
HV = 200 + 50 * np.sin(X) + 30 * np.cos(Y) + 10 * np.random.randn(grid_size, grid_size)
return X, Y, HV
X, Y, HV = generate_hardness_map()
plt.figure(figsize=(10, 8))
contour = plt.contourf(X, Y, HV, levels=20, cmap='viridis')
plt.colorbar(contour, label='Vickers Hardness (HV)')
plt.xlabel('X Position (mm)')
plt.ylabel('Y Position (mm)')
plt.title('Microhardness Map')
plt.show()2.7 統計解析
複数回の測定と統計解析により、信頼性の高い硬さの特性評価が可能になります。
💻 コード例7: 硬さデータの統計解析
# 動作環境:
# - Python 3.9+
# - scipy>=1.11.0
from scipy import stats
def analyze_hardness_data(measurements):
"""硬さ測定値の統計解析"""
mean = np.mean(measurements)
std = np.std(measurements, ddof=1)
sem = stats.sem(measurements)
# 95%信頼区間
ci = stats.t.interval(0.95, len(measurements)-1, mean, sem)
# 外れ値検出(3シグマ)
outliers = np.abs(measurements - mean) > 3 * std
return {
'mean': mean,
'std': std,
'cv': (std/mean)*100,
'confidence_interval': ci,
'outliers': np.where(outliers)[0]
}
# データセット例
hardness_data = np.array([220, 225, 218, 230, 222, 226, 219, 280, 224, 221])
results = analyze_hardness_data(hardness_data)
print(f"平均硬さ: {results['mean']:.1f} ± {results['std']:.1f} HV")
print(f"変動係数(CV): {results['cv']:.2f}%")
print(f"95%信頼区間: [{results['confidence_interval'][0]:.1f}, {results['confidence_interval'][1]:.1f}]")
print(f"外れ値のインデックス: {results['outliers']}")📝 章末演習
✏️ 演習問題
- 荷重3000 kgf、圧子球径10 mm、圧痕径4.2 mmの条件でブリネル硬さを計算してください。
- 280 HBの鋼について、経験的相関式を用いて引張強さを推定してください。
- 初期角140°、終了角50°のシャルピー試験において吸収される衝撃エネルギーを求めてください。
- DBTT曲線を解析し、-40°Cにおける衝撃エネルギーを予測してください。
- 10個の硬さ測定値について統計解析を行い、外れ値を特定してください。
まとめ
- 硬さは、押込みによる塑性変形への抵抗を測定するものです
- 代表的な試験法: ブリネル、ビッカース、ロックウェル、ナノインデンテーション
- 硬さは引張強さと相関します(鋼では UTS ≈ 3.45 × HB)
- 衝撃試験は靱性と延性-脆性遷移を評価します
- シャルピー/アイゾット試験は動的負荷時の吸収エネルギーを測定します
- DBTTは極低温および低温用途において重要です
- ナノインデンテーションはナノスケールでの機械的特性測定を可能にします