<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.opensourceecology.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Farmy89</id>
	<title>Open Source Ecology - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.opensourceecology.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Farmy89"/>
	<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/wiki/Special:Contributions/Farmy89"/>
	<updated>2026-04-20T08:00:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.13</generator>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Open_Source_Freeze_Dryer_Product_Architecture&amp;diff=318885</id>
		<title>Open Source Freeze Dryer Product Architecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Open_Source_Freeze_Dryer_Product_Architecture&amp;diff=318885"/>
		<updated>2026-01-21T16:07:31Z</updated>

		<summary type="html">&lt;p&gt;Farmy89: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What to produce? Powdered Whole Fruit? Freeze dried juice. Which fruits are needed?&lt;br /&gt;
&lt;br /&gt;
Freeze dried fruit vs powder?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Blue Alpine Large model, with capacity to receive 10 fresh kilos and output 1 kilo of freeze dried.&lt;br /&gt;
The goal on first validation is the cost of processing 1 kilogram or liter of freeze dried fruit product.&lt;br /&gt;
Connected to grid and with PV System Integration.&lt;br /&gt;
The goal is to reduce the cost at 0.01 USD per KW used in the process of freeze drying.&lt;br /&gt;
&lt;br /&gt;
After achieving the cost of Kw. Received feedback on what the current ingredient market wants, The next validation is Product development. And then Choosing the equipment to scale to serve customer needs.&lt;br /&gt;
&lt;br /&gt;
[[  https://bluealpinefreezedryers.com/collections/freeze-dryers/products/rev-3-large-freeze-dryer?_pos=4&amp;amp;_fid=6f59314cb&amp;amp;_ss=c&amp;amp;variant=54296442700067|Off the shelf Freeze dryer Information:]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Freeze-Dried Product Forms (Reference)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Freeze-dried products can be classified by physical geometry, particle structure, and functional intent. The freeze dryer itself produces a porous solid; the final form depends on pre-processing (cutting, molding, formulation) and post-processing (breaking, milling, agglomeration, coating).&lt;br /&gt;
&lt;br /&gt;
This classification is useful for design decisions, energy modeling, and target use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Whole and Intact Forms&lt;br /&gt;
&lt;br /&gt;
Macro-structure preserved&lt;br /&gt;
&lt;br /&gt;
Whole units&lt;br /&gt;
Entire fruits, vegetables, herbs, or biological materials dried intact.&lt;br /&gt;
Uses: premium foods, snacks, visual identity products.&lt;br /&gt;
&lt;br /&gt;
Sliced forms&lt;br /&gt;
Rings, discs, slabs, or cross-sections.&lt;br /&gt;
Advantages: faster drying, uniform sublimation, predictable rehydration.&lt;br /&gt;
&lt;br /&gt;
Cubed / diced forms&lt;br /&gt;
Regular geometry (typically 5–20 mm).&lt;br /&gt;
Uses: soups, ready meals, space food.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Fragmented Solid Forms&lt;br /&gt;
&lt;br /&gt;
Broken but not milled&lt;br /&gt;
&lt;br /&gt;
Chunks&lt;br /&gt;
Irregular large pieces resulting from manual or mechanical breaking.&lt;br /&gt;
&lt;br /&gt;
Flakes / shards&lt;br /&gt;
Thin fractured sheets formed naturally in tray freeze-drying.&lt;br /&gt;
&lt;br /&gt;
Crumbles / grits&lt;br /&gt;
Small fragments between flakes and granules.&lt;br /&gt;
&lt;br /&gt;
3. Powder and Particle Forms&lt;br /&gt;
&lt;br /&gt;
Particle size controlled after drying&lt;br /&gt;
&lt;br /&gt;
Standard milled powder&lt;br /&gt;
Coarsely ground freeze-dried solids (≈200–800 µm).&lt;br /&gt;
&lt;br /&gt;
Micronized / fine powder&lt;br /&gt;
Finely milled material with high surface area (≈20–200 µm).&lt;br /&gt;
&lt;br /&gt;
Granules&lt;br /&gt;
Larger particles (≈0.5–2 mm) with improved flowability.&lt;br /&gt;
&lt;br /&gt;
Agglomerated powder&lt;br /&gt;
Fine powders re-formed into porous clusters for instant wetting.&lt;br /&gt;
&lt;br /&gt;
4. Engineered Geometry Forms&lt;br /&gt;
&lt;br /&gt;
Shape defined intentionally&lt;br /&gt;
&lt;br /&gt;
Pellets / beads&lt;br /&gt;
Spherical or near-spherical units with excellent flow characteristics.&lt;br /&gt;
&lt;br /&gt;
Cylinders / plugs&lt;br /&gt;
Molded to specific dimensions, common in vials.&lt;br /&gt;
&lt;br /&gt;
Wafers&lt;br /&gt;
Thin, fragile discs optimized for fast dissolution.&lt;br /&gt;
&lt;br /&gt;
5. Monolithic Forms&lt;br /&gt;
&lt;br /&gt;
Freeze-dried as a single body&lt;br /&gt;
&lt;br /&gt;
Blocks / bricks&lt;br /&gt;
Large porous monoliths dried as one piece.&lt;br /&gt;
&lt;br /&gt;
Porous solids from pastes or slurries&lt;br /&gt;
Formulated mixtures freeze-dried into rigid structures.&lt;br /&gt;
&lt;br /&gt;
6. Sheet and Film Forms&lt;br /&gt;
&lt;br /&gt;
Very thin geometries&lt;br /&gt;
&lt;br /&gt;
Sheets&lt;br /&gt;
Large, thin layers dried on trays and later cut or milled.&lt;br /&gt;
&lt;br /&gt;
Films&lt;br /&gt;
Ultra-thin freeze-dried layers, sometimes flexible.&lt;br /&gt;
&lt;br /&gt;
7. Composite and Formulated Forms&lt;br /&gt;
&lt;br /&gt;
Freeze-drying combined with formulation&lt;br /&gt;
&lt;br /&gt;
Carrier-based forms&lt;br /&gt;
Actives embedded in sugars, proteins, or polymers.&lt;br /&gt;
&lt;br /&gt;
Encapsulated forms&lt;br /&gt;
Freeze-dried cores later coated for protection or controlled release.&lt;br /&gt;
&lt;br /&gt;
Layered structures&lt;br /&gt;
Multiple compositions freeze-dried together in a single body.&lt;br /&gt;
&lt;br /&gt;
8. Functional Classification (Use-Driven)&lt;br /&gt;
&lt;br /&gt;
Independent of geometry&lt;br /&gt;
&lt;br /&gt;
Instant-rehydration forms&lt;br /&gt;
Optimized porosity for rapid wetting.&lt;br /&gt;
&lt;br /&gt;
Controlled or slow-rehydration forms&lt;br /&gt;
Higher density or coated structures.&lt;br /&gt;
&lt;br /&gt;
Direct-eat crunchy forms&lt;br /&gt;
Texture prioritized over rehydration.&lt;br /&gt;
&lt;br /&gt;
9. Non-Food and Technical Forms&lt;br /&gt;
&lt;br /&gt;
Lyophilized biologicals&lt;br /&gt;
Microorganisms, enzymes, vaccines, starter cultures.&lt;br /&gt;
&lt;br /&gt;
Freeze-dried foams&lt;br /&gt;
Extremely porous structures for research or biomedical use.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Design Relevance for Open-Source Freeze Dryers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Geometry strongly affects drying time and energy per kg&lt;br /&gt;
&lt;br /&gt;
Porosity determines rehydration speed&lt;br /&gt;
&lt;br /&gt;
Most commercial “forms” are achieved by post-processing&lt;br /&gt;
&lt;br /&gt;
Tray freeze dryers naturally produce sheets, flakes, and blocks&lt;br /&gt;
&lt;br /&gt;
Molds and vials enable plugs, wafers, and pellets&lt;br /&gt;
&lt;br /&gt;
The same freeze dryer can serve multiple markets by changing form&lt;br /&gt;
&lt;br /&gt;
https://chatgpt.com/share/6970f9ad-3534-8012-ba22-d634f955036b&lt;/div&gt;</summary>
		<author><name>Farmy89</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Open_Source_Freeze_Dryer_Product_Architecture&amp;diff=318884</id>
		<title>Open Source Freeze Dryer Product Architecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Open_Source_Freeze_Dryer_Product_Architecture&amp;diff=318884"/>
		<updated>2026-01-21T16:05:18Z</updated>

		<summary type="html">&lt;p&gt;Farmy89: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What to produce? Powdered Whole Fruit? Freeze dried juice. Which fruits are needed?&lt;br /&gt;
&lt;br /&gt;
Freeze dried fruit vs powder?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Blue Alpine Large model, with capacity to receive 10 fresh kilos and output 1 kilo of freeze dried.&lt;br /&gt;
The goal on first validation is the cost of processing 1 kilogram or liter of freeze dried fruit product.&lt;br /&gt;
Connected to grid and with PV System Integration.&lt;br /&gt;
The goal is to reduce the cost at 0.01 USD per KW used in the process of freeze drying.&lt;br /&gt;
&lt;br /&gt;
After achieving the cost of Kw. Received feedback on what the current ingredient market wants, The next validation is Product development. And then Choosing the equipment to scale to serve customer needs.&lt;br /&gt;
&lt;br /&gt;
[[  https://bluealpinefreezedryers.com/collections/freeze-dryers/products/rev-3-large-freeze-dryer?_pos=4&amp;amp;_fid=6f59314cb&amp;amp;_ss=c&amp;amp;variant=54296442700067|Off the shelf Freeze dryer Information:]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Freeze-Dried Product Forms (Reference)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Freeze-dried products can be classified by physical geometry, particle structure, and functional intent. The freeze dryer itself produces a porous solid; the final form depends on pre-processing (cutting, molding, formulation) and post-processing (breaking, milling, agglomeration, coating).&lt;br /&gt;
&lt;br /&gt;
This classification is useful for design decisions, energy modeling, and target use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Whole and Intact Forms&lt;br /&gt;
&lt;br /&gt;
Macro-structure preserved&lt;br /&gt;
&lt;br /&gt;
Whole units&lt;br /&gt;
Entire fruits, vegetables, herbs, or biological materials dried intact.&lt;br /&gt;
Uses: premium foods, snacks, visual identity products.&lt;br /&gt;
&lt;br /&gt;
Sliced forms&lt;br /&gt;
Rings, discs, slabs, or cross-sections.&lt;br /&gt;
Advantages: faster drying, uniform sublimation, predictable rehydration.&lt;br /&gt;
&lt;br /&gt;
Cubed / diced forms&lt;br /&gt;
Regular geometry (typically 5–20 mm).&lt;br /&gt;
Uses: soups, ready meals, space food.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Fragmented Solid Forms&lt;br /&gt;
&lt;br /&gt;
Broken but not milled&lt;br /&gt;
&lt;br /&gt;
Chunks&lt;br /&gt;
Irregular large pieces resulting from manual or mechanical breaking.&lt;br /&gt;
&lt;br /&gt;
Flakes / shards&lt;br /&gt;
Thin fractured sheets formed naturally in tray freeze-drying.&lt;br /&gt;
&lt;br /&gt;
Crumbles / grits&lt;br /&gt;
Small fragments between flakes and granules.&lt;br /&gt;
&lt;br /&gt;
3. Powder and Particle Forms&lt;br /&gt;
&lt;br /&gt;
Particle size controlled after drying&lt;br /&gt;
&lt;br /&gt;
Standard milled powder&lt;br /&gt;
Coarsely ground freeze-dried solids (≈200–800 µm).&lt;br /&gt;
&lt;br /&gt;
Micronized / fine powder&lt;br /&gt;
Finely milled material with high surface area (≈20–200 µm).&lt;br /&gt;
&lt;br /&gt;
Granules&lt;br /&gt;
Larger particles (≈0.5–2 mm) with improved flowability.&lt;br /&gt;
&lt;br /&gt;
Agglomerated powder&lt;br /&gt;
Fine powders re-formed into porous clusters for instant wetting.&lt;br /&gt;
&lt;br /&gt;
4. Engineered Geometry Forms&lt;br /&gt;
&lt;br /&gt;
Shape defined intentionally&lt;br /&gt;
&lt;br /&gt;
Pellets / beads&lt;br /&gt;
Spherical or near-spherical units with excellent flow characteristics.&lt;br /&gt;
&lt;br /&gt;
Cylinders / plugs&lt;br /&gt;
Molded to specific dimensions, common in vials.&lt;br /&gt;
&lt;br /&gt;
Wafers&lt;br /&gt;
Thin, fragile discs optimized for fast dissolution.&lt;br /&gt;
&lt;br /&gt;
5. Monolithic Forms&lt;br /&gt;
&lt;br /&gt;
Freeze-dried as a single body&lt;br /&gt;
&lt;br /&gt;
Blocks / bricks&lt;br /&gt;
Large porous monoliths dried as one piece.&lt;br /&gt;
&lt;br /&gt;
Porous solids from pastes or slurries&lt;br /&gt;
Formulated mixtures freeze-dried into rigid structures.&lt;br /&gt;
&lt;br /&gt;
6. Sheet and Film Forms&lt;br /&gt;
&lt;br /&gt;
Very thin geometries&lt;br /&gt;
&lt;br /&gt;
Sheets&lt;br /&gt;
Large, thin layers dried on trays and later cut or milled.&lt;br /&gt;
&lt;br /&gt;
Films&lt;br /&gt;
Ultra-thin freeze-dried layers, sometimes flexible.&lt;br /&gt;
&lt;br /&gt;
7. Composite and Formulated Forms&lt;br /&gt;
&lt;br /&gt;
Freeze-drying combined with formulation&lt;br /&gt;
&lt;br /&gt;
Carrier-based forms&lt;br /&gt;
Actives embedded in sugars, proteins, or polymers.&lt;br /&gt;
&lt;br /&gt;
Encapsulated forms&lt;br /&gt;
Freeze-dried cores later coated for protection or controlled release.&lt;br /&gt;
&lt;br /&gt;
Layered structures&lt;br /&gt;
Multiple compositions freeze-dried together in a single body.&lt;br /&gt;
&lt;br /&gt;
8. Functional Classification (Use-Driven)&lt;br /&gt;
&lt;br /&gt;
Independent of geometry&lt;br /&gt;
&lt;br /&gt;
Instant-rehydration forms&lt;br /&gt;
Optimized porosity for rapid wetting.&lt;br /&gt;
&lt;br /&gt;
Controlled or slow-rehydration forms&lt;br /&gt;
Higher density or coated structures.&lt;br /&gt;
&lt;br /&gt;
Direct-eat crunchy forms&lt;br /&gt;
Texture prioritized over rehydration.&lt;br /&gt;
&lt;br /&gt;
9. Non-Food and Technical Forms&lt;br /&gt;
&lt;br /&gt;
Lyophilized biologicals&lt;br /&gt;
Microorganisms, enzymes, vaccines, starter cultures.&lt;br /&gt;
&lt;br /&gt;
Freeze-dried foams&lt;br /&gt;
Extremely porous structures for research or biomedical use.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Design Relevance for Open-Source Freeze Dryers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Geometry strongly affects drying time and energy per kg&lt;br /&gt;
&lt;br /&gt;
Porosity determines rehydration speed&lt;br /&gt;
&lt;br /&gt;
Most commercial “forms” are achieved by post-processing&lt;br /&gt;
&lt;br /&gt;
Tray freeze dryers naturally produce sheets, flakes, and blocks&lt;br /&gt;
&lt;br /&gt;
Molds and vials enable plugs, wafers, and pellets&lt;br /&gt;
&lt;br /&gt;
The same freeze dryer can serve multiple markets by changing form&lt;/div&gt;</summary>
		<author><name>Farmy89</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Open_Source_Freeze_Dryer_Product_Architecture&amp;diff=318881</id>
		<title>Open Source Freeze Dryer Product Architecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Open_Source_Freeze_Dryer_Product_Architecture&amp;diff=318881"/>
		<updated>2026-01-21T16:03:08Z</updated>

		<summary type="html">&lt;p&gt;Farmy89: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What to produce? Powdered Whole Fruit? Freeze dried juice. Which fruits are needed?&lt;br /&gt;
&lt;br /&gt;
Freeze dried fruit vs powder?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Blue Alpine Large model, with capacity to receive 10 fresh kilos and output 1 kilo of freeze dried.&lt;br /&gt;
The goal on first validation is the cost of processing 1 kilogram or liter of freeze dried fruit product.&lt;br /&gt;
Connected to grid and with PV System Integration.&lt;br /&gt;
The goal is to reduce the cost at 0.01 USD per KW used in the process of freeze drying.&lt;br /&gt;
&lt;br /&gt;
After achieving the cost of Kw. Received feedback on what the current ingredient market wants, The next validation is Product development. And then Choosing the equipment to scale to serve customer needs.&lt;br /&gt;
&lt;br /&gt;
[[  https://bluealpinefreezedryers.com/collections/freeze-dryers/products/rev-3-large-freeze-dryer?_pos=4&amp;amp;_fid=6f59314cb&amp;amp;_ss=c&amp;amp;variant=54296442700067|Off the shelf Freeze dryer Information:]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Freeze-Dried Product Forms (Reference)&lt;br /&gt;
&lt;br /&gt;
Freeze-dried products can be classified by physical geometry, particle structure, and functional intent. The freeze dryer itself produces a porous solid; the final form depends on pre-processing (cutting, molding, formulation) and post-processing (breaking, milling, agglomeration, coating).&lt;br /&gt;
&lt;br /&gt;
This classification is useful for design decisions, energy modeling, and target use cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Whole and Intact Forms&lt;br /&gt;
&lt;br /&gt;
Macro-structure preserved&lt;br /&gt;
&lt;br /&gt;
Whole units&lt;br /&gt;
Entire fruits, vegetables, herbs, or biological materials dried intact.&lt;br /&gt;
Uses: premium foods, snacks, visual identity products.&lt;br /&gt;
&lt;br /&gt;
Sliced forms&lt;br /&gt;
Rings, discs, slabs, or cross-sections.&lt;br /&gt;
Advantages: faster drying, uniform sublimation, predictable rehydration.&lt;br /&gt;
&lt;br /&gt;
Cubed / diced forms&lt;br /&gt;
Regular geometry (typically 5–20 mm).&lt;br /&gt;
Uses: soups, ready meals, space food.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Fragmented Solid Forms&lt;br /&gt;
&lt;br /&gt;
Broken but not milled&lt;br /&gt;
&lt;br /&gt;
Chunks&lt;br /&gt;
Irregular large pieces resulting from manual or mechanical breaking.&lt;br /&gt;
&lt;br /&gt;
Flakes / shards&lt;br /&gt;
Thin fractured sheets formed naturally in tray freeze-drying.&lt;br /&gt;
&lt;br /&gt;
Crumbles / grits&lt;br /&gt;
Small fragments between flakes and granules.&lt;br /&gt;
&lt;br /&gt;
3. Powder and Particle Forms&lt;br /&gt;
&lt;br /&gt;
Particle size controlled after drying&lt;br /&gt;
&lt;br /&gt;
Standard milled powder&lt;br /&gt;
Coarsely ground freeze-dried solids (≈200–800 µm).&lt;br /&gt;
&lt;br /&gt;
Micronized / fine powder&lt;br /&gt;
Finely milled material with high surface area (≈20–200 µm).&lt;br /&gt;
&lt;br /&gt;
Granules&lt;br /&gt;
Larger particles (≈0.5–2 mm) with improved flowability.&lt;br /&gt;
&lt;br /&gt;
Agglomerated powder&lt;br /&gt;
Fine powders re-formed into porous clusters for instant wetting.&lt;br /&gt;
&lt;br /&gt;
4. Engineered Geometry Forms&lt;br /&gt;
&lt;br /&gt;
Shape defined intentionally&lt;br /&gt;
&lt;br /&gt;
Pellets / beads&lt;br /&gt;
Spherical or near-spherical units with excellent flow characteristics.&lt;br /&gt;
&lt;br /&gt;
Cylinders / plugs&lt;br /&gt;
Molded to specific dimensions, common in vials.&lt;br /&gt;
&lt;br /&gt;
Wafers&lt;br /&gt;
Thin, fragile discs optimized for fast dissolution.&lt;br /&gt;
&lt;br /&gt;
5. Monolithic Forms&lt;br /&gt;
&lt;br /&gt;
Freeze-dried as a single body&lt;br /&gt;
&lt;br /&gt;
Blocks / bricks&lt;br /&gt;
Large porous monoliths dried as one piece.&lt;br /&gt;
&lt;br /&gt;
Porous solids from pastes or slurries&lt;br /&gt;
Formulated mixtures freeze-dried into rigid structures.&lt;br /&gt;
&lt;br /&gt;
6. Sheet and Film Forms&lt;br /&gt;
&lt;br /&gt;
Very thin geometries&lt;br /&gt;
&lt;br /&gt;
Sheets&lt;br /&gt;
Large, thin layers dried on trays and later cut or milled.&lt;br /&gt;
&lt;br /&gt;
Films&lt;br /&gt;
Ultra-thin freeze-dried layers, sometimes flexible.&lt;br /&gt;
&lt;br /&gt;
7. Composite and Formulated Forms&lt;br /&gt;
&lt;br /&gt;
Freeze-drying combined with formulation&lt;br /&gt;
&lt;br /&gt;
Carrier-based forms&lt;br /&gt;
Actives embedded in sugars, proteins, or polymers.&lt;br /&gt;
&lt;br /&gt;
Encapsulated forms&lt;br /&gt;
Freeze-dried cores later coated for protection or controlled release.&lt;br /&gt;
&lt;br /&gt;
Layered structures&lt;br /&gt;
Multiple compositions freeze-dried together in a single body.&lt;br /&gt;
&lt;br /&gt;
8. Functional Classification (Use-Driven)&lt;br /&gt;
&lt;br /&gt;
Independent of geometry&lt;br /&gt;
&lt;br /&gt;
Instant-rehydration forms&lt;br /&gt;
Optimized porosity for rapid wetting.&lt;br /&gt;
&lt;br /&gt;
Controlled or slow-rehydration forms&lt;br /&gt;
Higher density or coated structures.&lt;br /&gt;
&lt;br /&gt;
Direct-eat crunchy forms&lt;br /&gt;
Texture prioritized over rehydration.&lt;br /&gt;
&lt;br /&gt;
9. Non-Food and Technical Forms&lt;br /&gt;
&lt;br /&gt;
Lyophilized biologicals&lt;br /&gt;
Microorganisms, enzymes, vaccines, starter cultures.&lt;br /&gt;
&lt;br /&gt;
Freeze-dried foams&lt;br /&gt;
Extremely porous structures for research or biomedical use.&lt;br /&gt;
&lt;br /&gt;
Design Relevance for Open-Source Freeze Dryers&lt;br /&gt;
&lt;br /&gt;
Geometry strongly affects drying time and energy per kg&lt;br /&gt;
&lt;br /&gt;
Porosity determines rehydration speed&lt;br /&gt;
&lt;br /&gt;
Most commercial “forms” are achieved by post-processing&lt;br /&gt;
&lt;br /&gt;
Tray freeze dryers naturally produce sheets, flakes, and blocks&lt;br /&gt;
&lt;br /&gt;
Molds and vials enable plugs, wafers, and pellets&lt;br /&gt;
&lt;br /&gt;
The same freeze dryer can serve multiple markets by changing form&lt;/div&gt;</summary>
		<author><name>Farmy89</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Open_Source_Freeze_Dryer_Product_Architecture&amp;diff=318877</id>
		<title>Open Source Freeze Dryer Product Architecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Open_Source_Freeze_Dryer_Product_Architecture&amp;diff=318877"/>
		<updated>2026-01-21T15:56:08Z</updated>

		<summary type="html">&lt;p&gt;Farmy89: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What to produce? Powdered Whole Fruit? Freeze dried juice. Which fruits are needed?&lt;br /&gt;
&lt;br /&gt;
Freeze dried fruit vs powder?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Blue Alpine Large model, with capacity to receive 10 fresh kilos and output 1 kilo of freeze dried.&lt;br /&gt;
The goal on first validation is the cost of processing 1 kilogram or liter of freeze dried fruit product.&lt;br /&gt;
Connected to grid and with PV System Integration.&lt;br /&gt;
The goal is to reduce the cost at 0.01 USD per KW used in the process of freeze drying.&lt;br /&gt;
&lt;br /&gt;
After achieving the cost of Kw. Received feedback on what the current ingredient market wants, The next validation is Product development. And then Choosing the equipment to scale to serve customer needs.&lt;br /&gt;
&lt;br /&gt;
[[  https://bluealpinefreezedryers.com/collections/freeze-dryers/products/rev-3-large-freeze-dryer?_pos=4&amp;amp;_fid=6f59314cb&amp;amp;_ss=c&amp;amp;variant=54296442700067|Off the shelf Freeze dryer Information:]]&lt;/div&gt;</summary>
		<author><name>Farmy89</name></author>
	</entry>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=Open_Source_Blueberry_Production_3D_CAD&amp;diff=316539</id>
		<title>Open Source Blueberry Production 3D CAD</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=Open_Source_Blueberry_Production_3D_CAD&amp;diff=316539"/>
		<updated>2025-12-19T02:25:17Z</updated>

		<summary type="html">&lt;p&gt;Farmy89: Created page with &amp;quot;# FreeCAD Python Script for OSE-POT-25L Hydroponic Pot # Open FreeCAD, go to View &amp;gt; Panels &amp;gt; Python Console # Then: exec(open(&amp;quot;/path/to/this/file.py&amp;quot;).read()) # Or use Macro &amp;gt; Macros &amp;gt; Create and paste this code  import FreeCAD as App import Part import math  # Create new document if App.ActiveDocument:     App.closeDocument(App.ActiveDocument.Name) doc = App.newDocument(&amp;quot;OSE_POT_25L&amp;quot;)  # ============================================ # DIMENSIONS (all in mm) # ===========...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# FreeCAD Python Script for OSE-POT-25L Hydroponic Pot&lt;br /&gt;
# Open FreeCAD, go to View &amp;gt; Panels &amp;gt; Python Console&lt;br /&gt;
# Then: exec(open(&amp;quot;/path/to/this/file.py&amp;quot;).read())&lt;br /&gt;
# Or use Macro &amp;gt; Macros &amp;gt; Create and paste this code&lt;br /&gt;
&lt;br /&gt;
import FreeCAD as App&lt;br /&gt;
import Part&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
# Create new document&lt;br /&gt;
if App.ActiveDocument:&lt;br /&gt;
    App.closeDocument(App.ActiveDocument.Name)&lt;br /&gt;
doc = App.newDocument(&amp;quot;OSE_POT_25L&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# DIMENSIONS (all in mm)&lt;br /&gt;
# ============================================&lt;br /&gt;
TOP_OUTER_DIA = 370&lt;br /&gt;
BOTTOM_OUTER_DIA = 320&lt;br /&gt;
HEIGHT = 280&lt;br /&gt;
WALL_THICKNESS = 3&lt;br /&gt;
&lt;br /&gt;
TOP_INNER_DIA = TOP_OUTER_DIA - 2 * WALL_THICKNESS&lt;br /&gt;
BOTTOM_INNER_DIA = BOTTOM_OUTER_DIA - 2 * WALL_THICKNESS&lt;br /&gt;
&lt;br /&gt;
# Reservoir and false bottom&lt;br /&gt;
FALSE_BOTTOM_HEIGHT = 45  # from base interior&lt;br /&gt;
RESERVOIR_VOLUME = 2  # liters&lt;br /&gt;
&lt;br /&gt;
# Drip ring&lt;br /&gt;
DRIP_RING_DIA = 340  # inner channel diameter&lt;br /&gt;
DRIP_CHANNEL_SIZE = 8  # 8x8mm channel&lt;br /&gt;
NUM_DRIP_OUTLETS = 8&lt;br /&gt;
DRIP_OUTLET_DIA = 2&lt;br /&gt;
&lt;br /&gt;
# Air slots&lt;br /&gt;
NUM_AIR_SLOTS = 52&lt;br /&gt;
AIR_SLOT_WIDTH = 3&lt;br /&gt;
AIR_SLOT_HEIGHT = 25&lt;br /&gt;
AIR_SLOT_START_HEIGHT = 60  # from base&lt;br /&gt;
&lt;br /&gt;
# Drain&lt;br /&gt;
DRAIN_DIA = 15&lt;br /&gt;
DRAIN_BOSS_DIA = 30&lt;br /&gt;
DRAIN_BOSS_HEIGHT = 5&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# HELPER FUNCTIONS&lt;br /&gt;
# ============================================&lt;br /&gt;
def make_tapered_cylinder(bottom_radius, top_radius, height, pos_z=0):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Create a tapered cylinder (frustum) using a cone&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    # FreeCAD cone: Radius1 is bottom, Radius2 is top&lt;br /&gt;
    cone = Part.makeCone(bottom_radius, top_radius, height)&lt;br /&gt;
    cone.translate(App.Vector(0, 0, pos_z))&lt;br /&gt;
    return cone&lt;br /&gt;
&lt;br /&gt;
def make_air_slot(slot_width, slot_height, wall_thickness, radius, angle, start_z):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Create a single air slot as a box positioned on the pot wall&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    # Create slot box&lt;br /&gt;
    slot = Part.makeBox(wall_thickness + 2, slot_width, slot_height)&lt;br /&gt;
    # Position at radius&lt;br /&gt;
    slot.translate(App.Vector(radius - 1, -slot_width/2, start_z))&lt;br /&gt;
    # Rotate around Z axis&lt;br /&gt;
    slot.rotate(App.Vector(0, 0, 0), App.Vector(0, 0, 1), angle)&lt;br /&gt;
    return slot&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# CREATE MAIN POT BODY&lt;br /&gt;
# ============================================&lt;br /&gt;
print(&amp;quot;Creating main pot body...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Outer shell (tapered)&lt;br /&gt;
outer_shell = make_tapered_cylinder(&lt;br /&gt;
    BOTTOM_OUTER_DIA / 2,&lt;br /&gt;
    TOP_OUTER_DIA / 2,&lt;br /&gt;
    HEIGHT&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Inner cavity (tapered) - subtract to make hollow&lt;br /&gt;
inner_cavity = make_tapered_cylinder(&lt;br /&gt;
    BOTTOM_INNER_DIA / 2,&lt;br /&gt;
    TOP_INNER_DIA / 2,&lt;br /&gt;
    HEIGHT - WALL_THICKNESS,  # Leave bottom thickness&lt;br /&gt;
    WALL_THICKNESS  # Start above base&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Create hollow pot&lt;br /&gt;
pot_body = outer_shell.cut(inner_cavity)&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# CREATE FALSE BOTTOM PLATFORM&lt;br /&gt;
# ============================================&lt;br /&gt;
print(&amp;quot;Creating false bottom...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Calculate inner diameter at false bottom height&lt;br /&gt;
# Linear interpolation for tapered pot&lt;br /&gt;
ratio = FALSE_BOTTOM_HEIGHT / HEIGHT&lt;br /&gt;
false_bottom_inner_dia = BOTTOM_INNER_DIA + (TOP_INNER_DIA - BOTTOM_INNER_DIA) * ratio&lt;br /&gt;
&lt;br /&gt;
# False bottom disk with drainage holes&lt;br /&gt;
false_bottom = Part.makeCylinder(&lt;br /&gt;
    false_bottom_inner_dia / 2 - 2,  # Slightly smaller for fit&lt;br /&gt;
    3,  # 3mm thick platform&lt;br /&gt;
    App.Vector(0, 0, WALL_THICKNESS + FALSE_BOTTOM_HEIGHT - 3)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Add drainage holes to false bottom (grid pattern)&lt;br /&gt;
drainage_holes = []&lt;br /&gt;
hole_spacing = 25&lt;br /&gt;
for x in range(-int(false_bottom_inner_dia/3), int(false_bottom_inner_dia/3), hole_spacing):&lt;br /&gt;
    for y in range(-int(false_bottom_inner_dia/3), int(false_bottom_inner_dia/3), hole_spacing):&lt;br /&gt;
        if x*x + y*y &amp;lt; (false_bottom_inner_dia/2 - 20)**2:  # Within radius&lt;br /&gt;
            hole = Part.makeCylinder(&lt;br /&gt;
                4,  # 8mm diameter holes&lt;br /&gt;
                5,&lt;br /&gt;
                App.Vector(x, y, WALL_THICKNESS + FALSE_BOTTOM_HEIGHT - 4)&lt;br /&gt;
            )&lt;br /&gt;
            drainage_holes.append(hole)&lt;br /&gt;
&lt;br /&gt;
# Cut drainage holes from false bottom&lt;br /&gt;
for hole in drainage_holes:&lt;br /&gt;
    false_bottom = false_bottom.cut(hole)&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# CREATE AIR SLOTS&lt;br /&gt;
# ============================================&lt;br /&gt;
print(&amp;quot;Creating air slots...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
air_slots_compound = []&lt;br /&gt;
angle_step = 360 / NUM_AIR_SLOTS&lt;br /&gt;
&lt;br /&gt;
for i in range(NUM_AIR_SLOTS):&lt;br /&gt;
    angle = i * angle_step&lt;br /&gt;
    # Calculate radius at slot height (accounting for taper)&lt;br /&gt;
    slot_mid_height = AIR_SLOT_START_HEIGHT + AIR_SLOT_HEIGHT / 2&lt;br /&gt;
    ratio = slot_mid_height / HEIGHT&lt;br /&gt;
    slot_radius = (BOTTOM_OUTER_DIA / 2) + ((TOP_OUTER_DIA - BOTTOM_OUTER_DIA) / 2) * ratio&lt;br /&gt;
    &lt;br /&gt;
    slot = make_air_slot(&lt;br /&gt;
        AIR_SLOT_WIDTH,&lt;br /&gt;
        AIR_SLOT_HEIGHT,&lt;br /&gt;
        WALL_THICKNESS,&lt;br /&gt;
        slot_radius,&lt;br /&gt;
        angle,&lt;br /&gt;
        AIR_SLOT_START_HEIGHT&lt;br /&gt;
    )&lt;br /&gt;
    air_slots_compound.append(slot)&lt;br /&gt;
&lt;br /&gt;
# Cut air slots from pot body&lt;br /&gt;
for slot in air_slots_compound:&lt;br /&gt;
    pot_body = pot_body.cut(slot)&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# CREATE DRAIN FITTING&lt;br /&gt;
# ============================================&lt;br /&gt;
print(&amp;quot;Creating drain fitting...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Drain boss (reinforced area around drain)&lt;br /&gt;
drain_boss = Part.makeCylinder(&lt;br /&gt;
    DRAIN_BOSS_DIA / 2,&lt;br /&gt;
    DRAIN_BOSS_HEIGHT,&lt;br /&gt;
    App.Vector(0, 0, 0)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Drain hole through base&lt;br /&gt;
drain_hole = Part.makeCylinder(&lt;br /&gt;
    DRAIN_DIA / 2,&lt;br /&gt;
    WALL_THICKNESS + DRAIN_BOSS_HEIGHT + 2,&lt;br /&gt;
    App.Vector(0, 0, -1)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Add boss to pot, then cut hole&lt;br /&gt;
pot_body = pot_body.fuse(drain_boss)&lt;br /&gt;
pot_body = pot_body.cut(drain_hole)&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# CREATE DRIP RING (simplified representation)&lt;br /&gt;
# ============================================&lt;br /&gt;
print(&amp;quot;Creating drip ring...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Drip ring channel (torus at top of pot)&lt;br /&gt;
drip_ring_z = HEIGHT - DRIP_CHANNEL_SIZE - 5&lt;br /&gt;
&lt;br /&gt;
# Create torus for drip ring channel&lt;br /&gt;
drip_ring = Part.makeTorus(&lt;br /&gt;
    DRIP_RING_DIA / 2,  # Major radius&lt;br /&gt;
    DRIP_CHANNEL_SIZE / 2,  # Minor radius (channel size)&lt;br /&gt;
    App.Vector(0, 0, drip_ring_z)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Create drip outlets&lt;br /&gt;
drip_outlets = []&lt;br /&gt;
for i in range(NUM_DRIP_OUTLETS):&lt;br /&gt;
    angle = i * (360 / NUM_DRIP_OUTLETS)&lt;br /&gt;
    angle_rad = math.radians(angle)&lt;br /&gt;
    x = (DRIP_RING_DIA / 2) * math.cos(angle_rad)&lt;br /&gt;
    y = (DRIP_RING_DIA / 2) * math.sin(angle_rad)&lt;br /&gt;
    &lt;br /&gt;
    # Outlet tube pointing down&lt;br /&gt;
    outlet = Part.makeCylinder(&lt;br /&gt;
        DRIP_OUTLET_DIA / 2,&lt;br /&gt;
        15,  # Outlet length&lt;br /&gt;
        App.Vector(x, y, drip_ring_z - 15)&lt;br /&gt;
    )&lt;br /&gt;
    drip_outlets.append(outlet)&lt;br /&gt;
&lt;br /&gt;
# Fuse drip outlets to ring&lt;br /&gt;
for outlet in drip_outlets:&lt;br /&gt;
    drip_ring = drip_ring.fuse(outlet)&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# CREATE DOCUMENT OBJECTS&lt;br /&gt;
# ============================================&lt;br /&gt;
print(&amp;quot;Adding parts to document...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Main pot body&lt;br /&gt;
pot_obj = doc.addObject(&amp;quot;Part::Feature&amp;quot;, &amp;quot;Pot_Body&amp;quot;)&lt;br /&gt;
pot_obj.Shape = pot_body&lt;br /&gt;
pot_obj.ViewObject.ShapeColor = (0.3, 0.3, 0.35)  # Dark gray (biochar color)&lt;br /&gt;
pot_obj.ViewObject.Transparency = 0&lt;br /&gt;
&lt;br /&gt;
# False bottom (separate part for clarity)&lt;br /&gt;
fb_obj = doc.addObject(&amp;quot;Part::Feature&amp;quot;, &amp;quot;False_Bottom&amp;quot;)&lt;br /&gt;
fb_obj.Shape = false_bottom&lt;br /&gt;
fb_obj.ViewObject.ShapeColor = (0.4, 0.4, 0.45)  # Slightly lighter&lt;br /&gt;
fb_obj.ViewObject.Transparency = 0&lt;br /&gt;
&lt;br /&gt;
# Drip ring (highlight color for visibility)&lt;br /&gt;
dr_obj = doc.addObject(&amp;quot;Part::Feature&amp;quot;, &amp;quot;Drip_Ring&amp;quot;)&lt;br /&gt;
dr_obj.Shape = drip_ring&lt;br /&gt;
dr_obj.ViewObject.ShapeColor = (0.2, 0.5, 0.7)  # Blue tint for visibility&lt;br /&gt;
dr_obj.ViewObject.Transparency = 30&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# CREATE CROSS-SECTION VIEW HELPER&lt;br /&gt;
# ============================================&lt;br /&gt;
print(&amp;quot;Creating cross-section plane...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Create a cutting plane for cross-section view&lt;br /&gt;
cutting_box = Part.makeBox(&lt;br /&gt;
    TOP_OUTER_DIA,&lt;br /&gt;
    TOP_OUTER_DIA / 2 + 50,&lt;br /&gt;
    HEIGHT + 20,&lt;br /&gt;
    App.Vector(-TOP_OUTER_DIA/2, 0, -10)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Create cross-section version of pot&lt;br /&gt;
pot_section = pot_body.cut(cutting_box)&lt;br /&gt;
fb_section = false_bottom.cut(cutting_box)&lt;br /&gt;
dr_section = drip_ring.cut(cutting_box)&lt;br /&gt;
&lt;br /&gt;
# Add cross-section objects (initially hidden)&lt;br /&gt;
pot_section_obj = doc.addObject(&amp;quot;Part::Feature&amp;quot;, &amp;quot;Pot_CrossSection&amp;quot;)&lt;br /&gt;
pot_section_obj.Shape = pot_section&lt;br /&gt;
pot_section_obj.ViewObject.ShapeColor = (0.3, 0.3, 0.35)&lt;br /&gt;
pot_section_obj.ViewObject.Visibility = False&lt;br /&gt;
&lt;br /&gt;
fb_section_obj = doc.addObject(&amp;quot;Part::Feature&amp;quot;, &amp;quot;FalseBottom_CrossSection&amp;quot;)&lt;br /&gt;
fb_section_obj.Shape = fb_section&lt;br /&gt;
fb_section_obj.ViewObject.ShapeColor = (0.4, 0.4, 0.45)&lt;br /&gt;
fb_section_obj.ViewObject.Visibility = False&lt;br /&gt;
&lt;br /&gt;
dr_section_obj = doc.addObject(&amp;quot;Part::Feature&amp;quot;, &amp;quot;DripRing_CrossSection&amp;quot;)&lt;br /&gt;
dr_section_obj.Shape = dr_section&lt;br /&gt;
dr_section_obj.ViewObject.ShapeColor = (0.2, 0.5, 0.7)&lt;br /&gt;
dr_section_obj.ViewObject.Visibility = False&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# RECOMPUTE AND SET VIEW&lt;br /&gt;
# ============================================&lt;br /&gt;
doc.recompute()&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;&amp;quot;)&lt;br /&gt;
print(&amp;quot;=&amp;quot; * 50)&lt;br /&gt;
print(&amp;quot;OSE-POT-25L Model Created Successfully!&amp;quot;)&lt;br /&gt;
print(&amp;quot;=&amp;quot; * 50)&lt;br /&gt;
print(&amp;quot;&amp;quot;)&lt;br /&gt;
print(&amp;quot;OBJECTS IN MODEL:&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Pot_Body: Main pot with air slots and drain&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - False_Bottom: Perforated platform&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Drip_Ring: Irrigation ring with 8 outlets&amp;quot;)&lt;br /&gt;
print(&amp;quot;&amp;quot;)&lt;br /&gt;
print(&amp;quot;CROSS-SECTION VIEWS (hidden by default):&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Pot_CrossSection&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - FalseBottom_CrossSection&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - DripRing_CrossSection&amp;quot;)&lt;br /&gt;
print(&amp;quot;&amp;quot;)&lt;br /&gt;
print(&amp;quot;TO VIEW CROSS-SECTION:&amp;quot;)&lt;br /&gt;
print(&amp;quot;  1. Hide: Pot_Body, False_Bottom, Drip_Ring&amp;quot;)&lt;br /&gt;
print(&amp;quot;  2. Show: *_CrossSection objects&amp;quot;)&lt;br /&gt;
print(&amp;quot;&amp;quot;)&lt;br /&gt;
print(&amp;quot;TO EXPORT FOR RENDERING:&amp;quot;)&lt;br /&gt;
print(&amp;quot;  File &amp;gt; Export &amp;gt; Select format (STEP, STL, etc.)&amp;quot;)&lt;br /&gt;
print(&amp;quot;&amp;quot;)&lt;br /&gt;
print(&amp;quot;KEY DIMENSIONS:&amp;quot;)&lt;br /&gt;
print(f&amp;quot;  Top diameter: {TOP_OUTER_DIA} mm&amp;quot;)&lt;br /&gt;
print(f&amp;quot;  Bottom diameter: {BOTTOM_OUTER_DIA} mm&amp;quot;)&lt;br /&gt;
print(f&amp;quot;  Height: {HEIGHT} mm&amp;quot;)&lt;br /&gt;
print(f&amp;quot;  Wall thickness: {WALL_THICKNESS} mm&amp;quot;)&lt;br /&gt;
print(f&amp;quot;  Air slots: {NUM_AIR_SLOTS} x {AIR_SLOT_WIDTH}mm&amp;quot;)&lt;br /&gt;
print(f&amp;quot;  Drip outlets: {NUM_DRIP_OUTLETS} x Ø{DRIP_OUTLET_DIA}mm&amp;quot;)&lt;br /&gt;
print(f&amp;quot;  Drain: Ø{DRAIN_DIA}mm&amp;quot;)&lt;br /&gt;
print(&amp;quot;=&amp;quot; * 50)&lt;br /&gt;
&lt;br /&gt;
# Fit view to show all&lt;br /&gt;
if App.GuiUp:&lt;br /&gt;
    import FreeCADGui&lt;br /&gt;
    FreeCADGui.activeDocument().activeView().viewIsometric()&lt;br /&gt;
    FreeCADGui.SendMsgToActiveView(&amp;quot;ViewFit&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Farmy89</name></author>
	</entry>
</feed>