Close
0%
0%

Fetch: A Ferrofluid Display

A 252 electromagnet-matrix that controls Ferrofluid

Public Chat
Similar projects worth following
A student-project at the University of Oslo. We have designed and built a massive ferrofluid-display with 252 electromagnetic "pixels". The display has a 12x21 resolution (the closest we could get to 16:9 on our budget), and is not DONE.

On Applied Procrastination we've shared all the details of this project and hope that it will inspire you to make something similar - or follow your own dream projects.


Background

We are a group of students at the University of Oslo, that have designed and built a massive ferrofluid-display with 252 electromagnetic "pixels". The display has a 12x21 resolution (the closest we could get to 16:9 on our budget), and is currently in the final testing phase. The matrix will control ferrofluid and act as a reduced functionality display, meaning it has some limitations.

Most evident is the mechanical time-delays caused by slowness in the ferrofluid itself. It can only be moved "so fast", and it has to be moved up against gravity - meaning it's impossible to magically turn a pixel on out of nowhere. "So fast" is however fast enough that it falls down quite quickly due to gravity. This means we do not get any help from persistence of vision, like normal screens do. In addition, gravity makes sure that if you power a column of adjacent magnets: more ferrofluid will accumulate on the lower pixels, leaving the upper pixels drained. Therefore our system requirements basically state:

1. Each pixel must be individually powered.
2. The system must implement a way of applying different holding force for each pixel.

Now, for point 2, the obvious solution is to PWM modulate the signal that powers each magnet (as described in point 1). However, we are not aware of any microcontrollers with 252 PWM pins. We are not aware of an affordable microcontroller with 252 of any pin, really. So, first of all we have to figure out a way to expand however many pins we have to the amount of pins needed. The solution we use are serial->parallel shift-registers. That solves point 1, but snaps us out of the dreams we had about individual PWM functionality... Or does it? Well, the way this has been solved is to implement the PWM in software. This is not optimal at all, because it makes our PWM frequency dependent on the execution time of the main loop. However, with some recent upgrades we made it seems to run fast enough to give us some leeway in terms of frequency-jitter. There's more on the topic of fast code towards the end of this story, but for now, let's take a look at how the project has evolved.

Prototype (Arduino Mega based)

We were not sure how to do anything related to this project when we started, so the only logical thing to do was to start on a smaller scale than the 252-pixel "monster" that we had planned. Therefore we built a smaller, 6x6 prototype, hooked it up to a single driver-PCB (max 28 magnets, so we only connected 6x5 of them) to test how everything worked out. The results were surprisingly good, so we went ahead to commit to a design that we could use in the final display.

When we are done with the full scale display we may revisit the smaller version and make a separate project on that, since it's a lot cheaper and easier to reproduce for other ferrofluid enthusiasts.

Many hours of experimentation

From the time when we saw ourselves happy with the performance of our prototype to the point when our full-scale display was fully assembled a lot of time was spent experimenting with everything from circuitry to the actual ferrofluid tank itself. All of this is documented on our YouTube channel, and if you're interested in making your own ferrofluid display, we highly recommend that you check out those episodes, as we try to share all the pitfalls we've discovered.

Electronics Assembly and Full Integration Testing:

In our most recent video we integrate the full system and test it after first having assembled and tested the electronics.

Everything is open source, and the files can be found below. However, we do not recommend anyone to attempt to rebuild the project in its current state. The electronics especially require a big revision (version 2 will be started later this fall).

Code Optimization

As was evident in the video above, and as we discussed earlier in the article, the Arduino Mega is starting to get a bit overwhelmed by how we handle everything sequentially....

Read more »

Applied-Procrastination-Fetch-Driver-Circuit-v1r2.sch

Schematics (we don't recommend anyone actually using this design for anything... except as a bad example)

sch - 490.75 kB - 08/10/2019 at 11:40

See BOM
Download

Applied-Procrastination-Fetch-Driver-Circuit-v1r2.brd

PCB design (we don't recommend anyone actually using this design for anything... except as a bad example)

brd - 521.76 kB - 08/10/2019 at 11:40

Download

  • 1 × Teensy3.6
  • 252 × 15/20mm Electromagnets
  • 1 × 1200W HP Server PSU
  • 10 × Custom PCBs In V2 the number of PCBs will be changed to 12
  • 1 × Glass tank

  • Fetch is DONE!

    Applied Procrastination11/29/2019 at 14:28 0 comments

    Oh, wow. It took us two years from start to finish, but the display is actually done. 

    We've compiled a series of sweet sweet animations and spent a long time perfecting this video. We hope you enjoy it:


    Since last time we've hidden the cable chaos. For the initial version of "Fetch" we wanted to use laser cut plywood as a chassis, because it's a very replicable and simple solution. We will look into a making a neater metal finish in the next version, which will be considerably sleeker, for an even cleaner look.

    For our own convenience, we also added a few buttons and switches that makes it simpler to show a variety of animations when displaying the project at maker festivals.

    We make the animations in Aseprite, a powerful and free* pixel art editor, and parse them into a format we've found easy to read on the Teensy 3.6 that's at the heart of the platform.

    (*As long as you can compile the source code yourself. )


    Future projects

    While Fetch is now complete, we are not done working with ferrofluid, or electronics for that matter. We are currently researching ways of making a "flat screen" version, and even much smaller ferrofluid displays that are cheaper to replicate. We are also working on implementing more software features, like videogames, in the version we've already made. This paragraph marks the end of the project, but not the end of our ferrofluid display endeavours. Stay tuned!

  • Code Optimization

    Applied Procrastination09/11/2019 at 19:15 0 comments

    As we have already revealed here on Hackaday.io, we recently upgraded our system with a Teensy 3.6 (from an Arduino Mega). We also did various changes to our code in order to make it run faster, so that we could implement PWM in software and have it perform reliably. We've already shared most of the improvements we've done, but now we've also compiled a video showing how it looks in practice:

  • Electronics Assembly and Full Integration Test

    Applied Procrastination08/10/2019 at 12:24 0 comments

    Although the project is new here on Hackaday.io, it has already been going on for a while. We have several build episodes on YouTube, but in our most recent video we integrate the full system and test it after first having assembled and tested the electronics. 

    Everything is open source, and the files can be found below. However, we do not recommend anyone to attempt to rebuild the project in its current state. The electronics especially require a big revision (version 2 will be started later this fall).

    Schematics:
    https://cdn.hackaday.io/files/1670567147323904/Applied-Procrastination-Fetch-Driver-Circuit-v1r2.sch
    PCB Layout:
    https://cdn.hackaday.io/files/1670567147323904/Applied-Procrastination-Fetch-Driver-Circuit-v1r2.brd

    (work in progress) Firmware can be found on: 
    https://github.com/SimenZhor/FerroFetchFirmware

View all 3 project logs

Enjoy this project?

Share

Discussions

DEM-DWG wrote 3 days ago point

if you made the screen as described ... https://www.instructables.com/id/Really-Beautiful-Swimming-Ferrofluids/

Then there is not enough addition of the soap composition to...

  Are you sure? yes | no

Applied Procrastination wrote 2 days ago point

Sorry, I don't think I understand what you mean

  Are you sure? yes | no

DEM-DWG wrote 2 days ago point

In distilled water, add not only salt, but also Surfactant
https://en.wikipedia.org/wiki/Surfactant

  Are you sure? yes | no

Applied Procrastination wrote 2 days ago point

There's no need to add surfactant when you use EF-H1 ferrofluid, it already has this coating. If you make the ferrofluid from scratch, the process becomes a whole lot more complicated.

  Are you sure? yes | no

DEM-DWG wrote 4 days ago point

I followed the path of this project and realized that it is better to use permanent magnets for watches.
And the problem with the thickness of the numbers, you can solve in several ways.
for example lower solenoids move away from the screen.

  Are you sure? yes | no

DEM-DWG wrote 4 days ago point

ну у меня не хуже получается

https://youtu.be/AuKSBLtyepc

  Are you sure? yes | no

Applied Procrastination wrote 4 days ago point

That's very cool! It looks like you have a mechanical approach, using neodymium magnets? I like it :)

  Are you sure? yes | no

DEM-DWG wrote 4 days ago point

Yes!

  Are you sure? yes | no

stevens.kg wrote 08/20/2019 at 12:11 point

maybe combine the anti-gravity vertically rising "raster" just mentioned with the main control coils. Drive them with a background signal, a bit like AC bias in magnetic recording, then add the pixel control on top of that.  You can drive the coils harder and for a shorter time using higher voltage, if you can drive them above the mechanical response time of the fluid, then it could look like anti-gravity without disturbing the shapes you want to make.  It might be an idea to tilt the display as one path, to get the pixel control working, and solve the upward drift in parallel, to un-tilt the display hen ready.  

  Are you sure? yes | no

stevens.kg wrote 08/20/2019 at 11:58 point

OK, suggestion that aren't cheating then..   possibly a 2nd immiscible phase to add buoyancy?  difficult not to end with mayonnaise though. 

what about a vertical stack of full-width coils, excited so as to make a travelling wave UP the display, at a much higher frequency, like 10kHz, even 100kHz, so it "strokes" the ferrofluid upwards and counters gravity to the desired extent.  

  Are you sure? yes | no

Sprite_tm wrote 08/15/2019 at 09:49 point

Hello, do you have any information on the liquid side of things? I experimented a fair bit to get something like this working, but the ferrofluid I could find either was extremely expensive, or dirtied the glass when put in water and attracted by an electromagnet...

  Are you sure? yes | no

Applied Procrastination wrote 08/16/2019 at 16:04 point

Hi, yes we have made three or four youtube episodes on how to make ferrofluid containers. We still have some kinks to sort out, but getting a perfectly stainless result is a bit above our knowledge-level.

  Are you sure? yes | no

russell.verdon wrote 08/15/2019 at 09:26 point

I once built a valve oscilloscope that had a 1 Megohm resistor from input to ground. I couldn't get anything to display until I found that I had used a 1.5 ohm instead(same colours in the resistor colour code).. did you measure the value of the test load resistor when you blew the circuit board track?   

  Are you sure? yes | no

Applied Procrastination wrote 08/16/2019 at 16:04 point

Yeah, we used a multimeter.

  Are you sure? yes | no

stevens.kg wrote 08/15/2019 at 09:05 point

what about just tilting the display back so you get just the right amount of gravity? - then you should be able to sequence the magnets to move a blob to the top of display - and hold it against the weakened gravity. 

  Are you sure? yes | no

Applied Procrastination wrote 08/16/2019 at 16:43 point

That's cheating 😁 

  Are you sure? yes | no

vincems wrote 08/14/2019 at 19:00 point

you might be able to do the pumping function with a bunch more electro magnets in a linear motor arrangement.  

  Are you sure? yes | no

MRMAINT62 wrote 08/14/2019 at 18:08 point

Here is the link address for ebay for the PCA9685 16-channel, 12-bit I2C PWM servo driver...

https://www.ebay.com/itm/123194284722    $2.10 each when bought in quantities > 4.

In the description, it lists only 62 board address combinations as being possible for the I2C. I do not know the current draw of your electro magnets, but if they are less than that of servos, it should work.

  Are you sure? yes | no

MRMAINT62 wrote 08/14/2019 at 17:46 point

I have two possible ideas that might help, maybe... 

First idea: Related to your PWM controller problems... PCA9685 16-channel, 12-bit, I2C driven PWM boards with 64 possible address combinations.  252/16=15.75 or 16 driver boards needed. 64x16=1024 maximum display size per I2C communication group. 42x24 display is 16:9 and 1008 pixels using 63 boards. Specs: 5V logic, 6V max PWM @ 40-1000 Hz. The boards are daisy chainable for a single I2C connection to the computer.

Second idea: Gravity battled to get Ferro-Fluid up to magnets. What if your display had two chambers, a front display and rear fluid conduit. Each magnet would push the fluid from the rear river forward through a small opening into a front chamber that would empty back into the stream by gravity. This would require the addition of a small pump to circulate the Ferro-Fluid from the bottom well to the top river where the flow would cascade down  top to bottom in the back layer for each column. The fluid would only divert forward to the display plane when the electromagnet pushes it there and the flow would drain back into the river at the back plane directly below the fill hole rendering a single clean pixel that can display instantly.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates