Silnik krokowy+fotorezystor - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Ogólna elektronika (https://forum.arduinopolska.pl/dzial-og%C3%B3lna-elektronika) +--- Wątek: Silnik krokowy+fotorezystor (/watek-silnik-krokowy-fotorezystor) |
Silnik krokowy+fotorezystor - Patrycja - 26-04-2021 Cześć wszystkim, mam drobny problem z tworzeniem kodu, zatrzymałam się na pewnym etapie i zupełnie nie wiem jak ruszyć dalej. Mój silnik (28BYJ-48 + sterownik ULN2003 V2) wykonuje obroty zarówno w jedną jak i w drugą stronę, zależnie od wartości światła (wykorzystuje do tego fotorezystor). Chciałabym jednak aby silnik wykonywał wyznaczoną przeze mnie ilość kroków po czym czekał na zmianę wartości światła i dopiero wtedy ruszał w drugą stronę. Przy aktualnym kodzie silnik tak jak powinien reaguje na zmianę wartości światła, jednak jeśli dojdzie do wyznaczonej przeze mnie ilości kroków całkowicie wstrzymuje swoje działanie i nawet po przysłonieniu fotorezystora nie wykonuje żadnych interakcji. KOD: #define STEPPER_PIN_1 9 #define STEPPER_PIN_2 10 #define STEPPER_PIN_3 11 #define STEPPER_PIN_4 12 int step_number = 0; int fotorezystor = A0; int wartosc= 0; int krok=0; int stepCount = 0; void setup() { Serial.begin(9600); pinMode(STEPPER_PIN_1, OUTPUT); pinMode(STEPPER_PIN_2, OUTPUT); pinMode(STEPPER_PIN_3, OUTPUT); pinMode(STEPPER_PIN_4, OUTPUT); } void loop() { int wartosc = analogRead(fotorezystor); Serial.print("krok:"); Serial.println(krok); if(wartosc>100){ krok++; OneStep(false); delay(4); do{ OneStop(false); if(wartosc>100) continue;}while (krok==500); } if(wartosc<100){ krok--; OneStep(true); delay(4); do{ OneStop(true); if(wartosc>100) continue;}while (krok==200); }} void OneStep(bool dir){ if(dir){ switch(step_number){ case 0: digitalWrite(STEPPER_PIN_1, HIGH); digitalWrite(STEPPER_PIN_2, LOW); digitalWrite(STEPPER_PIN_3, LOW); digitalWrite(STEPPER_PIN_4, LOW); break; case 1: digitalWrite(STEPPER_PIN_1, LOW); digitalWrite(STEPPER_PIN_2, HIGH); digitalWrite(STEPPER_PIN_3, LOW); digitalWrite(STEPPER_PIN_4, LOW); break; case 2: digitalWrite(STEPPER_PIN_1, LOW); digitalWrite(STEPPER_PIN_2, LOW); digitalWrite(STEPPER_PIN_3, HIGH); digitalWrite(STEPPER_PIN_4, LOW); break; case 3: digitalWrite(STEPPER_PIN_1, LOW); digitalWrite(STEPPER_PIN_2, LOW); digitalWrite(STEPPER_PIN_3, LOW); digitalWrite(STEPPER_PIN_4, HIGH); break; } }else{ switch(step_number){ case 0: digitalWrite(STEPPER_PIN_1, LOW); digitalWrite(STEPPER_PIN_2, LOW); digitalWrite(STEPPER_PIN_3, LOW); digitalWrite(STEPPER_PIN_4, HIGH); break; case 1: digitalWrite(STEPPER_PIN_1, LOW); digitalWrite(STEPPER_PIN_2, LOW); digitalWrite(STEPPER_PIN_3, HIGH); digitalWrite(STEPPER_PIN_4, LOW); break; case 2: digitalWrite(STEPPER_PIN_1, LOW); digitalWrite(STEPPER_PIN_2, HIGH); digitalWrite(STEPPER_PIN_3, LOW); digitalWrite(STEPPER_PIN_4, LOW); break; case 3: digitalWrite(STEPPER_PIN_1, HIGH); digitalWrite(STEPPER_PIN_2, LOW); digitalWrite(STEPPER_PIN_3, LOW); digitalWrite(STEPPER_PIN_4, LOW); } }} void OneStop (bool dir){ if (dir){ switch(step_number){ case 0: digitalWrite(STEPPER_PIN_1, LOW); digitalWrite(STEPPER_PIN_2, LOW); digitalWrite(STEPPER_PIN_3, LOW); digitalWrite(STEPPER_PIN_4, LOW); break; case 1: digitalWrite(STEPPER_PIN_1, LOW); digitalWrite(STEPPER_PIN_2, LOW); digitalWrite(STEPPER_PIN_3, LOW); digitalWrite(STEPPER_PIN_4, LOW); break; case 2: digitalWrite(STEPPER_PIN_1, LOW); digitalWrite(STEPPER_PIN_2, LOW); digitalWrite(STEPPER_PIN_3, LOW); digitalWrite(STEPPER_PIN_4, LOW); break; case 3: digitalWrite(STEPPER_PIN_1, LOW); digitalWrite(STEPPER_PIN_2, LOW); digitalWrite(STEPPER_PIN_3, LOW); digitalWrite(STEPPER_PIN_4, LOW); break; } } step_number++; if(step_number > 3){ step_number = 0; }} RE: Silnik krokowy+fotorezystor - Jarewa0606 - 26-04-2021 masz zle podejście albo użyj biblioteki stepper i raczej na pewno https://www.arduino.cc/en/reference/stepper Lub sam napisać obsługę timera RE: Silnik krokowy+fotorezystor - Patrycja - 27-04-2021 (26-04-2021, 21:27)Jarewa0606 napisał(a): masz zle podejście albo użyj biblioteki stepper i raczej na pewno https://www.arduino.cc/en/reference/stepperwłaśnie używając biblioteki i przykładów które są już tam zawarte, arduino nie czyta mi polecenia kręcenia silnikiem w drugą stronę. Mam tu na myśli takie polecenie: void loop() { // step one revolution in one direction: Serial.println("clockwise"); myStepper.step(stepsPerRevolution); delay(500); // step one revolution in the other direction: Serial.println("counterclockwise"); myStepper.step(-stepsPerRevolution); delay(500); silnik kręci się w jedną stronę, a w momencie gdy powinien zmieniać swój kierunek, to po prostu się stopuje, tak jakby nie czyta "-". W czym może leżeć problem ? RE: Silnik krokowy+fotorezystor - Robson Kerman - 27-04-2021 Wyrzuć zmienną wartość na serial i powiedz, co pokaże po zasłonięciu fotorezystora. |