MakerBot Print is our newest print-prepration software, which supports native CAD files and STL assemblies,
allows you to interact with all your printers via the Cloud, and many other exciting new features.

Download Now



by RxBConcept Dec 13, 2016
Download All Files

Thing Apps Enabled

Please Login to Comment

Taking a break from tuning... Man this is not going well :P

Best I've gotten is it dances in my hand a bit. If I lower my hand from there then it drops, raise my hand the tiniest bit and it sucks up to the coil...

I bought the wrong magnet wire (28awg instead of .28mm/30awg) so I added a bunch more turns to at least bring it up to around 42 ohm. If I did the math right (which is a 50% chance at best :P ) then I have more turns than filling up the spool with 30awg. I redesigned the coil holder to house the new coil.

To find a decent starting point I set I and D to zero and I get the best result with P = 4.5. I try playing with I and D from there but haven't seen any improvements... YET!

Any tips are appreciated.


Awesome project, thank you for sharing! I would like to mill the pcb on our portal mill at work, but the operator need a dxf file. Could you generate and add such a file insted of the gerber files ? Anyhow thank you for this interesteng project. :)

Excellent Project, was able to achieve levitation first try using the Manual to do the tuning. Very well written; explained everything thoroughly.


Thanks for the feedback. Glad you manage to levitate :-)


Hi, i have built this project, im using a cc/cv bench regulated adjustable power supply, my wire was a thicker gauge but i made it bigger and it measures 2 ohms, i know its low, but i can adjust constant current from 0-5 amps very precisely so i can drive it with a lot of current, i can get the levitator host up and see the graph and adjust my PID values etc and i am close to having it levitate, the only thing that im having issues with, the arduino firmware, after flashing it the serial monitor to 112500 baud etc, i open it and it says levitator firmware or what it supposed to say when you open the serial monitor, but when i type $$ or any other prompts listen in the firmware, the serial monitor doesn't respond, all it ever says is that first line, i am also using an arduino uno so im not sure if that has any effect, is this a issue that its not responding?also i cant get the auto standby/shutoff to work unless i reverse my magnet and hold it close to the sensor, I put a fluke multi meter across the sensor to read the voltage, when theirs no magnet it reads 2.5v when i bring the magnet close and the coil turns on and it starts to try to levitate the sensor reads 4.75-4.80 volts, then if i remove my magnet completely it reads around 4.96, so the magnetic field from the coil is holding it at full value, even if i bring active threshold down to 15 it still doesn't turn off unless i turn the magnet around and hold it up to the sensor, im confused it seems to me like the coil should bring the sensor one direction, and the magnet bring it the other, im using a circle n50 magnet with diameter of 15mm and thickness of about 3 mm. i couldn't order any parts online as i dont have a card or money so the hall effect sensor im using is a new released one from silabbs that they sent me free samples of its the Si7211-B-00-IV analog output hall effect sensor, any help would be greatly appreciated thank you very much!

To answer your concern about the serial communication. If you manage to connect the LevitatorHost, and tune your PID, then the serial communication is fine, as the LevitatorHost is using the protocol described in the firmware.
However, you can only have one connection at a time. So you cannot connect the LevitatorHost AND another serial console.
Hope this anwser that part of your question.
Regarding your sensor. Reading your description, it seems that it is fine (according to the reading you're reporting: 2.5V at rest, and increasing/decreasing when approaching a magnet.
Concerning the auto standby/shutoff, (and the whole system polarization), I would recommand you to read the User's manual.
The procedure, to orient the magnet, configure the controller, etc...) is explain.
Maybe it's not clear enough and if you have other questions, I'll be happy to answer.

       I have some questions about your project. Have you tested Bluetooth before? The maglev without the Bluetooth function is basically OK, but I don't know how to modify the code for adding Bluetooth function. If you can help, I will be very grateful!


You don't have to add code to use the bluetooth.
Your HC06 module should be configured to use a baudrate of 115200 (see this instructable to configure it)
Once configured, plug the module in the levitator, unplug the USB cable, and turn the power on.
The HC06 should start blinking.

