Skocz do zawartości

Chester11-86

Użytkownicy
  • Zawartość

    79
  • Rejestracja

  • Ostatnio

Reputacja

3 Neutralna

O Chester11-86

  • Ranga
    4/10

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Dąbrowa Górnicza

Ostatnio na profilu byli

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

  1. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Jednak czeka mnie jeszcze więcej testów i nauki, na chwilę obecną dziękuję za uwagi, proszę o nie zamykanie tematu Pozdrawiam serdecznie!
  2. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Hmmm, zadam takie dziwne pytania: 1. Czy jest możliwość w pętli setup zrobić przejście do jakiejś inne pętli niż loop? 2. Czy można w jednym programie używać biblioteki stepper.h oraz accelstepper.h? Z góry dzięki za odpowiedź!
  3. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Szukałem, aby podlinkować stronę na której się wzorowałem, kojarze, że było coś z forum arduino. Tam wyjaśnione było jak używać accelstepper do silników unipolarnych oraz bipolarnych przy użyciu odpowiednich układów sterujących. Zauważ w moim kodzie na początku zdefiniowałem sobie STEP1 oraz STEP2. Przy takich silnikach jakie wykorzystuję wpisanie cyfry 4 oznacza pełne kroki ponieważ tak wynika z budowy samego silnika. Obliczając sobie z danych silnika żę do pełnego obrotu jest 32 kroki gdzie przekładnia jest 64 "krokowa" daje nam to na jeden pełny obrót wałem 2048 kroków. Niektórzy (może się spotkasz) wpisują na sztywno w taki sposób: AccelStepper stepper1(4, motorPin1, motorPin3, motorPin2, motorPin4); Jeżeli zamiast cyfry 4 wpiszesz cyfrę 8 czyli każdy step podzielisz na pół wyjdą Ci półkroki czyli wykonując obliczenia powyżej będziesz musiał na jeden pełny obrót zrobić 4096 kroków. Ja to zrozumiałem w ten sposób podpatrując forum arduino/forbot oraz starać się zrozumieć samą bibliotekę razem z przykładami umieszczonymi programie. Jeżeli coś namieszałem to proszę mnie poprawić aby nie szerzyć głupot a mój post skasować. Testowałem to kilkukrotnie i wszystko się sprawdzało dlatego taka moja odpowiedź Panowie, podpowiedzcie w którę stronę iść, chciałbym zrealizować program aby po włączeniu zasilania arduino wykonało pewne zadanie (tylko jednokrotnie) i dopiero przeszło do pętli loop(). Tyle już przeczytałem, że... proszę o malutką wskazówkę
  4. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    narbej wybaczam Ci wmaker dziękuję Ci za podpowiedzi, też czytałem tą bibliotekę ale ja to miałem rozwiązane w inny sposób i Twoje podpowiedzi są słuszne (moja opinia) ale nie rozwiązało to problemu Natomiast w kodzie pozbyłem się przedrostków "else" i wszystko działa jak to sobie wyobraziłem (trochę jeszcze pomodziłem): if (stepper1.currentPosition() == 4096 || stepper1.currentPosition() == 0) { digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); } if (stepper2.currentPosition() == 4096 || stepper2.currentPosition() == 0) { digitalWrite(13, LOW); digitalWrite(12, LOW); digitalWrite(11, LOW); digitalWrite(10, LOW); } Kod gotowy w 80% brakuję mi jeszcze jednej funkcji, po odcięciu zasilania ustawianie/zapamiętywanie pozycji silnika. Jak ktoś ma jakieś ciekawe podpowiedzi z chęcią wysłucham Pozdrawiam serdecznie!
  5. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Kolego wmaker dziękuje za podpowiedzi ale też już tak sprawdzałem odczyt i nic Dalej jestem w kropce...
  6. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Poszedłem za Twoją radą i stworzyłem coś takiego: #include <AccelStepper.h> //biblioteka do sterowania silnikiem krokowym #include <IRremote.h> //biblioteka do rc5 #define STEP1 4 //sterowanie pełnymi krokami #define STEP2 4 // Zdefiniowanie pinów silnika 1 #define motorPin1 6 // IN1 w układzie ULN2003 #define motorPin2 7 // IN2 w układzie ULN2003 #define motorPin3 8 // IN3 w układzie ULN2003 #define motorPin4 9 // IN4 w układzie ULN2003 // Zdefiniowanie pinów silnika 2 #define motorPin5 13 // IN1 w układzie ULN2003 #define motorPin6 12 // IN2 w układzie ULN2003 #define motorPin7 11 // IN3 w układzie ULN2003 #define motorPin8 10 // IN4 w układzie ULN2003 // Inicjalizacja pinów AccelStepper stepper1(STEP1, motorPin1, motorPin3, motorPin2, motorPin4); AccelStepper stepper2(STEP2, motorPin5, motorPin7, motorPin6, motorPin8); IRrecv irrecv(4); //pin 4 odczyt komend rc5 decode_results results; void setup() { irrecv.enableIRIn(); //uruchomienie odczytu rc5 stepper1.setMaxSpeed(500.0); //maksymalna predkosc silnika nr 1 stepper1.setAcceleration(350.0); //przyspieszenie silnika nr 1 stepper1.setSpeed(100); //ustalenie predkosci silnika nr 1 stepper2.setMaxSpeed(500.0); //maksymalna predkosc silnika nr 2 stepper2.setAcceleration(350.0); //przyspieszenie silnika nr 2 stepper2.setSpeed(100); //ustalenie predkosci silnika nr 2 Serial.begin (9600); } void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0x3434827D: stepper1.moveTo(4096); //jedz silnikiem na pozycje 4096 Serial.println(stepper1.currentPosition()); delay (200); break; case 0x34347887: stepper1.moveTo(0); //jedz silnikiem na pozycje 0 Serial.println(stepper1.currentPosition()); delay (200); break; case 0x343433CC: stepper1.stop(); delay (200); break; case 0x343442BD: stepper2.moveTo(4096); //jedz silnikiem na pozycje 4096 Serial.println(stepper2.currentPosition()); delay (200); break; case 0x343455AA: stepper2.moveTo(0); //jedz silnikiem na pozycje 0 Serial.println(stepper2.currentPosition()); delay (200); break; case 0x3434748B: stepper2.stop(); delay (200); break; } irrecv.resume(); } else if (stepper1.currentPosition() == 4096) { digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); } else if (stepper1.currentPosition() == 0) { digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); } else if (stepper2.currentPosition() == 0) { digitalWrite(13, LOW); digitalWrite(12, LOW); digitalWrite(11, LOW); digitalWrite(10, LOW); } else if (stepper2.currentPosition() == 4096) { digitalWrite(13, LOW); digitalWrite(12, LOW); digitalWrite(11, LOW); digitalWrite(10, LOW); } stepper1.run(); //uruchom silnik 1 stepper2.run(); //uruchom silnik 1 } Ale nie wiem czy w prawidłowym miejscu to umieściłem bo zwraca mi wartości dokładnie takie jakie umieściłem w programie. Jeszcze jedną rzecz zauważyłem. Jeżeli poruszam się silnikiem nr 2 to diody nie gasną (że tak się wyraże), natomiast jeżeli w każdym przypadku gdy po ruchu silnika nr 2, silnik nr 1 zakończy swoją pracę to wtedy wszystkie diody zgasną - jak to sobie umyśliłem. Jeżeli natomiast silnik nr 2 sam pracuje lub ostatni zakończy pracę diody dalej świecą. Nie wiem gdzie leży błąd jestem w kropce
  7. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Halo halo, jest tu kto ? Udało mnie się stworzyć program, w którym za pomocą pilota steruje ruchem silnika nawet z możliwością zatrzymania w danej chwili. Program przedstawiam poniżej: #include <AccelStepper.h> //biblioteka do sterowania silnikiem krokowym #include <IRremote.h> //biblioteka do rc5 #define FULLSTEP 4 //sterowanie pełnymi krokami // Zdefiniowanie pinów silnika #define motorPin1 8 // IN1 w układzie ULN2003 #define motorPin2 9 // IN2 w układzie ULN2003 #define motorPin3 10 // IN3 w układzie ULN2003 #define motorPin4 11 // IN4 w układzie ULN2003 // Inicjalizacja pinów AccelStepper stepper1(FULLSTEP, motorPin1, motorPin3, motorPin2, motorPin4); IRrecv irrecv(4); //pin 4 odczyt komend rc5 decode_results results; void setup() { irrecv.enableIRIn(); //uruchomienie odczytu rc5 stepper1.setMaxSpeed(500.0); //maksymalna predkosc stepper1.setAcceleration(350.0); //przyspieszenie silnika stepper1.setSpeed(100); //ustalenie predkosci } void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0x3434827D: stepper1.moveTo(4096); //jedz silnikiem na pozycje 4096 delay (200); break; case 0x34347887: stepper1.moveTo(0); //jedz silnikiem na pozycje 4096 delay (200); break; case 0x343433CC: stepper1.stop(); delay (200); break; } irrecv.resume(); } else if (stepper1.currentPosition() == 4096) { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); } else if (stepper1.currentPosition() == 0) { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); } stepper1.run(); //uruchom silnik } Dodatkowo zrobiłem wersję z dwoma silnikami: #include <AccelStepper.h> //biblioteka do sterowania silnikiem krokowym #include <IRremote.h> //biblioteka do rc5 #define STEP1 4 //sterowanie pełnymi krokami #define STEP2 4 // Zdefiniowanie pinów silnika 1 #define motorPin1 6 // IN1 w układzie ULN2003 #define motorPin2 7 // IN2 w układzie ULN2003 #define motorPin3 8 // IN3 w układzie ULN2003 #define motorPin4 9 // IN4 w układzie ULN2003 // Zdefiniowanie pinów silnika 2 #define motorPin5 13 // IN1 w układzie ULN2003 #define motorPin6 12 // IN2 w układzie ULN2003 #define motorPin7 11 // IN3 w układzie ULN2003 #define motorPin8 10 // IN4 w układzie ULN2003 // Inicjalizacja pinów AccelStepper stepper1(STEP1, motorPin1, motorPin3, motorPin2, motorPin4); AccelStepper stepper2(STEP2, motorPin5, motorPin7, motorPin6, motorPin8); IRrecv irrecv(4); //pin 4 odczyt komend rc5 decode_results results; void setup() { irrecv.enableIRIn(); //uruchomienie odczytu rc5 stepper1.setMaxSpeed(500.0); //maksymalna predkosc silnika nr 1 stepper1.setAcceleration(350.0); //przyspieszenie silnika nr 1 stepper1.setSpeed(100); //ustalenie predkosci silnika nr 1 stepper2.setMaxSpeed(500.0); //maksymalna predkosc silnika nr 2 stepper2.setAcceleration(350.0); //przyspieszenie silnika nr 2 stepper2.setSpeed(100); //ustalenie predkosci silnika nr 2 } void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0x3434827D: stepper1.moveTo(4096); //jedz silnikiem na pozycje 4096 delay (200); break; case 0x34347887: stepper1.moveTo(0); //jedz silnikiem na pozycje 0 delay (200); break; case 0x343433CC: stepper1.stop(); delay (200); break; case 0x343442BD: stepper2.moveTo(4096); //jedz silnikiem na pozycje 4096 delay (200); break; case 0x343455AA: stepper2.moveTo(0); //jedz silnikiem na pozycje 0 delay (200); break; case 0x3434748B: stepper2.stop(); delay (200); break; } irrecv.resume(); } else if (stepper1.currentPosition() == 4096) { digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); } else if (stepper1.currentPosition() == 0) { digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); } else if (stepper2.currentPosition() == 0) { digitalWrite(13, LOW); digitalWrite(12, LOW); digitalWrite(11, LOW); digitalWrite(10, LOW); } else if (stepper2.currentPosition() == 4096) { digitalWrite(13, LOW); digitalWrite(12, LOW); digitalWrite(11, LOW); digitalWrite(10, LOW); } stepper1.run(); //uruchom silnik 1 stepper2.run(); //uruchom silnik 1 } Tutaj napotkałem na problem. Dlaczego nie ustawiają się piny na "0" przy silniku nr 2? Przy silniku nr 1 nie ma najmniejszego problemu gdy osiągnie dwie pozycje, natomiast przy dodaniu kolejnego silnika jest problem. Proszę o pomoc w rozwiązaniu tego zagadnienia. Z góry dzięki
  8. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Witam po krótkiej przerwie, działamy dalej Udało mnie się troszkę rozgryźć bibliotekę AccelStepper.h i stworzyłem taki program: #include <AccelStepper.h> //biblioteka do sterowania silnikiem krokowym #define FULLSTEP 4 //sterowanie pełnymi krokami // Zdefiniowanie pinów silnika #define motorPin1 8 // IN1 w układzie ULN2003 #define motorPin2 9 // IN2 w układzie ULN2003 #define motorPin3 10 // IN3 w układzie ULN2003 #define motorPin4 11 // IN4 w układzie ULN2003 // Inicjalizacja pinów AccelStepper stepper1(FULLSTEP, motorPin1, motorPin3, motorPin2, motorPin4); void setup() { stepper1.setMaxSpeed(500.0); //maksymalna predkosc stepper1.setAcceleration(100.0); //przyspieszenie silnika stepper1.setSpeed(100); //ustalenie predkosci pinMode(4, INPUT_PULLUP); // pin 4 obrót w dol pinMode(5, INPUT_PULLUP); // pin 5 obrót do gory } void loop() { if (digitalRead (4) == LOW && stepper1.distanceToGo() == 0) //spelnij dwa warunki { stepper1.moveTo(4096); //jedz silnikiem na pozycje 4096 } else if (stepper1.currentPosition() == 4096) //jezeli osiągnie pozycje wylacz zasilanie na pinach { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); } if (digitalRead (5) == LOW && stepper1.distanceToGo() == 0) //tego nie rozumiem ???!!! { stepper1.moveTo(0); } else if (stepper1.currentPosition() == 0) { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); } stepper1.run(); //uruchom silnik } Program zachowuję się tak jak tego oczekuję w tej chwili. Po wciśnięciu pinu nr 4 silnik wykonuje dwa obroty w "dół" do osiągnięcia pozycji 4096 kroków i jest stop. Jeżeli wcisnę jeszcze raz ten sam przycisk silnik nie reaguje. Natomiast po wciśnięciu pinu nr 5 silnik wykonuje dwa obroty w "górę" do osiągnięcia pozycji 0 kroków i jest stop. Nie rozumiem i tutaj proszę o pomoc w zrozumieniu tej kwestii programu: if (digitalRead (5) == LOW && stepper1.distanceToGo() == 0) Dlaczego muszę znowu w tym momencie ustalić pozycję "0" a nie tą którą osiągnąłem wcześniej czyli "4096"?? Z góry dzięki za odpowiedź W kolejnych etapach będę próbował sterować za pomocą RC5. Zobaczymy co z tego wyjdzie
  9. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Spokojnie wmaker, nikt nikomu nie namieszał po to jest forum aby dyskutować ze sobą, wymieniać swoje zdanie lub wiedzę a jeżeli ta wiedza jest błędna będzie na forum poprawiona. Przeczytałem dokładnie wszystko kilkukrotnie co napisaliście i tutaj kolega kaczakat miał rację, błąd leżał po mojej stronie i źle zainstalowanej bibliotece, problem rozwiązany i jak to było wspomniane wcześniej: Dlatego wszystko już działa i zaczynam uczyć się dalej
  10. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Panowie potrzebuję pomocy, Stworzyłem sobie program wykorzystując bibliotekę AccelStepper.h i niestety nic nie działa. Pojechałem po bandzie i na żywca z internetu wgrałem dwa różne kody (poniżej), i też nie działają, nawet nie chcą się zaświecić chociaż na chwilę te diody na płytce z układem ULN2003. Proszę powiedzcie co robię źle /* Stepper Motor Demonstration 2 Stepper-Demo2.ino Demonstrates Two 28BYJ-48 Unipolar Steppers with ULN2003 Driver Uses Accelstepper Library DroneBot Workshop 2018 https://dronebotworkshop.com */ // Include the AccelStepper Library #include <AccelStepper.h> // Define Constants // Define step constants #define FULLSTEP 4 #define HALFSTEP 8 // Define Motor Pins (2 Motors used) #define motorPin1 8 // Blue - 28BYJ48 pin 1 #define motorPin2 9 // Pink - 28BYJ48 pin 2 #define motorPin3 10 // Yellow - 28BYJ48 pin 3 #define motorPin4 11 // Orange - 28BYJ48 pin 4 #define motorPin5 4 // Blue - 28BYJ48 pin 1 #define motorPin6 5 // Pink - 28BYJ48 pin 2 #define motorPin7 6 // Yellow - 28BYJ48 pin 3 #define motorPin8 7 // Orange - 28BYJ48 pin 4 // Define two motor objects // The sequence 1-3-2-4 is required for proper sequencing of 28BYJ48 AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4); AccelStepper stepper2(FULLSTEP, motorPin5, motorPin7, motorPin6, motorPin8); void setup() { // 1 revolution Motor 1 CW stepper1.setMaxSpeed(1000.0); stepper1.setAcceleration(50.0); stepper1.setSpeed(200); stepper1.moveTo(2048); // 1 revolution Motor 2 CCW stepper2.setMaxSpeed(1000.0); stepper2.setAcceleration(50.0); stepper2.setSpeed(200); stepper2.moveTo(-2048); } void loop() { //Change direction at the limits if (stepper1.distanceToGo() == 0) stepper1.moveTo(-stepper1.currentPosition()); if (stepper2.distanceToGo() == 0) stepper2.moveTo(-stepper2.currentPosition()); stepper1.run(); stepper2.run(); } Drugi kod: #include <AccelStepper.h> #define HALFSTEP 8 // Motor pin definitions #define motorPin1 8 // IN1 on the ULN2003 driver 1 #define motorPin2 9 // IN2 on the ULN2003 driver 1 #define motorPin3 10 // IN3 on the ULN2003 driver 1 #define motorPin4 11 // IN4 on the ULN2003 driver 1 // Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48 AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4); void setup() { stepper1.setMaxSpeed(1000.0); stepper1.setAcceleration(100.0); stepper1.setSpeed(500); stepper1.moveTo(20000); }//--(end setup )--- void loop() { //Change direction when the stepper reaches the target position if (stepper1.distanceToGo() == 0) { stepper1.moveTo(-stepper1.currentPosition()); } stepper1.run(); } Z góry wielkie dzięki!
  11. Chester11-86

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Ma przekładnie więc ręcznie jest ciężko obrócić wałem, myśle, że nie powinno być problemu, ale dziękuję za zwrócenie uwagi Przerobiłem sobie program na sterowanie za pomocą pilota RC5: // Kod sterujący silnikiem krokowym na Arduino #include <Stepper.h> // Biblioteka do sterowania silnikiem #include <IRremote.h> // Biblioteka do rc5 #define STEPS 32 // Liczba kroków silnika Stepper stepper (STEPS, 8, 10, 9, 11); // tworzenie instancji klasy steppera za pomocą kroków i pinów IRrecv irrecv(4); // Pin 4 odczyt komend rc5 decode_results results; int val = 0; // dodanie zmiennej void setup () { Serial.begin (9600); //chcemy odczytywać kroki na ekranie komputera stepper.setSpeed (800); // prędkość silnika (1 - 1000) irrecv.enableIRIn(); } void loop () { if (irrecv.decode(&results)) { switch (results.value) { case 0xFFA25D: val = 2048; stepper.step (val); Serial.println (val); // wydrukuj na ekranie komputera czy wykonał 2048 kroków w lewo delay (200); break; case 0xFF629D: val = -2048; stepper.step (val); Serial.println (val); // wydrukuj na ekranie komputera czy wykonał 2048 kroków w prawo ponieważ jest znak minus "-" delay(200); break; } irrecv.resume(); }else { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); } } Działa jak sobie to wyobraziłem, ale... Co mam zrobić jeżeli podczas wykonywania obrotu silnika chciałem go zatrzymać w dowolnej chwili? Niestety nic nie mogę wymyślić, wszystkie moje pomysły nie działają Proszę o pomoc w nakierowaniu mnie gdzie mam szukać? Jakiej komendy szukać, jaką bibliotekę wykorzystać? Z góry dzięki!
  12. Witam Wszystkich Forumowiczów, Przekopałem troszkę forum i niestety nie znalazłem żadnych informacji, które w "łopatologiczny" sposób wyjaśnią w jaki sposób sterować bardzo popularnym silnikiem krokowym (28byj-48) za pomocą Arduino. W jaki sposób należy podłączyć silnik oraz za pomocą jakiego układu nie będę się rozpisywał ponieważ w sieci można znaleźć pełno schematów w tym temacie Prawdopodobnie w samouczku na forbocie też się pojawi taki schemat ale to na pewno w części III Ważne jest aby w układzie ULN wejście IN1 połączyć z pinem 8 w Arduino, IN2 - 9, IN3 - 10, IN4 - 11, natomiast w programie zmieniamy tą kolejność co widać w załączonym kodzie. Producent informuje Nas, że jeden obrót samego silnika to 32 kroki. Dodatkowo silnik wyposażony jest w przekładnie, która składa się z 64 stopni. Podsumowując aby zauważyć pełny obrót silnika razem z przekładnią należy wykonać: 32*64=2048 kroków. W związku z tym, poniżej przedstawiam taki oto kod, który jest zlepkiem informacji jakie udało mnie się znaleźć w tym temacie w sieci razem z ponownym przeczytaniem kursów forbot'a: // Kod sterujący silnikiem krokowym na Arduino #include <Stepper.h> // Biblioteka do sterowania silnikiem #define STEPS 32 // Liczba kroków silnika Stepper stepper (STEPS, 8, 10, 9, 11); // tworzenie instancji klasy steppera za pomocą kroków i pinów int val = 0; // dodanie zmiennej void setup () { Serial.begin (9600); //hcemy odczytywać kroki na ekranie komputera stepper.setSpeed (800); // prędkość silnika (1 - 1000) pinMode(4, INPUT_PULLUP); // pin 4 obrót w lewo pinMode(5, INPUT_PULLUP); // pin 5 obrót w prawo } void loop () { if (digitalRead (4) == LOW) //jeśli przycisk 4 jest wciśnięty wykonaj jeden pełen obrót { val = 2048; stepper.step (val); Serial.println (val); // wydrukuj na ekranie komputera czy wykonał 2048 kroków w lewo } if (digitalRead (5) == LOW) //jeśli przycisk 5 jest wciśnięty wykonaj jeden pełen obrót { val = -2048; stepper.step (val); Serial.println (val); // wydrukuj na ekranie komputera czy wykonał 2048 kroków w prawo ponieważ jest znak minus "-" } } Niestety pojawił się mały problem ponieważ po wykonaniu obrotu przez silnik, w układzie ULN zawsze świeciły 2 ostatnie diody co oznaczało, że na silniki dalej podawane jest napięcie w efekcie po kilku minutach silnik był bardzo ciepły. Rozwiązałem to w ten sposób: if (digitalRead (4) == LOW) //jeśli przycisk 4 jest wciśnięty wykonaj jeden pełen obrót { val = 2048; stepper.step (val); Serial.println (val); // wydrukuj na ekranie komputera czy wykonał 2048 kroków w lewo } else { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); } Za każdym wykonaniem odpowiedniej ilości kroków na pinach nie pojawiało się żadne napięcie i silnik nie grzał się niepotrzebnie. Efekt osiągnięty, pytanie czy poprawnie? Na tym etapie się zatrzymałem, chciałbym Was prosić o pomoc abyście mogli spojrzeć na kody powyżej i wypowiedzieć się czy jest to poprawnie napisane. ewentualne komentarze oraz krytyka mile widziana. Kolejnym krokiem będę chciał wdrożyć sterowanie RC5 zamiast pinów, itd..... (aż powstanie to co sobie wymyśliłem) Z góry dziękuję za pomoc!
  13. Chester11-86

    Wątek zbiorczy: powitania użytkowników

    Witam Wszystkich Forumowiczów :) Od kilku lat jestem na Forbocie, ale w końcu czas się odezwać hehe Mam nadzieję, że znajdę pomoc w odpowiedzi na nurtujące mnie pytania oraz będę mógł pomóc innym. Programowałem kiedyś w Bascom'ie ale to stare czasy, teraz jest łatwiej z Arduino i tego chce spróbować. P.S. Poradniki wymiatają
  14. Mam jeszcze jedno pytanie: w jaki sposób spowolnić pracę serwa? Zwiększyć wartość reload? Nie chce wykorzystywać do tego timerów.
  15. Witam Napisałem sobie taki o to programik aby sprawdzić w jakim przedziale działa mi serwo: Turnigy XGD-11HMB. Okazało się że startuję przy pozycji 70 a zatrzymuję przy pozycji 150. Obraca się tylko o kąt 45 stopni. Czy to możliwe aby serwo wykonywało pracę tylko o taki kąt a nie o 180 stopni? Program: '$sim $regfile = "m8def.dat" $crystal = 8000000 '******************************************************************************* Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 '******************************************************************************* Config Servos = 1 , Servo1 = Portd.0 , Reload = 8 Config Portd.0 = Output Config Portb.1 = Input Portb.1 = 1 Config Portb.2 = Input Portb.2 = 1 Config Portb.3 = Input Portb.3 = 1 '******************************************************************************* Dim I As Byte Enable Interrupts '******************************************************************************* Do '****************** Program sterownika ***************************************** Servo(1) = I For I = 50 To 250 Servo(1) = I Cls Upperline Lcd "Dzien dobry!" Lowerline Lcd "Pozycja: " ; I Waitms 200 Next For I = 250 To 50 Step -1 Servo(1) = I Cls Upperline Lcd " Dzien dobry!" Lowerline Lcd "Pozycja: " ; I 'pokazuje pozycje serwa Waitms 200 Next Loop End '******************************************************************************* Z góry dziękuję za odpowiedź. Pozdrawiam.
×