Корпус для устройства на базе ESP32
Описание проекта: Корпус для устройства на базе ESP32
Цель проекта
Создание корпуса для электронного устройства, использующего плату ESP32. Корпус должен обеспечивать защиту компонентов, удобство в использовании и эстетичный внешний вид. Он будет включать в себя отверстия для подключения USB и кнопки, а также крепежные элементы для надежной фиксации платы.
Основные параметры корпуса
- Толщина стенок: 2 мм
- Высота: 25 мм
- Длина: 73 мм
- Ширина: 51 мм
- Радиус скругления: 8 мм
Размеры компонентов
- ESP32: 37 мм (длина) x 19 мм (ширина)
- USB разъем: 12 мм
- Кнопка: 12 мм (диаметр)
Крепежные элементы
Корпус включает в себя четыре крепежных столбика для надежной фиксации платы ESP32:
- Передний левый столбик: [7, 15]
- Передний правый столбик: [44, 34] (с учетом длины ESP32)
- Задний левый столбик: [6, 45]
- Задний правый столбик: [67, 45]
Структура корпуса
Корпус состоит из двух основных частей: основной части и крышки.
-
Основная часть:
- Выполнена в форме прямоугольного параллелепипеда с закругленными углами.
- Внутри корпуса предусмотрена полость для размещения платы ESP32.
- Реализовано отверстие для подключения USB-кабеля.
-
Крышка:
- Крышка также имеет закругленные углы и крепежные отверстия, которые совпадают с позициями столбиков основной части.
- Обеспечивает легкий доступ к внутренним компонентам устройства.
Технология реализации
Корпус моделируется с использованием OpenSCAD, что позволяет точно задать размеры и параметры всех элементов. Используются функции для создания закругленных прямоугольников и цилиндров, что обеспечивает плавные линии и эстетичный вид.
Заключение
Проект корпуса для устройства на базе ESP32 направлен на создание функционального и привлекательного решения для защиты электроники. Корпус будет легко собираться и разбираться, что обеспечит удобство в обслуживании устройства.
// Параметры корпуса
thickness = 2; // Толщина стенок
height = 25; // Общая высота
length = 73; // Длина корпуса
width = 51; // Ширина корпуса
radius = 8; // Радиус скругления
// Размеры компонентов
esp32_length = 37;
esp32_width = 19;
usb_size = 12;
button_d = 12;
// Координаты крепежных элементов для платы (общие параметры)
mount1_pos_pl = [7, 15]; // Левый передний столбик
mount2_pos_pl = [7+esp32_length, 15+esp32_width]; // Правый передний столбик
// Координаты крепежных элементов (общие параметры)
mount1_pos = [6, 6]; // Левый передний столбик
mount2_pos = [length - 6, 6]; // Правый передний столбик
mount3_pos = [6, width - 6]; // Левый задний столбик
mount4_pos = [length - 6, width - 6]; // Правый задний столбик
module rounded_rect(L, W, H, R) {
hull() {
translate([R, R, 0]) cylinder(r = R, h = H, $fn=50);
translate([L - R, R, 0]) cylinder(r = R, h = H, $fn=50);
translate([R, W - R, 0]) cylinder(r = R, h = H, $fn=50);
translate([L - R, W - R, 0]) cylinder(r = R, h = H, $fn=50);
}
}
module main_body() {
difference() {
// Основная форма
rounded_rect(length, width, height, radius);
// Внутренняя полость
translate([thickness, thickness, thickness])
rounded_rect(
length - 2*thickness,
width - 2*thickness,
height - thickness + 0.1,
max(radius - thickness, 1)
);
// Отверстие для USB
translate([0, 14, thickness*2+7])
cube([thickness, usb_size, 7]);
}
// Крепежные столбики для платы (4 точки)
for(pos = [mount1_pos_pl, mount2_pos_pl])
translate([pos[0], pos[1], thickness])
difference() {
cylinder(d = 8, h = thickness+7, $fn=50);
//cylinder(d = 2.5, h = thickness+7, $fn=50);
}
// Крепежные столбики (4 точки)
for(pos = [mount1_pos, mount2_pos, mount3_pos, mount4_pos])
translate([pos[0], pos[1], thickness])
difference() {
cylinder(d = 8, h = height-thickness-3, $fn=50);
//cylinder(d = 2.5, h = height-thickness-3, $fn=50);
}
}
module lid() {
// Крышка с крепежными отверстиями
difference() {
rounded_rect(length-2*thickness, width-2*thickness, 3, radius-thickness);
// Отверстия для винтов (совпадают с позициями столбиков)
for(pos = [mount1_pos, mount2_pos, mount3_pos, mount4_pos])
translate([pos[0]-thickness, pos[1]-thickness, -0.1])
cylinder(d = 3, h = 5, $fn=50);
}
}
// Сборка с правильным позиционированием
main_body();
translate([thickness, thickness, height + 30]) lid(); // Уменьшен зазор между частями