Introduction: Moveillance and Motor Metaveillance

About: I grew up at a time when technologies were transparent and easy to understand, but now society is evolving toward insanity and incomprehensibility. So I wanted to make technology human. At the age of 12, I c…

In this Instructable you will learn how to assemble the MannLab SWIMotor kit which is an easy-to-use S.W.I.M. (Sequential Wave Imprinting Machine) with a place to mount a motor for rotary SWIM.

This allows you to see, photograph, teach, and deeply understand motors and other physical phenomena in new ways.

In the 1970s, S. Mann invented the addressable strip of lights (incandescent, neon, LED, etc.) for use as a scientific and artistic photographic lightpainting tool, etc.

As a medium of scientific visualization, originally called metavision and metaveillance, many regard it as the predecessor of the modern-day metaverse. SWIM was perhaps the first "spatial computer", creating an XR (eXtended Reality) environment. See http://wearcam.org/xr.htm

Mann taught SWIM to many others and distributed thousands of SWIM kits. SWIM was taught at McMaster University in the 1980s, MIT in the 1990s, University of Toronto in the late 1990s, and over the years thousands were taught the art of SWIM, and today there are many variations of this technology in the world.

You can buy the kit online https://www.canadarobotix.com/products/3096

and it is also totally free and open source, so you can make it yourself as well, or obtain the parts in the kit from any of a variety of different vendors.

Supplies

You can buy the kit online https://www.canadarobotix.com/products/3096

Since it is totally free and open source, so you can make it yourself as well, or obtain the parts in the kit from any of a variety of different vendors. The above picture shows what's in the kit: LED strip, e.g. Digikey Part Number 1528-1636-ND, motor, bag of resistors including photoresistor, two wheels, bag of capacitors, hookup wire, breadboard, etc., as pictured above.

The other thing you'll need is the swim stick to mount it on. You can pick one of these up from MannLab or Canada Robotix, or you can laser-cut your own, if you like, using the attached Inkscape SVG file. We run an ethical shop using ethics-based principles like free open source such as Inkscape.

The attached file is for 24x18 inch plywood; 1/8th inch thick is typically sufficient.

It will print 13 swim sticks on one sheet of 24x18 inch plywood.

Each stick has a rule scale along one edge (in units of 1 LED per tick mark, in groups of 6, for the highly composite number of 72), and text along the other edge.

A variety of different print densities are made so you can explore which works best for your particular laser printer.

Step 1: Prepare Swim Stick and Mount Motor

Remove masking tape from swim stick if present (e.g. tape that was used to hold plywood down to laser scanner).

Sand down the edges of the swim stick. This will help to avoid splinters.

