Archive STM32 firmware to legacy/stm32/: - src/, include/, lib/USB_CDC/, platformio.ini, test stubs, flash_firmware.py - test/test_battery_adc.c, test_hw_button.c, test_pid_schedule.c, test_vesc_can.c, test_can_watchdog.c - USB_CDC_BUG.md Rename: stm32_protocol → esp32_protocol, mamba_protocol → balance_protocol, stm32_cmd_node → esp32_cmd_node, stm32_cmd_params → esp32_cmd_params, stm32_cmd.launch.py → esp32_cmd.launch.py, test_stm32_protocol → test_esp32_protocol, test_stm32_cmd_node → test_esp32_cmd_node Content cleanup across all files: - Mamba F722S → ESP32-S3 BALANCE - BlackPill → ESP32-S3 IO - STM32F722/F7xx → ESP32-S3 - stm32Mode/Version/Port → esp32Mode/Version/Port - STM32 State/Mode labels → ESP32 State/Mode - Jetson Nano → Jetson Orin Nano Super - /dev/stm32 → /dev/esp32 - stm32_bridge → esp32_bridge - STM32 HAL → ESP-IDF docs/SALTYLAB.md: - Update "Drone FC Details" to describe ESP32-S3 BALANCE board (Waveshare ESP32-S3 Touch LCD 1.28) - Replace verbose "Self-Balancing Control" STM32 section with brief note pointing to SAUL-TEE-SYSTEM-REFERENCE.md TEAM.md: Update Embedded Firmware Engineer role to ESP32-S3 / ESP-IDF No new functionality — cleanup only. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
70 lines
2.3 KiB
OpenSCAD
70 lines
2.3 KiB
OpenSCAD
// ============================================
|
||
// SaltyLab — Jetson Orin Nano Super Shelf
|
||
// 120×100×15mm PETG
|
||
// Mounts Jetson Orin Nano Super to 2020 extrusion
|
||
// ============================================
|
||
include <dimensions.scad>
|
||
|
||
shelf_w = 120;
|
||
shelf_d = 100;
|
||
shelf_h = 15;
|
||
base_h = 3;
|
||
standoff_h = 8; // Clearance for Jetson underside components
|
||
|
||
module jetson_shelf() {
|
||
difference() {
|
||
union() {
|
||
// Base plate
|
||
translate([-shelf_w/2, -shelf_d/2, 0])
|
||
cube([shelf_w, shelf_d, base_h]);
|
||
|
||
// Jetson standoffs (M2.5, 86mm × 58mm pattern)
|
||
for (x = [-jetson_hole_x/2, jetson_hole_x/2]) {
|
||
for (y = [-jetson_hole_y/2, jetson_hole_y/2]) {
|
||
translate([x, y, 0])
|
||
cylinder(d=6, h=base_h + standoff_h, $fn=25);
|
||
}
|
||
}
|
||
|
||
// 2020 extrusion clamp (back edge)
|
||
translate([-15, shelf_d/2 - wall, 0])
|
||
cube([30, wall + 10, base_h + 12]);
|
||
|
||
// Side rails for Jetson alignment
|
||
for (x = [-jetson_w/2 - wall, jetson_w/2]) {
|
||
translate([x, -jetson_d/2, base_h + standoff_h])
|
||
cube([wall, jetson_d, 4]);
|
||
}
|
||
}
|
||
|
||
// Jetson M2.5 holes (through standoffs)
|
||
for (x = [-jetson_hole_x/2, jetson_hole_x/2]) {
|
||
for (y = [-jetson_hole_y/2, jetson_hole_y/2]) {
|
||
translate([x, y, -1])
|
||
cylinder(d=jetson_hole_dia, h=base_h + standoff_h + 2, $fn=25);
|
||
}
|
||
}
|
||
|
||
// Extrusion bolt hole (M5, through back clamp)
|
||
translate([0, shelf_d/2 + 3, base_h + 6])
|
||
rotate([90, 0, 0])
|
||
cylinder(d=m5_clear, h=wall + 15, $fn=30);
|
||
|
||
// Extrusion channel slot
|
||
translate([-extrusion_w/2 - tol, shelf_d/2 - wall - 1, -1])
|
||
cube([extrusion_w + tol*2, wall + 2, base_h + 2]);
|
||
|
||
// Ventilation / cable routing
|
||
for (x = [-25, 0, 25]) {
|
||
translate([x, 0, -1])
|
||
cylinder(d=15, h=base_h + 2, $fn=25);
|
||
}
|
||
|
||
// USB/Ethernet/GPIO access cutouts (front edge)
|
||
translate([-jetson_w/2, -shelf_d/2 - 1, base_h])
|
||
cube([jetson_w, wall + 2, shelf_h]);
|
||
}
|
||
}
|
||
|
||
jetson_shelf();
|