Arduino Nano Magnetschwebung: Teile & Verdrahtungs-Anleitung
Komponenten und Zubehör
| Bauteil | Menge | Hinweis |
|---|---|---|
| Arduino Nano R3 | 1 | Jeder Arduino möglich, Shield ist für Nano ausgelegt. |
| Elektromagnet 12V, 25 mm Durchmesser | 1 | |
| Linearer Hall-Effekt-Sensor 49E | 1 | Kein Hall-Schalter (Digital) verwenden! |
| Darlington-Leistungstransistor TIP120 | 1 | |
| Widerstand 1 kΩ | 1 | |
| Diode 1N4007 (High Voltage/Current) | 1 | Freilaufdiode für Elektromagnet |
| Netzteil 12V 1A | 1 | |
| Breadboard (generisch) | 1 | |
| Taster 12mm (SparkFun) | 2 | Für Feineinstellung der Schwebeposition |
| Jumper-Kabel (generisch) | 1 |
Apps und Online-Dienste
- Arduino IDE
Über dieses Projekt
Magnetschwebung mit Arduino. Gehäuse kann 3D-gedruckt werden (optional).
- Einfach zu drucken & montieren (nur Kleber, keine Schrauben).
- Firmware (
Levitator.ino) auf Arduino flashen. - Kein PC nötig im Betrieb – nur 12V Netzteil nach Flashen.
- Taster zur Feineinstellung der Permanentmagnet-Position.
- Arduino Serial Monitor zeigt korrekten Wert für die Einstellung.
- Ermittelter Wert kann fest im Code hinterlegt werden.
Aufbau auf Lochrasterplatine oder als eigenes Shield (Arduino Nano).
3D-Druckdateien: Thingiverse 1392023

Fertiges Shield kaufen: OSH Park

Wichtige Hinweise:
- Hall-Sensor in die Spitze des oberen Teils (
top_sensor.stl) einbauen – siehe Bilder. - Hall-Sensor muss mindestens 5 mm vom Elektromagneten entfernt sein.
- Andere lineare Hall-Sensoren möglich (keine digitalen Hall-Schalter!).
- Neodym-Permanentmagnete verwenden (normale Magnete funktionieren nicht!).
- Schwere Objekte schweben stabiler.

Weitere Details & Tipps in meinen „Makes“ auf Thingiverse:
- Levitator 3D-gedruckt: Make 201394
- Shield für Arduino Nano: Make 201420
Code
Levitator.ino – Einfache Version (ohne PID)
//=========================================================|
// Ekobots Innovation Ltda - www.ekobots.com.br |
// Juan Sirgado y Antico - www.jsya.com.br |
//---------------------------------------------------------|
// Program Magnetic Levitator - 2016/02/06 |
// All rights reserved 2016 |
//=========================================================|
int anaPin = 1; // Analog Pin A1 (Hall-Sensor)
int digPin = 5; // Digital Pin 5 (Elektromagnet via TIP120)
int subPin = 7; // Digital Pin 7 (Taster: Wert verringern)
int addPin = 8; // Digital Pin 8 (Taster: Wert erhöhen)
int anaVal = 0; // Analogwert Hall-Sensor
boolean digVal = 0; // Digitalwert Elektromagnet
int levVal = 228; // Schwebepunkt-Wert (einzustellen!)
int dlyVal = 250; // Delay Mikrosekunden
void setup() {
Serial.begin(57600);
Serial.println("Levitator by JSyA");
Serial.println("Starting...");
pinMode(digPin, OUTPUT);
pinMode(subPin, INPUT_PULLUP);
pinMode(addPin, INPUT_PULLUP);
Serial.println("Started.");
}
void loop() {
// Hall-Sensor lesen (Magnetfeldstärke)
anaVal = analogRead(anaPin);
// Schwebepunkt erhöhen
if (digitalRead(addPin) == LOW) {
levVal++;
value_log();
delay(250);
}
// Schwebepunkt verringern
if (digitalRead(subPin) == LOW) {
levVal--;
value_log();
delay(250);
}
// Vergleich: Sensorwert vs. Schwebepunkt
if (anaVal < levVal) {
digVal = LOW; // Elektromagnet AN (Magnetfeld aufbauen)
} else {
digVal = HIGH; // Elektromagnet AUS (Feld abbauen)
}
// Elektromagnet schalten
digitalWrite(digPin, digVal);
delayMicroseconds(dlyVal);
}
void value_log() {
Serial.print("anaVal=["); Serial.print(anaVal); Serial.print("]-");
Serial.print("digVal=["); Serial.print(digVal); Serial.print("]-");
Serial.print("levVal=["); Serial.print(levVal); Serial.println("];");
}
//=========================================================|
Levitator_PID.ino – PID-Version (fortgeschritten)
//=========================================================|
// Ekobots Innovation Ltda - www.ekobots.com.br |
// Juan Sirgado y Antico - www.jsya.com.br |
//---------------------------------------------------------|
// Program Magnetic Levitator PID - 2016/10/06 |
// All rights reserved 2016 |
//=========================================================|
int anaPin = 1;
int digPin = 5;
int subPin = 7;
int addPin = 8;
int anaVal = 0;
int digVal = 0;
int levVal = 262;
int dlyVal = 10;
float timVal = 0;
// PID-Parameter
float setpoint = 0;
float measured_value = 0;
float output = 0;
float integral = 0;
float derivative = 0;
float error = 0;
float previous_error = 0;
float dt = 0.1;
float Kp = 1.0;
float Ki = 0.1;
float Kd = 0.01;
void setup() {
Serial.begin(57600);
Serial.println("Levitator by JSyA");
Serial.println("Starting...");
pinMode(digPin, OUTPUT);
pinMode(addPin, INPUT_PULLUP);
pinMode(subPin, INPUT_PULLUP);
setpoint = levVal;
Serial.println("Started.");
}
void loop() {
anaVal = analogRead(anaPin);
// PID-Berechnung
measured_value = anaVal;
error = setpoint - measured_value;
integral += error * dt;
derivative = (error - previous_error) / dt;
output = (-Kp * error) + (-Ki * integral) + (-Kd * derivative);
previous_error = error;
// PWM-Wert für Elektromagnet (0-255)
digVal += output;
if (digVal < 0) digVal = 0;
if (digVal > 255) digVal = 255;
analogWrite(digPin, digVal);
// Debug-Log alle 500ms (auskommentiert)
// if ((millis() - timVal) > 500) { value_log(); timVal = millis(); }
// Schwebepunkt per Taster ändern
if (digitalRead(addPin) == LOW) {
setpoint++;
value_log();
delay(250);
}
if (digitalRead(subPin) == LOW) {
setpoint--;
value_log();
delay(250);
}
delayMicroseconds(dlyVal);
}
void value_log() {
Serial.print("anaVal=["); Serial.print(anaVal); Serial.print("]-");
Serial.print("digVal=["); Serial.print(digVal); Serial.print("]-");
Serial.print("setpoint=["); Serial.print(setpoint); Serial.println("];");
}
//=========================================================|
Schaltpläne
Erstellt mit Fritzing:

Herstellungsprozess
- Retro-Numitron-Uhr mit Arduino bauen: Einfach, zuverlässig & energieeffizient
- K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
- Kommunikationshilfe für Taubblinde: 1Sheeld + Arduino + Sprachausgabe & Anzeige
- Smartes Sparschwein: Münzprüfer mit Arduino Nano steuern
- LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
- DFRobot Kapazitiver Fingerabdrucksensor mit Arduino oder ESP8266 einbinden
- Interaktives Nextion HMI Projekt mit Arduino Mega und Sensoren
- Arduino-basierter 6-DoF Roboterarm mit Nunchuk-Steuerung
- Arduino-basierte abstoßende Magnetschwebung: Einfache Schaltung & DIY-Anleitung
- Präzise Solareinstrahlungsmessung mit Arduino UNO & Ethernet Shield