Skocz do zawartości

AccelStepper, silniki krokowe, przycisk i konduktometry


Tanderer

Pomocna odpowiedź

Witajcie,

Często zaglądam na forum i sporo problemów dzięki temu udało mi się rozwiązać, ale tym razem rozwiązania nie znalazłem. Konstruuję dozownik do podawania płynów. Na dozownik składają się dwie pompy perystaltyczne napędzane silnikami krokowymi. Dodatkowo w wężykach wychodzących z pomp są zainstalowane elektrody do pomiaru przewodności roztworu. Elektrody są połączone z konduktometrami DFRobot Gravity TDS Meter v1.0 (Strona Konduktometru). Silniki krokowe są sterowane za pośrednictwem modułów a4988 przy pomocy biblioteki AccelStepper. Schemat podłączenia przedstawiłem schematycznie na załączonym obrazku (oczywiście z pominięciem zasilań i innych dodatkowych połączeń żeby było bardziej czytelne). Chciałbym żeby całość działała w nastepujący sposób: wciśnięcie przycisku uruchamia całą procedurę i pierwsza pompa zaczyna pompować płyn. Ale płyn pompuje do momentu aż dotrze do elektrod i pierwszy konduktometr zarejestrują jakąś przewodność. W tym momencie następuje przerwa na ustabilizowanie się roztworów. Po tej przerwie druga pompa zaczyna pompować kolejny roztwór i również do momentu, aż roztwór dotrze do kolejnych elektrod i przewodność zostanie wykryta przez drugi konduktometr. Znowu następuje chwila przerwy, po której pompa pierwsza znowu zaczyna pompować pozostałość pierwszego roztworu. I robi to aż wypompuje cały roztwór czyli w wężyku pojawi się samo powietrze, a między elektrodami nie będzie przewodności.

Do tej pory udało mi się zmusić jedną pompę do pracy. Czyli wciskam przycisk, pompa pompuje aż pierwszy konduktometr zarejestruje przewodność. W tym momencie silnik się zatrzymuje. I to działa perfekcyjnie:

#include "AccelStepper.h" 

AccelStepper pompa1(1, 3, 2); //AccelStepper pompa1(1, Step, Direction);
AccelStepper pompa2(1, 5, 4);
int enable = 6;

int przycisk = 7;

int konduktometr1 = A0; 
int konduktometr2 = A1;                    
int val1 = 0;
int val2 = 0;

void setup() {
  Serial.begin(115200);
   
  pinMode(enable, OUTPUT);
  digitalWrite(enable, HIGH); //Wyłączenie zasilania silników krokowych
  
  pinMode(przycisk, INPUT);

  delay(100);
}

void loop() {
  val1 = analogRead(konduktometr1);
  
  if(digitalRead(przycisk) == HIGH) //wciśnięcie przycisku
  {
    digitalWrite(enable, LOW); //włączenie zasilania silników krokowych
    pompa1.setMaxSpeed(15);      
    pompa1.setAcceleration(500);  
    pompa1.move(500);
  }
  
   if(val1 > 2) //jeżeli wartość odczytana na pinie A0 będzie większa od 2 to silnik się zatrzyma
  {
    pompa1.stop();
  }
  
    pompa1.run();
}

 

Niestety, potrafię tak tylko z pojedynczym silnikiem. Nie potrafię dodać takiej procedury dla kolejnego silnika. A próbuję znaleźć rozwiązanie tego problemu już od 2 miesięcy. Może macie pomysł jak to rozwiązać? Ale rad byłbym także z sugestii co mogłoby pomóc lub nawet informacja gdzie mógłbym szukać takiego rozwiązania

Schemat.jpg

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.