Then on your PC,

  • pair the HC06 module
  • enter the passcode (0000 or 1234 by default I don't remember)

This should install new serial ports. (on windows 10 you can look at "advanced bluetooth parameters")

Connect to the 'outgoing' one with the LevitatorHost application.

That all.
Once the pairing is done, you don't have to do it again. Just connect to the corresponding bluetooth serial port.


I understand what you mean. I mean that you can adjust PID parameters directly with andriod devices. It's much more convenient, but it feels like there are difficulties in the code. ...


You can use any Bluetooth serial port application on your mobile phone to connect to the levitator.
However you'll have to use the text based protocol describe on the levitator bitbucket project as there is no dedicated Android application yet.

First of all, thank you very much for your answer. Do you mean that the source code you provided already contains the Bluetooth PID module? Since I haven't learned C language yet, it seems very difficult. I will try again. Can this code be directly controlled by Bluetooth connection via mobile phone? Thank you! ! !

Does anyone offer an electronic component kit to save sourcing time?

If several persons are interrested I can try to make some electronic kits.
However this will take a little time to source everything.
Let me know.

I'm interested. Anyone else?

What electronic/hardware parts would you need? In which country should I send them if I manage to make a pack?

I'm in the US and would be interested in everything but the Arduino board. Though if you included that, or a clone, and it was quality and comparably priced then that's fine too.

BTW the little biplane would be sweet if the magnet were hidden :)

Hello, could you tell me what would be the maximum weight of the magnet he can levitate?

It's around 30g. But it will also depends on the strengh of your magnet.


Sure, thank you very much

I would to ask some help about your project, unfortunately I am not able to active any levitation.
A couple of premise, I realized this project for educational purposes, I make it for some scout boys.
I am sure that all the hardware is OK, I think that the problem is the tuning.
At the beginning, after a few casual tests, I was almost able to get a levitation, it was not OK, I had to hold a hand under magnet, the levitation was really unstable, but it was a start point, then I touched something, I don't know what, and after, despite many other try, I could not get the same result as before.
At this point the only choice that I have is to ask to you some questions:

  • on the interface, after the startup, appear three horizontal lines, one red, one blue and one green, what they represent? Seem to me, if I have understood right, that the red line is the signal of the Hall sensor, the green one is for the coil, but for the the blue one I did not understand.
  • on the interface there are two buttons for the e2prom, which one is used for writing and which one to read?
  • is there a way to reset, totally clean the e2prom to bring all the values ​​back to default?
  • can you give me some medium values ​​for the PID part and also for the setting part?
  • can you give some precise information for the magnets? both magnet, the one what goes on top of the bolt and to one that should float.
  • I saw that the interface can save and reload a configuration file, can you share your working configuration?

could you better describe the calibration procedure? I read what you have already written but I could not understand very well the procedure.
I understand that this are too many questions and that maybe you will have little time to devote to these things and I would to apologize for bother, but I promised this project to some guys and I don't like to let them down.

Thank you

Hi Dommy,

You reached the most difficult and frustrating part: the tuning

Thank you for taking time to reply, and yes I know! this is the hardest part, the tuning of any system is the fun...... part.
But it would be great to know, to understand, to know what one are doing, to know what the various options mean and have something like a functional project description.
You did the project, you wrote the code, you did the interface, for sure you know everything and you know exactly how to do and what to do for to obtain the best result.
For other people, for everyone else, it is a difficult exercise, at the limit of the impossible.
Having some information would help a lot.
Is really impossible that you can answer my questions?
Anyway thank you in any case, kudos.

Hi Dommy,

