S.W.I.M. = Sequential Wave Imprinting Machine = Lightpainting Wand, Photographic Light

by SteveMann in Teachers > 11

909 Views, 1 Favorites, 0 Comments

S.W.I.M. = Sequential Wave Imprinting Machine = Lightpainting Wand, Photographic Light

r20231117_2_4frames.gif
SteveMann_persistence_of_vision_pushbroom6502_devah_hair_ad_in_impulse1985.png
SWIM_patent_drawing_CIPO_2261376_19990201_page32_scale100c.png
SWIM_2001nov21_test-dsc_01602.jpg
hello2.jpg
hello_fellow_students_in_ece385.jpg
imgp2362cc.jpg

Back in the 1960s and 1970s in my childhood, I invented something called SWIM = Sequential Wave Imprinting Machine. It was a device to imprint text, images, graphics, and graphs (plots) directly onto human vision, or onto photographic cameras by waving an array of computer-controlled lights through space.

At the time there was no such thing as addressable LED strips, so I had to invent those for the purpose. Thus I ended up inventing, designing, and building the world's first addressable strip of lights in the 1970s and the world's first addressable LED strip as well.

In the 1970s, 1980s, and 1990s, I taught thousands of people all over the world how to make addressable LED strips and how to use them for photographic lightpainting as well as simply wave them around for direct human observation.

You can read a bit about the history here: wearcam.org/swimvention.htm

Needless to say, today there are a wide variety of low-cost addressable LED strips available on the market, so the purpose of this Instructable is how to get started using today's technologies, and how to do it in a very simple way.

Supplies

20231122_234219.jpg
20231128_125318.jpg
20231123_161915.jpg

For this Instructable you will want to get an addressable LED strip and a microcontroller, and possibly also a sensor. There are various kinds of LED strips. Many of them use the WS2812 or similar chip and have 3 wires: ground, +V and a combined clock and data pin. If you're a beginner these are a good starting place because they have very low cost and are easy to obtain from various sources, and they also run on very low power. A more advanced user will likely want to get a strip using something faster like the APA102 chip which has separate data and clock (4 wires). Note that some of the WS2812 devices also have 4 wires but the data and clock are still combined, so don't always only go by the number of wires.

I'll proceed with the assumption that you're a beginner and looking for something with low cost and low power consumption, so let's consider first the WS2812-based devices. These might go by various names like "Neopixel" or "Dream color" or the like. Many of them have self-adhesive tape to stick them to things like a wand you can wave back and forth through the air. Be careful not to hit someone or something, and use soft rounded (non-sharp) materials in case you do end up hitting someone or something while waving it around.

The next thing you'll want is a microcontroller. A good choice is Arduino Nano BLE 33 because it has lots of flash memory (1 meg) to store your patterns. You can always add a CF (Compact Flash) card reader, but I'll assume you're a beginner looking for the quickest, easiest way to enter the world of SWIM.

You can order this from https://www.canadarobotix.com/products/2493

The Arduino BLE 33 is also very sleek and slender so it can go on a narrow wand. I like to keep the wand narrow so that it doesn't occlude more of the subject matter than necessary.

The Arduino BLE 33 also has a built-in 9-axis IMU (Inertial Measurement Unit), e.g. compass and inertial sensing, so you can determine your position and orientation to some degree to SWIM-out content in some degree of alignment with reality.

You'll also want a resistor like maybe 330 ohms to put in series with the data/clock line. This is kind of optional but a good idea in case something goes wrong, e.g. shorts out, you'll have less chance of damaging the LED strip. If you do damage the LED strip you can sometimes salvage all but one LED, e.g. a little "surgery" to remove the blown LED and chip and you still have the remaining N-1 LED strip, e.g. a 72-LED strip is not completely lost but just reduced to 71 LEDs. However it is better to play save and not blow it in the first place. A series resistor helps a lot in this regard.

Finally you might want an external sensor. A simple Hall-Effect sensor is useful, for example, if you want to spin the SWIM on a motor and synchronize content with the motor's position.

You can order this from https://www.canadarobotix.com/products/2454

In the above picture you can see a simple test circuit to make sure the Hall sensor is working and to know how sensitive it is to position a magnet appropriately. Simply stick a magnet to the motor's shaft if you're using a motor, otherwise you can just wave the wand around by hand.

Wire It Up.

arduino_nano33ble_SWIM_pinout.png
20231128_161831.jpg
20231128_150412.jpg
20231128_150343.jpg
20231128_161845.jpg
20231128_150316.jpg
20231128_163321.jpg

I'll assume you're a total beginner, looking for the quickest and easiest way to join the SWIM team.

Many of the 3-wire LED strips come with a 3-pin connector and this is your easiest bet.

Although some strips have extra wires to provide additional power, this would more likely be of interest to an intermediate or advanced user, e.g. trying to make a 10-metre long SWIM you'll probably need to power it from both ends, but for a short half-metre strip, you can probably get away with powering it through the 3-pin connector alone.

This has some advantages. For example, a common demise of strips (blowing them) comes when supplying data to an unpowered strip, or other wiring issues that arise from multiple different connectors being connected in the wrong sequence.

These strips are quite finicky and you can save yourself a lot of pain by just doing everything through 1 simple connector.

Another interesting thing to note is that Vin makes a good output, i.e. the voltage input seems to be able to back feed from the USB power. That means we can power the strip through Vin, by just connecting the microcontroller to a USB battery.

Start at low brightness, e.g. don't max out the brightness with big white blobs. Instead start with sparsely lit content on a nice blackground (black background).

The lower left 2 pins Vin and GND go to the + and - of the LED strip, e.g. the outer 2 pins. Usually the + is grey and the - is black, and the middle one is data which goes through a 330 ohm resistor to a data pin.

We like to use D11 for data and clock, so that we're downwards compatible with APA102 strips where we also use D13 for clock.

So here we just connect the middle pin to D11 which serves both in this case.

Our code on GitLab assumes this pin by default.

Also note that I've used a piece of perfboard to strain-relief the wiring and to hold down the microcontroller.

Programming

Jump on our Git to get some sample code. MannLab on GitLab. We don't like GitHub because it reminds us of Microsoft.

Try some of the sample code.


Have Some Fun

r20231117_2_4frames.gif
r20231117_23014055.jpg
cylindricalSWIMotor_Nika_and_Samir.gif
cdsc1132.jpg
dsc1084.jpg

First try waving it around by hand, and then later try some fun things like hooking it up to a motor. Here I've got it on a motor. But safety first! Always be ready to pull the power and never use hard or share things. Also never leave anyone unattended around or especially inside a motor loop.

Use some old surplus VR controllers and now you have a video game that doesn't require any special eyeglass, and it is a game everyone can enjoy whether they're playing or just observing.

This is all about Mersivity which is technology in service of sustainable society, i.e. technology that connects us to our surroundings and to others, rather than disconnects or isolates us!

Check out our website, mersivity.com