Persistence of vision device

12/10/2022 1 comment
It’s super hard to take any picture or video about this

A while a go I saw a neat article in Hackaday about a device that shows a picture that looks exactly the same looked from any direction. The idea is very simple: The picture is printed on a paper and placed inside the rotating cylinder. The cylinder has a narrow slit in it allowing the observer to only see a narrow section of the image at the time. When the cylinder rapidly rotates, observers brain parses the narrow sections to a whole image. Since the picture inside the cylinder rotates, it looks the same no matter which direction it’s looked at.

In the end of July there’s my favorite festival Naamat held in Muurame, Finland. The nights in July start to be dark after the midsummers endless day. The major point of the festival is the party at night at the camping area. My tent has a plastic dome on top of it, so I got the idea to replicate this device and place it on top of my tent to make it stand out in the night.

The construction

I thought it would be a one night task, but like with most of my ideas I ended up spending way more time with this that I intended. I started modeling the parts with Fusion 360. From top down, there’s the cylinder with the printed picture. The illusion works best when it’s well lit, so I made the top of the cylinder white from the inside to reflect the light back. The next part down is the rotor, where the cylinder is attached and which the motor rotates. Below that is the motor mount. The motor mount is essentially a white disc where the motor is fixed at the center. The light is provided by pieces of led strips glued to the disc. Again the white color is chosen to reflect the light inside the cylinder. After that there’s the bottom shell that has the electronics inside. The mounting on the tent dome is made by making a dome sized hole to the bottom of the shell and embedding three thread inserts to that the device can squeeze the dome on all sides.

The electronics

As for the electronics, there’s a RC ESC to control the motor speed and an Arduino mini that starts the motor with a fixed speed and then monitors the battery voltage. Not strictly necessary but I added a RC controlled switch to turn the light on and off. The rationale was that I wanted to be able to leave the device on for the whole night without destroying the lipo-battery by draining it completely. After power up, Arduino turns the light on, then waits for a few seconds for ESC to start and then it starts the motor at predefined speed. The rest of the time the Arduino is looping to check the battery voltage and when that falls below the set limit, the motor and the light is shut down. The idea is that the current draw after that is negligible and the battery can endure that for several hours.

When testing I used a meme picture that was all too familiar from the university where it usually included the text “Et vain osaa”

The problems

Boy were there a lot of those. I tried to make the cylinder as light as possible. When printing, I only used a single perimeter line with 0.6mm nozzle. To test that the idea works I printed only bare minimum parts, the cylinder and the rotor and tested just by holding the motor in my hand. When spooling up the cylinder, it immediately exploded to pieces in my hand. I re-printed the cylinder with walls twice as thick and tested again. I used a servo tester to find out the right speed. Somehow I had put the tester to full speed. Before I even had time to be scared the cylinder exploded again, fortunately missing my head.

When I got tested so much that I saw the idea worked, I printed the motor mount. Since this was supposed to be a quick and dirty project, I tried to use the parts I had in my junk box(es, there’s a lot of those boxes. And junk). I thought I’d get a perfect motor from an old camera gimbal. Those are small, have a lot of torque and rotate slowly. The only problem was that my ESC refused to work with that motor. I then tried to use 400 class RC helicopter motor, but that spins way way too fast for this purpose. I finally settled with the regular 550 class brushed motor. The same you can find from any cordless drill. This made the device a lot more taller than I wanted but it works and at least the motors are widely available. Fortunately I also found an ESC for the brushed motor. Those are becoming uncommon too.

Now that the cylinders were not exploding any more I noticed that the cylinder wobbled a lot. 3D-printing is not a tool for the tight tolerances. I thought that the mounting surface against the motor is not flat or the hole is not perpendicular to that surface. I printed a new part avoiding supports and with on purpose too tight hole. I then got my brother to flatten out the mounting surface and drill the right size hole with a lathe ensuring perpendicularity. This helped a lot but some wobbliness remains. This is likely because the slit on the cylinder, which makes the center of gravity to be somewhere else than the center of rotation. It also might act aerodynamically generating lift like a wing. The wobbliness don’t matter much but it makes the picture to appear a little fuzzy.

The final issue I only found about at the festival. I was a bit skeptical about this working at all when there but it seemed to work well and draw interest. But soon it shut down even with a freshly charged battery. When restarted, it would work for a random time and again shut down. I realized the mistake I made. The loop that checks the battery voltage only looks at a single measurement result and if it’s below the limit, it turns the device off. With ADC readings, you should always assume that they are dirty and full of measurement errors. This was later fixed by taking a rolling average over multiple measurements.

