From: Svjatoslav Agejenko Date: Sat, 27 Jun 2026 15:36:47 +0000 (+0300) Subject: style(org): use literal space in file: link targets X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=e6bee75eafcdc2ca06dd89ad55c8167dc9242296;p=physical.git style(org): use literal space in file: link targets 396 [[file:…%20…]] link targets across 31 project pages were rewritten to use a literal space instead of %20-encoding. Both forms are accepted by org and browsers, but the project convention is now literal space for file: links. https: and mailto: links still use %20 where the URL path or query string contains a space — that's mandatory per RFC 3986, and no such links in the project had a literal space to fix. The 108 https: and 31 mailto: links in the project are unchanged. AGENTS.org is updated to document the new rule: file: links use literal space; https: and mailto: links use %20; the do-not- normalise warning is replaced with the actual rule. --- diff --git a/AGENTS.org b/AGENTS.org index b43c843..cf50538 100644 --- a/AGENTS.org +++ b/AGENTS.org @@ -94,14 +94,211 @@ bullets to =-= or vice versa — they are equivalent. ** Links -- Internal project references in =index.org= use *URL-encoded* paths: - =[[file:Cases/Roll/index.html]]= becomes - =Cases/roll/index.html= → =Cases/Roll/index.html= in source. Spaces in - directory names are percent-encoded (=%20=). -- Cross-references between project pages use raw =file:= links with the - same encoding rules. -- The back-link in every page's front matter uses an HTML anchor fragment - pointing into =index.html=. +- Internal project references in =index.org= use paths with *literal + spaces* in directory names. Spaces in URL-bearing link types + (https, mailto) must be =%20=-encoded (see "Link patterns" below). +- Cross-references between project pages use raw =file:= links. +- The back-link in every page's front matter uses an HTML anchor + fragment pointing into =index.html=. + +** Link patterns + +Five link shapes are used in the project. Stick to these — no new +variations. + +*Spaces in filenames.* Filenames and directory names in this project +often contain spaces (e.g. =Body and covers/foo.png=, +=Spray gun holder/index.html=). Use a *literal space* in the link +target — org and the browser both handle it correctly: + +#+begin_example +,#+attr_html: :class responsive-img +[[file:Body and covers/body, 1.png]] +#+end_example + +*Exception: =https:= and =mailto:= links must use =%20= for any space in +the path or query string.* A literal space in a URL is invalid (per +RFC 3986) and the link will be malformed or rejected by browsers. So: + +#+begin_example +[[https://example.com/path%20with%20space][Product page]] +#+end_example + +But for =file:= links, literal space is correct and =%20= is *not* +required. (The form =[[file:Body%20and%20covers/x.png]]= also works in +practice — browsers and org both decode it back to a space — but the +project convention is literal space.) + +1. *Image* — a PNG/JPG/etc. that the renderer shows inline. Always + preceded by =#+attr_html: :class responsive-img= so the page CSS + sizes it correctly. Spaces in the path are literal: + + #+begin_example + ,#+attr_html: :class responsive-img + [[file:make.png]] + #+end_example + + #+begin_example + ,#+attr_html: :class responsive-img + [[file:Body and covers/body, 1.png]] + #+end_example + +2. *Download* — a link to a FreeCAD project or STL file. The link + text is the file type, not the filename. Spaces in the path are + literal; spaces in the display text ([...]) need no encoding: + + #+begin_example + - [[file:body.stl][STL file]] + - [[file:body.FCStd][FreeCAD project]] + - [[file:Lab heater and cooler.FCStd][FreeCAD design file]] + #+end_example + +3. *External URL* — auto-labelled (org uses the URL as the link text) + or explicitly labelled. Both are common. *Spaces in the URL must + be =%20=-encoded* — unlike =file:= links, raw spaces are not valid + in a URL: + + #+begin_example + https://example.com/page + [[https://example.com/path%20with%20space][Product page]] + #+end_example + +4. *Email* — always use the =mailto://= form (note the double slash). + This is what every existing page uses, even though the standard + org form is =mailto:= (single slash). Don't "fix" the existing + pages. Email addresses don't contain spaces, so no encoding is + needed: + + #+begin_example + [[mailto://svjatoslav@svjatoslav.eu][svjatoslav@svjatoslav.eu]] + #+end_example + +5. *Back-link* — top of every page, points to the index section + listing the project. The anchor fragment never contains spaces + (org's auto-generated IDs are hyphenated), so no encoding is + needed here. Anchor values that are actually used in the repo: + + | Anchor | Used for | + |-----------------------------------------+-------------------------------------| + | =outline-container-optics= | Optics/ projects | + | =outline-container-furniture= | Furniture/ projects | + | =outline-container-miscellaneous= | Most Miscellaneous/ projects | + | =outline-container-cable-wire= | Cable/wire Miscellaneous/ projects | + | =outline-container-audio= | Audio Miscellaneous/ projects | + | =outline-container-cases-optics= | Some Cases/ + Optics/ cross-section | + | =outline-container-measurement-device-cases= | A specific Cases/ subsection | + + To find the correct anchor for a new page, run =Tools/Update web + site --force= once, then search the published =index.html= for + the section name; the =id="outline-container-..."= attribute + on the matching =

