Magnetschweben mit Arduino
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
Apps und Onlinedienste
|
Über dieses Projekt
Levitator mit Arduino.
Sie können den Körper in 3D drucken oder nicht.
https://www.thingiverse.com/thing:1392023
- Einfach zu drucken und zu montieren (nur etwas Kleber, keine Schrauben).
- Installieren Sie einfach die Firmware (Levitator.ino) auf dem Arduino-Board.
- Benötige keinen Computer, nur die 12-V-Stromversorgung, nachdem die Firmware installiert wurde.
- Verwenden Sie die Schalter, um die Position des Permanentmagneten einzustellen.
- Verwenden Sie den seriellen Arduino-Monitor, um den richtigen Wert für Sie zu sehen.
- Du kannst den richtigen Wert in deinem Spielzeug fest codieren.
Sie können ein Protoboard verwenden oder Ihr Board herstellen (Arduino Nano).
http://www.thingiverse.com/thing:1392530
Oder kaufen Sie einfach einen:
https://oshpark.com/shared_projects/kxH3Ak1b
Achtung:
- Setzen Sie den Hall-Sensor unten in die Spitze (top_sensor.stl) sehen Sie die Bilder;
- Um korrekt zu funktionieren, muss der Hall-Effekt-Sensor mindestens 5 mm von elektromagnetischen Geräten entfernt sein.
- Sie können andere lineare Hallsensoren verwenden (verwenden Sie keinen Hallsensorschalter );
- Neodym-Dauermagnete verwenden (es funktioniert nicht mit gewöhnlichen Magneten);
- Schwere Gegenstände sind stabiler;
Siehe meine Marken im Thingiverse für weitere Details und Tipps.
Levitator 3D gedruckt:
https://www.thingiverse.com/make:201394
Schild für Arduino Nano:
https://www.thingiverse.com/make:201420
Das ist ganz einfach.
Code
- Levitator.ino
- Levitator_PID.ino
Levitator.inoArduino
Code für Magnetschwebespielzeug mit Arduino.Einfach(Keine PID)
//========================================================|// Ekobots Innovation Ltda - www.ekobots.com.br |// Juan Sirgado y Antico - www.jsya.com.br |//- -------------------------------------------------- ------|// Program Magnetic Levitator - 2016/02/06 |// Alle Rechte vorbehalten 2016 |//========================================================|int anaPin =1; // Arduino analoger Pin 1;int digPin =5; // Arduino Digital Pin 5;int subPin =7; // Arduino Digital Pin 7;int addPin =8; // Arduino Digital Pin 8; //int anaVal =0; // Analoger Read (Hall Sensor) Value; boolean digVal =0; // Digitaler Schreibwert (Elektromagnet) //int levVal =228; // Schwebepunktwert;int dlyVal =250; // Verzögerungswert Mikrosekunden; //----------------------------------------- ----------------|void setup(){ // Levitator-Initialisierung Begin; Serial.begin (57600); Serial.println ("Levitator von JSyA"); Serial.println("Startet..."); // Einrichtung des Arbeitsmodus für digitale Pins; pinMode (digPin, AUSGANG); pinMode (subPin, INPUT_PULLUP); pinMode (addPin, INPUT_PULLUP); // Initialisierung des Levitators End; Serial.println("Gestartet.");}//------------------------------------- --------------------|void loop () {// Hall Sensor Read (Magnetic Field Intensity); anaVal =analogRead (anaPin); // Erhöhen Sie den Wert des Schwebepunktes; if (digitalRead (addPin) ==LOW) { levVal++; value_log(); Verzögerung (250); } // Wert des Schwebepunktes verringern; if (digitalRead (subPin) ==LOW) { levVal--; value_log(); Verzögerung (250); } // Überprüfen Sie den Schwebepunkt; if (anaVallevVal) { digVal =HIGH; } // // Schalten Sie den Elektromagneten ein / aus; // Mit Basis auf Sensorwert und Levitationspunkt; digitalWrite (digPin, digVal); delayMicroseconds(dlyVal);}//----------------------------------------------------- ---------------|void value_log() // Analoge/Digitale/Levitationswerte Print;{// Zeigen Sie den Hall-Sensorwert an; Serial.print("anaVal=["); Serial.print (anaVal); Serial.print("]-"); // Zeigen Sie den Elektromagnet-Zustand an =1 / Aus =0; Serial.print("digVal=["); Serial.print (digVal); Serial.print("]-"); // Zeige den Schwebepunktwert; Serial.print("levVal=["); Serial.print (levVal); Serial.println("];");}//=======================================================|
Levitator_PID.inoArduino
Code für Magnetschwebespielzeug mit Arduino.Hard(PID-Version)
//========================================================|// Ekobots Innovation Ltda - www.ekobots.com.br |// Juan Sirgado y Antico - www.jsya.com.br |//- -------------------------------------------------- ------|// Program Magnetic Levitator PID - 2016/10/06 |// Alle Rechte vorbehalten 2016 |//=========================================================|int anaPin =1; // Arduino analoger Pin 1int digPin =5; // Arduino Digital Pin 5int subPin =7; // Arduino Digital Pin 7int addPin =8; // Arduino Digital Pin 8 // Int anaVal =0; // Analoges Valieint digVal =0; // Digitalwert //int levVal =262; // Schwebewertint dlyVal =10; // Verzögerungswert // Float timVal =0; // Zeitwert//-------------------------------------------- -------------|// PID-Wertefloat setpoint =0;float gemessener_wert =0;float Ausgang =0;float Integral =0;float Derivat =0;float Fehler =0;float vorheriger_Fehler =0;float dt =0,1;float Kp =1,0;float Ki =0,1;float Kd =0,01;//------------------------- ------------------------------------------|void setup(){ // Levitator-Initialisierung Begin; Serial.begin (57600); Serial.println ("Levitator von JSyA"); Serial.println("Startet..."); // Einrichtung des Arbeitsmodus für digitale Pins; pinMode (digPin, AUSGANG); pinMode (addPin, INPUT_PULLUP); pinMode (subPin, INPUT_PULLUP); // timVal =millis(); Sollwert =levVal; // Initialisierung des Levitators End; Serial.println("Gestartet.");}//------------------------------------- --------------------|void loop () // PID { // Hall Sensor Read (Magnetic Field Intensity); anaVal =analogRead (anaPin); // PID-Berechnungen measure_value =anaVal; Fehler =Sollwert - Messwert_Wert; Integral =Integral + Fehler * dt; Ableitung =(Fehler - vorheriger_Fehler) / dt; Ausgabe =(-Kp * Fehler) + (-Ki * Integral) + (-Kd * Ableitung); vorheriger_Fehler =Fehler; // Endwerteinstellung digVal +=Ausgabe; // Überprüfen Sie den Wert für den Schwebepunkt; if (digVal <0) digVal=0; if (digVal> 255) digVal=255; // Wert für Elektromagnet erhöhen/verringern; // Mit Basis auf Sensorwert und Levitationspunkt; analogWrite (digPin, digVal); // Log-Werte für Debug anzeigen;// if((millis()-timVal)> 500)// {// value_log();// timVal =millis();// } // Erhöhen Sie den Wert des Schwebepunkts; if (digitalRead (addPin) ==LOW) { setpoint++; value_log(); Verzögerung (250); aufrechtzuerhalten. Wenn (digitalRead (subPin) ==LOW) {Sollwert--; value_log(); Verzögerung (250); } // Zeit zwischen den Zustandsänderungen des Elektromagneten; delayMicroseconds(dlyVal);}//----------------------------------------------------- ---------------|void value_log() // Analoge/Digitale/Levitationswerte Print;{// Zeigen Sie den Hall-Sensorwert an; Serial.print("anaVal=["); Serial.print (anaVal); Serial.print("]-"); // Zeigen Sie den Elektromagnet-Zustand an =1 / Aus =0; Serial.print("digVal=["); Serial.print (digVal); Serial.print("]-"); // Zeige den Schwebepunktwert; Serial.print("Sollwert=["); Serial.print (Sollwert); Serial.println("];");}//=======================================================|
Schaltpläne
Fritzing-IDEHerstellungsprozess
- DIY einfachste IV9 Numitron-Uhr mit Arduino
- CO2-Überwachung mit K30-Sensor
- taubblinde Kommunikation mit 1Sheeld/Arduino
- Münzprüfer mit Arduino steuern
- Arduino mit Bluetooth zur Steuerung einer LED!
- Kapazitiver Fingerabdrucksensor mit einem Arduino oder ESP8266
- Mit Nextion Display spielen
- Nunchuk-gesteuerter Roboterarm (mit Arduino)
- Arduino Repulsive Electromagnetic Levitation
- Messung der Sonneneinstrahlung mit Arduino