Skocz do zawartości

Samail

Użytkownicy
  • Zawartość

    4
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O Samail

  • Ranga
    1/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. @Elvis W przyszłości planuję wykonać własne źródło o niezbędnych parametrach, póki co skupiam się na samym mechanizmie. Nie zdawałem sobie sprawy z takiego zjawiska, więc na pewno przyda się na przyszłość. @marek1707 Otworzyłeś mi nieco oczy na całą sytuację i zgodnie z uwagami planuje wszystko przemodelować. Zrezygnuje z przekładni, co znacznie ułatwi sprawę, do tego zastosuję serwo 360° w miejsce nieszczęsnego krokowca. W kwestii plastiku, rozumiem doskonale, że to niezbyt dobry materiał na elementy mechanizmów, jednak jeśli chodzi o prototypowanie myślę, że sprawdza się dobrze. Uważam, że wykonanie jakiegoś urządzenia czy maszyny w fazie projektowania, co do której nie ma się pewności jak się zachowa lepiej wykorzystać łatwo dostępne, tanie i do tego proste w obróbce materiały. @atMegaTona Cóż, skoro istnieje takie rozwiązanie, to warto zapamiętać. Kiedy wszyscy mają na tym skorzystać to dlaczego nie? Wielkie dzięki wszystkim za zainteresowanie i celne wskazówki. Cała ta wiedza na pewno przyda się nie tylko przy tym projekcie ale i kolejnych. Teraz nie pozostaje nic innego, jak tylko tą wiedzę wykorzystać.
  2. Nie spodziewałem się, że będzie problem z zasilaniem silnika biorąc pod uwagę, że dobierałem elementy tak, żeby wszystko do siebie pasowało. Zasilam logikę sterownika z 5V, a cewki silnika z 12V przez przetwornice step-up. Maksymalny prąd cewki to 1A, a prąd jaki mogę pobrać ze źródła to 2.1A. Dlaczego zatem silnik nie ruszy? To znaczy, przy maksymalnym obciążeniu i dwóch cewkach to 2A, ale nie brałem pod uwagę dużych strat na przetwornicy i sterowniku. Do przekręcenia klucza w zamku potrzebuje momentu o wartości 0,125Nm. Przełożenie przekładni wynosi 8,75. Chciałbym, żeby udało się ją wydrukować z PA. Zatem minimalny moment dla sprawności 50%: M=(0,125Nm/8,75)*2≈0,030Nm. Jestem prawie pewny, że 50% to czcze marzenia, ale nawet przy niższej sprawności wartość momentu powinna być wystarczająca. Do tego dochodzi kwestia dokładności wykonania, ale na podstawie (przyznam, lekko wątpliwej) wiedzy Youtubowej, którą pozyskałem z filmików o drukowanych w 3d przekładniach wywnioskowałem, że da się to zrobić tak, żeby się nie rozpadło. Całość ma być rzecz jasna prototypem, nie będę katować tej przekładni. Początkowo zakładałem wykorzystanie serwa, byłoby to dużo łatwiejsze rozwiązanie pod chyba wszystkimi względami, jednak potrzebuje większego kąta obrotu - 720st. Mówiąc szczerze, nie dowiadywałem się, czy istnieją rozwiązania serwonapędów spełniających moje wymagania, które jednocześnie nie kosztują kroci. Przy takim napędzie o którym mówisz nie będę miał przypadkiem problemu z dokładnym pozycjonowaniem? Nie wiem co się stanie kiedy przesadzę z obrotem przy dużym momencie. Swoją drogą zauważyłem, że sporo osób ma uraz do tych biednych silników krokowych.
  3. Przewiduję, że drzwi od wewnątrz można będzie zamknąć bez użycia aplikacji. W takim przypadku, bez znajomości położenia wału nie będę wiedział ile kroków muszę wykonać żeby zamknąć drzwi z poziomu aplikacji. W idealnych warunkach, czyli jeżeli klucz będzie przekręcony tak jak przewiduje to w programie, rzeczywiście nie potrzebuje sprzężenia do tego celu, ale wydaje mi się, że lepiej będzie wykluczyć element niepewności. Druga sprawa jest taka, że coś może pójść nie tak, nawet nie od strony mechanizmu urządzenia, co od strony mechanizmu zamka w drzwiach. Kiedy w którymś momencie zamek zatnie się i nie będzie chciał współpracować. Ogólnie rzecz biorąc w takim przypadku tak czy inaczej nic nie zrobię jeśli będę na zewnątrz, a klucz będzie w drzwiach, ale pocieszę się przynajmniej, że wiem w którym położeniu się zaciął. Początkowo planowałem zastosować jakiś dodatkowy mechanizm, który umożliwiłby wysunięcie klucza, ale na tę chwilę ograniczyłem się do tego co przedstawiłem. W zasadzie trochę otworzyłeś mi teraz oczy, ze względu na to, że planowałem umieścić w aplikacji opcje "zamknij", "otwórz" ewentualnie coś w stylu "zamknij na jedno przekręcenie". Ale mógłbym zrobić coś na zasadzie analogowego pokrętła, którym mógłbym obracać kluczem w pełnym zakresie. Chociaż mimo to, bezpieczniej jest jednak wiedzieć gdzie się stoi. Jeśli chodzi o model 3d wykonałem go w Inventorze od Autodesku, schematy opracowałem w Eaglu. Część modeli podzespołów elektronicznych znalazłem na GrabCAD. Trzeba było je przekonwertować, bo akurat jeśli chodzi o takie modele to z tego co wiem wygodniej wykonuje się w innych programach.
  4. Witam wszystkich, jestem w trakcie opracowywania projektu inteligentnego zamka do drzwi. Urządzenie ma umożliwiać sterowanie zamkiem drzwiowym za pośrednictwem aplikacji mobilnej. Przygotowałem już model mechanizmu i schemat elektryczny, aktualnie jestem na etapie programowania układu. Jako "mózg" operacji wykorzystuje Arduino Nano Every. Zwracam się do Was z prośbą o weryfikacje i przedstawienie wszelkich uwag i spostrzeżeń do dotychczasowych efektów projektowania. Prośba wynika z tego, że szykuje się do zakupu niezbędnych elementów i chciałbym zminimalizować ryzyko niepotrzebnych wydatków w przypadku ewentualnych nieprawidłowości. Dodatkowo, chętnie zaciągnę rad od "wyjadaczy". Wątpliwości mam głównie w kwestii tytułowego sprzężenia zwrotnego. Do sprawdzania pozycji kątowej wału chcę wykorzystać analogowy czujnik odbiciowy. Na wale umieściłem pierścień z wypustami. Podczas obrotu wału czujnik natrafia na wypusty co objawia się zmianą wartości wyjściowej czujnika. Zastanawiam się, czy takie rozwiązanie nie wpłynie jakoś znacząco na płynność działania całego mechanizmu i czy w ogóle może zostać zrealizowane. Zdaje sobie sprawę z różnicy rozdzielczości między krokami silnika, a układu sprzężenia zwrotnego. Oto opracowany szkic programu: // ================================= IO TAGS ================================= // const int controllerEnable = 7; //D4 const int controllerMS1 = 9; //D6 const int controllerMS2 = 24; //A5 const int controllerMS3 = 23; //A4 const int controllerSleep = 21; //A2 const int controllerStep = 20; //A1 const int controllerDir = 19; //A0 const int bluetoothEnable = 5; //D2 const int batteryVoltageIn = A3; const int sensorOut = A7; // ============================== GLOBAL VARIABLES ============================ // int batteryPercentage; float batteryLowVoltage=2.5; //***wartość do pomiaru*** float batteryHighVoltage=5.0; //***wartość do pomiaru*** int sensorImpulsesValue=0; int correctImpulsesValue=200; //motor resolution int sensorHighTreshold=1000; //***wartość do pomiaru*** bool correctPositionFlag; // ================================= FUNCTIONS ================================ // void readBatteryState() //reading battery percentage state { int batteryVoltage=analogRead(batteryVoltageIn); float batteryVoltageValue=batteryVoltage * (5.0 / 1023.0); //transforming analog read value to voltage batteryPercentage = (int)((batteryHighVoltage - batteryLowVoltage)-(batteryHighVoltage-batteryVoltageValue)/(batteryHighVoltage - batteryLowVoltage))*100; //transforming battery voltage value to percentage value } void readSensorImpulses() //reading sensor impulses { if(analogRead(sensorOut)>sensorHighTreshold) { sensorImpulsesValue++; } } void checkPosition() //checking position correctness { if(sensorImpulsesValue==correctImpulsesValue) { correctPositionFlag=1; } else { correctPositionFlag=0; } } // ------------------------ MOTOR MODE SETUP ----------------------- // void setFullStep() { digitalWrite(controllerMS1, LOW); digitalWrite(controllerMS2, LOW); digitalWrite(controllerMS3, LOW); } void setHalfStep() { digitalWrite(controllerMS1, HIGH); digitalWrite(controllerMS2, LOW); digitalWrite(controllerMS3, LOW); } void setQuarterStep() { digitalWrite(controllerMS1, LOW); digitalWrite(controllerMS2, HIGH); digitalWrite(controllerMS3, LOW); } // -------------------------- MOTOR MOTION ------------------------- // bool fullForwardTurn() //one, full shaft turn - forward { digitalWrite(controllerDir, HIGH); for(int i=1; i<200; i++) { digitalWrite(controllerStep, HIGH); delay(1); digitalWrite(controllerStep, LOW); readSensorImpulses(); delay(1); } checkPosition(); return correctPositionFlag; } bool fullReverseTurn() //one, full shaft turn - reverse { digitalWrite(controllerDir, LOW); for(int i=1; i<200; i++) { digitalWrite(controllerStep, HIGH); delay(1); digitalWrite(controllerStep, LOW); readSensorImpulses(); delay(1); } checkPosition(); return correctPositionFlag; } // ============================= SETUP ============================= // void setup() { pinMode(controllerEnable, OUTPUT); pinMode(controllerMS1, OUTPUT); pinMode(controllerMS2, OUTPUT); pinMode(controllerMS3, OUTPUT); pinMode(controllerSleep, OUTPUT); pinMode(controllerStep, OUTPUT); pinMode(controllerDir, OUTPUT); pinMode(bluetoothEnable, OUTPUT); } //============================= MAIN LOOP =========================== // void loop() { digitalWrite(controllerEnable, HIGH); digitalWrite(bluetoothEnable, HIGH); readBatteryState(); fullForwardTurn(); } Ważniejsze parametry elementów: Silnik krokowy JK42HW34-0334: napięcie zasilania: 12V DC, prąd: 0,33A/cewka, moment: 0,22 Nm. Sterownik silnika A4988 RepRap: napięcie logiki: 3-5.5V, napięcie silnika: 8-35V, prąd maksymalny: 1A/cewka, moment: 0,22 Nm. Układ chcę zasilić power bankiem z dwoma wyjściami: 5V, 1A (logika) i 5V, 2.1A (silnik). Zastosowany analogowy czujnik odbiciowy: KTIR0711S w module. Program póki co jest mocno okrojony ale kompiluje się bez oporów . W załączeniu schemat połączeń układu i widoki modelu. Mam nadzieję, że wystarczająco czytelne. Dziękuję za wszelkie sugestie.
×
×
  • Utwórz nowe...