logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Arduino: sterowanie i zatrzymanie ruchomego łoża stołu za pomocą end stopa

piotrkrakow 03 Paź 2020 21:59 993 14
  • #1 18957456
    piotrkrakow
    Poziom 9  
    Posty: 18
    Ocena: 3
    Witam
    Mam mały problem z zatrzymaniem silnika w odpowiednim momencie
    Stół z ruchomym łożem - jedzie do punktu 0
    potem odwraca kierunek i jedzie w drugą stronę.
    potrzebuje zatrzymać w odpowiednim momencie end stopem
    ten end stop będzie za każdym razem w innym miejscu.
    Potem ma powrócić do zerowego punktu i tak za każdym razem
    Może będzie dobry człowiek i podpowie jak to dokleić do kodu.
  • #2 18957721
    Slawek K.
    Poziom 35  
    Posty: 3020
    Pomógł: 259
    Ocena: 1302
    A do czego doklieić jak nic nie pkazałeś ?
    I nie wiadomo jaki dokładnie masz problem z zatrzymaniem, bo go nie opisałeś..

    Pozdr
  • #3 18959223
    piotrkrakow
    Poziom 9  
    Posty: 18
    Ocena: 3
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    [/code]

    Dodano po 2 [minuty]:

    Chodzi mi o zatrzymanie w odpowiednim miejscu łoza z załączonego filmu
    za każdym razem może być inne położenie end stop. Zerowanie zostaje zawsze w stałym położeniu.
    Załączniki:
    • MOV_0226.mp4 (27.22 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #4 18961804
    ekrzychoooo

    Poziom 17  
    Posty: 280
    Pomógł: 24
    Ocena: 73
    Powiedz co u Ciebie oznacza termin "end stop"?
    -czy to przełącznik krańcowy?
    -czy to parametr w programie?
    -jeszcze co innego

    Jaką funkcję robią te delay(500); ?
  • #5 18961976
    piotrkrakow
    Poziom 9  
    Posty: 18
    Ocena: 3
    Sprawa ma się tak:
    Włączam prąd urządzenie zeruje się, jedzie do końca
    Potem rusza w drugą stronę i jedzie aż napotka mikroswich .
    Zatrzymuje się np na 5 sekund i wraca z powrotem do zera,
    i tak cały czas.
    Chodzi mi o to ze ten mikroswich(end stop) za każdym razem może być
    w innym miejscu. chodzi o wykrywanie przedmiotów o różnej wysokości.
    Ten end stop będzie zamontowany na ruchomym łożu
    - funkcja delay to milisekunty na cewki - tak ustawione działają dobrze - jak na filmie
  • #6 18962706
    mpier
    Poziom 29  
    Posty: 817
    Pomógł: 153
    Ocena: 141
    Witam,
    myślę, że lepszą pomoc uzyskasz, jeśli dokładniej opiszesz swój problem. O ile dobrze zauważyłem, niebieska platforma napędzana jest bezpośrednio paskiem z silnika, a punkt 0 to okolice tego silnika. Jeśli to nie tajemnica, napisz do czego jest ten drugi silnik ze śrubą, bo może na nim będzie to "ruchome łoże z end stopem". Czym będziesz ustawiał to drugie łoże? Będzie tam enkoder? Jesteś w stanie rozpędzić/zatrzymać platformę bez gubienia kroków i/lub umieścić przed "end stopem" drugi czujnik, żeby mieć więcej miejsca na hamowanie? No, teraz może coś ktoś...
  • #7 18962787
    piotrkrakow
    Poziom 9  
    Posty: 18
    Ocena: 3
    Ten drugi silnik z śrubą jest nieczynny, zamontowałem jak alternatywę dla ruch łoża, ale będzie za wolny z takim przeożeniem
    Temat w sumie prosty się wydaje.
    punkt 0 to okolice silnika
    łoże "tam się zeruje, potem rusza w drugą stronę
    i na łożu będzie mikrostyk (end stop) jeżeli z polu ruchu pojawi się przedmiot i
    mikrostyk go dotknie to się zatrzyma na chwilę np.5 sek.
    Potem wróci do zera i pojedzie jeszcze raz , międzyczasie w polu ruchu znajdzie się nowy przedmiot , mniejszy większy i jak go dotknie to zatrzyma się znowu na parę sekund , i tak cały czas.
    Mam problem z napisaniem w kodzie linijki może paru które spowodują
    zatrzymanie łoża w momencie dotknięcia przedmiotu.
    To jest prototyp maszyny z dyszą do oprysku przedmiotów.
  • #8 18967706
    mpier
    Poziom 29  
    Posty: 817
    Pomógł: 153
    Ocena: 141
    Masz, rację. Jeśli ograniczysz się do odpowiednio niskiej prędkości sterowanie będzie banalne: jedź_w_lewo_do_wyłącznika(); czekaj(ileś_na_nowy_przedmiot);jedź_w_prawo_do_wyłącznika();czekaj(5s); i od nowa. Impulsy do silnika generujesz np. z przerwania timera. Z odpowiednim wyłącznikiem masz praktycznie pewność, że platforma nie rozbije się o przedmiot.
  • #9 18968730
    Konto nie istnieje
    Poziom 1  
  • #10 18970016
    piotrkrakow
    Poziom 9  
    Posty: 18
    Ocena: 3
    Co do Konstrukcji ostatecznej to tak zrobię,
    jednak z uwagi na to iż słabo programuję korzystam
    z kodów zapożyczonych , i tu mam właśnie ten problem
    że nie wiem co dopisać żeby tak działało jak kolega opisał wcześnmiej.
  • #11 18973793
    mpier
    Poziom 29  
    Posty: 817
    Pomógł: 153
    Ocena: 141
    Wklejanie "kodów zapożyczonych" to niekoniecznie najszybsza droga jest. Wyżej napisałem jak to może wyglądać, jak chcesz można jeszcze uprościć. Bez przerwań i bez timerów.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Może tak nie wygląda, ale nie jest to najgorszy sposób na zrobienie tego (może drugi od końca), ale jeśli program nie robi nic innego to będzie OK. Nie musisz pisać wszystkiego na raz, możesz pytać.
  • #12 18975623
    piotrkrakow
    Poziom 9  
    Posty: 18
    Ocena: 3
    Ok, zmieniłem trochę koncepcję zastosowałem accelsteper
    działa super, znajduje 0 potem jedzie do końca jednak zatrzymuje się i nie chce wrócić po paru sekundach do 0 może ktoś pomoże

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 48 [sekundy]:

    czuję zę jedna lub dwie linijki muszę dopisać

    Dodano po 53 [minuty]:

    Przeglądnołem kod kolegi , jednak nie wiele rozumiem,
    jest toi fragment do wpisania do tego pierwotnego?
    Czy nie może być tak jak w tym kodzie co wysłałem , tj jeżdzi od krańcówki do krańcówki, zatrzymuje się na chwilę jak zadziała end stop i pojedzie do zera
    Taki kod jak mam wcześniej wydaje się prosty , jednak staje i nie chce pojechać doi zera. Może linijka kodu odblokuje powrót.
  • #13 18975731
    mpier
    Poziom 29  
    Posty: 817
    Pomógł: 153
    Ocena: 141
    Na pierwszy rzut oka brakuje Ci stepper.run(); po stepper.moce(-2000) zamiast stepper.stop(). To nie może dobrze działać.

    Dodano po 34 [minuty]:

    Ciężko powiedzieć co ma robić fragment, który napisałem wcześniej. Po jakimś czasie można zapomnieć, musiałbyś konkretne pytanie zadać. Funkcja jedź_bardzo_powoli_w_lewo_jeden_krok() ma coś wspólnego z przesuwaniem platformy chyba, a wciśnięty_STOP() chyba nie.
    piotrkrakow napisał:
    Czy nie może być tak jak w tym kodzie co wysłałem , tj jeżdzi od krańcówki do krańcówki, zatrzymuje się na chwilę jak zadziała end stop i pojedzie do zera
    Pewnie, że może być. Wystarczy zamiast arduino użyć odpowiednio mocnych wyłączników i odpowiednio słabego silnika i powinno być OK. Jeśli zmiana koncepcji polega na użyciu przycisków obsługiwanych ręcznie, to na upartego wystarczą dwa przekaźniki.
  • #14 18976132
    piotrkrakow
    Poziom 9  
    Posty: 18
    Ocena: 3
    nic nie jest recznie, pisałem już ze ma wystartować pojechać do zera
    odwrócić kierunek zjechać do drugiego enstopu postać tam chwile np 3sek
    i wrócić do zera
    Ten kod co dałem teraz powoduje zjechanie do drugiego endstop i nie wraca do zera potrzebuję zęby pojechał do zera po paru sekundach
  • Pomocny post
    #15 18976235
    Redcap16
    Poziom 15  
    Posty: 192
    Pomógł: 17
    Ocena: 49
    Najprostsza modyfikacja kodu który przedstawiłeś (ten wykorzystujący AccelStepper) polega na zmianie ze "stepper.stop()" na "stepper.run()" za "stepper.move(-2000)" oraz dodaniu przed "stepper.move(-2000)" opóźnienia (najprościej w formie "delay(5000)").

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam.

Podsumowanie tematu

✨ W dyskusji poruszono problem zatrzymywania silnika w odpowiednim momencie za pomocą przełącznika krańcowego (end stop) w projekcie stołu z ruchomym łożem. Użytkownik potrzebował pomocy w implementacji kodu, który umożliwiłby zatrzymanie ruchu w momencie napotkania przeszkody, a następnie powrót do punktu zerowego. Uczestnicy zasugerowali różne podejścia, w tym użycie biblioteki AccelStepper oraz modyfikację kodu, aby dodać opóźnienia i odpowiednie funkcje do zarządzania ruchem silnika. Wskazano również na konieczność dokładniejszego opisu problemu oraz na możliwość zastosowania dodatkowych czujników dla lepszej detekcji przeszkód.
REKLAMA