Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

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

Über dieses Projekt

Magnetschwebung mit Arduino. Gehäuse kann 3D-gedruckt werden (optional).

Aufbau auf Lochrasterplatine oder als eigenes Shield (Arduino Nano).

3D-Druckdateien: Thingiverse 1392023

Arduino Nano Magnetschwebung: Teile & Verdrahtungs-Anleitung

Fertiges Shield kaufen: OSH Park

Arduino Nano Magnetschwebung: Teile & Verdrahtungs-Anleitung

Wichtige Hinweise:

Arduino Nano Magnetschwebung: Teile & Verdrahtungs-Anleitung

Weitere Details & Tipps in meinen „Makes“ auf Thingiverse:

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:

Arduino Nano Magnetschwebung: Teile & Verdrahtungs-Anleitung

Herstellungsprozess

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