Mariusz62 Napisano Październik 13, 2021 Udostępnij Napisano Październik 13, 2021 (edytowany) Witam wszystkich maniaków arduino do tej pory z prostymi układami jakoś sobie radziłem ale projekt który chciałem uruchomić przerósł moją wiedzę.Problem w tym że muszę napisać kod do urządzenia które składa się 3 przycisków chwilowych i 9 pomp membranowych. Każdy z przycisków ma uruchamiać po koleji 3 pompy przez określony czas np.3 sek i tak wciskam SW1 i uruchamia mi się pompa1 na 3sek pompa2 na 4sek i pompa3 na 3sek i tak z następnymi przyciskami SW2 i P4 3sek P5 5sek i P6 na 3sek. SW3 P7 P8 i P9 Oczywiście pompy załączane są przez moduł przekazników Wejscia przycisków w Arduino to 2-3-4 a wyjscia do przekazników to piny 5-6-7-8-9-10-11-12-13- PLEASE o pomoc Edytowano Październik 13, 2021 przez Mariusz62 Link do komentarza Share on other sites More sharing options...
farmaceuta Październik 13, 2021 Udostępnij Październik 13, 2021 Te czasy maja byc stale czy chcesz je jakos zmieniac?? Link do komentarza Share on other sites More sharing options...
H1M4W4R1 Październik 13, 2021 Udostępnij Październik 13, 2021 // Tryb przycisku (INPUT PULLUP lub INPUT) #define BUTTON_MODE INPUT_PULLUP // Standardowe ustawienie pomp #define DEFAULT_PUMP_STATE LOW /* Przyciski */ uint8_t buttons[] = {2,3,4}; bool isButtonPressed[] = {false, false, false}; /* Pompy */ uint8_t pumps[] = {5, 6, 7, 8, 9, 10, 11, 12, 13}; int times[] = {3000, 4000, 3000, 3000, 4000, 3000, 3000, 4000, 3000}; /* Ustawienia aplikacji */ void setup() { // UART ;) Serial.begin(115200); // Inicjacja przycisków for(int q = 0; q < sizeof(buttons)/sizeof(buttons[0]); q++) pinMode(buttons[q], BUTTON_MODE); Serial.println("Inicjacja przycisków zakończona"); // Inicjacja pomp for(int q = 0; q < sizeof(pumps)/sizeof(pumps[0]); q++) { pinMode(pumps[q], OUTPUT); digitalWrite(pumps[q], DEFAULT_PUMP_STATE); } Serial.println("Inicjacja pomp zakończona"); } /* Wykonaj operację pompy przez określony czas */ void executePump(int id, int time_ms) { // Włącz pompę digitalWrite(pumps[id], DEFAULT_PUMP_STATE == LOW ? HIGH : LOW); // Odczekaj pewien czas delay(time_ms); // Wyłącz pompę digitalWrite(pumps[id], DEFAULT_PUMP_STATE); } /* Wykonywane po wciśnięciu przycisku */ void onButtonPressed(int button) // button - id przycisku (0,1,2) { int pumpId = button * 3; executePump(pumpId, times[pumpId]); executePump(pumpId + 1, times[pumpId + 1]); executePump(pumpId + 2, times[pumpId + 2]); } void loop() { // Sprawdź czy któryś z przycisków został wciśnięty for(int q = 0; q < sizeof(buttons)/sizeof(buttons[0]); q++) { // Sprawdź czy przycisk jest wciśnięty if(digitalRead(buttons[q]) == LOW) { // Przycisk jest wciśnięty // Jeżeli nie był wciśnięty wykonaj zdarzenie informujące o wciśnięciu przycisku if(!isButtonPressed[q]) onButtonPressed(q); // Zmień status isButtonPressed[q] = true; } else { // Przycisk nie jest wciśnięty, zmień status isButtonPressed[q] = false; } } } Pisane na kolanie, ale masz wzór do rozpoczęcia pracy. Nie testowałem, więc nie wiem czy działa, ale teoretycznie powinno... (teoretycznie) Rzeczy do poprawienia: Zamiana delay() na millis() Przetestowanie na płytce. Link do komentarza Share on other sites More sharing options...
Mariusz62 Październik 14, 2021 Autor tematu Udostępnij Październik 14, 2021 (edytowany) dzieki za zainteresowanie tematem przyciski jako INPUT dobrze by było aby można było podstawić inny czas aby pompa nalała raz 60ml a innym razem 50ml ustawiając czas mogę regulować ilość przepompowanej cieczy. po wgraniu bez podłączenia pomp przekazniki chodzą tak jak powinny pozniej podłaacze pompy i sprawdzę jak z pompami na ten czas to PERFECT Czyli regulując int times ustalam czas pracy pompy🙂 Podłaczyłem pod przekazniki pompy i układ zaczął wariować włącza 1 za chwilę 2 i 3 pompę i tak w kółko bez obciązenia chodzi idealnie to schemat układu Edytowano Październik 14, 2021 przez Mariusz62 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
H1M4W4R1 Październik 14, 2021 Udostępnij Październik 14, 2021 9 godzin temu, Mariusz62 napisał: Podłaczyłem pod przekazniki pompy i układ zaczął wariować włącza 1 za chwilę 2 i 3 pompę i tak w kółko bez obciązenia chodzi idealnie to schemat układu Widzę, że przyciski masz podciągnięte do masy. W moim kodzie założenie jest takie, że przyciski mają pull-up'y do 5V, więc w momencie wystąpienia stanu niskiego na przycisku aktywują się pompy. Spróbuj poprawić linijkę: if(digitalRead(buttons[q]) == LOW) na if(digitalRead(buttons[q]) == HIGH) O ile tego nie zrobiłeś (ale na to wskazuje zachowanie programu). Jak to nie pomaga to trzeba szukać dalej... Link do komentarza Share on other sites More sharing options...
Mariusz62 Październik 15, 2021 Autor tematu Udostępnij Październik 15, 2021 (edytowany) poprawiłem kod jest ciut lepiej też mu się zdarza że Arduino jakby się resetowało ale myślę że wina może być po stronie zewnętrznego zasilacza Arduino bo jak ma Arduino podłączone tylko pod USB to chodzi dobrze. Też nie do końca bo coś może być z modułem przekazników bo jak wcisnę sw1 to idzie pompa1 potem 2 potem 3 ale jak wcisne sw2 to rusza pompa 4 i potem znowu poma 1 i 2 podmienie moduł przekazników i porównam bo teraz mam blok z 8 i dodatkowo 1 zamienie na 3 odzielne bloki po 3 a ze niem po 3 to dam po 4 trudno Muszę to rozgryżć co jest powodem jak wcisnę 3 przycisk to powinna się właczyć pompa 7 8 i 9 a włacza się 7 i przeskakuje na 1 lub 4 zależy jak mu się chce Edytowano Październik 15, 2021 przez Mariusz62 Link do komentarza Share on other sites More sharing options...
H1M4W4R1 Październik 15, 2021 Udostępnij Październik 15, 2021 8 godzin temu, Mariusz62 napisał: Muszę to rozgryżć co jest powodem jak wcisnę 3 przycisk to powinna się właczyć pompa 7 8 i 9 a włacza się 7 i przeskakuje na 1 lub 4 zależy jak mu się chce Może być coś w kodzie, dorób sobie "logging" zmiennych do seriala i przetestuj, może wyjdzie, że któraś wartość jest nadpisywana w locie... To jedyne co mi przychodzi na myśl... Link do komentarza Share on other sites More sharing options...
Belferek Październik 15, 2021 Udostępnij Październik 15, 2021 Jesteś pewien, że nie potrzebujesz połączonych mas (GND) swoich modułów? Link do komentarza Share on other sites More sharing options...
farmaceuta Październik 15, 2021 Udostępnij Październik 15, 2021 Jak te przekazniki zasilasz z ardu to byc moze to powoduje reset...dla ulatwienia zrob sobie prosta petle for gdzie bedziesz przelaczal po kolei te przekazniki co sekunde powiedzmy...i bedzie wiadomo czy uklad sprawia problem czy gdzies w kodzie jest malutki blad... Link do komentarza Share on other sites More sharing options...
Mariusz62 Październik 16, 2021 Autor tematu Udostępnij Październik 16, 2021 wszystkie masy GND są wspólne oprócz zasilania pomp czyli moduł przekaźników zasilany jest z Arduino kod jak zasilacz pompy jest odłaczony a moduł zasilany jest z Arduino to wszystko gra Spróbuję dać dodatkowy zasilacz tylko dla modułu przekazników i zobacze jaki jest efekt. Link do komentarza Share on other sites More sharing options...
Belferek Październik 16, 2021 Udostępnij Październik 16, 2021 (edytowany) Napisz coś więcej o tym module. Pokaż jego schemat i schemat podłączenia do Arduino. Przekaźniki (ich cewki) to z reguły "stosunkowo duże obciążenie" i warto przewidzieć dla nich oddzielne zasilanie, tym bardziej że masz ich 9. To przekaźniki 5V czy 12V? Zailasz je z +5V czy z Vin Arudino? A jak zasilasz Arduino? Edytowano Październik 16, 2021 przez Belferek Link do komentarza Share on other sites More sharing options...
_LM_ Październik 16, 2021 Udostępnij Październik 16, 2021 Nie wiem jak tam jest w ardu domyślnie zrobione, więc przyczyną może być ustawiony fusebit bodlevel na 4.8V co już przy minimalnym spadku napięcia zasilania spowoduje reset mikrokontrolera, przestawienie tego bitu( o ile jest tak jak myślę - 4.8V) powinno poprawić sytuację aczkolwiek nie jest rozwiązaniem problemu. Link do komentarza Share on other sites More sharing options...
Mariusz62 Październik 18, 2021 Autor tematu Udostępnij Październik 18, 2021 Moduł standartowy do Arduino zasilany 5v zasilane było z Arduino GND i +5V a arduino zasilam odzielnym zasilaczem 12V Link do komentarza Share on other sites More sharing options...
Belferek Październik 18, 2021 Udostępnij Październik 18, 2021 (edytowany) Nie ma czegoś takiego jak "standardowy" moduł. Jeśli chodzi o moduły przekaźników to znajdziesz takie z przekaźnikami np. 5V i inne (wyglądające tak samo) z przekaźnikami 12V. Twoim problemem jest moim zdaniem zasilanie. Wbudowany stabilizator modułu Arduino Uno R3 na pinie +5V daje ci wydajność ok. 500 mA (max.) - to za mało moim zdaniem jak dla 9 przekaźników. Poza tym zasilany z tego pinu moduł przekaźników może być źródłem zakłóceń powodujących wadliwą pracę układu mikrokontrolera. Zmień sposób zasilania. Odczytaj typ przekaźnika z jego obudowy i zajrzyj do jego noty katalogowej. Wtedy będziesz wiedział jakiego zasilacza potrzebujesz. Zasilacz powinien dysponować "zapasem mocy" by uniknąć problemów. Edytowano Październik 18, 2021 przez Belferek Link do komentarza Share on other sites More sharing options...
Mariusz62 Październik 19, 2021 Autor tematu Udostępnij Październik 19, 2021 Dzieki Tak zrobię tylko czekam na dostawę zasilaczy Pozdrawiam dam znać jak wszystko uruchomię🙂 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ę »