Skocz do zawartości

alshrom

Użytkownicy
  • Zawartość

    15
  • Rejestracja

  • Ostatnio

Reputacja

3 Neutralna

O alshrom

  • Ranga
    2/10

Ostatnio na profilu byli

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

  1. Właśnie widzę, że jedyną opcją na własny wyświetlacz lcd jest tylko zamówienie takiego wg. swojego projektu. Czyli przy wykonywaniu własnego prędkościomierza pozostaje opcja z łączeniem różnych wyświetlaczy.
  2. @deshipu Rozumiem, że w tym przypadku pomysł byłby taki, by tam gdzie miałby być wyświetlane liczby zastosować wyświetlacz 7 segmentowy, a resztę pól wyświetlać za pomocą diod, które to świeciłyby pod przeźroczystym akrylem z naklejoną naklejką tworzącą pole. @Jamik Ze wszystkich propozycji najbardziej podoba mi się ten wyświetlacz z ali. Czy w takim wyświetlaczu mogę samodzielnie stworzyć cały wygląd wyświetlacza, czy ma on już swoje sekcje i style wyświetlania, których zmienić się nie da? @MirekCz Aktualnie badam temat by mieć mniej więcej pojęcie z czym taki projekt się je. W wolnym czasie postaram się pobawić trochę wyświetlaczami w arduino i sprawdzę jak to wygląda.
  3. Cześć wszystkim. Ostatnio poszukiwałem jakiegoś ciekawego licznika motocyklowego i niestety okazało się, że ciężko jest dostać coś co wygląda tak jak bym chciał. Naszło mnie wtedy takie luźnie przemyślenie, czy może idzie taki licznik wykonać samemu. Chodzi mi mniej więcej o coś w tym stylu (jak na zdjęciach). Potrzebowałbym prostego licznika, w którym wskazane są obroty (w postaci zapalających się segmentów), prędkość, przebieg i ew. kilka kontrolek. Czy coś takiego jest wykonalne w domu, czy jest to raczej temat na tyle skomplikowany i czaso/pieniędzo/wiedzo chłonny, że lepiej sobie dać spokój?
  4. Przy ustawieniu serwo na 90 stopni problem jest taki, że cały czas ono pracuje i co jakiś czas drgnie.
  5. Jak dobrze pamiętam to komendę "servo.attach" dałem wielokrotnie w pętli, ponieważ gdy była jednorazowo na początku to miałem problem z serwem przy wyłączeniu i włączeniu ponownym zasilania. Z ciekawości jednak umieściłem ją teraz raz na początku, ale to i tak nic nie dało. Serwo nadal chodzi nierówno. Postaram się więc zaopatrzyć w odpowiednie kondensatory i wpiąć je jak na poniższym schemacie. Teoretycznie kondensatory te mają zniwelować szumy.
  6. Cześć wszystkim. Udało mi się skompletować wszystkie potrzebne rzeczy do stworzenia pewnego mechanizmu. W skrócie mówiąc jest to mechanizm, który ma za zadanie po naciśnięciu przycisku otwierać klapkę. Pozycja otwarcia/zamknięcia klapki ustawiana jest za pomocą krańcówek. Niestety pojawił mi się problem z serwem (PowerHD LF-20MG-360 standard - praca ciągła 360 stopni). W momencie kiedy ma ono otwierać/zamykać klapkę potrafi nierówno pracować. Swój układ testowy zasilam z zasilacza ustawionego na 12V, ponieważ z takiego napięcia mam zasilane krańcówki. Reszta układu zasilana jest z przetwornicy 12V/5V (Pololu D24V22F5 - przetwornica step-down - 5V 2,5A). Spróbowałem sprawdzić, czy może pojedyncze elementy w moim układzie wpływają na pracę serwa. W tym celu napisałem program, który miał załączać serwo, gdy arduino otrzymywało sygnał albo z jakiegoś przycisku, albo z jakiejś krańcówki. Z każdego sygnału serwo chodziło równo. Niestety na docelowym programie serwo cały czas chodzi nierówno, a problem potęguje się jeżeli nastawię niską prędkość obrotową (np. 94 stopnie -serwo stoi przy 91*). Próbowałem naprawić problem poprzez wstawienie na wyjściu z przetwornicy kondensatora 470uF, ale jego obecność nic nie daje. Ostatecznie zauważyłem, że zmieniając wartość "delay" w kodzie programu udaje się trochę poprawić pracę serwo. Przy delay na poziomie 225ms serwo chodzi lepiej niż na 25ms, ale nadal nie jest to praca płynna. Ustawiając duże wartości delay, tracę możliwośc precyzyjnego sterowania klapką, bo zanim sygnał z krańcówki wyłączy serwo, to silnik nadal będzie się kręcił właśnie o tą wartość "delay". Poniżej przedstawiam swój kod, schemat układu i filmiki z pracy serwa (jeden na delay 25ms, drugi na 225ms). #include<Servo.h> Servo servo; void setup() { pinMode(10, INPUT); //przelacznik M pinMode(9, INPUT); //przelacznik D pinMode(8, INPUT); //krancowka na otwarciu pinMode(7, INPUT); //krancowka na zamknieciu pinMode(3, OUTPUT); //servo pin } void loop() { //ruch przesłony if(((digitalRead(10)==HIGH || digitalRead(9)==HIGH)&&(digitalRead(8)==LOW))) { servo.attach(3); servo.write(80); delay(25);} //servo otwiera przesłone else { digitalWrite(3,LOW);} //servo nie działa if((digitalRead(10)==LOW && digitalRead(9)==LOW && digitalRead(7)==LOW)) { servo.attach(3); servo.write(100); delay(25);} //servo zamyka przesłone else { digitalWrite(3,LOW);} //servo nie działa } Jeżeli filmiki są za mało wyraźne to postaram się je wrzucić w lepszej jakości. praca uklad.rar
  7. Cześć wszystkim. Zakupiłem do swojego projektu przekaźnik 2 kanałowy (jak na zdjęciu). Ogólnie chciałem nim sterować za pomocą stanu wysokiego, lecz po podłączeniu okazało się, że cewka załącza się przy podaniu na pin IN stanu niskiego (ale to chyba wymaga tylko zmiany stanu sygnału w programie arduino z H na L) . Niestety nigdzie nie mogę znaleźć schematu do podłączenia takiego modułu, a mam problem z rozszyfrowaniem do czego służy pin COM. Większość schematów przedstawia przekaźniki z pinami: VCC, GND, IN1, IN2. Mój przekaźnik ma dodatkowo pin COM, na który muszę podać napięcie 5V by cewka się załączyła.
  8. Problem w testerze rozwiązany. Zapomniałem, że trzeba podłączyć sygnał sterujący na 0 w płytce. Ostatnie pytanie- jeśli mam taki warunek: if((digitalRead(10)==LOW && digitalRead(9)==LOW && digitalRead(7)==LOW)) { servo.attach(3); servo.write(86); delay(15);} //servo zamyka przesłone else { servo.write(90);} //servo nie działa W tym przypadku, gdy nie naciskam włącznika, serwo nie porusza się, ale cały czas płynie przez nie prąd. Czy dla serwa taka sytuacja jest bez znaczenia (pracowałoby ciągle do kilku godzin), czy lepiej pomyśleć nad tym by odłączyć zasilanie/sygnał z serwa?. edit. Ustawiłem pin serwa jako wyjście, i zamiast "ustawiać" serwo na 90 stopni to wyłączyłem sygnał. Wszystko działa idealnie i nie występują drgania. Dziękuję wszystkim za pomoc.
  9. Dziś przyszło do mnie serwo- PowerHD LF-20MG-360 standard. Stworzyłem prosty program do przetestowania motoru i pojawił się problem. Przy włączeniu programu serwo chwile czeka, rusza się o kilkanaście stopni i następnie znowu czeka. Przy testowaniu zwykłego serwa analogowego zmieniało ono prawidłowo zadaną pozycję, gdy było zasilane z płytki arduino, ale gdy było zasilanie z zasilacza to się trzęsie . Do zasilania użyłem zasilacza 5,5V, 2000mA. Wcześniej, gdy chciałem przetestować serwo na moim docelowym programie to efekt był podobny. Jedynie gdy na zasilaczu zmieniłem napięcie zasilania na 2v to wtedy serwo zaczęło równo się kręcić. Czy problem z moim nowym serwem może wynikać z zasilacza? Dla pewności wstawiam kod do testowania #include <Servo.h> Servo servo; void setup() { servo.attach(9); } void loop() { servo.write(55); }
  10. Na dzień dzisiejszy najbardziej skłaniam się ku pomysłowi by zastosować serwo 360 stopni (kupić gotowe lub przerobić- ważne by miało odpowiedni moment i było wodoodporne). Nie rozumiem tylko jednej rzeczy- na jakiej podstawie działa sterowanie prędkością w takim serwie. Dlaczego czym większa jest nastawa od wartości w której serwo się nie obraca, tym szybciej się ono kręci. Jeżeli nastawię serwo by kręciło się na 95 stopni (gdzie np przy 90 sie nie rusza) to czy uzyskam wtedy moment obrotowy jaki jest deklarowany? Sam silnik z przekładnią byłby wg. mnie najwygodniejszym rozwiązaniem, ale niestety nie znalazłem nic co by pasowało mi obrotami, gabarytami i było wodoodporne.
  11. Chyba wszystko zrozumiałem. Uznaję, że mam trzy opcję do wyboru: 1. Przerabiam serwo na silnik (lub kupuję serwo 360) , i wtedy serwo wykonuje ruch, gdy sygnał od arduino różni się od zablokowanego na potencjometrze (np. 90 stopni). W tym przypadku prędkość serwa będzie zależeć od różnicy między zadanym kątem, a 90 stopni. 2. Stosuję serwo wraz z zamontowanym enkoderem w postaci np. potencjometru. Wtedy po naciśnięciu przycisku mogę mu zadać komendę: wykonuj +1 stopień od wskazania potencjometru, w jakiś odstępach czasowych. I tutaj mam pytanie: czy istnieją serwa modelarskie, które mogą wysyłać sygnał do arduino nt. swojej aktualnej pozycji? 3. Stosuję silnik z przekładnią, którego obroty i kierunek mogę sterować np. za pomocą mostka typu H. Chciałem zastosować serwo, a nie silnik z przekładnią, dlatego że ma małe gabaryty, są wodoodporne, mają duże momenty i można łatwo sterować prędkością obrotową. Z geometrii mojego układu wynika, że potrzebuję napędu, który wykona około 5 obr/min.
  12. Niestety, ale jestem pewny, że będą występowały sytuacje utraty zasilania podczas wykonywania ruchu serwa. Rozumiem, że muszę napisać program w taki sposób by cały czas czytał i zapisywał w pamięci ostatnią pozycję serwa, a następnie przy ponownym odpaleniu na niej się bazował. Czyli jak aktualnie mam sytuacje, że serwo wraca do pozycji zadanej w komendzie- int pos =0; to ma to wyglądać mniej więcej tak: int pos ="ostatnia zapamiętana pozycja". Jeżeli dobrze zrozumiałem to prosiłbym o poradę w jakich komendach szukać rozwiązania/ o czym dokładnie poczytać.
  13. Zmieniłem kod, ale nadal jest problem bo serwo po spełnieniu warunków na ruch wykonuje najpierw szybki ruch na pozycje określoną w linijce "int pos =0/120/150/(co wpisze). Na plus jest to, że jeżeli przerwę zasilanie w pozycji gdzie przesłona ma się nie ruszać to po ponownym uruchomieniu serwo nie wraca z automatu na pozycję 90 stopni. Czy problem nie jest taki, że moje tanie serwo po prostu nie ma pojęcia w jakim miejscu się znajduje i zawsze po utracie zasilania będzie wracać do jakieś bazy? Czy zastosowanie serwa cyfrowego coś zmieni?
  14. Użyłem najtańszego serwa dołączonego do zestawu arduino. Docelowo planuję użyć jakiegoś serwa z momentem 1-1.5 Nm, wodoodpornego i z metalowymi zębami.
  15. Cześć wszystkim! Zostałem postawiony przed koniecznością stworzenia pewnego mechanizmu. Jedna z jego części ma działać w następujący sposób: Przy załączonym przycisku klapka ma otwierać się w stronę krańcówki K1. W momencie osiągnięcia K1 krańcówka wysyła sygnał do arduino i napęd ma się wyłączyć. Przy wyłączeniu przycisku klapka powinna wrócić w położenie K2. Klapka ma pokonać dystans 80mm w czasie ~2sek. Pierwotna koncepcja zakładała wykorzystanie zwykłego silniczka ze śrubą pociągową, lecz niestety gabaryty nie pozwalają na zastosowanie takiego rozwiązania. Zdecydowałem się więc na użycie serwomechanizmu (jest mały, zapewnia duży moment, łatwo sterować prędkością otwierania klapki). Ogólnie po napisaniu programu wszystko działało zgodnie z założoną logiką, lecz problem pojawił się po ponownym uruchomieniu arduino. Po osiągnięciu pozycji K1 i przy załączonym przycisku odłączyłem zasilanie. Po ponownym uruchomieniu, serwomechanizm ustawił się szybko na pozycję 90 stopni, choć przycisk cały czas był wciśnięty serwo nie dążył do pozycji K1. Dopiero po wyciśnięciu przycisku serwo wykonało ruch (niestety szybki, a nie powolny jak zaprogramowałem) w pozycję K2. Do stworzenia prototypu użyłem elementów z zestawu startowego arduino. Niestety, ale w swoim projekcie nie mogę sobie pozwolić na to by po ponownym podłączeniu zasilania serwo wykonywało jakieś szybkie ruchy na pozycje 0. Czy jest jakiś sposób, który może rozwiązać mój problem? Dodam, że moja wiedza z programowania jest podstawowa, więc proszę o prosty język i wyrozumiałość. W kodzie mam sterowanie na dwa przełączniki, ale nie ma to większego znaczenia. #include<Servo.h> int pos =0; Servo servo; void setup() { pinMode(10, INPUT); //przelacznik 1 pinMode(9, INPUT); //przelacznik 2 pinMode(8, INPUT); //krancowka na otwarciu pinMode(7, INPUT); //krancowka na zamknieciu servo.attach(3); } void loop() { //ruch przesłony if(((digitalRead(10)==HIGH || digitalRead(9)==HIGH)&&(digitalRead(8)==LOW)) && pos< 180) {pos++; servo.write(pos); delay(15);} //servo otwiera przesłone else {digitalWrite(2,LOW);} //servo nie działa if((digitalRead(10)==LOW && digitalRead(9)==LOW && digitalRead(7)==LOW) && pos>0) {pos--; servo.write(pos); delay(15);} //servo zamyka przesłone else {digitalWrite(2,LOW);} //servo nie działa }
×
×
  • Utwórz nowe...