• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Lewitacja Magnetyczn
#1
Witam,

Chcę zrobić lewitacje magnetyczną na arduino.
Mam elektromagnes P20-15 6V 0.5A i czujnika hala AH49E(nota katalogowa w załączniku).
Elektromagnes steruje za pomocą mosfeta IRF520N (nota katalogowa w załączniku).
Magnesy które mają lewitować to 5 połączonych neodymów (6mm x 3mm  https://botland.com.pl/magnesy-tradycyjn...-5szt.html)
Chciałbym zastosować tu algorytm PID, ale nie wiem jak się do tego zabrać (nie wiem jakie wartości kp , ki , kd oraz setpionta dobrać).

Na internecie znalazłem taki oto kod:

Kod:
int anaPin = A1;   // Arduino Analogic 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;   // Analogic Valie
int digVal = 0;   // Digital Value
//
int levVal = 265; // Levitation Value
int dlyVal = 10;  // Delay Value
//
float timVal = 0; // Time Value
//---------------------------------------------------------|
// PID Values
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()
{
  // Levitator initialization Begin;
  Serial.begin(57600);
  Serial.println("Levitator by JSyA");
  Serial.println("Starting...");
  // Digital Pins Work Mode Setup;
  pinMode(digPin, OUTPUT);
  pinMode(addPin, INPUT_PULLUP);
  pinMode(subPin, INPUT_PULLUP);
  //
  timVal = millis();
  setpoint = levVal;
  // Levitator initialization End;
  Serial.println("Started.");
}
//---------------------------------------------------------|
void loop() // PID
{
  // Hall Sensor Read (Magnetic Field Intensity);
  anaVal = analogRead(anaPin);
  // PID calculations
  measured_value = anaVal;
  error = setpoint - measured_value;
  integral = integral + error * dt;
  derivative = (error - previous_error) / dt;
  output = (-Kp * error) + (-Ki * integral) + (-Kd * derivative);
  previous_error = error;
  // Final value setup
  digVal += output;
  // Check the value for levitation point;
  if (digVal < 0) digVal=0;
  if (digVal > 255) digVal=255;
  // Increase/Decrease the value for Electromagnet;
  // With Base on Sensor Value and the Levitation Point;
  analogWrite(digPin, digVal);
  // Show log values for debug;
//   if((millis()-timVal) > 500)
//   {
//      value_log();
//      timVal = millis();
//   }
  // Increase The Value Of Levitation Point;
  if (digitalRead(addPin) == LOW)
  {
     setpoint++;
     
     delay(250);
  }
  if (digitalRead(subPin) == LOW)
  {
     setpoint--;
     
     delay(250);
  }
  value_log();
  // Time between electromagnet state changes;
  delayMicroseconds(dlyVal);
}
//---------------------------------------------------------|
void value_log()
// Analogic/Digital/Levitation Values Print;
{
  // Show the Hall Sensor Value;
  Serial.print("anaVal=[");
  Serial.print(anaVal);
  Serial.print("]-");
  // Show the Electromagnet state On=1/Off=0;
  Serial.print("digVal=[");
  Serial.print(digVal);
  Serial.print("]-");
  // Show the Levitation Point Value;
  Serial.print("setpoint=[");
  Serial.print(setpoint);
  Serial.println("];");
}
https://create.arduino.cc/projecthub/jsi...ino-eeeee4

Czy to w ogolę będzie działać i co zrobić by działało?
(Załączam kilka zdjęć)

Proszę o pomoc!

Mateusz


Załączone pliki Miniatury
           

.pdf   AH49E.pdf (Rozmiar: 133.13 KB / Pobrań: 1)
.pdf   MOSFET_IRF520N_100V_9.7A_200mO_Vth4.0_TO-220.pdf (Rozmiar: 122 KB / Pobrań: 0)
 
Odpowiedź
#2
Jakby Ci się nie chciało wymyślać koła od nowa: https://www.youtube.com/watch?v=g72RFVQ33zw jest opis PL to pewnie zrozumiesz, a na drugą nóżkę: https://www.youtube.com/watch?v=12yZ4oeOFWk .
 
Odpowiedź
#3
Pierwszy filmik widziałem wcześniejszej - nie działa , a co do drugiego tam są aż 4 elektromagnesy.
 
Odpowiedź
#4
Kupiłem sobie kilka zestawów tych elektromagnesów do bonsai, ale czujniki mi jeszcze nie doszły. Może ktoś w międzyczasie tu zajrzy z pomysłem, najwyżej zajrzyj za jakiś tydzień, zacznę zabawę od tego kapsla. To że Ci nie zadziało od strzału to nic dziwnego, trzeba obserwować co się dzieje i wiedzieć które parametry zmieniać. Tu gość na kanale robi różne cuda ale na lewitacji poległ: https://www.youtube.com/watch?v=BgIjlvlwwzY , https://www.youtube.com/watch?v=1pKJ-KcHZ8g .
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości