Spiruly
Protocols de labo
Phase 1 : Rétablissement du protocole de base
Protocole 1.1 : Culture de Spirulina platensis
Objectif :
Obtenir une culture stable de Spirulina platensis dans des conditions optimales, afin de disposer d’une biomasse reproductible pour les essais de sorption des métaux lourds.
Matériel et équipement :
- Culture initiale de Spirulina platensis
- Milieu de culture
- Eau distillée ou déionisée
- Bouteilles ou flacons en verre stériles (2 à 5 L)
- Système d’éclairage (LED ou lampes fluorescentes, intensité 2000–3000 lux)
- Aérateur ou agitateur magnétique
- Thermostat (pour maintenir 30–35 °C)
- Spectrophotomètre pour mesurer la densité optique (OD à 750 nm)
- Centrifugeuse et four de séchage (à 50–60 °C)
Procédure :
- Préparation du milieu :
- Dissolvez les ingrédients dans de l’eau distillée selon la recette indique dans le kit.
- Stérilisez le milieu par autoclave (121 °C pendant 20 minutes).
- Inoculation :
- Versez le milieu stérile dans des flacons et inoculez avec 5–10 % (v/v) de culture de Spirulina.
- Conditions de culture :
- Maintenez la température à 30–35 °C.
- Fournissez une lumière continue ou cyclique (ex. 16 h de lumière / 8 h d’obscurité) avec une intensité de 2000–3000 lux.
- Assurez une aération ou agitation continue pour homogénéiser la culture.
- Suivi de la croissance :
- Mesurez quotidiennement l’OD à 750 nm pour suivre la croissance.
- La phase exponentielle est généralement atteinte en 7–10 jours.
- Récolte et préparation de la biomasse :
- Une fois la phase de croissance optimale atteinte, récupérez la biomasse par centrifugation.
- Rincez-la avec de l’eau distillée et séchez-la dans un four à 50–60 °C jusqu’à poids constant.
Références pour la culture :
- Spirulina plantensis grow kit manual
- Buciscanu, I. I., Maier, V., & Cretescu, I. (2023). Study of Spirulina platensis under the Heavy Metals Influence for Wastewater Remediation. Water, 15(22), 3962. https://doi.org/10.3390/w15223962
Protocole 1.2 : Évaluation basique des propriétés d’adsorption de la spiruline
Objectif :
Déterminer les capacités de sorption des métaux lourds (Cu, Zn, Pb, Cd) par la spiruline séchée, en utilisant des solutions standards.
Matériel et équipement :
- Biomasse de Spirulina platensis séchée (provenant du protocole 1.1)
- Sels pour préparer les solutions standards :
- CuSO₄·5H₂O (pour Cu²⁺)
- ZnSO₄·7H₂O (pour Zn²⁺)
- Pb(NO₃)₂ (pour Pb²⁺)
- CdSO₄·8H₂O (pour Cd²⁺)
- Réactifs spécifiques pour formation de complexes colorés (pour analyse UV-Vis) :
- Bathophénanthroline pour le cuivre
- DDC (diéthyl-dithiocarbamate) pour le zinc
- Xylénol Orange pour le plomb
- Diphenylthiocarbazone pour le cadmium
- Eau distillée
- Équipements de mesure (pipettes, flacons)
- Spectrophotomètre UV-Vis
- Tampons pour ajuster le pH (si nécessaire)
Procédure :
- Préparation des solutions standards :
- Préparez des solutions de métaux à des concentrations connues (par exemple, 0,1, 0,5, 1, 5 mg/L) en dissolvant les sels respectifs dans de l’eau distillée.
- Pour chaque métal, réalisez une série de standards afin de construire une courbe d’étalonnage.
- Formation des complexes colorés et calibration :
- Pour le cuivre :
- Ajoutez 1 ml de solution de bathophénanthroline (0,1 %) et 1 ml de solution d’ascorbate (10 %) à 10 ml de standard de Cu²⁺.
- Mesurez l’absorbance à 530–550 nm.
- Pour le zinc :
- Ajoutez 1 ml de solution de DDC (0,1 %) à 10 ml de standard de Zn²⁺.
- Mesurez l’absorbance à 430–450 nm.
- Pour le plomb :
- Ajoutez 1 ml de solution de Xylénol Orange (0,1 %) à 10 ml de standard de Pb²⁺, ajustez le pH à environ 4 avec de l’acide acétique.
- Mesurez l’absorbance à 570–580 nm.
- Pour le cadmium :
- Ajoutez 1 ml de solution de diphenylthiocarbazone (préparée dans le solvant approprié, ex. chloroforme) à 10 ml de standard de Cd²⁺, agitez pour extraire le complexe dans la phase organique.
- Mesurez l’absorbance dans la phase organique à 515–520 nm.
- Expérience avec la spiruline :
- Prenez 0,5 g de spiruline séchée et ajoutez-la à 100 ml d’une solution standard de métal (pour chaque métal séparément).
- Incubez sous agitation à température ambiante pendant 2–3 heures.
- Centrifugez pour séparer la spiruline du surnageant.
- Analysez le surnageant par UV-Vis en suivant la procédure de formation des complexes décrite ci-dessus.
- Calcul de l’efficacité d’adsorption :
- À l’aide des courbes d’étalonnage, déterminez la concentration résiduelle de métal dans le surnageant.
- Calculez l’efficacité (%) de l’adsorption :
Références pour l’évaluation de la sorption :
- Buciscanu, I. I., Maier, V., & Cretescu, I. (2023). Study of Spirulina platensis under the Heavy Metals Influence for Wastewater Remediation. Water, 15(22), 3962. https://doi.org/10.3390/w15223962
Phase 2 : Amélioration des capacités d’adsorption de la spiruline
Protocole 2.1 : Modification chimique de la spiruline
Objectif :
Améliorer la capacité d’adsorption des métaux lourds de la spiruline en modifiant sa surface par traitement acide, traitement alcalin et enrobage avec du chitosane.
Matériel et réactifs :
- Biomasse de Spirulina platensis séchée (issue de la Phase 1)
- Acide chlorhydrique (HCl) dilué, par exemple 0,5 M
- Hydroxyde de sodium (NaOH) dilué, par exemple 0,5 M
- Chitosane
- Solution d’acide acétique à 1 % (pour dissoudre le chitosane)
- Eau distillée
- Agitateur magnétique ou shaker
- Centrifugeuse
- Four de séchage (50–60 °C)
Procédure :
- Traitement acide :
- Pesez 1 g de spiruline séchée et ajoutez-la à 50 ml de solution HCl 0,5 M.
- Incubez à température ambiante pendant 30 minutes avec agitation douce.
- Centrifugez la suspension et rincez plusieurs fois avec de l’eau distillée jusqu’à atteindre un pH neutre.
- Séchez la biomasse dans le four à 50–60 °C jusqu’à poids constant.
- Traitement alcalin :
- Répétez le procédé en remplaçant HCl par une solution de NaOH 0,5 M et incubez pendant 1 heure.
- Procédez ensuite au lavage et à la séchage comme indiqué ci-dessus.
- Enrobage par chitosane :
- Préparez une solution de chitosane en dissolvant 1 g de chitosane de faible poids moléculaire dans 100 ml d’acide acétique à 1 % (assurez-vous d’obtenir une solution homogène).
- Ajoutez 1 g de spiruline (idéalement préalablement traitée par acide ou base) à cette solution et agitez pendant 2 à 4 heures à température ambiante.
- Centrifugez la suspension et rincez avec de l’eau distillée pour éliminer l’excès de chitosane.
- Séchez la spiruline enrobée au four à 50–60 °C.
- Évaluation de l’efficacité :
- Utilisez la procédure décrite dans le Protocole 1.2 (Phase 1) pour mesurer la capacité d’adsorption de la spiruline modifiée à l’aide de solutions standards de métaux lourds (Cu, Zn, Pb, Cd).
Références :
- https://www.sciencedirect.com/science/article/abs/pii/S0144861720311735
- https://www.sciencedirect.com/science/article/abs/pii/S2214785323050630#:~:text=Chitosan%20has%20been%20shown%20to,settling%20rate%20of%20suspended%20particles
Phase 3 : Création du filtre composite
Objectif :
Concevoir et fabriquer un filtre composite en intégrant la spiruline modifiée (issue de la phase 2) avec un support poreux tel que charbon actif, afin d’obtenir un matériau avec une haute capacité d’adsorption et une bonne stabilité mécanique.
Matériel et réactifs :
- Biomasse de spiruline modifiée (traitée chimiquement et/ou physiquement)
- Charbon actif
- Liant écologique (par exemple, chitosane résiduel ou alginate)
- Eau distillée
- Moulage ou presse pour former le composite (par exemple, une plaque ou des granulés)
- Four de séchage (50–60 °C)
Procédure :
- Préparation du mélange composite :
- Pesez 1 g de spiruline modifiée et 1 g de support.
- Dissolvez une quantité appropriée de liant (ex. 0,5 g de chitosane dans 50 ml d’acide acétique 1 %) afin d’obtenir une solution homogène.
- Mélangez la spiruline et le support poreux dans la solution liant sous agitation (30–60 minutes) pour assurer une répartition uniforme.
- Formation du filtre :
- Versez la pâte obtenue dans un moule ou pressez-la pour former un disque ou une plaque (selon l’application envisagée).
- Laissez reposer quelques minutes pour que le liant commence à fixer les particules.
- Séchage et consolidation :
- Placez le composite dans un four de séchage à 50–60 °C jusqu’à obtention d’un poids constant.
- Vérifiez la cohésion du matériau et effectuez, si nécessaire, des ajustements (par exemple, ajout de liant).
- Conservez un échantillon pour des tests ultérieurs de sorption.
Phase 4 : Test du filtre composite
Objectif :
Évaluer l’efficacité du filtre composite dans l’adsorption des métaux lourds, à la fois sur des solutions artificielles et sur des échantillons d’eaux usées réelles.
Matériel et réactifs :
- Prototype de filtre composite (issu de la phase 3)
- Solutions standards de métaux lourds (Cu, Zn, Pb, Cd) préparées comme en phase 1
- Échantillons d’eaux usées (après pré-filtration, ajustement de pH si nécessaire)
- Système de recirculation ou cellule de flux (pour tester en continu)
- Équipement de mesure UV-Vis et éventuellement AAS ou ICP-MS pour vérification
- Réactifs pour formation des complexes colorés (voir protocole 1.2)
Procédure :
- Test sur solution artificielle :
- Installez le prototype dans une cellule de flux ou un réacteur en continu.
- Faites circuler une solution artificielle avec une concentration connue de métal (par exemple, Cu²⁺ à 5 mg/L) à travers le filtre pendant un temps déterminé (ex. 2 heures).
- Prélevez des échantillons en entrée et en sortie du système.
- Analysez les échantillons par UV-Vis en formant les complexes colorés spécifiques pour chaque métal (comme décrit dans le protocole 1.2).
- Calculez le pourcentage d’adsorption.
- Test sur eau usée réelle :
- Pré-traitez l’eau usée par filtration pour enlever les solides en suspension.
- Ajustez le pH si nécessaire (généralement entre 6 et 7).
- Faites passer l’eau usée à travers le filtre composite dans des conditions similaires à celles du test sur solution artificielle.
- Analysez la composition des métaux en sortie du filtre pour déterminer l’efficacité globale.
- Évaluation de la performance :
- Comparez l’adsorption sur solution artificielle et eau usée.
- Identifiez les éventuelles interférences dues aux autres contaminants présents dans l’eau usée.
- Documentez les performances (débit, efficacité d’adsorption, durée de vie du filtre).
Phase 5 : Régénération et extraction des métaux du filtre saturé
Objectif :
Développer et tester une méthode de régénération du filtre composite en désorbant les métaux lourds accumulés, afin de réduire les coûts et de permettre une réutilisation durable du filtre.
Matériel et réactifs :
- Filtre composite saturé en métaux lourds (issu de la phase 4)
- Solutions de régénération :
- Solution acide faible (ex. HCl 0,1 M) pour désorber les métaux
- Alternativement, solution basique (NaOH 0,1 M) peut être testée selon le métal
- Équipement de circulation ou de lavage du filtre
- Appareils de mesure pour analyser la concentration de métaux dans la solution de désorption (UV-Vis, AAS ou ICP-MS)
Procédure :
- Régénération par désorption acide :
- Placez le filtre saturé dans un récipient contenant la solution acide (HCl 0,1 M).
- Agitez doucement pendant 30 minutes à 1 heure pour permettre la désorption des métaux.
- Récupérez la solution de désorption et analysez-la pour quantifier les métaux extraits en utilisant le protocole UV-Vis (avec formation de complexes colorés comme décrit précédemment).
- Rinçage et réactivation :
- Après désorption, rincez le filtre avec de l’eau distillée pour éliminer les résidus acides.
- Vérifiez l’efficacité de régénération en effectuant un nouveau test d’adsorption sur une solution standard de métal.
- Analyse comparative :
- Comparez la capacité d’adsorption du filtre régénéré avec celle initiale pour déterminer le taux de récupération et la perte éventuelle d’efficacité.
- Répétez le processus pour évaluer la durabilité du filtre sur plusieurs cycles.
- Extraction et valorisation :
- Analysez la solution de désorption pour déterminer la quantité de métal récupéré.
- Évaluez les options pour la récupération industrielle ou la réutilisation de ces métaux (ex. par électrolyse ou précipitation).
Model 3D
Codes pour model en STL
// --- Пользовательские Параметры Фильтра ---
// Основные размеры фильтра
filter_bottom_part_height = 80; // мм - Высота основной (нижней) части корпуса фильтра
filter_overall_diameter = 60; // мм - Общий внешний диаметр фильтра
filter_wall_thickness = 3; // мм - Общая толщина стенок (корпуса, дна)
lid_top_surface_thickness = 1.0; // мм - Толщина "потолка" верхней крышки
// Параметры резьбового соединения между корпусом и крышкой (ЗАГЛУШКИ ОСТАЮТСЯ)
lid_connection_thread_engagement_height = 7.5; // мм - Высота зацепления резьбы крышки
lid_connection_thread_nominal_diameter = filter_overall_diameter - 2 * filter_wall_thickness;
// Спецификация для ЗАГЛУШКИ резьбы крышки (может понадобиться для вашей библиотеки)
lid_connection_thread_base_spec = str("M", lid_connection_thread_nominal_diameter, "x2");
// Параметры ГОРЛЫШЕК (шеек) - для использования с metric_thread()
neck_height = 15;
neck_outer_diameter = 20; // мм - Внешний диаметр для метрической резьбы (например, M20)
neck_metric_thread_pitch = 1.5; // мм - Шаг метрической резьбы для горлышка (например, для M20x1.5)
neck_flow_diameter = 14; // мм - Внутренний диаметр протока в шейке
// Параметры для ВНУТРЕННИХ ПОЛОЧЕК
num_internal_shelves = 5;
shelf_ring_height = 1.5;
shelf_ring_protrusion = 3;
shelf_bottom_offset_in_chamber = 5;
shelf_vertical_spacing_between_shelves = 10;
// Параметры для СЕТЧАТОГО ДИСКА
mesh_disc_thickness = 0.8;
mesh_disc_hole_diameter = 1.5;
mesh_disc_hole_spacing_factor = 1.8;
mesh_disc_shelf_clearance = 0.5;
// --- Переменная для выбора отображаемой части ---
// Возможные значения: "bottom", "lid", "disc", "all_separated", "all_assembled"
render_part = "all_separated";
// --- Использование Библиотеки threads.scad ---
// Убедитесь, что путь и имя файла корректны для вашей системы
include <threads.scad>;
// --- Расчетные Значения ---
// Внутренний диаметр основной камеры (где резьба крышки и полки)
chamber_actual_inner_diameter = lid_connection_thread_nominal_diameter;
// Качество (количество сегментов) для отверстий в сетчатом диске
mesh_hole_fn = 12;
// Внешний диаметр сетчатого диска
disc_actual_outer_diameter = (chamber_actual_inner_diameter - 2 * shelf_ring_protrusion) - mesh_disc_shelf_clearance;
// Z-координата центра демонстрационного диска, когда он лежит на первой полочке
_first_shelf_top_z_abs = filter_wall_thickness + shelf_bottom_offset_in_chamber + shelf_ring_height;
disc_demo_center_z_on_shelf = _first_shelf_top_z_abs + mesh_disc_thickness / 2;
// --- Глобальное Качество Рендеринга ---
$fn = 80;
// --- Вспомогательный модуль для вывода сообщений о заглушках резьбы (для крышки) ---
module echo_thread_placeholder(context_message) {
echo(str("INFO: ЗАГЛУШКА ДЛЯ РЕЗЬБЫ [", context_message, "]: ",
"Замените соответствующий вызов cylinder() на вызов функции из вашей библиотеки threads.scad."));
}
// --- Модуль для создания резьбового соединительного горлышка (шейки) ---
module neck_connector(height_n, outer_dia_n, pitch_n, flow_dia_n) {
if (height_n <= 0) { echo(str("ПРЕДУПРЕЖДЕНИЕ (neck_connector): Высота горлышка (height_n=", height_n, ") <= 0")); }
else if (outer_dia_n <= 0) { echo(str("ПРЕДУПРЕЖДЕНИЕ (neck_connector): Внешний диаметр горлышка (outer_dia_n=", outer_dia_n, ") <= 0")); }
else if (pitch_n <= 0) { echo(str("ПРЕДУПРЕЖДЕНИЕ (neck_connector): Шаг резьбы горлышка (pitch_n=", pitch_n, ") <= 0")); }
else if (flow_dia_n <= 0) { echo(str("ПРЕДУПРЕЖДЕНИЕ (neck_connector): Внутренний диаметр протока (flow_dia_n=", flow_dia_n, ") <= 0")); }
else if (outer_dia_n <= flow_dia_n) { echo(str("ПРЕДУПРЕЖДЕНИЕ (neck_connector): Внешний диаметр (", outer_dia_n, ") <= внутреннего (", flow_dia_n,")")); }
else {
echo(str("INFO (neck_connector): Генерирую горлышко с метрической резьбой: D=", outer_dia_n, ", Pitch=", pitch_n, ", L=", height_n));
difference() {
metric_thread(diameter=outer_dia_n, pitch=pitch_n, length=height_n, internal=false);
translate([0, 0, -0.1]) {
cylinder(h = height_n + 0.2, d = flow_dia_n, center = false);
}
}
}
}
// --- Модуль для Внутренних Полочек ---
module internal_shelves_generator(_chamber_dia_for_shelves_od, _chamber_floor_z_offset) {
shelf_outer_diameter_actual = _chamber_dia_for_shelves_od;
shelf_inner_diameter_actual = _chamber_dia_for_shelves_od - 2 * shelf_ring_protrusion;
if (shelf_inner_diameter_actual < 0) {
echo(str("ПРЕДУПРЕЖДЕНИЕ (internal_shelves): Выступ полочки (shelf_ring_protrusion=", shelf_ring_protrusion,
") слишком большой для диаметра камеры (", _chamber_dia_for_shelves_od, "). Полочки могут быть сплошными дисками."));
shelf_inner_diameter_actual = 0;
}
for (i = [0 : num_internal_shelves - 1]) {
shelf_z_pos = _chamber_floor_z_offset + shelf_bottom_offset_in_chamber + i * (shelf_ring_height + shelf_vertical_spacing_between_shelves);
translate([0, 0, shelf_z_pos]) {
difference() {
cylinder(h = shelf_ring_height, d = shelf_outer_diameter_actual, center = false);
cylinder(h = shelf_ring_height + 0.2, d = shelf_inner_diameter_actual, center = false);
}
}
}
}
// --- Модуль для Сетчатого Диска ---
module filter_mesh_disc(disc_od) {
disc_radius = disc_od / 2;
solid_disc_height = mesh_disc_thickness;
difference() {
cylinder(h = solid_disc_height, d = disc_od, center = true);
hole_d = mesh_disc_hole_diameter;
spacing = hole_d * mesh_disc_hole_spacing_factor;
if (spacing > 0 && hole_d > 0 && disc_radius > hole_d) { // Добавлена проверка disc_radius > hole_d
num_steps_half = floor((disc_radius - hole_d/2) / spacing); // Немного скорректирован расчет num_steps_half
for (x_step = [-num_steps_half : num_steps_half]) {
for (y_step = [-num_steps_half : num_steps_half]) {
x_pos = x_step * spacing;
y_pos = y_step * spacing;
if (sqrt(x_pos*x_pos + y_pos*y_pos) < disc_radius - hole_d / 2) { // Условие, чтобы отверстие было внутри
translate([x_pos, y_pos, 0]) {
cylinder(h = solid_disc_height + 0.2, d = hole_d, center = true, $fn = mesh_hole_fn);
}
}
}
}
} else {
echo ("ПРЕДУПРЕЖДЕНИЕ (filter_mesh_disc): Отверстия в сетке не могут быть созданы из-за размеров диска или параметров отверстий.");
}
}
}
// --- Модуль Нижней Части Фильтра ---
module filter_bottom_part(
f_height, f_od, f_wall_t,
chamber_id,
lid_thread_dia, current_lid_thread_engage_h, lid_thread_spec_int_lib,
n_h, n_od, n_pitch, n_fd
) {
chamber_h_available = f_height - f_wall_t - current_lid_thread_engage_h;
union() {
difference() {
cylinder(h = f_height, d = f_od, center = false);
if (chamber_h_available > 0) {
translate([0, 0, f_wall_t]) {
cylinder(h = chamber_h_available + 0.1, d = chamber_id, center = false);
}
} else { echo("ПРЕДУПРЕЖДЕНИЕ (filter_bottom_part): Недостаточная высота для камеры хранения."); }
translate([0, 0, f_height - current_lid_thread_engage_h]) {
echo_thread_placeholder(str("Нижняя часть: Внутренняя резьба для крышки (MajorID=", lid_thread_dia, ")"));
cylinder(h = current_lid_thread_engage_h + 0.1, d = lid_thread_dia, center = false); // ЗАГЛУШКА для резьбы крышки
}
translate([0, 0, -0.1]) {
cylinder(h = f_wall_t + 0.2, d = n_fd, center = false);
}
}
translate([0, 0, -n_h]) {
neck_connector(n_h, n_od, n_pitch, n_fd);
}
if (num_internal_shelves > 0 && chamber_h_available > 0) {
chamber_floor_z = f_wall_t;
max_shelf_stack_height = shelf_bottom_offset_in_chamber +
num_internal_shelves * shelf_ring_height +
(num_internal_shelves > 1 ? (num_internal_shelves - 1) * shelf_vertical_spacing_between_shelves : 0) ;
if (max_shelf_stack_height <= chamber_h_available) {
internal_shelves_generator(chamber_id, chamber_floor_z);
} else {
echo(str("ПРЕДУПРЕЖДЕНИЕ (filter_bottom_part): Полочки не помещаются. Требуется: ", max_shelf_stack_height, "мм, доступно: ", chamber_h_available, "мм."));
}
}
}
}
// --- Модуль Верхней Крышки Фильтра ---
module filter_top_lid_part(
f_od, current_lid_top_cap_thickness,
lid_thread_dia, current_lid_thread_engage_h, lid_thread_spec_ext_lib,
n_h, n_od, n_pitch, n_fd
) {
lid_total_height_up_to_cap_top = current_lid_thread_engage_h + current_lid_top_cap_thickness;
difference() {
union() {
echo_thread_placeholder(str("Крышка: Внешняя резьба для соединения (OD=", lid_thread_dia, ")"));
cylinder(d = lid_thread_dia, h = current_lid_thread_engage_h, center = false); // ЗАГЛУШКА для резьбы крышки
translate([0, 0, current_lid_thread_engage_h]) {
cylinder(d = f_od, h = current_lid_top_cap_thickness, center = false);
}
}
translate([0, 0, -0.1]) {
cylinder(h = lid_total_height_up_to_cap_top + 0.2, d = n_fd, center = false);
}
}
translate([0, 0, lid_total_height_up_to_cap_top]) {
neck_connector(n_h, n_od, n_pitch, n_fd);
}
}
// --- Сборка и Отображение Частей Фильтра (в зависимости от render_part) ---
if (render_part == "bottom") {
echo("Отображение: Только НИЖНЯЯ ЧАСТЬ");
filter_bottom_part(
filter_bottom_part_height, filter_overall_diameter, filter_wall_thickness,
chamber_actual_inner_diameter,
lid_connection_thread_nominal_diameter, lid_connection_thread_engagement_height,
lid_connection_thread_base_spec,
neck_height, neck_outer_diameter, neck_metric_thread_pitch, neck_flow_diameter
);
} else if (render_part == "lid") {
echo("Отображение: Только ВЕРХНЯЯ КРЫШКА (в начале координат)");
filter_top_lid_part(
filter_overall_diameter, lid_top_surface_thickness,
lid_connection_thread_nominal_diameter, lid_connection_thread_engagement_height,
lid_connection_thread_base_spec,
neck_height, neck_outer_diameter, neck_metric_thread_pitch, neck_flow_diameter
);
} else if (render_part == "disc") {
echo("Отображение: Только СЕТЧАТЫЙ ДИСК (в начале координат)");
if (disc_actual_outer_diameter > 0 && disc_actual_outer_diameter > mesh_disc_hole_diameter * 1.5) { // Немного изменил условие
filter_mesh_disc(disc_od = disc_actual_outer_diameter);
} else {
echo("ПРЕДУПРЕЖДЕНИЕ: Сетчатый диск не может быть создан или отображен из-за некорректных расчетных размеров. Проверьте параметры диска и полочек.");
}
} else if (render_part == "all_separated") {
echo("Отображение: ВСЕ ЧАСТИ РАЗДЕЛЬНО");
filter_bottom_part(
filter_bottom_part_height, filter_overall_diameter, filter_wall_thickness,
chamber_actual_inner_diameter,
lid_connection_thread_nominal_diameter, lid_connection_thread_engagement_height,
lid_connection_thread_base_spec,
neck_height, neck_outer_diameter, neck_metric_thread_pitch, neck_flow_diameter
);
translate([0, 0, filter_bottom_part_height + 10]) {
filter_top_lid_part(
filter_overall_diameter, lid_top_surface_thickness,
lid_connection_thread_nominal_diameter, lid_connection_thread_engagement_height,
lid_connection_thread_base_spec,
neck_height, neck_outer_diameter, neck_metric_thread_pitch, neck_flow_diameter
);
}
if (disc_actual_outer_diameter > 0 && disc_actual_outer_diameter > mesh_disc_hole_diameter * 1.5) {
translate([filter_overall_diameter + 10, 0, mesh_disc_thickness / 2]) {
filter_mesh_disc(disc_od = disc_actual_outer_diameter);
}
}
} else if (render_part == "all_assembled") {
echo("Отображение: ВСЕ ЧАСТИ В СБОРЕ");
filter_bottom_part(
filter_bottom_part_height, filter_overall_diameter, filter_wall_thickness,
chamber_actual_inner_diameter,
lid_connection_thread_nominal_diameter, lid_connection_thread_engagement_height,
lid_connection_thread_base_spec,
neck_height, neck_outer_diameter, neck_metric_thread_pitch, neck_flow_diameter
);
translate([0, 0, filter_bottom_part_height - lid_connection_thread_engagement_height]) {
filter_top_lid_part(
filter_overall_diameter, lid_top_surface_thickness,
lid_connection_thread_nominal_diameter, lid_connection_thread_engagement_height,
lid_connection_thread_base_spec,
neck_height, neck_outer_diameter, neck_metric_thread_pitch, neck_flow_diameter
);
}
if (disc_actual_outer_diameter > 0 && num_internal_shelves > 0 && disc_actual_outer_diameter > mesh_disc_hole_diameter * 1.5) {
translate([0, 0, disc_demo_center_z_on_shelf]) {
filter_mesh_disc(disc_od = disc_actual_outer_diameter);
}
}
} else {
echo(str("НЕИЗВЕСТНОЕ ЗНАЧЕНИЕ для render_part: '", render_part, "'. Установите 'bottom', 'lid', 'disc', 'all_separated' или 'all_assembled'."));
}
/*
--- Инструкция по экспорту STL ---
1. Измените значение переменной `render_part` в начале этого скрипта на то,
какую часть вы хотите экспортировать (например, `render_part = "bottom";`).
2. Нажмите F5 (Предпросмотр), а затем F6 (Рендеринг). Это может занять некоторое время.
3. После завершения рендеринга (F6) выберите в меню `File -> Export -> Export as STL...`
и сохраните файл.
4. Повторите для каждой из трех частей ("bottom", "lid", "disc").
--- Напоминание по резьбе соединения крышки и корпуса ---
Резьба для соединения основной части и крышки все еще использует ЗАГЛУШКИ
(простые цилиндры вместо реальной резьбы). Вам нужно будет адаптировать код
в модулях `filter_bottom_part` (для внутренней резьбы) и `filter_top_lid_part`
(для внешней резьбы крышки) для использования вашей библиотеки `threads.scad`,
когда вы будете готовы это сделать. Укажите, как ваша библиотека создает внутреннюю
резьбу (например, есть ли функция типа `metric_thread` с параметром `internal=true`,
или отдельный модуль для создания "гайки", которую нужно вычесть).
No Comments