Jukka with a lathe

City of Light

There’s one and perhaps the only event that my home city Jyväskylä can be proud of, the City of Light which in every autumn fills the city with ingenious and beautiful light installations. I thought this would suit well to the theme. I printed a small adapter which attaches to the handle of my boys bicycle chariot. The device was fixed to this adapter. Against all odds it worked perfectly for the whole evening even in quite bumpy bicycle ride and in a rainy weather. It was fun to see people trying to figure out what it is and wondering it aloud but still nobody came to ask 😄

Categories: 3D Printing, Electronics

Hot tub cinema

My spouse got the idea that the dull gray inside of the hot tub cover might work well as a video projector screen. I remembered that my friend had an extra projector that I could have for a song, so why not try this out?

The projector

The projector I got was a really flimsy Vivitek Qumi led-projector with meager 720p resolution, but on the upside it’s small and looks like that it might endure the extreme temperature changes here in Finland. The projector came with no mounting plate so the first thing was to design and print one. This was quite easy considering that the projector is really light and has a standard camera thread on the bottom. I came up with this design: https://www.thingiverse.com/thing:4796449

The computer

I needed some hassle free way of playing videos. The simplest approach would be to use the projectors in-build USB-player but it would probably only play a really small subset of videos and adding those would be cumbersome. With good experiences on prior project, I chose Raspberry Pi 4 as a computer and installed LibreELEC distribution to the smallest SD-card I could find from the parts bin. LibreELEC is a tiny Linux distribution containing only what’s needed to run Kodi, a popular easy to use home theater software. It boots fast and runs from a small SD-card. To mount the Raspberry, I printed my favorite enclosure from Thingiverse: https://www.thingiverse.com/thing:3714695.

The entertainment

From the moment my spouse presented the idea, I had a clear vision what needs to be organized: A demo watch party for friends, so I collected computer demos from my favorite groups: ASD, Farbrausch, Fairlight and others. My spouse collected nature videos with relaxing music etc. We stored all the videos to our home server and instructed Kodi to automatically play a selection from the network share at startup.

Putting it all together

I fixed the projector under the eaves of our house where it would be safe from rain and only less than three meters away from the hot tub cover. The Raspberry case has VESA mounting points which were used to screw the case under the eaves. Our terrace has only one somewhat broken electricity outlet so that forced me to run an extension cord along the wall. The future improvement will be to run the cable inside the boarding. I put a remote controlled outlet between the extension cord and the outlet doubler to serve as an on/off switch for the whole system. The projector has its own power supply and I found an extra mobile phone charger to power the Raspberry (I used 4A supply and would not recommend using any less. Decoding videos takes a lot of juice). The picture showed up nice and bright enough in the early spring nights. Using the projectors zoom and trapezoid correction I got the picture to fill about all the space available in the cover. Even after adjusting, the picture is not perfectly sharp but for mostly playing abstract videos for ambience it’s fine to me. A water-proof Bluetooth speaker was used for the audio and controlling the Kodi when needed can be done using a Kore application on the Android phones.

Not only dance and joy

I was happily surprised how easily the project came together. That being said I did end up climbing up and down to the projector and adjusting the picture numerous times. The reasons were bad wifi speed and projector going to error mode.

Wifi speed

My mistake was to tidy the wires by fixing the projector PSU on top of the Raspberry with a zip-tie. The RF-emissions caused the wifi speed to be anything between 0.1 Mbps to 20 Mbps and making streaming videos from the home network painful. This was easily fixed by moving the PSU farther away from the Raspberry

Projector shutting down

I was a bit skeptic how the projector would handle the freezing cold weather. To my surprise it seemed to work in the minus five degrees weather. For a fifteen minutes. After that the projector started to blink the panel lights and according to manual indicating “CPU Fan fault”. Turning the projector off and on again resulted again 15min of use time before the same repeated.

I took the projector apart and tried to clean it up. I could not see any obvious problems. After putting it together this problem happened only once. I’m not sure if this is really about the fan or just the cold weather. It’s now a bit warmer so that might have fixed it. If the problem reappears the next winter, I’ll probably just add a second remote controlled outlet to flip just the projector off and on again.

After these issues were solved the installation has been working fine and endured outside already a month of quite terrible spring weather!

Categories: Uncategorized

Filament runout sensor for BCN3D Sigma

