Tanderer Napisano Październik 4, 2021 Udostępnij Napisano Październik 4, 2021 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 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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ę »