= (or =

=) is the anchor. + +** Page structure variations + +The "Per-page section template" above describes the top-level shape +(Overview → optional middle sections → Repository). Within those +sections, three sub-patterns recur and are accepted: + +- *Inline part headings* (=*Body*= / =*Cover*=): a project with two + physical parts uses single-asterisk emphasis headings inside + =* Overview= to split the description, instead of a top-level + =* Files= section. Each inline heading is followed by an + =#+attr_html= + image paragraph: + + #+begin_example + ,*Body* + ,#+attr_html: :class responsive-img + [[file:body.png]] + + ,*Cover* + ,#+attr_html: :class responsive-img + [[file:cover.png]] + #+end_example + + Real examples: =Cases/Microscope slide box/=, + =Miscellaneous/Battery tester/=, =Cases/Macro filter storage + compartment/=. + +- *Download table* — for projects with multiple parts, a three-column + org table makes the FreeCAD/STL downloads scannable: + + #+begin_example + | item | FreeCAD file | STL file | + |-------+--------------+----------| + | body | [[file:body.FCStd][download]] | [[file:body.stl][download]] | + | cover | [[file:cover.FCStd][download]] | [[file:cover.stl][download]] | + #+end_example + +- *Project-specific "See also:"* — a paragraph at the end of + =* Overview= that points to a related project, distinct from the + generic See-also list in =* Repository=: + + #+begin_example + See also: + + [[file:../../Optics/Fujifilm X-mount microscope adapter/][Fujifilm microscope adapter]] + #+end_example + + Use this when one project logically leads to another (e.g. "Case + for microscope slides" → "Microscope adapter"). + +** Anti-patterns to avoid + +These have come up while maintaining the project. Each one was +either a published-site bug or a verification false positive. + +- *Bullet-wrapped images.* A gallery image must be a bare paragraph + under an =#+attr_html= directive, not a list item: + + #+begin_example + WRONG (bullet + image): + + Body: + + [[file:body.png]] + + RIGHT (heading + image): + ** Body + ,#+attr_html: :class responsive-img + [[file:body.png]] + #+end_example + + The bullet form renders as a bullet point around a single image in + the published HTML (looks like junk), and the =responsive-img= + class is lost because org doesn't apply attribute lines to + bullet-item content. + +- *=schematic= is ambiguous.* In some projects (e.g. =Miscellaneous/USB + desk fan mod=) =schematic= is a *directory* (containing KiCad + files like =DCDC_stepdown.sch=). In other projects, the link is + to a *file* called =schematic.png= at the project root. Don't + blindly rewrite =schematic= → =Schematic= in a link without + checking whether the original was a directory or a filename. + When renaming, use the =(^|/)old(/|$)= anchor in your search + regex to match directory components only. + +- *Lowercase-starting directory names.* Every directory in the + project starts with an uppercase letter (or a digit followed by + an uppercase letter). The rule applies to *directory* names, not + to filenames inside them. Files like =main board, 1.png= or + =schematic.png= are content and should not be renamed. + +** Workflow footnotes + +- =touch= does not invalidate the build cache. The incremental + export script (see "Build cache" below) keys on =sha256=, and + =touch= only updates mtime. If you want to test the sentinel + invalidation path, modify the file's content (e.g. =echo "" >> + style.css=), don't =touch= it. + +- The build script excludes =AGENTS.org= from exports (see commit + =f1187e6= "feat(build): incremental org→html export with + style.css sentinel"). The operating guide is for agents, not for + the public site, and a published =AGENTS.html= would be noise. + +- =./Tools/Update web site= re-opens itself in a =gnome-terminal= + the first time it's run (the "T" arg is the internal signal + meaning "we're already inside the terminal"). If you're running + the script from a script or over SSH without a display, the + re-open will fail — invoke the script with a "T" arg (e.g. + =./Tools/Update\ web\ site T --force=) to skip the re-launch. * Adding a new project diff --git a/Cases/Fuji XC15-45mm lens case/index.org b/Cases/Fuji XC15-45mm lens case/index.org index 4a9fc31..20e9622 100644 --- a/Cases/Fuji XC15-45mm lens case/index.org +++ b/Cases/Fuji XC15-45mm lens case/index.org @@ -30,15 +30,15 @@ Schematic assembled: [[file:assembled.png]] - see also: - - [[file:../Fuji%20XC50-230mm%20lens%20case/][Fujifilm XC50-230mm lens case]] - - [[file:../Fujifilm%20camera%20battery%20box/][Fujifilm camera battery box]] + - [[file:../Fuji XC50-230mm lens case/][Fujifilm XC50-230mm lens case]] + - [[file:../Fujifilm camera battery box/][Fujifilm camera battery box]] * Files :PROPERTIES: :CUSTOM_ID: fuji-xc15-45mm-lens-case-files :END: -You can [[file:Fuji%20camera%20lens%20container.FCStd][download FreeCAD project]] file to tweak design or generated STL +You can [[file:Fuji camera lens container.FCStd][download FreeCAD project]] file to tweak design or generated STL files ready for 3D printing: Body: [[file:body.stl][body.stl]] diff --git a/Cases/Fuji XC50-230mm lens case/index.org b/Cases/Fuji XC50-230mm lens case/index.org index 48a9a25..f62fbae 100644 --- a/Cases/Fuji XC50-230mm lens case/index.org +++ b/Cases/Fuji XC50-230mm lens case/index.org @@ -33,7 +33,7 @@ Schematic assembled: :CUSTOM_ID: fuji-xc50-230mm-lens-case-files :END: -You can [[file:Fuji%20camera%20lens%20container.FCStd][download FreeCAD project]] file to tweak design or generated STL +You can [[file:Fuji camera lens container.FCStd][download FreeCAD project]] file to tweak design or generated STL files ready for 3D printing: Body: [[file:body.stl][body.stl]] diff --git a/Cases/Fujifilm camera battery box/index.org b/Cases/Fujifilm camera battery box/index.org index 660b932..0b25d34 100644 --- a/Cases/Fujifilm camera battery box/index.org +++ b/Cases/Fujifilm camera battery box/index.org @@ -28,7 +28,7 @@ Design utilizes [[https://www.amazon.de/gp/product/B00TACKU0O/][3mm x 2mm thick :PROPERTIES: :CUSTOM_ID: fujifilm-camera-battery-box-files :END: -You can [[file:body%20and%20cover.FCStd][download FreeCAD project]] file to tweak design or generated STL +You can [[file:body and cover.FCStd][download FreeCAD project]] file to tweak design or generated STL files ready for 3D printing: + Body: [[file:body.stl][download STL]] diff --git a/Cases/Macro filter storage compartment/index.org b/Cases/Macro filter storage compartment/index.org index 7673a0f..88d51d5 100644 --- a/Cases/Macro filter storage compartment/index.org +++ b/Cases/Macro filter storage compartment/index.org @@ -40,7 +40,7 @@ Download: | cover | [[file:cover.FCStd][download]] | [[file:cover.stl][download]] | See also: -+ [[file:../Fujifilm%20camera%20battery%20box/index.html][Fujifilm camera battery box]] ++ [[file:../Fujifilm camera battery box/index.html][Fujifilm camera battery box]] * Repository diff --git a/Cases/Meiqqm portable dosimeter case/index.org b/Cases/Meiqqm portable dosimeter case/index.org index 3dcfce2..e942315 100644 --- a/Cases/Meiqqm portable dosimeter case/index.org +++ b/Cases/Meiqqm portable dosimeter case/index.org @@ -30,7 +30,7 @@ To better protect its display (for portable use), simple case have been made: #+attr_html: :class responsive-img -[[file:Meiqqm%20portable%20dosimeter%20case.png]] +[[file:Meiqqm portable dosimeter case.png]] Case has internally small bumps on the sides. It is suggested to insert device with the front panel towards the bump. Bumps are to @@ -38,8 +38,8 @@ ensure that screen and buttons are not scratched by the case. Download: -- [[file:Meiqqm%20portable%20dosimeter%20case.stl][STL file]] -- [[file:Meiqqm%20portable%20dosimeter%20case.FCStd][FreeCAD project]] +- [[file:Meiqqm portable dosimeter case.stl][STL file]] +- [[file:Meiqqm portable dosimeter case.FCStd][FreeCAD project]] * Repository diff --git a/Cases/Microscope slide box/index.org b/Cases/Microscope slide box/index.org index 4a5b3df..4600ea1 100644 --- a/Cases/Microscope slide box/index.org +++ b/Cases/Microscope slide box/index.org @@ -47,7 +47,7 @@ Download: | cover | [[file:cover.FCStd][download]] | [[file:cover.stl][download]] | See also: -+ [[file:../../Optics/Fujifilm%20X-mount%20microscope%20adapter/][Fujifilm microscope adapter]] ++ [[file:../../Optics/Fujifilm X-mount microscope adapter/][Fujifilm microscope adapter]] * Repository diff --git a/Cases/NanoVNA case/index.org b/Cases/NanoVNA case/index.org index 8e40267..4424453 100644 --- a/Cases/NanoVNA case/index.org +++ b/Cases/NanoVNA case/index.org @@ -60,7 +60,7 @@ Cover attaches to the body using [[https://www.amazon.de/gp/product/B00TACKU0O/] CAD drawing for inner box/case: #+attr_html: :class responsive-img -[[file:inner%20body%20assembled.png]] +[[file:inner body assembled.png]] CAD drawing for inner box/case within outer box: @@ -95,33 +95,33 @@ case. ----- #+attr_html: :class responsive-img -[[file:inner%20box.stl][download: inner box]] +[[file:inner box.stl][download: inner box]] #+attr_html: :class responsive-img -[[file:inner%20box,%201.png]] +[[file:inner box, 1.png]] #+attr_html: :class responsive-img -[[file:inner%20box,%202.png]] +[[file:inner box, 2.png]] ----- #+attr_html: :class responsive-img -[[file:inner%20cover.stl][download: inner cover]] +[[file:inner cover.stl][download: inner cover]] #+attr_html: :class responsive-img -[[file:inner%20cover.png]] +[[file:inner cover.png]] ----- #+attr_html: :class responsive-img -[[file:outer%20box.stl][download: outer box]] +[[file:outer box.stl][download: outer box]] #+attr_html: :class responsive-img -[[file:outer%20box.png]] +[[file:outer box.png]] ----- #+attr_html: :class responsive-img -[[file:outer%20cover.stl][download: outer cover]] +[[file:outer cover.stl][download: outer cover]] #+attr_html: :class responsive-img -[[file:outer%20cover.png]] +[[file:outer cover.png]] ----- @@ -136,7 +136,7 @@ case. :END: Files can be edited using [[https://www.freecadweb.org/][FreeCAD]]. -+ [[file:NanoVNA%20case.FCStd][NanoVNA case]] ++ [[file:NanoVNA case.FCStd][NanoVNA case]] + [[file:stylus.FCStd][Stylus]] * Repository diff --git a/Cases/Roll/index.org b/Cases/Roll/index.org index ea55f38..ff5c511 100644 --- a/Cases/Roll/index.org +++ b/Cases/Roll/index.org @@ -47,9 +47,9 @@ overhangs that are hard to print. #+attr_html: :class responsive-img [[file:Roll 27mm/roll 27mm, assembled, 2.png]] -- [[file:roll%2027mm,%20body.stl][body STL]] -- [[file:roll%2027mm,%20cover.stl][cover STL]] -- [[file:roll%2027mm.FCStd][FreeCAD file]] +- [[file:roll 27mm, body.stl][body STL]] +- [[file:roll 27mm, cover.stl][cover STL]] +- [[file:roll 27mm.FCStd][FreeCAD file]] * 55mm diameter roll :PROPERTIES: @@ -59,9 +59,9 @@ overhangs that are hard to print. #+attr_html: :class responsive-img [[file:Roll 55mm/roll 55mm, assembled.png]] -- [[file:roll%2055mm,%20body.stl][body STL]] -- [[file:roll%2055mm,%20cover.stl][cover STL]] -- [[file:roll%2055mm.FCStd][FreeCAD file]] +- [[file:roll 55mm, body.stl][body STL]] +- [[file:roll 55mm, cover.stl][cover STL]] +- [[file:roll 55mm.FCStd][FreeCAD file]] * Repository diff --git a/Cases/USB cable terminals/index.org b/Cases/USB cable terminals/index.org index fec3ee4..45efb2a 100644 --- a/Cases/USB cable terminals/index.org +++ b/Cases/USB cable terminals/index.org @@ -34,22 +34,22 @@ There are 2 designs: :END: #+attr_html: :class responsive-img -[[file:PLA%20+%20TPU/make.png]] +[[file:PLA + TPU/make.png]] Following parts are glued together: #+attr_html: :class responsive-img -[[file:PLA%20+%20TPU/make,%202.png]] +[[file:PLA + TPU/make, 2.png]] ** Male connector case :PROPERTIES: :CUSTOM_ID: usb-cable-terminals-male-connector-case :END: #+attr_html: :class responsive-img -[[file:PLA%20+%20TPU/male%20connector%20case.png]] +[[file:PLA + TPU/male connector case.png]] Download: -- [[file:PLA + TPU/male%20connector%20case.FCStd][FreeCAD project]] -- [[file:PLA + TPU/male%20connector%20case.stl][STL file]] +- [[file:PLA + TPU/male connector case.FCStd][FreeCAD project]] +- [[file:PLA + TPU/male connector case.stl][STL file]] ** Female connector case :PROPERTIES: @@ -57,14 +57,14 @@ Download: :END: #+attr_html: :class responsive-img -[[file:PLA%20+%20TPU/female%20connector%20case,%201.png]] +[[file:PLA + TPU/female connector case, 1.png]] #+attr_html: :class responsive-img -[[file:PLA%20+%20TPU/female%20connector%20case,%202.png]] +[[file:PLA + TPU/female connector case, 2.png]] Download: -- [[file:PLA%20+%20TPU/female%20connector%20case.FCStd][FreeCAD project]] -- [[file:PLA%20+%20TPU/female%20connector%20case.stl][STL file]] +- [[file:PLA + TPU/female connector case.FCStd][FreeCAD project]] +- [[file:PLA + TPU/female connector case.stl][STL file]] * TPU only design for male connector case :PROPERTIES: @@ -80,8 +80,8 @@ Download: [[file:TPU/schematic.png]] Download: -- [[file:TPU/USB%20cover.FCStd][FreeCAD project]] -- [[file:TPU/USB%20cover.stl][STL file]] +- [[file:TPU/USB cover.FCStd][FreeCAD project]] +- [[file:TPU/USB cover.stl][STL file]] * Repository diff --git a/Furniture/Book stand/index.org b/Furniture/Book stand/index.org index e5395f2..7cb2dde 100644 --- a/Furniture/Book stand/index.org +++ b/Furniture/Book stand/index.org @@ -24,11 +24,11 @@ Small book stand. #+attr_html: :class responsive-img -[[file:book%20stand.png]] +[[file:book stand.png]] Download: -+ [[file:book%20stand.stl][STL file]] -+ [[file:book%20stand.FCStd][FreeCAD file]] ++ [[file:book stand.stl][STL file]] ++ [[file:book stand.FCStd][FreeCAD file]] * Repository diff --git a/Miscellaneous/12V Lead-Acid battery changer and terminal/index.org b/Miscellaneous/12V Lead-Acid battery changer and terminal/index.org index 0e6d3bf..0675572 100644 --- a/Miscellaneous/12V Lead-Acid battery changer and terminal/index.org +++ b/Miscellaneous/12V Lead-Acid battery changer and terminal/index.org @@ -40,7 +40,7 @@ functional, so I re-purposed connector for my own needs but I'm using totally incompatible electrical wiring. #+attr_html: :class responsive-img -[[file:../alternative%20USB%20layout/schematic.png]] +[[file:../alternative USB layout/schematic.png]] As seen, it has dual voltage output. Additionally one wire is dedicated to data transmission and can be used with [[https://en.wikipedia.org/wiki/1-Wire][1-Wire]] protocol @@ -52,36 +52,36 @@ Power supply uses 3D printed body with lots of holes, for fanless cooling. #+attr_html: :class responsive-img -[[file:Body%20and%20covers/body,%201.png]] +[[file:Body and covers/body, 1.png]] Various modules are realized on top of prototype PCBs that slide into dedicated rails within the body. #+attr_html: :class responsive-img -[[file:Body%20and%20covers/body,%202.png]] +[[file:Body and covers/body, 2.png]] Like this: #+attr_html: :class responsive-img -[[file:make,%202.png]] +[[file:make, 2.png]] When cover is closed, it blocks PCB movement: #+attr_html: :class responsive-img -[[file:Body%20and%20covers/cover.png]] +[[file:Body and covers/cover.png]] There is still some empty space inside, so why not add dummy cover on top that can be replaced later with add-on functionality/expansion board/terminal :) #+attr_html: :class responsive-img -[[file:Body%20and%20covers/cover%20cover.png]] +[[file:Body and covers/cover cover.png]] Download: -+ [[file:body%20and%20covers/body.stl][Body STL file]] -+ [[file:body%20and%20covers/cover.stl][Big cover STL file]] -+ [[file:body%20and%20covers/cover%20cover.stl][Small dummy cover on top, STL file]] -+ [[file:body%20and%20covers/body%20and%20covers.FCStd][Body and covers FreeCAD project]] ++ [[file:body and covers/body.stl][Body STL file]] ++ [[file:body and covers/cover.stl][Big cover STL file]] ++ [[file:body and covers/cover cover.stl][Small dummy cover on top, STL file]] ++ [[file:body and covers/body and covers.FCStd][Body and covers FreeCAD project]] * Transformer and AC to DC converter :PROPERTIES: @@ -92,7 +92,7 @@ This is where high voltage from mains electricity enters the system. Schematic: #+attr_html: :class responsive-img -[[file:Transformer%20and%20AC%20DC%20converter%20board/schematic.png]] +[[file:Transformer and AC DC converter board/schematic.png]] For safety I kept high voltage section as minimal as possible. That is, wall plug runs straight into transformer. Also I used [[https://www.amazon.de/gp/product/B07VGQKM3G/ref=ppx_yo_dt_b_asin_title_o06_s00?ie=UTF8&psc=1][UV hardening @@ -102,12 +102,12 @@ Power on/off switch operates on already reduced voltage of about 30 volts. Power switch is located on [[id:c9a69490-f920-4a31-b32e-b101bfc3d01b][indicator panel]]. #+attr_html: :class responsive-img -[[file:Transformer%20and%20AC%20DC%20converter%20board/make,%201.png]] +[[file:Transformer and AC DC converter board/make, 1.png]] DC current of about 30 volts is then routed to [[id:65d68227-4bf2-4c4f-b4d3-c390bc6a9c34][Main board]]. #+attr_html: :class responsive-img -[[file:Transformer%20and%20AC%20DC%20converter%20board/make,%202.png]] +[[file:Transformer and AC DC converter board/make, 2.png]] [[https://www.amazon.de/gp/product/B07RLQH5TR/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1][Single sided prototype PCB is used]]. @@ -122,11 +122,11 @@ connects all components. It also houses 2 [[https://www.amazon.de/gp/product/B07 voltage converters]]. #+attr_html: :class responsive-img -[[file:Main%20board/main%20board,%201.png]] +[[file:Main board/main board, 1.png]] High-level schematic of entire device: #+attr_html: :class responsive-img -[[file:Main%20board/schematic.png]] +[[file:Main board/schematic.png]] As seen from schematic, ~30 volts DC from transformer board is routed into first step-down converter that reduces it to about 15V. Reduced @@ -159,7 +159,7 @@ On schematic above, some wires are annotated with numbers from 1 to 13. This corresponds to output pins on the board. #+attr_html: :class responsive-img -[[file:Main%20board/main%20board,%202.png]] +[[file:Main board/main board, 2.png]] * Current limiter :PROPERTIES: :ID: afc22d23-9bc4-421c-9cac-e0ce34bd36bc @@ -168,13 +168,13 @@ to 13. This corresponds to output pins on the board. Schematic: #+attr_html: :class responsive-img -[[file:Current%20limiter/schematic.png]] +[[file:Current limiter/schematic.png]] Simple LM317 based current limiter is used. I used 4.7 ohm resistor. It provides about 265 milliamps of current. See [[http://www.reuk.co.uk/wordpress/electric-circuit/lm317-current-calculator/][calculator]]. #+attr_html: :class responsive-img -[[file:Current%20limiter/current%20limiter,%201.png]] +[[file:Current limiter/current limiter, 1.png]] Thermal paste below and UV hardening glue on top is used to attach LM317 to the heatsink. There is also jumper-like solution on top @@ -185,7 +185,7 @@ If attached battery is really empty, significant voltage drop can occur in LM317. Heatsink is needed to dissipate that power. #+attr_html: :class responsive-img -[[file:Current%20limiter/current%20limiter,%202.png]] +[[file:Current limiter/current limiter, 2.png]] Note: resistor gets hot too. @@ -196,20 +196,20 @@ Note: resistor gets hot too. :END: #+attr_html: :class responsive-img -[[file:Indicator%20panel/indicator%20panel,%201.png]] +[[file:Indicator panel/indicator panel, 1.png]] Basically 2 digital DC voltmeters and main on/off switch. #+attr_html: :class responsive-img -[[file:Indicator%20panel/indicator%20panel,%202.png]] +[[file:Indicator panel/indicator panel, 2.png]] Download: #+attr_html: :class responsive-img -[[file:Indicator%20panel/indicator%20panel.png]] +[[file:Indicator panel/indicator panel.png]] -+ [[file:indicator%20panel/indicator%20panel.stl][STL file]] -+ [[file:indicator%20panel/indicator%20panel.FCStd][FreeCAD project]] ++ [[file:indicator panel/indicator panel.stl][STL file]] ++ [[file:indicator panel/indicator panel.FCStd][FreeCAD project]] * Connector terminal :PROPERTIES: @@ -219,7 +219,7 @@ Download: Schematic: #+attr_html: :class responsive-img -[[file:Connector%20terminal/schematic.png]] +[[file:Connector terminal/schematic.png]] As seen above, most of the USB connectors are used to deliver dual power output and 1-wire data connectivity, except one on the bottom @@ -229,32 +229,32 @@ in as well to stabilize against smaller current spikes. Electrically schematic is realized using smaller prototype PCBs. #+attr_html: :class responsive-img -[[file:Connector%20terminal/make,%201.png]] +[[file:Connector terminal/make, 1.png]] Those PCBs are wired to central small PCB that acts as a hub: #+attr_html: :class responsive-img -[[file:Connector%20terminal/make,%202.png]] +[[file:Connector terminal/make, 2.png]] PCBs are held together by being sandwiched between front panel: #+attr_html: :class responsive-img -[[file:Connector%20terminal/front%20panel.png]] +[[file:Connector terminal/front panel.png]] and smaller back-end plate: #+attr_html: :class responsive-img -[[file:Connector%20terminal/back%20panel.png]] +[[file:Connector terminal/back panel.png]] Result: #+attr_html: :class responsive-img -[[file:Connector%20terminal/make,%203.png]] +[[file:Connector terminal/make, 3.png]] Download: -+ [[file:connector%20terminal/front%20panel.stl][front panel STL]] -+ [[file:connector%20terminal/back%20panel.stl][back panel STL]] -+ [[file:connector%20terminal/connector%20terminal.FCStd][FreeCAD project]] ++ [[file:connector terminal/front panel.stl][front panel STL]] ++ [[file:connector terminal/back panel.stl][back panel STL]] ++ [[file:connector terminal/connector terminal.FCStd][FreeCAD project]] * Calibration :PROPERTIES: diff --git a/Miscellaneous/Adjustable resistor/index.org b/Miscellaneous/Adjustable resistor/index.org index 72c6be6..be3c51e 100644 --- a/Miscellaneous/Adjustable resistor/index.org +++ b/Miscellaneous/Adjustable resistor/index.org @@ -38,44 +38,44 @@ Schematic: Here is front panel for switches: #+attr_html: :class responsive-img -[[file:front%20panel.png]] +[[file:front panel.png]] Download: -+ [[file:front%20panel.FCStd][FreeCAD project]] -+ [[file:front%20panel.stl][STL file]] ++ [[file:front panel.FCStd][FreeCAD project]] ++ [[file:front panel.stl][STL file]] Sometimes I would like to use lightbulbs with various parameters as test load/indicator. Current device has 4 of them included. Here is front panel for light bulbs: #+attr_html: :class responsive-img -[[file:indicator%20panel.png]] +[[file:indicator panel.png]] Download: -+ [[file:indicator%20panel.FCStd][FreeCAD project]] -+ [[file:indicator%20panel.stl][STL file]] ++ [[file:indicator panel.FCStd][FreeCAD project]] ++ [[file:indicator panel.stl][STL file]] After assembly using prototype PCB: #+attr_html: :class responsive-img -[[file:make,%202.png]] +[[file:make, 2.png]] Following body is used as a case and PCB support: #+attr_html: :class responsive-img [[file:body.png]] Download: -+ [[file:body%20and%20back%20cover.FCStd][FreeCAD project (body + back cover)]] ++ [[file:body and back cover.FCStd][FreeCAD project (body + back cover)]] + [[file:body.stl][STL file for body]] Result: #+attr_html: :class responsive-img -[[file:make,%203.png]] +[[file:make, 3.png]] Cover on the back: #+attr_html: :class responsive-img -[[file:back%20cover.png]] +[[file:back cover.png]] -Download: [[file:back%20cover.stl][STL file]] +Download: [[file:back cover.stl][STL file]] Button covers: #+attr_html: :class responsive-img diff --git a/Miscellaneous/Alternative USB layout/index.org b/Miscellaneous/Alternative USB layout/index.org index c8a927d..d59e897 100644 --- a/Miscellaneous/Alternative USB layout/index.org +++ b/Miscellaneous/Alternative USB layout/index.org @@ -67,7 +67,7 @@ Example warning marking on device to indicate that alternative USB layout is used here: #+attr_html: :class responsive-img -[[file:../lab%20heater%20and%20cooler/make,%202.png]] +[[file:../lab heater and cooler/make, 2.png]] * Repository diff --git a/Miscellaneous/Battery tester/index.org b/Miscellaneous/Battery tester/index.org index c2fc875..999a61e 100644 --- a/Miscellaneous/Battery tester/index.org +++ b/Miscellaneous/Battery tester/index.org @@ -22,7 +22,7 @@ [[file:make.png]] #+attr_html: :class responsive-img -[[file:make,%202.png]] +[[file:make, 2.png]] Simple rechargeable Ni-MH battery tester. The problem with those batteries is: right after you take them out of charger, voltage level @@ -36,7 +36,7 @@ shorting battery + and - terminals using 5 ohm power resistor load. #+attr_html: :class responsive-img -[[file:electrical%20schematic.png]] +[[file:electrical schematic.png]] I use vintage analog voltmeter. Instead of power resistor I use Nichrome resistance wire. Test/measurement button should not be diff --git a/Miscellaneous/Headphone hub/index.org b/Miscellaneous/Headphone hub/index.org index 14488b3..861db3c 100644 --- a/Miscellaneous/Headphone hub/index.org +++ b/Miscellaneous/Headphone hub/index.org @@ -34,13 +34,13 @@ producing device can handle combined load. See: https://en.wikipedia.org/wiki/Series_and_parallel_circuits#Resistance_units_2 #+attr_html: :class responsive-img -[[file:make,%202.png]] +[[file:make, 2.png]] Device consists of body and cover that are held together by single screw at the center: #+attr_html: :class responsive-img -[[file:cover,%202.png]] +[[file:cover, 2.png]] * Download :PROPERTIES: diff --git a/Miscellaneous/Portable stereo active speaker/index.org b/Miscellaneous/Portable stereo active speaker/index.org index 04ed2dd..0327435 100644 --- a/Miscellaneous/Portable stereo active speaker/index.org +++ b/Miscellaneous/Portable stereo active speaker/index.org @@ -34,13 +34,13 @@ onboard power supply or batteries can handle. It has on/off switch and stereo audio input. Audio input impedance is about 100 ohms. #+attr_html: :class responsive-img -[[file:make,%20side.png]] +[[file:make, side.png]] Idea for the holes on the top and smaller ones on the bottom back is to enable air flow for passive cooling. #+attr_html: :class responsive-img -[[file:make,%20back.png]] +[[file:make, back.png]] Entire construction is made of parts, no larger than 120x120x120mm. Maximum for my printer. @@ -52,25 +52,25 @@ Entire construction is made of parts, no larger than Device is powered by 4 times AA NiMH batteries (1.2V each). #+attr_html: :class responsive-img -[[file:Battery%20holder/schematic.png]] +[[file:Battery holder/schematic.png]] I happened to have AA battery adapters lying around with different bottom hole configurations. Therefore this weird hole design: #+attr_html: :class responsive-img -[[file:Battery%20holder/battery%20holder.png]] +[[file:Battery holder/battery holder.png]] Download: -+ [[file:battery%20holder/battery%20holder.FCStd][FreeCAD file]] -+ [[file:battery%20holder/battery%20holder.stl][STL file]] ++ [[file:battery holder/battery holder.FCStd][FreeCAD file]] ++ [[file:battery holder/battery holder.stl][STL file]] Result: #+attr_html: :class responsive-img -[[file:Battery%20holder/make.png]] +[[file:Battery holder/make.png]] Attaches to the back of the body: #+attr_html: :class responsive-img -[[file:Battery%20holder/mounted%20on%20the%20back.png]] +[[file:Battery holder/mounted on the back.png]] * 20V up-step module :PROPERTIES: @@ -80,13 +80,13 @@ Battery pack voltage is routed through main on/off switch on the front panel, and then it goes to the 20V up-step module. #+attr_html: :class responsive-img -[[file:20V%20upstep%20module/schematic.png]] +[[file:20V upstep module/schematic.png]] It uses ready made upstep module, but adds extra voltage filtering via inductor and capacitors. #+attr_html: :class responsive-img -[[file:20V%20upstep%20module/make.png]] +[[file:20V upstep module/make.png]] * Main board :PROPERTIES: @@ -97,47 +97,47 @@ Voltage upstep above sits on top of main board (motherboard). It has uniform central bus that spans all connectors. #+attr_html: :class responsive-img -[[file:Main%20board/internal%20bus.png]] +[[file:Main board/internal bus.png]] #+attr_html: :class responsive-img -[[file:Main%20board/bus%20on%20the%20bottom,%202.png]] +[[file:Main board/bus on the bottom, 2.png]] First row of the main board is special IO terminal (for connecting speakers, front panel, etc..) #+attr_html: :class responsive-img -[[file:Main%20board/IO%20terminal.png]] +[[file:Main board/IO terminal.png]] Remaining rows are for connecting boards: #+attr_html: :class responsive-img -[[file:Main%20board/1.png]] +[[file:Main board/1.png]] To provide structural support, main board is attached to frame: #+attr_html: :class responsive-img -[[file:Main%20board/board%20fixator%20body.png]] +[[file:Main board/board fixator body.png]] Download: -+ [[file:main%20board/board%20fixator%20body.FCStd][FreeCAD file]] -+ [[file:main%20board/board%20fixator%20body.stl][STL file]] ++ [[file:main board/board fixator body.FCStd][FreeCAD file]] ++ [[file:main board/board fixator body.stl][STL file]] And boards plugged into main board are fixed at the top, using clip: #+attr_html: :class responsive-img -[[file:Main%20board/board%20fixator%20top%20clip.png]] +[[file:Main board/board fixator top clip.png]] Download: -+ [[file:main%20board/board%20fixator%20top%20clip.FCStd][FreeCAD file]] -+ [[file:main%20board/board%20fixator%20top%20clip.stl][STL file]] ++ [[file:main board/board fixator top clip.FCStd][FreeCAD file]] ++ [[file:main board/board fixator top clip.stl][STL file]] Result: #+attr_html: :class responsive-img -[[file:Main%20board/bus%20on%20the%20bottom,%201.png]] +[[file:Main board/bus on the bottom, 1.png]] #+attr_html: :class responsive-img -[[file:Main%20board/board%20fixator.png]] +[[file:Main board/board fixator.png]] * Mono audio amplifier module :PROPERTIES: @@ -150,24 +150,24 @@ identical audio amp modules had to be built, one for left speaker, one for right. #+attr_html: :class responsive-img -[[file:Mono%20audio%20amp%20module/schematic.png]] +[[file:Mono audio amp module/schematic.png]] I like to build on top of prototype PCBs. Gives results much faster for one-off projects. Before soldering, I solve component layout on paper: #+attr_html: :class responsive-img -[[file:Mono%20audio%20amp%20module/PCB%20layout.png]] +[[file:Mono audio amp module/PCB layout.png]] Result - front: #+attr_html: :class responsive-img -[[file:Mono%20audio%20amp%20module/assembled%20front.png]] +[[file:Mono audio amp module/assembled front.png]] Result - back: #+attr_html: :class responsive-img -[[file:Mono%20audio%20amp%20module/assembled%20back.png]] +[[file:Mono audio amp module/assembled back.png]] Here copper tape is used as improvised heatsink. @@ -185,25 +185,25 @@ combined. Capacitor acts as high-pass filter on top of tiny PCB: #+attr_html: :class responsive-img -[[file:Speakers/PCB%20layout.png]] +[[file:Speakers/PCB layout.png]] Speaker enclosure: #+attr_html: :class responsive-img -[[file:Speakers/speaker%20enclosure.png]] +[[file:Speakers/speaker enclosure.png]] Download: -+ [[file:speakers/speaker%20enclosure.FCStd][FreeCAD file]] -+ [[file:speakers/speaker%20enclosure.stl][STL file]] ++ [[file:speakers/speaker enclosure.FCStd][FreeCAD file]] ++ [[file:speakers/speaker enclosure.stl][STL file]] Speaker enclosure cover: #+attr_html: :class responsive-img -[[file:Speakers/speaker%20enclosure%20cover.png]] +[[file:Speakers/speaker enclosure cover.png]] Download: -+ [[file:speakers/speaker%20enclosure%20cover.FCStd][FreeCAD file]] -+ [[file:speakers/speaker%20enclosure%20cover.stl][STL file]] ++ [[file:speakers/speaker enclosure cover.FCStd][FreeCAD file]] ++ [[file:speakers/speaker enclosure cover.stl][STL file]] Result: @@ -228,30 +228,30 @@ I decided to add another voltage up-step module (target voltage output set to 6V). This time directly on the front panel. #+attr_html: :class responsive-img -[[file:Front%20panel/schematic.png]] +[[file:Front panel/schematic.png]] Front panel case: #+attr_html: :class responsive-img -[[file:Front%20panel/front%20panel,%20front.png]] +[[file:Front panel/front panel, front.png]] #+attr_html: :class responsive-img -[[file:Front%20panel/front%20panel,%20back.png]] +[[file:Front panel/front panel, back.png]] Electronics fits inside: #+attr_html: :class responsive-img -[[file:Front%20panel/front%20panel,%20back,%20make.png]] +[[file:Front panel/front panel, back, make.png]] Front view: #+attr_html: :class responsive-img -[[file:Front%20panel/front%20panel,%20front,%20make.png]] +[[file:Front panel/front panel, front, make.png]] And attaches to the remaining components: #+attr_html: :class responsive-img -[[file:Front%20panel/attachment.png]] +[[file:Front panel/attachment.png]] * Extra capacitors :PROPERTIES: @@ -262,17 +262,17 @@ power/volume can be further enhanced by adding high power capacitors to even out load on primary 20V up-step module. #+attr_html: :class responsive-img -[[file:Extra%20capacitors/extra%20caps.png]] +[[file:Extra capacitors/extra caps.png]] Download: -+ [[file:extra%20capacitors/extra%20caps.FCStd][FreeCAD project]] -+ [[file:extra%20capacitors/extra%20caps.stl][STL file]] ++ [[file:extra capacitors/extra caps.FCStd][FreeCAD project]] ++ [[file:extra capacitors/extra caps.stl][STL file]] Extra caps are mounted on top of the speaker and electrically attached to the main board. #+attr_html: :class responsive-img -[[file:Extra%20capacitors/make.png]] +[[file:Extra capacitors/make.png]] * Center box :PROPERTIES: @@ -283,15 +283,15 @@ Last physical part, to attach it all together: central body. Front: #+attr_html: :class responsive-img -[[file:Center%20box/front.png]] +[[file:Center box/front.png]] Back: #+attr_html: :class responsive-img -[[file:Center%20box/back.png]] +[[file:Center box/back.png]] Download: -+ [[file:center%20box/center%20box.FCStd][FreeCAD file]] -+ [[file:center%20box/center%20box.stl][STL file]] ++ [[file:center box/center box.FCStd][FreeCAD file]] ++ [[file:center box/center box.stl][STL file]] * Conclusions / TODO :PROPERTIES: @@ -299,7 +299,7 @@ Download: :END: Photo of initial PSU + audio amp test: #+attr_html: :class responsive-img -[[file:initial%20test.png]] +[[file:initial test.png]] Improvement ideas: diff --git a/Miscellaneous/USB desk fan mod/index.org b/Miscellaneous/USB desk fan mod/index.org index 1191b24..0b797dc 100644 --- a/Miscellaneous/USB desk fan mod/index.org +++ b/Miscellaneous/USB desk fan mod/index.org @@ -29,7 +29,7 @@ It all started with couple of cheap USB desk fans that were a bit too noisy: #+attr_html: :class responsive-img -[[file:mini%20fan.png]] +[[file:mini fan.png]] Idea is to add DC-DC step-down converter to reduce motor voltage to make it quieter ([[https://www.amazon.de/gp/product/B07K3W78SQ/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1][Purchased form here]]). And since I already have this @@ -60,48 +60,48 @@ From original fan I kept: Engine is attached with screws to following back-plate: #+attr_html: :class responsive-img -[[file:fan%20housing%20-%20fan%20mount.png]] +[[file:fan housing - fan mount.png]] And result is encased into pipelike case: #+attr_html: :class responsive-img -[[file:fan%20housing%20-%20cover%20assembly.png]] +[[file:fan housing - cover assembly.png]] Download: -+ STL: [[file:fan%20housing%20-%20fan%20mount.stl][fan mount back plate]] -+ STL: [[file:fan%20housing%20-%20cover.stl][pipe-like case]] -+ [[file:fan%20housing.FCStd][FreeCAD project]] ++ STL: [[file:fan housing - fan mount.stl][fan mount back plate]] ++ STL: [[file:fan housing - cover.stl][pipe-like case]] ++ [[file:fan housing.FCStd][FreeCAD project]] Fan enclosure attaches to the rectangular body below using following connector (glued to the fan housing): #+attr_html: :class responsive-img -[[file:fan%20housing%20connector.png]] +[[file:fan housing connector.png]] Download: -+ [[file:fan%20housing%20connector.stl][STL file]] -+ [[file:fan%20housing%20connector.FCStd][FreeCAD project]] ++ [[file:fan housing connector.stl][STL file]] ++ [[file:fan housing connector.FCStd][FreeCAD project]] Bottom part to house 2 PCBs, on/off button and DC connector: #+attr_html: :class responsive-img -[[file:bottom%20stand%20body.png]] +[[file:bottom stand body.png]] Component attachment: #+attr_html: :class responsive-img -[[file:make,%202.png]] +[[file:make, 2.png]] And is closed by cover: #+attr_html: :class responsive-img -[[file:bottom%20stand%20cover%20assembly.png]] +[[file:bottom stand cover assembly.png]] Download: -+ STL: [[file:bottom%20stand%20body.stl][bottom stand body]] -+ STL: [[file:bottom%20stand%20cover.stl]] -+ [[file:bottom%20stand.FCStd][FreeCAD project]] ++ STL: [[file:bottom stand body.stl][bottom stand body]] ++ STL: [[file:bottom stand cover.stl]] ++ [[file:bottom stand.FCStd][FreeCAD project]] After assembly, it looks like this from the back: #+attr_html: :class responsive-img -[[file:make,%203.png]] +[[file:make, 3.png]] Note, part of the body is deformed during printing. I have heated bed and I even printed raft support in Cura and it did not help. In my diff --git a/Miscellaneous/Window fixator/index.org b/Miscellaneous/Window fixator/index.org index 76c3036..161b7e5 100644 --- a/Miscellaneous/Window fixator/index.org +++ b/Miscellaneous/Window fixator/index.org @@ -27,8 +27,8 @@ Keeps window open so that strong wind will not slam it close. [[file:schematic.png]] Download: -+ [[file:window%20fixator.stl][STL file]] -+ [[file:window%20fixator.FCStd][FreeCAD file]] ++ [[file:window fixator.stl][STL file]] ++ [[file:window fixator.FCStd][FreeCAD file]] * Repository diff --git a/Optics/35mm film copying device/index.org b/Optics/35mm film copying device/index.org index 0616ab9..6d4182f 100644 --- a/Optics/35mm film copying device/index.org +++ b/Optics/35mm film copying device/index.org @@ -48,7 +48,7 @@ sides. Bottom rectangular stand is attached to body via screw on the bottom. FreeCAD files: -+ [[file:body%20and%20cover.FCStd][body and cover]] ++ [[file:body and cover.FCStd][body and cover]] + [[file:bottom.FCStd][bottom]] Example photo photographed from film: diff --git a/Optics/Fujifilm X-mount microscope adapter/index.org b/Optics/Fujifilm X-mount microscope adapter/index.org index c290558..acd7dea 100644 --- a/Optics/Fujifilm X-mount microscope adapter/index.org +++ b/Optics/Fujifilm X-mount microscope adapter/index.org @@ -61,7 +61,7 @@ choosing "SHOOT WITHOT LENS" option within camera settings menu. [[file:shoot without lens.png]] See also: -+ [[file:../microscope%20slide%20box/index.html][Case for microscope slides and cover slips]] ++ [[file:../microscope slide box/index.html][Case for microscope slides and cover slips]] * Repository diff --git a/Optics/Gyro for binoculars/index.org b/Optics/Gyro for binoculars/index.org index bec093a..02122c9 100644 --- a/Optics/Gyro for binoculars/index.org +++ b/Optics/Gyro for binoculars/index.org @@ -29,26 +29,26 @@ portable gyro stabilizer that has camera tripod interface. Therefore cameras and binoculars can be mounted. #+attr_html: :class responsive-img -[[file:make,%202.png]] +[[file:make, 2.png]] Old computer hard disk platters are used as rotating discs. They are attached to following disk mount: #+attr_html: :class responsive-img -[[file:disk%20mount%20body.png]] +[[file:disk mount body.png]] Download: -- [[file:disk%20mount.FCStd][Editable FreeCAD project]] -- [[file:disk%20mount%20body.stl][Printable STL file]] +- [[file:disk mount.FCStd][Editable FreeCAD project]] +- [[file:disk mount body.stl][Printable STL file]] Disk platters are fixed to disk mount using glued tightly fitting top ring: #+attr_html: :class responsive-img -[[file:disk%20mount%20top%20ring.png]] +[[file:disk mount top ring.png]] Download: -- [[file:disk%20mount%20top%20ring.stl][Printable STL file]] +- [[file:disk mount top ring.stl][Printable STL file]] Discs are rotated by electric motor. Motor is cooled by electric fan. Motor and fan are powered by 12V that is generated by 3 voltage upstep @@ -59,49 +59,49 @@ converters running in parallel. Body: #+attr_html: :class responsive-img -[[file:make,%201.png]] +[[file:make, 1.png]] FreeCAD model of the main body: #+attr_html: :class responsive-img -[[file:main%20body,%201.png]] +[[file:main body, 1.png]] #+attr_html: :class responsive-img -[[file:main%20body,%202.png]] +[[file:main body, 2.png]] Download: - [[file:body.FCStd][Editable FreeCAD file]] -- [[file:main%20body.stl][Printable STL file]] +- [[file:main body.stl][Printable STL file]] Rotating discs are covered and protected by top cover: #+attr_html: :class responsive-img -[[file:top%20cover.png]] +[[file:top cover.png]] Bottom part of the main body has cover: #+attr_html: :class responsive-img -[[file:bottom%20cover.png]] +[[file:bottom cover.png]] Download: -- [[file:bottom%20cover.stl][Printable STL file]] +- [[file:bottom cover.stl][Printable STL file]] Camera/binoculars can be mounted on dedicated holder that is screwed on top of the cover: #+attr_html: :class responsive-img -[[file:binocular%20mount.png]] +[[file:binocular mount.png]] Download: -- [[file:binocular%20mount.stl][Printable STL file]] +- [[file:binocular mount.stl][Printable STL file]] Result: #+attr_html: :class responsive-img -[[file:make,%203.png]] +[[file:make, 3.png]] #+attr_html: :class responsive-img -[[file:make,%204.png]] +[[file:make, 4.png]] * Conclusion :PROPERTIES: