Skocz do zawartości

Chester11-86

Użytkownicy
  • Zawartość

    86
  • 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

    Sprawdzenie kodu

    Racja, nie wiem co mnie zamroczyło, dziękuję za rzetelne wyjaśnienie
  2. Chester11-86

    Sprawdzenie kodu

    Witam Wszystkich, Napisałem taki prosty program na Arduino Uno i nie mogę go skompilować tego "if'a" w tym miejscu: case 0x343442BD: if (digitalRead(A2) = LOW) { digitalWrite(5, LOW); digitalWrite(6, LOW); Wyskakuje błąd: lvalue required as left operand of assignment Cały kod: #include <IRremote.h> IRrecv irrecv(2); decode_results results; void setup() { pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(A5, INPUT_PULLUP); pinMode(A4, INPUT_PULLUP); pinMode(A3, INPUT_PULLUP); pinMode(A2, INPUT_PULLUP); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0x34347887: if (digitalRead(A5) = LOW) { digitalWrite(3, LOW); digitalWrite(4, LOW); delay (25); }else{ digitalWrite(3, LOW); digitalWrite(4, HIGH); delay (25); } break; case 0x3434827D: if (digitalRead(A4) = LOW) { digitalWrite(3, LOW); digitalWrite(4, LOW); delay (25); }else{ digitalWrite(3, HIGH); digitalWrite(4, LOW); delay (25); } break; case 0x343433CC: digitalWrite(3, LOW); digitalWrite(4, LOW); break; case 0x343455AA: if (digitalRead(A3) = LOW) { digitalWrite(5, LOW); digitalWrite(6, LOW); delay (25); }else{ digitalWrite(5, LOW); digitalWrite(6, HIGH); delay (25); } break; case 0x343442BD: if (digitalRead(A2) = LOW) { digitalWrite(5, LOW); digitalWrite(6, LOW); }else{ digitalWrite(5, HIGH); digitalWrite(6, LOW); delay(25); } break; case 0x3434748B: digitalWrite(5, LOW); digitalWrite(6, LOW); break; } irrecv.resume(); } } Dziękuję za pomoc i za wyjaśnienie problemu
  3. Chester11-86

    Motor shield arduino, ADC?

    grg0 masz rację trzeba się trzymać tabelki ELECTRICAL CHARACTERISTICS Znalazłem gdzieś w szafie układ L298N, podłączyłem wszystko na 5V i działa, o dziwo silnik się zatrzymuję po przekroczeniu odpowiedniej wartości jaką sobie zadam. Rezystor jaki miałem pod ręką to 0,56Om ale bardzo się cieszę ponieważ poznałem sens działania układu oraz sposobu pomiaru ADC. Teraz tylko pozostało czekać na silniki, obliczyć dokładnie wszystkie wartości, dobrać odpowiednie rezystory i sprawdzić jak zachowuje się gotowy układ. Niestety wystąpił inny problem zauważyłem, że zawiesza się program i czasem trzeba kilkakrotnie naciskać przycisk na pilocie aby aktywowała się odpowiednia komenda. Postaram się opisać to w innym wątku aby nie zaśmiecać tego tematu, natomiast jeżeli zakończę pracę obiecuję wrzucić tutaj ostateczny kod programu dla potomnych Pozdrawiam serdecznie!
  4. Chester11-86

    Motor shield arduino, ADC?

    No i znowu masz rację, logikę trzeba zasilić 7V: A silniki będą 6V Myślałem aby kupić gotowy układ: ale niestety nie posiada wyjść do kontroli prądu. Zastanawiam się nad zakupem shieldu i będzie po problemie
  5. Chester11-86

    Motor shield arduino, ADC?

    Przyznaję rację, przeczytałem datasheet'y obu układów i układ L293 porażka, natomiast L298 posiada dwa wyprowadzenia do kontroli. Czy układ logiczny L298 mogę zasilić napięciem 9V?
  6. Chester11-86

    Motor shield arduino, ADC?

    Przepraszam pomyliłem się z numerem chodziło mi o układ L293N, ale to chyba nie robi wielkiej różnicy? Ethanak, możesz się pochwalić swoim projektem ewentualnie schematem? Czekam właśnie na silniki, które chcę docelowo wykorzystać ale do tego czasu ćwiczyłbym sobie program na płytce
  7. Chester11-86

    Motor shield arduino, ADC?

    Witam Wszystkich, Przeszukując stronę botland.com.pl pod względem nakładek na arduino uno do sterowania silników DC napotkałem na taki shield: https://botland.com.pl/pl/arduino-shield-kontrolery-silnikow-i-serw/1215-arduino-motor-shield-7630049200371.html Zaciekawiła mnie informacja dotycząca: "pomiaru natężenia prądu, jaki pobierają podłączone silniki". Czy na tej płytce jest jakiś układ, który umożliwia ten pomiar? Czy podobny układ mogę sam stworzyć mając tylko mostek L298N? Z góry dziękuję za odpowiedź!
  8. 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!
  9. 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ź!
  10. 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ę
  11. 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!
  12. 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...
  13. 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
  14. 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
  15. 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
×