I dig out this project (and also build a flying heart for my beloved one for Valentin's day :-) ).
I've modified a few parts (mainly the arm and coil cylinder fixation) and also widen the USB-mini hole.
But those modifications should not change anything for you.

I also wrote an Assembly And User's manual.
Please be my first reviewer: https://www.thingiverse.com/download:4665494
Feedbacks and comments welcome !!

Hope this will help


Hello Eric,

I see your update just now, your original project was very nice, but now it is wonderful.
Excellent JOB! (uppercase)

Hope you manage to get a stable levitation.
Please keep me informed.

Last night I spent several hours trying to get a decent result.
I was not very lucky, but step by step some results come.
Now a magnet begins to levitate decently, but it is quite a dancer, unstable.
I had to put two 10x10 magnets on top of bolt to get something.
A strange thing is that seem that the old version of the firmware is better, but I have to do other tests.
Another strange thing is that the resistance of the coil is only 25 Ohm and not 50 as wrote by you in your paper.
I made two coils and both are identical, I did a good windings (I hope) and I completely filled the spools, the copper wire is like the one used by you.
Anyway thanks again
I will keep you updated

Hy Dommy,

By reading your feedbacks, my first thought is that your coil is not 'strong' enough.
The fact that it is only 25ohms probably means that your CU wire is larger than 0.28mm (diameter), thus you made fewer turns to fill the spool.
What matters in a coil, is really the number of turns and the current that flow thru it.
So fewer turns means less magnetic field.
Also, the fact that it is only 25ohms, means that when turned on, at 12V, it will consum twice as much current so maybe your power supply is not strong enough.
Maybe you could try to increase the value of the big decoupling capacitor on the power line to be able to sustain the current when the coil is turned on.

Also, the magnet on top of the bolt is here only to reject the levitating magnet when it comes to close to the lower end of the bolt.
This is to prevent the levitating magnet to get stuck on the sensor cap.

The fact that you had to place 2 10x10 magnets on top of the bolt makes me think that you probably put them in the wrong orientation and that they 'compensate' the weakness of the coil.

On the opposite, maybe your CU wire is 0.28mm diameter, and in that case it means that it is of a really good quality, and thus your coil is twice as strong as mine.
And the 2 10x10 magnets if placed in the correct orentation serve to compensate the extra-strengh of your coil.
In that case, you could try to divide by two the values of your PID settings.
Or you could try to levitate an heavier object.

In any case, if you keep a 25ohms coil, check the strengh of your power supply.

Can you share pictures of your build ? (you can send them by mail: rxboucher@gmail.com)

Also, the new firmware should not change anything in the control loop.
It only provides the ability to reverse the reading of the sensor to be able to correctly setup the orientation of the Levitator.
Overall orientations depends on how the coil is winded (clockwise/counter-clockwise), how it is connectected to the power supply and how the sensor is placed in the sensor holder).

Hope this helps and that you'll end up with a stable levitation.


Hello Eric,

Thank you for your suggestions.
In my previous message I did not share too much detail, now I try to better explain what I did.
I made some changes to adapt the project to my needs, I used an standard Arduino uno module and I made a shield with on top the necessary components wired in a standard way, without any PCB.
The photos clarify better what I did.
The important part of the structure remained unchanged, I changed only the platform base.
Hall sensor and Mosfet are those used by you.
I think the problem is the coil, maybe the wire is too big and therefore there are less turns.
I did a lot of tests, the only decent levitation I obtained was with two 10x10 magnets on top of the bolt and with a very large levitation magnet, it is 20x20x10 and weighs about 30 grams.
I do not have problems for the power supply because I have used a laboratory power supply for testing and therefore I am sure of the quality of the voltage.
I tried with voltages from 12 to 20 volts.
Obviously the power supply circuit was modified, the input voltage goes to a DC / DC traco power regulator with 12/24 Volt input and 9 Volt output, there is also a 100uF capacitor on the output.
The 9 Volt is used to power the Arduino module, while the input voltage power only the coil, so I can test whatever voltage I want try.
The voltage is stable and clean, I believe that the problem may be the section of the copper wire.
I'll have to do another reel ....
I did not take many pictures, but I think that what I have shared is enought to have an idea.
The levitation is here but non very stable and not reliable.
As you can see from the monitor screen shoot the control is not regular and is too much nervous, obviously I tried may setup with PID values but is very very wearying.
Any other suggestion are really very wellcome

Hi Dommy,

You have a really nice workbench !! I wish I could have one like that :-)
So the problem doesn't come from the power supply.
And as you can set the input voltage you want, you might be able to compensate the smaller number of turns in the coil (if that's the problem).

But looking at the pictures you sent, the display screen shot doesn't look quite normal.
What it says is that the magnet is levitating 'higher' than were you ask it to be (the blue line) and that the control loop is not able to make it go down. Which seems kind of weird: the control loop is not able to let the earth gravity do its job !! ;-)

Indeed, the lower the value of the red line, the closer it is suppose to be to the sensor.
So, my guess is that you got the orientation setting the wrong way.
Can you double check your configuration as explained in section 8.3 of the manual ?

What you should have:

  • when putting the magnet under the sensor and moving it up to the sensor, the red line should go down.
  • When the red line goes under the 'actv threshold' value, the coil should turn on
  • When turned on, the coil should attract the magnet.

If that is not the case,

  • check the 'sensor reversed' checkbox the press the send button.
    Then flip your magnet the other way and re-test everything.

