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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.