Skocz do zawartości

wmaker

Użytkownicy
  • Zawartość

    28
  • Rejestracja

  • Ostatnio

Reputacja

13 Dobra

O wmaker

  • Ranga
    3/10

Ostatnio na profilu byli

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

  1. wmaker

    Robot samobalansujący

    https://www.nibib.nih.gov/news-events/newsroom/powered-robotic-legs-leaping-toward-future
  2. wmaker

    Mój układ optoizolacji

    Kilka postów napisane, niestety oczywiste dla Was błędy nie zostały wskazane choćby tematycznie (do zapytania "po co bateria" potrzeba jednego zdania rozwinięcia). W moich wypocinach dopytuję ile się da ale nie każdy ma tyle "odwagi" i wtedy temat umiera bez rozwiązania, wskazań kierunku rozwoju, co gorsza bez efektu edukacji wszystkich pozostałych czytających wątek. Bardzo Was proszę o pracę u podstaw z możliwym ograniczeniem wycieczek do lamerów ( do nich to nie dotrze a zaciemnia samą wiedzę) Ci z nas którym otwieracie oczy są Wam wdzięczni i to możecie wyczuć we wpisach. Edukacja to ciężka praca, sądzę że nawet cięższa dla edukujących, dlatego też zwróciłem uwagę na FORBOTA bo odwala(cie) kawał roboty, rozumiem że możecie być poirytowani efektami ale oceńcie obiektywnie, nie możliwe jest żeby trafiali tu tylko wybitni uczniowie (właściwie rozkład normalny determinuje odwrotną sytuację - większość to przeciętniacy) i jako przeciętniak potrzebuję pokazania palcem błędu lub kierunku jego eliminacji (broń Boże naprawienia bo to nie edukuje). Nie poddawajcie się!
  3. Wpis informacyjny... Nastąpiła pauza na malowanie domu, grypę czyli można by powiedzieć całą serie wymówek gdyby nie twarde lądowanie przy nie przemyślanych ruchach w projekcie. Podniesione napięcie do 24V i natężenie na sterownikach DRV8825 do 3A (teoretycznie wg karty katalogowej silnik ma wziąć do 2A więc był zapas) objawiło się dymem , no to szybka wymiana na następny driver ( miałem jeden na zapas ) i znowu dym bom go włożył odwrotnie . Teraz nie mam driverów a i Arduino przestało współpracować. Więc cofam się o krok. Są dni kiedy powinno się robić prostsze rzeczy np. πqo.
  4. Docelowy wymiar będzie zbliżony, inspiracją jest Automower
  5. Do takich gąsienic chyba nie muszą być metalowe ( chyba że ma być pancernie )to można wyciąć na laserze z pleksi lub sklejki.
  6. Wrzucam dla dokumentacji postępów bieżący wygląd całości, taka typowa "platforma eksperymentalna"
  7. wmaker

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    no tak, spełnienie warunków na pierwszym silniku zamykało warunek i program nie dochodził do drugiego silnika - w programach jest to fascynujące że rozwiązania stają się oczywiste PO ich znalezieniu wyjaśnij proszę jak.
  8. wmaker

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Dla formalności jeszcze zamienił bym programowo silniki przez zmianę deklaracji pinów: AccelStepper stepper1(STEP1, motorPin1, motorPin3, motorPin2, motorPin4); AccelStepper stepper2(STEP2, motorPin5, motorPin7, motorPin6, motorPin8); na: AccelStepper stepper2(STEP1, motorPin1, motorPin3, motorPin2, motorPin4); AccelStepper stepper1(STEP2, motorPin5, motorPin7, motorPin6, motorPin8); to sprawdzi warstwę fizyczną połączeń, jeżeli są ok to teraz problem "przeniesie" się na drugi silnik jeżeli problem zostanie na starym silniku to... ...kabelkologia. usunąłem komentarz o różnych deklaracjach sterowania STEP1 i STEP2 - doczytałem że mają zdefiniowaną tą samą wartość A tak... AccelStepper stepper1(AccelStepper::FULL4WIRE, motorPin1, motorPin3, motorPin2, motorPin4) AccelStepper stepper2(AccelStepper::FULL4WIRE, motorPin5, motorPin6, motorPin7, motorPin8) jak bym wszystko wiedział to prowadził bym forum a że nie wiem to czytam bibliotekę AccelStepper i porównuję to z twoim programem i wychodzi mi że zmiksowałeś deklarację z funkcją. Gdzie deklarujesz rodzaj silnika (ilość połączeń)? W bibliotece nie spotkałem jednoczesnej deklaracji mikrokroków i pinów, a tak odczytuję u Ciebie... Mam nadzieję że nie piszę idiotyzmów, a jeżeli tak to będę mógł... ...usunąć post
  9. Świetny pomysł i realizacja - taka wczesna ROBOedukacja jest szansą dla młodych pokoleń!
  10. wmaker

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    Nie wiem czy to już "masz" więc dopisuję. Funkcja distanceToGo () jest tu warunkiem logicznym funkcji if, operator == nie przypisuje/ustala wartości 0 lecz sprawdza czy ma wartość zero. Sama funkcja distanceToGo () sprawdza czy silnik nie ma jeszcze jakieś kroki do "zrobienia". Rozumem to tak że gdyby nie było tego warunku możliwe było by wykonanie komendy ruchu przed ukończeniem jazdy silnika i wtedy "rozjechało" by się liczenie kroków pomiędzy krańcowymi miejscami postoju.
  11. Wyczaiłem: // modyfikacja DualMotorShield.pde // -*- mode: C++ -*- // // Run 2 simultaneous steppers // with 2 DRV8825 // and the movement is determined by HC SR04 ultrasound sensor // below 25 cm is reewerse move #include <AccelStepper.h> //ultrasonic sensor pins #define trigPin 10 #define echoPin 11 // The L Stepper pins #define stepperL_DIR_PIN 3 #define stepperL_STEP_PIN 2 // The R stepper pins #define stepperR_DIR_PIN 5 #define stepperR_STEP_PIN 4 unsigned long aktualnyCzas = 0; unsigned long zapamietanyCzasPrzeszkody = 0; unsigned long zapamietanyCzasEcho = 0; long czas = 0; int minOdleglosc = 25; // odległość włączająca REVERS // Define some steppers and the pins the will use AccelStepper stepperL(AccelStepper::DRIVER, stepperL_STEP_PIN, stepperL_DIR_PIN); AccelStepper stepperR(AccelStepper::DRIVER, stepperR_STEP_PIN, stepperR_DIR_PIN); void setup() { pinMode(trigPin, OUTPUT); //Pin - trig jako wyjście pinMode(echoPin, INPUT); //Pin - echo, jako wejście Serial.begin (9600); stepperL.setMaxSpeed(200.0); stepperL.setAcceleration(10.0); // stepperL.setSpeed(500.0); stepperR.setMaxSpeed(200.0); stepperR.setAcceleration(10.0); // stepperR.setSpeed(500.0); } void loop() { forward(); //jazda do przodu aktualnyCzas = millis(); //Pobierz liczbe milisekund od startu if ((aktualnyCzas - zapamietanyCzasEcho) >330UL) // wysyłaj echo 3 razy na sekundę { zapamietanyCzasEcho = aktualnyCzas; //Zapamietaj czas Echa digitalWrite(trigPin, HIGH); // włącz trig if ((aktualnyCzas - zapamietanyCzasEcho) >=0,01UL) //wyłącz trig po 10ms. { digitalWrite(trigPin, LOW); czas = pulseIn(echoPin, HIGH); Serial.print("pomiar "); Serial.println(czas/58); } } if ((czas/58 < minOdleglosc) && (czas!=0) ) // włącz revers gdy przeszkoda bliżej niż 25cm i eliminuj błędny odczyt"0" { //Serial.println(czas/58); aktualnyCzas = millis(); //Pobierz liczbe milisekund od startu zapamietanyCzasPrzeszkody = aktualnyCzas; //Zapamietaj czas przeszkody while ((aktualnyCzas - zapamietanyCzasPrzeszkody) < 1500UL) //Włącz LewyRevers na 1,5s { //Serial.println(czas/58); aktualnyCzas = millis(); //Pobierz liczbe milisekund od startu revers(); } aktualnyCzas = millis(); //Pobierz liczbe milisekund od startu while ((aktualnyCzas - zapamietanyCzasPrzeszkody) < 5000UL) //Włącz Revers na 5s, { aktualnyCzas = millis(); //Pobierz liczbe milisekund od startu //Serial.println(czas/58); Lrevers(); } } } void forward() { stepperL.setSpeed(-300.0); stepperR.setSpeed(-300.0); stepperL.runSpeed(); stepperR.runSpeed(); //FORWARD silników } void revers() { stepperL.setSpeed(300.0); stepperR.setSpeed(300.0); stepperL.runSpeed(); stepperR.runSpeed(); //REWERS silników } void Lrevers() { stepperL.setSpeed(300.0); stepperR.setSpeed(0.0); stepperL.runSpeed(); stepperR.runSpeed(); //REWERS silników } void Rrevers() { stepperL.setSpeed(00.0); stepperR.setSpeed(300.0); stepperL.runSpeed(); stepperR.runSpeed(); //REWERS silników } brakowało uaktualnienia parametru aktualnyCzas = millis(); wewnątrz pętli while. Dziękuję - niby proste ale żmudne więc dzięki waszej pomocy/zainteresowaniu idzie lepiej Teraz będę zmieniał sensor zbliżeniowy na 4 x IR i rozbuduję gamę reakcji w zależności od kombinacji sygnałów z sensorów. Do tego dokładam chłodzenie driverów silników krokowych żeby podnieść natężenie zasilania i przechodzę z 12v na 24v - potrzebuję więcej koników pod maską .
  12. wmaker

    Sterowanie silnikiem krokowym - 28byj-48 + ULN2003

    potraktuj proszę moją "analizę" jako wspólną naukę, nie jako głos ekspercki - też gniotę sterowanie krokowymi tyle że przez sensory środowiskowe i gdy docieram do "ściany" sprawdzam efekty NIEdziałania kodu zgodnie z praktyczną sugestią Trekera (czyli wyświetleniem czegoś z danej pętli/warunku), poza tym jakiś czas z dala od komputera pomaga spojrzeć na kod świeżym okiem . Sprawdzenie czy steper2 dotarł na wyznaczone miejsce dał bym tak: case 0x343442BD: stepper2.moveTo(4096); //jedz silnikiem na pozycje 4096 delay (200); // zakładam że zawieszenie(delay) następuje po zrealzowaniu przez AcelStepper komendy czyli silnik dojeczał do końca Serial.println(stepper2.currentPosition()); // sprawdzam czy koniec jest faktycznie na 4096, jeżli nie to coś fizycznie zatrzymuje silnik w innym punkcie np. blokada, albo bezwładność dokręca go dalej break; No i komunikat dał bym TYLKO w jednym miejscu albo rozróżnił je w każdym case jakimś indeksem np. Serial.println("Krokowy 2 poz.4096");
  13. @wmaker zmiana w warunku while parametru aktualnyCzas na millis() ominęła problem choć to w założeniach te same wartości... while (millis() - zapamietanyCzasPrzeszkody < 1500UL) //Włącz LewyRevers na 1,5s nie wiem dlaczego ale działa, czy ktoś wytłumaczy dlaczego poprzednia wersja nie działała?
  14. Utknąłem na powiązaniu ruchu silników z odczytem odległości na czujniku ultradźwiękowym: program staruje (jedzie do przodu) po wykryciu przeszkody bliżej niż 25cm włącza revers i już tak zostaje (revers + odczyt tej samej, ostatniej wartości odległości) czyli więźnie w pętli while. Proszę o pomoc i motywację bo trochę się wypaliłem żeby tu dojść // modyfikacja DualMotorShield.pde // -*- mode: C++ -*- // // Run 2 simultaneous steppers // with 2 DRV8825 // and the movement is determined by HC SR04 ultrasound sensor // below 25 cm is reewerse move #include <AccelStepper.h> //ultrasonic sensor pins #define trigPin 8 #define echoPin 9 // The L Stepper pins #define stepperL_DIR_PIN 3 #define stepperL_STEP_PIN 2 // The R stepper pins #define stepperR_DIR_PIN 5 #define stepperR_STEP_PIN 4 unsigned long aktualnyCzas = 0; unsigned long zapamietanyCzasPrzeszkody = 0; unsigned long zapamietanyCzasEcho = 0; long czas; int minOdleglosc = 25; // odległość włączająca REVERS // Define some steppers and the pins the will use AccelStepper stepperL(AccelStepper::DRIVER, stepperL_STEP_PIN, stepperL_DIR_PIN); AccelStepper stepperR(AccelStepper::DRIVER, stepperR_STEP_PIN, stepperR_DIR_PIN); void setup() { pinMode(trigPin, OUTPUT); //Pin - trig jako wyjście pinMode(echoPin, INPUT); //Pin - echo, jako wejście Serial.begin (9600); stepperL.setMaxSpeed(200.0); stepperL.setAcceleration(10.0); // stepperL.setSpeed(500.0); stepperR.setMaxSpeed(200.0); stepperR.setAcceleration(10.0); // stepperR.setSpeed(500.0); } void loop() { //Pobierz liczbe milisekund od startu aktualnyCzas = millis(); forward(); //jazda do przodu //revers(); digitalWrite(trigPin, LOW); if (aktualnyCzas - zapamietanyCzasEcho >330UL) // wysyłaj echo 3 razy na sekundę { zapamietanyCzasEcho = aktualnyCzas; //Zapamietaj czas Echa digitalWrite(trigPin, HIGH); // włącz trig if (aktualnyCzas - zapamietanyCzasEcho >=0,01UL) //wyłącz trig po 10ms. { digitalWrite(trigPin, LOW); czas = pulseIn(echoPin, HIGH); //Serial.println(czas/58); } } if ((czas/58 < minOdleglosc) && (czas!=0) ) // włącz revers gdy przeszkoda bliżej niż 25cm i eliminuj błędny odczyt"0" { //Serial.println(czas/58); zapamietanyCzasPrzeszkody = aktualnyCzas; //Zapamietaj czas przeszkody while (aktualnyCzas - zapamietanyCzasPrzeszkody < 500UL) //Włącz Revers na 5s, { Serial.println(czas/58); revers(); } /*} else { forward(); */ } } void forward() { stepperL.setSpeed(-300.0); stepperR.setSpeed(-300.0); stepperL.runSpeed(); stepperR.runSpeed(); //FORWARD silników } void revers() { stepperL.setSpeed(300.0); stepperR.setSpeed(300.0); stepperL.runSpeed(); stepperR.runSpeed(); //REWERS silników } Może w ogóle nie tędy droga? Z góry dziękuję za poświęcony czas.
  15. FORBOT jest kopalnią wiedzy! Co równie istotne artykuły i kursy są komplementarne z merytorycznymi, inteligentnymi dyskusjami. Do tego kursu obowiązkowo powinna być podlinkowana ta: Słowa uznania dla WSZYSTKICH jej uczestników, powiem tylko że czytałem/analizowałem kody i uczyłem się może wolniej niż SOYER ale też z frajdą. THX.
×