Also, your sensor filter and coil filter seems to high.
'Sensor filter' should be around 2 or 3
'Coil Filter' should be 1. (I should remove that option, as it doesn't really help)


Hi Eric,

I will do further tests around the magnet polarization as you suggest.
I noticed the difference between the two red and blue lines, I saw that in your setup they were practically coincident while in my no, but I could not find a way to align them.
I think I have verified the polarity of the magnets well, but I will try again.
For example, I also tried to invert the poles of the coil changing the wire position on the connector in order to reverse the polarity.
For the filters, both coil and sensor, I tried all the possible combinations, it seems very strange also to me that the sensor filter should be so high but if I lower it all becomes even more unstable.
I redo the whole magnet setup from scratch and then I will keep you update.
For a few days I will be out of country for working reasons, so I think that I cannot update you before the first days of next week.

I hope that our chat can also help others people.
Thank you for your suggestions.


Hi Dommy,

Any update on your tuning?
On my side I tried to reproduce your configuration with a 30g magnet (at 12V)
See pictures for my PID settings.

OK, keep me updated when you come back.
Also, for a first levitation, you could maybe try a lighter magnet.
My first try was with a 10x10 cube with a small bolt underneath to stabilze it.


Comments deleted.

how much weight can can this levitate ?


The small plane (http://www.thingiverse.com/thing:1983683) if about 15g and levitate really well.
The bigger plane (http://www.thingiverse.com/thing:1980197) is about 30g and levitate but is quite unstable.

If you make a bigger coil and/or put more amps in it, you could probably levitate more, but don't expect to levitate a real car ;-) !!


Levitating BiPlane (smaller) for Levitator
Levitating biplane for Levitator


Thanks mate i want to print a melinium falcon and habe that levitate.


when I try to upload firmware to arduino nano ,it display :
settings.ino: In function 'void default_settings()':
settings:74: error: 'struct settings_t' has no member named 'coilMin'
settings:75: error: 'struct settings_t' has no member named 'coilMid'
settings:76: error: 'struct settings_t' has no member named 'coilMax'


Did you check out the whole project?
Do you have the following tabs in the arduino editor when you open the project: levitator / config.h / levitator.h / protocol.h / protocol / settings.h / setting ?
If so, check the tab "settings.h"


after switch to arduino 1.8.6 it works
but how to tune the system ?
is there any tuning manual ?

Tuning the system is the hardest part :-(
It's a lot of trial and error.
I'll try to write a tutorial, but basically, here is how I've proceed (be very patient :-) )

Magnets orientation:

  • Connect the levitator host software
  • My levitating magnet south pole is facing up
  • When raising the levitating magnet, the sensor reading should decrease.

  • Add a magnet on top of the coil (on the screw), the north pole facing up

  • Set the magnet thresold value a bit less than the sensor reading when no magnet is present.
  • The levitator should turn active when you put the levitating magnet and turn off after a timeout when you remove it.

  • Set the coil and sensor filter parameters to 2.

Levitation tuning:

  • Put the levitating magnet about 2cm below the coil
  • Set the targetA value about the same as the sensor reading.
  • Set the P value to 2 and the other to 0
  • Send the parameters to the Levitator

  • Increase the P value until the magnet start to levitate and oscillate.
  • Then set the D parameters to about 5 or 10 times the P value
  • Tune the D value until the levitation stabilizes
  • Correct the error (sensor-target) with the I value.

  • You can also tune the filtering parameters to help stabilize the magnet !!!

This is the theory !!!
Be patient as a lot of factors are involved.

Good luck and share your results :-)

thanks a lot , I'll try it later today .

Nice job!
Where are the instructions for winding the coil?


For the coil, just wind the coper wire till the coil is full (approx 140m).
Start by passing the wire on the small hole on the side of the coil (leave enough length out to be able to make the connection).
Then wind the wire as regularly as possible till there is no more room. (I've used a hand drill at very low speed)
Use some tape to hold the wire in place.
I've soldered a 2 pins male JST connector that I've glued on top of the coil for easier connection with the board.

Hope this helps.

I know I should write full instructions. I'll do when I have more time ;-)

hi its amazins. where is the circuit borad and conecctions diagrma? i don't find it.

In the files section, you'll find one named Levitator-gerber.zip, which contains the necessary Gerber files to make the board.
For the connection, refer to the Levitator-schematic.pdf.
Is it what you're looking for? I can provide other file format if necessary.

Let me know if you have difficulties building the levitator.


thanks i can't open format .drl or .gbr files.

Can you tell me what format you'd like?

Hi Tomy,

I've uploaded some pdf files for the board.
Let me know if that's ok for you.

Excellent description and pictures :-) Thanks for sharing!

hi, do you have a gerber file ? thanks !


I've uploaded the gerber files I've used to mill my board. However, I'm far from beeing an electronician, so it may not suit your need.
Let me know if you have questions.