With new R19 of Sigma 3D-printer, BCN3D added filament runout sensor. Upgrade kit can be purchased for older versions, but it also includes new extruders and nozzles driving price up to 600 €. I don’t know how much difference the new extruders and nozzles make and I’m pretty pleased with current performance of the printer, so I don’t see myself needing those. The runout sensor is another matter, it might save my long prints and help me use up all the spools, so I decided to make my own.

The sensor attaches to extruder. This way there’s no need to purge rest of the filament. The sensor is far enough that it recognizes runout before the extruder runs empty, but it’s near enough that if you start feeding the next spool, the extruder will grab from new filament in few seconds.

The sensor can be attached to Sigma extruder driver. The Sigma firmware has really nice functionality to handle runout, but unfortunately at least currently it does not do anything when printing from serial. Another way is to connect the sensor to Raspberry pi running Octoprint. I chose the latter as I have Raspberry built inside the case of Sigma and I never print from SD. I tried to hook the sensor to driver and Raspberry at the same time, but it does not work, probably because of conflicting pull-up resistors. This could be solver by a bit of additional electronics.

Installation

Print the sensor case and cover flat, no supports needed. The microswitch KW12-1.

Solder long enough wires (either short to driver board or long ones where you keep your Raspberry). Install the switch to case. Test with a piece of filament that the switch works. Put a short M3 socket head cap screw into its slot before closing the case with cover fixed with 2.6mm countersunk screws. Add two M3 locking screws, but leave them flush with inside.

Unscrew the extruder and take of the old lower guide tube. Shorten the tube and take of the locking nut from cut of tube and replace it shortened tube. This is hands down the most annoying task. I found out that squeezing the tube with pliers and using socket wrench helps.

Fix the sensor to extruder and lock the tube to sensor case with locking screws. Install the extruders to printer. Unfortunately the lower locking nut of the right extruder can’t be installed with the sensor but the extruder will stay put just as well with one nut.

Crimp the connectors to wires and and plug in the connectors either to extruder drivers of Raspberry and you are all set.

If you chose to use extruder driver, enable filament sensor from printer menu (before this, update the printer to latest firmware)

If you are using Raspberry and Octoprint, install filamentsensor-reloaded plugin. The plugins deserve a post of their own. There seems to be filamentsensor, filamentsensor-ng and filamentsensor-reloaded plugins, all of them more or less abandoned. I’m planning to improve the latter and add more sensible support for more than one extruder, but more on that later.

I can sell these sensors assembled and with connectors if you don’t want to spend time sourcing all the parts. Just drop me a message on comments below.

Download STL’s from: https://www.thingiverse.com/thing:3404631

Croozer bike trailer alternate hitch

DSC_0084

There’s a great local service in my home city Jyväskylä called Lastipyörälainaamo, where one can borrow electric bikes, cargo bikes and bike trailers for free. I’ve been thinking about buying a bike trailer to use with my son, so this was an opportunity to try one before buying.

They borrow the trailer with an electric bike, but I wanted to use my own. Since they don’t have extra hitch hooks and anyway the hook would not play well with the quick lock wheels (at least on my bike), I thought to make an alternate hitch.

This is how it looked like. My bike is Haibike SDURO SL.

 

DIY Baby Monitor

10/11/2016 4 comments

I recently discovered WebRTC in another project and wanted to try it out in some home project. Since our another home project is nearing it’s delivery, a baby monitor seemed to be in the (very long) list of things to buy.

Our baby will probably be sleeping mostly outside in the baby carriage and I wanted some kind of device with live picture thats viewable anywhere in the house to keep an eye on him while doing something else. WebRTC seemed to fit the bill since it works wherever a recent enough browsed is available like in the Android tablet we have in the space between our kitchen and the living room. I tried to use ready software and 3D-printable parts wherever possible to make something usable fast. Read more…

Controlling Opal branded wireless electrical socket

04/01/2016 4 comments

The weather is getting so cold currently that the cars heater needs to be turned on for more than an hour. Since I don’t want to wake up any earlier than possible, I went to get a socket that could be remotely timed. I found Belking Wemo switch, but unfortunately it proved to be an utter waste of money. The configuration software is extremely poor and the device refused to connect to my homes access point no matter what I tried.

I had previously bought cheap sockets with a remote. These were branded “Opal” and cost next to nothing in a pack of two sockets and one remote and they seem to work well enough. Only minus was the strange 12v battery the remote uses.

_DSC3951

Socket, front