Your kit will contain a motor and screws and washers (3 screws and 3 washers of which you only need 2, so you'll have spares in case you loose one).

Screw the motor to the swim stick with the shaft protruding from the non-text side of the swim stick.

Install the washers sharp-side down for safety. (Note that there's a dull side and a sharp side to each washer.)

Step 2: Attach the LED Strip to the S.W.I.M. Stick

The swim stick is designed for 50cm of LED length, i.e. half the LED strip, so that you can run half up one side and half down the other, or you could put two halves one on either side and wire in parallel, or just use one half of the strip and save the other half as a spare. If you're working with 1 other person in the lab, you might pair up and share the LED strip, each person using half of it.

To separate the strip in half, you can simply remove the backing and heat the join and separate. If you have a strip with no join, you can also cut it in half.

Notice the arrows which show the direction of data flow. The female connector is the input and the male connector is the output. So if you have the half with the male connector, you'll need to solder 3 wires to the other end of it which is the input.

Many LED strips have self-adhesive backing, but we prefer an environmentally-friendly reusable solution of wire ties. Not zip ties which are hard to remove but just simply wire. Stiff black solid-core wire...

Tie it on using the provided holes. Twist at the back, and trim off excess. Bend over the tie points to lay flat with the back of the swim stick.

Step 3: Wire Up the Breadboard and Attach to SWIM Stick and Connect Motor

There are quite a few different kinds of ESP32 microcontroller boards on the market with a variety of different pinouts.

In this Instructable, we assume that you are using this one:

https://www.canadarobotix.com/products/2594

and you should be looking at the rightmost of the 4 pictures which is the pinout that we're using.

This version of the ESP32 board is the one that comes with the SWIMotor™ kit,

https://www.canadarobotix.com/products/3096

Steps to assembly:

Insert the DIP (Dual Inline Package) ESP32 microcontroller into solderless breadboard, roughly centered on the board.

Connect two 470ohm resistors in series from 3.3V = DIP pin 1 to GND = DIP pin 38 of the microcontroller. These DIP pins are opposite one-another.

Connect one side of the motor to the center point between these two resistors with a blue wire.

Connect the other side of the motor to GIO36 = DIP pin 3 with a purple/violet wire.

The wires to the motor are adjacent colors so you might want to keep the wires stuck together as you separate them from the strip of wires.

The LED strip has 3 wires: ground=white, data+clock=green=center wire, and +5 volts=red. The female connector is the input that you will connect to. The male connector is the output of the LED strip and is only used if you wish to cascade multiple LED strips together to make an even longer strip.

Connect a black wire to the LED strip ground=white on the LED strip.

Connect the other end of that black wire to GND on the ESP32, specifically DIP pin 32.

Connect a red wire to the LED strip +5 = red.

Connect the other end of that red wire to Vin 5V which is DIP pin 19. Note that Vin 5V makes an excellent voltage output from USB power. The ESP32 will be USB-powered from a USB battery, so the voltage coming out of Vin 5V will come from USB battery power.

Connect a green wire to the LED strip data+clock=green, which is the center wire of the LED strip.

Connect the other end of that green wire, through a 180ohm resistor, to GIOP4 which is DIP pin 26.

Now connect the ESP32 to a computer running Arduino and upload the SWIMotor example code you can get from the MannLab Gitlab site.

You should see a "grat" (graticule) comprised of 7 magenta-colored dots, and you should see the 3 traces of RGB (Red, Green, and Blue) dots buzzing around slightly due to pickup of background noise.

Turn the motor in the direction of increasing angle, i.e. in a counter-clockwise direction. You should see the 3 traces increase, i.e. you should see the 3 traces move away the end where the wires are connected.

If the traces go the wrong way (i.e. decrease) then you have the motor backwards, so reverse the two connections to put it right.

Turn the motor in the direction of decreasing angle, i.e. in a clockwise direction and verify that the traces decrease, i.e. that they move toward the end of the LED strip that has the wires connected to it.

Affix the breadboard temporarily to a stick such as the SWIM wand

Bring your lab kit today and we'll help get you started. Addressable LED strip, microcontroller, breadboard, motor, and wires...

Steps to assembly:

Insert the DIP (Dual Inline Package) ESP32 microcontroller into solderless breadboard, roughly centered on the board.

Connect two 470ohm resistors in series from 3.3V = DIP pin 1 to GND = DIP pin 38 of the microcontroller. These DIP pins are opposite one-another.

Connect one side of the motor to the center point between these two resistors with a blue wire.

Connect the other side of the motor to GIO36 = DIP pin 3 with a purple/violet wire.

The wires to the motor are adjacent colors so you might want to keep the wires stuck together as you separate them from the strip of wires.

The LED strip has 3 wires: ground=white, data+clock=green=center wire, and +5 volts=red. The female connector is the input that you will connect to. The male connector is the output of the LED strip and is only used if you wish to cascade multiple LED strips together to make an even longer strip.

Connect a black wire to the LED strip ground=white on the LED strip.

Connect the other end of that black wire to GND on the ESP32, specifically DIP pin 32.

Connect a red wire to the LED strip +5 = red.

Connect the other end of that red wire to Vin 5V which is DIP pin 19. Note that Vin 5V makes an excellent voltage output from USB power. The ESP32 will be USB-powered from a USB battery, so the voltage coming out of Vin 5V will come from USB battery power.

Connect a green wire to the LED strip data+clock=green, which is the center wire of the LED strip.

Connect the other end of that green wire to GIOP4 which is DIP pin 26.

Now connect the ESP32 to a computer running Arduino and upload the attached SWIMotor example code.

You should see a "grat" (graticule) comprised of 7 magenta-colored dots, and you should see the 3 traces of RGB (Red, Green, and Blue) dots buzzing around slightly due to pickup of background noise.

Turn the motor in the direction of increasing angle, i.e. in a counter-clockwise direction. You should see the 3 traces increase, i.e. you should see the 3 traces move away from the end of the LED strip to which the wires are connected.

If the traces move the wrong way (i.e. toward the end of the LED strip where the wires are connected), reverse the two connections to the motor to put it right.

Check that the traces decrease (move toward the end of the LED strip with wires connected) when the motor is turned in a direction of decreasing angle (i.e. clockwise).

By convention we say that the field in a motor is increasing in phase angle when turned counterclockwise.

Attach the apparatus to a stick, rod, shaft, or wand such as the SWIM wand.

Do not peel and stick the breadboard double-sided tape yet, just tie it on first to try it on for size and balance.

There is some stiff wire included in the kit to tie things together with.

Also tie the LED strip to the wand. Don't peel and stick it just yet.

Put the wheel on the motor and make a long-exposure photograph of the wand as it rolls along the edge of a desk.

You should see a plot (graph) from the motor displayed upon the grat.

Now you can print text like "Hello World" or your "name in lights" as you move the wand across a desk.

The motor produces a pulsating waveform that can be used to index through text or images.

Your name or other text should appear forwards when you move the wand forwards across or along a tabletop or desk.

The text or image content should play backwards when you move the wand backwards along the desk.

When the wand moves faster the text or image content should "play" faster. When the wand moves slowly the content should play slowly. When the wand stops moving the content should stop moving.

The next step is to print a combination of images, text, graphics, and graphs (plots). Plot a graph of the output of the motor and use your text capabilities to label the axes and provide "tick" marks along the axes.

The next step is to balance the wand, i.e. attach a USB battery of appropriate mass, and position it the right distance from the motor's shaft, so that everything is in nice balance.

Now you can affix the shaft and spin the wand for a long-exposure photograph.

Now you can repeat the same thing in polar coordinates. Display images, text, graphics, and graphs (plots) as above, but now in polar coordinates.

Experiment with a mixture of Cartesian and polar coordinates, and have some fun exploring the scientific, artistic, and creative capabilities of SWIM.

Step 4: Test S.W.I.M.

First test the LED strip with a simple "Hello World" photo like these photos from the course taught by S. Mann each year since the 1970s. These pictures are from the classroom teaching lab in Bahen Centre for Information and Technology, year 2001, year 2006, and the year 2024. For more examples, see http://wearcam.org/swimvention.htm

Step 5: Test Motometer Principle

Implement a "motometer", i.e. code that senses the turning of the motor. When you turn the motor it will generate electricity. When you turn it counterclockwise it will, by definition, generate a positive voltage if it a DC motor, or an electrical signal of positive frequency if it is a polyphase AC motor. If not, reverse the wires of the DC motor or any 2 wires of, for example, a 3 phase motor. The above pictures are from a class, lab, in the Bahen Centre for Information and Technology, year 2024.

The motor should generate a negative voltage, if it is a DC motor (or a signal of negative frequency if it is a polyphase AC motor) when you turn it clockwise.

This will allow you to sense the amount of turning of the motor.

Here we're using the motor as a generator, i.e. the motor is a sensor in this usage.

A good way to begin is to make a simple bargraph or dotgraph that rises or falls when the motor goes counterclockwise or clockwise.

Step 6: Combine S.W.I.M. and Motometer for Linear S.W.I.M.

Combine S.W.I.M. and motometer to produce a linear SWIM using the motor. Now you should be able to regulate or "clock through" text, images (pictures, graphics, and graphs (plots of mathematical functions).

Try printing out "Hello World" by way of motometry to pace the clocking of the text while rolling a wheel connected to the motor along a surface such as the edge of a desk.

You can power the microcontroller (ESP32) using a long USB cable, or a small USB battery attached to, or held next to, the microcontroller and swim stick.

Note that in the original SWIM of 1974, a Doppler radar was used. See http://wearcam.org/swimvention.htm

You can also experiment with a larger wheel, and with a 3-phase motor as with the ebike motor example shown.

In that case it uses 3 of the analog inputs, pins GPIO36, GPIO30, and GPIO34, as shown in the diagram at https://www.canadarobotix.com/products/2594

Step 7: Rotary S.W.I.M.

Next repeat the above step in polar coordinates.

Here we can, for example, plot the output of the motor itself as a waveform to create a rotary oscillograph of the motor output in polar coordinates. We can also label the axis / axes, e.g. including a grat (graticule) and axis labels as well. For example we can have text to denote the angle of rotation, along with a rule / scale / graticule / reticle, or the like.

Here you'll want to get the balance right so that the center of gravity of the SWIM stick falls exactly at the motor shaft. You can do this by careful choice of a USB battery and cable, as shown in some of the above photos.

Initially you'll use the motor as merely a sensor (generator) to drive the swim that you'll spin by hand. The next step is to make it spin itself so the device is a free-running display. And finally, combine both of these and make it self-free-running but remain interactive so for example, you can grab it and slow it down a little, resisting the motor's efforts, and observe the characteristic tilting of the rotating magnetic field in the motor under test.

You might also want to try different motors, in addition to the one supplied with the kit.

Experiment with powertrenography, e.g. to see, photograph, and understand the drivetrain of an electric vehicle such as a small electric mobility scooter.

But remember, safety first! Always make sure the motor is running at drastically reduced speed and power, and even then, consider inertia. Never run the motor fast and strong unless the SWIMs are behind a polycarbonate safety shield!

Step 8: Going Further: Mind-over-motor

Author S. Mann co-founded a company called InteraXon that makes the Muse and Muse-S brain-sensing headband products, which can be adapted to control motors such as electric wheelchairs. When learning how to control an electric wheelchair that we designed for quadriplegics, a good training strategy is to use biofeedback entrainment with SWIM, i.e. to watch the SWIM on the motor while using the brain to control it wirelessly over BLE (Bluetooth Low Energy). The ESP32 https://www.canadarobotix.com/products/2594 works well with Bluetooth so you can control a motor with your mind.

If you want to try this, consider training in a dark quiet space, where you can concentrate on the rotating magnetic field of the motor.

The field and pattern of the SWIM is mesmerizing and if you stare at it for 15 minutes a day, you'll soon learn how to control the motor with your mind.

Check out this research paper which also includes a concept we call "Jobbing on the Sleep" which is the reciprocal of sleeping on the job: we harness the full power of the subconscious mind to design electric motors by way of the mesmerizing entrainment you get while you stare at the spinning SWIM.

Have fun but most important of all stay safe and be careful with spinning things!

Step 9: Further Studies: Bibliographic Reference Citations

Here's some further bibliographic reference citations and links for those wishing to learn more about SWIM and rotary SWIM:


[1] author = "S. Mann", "Wavelets and Chirplets: Time--Frequency Perspectives, With Applications",

editor = "Archibald, Petriu", booktitle = "Advances in Machine Vision, Strategies and Applications",

World Scientific Series in Computer Science - Vol. 32", pages: Cover + 99-128, 1992

#note = "ISBN 981-02-0976-2",

[2] Mann, Steve, et al. "Moveillance: Visualizing electric machines." 2020 22nd Symposium on Virtual and Augmented Reality (SVR). IEEE, 2020.

[3] Mann, S., Do, P. V., Garcia, D. E., Hernandez, J., & Khokhar, H. (2020, September). Electrical engineering design with the subconscious mind. In 2020 IEEE International Conference on Human-Machine Systems (ICHMS) (pp. 1-6). IEEE.

[4] Mann, Steve, et al. "Powertrain photography and visualization using SWIM (Sequential Wave Imprinting Machine) for veyance safety." 2022 IEEE International Conference on Vehicular Electronics and Safety (ICVES). IEEE, 2022.

[5] Mann, S., Garcia, D. E., Do, P., Lam, D., & Scourboutakos, P. (2020, November). Visualizing electric machines with the sequential wave imprinting machine (swim). In Anais do XXII Simpósio de Realidade Virtual e Aumentada (pp. 462-466). SBC.


http://wearcam.org/swimvention.htm

http://wearcam.org/SWIMotor.htm