Magneet levitatie met Arduino
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
Apps en online services
|
Over dit project
Levitator met Arduino.
Je kunt de body 3D printen of niet.
https://www.thingiverse.com/thing:1392023
- Eenvoudig te printen en te monteren (alleen wat lijm, geen schroeven).
- Installeer gewoon de firmware (Levitator.ino) in het Arduino-bord.
- Je hebt geen computer nodig, alleen de 12V-voeding, nadat je de firmware hebt geïnstalleerd.
- Gebruik de schakelaars om de positie van de permanente magneet aan te passen.
- Gebruik de arduino seriële monitor om de juiste waarde voor u te zien.
- Je kunt de juiste waarde in je speeltje hard coderen.
Je kunt een protoboard gebruiken of je bord maken (Arduino Nano).
http://www.thingiverse.com/thing:1392530
Of koop er gewoon een:
https://oshpark.com/shared_projects/kxH3Ak1b
Let op:
- Plaats de hall-sensor onderaan de tip (top_sensor.stl) zie de afbeeldingen;
- Om correct te werken, moet de hall-effectsensor minimaal 5 mm verwijderd zijn van elektromagnetische velden;
- U kunt andere lineaire hall-sensoren . gebruiken (gebruik geen halsensorschakelaar );
- Gebruik neodymium permanente magneten (het werkt niet met gewone magneten);
- Zware objecten zijn stabieler;
Bekijk mijn merken in de Thingiverse voor meer details en tips.
Levitator 3D geprint:
https://www.thingiverse.com/make:201394
Schild voor Arduino Nano:
https://www.thingiverse.com/make:201420
Dat is makkelijk.
Code
- Levitator.ino
- Levitator_PID.ino
Levitator.inoArduino
Code voor Magnet Levitation-speelgoed met Arduino.Eenvoudig (geen PID)
//=========================================================|// Ekobots Innovation Ltda - www.ekobots.com.br |// Juan Sirgado y Antico - www.jsya.com.br |//- -------------------------------------------------- ------|// Programma Magnetische Levitator - 2016/02/06 |// Alle rechten voorbehouden 2016 |//=========================================================|int anaPin =1; // Arduino Analoge Pin 1;int digPin =5; // Arduino digitale pin 5;int subPin =7; // Arduino digitale pin 7;int addPin =8; // Arduino digitale pin 8;//int anaVal =0; // Analoge Lezen (Hall Sensor) Waarde; booleaanse digVal =0; // Digitale schrijfwaarde (elektromagneet);//int levVal =228; // Levitatie Poit-waarde; int dlyVal =250; // Vertragingswaarde microseconden;//----------------------------------------- ----------------|void setup(){ // Levitator initialisatie Begin; Serieel.begin(57600); Serial.println ("Levitator door JSyA"); Serial.println("Begint..."); // Digitale pinnen Werkmodus instellen; pinMode (digPin, UITGANG); pinMode (subPin, INPUT_PULLUP); pinMode (addPin, INPUT_PULLUP); // Levitator initialisatie Einde; Serial.println ("Gestart.");}//------------------------------------- --------------------|void loop() {// Hall Sensor Read (magnetische veldintensiteit); anaVal =analogRead (anaPin); // Verhoog de waarde van het levitatiepunt; if (digitalRead (addPin) ==LAAG) { levVal++; waarde_log(); vertraging (250); } // Verlaag de waarde van het levitatiepunt; if (digitalRead (subPin) ==LAAG) { levVal--; waarde_log(); vertraging (250); } // Controleer het levitatiepunt; if (anaVallevVal) { digVal =HOOG; } // // Zet de elektromagneet AAN/UIT; // Met Base on Sensor Value en het levitatiepunt; digitalWrite(digPin, digVal); vertraging Microseconden (dlyVal);}//------------------------------------------ ---------------|void value_log()// Analoge/digitale/levitatiewaarden Afdrukken; {// Toon de Hall-sensorwaarde; Serial.print("anaVal=["); Serial.print(anaVal); Serial.print("]-"); // Toon de Elektromagneet staat On=1/Off=0; Serial.print("digVal=["); Serial.print(digVal); Serial.print("]-"); // Toon de levitatiepuntwaarde; Serial.print("levVal=["); Serial.print(levVal); Serial.println("];");}//=========================================================|
Levitator_PID.inoArduino
Code voor Magnet Levitation-speelgoed met Arduino.Hard (PID-versie)
//=========================================================|// Ekobots Innovation Ltda - www.ekobots.com.br |// Juan Sirgado y Antico - www.jsya.com.br |//- -------------------------------------------------- ------|// Programma Magnetische Levitator PID - 2016/10/06 |// Alle rechten voorbehouden 2016 |//=========================================================|int anaPin =1; // Arduino Analoge Pin 1int digPin =5; // Arduino digitale pin 5int subPin =7; // Arduino digitale pin 7int addPin =8; // Arduino digitale pin 8//int anaVal =0; // Analoge Valieint digVal =0; // Digitale waarde//int levVal =262; // Levitatie Valueint dlyVal =10; // Vertragingswaarde//float timVal =0; // Tijdswaarde//-------------------------------------------- -------------|// PID Valuesfloat setpoint =0;float meetwaarde =0;float output =0;float integraal =0;float derivaat =0;float error =0;float vorige_error =0;float dt =0.1;float Kp =1.0;float Ki =0.1;float Kd =0.01;//-------------------------- -------------------------------|void setup(){ // Levitator initialisatie Begin; Serieel.begin(57600); Serial.println ("Levitator door JSyA"); Serial.println("Begint..."); // Digitale pinnen Werkmodus instellen; pinMode (digPin, UITGANG); pinMode (addPin, INPUT_PULLUP); pinMode (subPin, INPUT_PULLUP); // timVal =millis(); instelpunt =levVal; // Levitator initialisatie Einde; Serial.println ("Gestart.");}//------------------------------------- --------------------|void loop () // PID { // Hall Sensor Read (magnetische veldintensiteit); anaVal =analogRead (anaPin); // PID-berekeningen gemeten_waarde =anaVal; fout =setpoint - gemeten_waarde; integraal =integraal + fout * dt; afgeleide =(fout - vorige_fout) / dt; output =(-Kp * fout) + (-Ki * integraal) + (-Kd * afgeleide); previous_error =fout; // Eindwaarde instelling digVal +=uitgang; // Controleer de waarde voor het levitatiepunt; als (digVal <0) digVal=0; als (digVal> 255) digVal=255; // Verhoog/verlaag de waarde voor Elektromagneet; // Met Base on Sensor Value en het levitatiepunt; analogWrite(digPin, digVal); // Toon logwaarden voor debug;// if((millis()-timVal)> 500)// {// value_log();// timVal =millis();// } // Verhoog de waarde van levitatiepunt; if (digitalRead (addPin) ==LAAG) {instelpunt ++; waarde_log(); vertraging (250); } if (digitalRead (subPin) ==LAAG) { setpoint--; waarde_log(); vertraging (250); } // Tijd tussen veranderingen in elektromagneettoestand; vertraging Microseconden (dlyVal);}//------------------------------------------ ---------------|void value_log()// Analoge/digitale/levitatiewaarden Afdrukken; {// Toon de Hall-sensorwaarde; Serial.print("anaVal=["); Serial.print(anaVal); Serial.print("]-"); // Toon de Elektromagneet staat On=1/Off=0; Serial.print("digVal=["); Serial.print(digVal); Serial.print("]-"); // Toon de levitatiepuntwaarde; Serial.print("setpoint=["); Seriële.afdruk (instelpunt); Serial.println("];");}//=========================================================|
Schema's
Fritsende IDEProductieproces
- DIY eenvoudigste IV9 Numitron-klok met Arduino
- CO2-monitoring met K30-sensor
- Doofblinde communicatie met 1Sheeld/Arduino
- Bedien muntvangers met Arduino
- Arduino met Bluetooth om een LED te bedienen!
- Capacitieve vingerafdruksensor met een Arduino of ESP8266
- Spelen met Nextion Display
- Nunchuk-gestuurde robotarm (met Arduino)
- Arduino afstotende elektromagnetische levitatie
- Zonnestraling meten met Arduino
- Mini-radar met Arduino