deshipu Sierpień 30, 2018 Udostępnij Sierpień 30, 2018 (edytowany) Mówiłeś, że zasilasz serwo z zasilacza, a ja widzę na schemacie, że je podłączyłeś do pinu 5V arduino i zasilasz je z niego. Poczytaj sobie to: https://forbot.pl/blog/kurs-arduino-silniki-pwm-serwomechanizm-zewnetrzne-biblioteki-id3913 ze szczególnym uwzględnieniem zasilania. Edytowano Sierpień 30, 2018 przez deshipu Cytuj Link do komentarza Share on other sites More sharing options...
digitalread Sierpień 30, 2018 Autor tematu Udostępnij Sierpień 30, 2018 Ok mam tak podłączone przez stabilizator a na wyjsciu dodatkowo plus na wyjsciu stabilizatora razem z serwo tak samo masa razem, ale to nic nie zmienia zasilacz podłączony i dalej nic. Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Sierpień 30, 2018 Udostępnij Sierpień 30, 2018 Dodaj sobie Serial.print wyświetlający wartości zmiennej "wartrosc" i sprawdź na monitorze portu szeregowego jak to działa z tym potencjometrem. Cytuj Link do komentarza Share on other sites More sharing options...
digitalread Sierpień 30, 2018 Autor tematu Udostępnij Sierpień 30, 2018 Dziwne wyniki wychodzą oczywiście potencjometr był w tej samej pozycji. Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Nawyk Sierpień 30, 2018 Udostępnij Sierpień 30, 2018 2 godziny temu, digitalread napisał: #include <Servo.h> //biblioteka serwa #define LED 9 // definicja diody led jako 9 wyjscie Servo moje_serwo; // stworz obiekt moje_serwo do kontroli serwa int wypelnienie = 0; // zmienne do sterowania wypełnieniem sygnału PWM diod LED int zmiana = 5; int potencjometr = A0; // pin analogowy do odczytu potencjometra int wartorsc; // zmienna przechowujaca odczyt z potencjometru void setup() { moje_serwo.attach(3); // serwo podlaczone jest do pinu 3 pinMode(LED,OUTPUT); //wyjscie diody LED } void loop() { analogWrite(LED,wypelnienie); if(wypelnienie<255) //jesli dioda nie swieci na 100% wypelnienia { wypelnienie+= zmiana; //zwieksz wypelnienie do 100% co 5 } if( wypelnienie==255) //jesli wypelnienie jest rowne 100% { while(wypelnienie!=0) { wypelnienie-=zmiana; //zmniejsz wypelnienie do zera i spowrotem analogWrite(LED,wypelnienie); delay(50); } } wartorsc = analogRead(potencjometr); // odczytaj wartosc z potencjometru (wartosc z przedzialu 0-1023) wartorsc = map(wartorsc, 0, 1023, 0, 180); // zeskaluj odczyt do miary katowej (od 0 do 180) lub czasu trwania stanu wysokiego (od 700 do 2300) moje_serwo.write(wartorsc); // ustaw pozycje serwa z zeskalowanego odczytu } Stworzyłem takie coś, ale serwo głupieje nie reaguje na obrót gałką potencjometru, a diody nawet się nie zapalają.... Pomoże ktoś poprawić kod? Ten Twój kod najpierw bardzo szybko zapala LED, czyta potencjometr i wysyła coś na serwo, a potem przez 2550 ms nie robi nic oprócz powolnego gaszenia diody LED... Tak miało być? Co właściwie chcesz osiągnąć? Jak dioda się zapala, to chcesz sterować serwem, a jak gaśnie to nie chcesz sterować serwem? Jeśli tak, to wystarczy dodać jakiś delay na końcu funkcji loop'a. Jeśli chcesz sterować serwem i równocześnie gasić/zapalać LED, to spróbuj może takiej koncepcji: bool flaga = false; void loop(void) { if (!flaga) { //zapalaj LED if (wypelnienie < 255) { analogWrite(LED, wypelnienie); wypelnienie += zmiana; } else { wypelnienie = 255; // na wypadek gdybys przeskoczyl 255 flaga = true; } } else { //gas LED if (wypelnienie > 0) { analogWrite(LED, wypelnienie); wypelnienie -= zmiana; } else { wypelnienie = 0; // na wypadek gdybys przeskoczyl 0 flaga = false; } } // tutaj rob costam z serwem i potencjometrem delay(50); } Cytuj Link do komentarza Share on other sites More sharing options...
digitalread Sierpień 30, 2018 Autor tematu Udostępnij Sierpień 30, 2018 18 minut temu, Nawyk napisał: Ten Twój kod najpierw bardzo szybko zapala LED, czyta potencjometr i wysyła coś na serwo, a potem przez 2550 ms nie robi nic oprócz powolnego gaszenia diody LED... Tak miało być? Co właściwie chcesz osiągnąć? Jak dioda się zapala, to chcesz sterować serwem, a jak gaśnie to nie chcesz sterować serwem? Jeśli tak, to wystarczy dodać jakiś delay na końcu funkcji loop'a. Jeśli chcesz sterować serwem i równocześnie gasić/zapalać LED, to spróbuj może takiej koncepcji: bool flaga = false; void loop(void) { if (!flaga) { //zapalaj LED if (wypelnienie < 255) { analogWrite(LED, wypelnienie); wypelnienie += zmiana; } else { wypelnienie = 255; // na wypadek gdybys przeskoczyl 255 flaga = true; } } else { //gas LED if (wypelnienie > 0) { analogWrite(LED, wypelnienie); wypelnienie -= zmiana; } else { wypelnienie = 0; // na wypadek gdybys przeskoczyl 0 flaga = false; } } // tutaj rob costam z serwem i potencjometrem delay(50); } Chce aby diody sie zapalały i gasły i żeby serwo się obracało. Chodzi o to że mam serwo 360stopni i potencjometrem ustawić mogę prędkość obrotu serwa. Chce zrobić taką ozdobę że diody beda powoli sie zapalać i przygasac, a serwo bedzie powoli obracać diodami. Dziękuję za kod sprawdzę go jak się uda to jeszcze dzisiaj. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!