Загрузка данных
/* =================================================================
10" 1.5U РЭК-ПАНЕЛЬ: 6 KEYSTONES + ST7789 1.69" + ESP32 (M3)
Правильная геометрия фиксации замков Keystone (Snap-in Latch)
Высота: 1.5U (65.7 мм) | Крепеж: M3 | Допуск: tol = 0.43 мм
================================================================= */
tol = 0.43; // Зазор на посадку FDM
$fn = 50;
// --- Габариты 10" 1.5U рэка ---
rack_w = 254.0; // 10 дюймов
rack_hole_dist = 236.5; // Межосевое креплений
u_count = 1.5;
rack_h = (u_count * 44.45) - 1.0; // 65.68 мм
panel_thick = 4.0; // Толщина лицевой панели
rack_slot_w = 5.5 + tol; // 5.93 мм (M5/M6)
rack_slot_h = 9.0;
// --- Крепеж M3 ---
m3_insert_d = 4.2; // Под латунные втулки M3 (или 2.9 под саморез)
// --- Блок из 6 Keystone модулей ---
ks_count = 6;
ks_pitch = 19.5; // Шаг между портами (стандарт 18.5 - 20.0 мм)
ks_start_x = 22.0; // Отступ первого порта слева
ks_y = rack_h / 2; // Центрирование по высоте
// --- Дисплей ST7789V2 1.69" ---
disp_win_w = 24.5 + tol;
disp_win_h = 28.5 + tol;
disp_glass_w = 27.5 + tol;
disp_glass_h = 32.0 + tol;
disp_glass_d = 1.8;
disp_hole_dx = 26.0;
disp_hole_dy = 35.0;
disp_x = 155.0; // Правее блока кейстоунов
disp_y = 41.0;
// --- ESP32 Terminal Board ---
esp_shelf_w = 82.0;
esp_shelf_d = 70.0;
esp_shelf_y = 4.0;
esp_shelf_thick = 3.0;
esp_hole_dx = 72.0;
esp_hole_dy = 57.0;
esp_x = 148.0;
esp_z_offset = 8.0;
// =================================================================
// МОДУЛЬ ПРАВИЛЬНОГО ПОСАДОЧНОГО ГНЕЗДА KEYSTONE
// =================================================================
module keystone_cutout(tol = 0.43, total_thick = 8.0) {
ks_front_w = 14.8 + tol; // 15.23 мм (лицевое окно)
ks_front_h = 16.1 + tol; // 16.53 мм (лицевое окно)
lip_thick = 1.6; // Рабочая толщина упора под защелку
ks_back_w = 16.0 + tol; // 16.43 мм (ширина тела защелки)
ks_latch_top_h = 4.5; // Карман под верхний подпружиненный язычок
ks_latch_bot_h = 2.2; // Карман под нижний фиксированный зуб
ks_back_h = ks_front_h + ks_latch_top_h + ks_latch_bot_h; // ~23.2 мм
union() {
// 1. Сквозное лицевое окно под выход разъема
translate([-ks_front_w/2, -ks_front_h/2, -1])
cube([ks_front_w, ks_front_h, total_thick + 2]);
// 2. Внутренняя выборка под распрямление защелок (Undercut)
translate([-ks_back_w/2, -ks_front_h/2 - ks_latch_bot_h, lip_thick])
cube([ks_back_w, ks_back_h, total_thick - lip_thick + 1]);
// 3. Заходной скос на верхнем упоре для плавного ввода защелки
translate([-ks_front_w/2, ks_front_h/2, lip_thick])
rotate([-40, 0, 0])
cube([ks_front_w, 2.5, 2.5]);
}
}
// Овальный паз крепления рэка
module oval_slot(w, h, depth) {
hull() {
translate([0, -(h - w)/2, 0]) cylinder(d=w, h=depth);
translate([0, (h - w)/2, 0]) cylinder(d=w, h=depth);
}
}
// Треугольное ребро жесткости
module triangle_rib(w, y_len, z_len) {
hull() {
cube([w, y_len, 0.1]);
cube([w, 0.1, z_len]);
}
}
module panel_keystone_1_5u() {
difference() {
// ---------------------------------------------------------
// 1. ТЕЛО
// ---------------------------------------------------------
union() {
// Лицевая панель
cube([rack_w, rack_h, panel_thick]);
// Усиливающие направляющие буртики сзади каждого кейстоуна
for (i = [0 : ks_count - 1]) {
kx = ks_start_x + i * ks_pitch;
translate([kx - (16.0 + tol + 4.0)/2, ks_y - 13.0, panel_thick])
cube([16.0 + tol + 4.0, 26.0, 3.5]); // Утолщение сзади до 7.5 мм
}
// Полка под ESP32 (внизу под экраном)
translate([esp_x, esp_shelf_y, panel_thick])
cube([esp_shelf_w, esp_shelf_thick, esp_shelf_d]);
// Ребра жесткости полки ESP32
translate([esp_x - 2.5, esp_shelf_y, panel_thick])
triangle_rib(2.5, 20.0, 25.0);
translate([esp_x + esp_shelf_w, esp_shelf_y, panel_thick])
triangle_rib(2.5, 20.0, 25.0);
// Стойки под ESP32 на полке (M3)
for (dx = [0, esp_hole_dx]) {
for (dz = [0, esp_hole_dy]) {
translate([
esp_x + (esp_shelf_w - esp_hole_dx)/2 + dx,
esp_shelf_y + esp_shelf_thick,
panel_thick + esp_z_offset + dz
])
rotate([-90, 0, 0])
cylinder(d = 7.0, h = 4.0);
}
}
// Стойки под винты дисплея M3 сзади панели
for (dx = [-disp_hole_dx/2, disp_hole_dx/2]) {
for (dy = [-disp_hole_dy/2, disp_hole_dy/2]) {
translate([disp_x + disp_win_w/2 + dx, disp_y + dy, panel_thick])
cylinder(d = 7.0, h = 3.5);
}
}
}
// ---------------------------------------------------------
// 2. ВЫРЕЗЫ
// ---------------------------------------------------------
// Овальные пазы рэка
for (x = [(rack_w - rack_hole_dist)/2, (rack_w + rack_hole_dist)/2]) {
for (y_off = [-15.875, 15.875]) {
translate([x, rack_h/2 + y_off, -1])
oval_slot(rack_slot_w, rack_slot_h, panel_thick + 2);
}
}
// 6 гнезд Keystone с упорами и пазами под защелки
for (i = [0 : ks_count - 1]) {
kx = ks_start_x + i * ks_pitch;
translate([kx, ks_y, 0])
keystone_cutout(tol = tol, total_thick = panel_thick + 4.0);
}
// Окно активной зоны экрана
translate([disp_x, disp_y - disp_win_h/2, -1])
cube([disp_win_w, disp_win_h, panel_thick + 2]);
// Ступенчатый карман под стекло дисплея
translate([
disp_x - (disp_glass_w - disp_win_w)/2,
disp_y - disp_glass_h/2,
panel_thick - disp_glass_d
])
cube([disp_glass_w, disp_glass_h, disp_glass_d + 1]);
// Крепежные отверстия дисплея M3 (под втулки 4.2 мм)
for (dx = [-disp_hole_dx/2, disp_hole_dx/2]) {
for (dy = [-disp_hole_dy/2, disp_hole_dy/2]) {
translate([disp_x + disp_win_w/2 + dx, disp_y + dy, panel_thick - 1])
cylinder(d = m3_insert_d, h = 6.0);
}
}
// Отверстия под втулки ESP32 M3
for (dx = [0, esp_hole_dx]) {
for (dz = [0, esp_hole_dy]) {
translate([
esp_x + (esp_shelf_w - esp_hole_dx)/2 + dx,
esp_shelf_y + esp_shelf_thick - 1.0,
panel_thick + esp_z_offset + dz
])
rotate([-90, 0, 0])
cylinder(d = m3_insert_d, h = 6.0);
}
}
}
}
panel_keystone_1_5u();