I popped open the remote to check how it worked. The layout seems to be easy enough. The +12v from the battery is dropped to +5v for the microcontrolled under the epoxy blob. The controller scans the keypad and generates the code which is fed to RF part. The RF transmitter requires the +12v straight from the battery and operates in 433 MHz frequency. I cut the signal trace from the controller to the transmitter and soldered wires to the test pad in the signal trace and the ground. Using the oscilloscope I checked what the controller is outputting when the keys are pressed.

Read more…

Autoleveling with proximity sensor

24/12/2015 3 comments

g2s

Geeetech G2S

I have a Geeetech G2S 3D-printer, which features autoleveling out of the box. Unfortunately the autoleveling is pretty much a joke, consisting of piece of bended wire and a microswitch. Due to the wire flexing, the probe will get different values when the head is moving from left to right than from right to left.

s-l1600

Inductive proximity sensor

I saw someone experimenting with the inductive proximity sensor for autoleveling. These sensors are usually used in applications like limit switches in the garage door openers. They aren’t designed for accuracy and thus I was a bit skeptic how it would work out. The sensors only detect metals, but for G2S it’s not an issue as it has a steel heat bed. Out of recommendation, I bought LJ18A3-8-Z/BX sensor from eBay. The benefit of this type of a sensor is the long detection range, which allows to position the sensor higher than the print head. This way there’s no need to manually lower and raise the sensor before starting the print. The downside is that the sensor needs +12v and also outputs the same voltage, so it can’t be directly connected to the endstop connector.

Read more…

Categories: 3D Printing, Electronics

Giving Kyosho iReceiver unlimited range*

15/03/2015 3 comments

_DSC2605

Kyosho EP Blizzard SR

Screen Shot 2015-03-15 at 13.17.24

iReceiver (c) Kyosho

A while ago I bought a version of Kyosho Blizzard, which features the new iReceiver which lets you control standard servos and ESC’s with your tablet or mobile phone. There’s also a camera fixed to Blizzard’s fuselage for streaming video. I didn’t have high expectations about the video performance but for the video the range is really poor. For controlling, the range is what you would expect for wi-fi device, about 50 m. The application however stops streaming the video as soon as it detects even a slight packet loss, which generally happens after 20 m. The thought arose, that since mobile networks are nearly ubiquitous, how about tunneling the traffic via 3g connection?

Read more…

“H-Series” Security camera

This post is mostly a note for myself, but might prove useful for other also. A while back I bought a security camera to my home from Dealextreme. It was typical Chinese quality with strange translations and weird software but worked nevertheless. I decided to buy another for my company and chose this model again from Dealextreme and thought that it’s the same camera with updated resolution. I was very wrong, this time the cameras internal software was so buggy that it almost made it unusable. The camera has no brand or name or anything, but the manufacturer is probably Wansview.

Read more…

PebbleMondo

16/06/2014 2 comments

PebbleMondo beta

PebbleMondo beta

I recently switched from Sports Tracker to Runkeeper, because the latter one offers integration with the Pebble smart watch. However both of those refused to work with my Polar heart rate sensor so I ended up with Endomondo. I wanted to keep the Pebble integration, but apparently even though that there are few threads in the interwebs requesting this feature, it does not seem to be in the list for now.

Endomondo does not offer any API to query information, but I noticed that when it’s not the active application it posts a notification with some very useful information. Since I heard that it’s possible for Android application to catch the notification messages posted by other programs, I decided to write my own adapter for Pebble.

Example notification

Example notification

It proved to be quite difficult to extract the sent information since it’s wrapped into RemoteView object, which does not provide any useful way to tinker with its contents. Finally I found an example from the Stack Overflow which gives an example how do this. Unfortunately the only way seems to be using introspection which is never recommended but seems to work.

The application gets the following information:

  • Duration of exercise
  • Calories burned
  • Heart rate
  • Distance

The information is sent to Pebble’s built-in sports application, so no extra application slot is used from the watch. Unfortunately the watch app is not customizable. It has a display for pace and speed and neither of those is available from Endomondo, so I’m reusing those fields for calories and pulse. User can toggle between these numbers by pressing the middle button on the watch.

The watch application will start automatically when Endomondo starts pushing notifications. The included Android app only displays some instructions and is required by the Play store. The actual program runs as a service on the phone and it needs to be given access to application notifications from the settings menu.

Application source code is available here: https://gitorious.org/pebblemondo

Installable application is available from the Play store against small support fee: https://play.google.com/store/apps/details?id=com.jannem.pebblemondo

Disclaimer: This application is not associated with Endomondo® or Pebble®

Categories: Uncategorized
Design a site like this with WordPress.com
Get started