🔦
Very tentative design. Sort of minimum viable design to prototype handheld interactions.
Open-back until it's more stable (sometimes you want to replug the projector, sometimes you want to plug in a USB keyboard to manually reconfigure if it's off Wi-Fi)
- Gadget chassis
- This prints in 2 parts: Chassis and front panel
- (for front panel, should choose either Ultimems version with smaller projector slit, or Nebra version with larger slit [since the Nebra is shifted a little toward the side])
- This prints in 2 parts: Chassis and front panel
- Handle grip with trigger button (in vendor/)
- This prints in 3 parts so far: Main grip, thumbwheel, block
- (Trigger inset itself is TODO)
(can view in https://3dviewer.net -- for the gadget chassis, the Gadget.shapr file is canonical / used to edit in Shapr3D, the derived files are generated from it)
- Ultimems HD305D1-C1 (manual) (recommended) or Nebra AnyBeam (should fit)
- There is a newer Ultimems unit HD309D1-C1 which I haven't tested yet
- You should probably go into the Ultimems onboard settings (with the wheel-button) and disable autokeystone and autorotate.
- Raspberry Pi 5 2GB or more
- (only the Pi 5 is guaranteed to supply the 5V1.1A over USB port to power the projector)
- Pi 5 active cooler (fan)
- microSD card
- 27W Pi 5 USB-C power supply
- (you cannot use an off-the-shelf USB-C power supply; you must use this one)
- TODO: battery system
- Raspberry Pi Camera 3
Wide
(maybe can also be NoIR version)
- 15cm 15-pin-to-22-pin "Pi Zero Camera Cable" (special, not the one that comes with camera -- Pi 5 has narrower MIPI ports)
- USB-C male-to-female 180-degree angle adapter
- 20cm USB-C male-to-female extension cable with panel-mount screw hole
- 7.5cm 65W USB-C Type C to USB-C Ultra Slim Flat Power USB2.0 Data Angled
Cable
- (to power projector from Pi)
- USB-A plug to USB-C jack
microadapter to fit
in Pi USB port
- any adapter will work (like https://www.amazon.com/gp/product/B07LF72431 ), but small is good
- short microhdmi to hdmi ribbon cable:
- 4x 6mm M2 bolts (for mounting camera to front panel)
- OR TODO bolts
- 4x M2 nylock nuts (for mounting camera to front panel)
- 4x 10mm M2.5 standoffs for Pi 5
- 4x 4mm M2.5 bolts for Pi 5 <-> standoffs
- 4x 8mm M2.5 bolts for standoffs <-> chassis
- 2x 4mm M2.5 bolts for front panel
- 2x M2.5 heat set inserts for front (to bolt front panel onto)
- 1x 1/4" bolt for top
- 1x 1/4" 6mm x 8mm heat set insert for bottom
Flash Raspberry Pi OS Lite (64-bit).
Add to config.txt on the boot partition of the SD card (see the Ultimems manual and https://volzo.de/posts/raspberry-pi-projectors/ ) (this mounts as /boot/firmware/config.txt, so can also edit there over ssh):
# For Ultimems projector:
hdmi_force_hotplug=1
hdmi_drive=2
config_hdmi_boost=4
hdmi_group=2
hdmi_mode=14
#hdmi_safe=1
Boot the Pi. Ssh in and follow Folk README setup instructions.
If the HDMI output on the projector is garbled, EDID might be messed
up. try adding
video=HDMI-A-1:1280x720M@60D
to /boot/firmware/cmdline.txt on the SD
card.
If vulkaninfo --summary
only shows the llvmpipe software Vulkan
device and not the V3DV Mesa device (the actual hardware GPU), try
updating the kernel and GPU drivers with sudo rpi-update
.
Use apt to install libcamera0.3 and libcamera-dev.
Use sudo nmtui
to add more Wi-Fi networks.
Create ~/folk-live/setup.folk to set the camera to use wide-angle resolution and to create moving dashed outline around the perimeter of the projection:
Assert $this wishes $::thisNode uses camera "/base/axi/pcie@120000/rp1/i2c@88000/imx708@1a" with width 1280 height 1024
Assert $this wishes $::thisNode uses display 0
When display /disp/ has width /w/ height /h/ {
When the clock time is /t/ {
Wish to draw a dashed stroke with points [list [list 0 0] [list $w 0] [list $w $h] [list 0 $h] [list 0 0]] color white width 10 dashlength 40 dashoffset [expr {fmod($t, 10)*-120}]
}
}
(the camera path may be different, Folk will print all valid camera paths
in its journal at boot if you need to check: sudo journalctl -u folk -n 30
)