Skocz do zawartości

Tablica liderów


Popularna zawartość

Pokazuje zawartość z najwyższą reputacją 29.03.2019 we wszystkich miejscach

  1. 4 punkty
    Właśnie zaakceptowałem Twój opis, możesz go teraz zgłosić do akcji rabatowej umieszczając link w temacie zbiorczym. Dziękuję za przedstawienie ciekawego projektu, zachęcam do prezentowania kolejnych DIY oraz aktywności na naszym forum Świetny projekt, bardzo lubię takie klimaty! Tutaj dla porównania moje "analogowe" statystyki Forbota (liczba osób online + odsłony z całego dnia):
  2. 3 punkty
    Od momentu poznania ESP8266 bardzo spodobał mi się ten układ. Gdy skończyłem robić pierwszy projekt oparty na tym układzie od razu zacząłem wymyślać kolejny. Dzisiaj chciałbym Wam przedstawić sterownik oświetlenia. Współpracuje on ze zwykłym włącznikiem świecznikowym i mieści się w puszce fi60, dzięki czemu (nad każdym włącznikiem światła mam puszkę fi70) w puszcze fi70 zostaje jeszcze sporo miejsca na kable. Po zaprojektowaniu płytki w programie Eagle zleciłem wyprodukowanie jej firmie jlcpcb. Wszystko trwało tydzień (zamawiałem również inne płytki dlatego tyle to trwało ). Płytki wysłali w piątek po południu czasu lokalnego a w poniedziałek płaciłem już vat u kuriera z DHL . Płytki wyglądają bardzo dobrze (sami możecie ocenić jakość produktu ) Po odebraniu płytek zacząłem wszystko składać w całość. ESP8266 12F zostało wykorzystane jako "mózg" płytki. Jako zasilacz służy Hi-Link HLK-PM01 230V na 5V. Za załączenie napięcia odpowiedzialne są dwa przekaźniki z cewką na 5V. Dodatkowo do każdego przekaźnika dołożyłem diodę prostowniczą. ESP jest zasilane napięciem 3.3v przez co musiałem zastosować LDO. Dodatkowo na wejściu fazy do układu zamontowałem bezpiecznik firmy bel fuse. Żeby esp mogło załączać przekaźnik musiałem wykorzystać tranzystor bc817 w wersji smd. Do tego potrzebowałem jedno złącze ark raster 5mm podwójne, oraz dwa złącza ark raster 5mm potrójne. Całość po zlutowaniu i umieszczeniu w puszcze fi60 wygląda następująco: Teraz przyszła kolej na oprogramowanie. Zdecydowałem się zrobić prostą stronę konfiguracyjną na której możemy: zmienić hasło do urządzenia zmienić dane serwera mqtt (sterowanie z każdego miejsca na świecie ) zmienić przyłączenie do sieci wi-fi zobaczyć jak długo pracuje nasz układ wybrać ilość podpiętych włączników (jedno albo dwa) Całość jest również sterowana z telefonu z systemem android. Teraz przymierzam się do zrobienia wersji v2 tego sterownika, chcę by był oparty na triakach i optotriakach (z tego co wyliczyłem to żarówka led o mocy 15W pobiera tylko 60mA a świeci jak zwykła żarówka 120W) oraz będzie posiadała wsparcie dla dotykowych podświetlanych włączników (moduły httm oraz panele marki weilak, wszystko mam tylko projekt został ) Jestem bardzo ciekaw Waszych opinii, dajcie znać w komentarzach co myślicie mo jej konstrukcji
  3. 3 punkty
    Witajcie. Chciałbym Wam przedstawić prosty sposób wykorzystania modułu ESP-32, który użyłem do stworzenia urządzenia, za pomocą którego możecie śledzić poziom zainteresowania wybranym repozytorium GitHub. Dzięki wbudowanym dwóm wyświetlaczom, będziecie na bieżąco informowani o: aktualnej liczbie gwiazdek dziennej liczbie gwiazdek aktualnej liczbie obserwujących aktualnej liczbie forków Początkowo chciałem skorzystać ze starszego modułu ESP8266 12-F, jednak napotkałem problem który objawiał się przy wykonywaniu requesta do api GitHub. Podczas oczekiwania na odpowiedź z serwera, na wyświetlaczach zanikały wszystkie cyfry i wyglądało to jakby coś było nie tak z urządzeniem. Z pomocą przyszedł układ ESP-32, który oparty jest na dwóch rdzeniach. Była to świetna okazja aby zapoznać się z tym modułem, ponieważ wcześniejsze projekty wykonywałem na ESP8266. Użycie nowszej odsłony ESP, pozwoliło mi wysyłać requesty asynchronicznie. Do działania ramki wymagane jest połączenie z siecią poprzez WiFi. Tutaj świetnie sprawdziła się biblioteka "WiFi Manager", która umożliwiła mi szybkie podłączenie ramki do dowolnej sieci. Jeżeli chodzi o zasilanie to jest to napięcie 5V, które podaje poprzez wtyki USB. W obudowie ramki znajdują się trzy przyciski. Pierwszy służy jako włącznik. Pozostałe dwa to włączniki chwilowe. Po wciśnięciu pierwszego na wyświetlaczu prezentowany jest adres IP, który wykorzystujemy przy konfiguracji. Natomiast drugi przycisk resetuje liczbę gwiazdek z dnia. Do układu podłączona jest 3 kolorowa dioda LED, która informuje nas o stanie połączenia: CZERWONY – brak sieci, błąd podczas pobierania danych ZIELONY – połączenie sieciowe ustanowione, dane pobrane poprawnie NIEBIESKI – tryb access pointu ( zanik sieci ) Domyślnie odświeżanie danych odbywa się co 90 sekund. Oczywiście interwał można zmienić. Ale należy uważać, aby nie wykonywać do api GitHub więcej niż 60 requestów na godzinę, ponieważ serwer ma ustawiony RateLimit. Po przekroczeniu ilości zapytań zostaniemy zablokowani na godzinę. Jak już wspomniałem wyżej, pod adresem IP jaki przydzielony został do urządzenia działa prosty web server, który serwuje nam stronę z konfiguracją, gdzie musimy wprowadzić nazwę użytkownika repozytorium oraz nazwę repozytorium które chcemy obserwować. Po zapisaniu konfiguracji w pamięci EEPROM urządzenie jest restartowane i gotowe do użycia. Dodatkowym atutem urządzenia jest automatyczna aktualizacja oprogramowania poprzez HTTPS OTA. Sprawdzanie wersji następuje podczas uruchomienia oraz po północy. Urządzenie jest w pełni bezobsługowe. Gdy wystąpi zanik sieci, ESP cały czas będzie próbowało nawiązać połączenie za pośrednictwem zapamiętanych poświadczeń. Jeśli sieć nie będzie dostępna, przełączy się w tryb access pointu ( ssid: "GITHUB-FRAME"). Jeśli nie zostanie wybrana nowa sieć w menadżerze sieci, to po czasie 3 minut, nastąpi restart i proces się powtórzy. Tak pokrótce, wygląda zasada działania całego układu. Poniżej przedstawię Wam główne etapy budowy całej ramki. A więc zaczynamy. LISTA ELEMENTÓW: ESP-32 WROOM DevKit 1.0 – 1 szt. Wyświetlacz LED 4-Cyfrowy TM1637 – 0.56" – 1 szt. Wyświetlacz LED 4-Cyfrowy TM1637 - 0.36" – 1 szt. 4-pinowy przewód, żeński – żeński – raster 2.54 – 4 szt. Gniazdo + wtyk, JST – JST – 2 szt. Gniazdo + wtyk, mikro JST – mikro JST – 2 szt. Płytka uniwersalna PCB 50x70mm PI-01 – 1 szt. Rezystor węglowy – 220 ohm – 5 szt. Rezystor węglowy – 2,2k ohm – 3 szt. Zworki do płytek stykowych - 1 zestaw Wtyk goldpin kątowy 4 pinowy, raster 2,54mm – 4 szt. Dioda LED 5mm RGB wsp. Anoda – 1 szt. Dioda LED 3mm biała – 3 szt. Przełącznik chwilowy okrągły – 10mm – 2 szt. Przełącznik kołyskowy ON-OFF – 1 szt. Kabel USB A – USB micro – 1 szt. Zasilacz 5V z gniazdem USB A – 1 szt. Rurki termokurczliwe - 1 szt. Ramka IKEA RIBBA – 21x30cm ( ważne żeby była dość głęboka, aby zmieścić elektronkę ) – 1 szt. Papier samoprzylepny do drukarki – 1 szt. Rura elektroinstalacyjna RLM 16 – 1 szt. NARZĘDZIA: Lutownica Cyna Obcążki Wiertarka lub wkrętarka Wiertła: 7, 10, 13 Pistolet do kleju na gorąco Nóż Drukarka ZAŁOŻENIA: Stabilność działania Intuicyjna obsługa Szybka adaptacja w miejscu instalacji Estetyka Plan Początkowo ramka miała powstać pod konkretnie wybrane repozytorium i wyświetlać tylko liczbę gwiazdek. Ale stwierdziłem, że i tak pobieram inne dane z endpointa api to czemu miałbym ich nie wyświetlić. Postanowiłem, że dodam dwa nowe klucze: "forks" oraz "watchers" i wyświetlać je kolejno w 5 sekundowym odstępie czasowym. Jeżeli chodzi o repozytorium, to dając możliwość wprowadzenia własnych ustawień url-a, zwiększyłem tym samym skalowalność przedsięwzięcia. Do tego doszły automatycznie aktualizacje software-u. Więc taką ramkę może stworzyć każda osoba, która chociaż trochę ma pojęcie o informatyce i niekoniecznie zna się na programowaniu. BUDOWA Prace nad ramką rozpocząłem od budowy prototypu metodą na "pająka". W tym celu skorzystałem z płytki prototypowej, przycisków typu "tact switch", paru zworek oraz kilkunastu przewodów do połączenia wszystkiego w całość. Całe oprogramowanie zostało napisane za pośrednictwem Arduino IDE czyli w języku C. Gdy miałem już działający prototyp, rozpocząłem prace nad przeniesieniem całości na uniwersalną płytkę PCB. Zadanie wydawałoby się proste ale wymagało procesu planowania. W tym celu wykorzystałem oprogramowanie Fritzing. Oprogramowanie to umożliwia stworzenie całej dokumentacji projektu. Na tę chwilę wykorzystałem tylko narzędzie do stworzenia szkicu płytki prototypowej. Mając gotowy już projekt z rozlokowaniem wszystkich elementów i połączeń. Mogłem przystąpić do lutowania. Jak widać na zdjęciach, podczas montażu elementów używałem uchwytu, który stabilnie trzyma płytkę w miejscu. Bardzo ułatwił mi pracę. Po przylutowaniu wszystkich elementów elektronicznych, wlutowałem przewody z gniazdami, dzięki którym będę mógł odłączyć układ od samej konstrukcji ramki Teraz przyszedł czas na najtrudniejszy etap jakim było dostosowanie drewnianej ramki do potrzeb projektu. W programie Photoshop stworzyłem szablon do wiercenia i wycinania potrzebnych otworów. Szablony te znajdziecie również w repozytorium projektu. Po wydrukowaniu szablonu przykleiłem kartkę do “pleców ramki” i wyciąłem wszystkie otwory. Trochę trzeba się do tego przyłożyć i mieć sporo cierpliwości. Cięcie, pasowanie, cięcie, pasowanie aż do skutku. Ufff. W końcu mogłem przystąpić do zamontowania wyświetlaczy oraz diod LED. Z pomocą przyszedł mi klej na gorąco. Trzyma mocno i pewnie, wystarczająco do tego typu prac. Trzy diody LED umieściłem w przyciętych krążkach z białej rury pcv ( tych do prowadzenia przewodów po ścianach ) a górę zaślepiłem kawałkiem plastiku w którym zamocowałem diody. A tak całość prezentuje się od frontu Za pomocą 4 żyłowych przewodów zakończonych wtykami żeńskimi, połączyłem wszystkie elementy z główną płytką. W celu szybszej identyfikacji przewodów, oznaczyłem każde połączenie za pomocą lakierów do paznokci ( pozdrawiam swoją żonę Magdalenę ). Główny układ przykleiłem do pleców ramki również za pomocą kleju na gorąco. Na koniec pomalowałem cały front na biało farbą emulsyjną, ponieważ papier który używa się w drukarkach ma małą gramaturę co sprawia, że jest półprzezroczysty. Dzięki podbiciu koloru tła biel będzie intensywniejsza. W ostatecznej wersji grafikę wydrukowałem na papierze fotograficznym, który jest na tyle gruby, że malowanie okazało się być zbędne. SOFTWARE Cały program opiera się na dwóch pętlach. Pierwsza pętla Task1, sprawdza czy użytkownik wprowadził url repozytorium z którego mają zostać pobrane dane. Jeżeli konfiguracja została wprowadzona, program wywołuje funkcję getData(), która odpowiedzialna jest za pobranie danych z API. Interwał tej pętli definiuje zmienna requestInterval, która domyślnie posiada wartość 90 ( czyli 90 sekund). Druga pętla Task2, służy do wyświetlania odpowiednich danych na wyświetlaczach oraz podświetlania ikon. Tutaj również sprawdzany jest stan na pinach 27 i 15 ( przyciski BUTTON_IP oraz BUTTON_RESET_TODAY). Interwał tej pętli to około 15 sekund. Po północy następuje sprawdzenie dostępności nowszej wersji oprogramowania oraz resetowany jest licznik gwiazdek otrzymanych w ciągu całego dnia. Poniżej znajdziecie link do repozytorium z projektem: OPROGRAMOWANIE + SZABLONY DO DRUKU PODSUMOWANIE Przyznam się szczerze, że prototyp urządzenia miałem już gotowy rok temu. Ale ze względu na gruntowny remont mieszkania musiałem odsunąć hobby na dalszy plan. Rozciągnięcie projektu w czasie sprawiło, że przy każdym powrocie zawsze coś zmieniałem, rozbudowywałem. Wszystko wtedy można przemyśleć kilka razy i na spokojnie zastanowić się nad rozwiązaniem jakiegoś problemu. Na co dzień zajmuję się programowaniem front-endu, ale dzięki takim projektom mogę połączyć moje główne zainteresowania: majsterkowanie, elektronikę, grafikę i jak już wcześniej wspomniałem, programowanie i stworzyć coś namacalnego i cieszącego oko. Zachęcam wszystkich do twórczego działania i poszerzania swojej wiedzy. Tego typu projekty dadzą Wam satysfakcję, świetną zabawę oraz sporo nauczą. Także klawiatury, lutownice, piły, śrubokręty, wiertarki w dłoń i do działania! Instrukcję już macie Do następnego projektu! Pozdrawiam.
  4. 2 punkty
    Chociaż temat bardzo popularny to świetna robota ! Musze się też wziąć za tego typu przeróbkę oświetlenia. Wszystkie potrzebne elementy mam. PS. łącznik świecznikowy
  5. 2 punkty
    Na tym wyjściu nie ma napięcia ponieważ ten pakiet ma płytkę zabezpieczającą tzw BMS. Ona odcina napięcie na wyjściu żeby nie rozładować pakietu bardziej co mogłoby doprowadzić do uszkodzenia ogniw, albo całego pakietu. Gdybyś miał zasilacz z regulacją prądu i napięcia mógłbyś naładować każde z ogniw osobno podłączając się pomiędzy odpowiednimi stykami, ale nie doradzę Ci nic więcej bo to może się źle skończyć jeśli będzie ładowane w nieodpowiedni sposób. Gdybyś zrobił zdjęcie makro tego układu z dużą ilością nóżek, ewentualnie spisał oznaczenie układu (o ile w ogóle jest), bo możliwe, że ta płytka jest również kontrolerem ładowania, to wtedy możliwe byłoby naładowanie tego pakietu. Pakiet nie ładuje się w głośniku?
  6. 1 punkt
    Z niecierpliwością czekam na kolejny odcinek. Trafiliście w 10 jeśli chodzi o ten kurs, bo jeszcze kursu na temat LTSpice nie było ani w polskojęzycznej wersji ani w angielskojęzycznej. Perfekcyjnie zrobiony odcienk merytorycznie. Można wiedzieć ile będzie odcinków i co ile będą pojawiać się nowe wpisy?
  7. 1 punkt
    Widzę sporo pracy włożyłeś w budowę a tym samym i czasu. Gratki! Może kiedyś również zbuduję jakiegoś robota. Ale chciałbym żeby był bardziej smart i przydał mi się do czegoś więcej niż tylko do zabawy. Chociaż dla mojego synka byłaby to frajda.
  8. 1 punkt
    Ciężko zagwarantować 100% niezawodności. Bezpieczniejsze w tym względzie byłoby chyba Arduino (brak karty pamięci, systemu operacyjnego itd). Jednak z drugiej strony, jeśli powstają dedykowane projekty pod RPi do takich zastosowań to chyba muszą się jednak sprawdzać. Przy zanikach napięcia będziesz miał jednak problemy, żaden komputer nie lubi nagłego zaniku zasilania.
  9. 1 punkt
    @MonsterX, witam na forum Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start: Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników. Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć? Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości. Jeśli chcesz zrobić coś tylko po to, aby sterować terrarium to wybierz dedykowany termostat i będzie po problemie Wersję z Raspberry Pi wybrałbym tylko w przypadku, jeśli lubisz/chcesz majsterkować, Raspberry Pi wydaje Ci się ciekawym tematem, którym chcesz się zająć, a przy okazji zbudujesz sterownik terrarium. Może trochę niepopularna opinia (jak na takie forum), ale po prostu czasami lepiej kupić dedykowane urządzenie, podłączyć i zapomnieć
  10. 1 punkt
    Właśnie zaakceptowałem Twój opis, możesz go teraz zgłosić do akcji rabatowej umieszczając link w temacie zbiorczym. Dziękuję za przedstawienie ciekawego projektu, zachęcam do prezentowania kolejnych DIY oraz aktywności na naszym forum
  11. 1 punkt
    Super, właśnie chciałem sobie odświeżyć wiedzę ze studiów z tego zakresu, bo nagle nieoczekiwanie okazała się przydatna ;) LTSpice jest bardzo przydatny i fajnie by go było dobrze poznać, a przy okazji korzystając z takich narzędzi, trzeba mieś pojęcie czego powinniśmy się spodziewać inaczej możemy radośnie popełniać straszne błędy.
  12. 1 punkt
    Świetny kurs się zapowiada! Oczywiście że jest potrzeba jego kontynuacji...z niecierpliwością czekam na kolejne części!
  13. 1 punkt
    Filmik bardzo amatorski, nagrany już jakiś czas temu ale zawszę to trochę więcej informacji
  14. 1 punkt
    Dziękuję. Wydaje mi się ze fajnym rozwiązaniem byłoby wykorzystanie do tego celu LED matrix.
  15. 1 punkt
    Super projekt, wykonanie naprawdę estetyczne! Niedawno kupiłem klawiaturkę ms surface i zaciekawiła mnie ukryta dioda, która widać dopiero gdy świeci, ale nie wiedziałem jak można to wykorzystać, a tu taka inspiracja Może licznik odsłon mnie nie do końca interesuje ale potrzebowałbym ramkę, która wyświetla tekst z API. Masz pomysł jak można wyświetlać litery które prześwitywałyby przez papier? Jak przyłożyłem dla testu kartkę papieru do monitora IPS to nie prześwituje, może napisy z OLEDa na wygaszonym tle byłyby widoczne?
  16. 1 punkt
    Dzięki. Miło poznać. Uważam, że najważniejsze w tego typu projektach jest właśnie odpowiednie podanie. Projekt powinien być nie tylko funkcjonalny, ale i estetyczny. To moim zdaniem znacznie podnosi szanse na powodzenie całego przedsięwzięcia.
  17. 1 punkt
    Ogromny szacun za jakość wykonania i za pomysł Nie myślałem że na forum spotkam kogoś z mojego miasta
  18. 1 punkt
    No i o to tu chodzi. Trzeba się nawzajem inspirować. Powodzenia.
  19. 1 punkt
    Najs. Fajna obudowa i te retro wskaźniki. Masz maszynę do wycinania czy zamawiasz cięcie? Ja chyba zakupię jakąś drukarkę 3d. Bo zawsze mam problem z dopasowaniem obudowy. A tak bym miał szyte na wymiar. Co do wskaźników to ostatnio gdzieś widziałem zegar z ich użyciem. Muszę coś podziałać w tej kwestii. Szkoda że dzień jest taki krótki. Ehhh.
  20. 1 punkt
    Nie wiem co ty tam budujesz i czy naprawdę Ci potrzeba aż 8 UNO, i czy musisz wyłączać ich zasilanie itp itd... ale jak już musisz im odłączać zasilanie i chcesz to robić z MEGA to podłącz ich (UNO) zasilanie przez przekaźniki a przekaźniki steruj z megi. Tu masz np moduł: https://botland.com.pl/pl/przekazniki/2966-modul-przekaznikow-8-kanalow-z-optoizolacja-styki-7a240vac-cewka-5v.html
  21. 1 punkt
    Co to jest timelapse? W razie, gdyby ktoś nie wiedział, co mało prawdopodobne, ale jednak - jest to przeciwieństwo slow-motion, czyli film, który jest kilka albo kilkanaście razy przyspieszony. Filmy takie pozwalają obejrzeć zjawiska, które ze swojej natury są bardzo wolne, na przykład wyrastanie ciasta, płynięcie chmur na niebie, rośnięcie roślin i tak dalej. Nagranie timelapse nie jest jakimś wielkim wyczynem, bo większość aparatów i kamerek sportowych ma taki tryb wbudowany, a na telefony komórkowe istnieją tysiące aplikacji realizujących takie właśnie nagranie. Do czego więc może służyć maszyna do timelapse? Najbardziej podstawową wersją timelapse jest oczywiście nieruchomy kadr - ustawiamy kamerę na statywie, uruchamiamy proces nagrywania i zostawiamy wszystko na odpowiedni czas. Filmy takie same w sobie robią już wrażenie, ale znacznie ciekawiej jest, gdy kadr jest zmienny, na przykład gdy zastosujemy panoramowanie (czyli powolny obrót) albo liniowe przesunięcie. Kłopot polega na tym, że obrót taki musi być realizowany bardzo wolno - w tempie dopasowanym do tempa robienia zdjęć. 45 stopni to być może dużo, ale jeżeli kamera ma zarejestrować, powiedzmy, 40 minut materiału przy 30 klatkach na sekundę, to mamy prędkość obrotu rzędu 45/(40*60) = 0,01875 stopnia na sekundę. Żeby było trudniej, kamera musi obracać się płynnie, bo timelapse będzie wyraźnie poszarpany. Do czegoś takiego trzeba już dedykowanego urządzenia: kupionego albo - co znacznie ciekawsze - zrobionego samodzielnie. Komponenty Tym razem kontrolerem stało się Arduino Uno, między innymi dlatego, że razem z shieldem z wyświetlaczem i klawiaturą zapewniło dosyć niskim kosztem interfejs użytkownika. Płynny i w pełni kontrolowany obrót zapewni silnik krokowy, a ten konkretny, czyli SY35ST26-0284A wybrałem w dużej mierze dlatego, że można go zasilić bezpośrednio dwucelowym akumulatorem LiPo. Do silnika należało oczywiście również kupić odpowiedni sterownik. Oprócz tego wyposażyłem się też w obudowę - być może efekt końcowy nie powala estetyką, ale bardzo nie lubię kończyć projektów z gmatwaniną sterczących przewodów i po ukończeniu jeżdżącego robota stwierdziłem, że będę dbał również o wygląd moich projektów. To nie był koniec zakupów - silnik krokowy oferuje 200 kroków na obrót, co daje 1,8 stopnia na krok. Tymczasem ja potrzebowałem stukrotnie większej dokładności, dlatego konieczne było zbudowanie przekładni zębatej. Zębatki Z przekonaniem, że w Internecie można znaleźć wszystko zacząłem szukać zębatek i okazało się, że wcale nie tak łatwo jest znaleźć zębatki do takiego projektu. Byłem ograniczony ich rozmiarem oraz sposobem montażu - nie posiadając wtedy drukarki 3D (na której pewnie sam wydrukowałbym potrzebne koła), miałem też ograniczone możliwości związane z montażem komponentów. W akcie desperacji napisałem email z zapytaniem ofertowym do krakowskiej firmy, która specjalizuje się w produkcji kół zębatych, ale koszty rzędu (o ile dobrze pamiętam) 800 PLN za cztery koła zębate przekraczały wielokrotnie mój budżet na ten projekt. Wróciłem więc do poszukiwań i w końcu znalazłem odpowiednie koła zębate w sklepie conrad.pl. Kupiłem dwa czterdziestozębowe i dwa trzydziestozębowe - w przypadku, gdyby te pierwsze nie zmieściły się wewnątrz obudowy. Oprócz tego kupiłem jedną piętnastkę oraz dwunastkę - ta ostatnia miała otwór na oś pasujący do kupionego przeze mnie silnika krokowego. Przekładnia Teraz musiałem zaprojektować przekładnię - skorzystałem w tym celu z darmowego Solid Edge Drafting - świetnego dwuwymiarowego cada. Pomierzyłem wszystkie przestrzenie suwmiarką i wyszło na to, że przekładnia zmieści się w całości w przedniej, podwyższonej części obudowy. Nie dysponuję żadną maszyną CNC, ale otwory w aluminiowych płytkach musiałem zrobić bardzo dokładnie, bo inaczej zębatki nie zazębiłyby się (w jedną albo drugą stronę) albo obracały ze zbyt dużym oporem. Wpadłem więc na pomysł - wydrukowałem układ otworków w obu płytkach przygotowany wcześniej w cadzie na papierze samoprzylepnym i przykleiłem go na obrabianym aluminium. Potem dociąłem płytki zgodnie z ramkami i wywierciłem otwory w oznaczonych miejscach - okazało się, że taka dokładność była wystarczająca i wszystko ładnie wskoczyło na swoje miejsca. Montaż Po zbudowaniu przekładni nie zostało już zbyt dużo do roboty - zamontowałem wewnątrz obudowy Uno z shieldem LCD, podłączyłem do przygotowanej wcześniej płytki prototypowej ze sterownikiem silnika, a do niej sam silnik. Potem skręciłem wszystko i dostałem (w miarę) zgrabne urządzenie. Programowanie Na potrzeby tego projektu napisałem specjalnie własny zestaw bibliotek, które ułatwiają budowanie wielopoziomowych menu na shieldzie LCD. Programik jest stosunkowo prosty - należy obrócić silnik w położenie źródłowe i docelowe, ustalić czas obrotu - i uruchomić. Program oblicza o jaki kąt obrócić silnik w jakim czasie i powolutku obraca oś z jednego położenia do drugiego. Ponieważ program z bibliotekami jest dosyć duży, nie będę go tu zamieszczał, ale można go ściągnąć z mojego repozytorium na gitlabie. Efekty Czy cel został osiągnięty? Definitywnie tak - nagrane filmy poddaję niewielkiej obróbce w VirtualDub (korzystam z plugina o nazwie deshaker), żeby odrobinę poprawić ich jakość, ale nawet i bez tej obróbki filmiki wyglądają całkiem przyzwoicie. Przykładowy poniżej: Wnioski Po pierwsze, maszyna jest niestety przeraźliwie głośna. Obracanie (przynajmniej na początku, podczas ustawiania zakresów) osi generuje dźwięk przypominający skrzyżowanie kosiarki do trawy i piły łańcuchowej. Winne są najprawdopodobniej pancerne zębatki oraz luzy na osiach - teraz, mając już drukarkę 3D, wydrukowałbym sobie wszystko z PLA spasowane do dziesiątych milimetra, podczas budowy tego urządzenia skazany byłem jednak tylko na własne ręce i montaż przekładni na pewno nie jest tak dokładny jaki mógłby być. Poza tym warto byłoby rozważyć również zastosowanie mniejszych, plastikowych zębatek, tylko obawiałem się trochę, czy będę w stanie zamontować je pewnie do osi - tak, by nie wyrobiły się i nie zaczęły obracać w miejscu. Plusem tej przekładni jest natomiast fakt, że jest po prostu pancerna - myślę, że spokojnie mógłbym zamontować na niej lustrzankę z solidnym obiektywem i ani przekładnia ani silnik nawet by nie sapnęły. Zdecydowanie warto było zainwestować w obudowę - kosztowała mnie raptem 15 złotych, a znacząco podniosła estetykę projektu (i przynajmniej w pewnym stopniu chroni elektronikę przed warunkami atmosferycznymi i kurzem. Wbrew pozorom dosyć wygodne okazało się zasilenie urządzenia z zewnątrz - wyprowadziłem sobie ze środka kabelek zakończony wtyczką T-Dean i gdy chcę uruchomić narzędzie, po prostu łapię jeden z dwucelowych akumulatorów LiPo walających się gdzieś po domu i maszyna może na nim działać naprawdę długo. Choć urządzenie powstało już jakiś czas temu, nie użyłem go jeszcze zbyt wiele razy; tak naprawdę zbudowałem je pod kątem filmowego projektu, który mam zamiar nakręcić, ale wymaga on dosyć dużo czasu w plenerze, a tego zasobu od jakiegoś czasu niestety trochę mi brakuje. Ale też nie tracę nadziei - być może za kilka lat zrealizujemy go razem z córką? Czas pokaże...
  22. 1 punkt
    Bardzo chaotycznie to napisałeś. Arduino MEGA sterujesz 16 ledami i 8 serwami a chcesz jeszcze tą Megą włączać i wyłączać 8 sztuk Arduino UNO?
  23. 1 punkt
    #2 Klawiatura na Arduino to dość przydatna sprawa. Tylko że jak ma się podobne komercyjne rozwiązania to własne DIY odchodzą na drugi plan. Ale jest w tym trochę prawdy, że ciężko wymyślić coś naprawdę praktycznego. Ostatnio zainteresowało mnie modelarstwo (modele HO lokomotyw, semafory itp...) jest to temat, w którym za prosty sterownik diody świecącej płaci się po kilkadziesiąt $. Myślę, że to jest obszar, w którym znajomość Arduino i podstaw elektroniki pozwala zaoszczędzić sporo pieniędzy.
  24. 1 punkt
    #include <Wire.h> ///////////////////////MPU Data///////////////////////// long rawAccelX, rawAccelY, rawAccelZ; // raw data from accel float accelX, accelY, accelZ; //calculated data from Accel long rawGyroX, rawGyroY, rawGyroZ; //raw data from gyro float gyroX, gyroY, gyroZ; //calculated data from Gyro ///////////////////////MPU Data////////////////////////// //////////////////////Time and angle///////////////////////// float elapsedTime, timePrev, time; float totalAngle; //Real, filtered angle from MPU float desiredAngle=-2; //Desired angle of robot //////////////////////Time and angle///////////////////////// //////////////////////PID/////////////////////////////////// float pid, error, prevError; float pidP; float pidI; float pidD; double kp=70; //<do ustawienia>> double ki=1.2; //<do ustawienia>> double kd=0.7; //<do ustawienia>> //////////////////////PID/////////////////////////////////// //////////////////////PIDA////////////////////////////////// int pidA, errorA, prevErrorA; int desiredStepsA=0; // float pidPA; float pidIA; float pidDA; double kpA=0.001; //<do ustawienia>> double kiA=0.0000015; //<do ustawienia>> double kdA=0.0015; //<do ustawienia>> //////////////////////PIDA////////////////////////////////// //////////////////////Motors//////////////////////////////// int in1=8; int in2=7; int in3=5; int in4=4; int enA=9; int enB=6; int enc1=3; int enc2=2; int enc3=12; int enc4=11; int stepsA=0; int stepsB=0; int speedA; int speedB; //////////////////////Motors//////////////////////////////// /////////////////////Other///////////////////////// float rad_to_deg = 180/3.141592654; /////////////////////Other///////////////////////// void setup() { pinMode(in1, INPUT); pinMode(in2, INPUT); pinMode(in3, INPUT); pinMode(in4, INPUT); pinMode(enc1, INPUT); pinMode(enc2, INPUT); pinMode(enc3, INPUT); pinMode(enc4, INPUT); pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); Wire.begin(); setupMPU(); //setups MPU attachInterrupt(digitalPinToInterrupt(enc1), steps1, CHANGE); attachInterrupt(digitalPinToInterrupt(enc2), steps2, CHANGE); time = millis(); } void loop() { timePrev = time; time = millis(); elapsedTime = (time - timePrev) / 1000; readAccelData(); //reads data from accelerometer readGyroData(); //reads data from gyroscope calculateRealAngle(); //calculates real angle calculatePIDA(); calculatePID(); //calculates PID value action(); } void setupMPU() { Wire.beginTransmission(0b1101000); //Begins transmision with MPU Wire.write(0x6B); // Wire.write(0b00000000); //Turns sleep mode off Wire.endTransmission(); Wire.beginTransmission(0b1101000); Wire.write(0x1B); // Wire.write(0x00000000); //Sets Gyro scale to +/- 250 deg/sec <do ustawienia> Wire.write(0x1C); // Wire.write(0x00000000); //Sets Accel scale to +/- 2g <do ustawienia> Wire.endTransmission(); } void readAccelData() { Wire.beginTransmission(0b1101000); Wire.write(0x3B); Wire.endTransmission(); Wire.requestFrom(0b1101000, 6); //Requests Accel registers while (Wire.available()<6); rawAccelX = Wire.read()<<8|Wire.read(); rawAccelY = Wire.read()<<8|Wire.read(); rawAccelZ = Wire.read()<<8|Wire.read(); //Process Accel data to sth usefull accelX = rawAccelX / 16384.0; //<- depends on Accel scale accelY = rawAccelY / 16384.0; //<- depends on Accel scale accelZ = rawAccelZ / 16384.0; //<- depends on Accel scale } void readGyroData() { Wire.beginTransmission(0b1101000); Wire.write(0x43); Wire.endTransmission(); Wire.requestFrom(0b1101000, 6); //Requests Gyro registers while (Wire.available()<6); rawGyroX = Wire.read()<<8|Wire.read(); rawGyroY = Wire.read()<<8|Wire.read(); rawGyroZ = Wire.read()<<8|Wire.read(); //Process Gyro data to sth usefull gyroX = rawGyroX / 131.0; //<- depends on Gyro scale gyroY = rawGyroY / 131.0; //<- depends on Gyro scale gyroZ = rawGyroZ / 131.0; //<- depends on Gyro scale } void calculateRealAngle() { float accelAngle = atan(accelY/sqrt(pow(accelX,2) + pow(accelZ,2)))*rad_to_deg; //Calculates Accel angle in X axis totalAngle = 0.98 *(totalAngle + gyroX * elapsedTime) + 0.02*accelAngle; //Real filtered angle in X axis } void calculatePID() { error = totalAngle - desiredAngle+pidA; pidP = kp*error; pidI = pidI+(ki*error); pidD = kd*((error-prevError)/elapsedTime); pid = pidP+pidI+pidD; prevError = error; } void action() { speedA = constrain(abs(pid), 0, 255); speedB = constrain(abs(pid), 0, 255); if (pid >0) { moveForward(); } else if (pid <0){ moveBackward(); } } void steps1(){ if (digitalRead(enc1) == HIGH) { if (digitalRead(enc3) == LOW) { stepsA++; } else { stepsA--; } } else { if (digitalRead(enc3) == LOW) { stepsA--; } else { stepsA++; } } } void steps2(){ if (digitalRead(enc2) == HIGH) { if (digitalRead(enc4) == LOW) { stepsB--; } else { stepsB++; } } else { if (digitalRead(enc4) == LOW) { stepsB++; } else { stepsB--; } } } void moveForward(){ //moves motors forward digitalWrite (in1, HIGH); digitalWrite (in2, LOW); digitalWrite (in3, HIGH); digitalWrite (in4, LOW); analogWrite(enA, speedA); analogWrite(enB, speedB); } void moveBackward(){ //moves motors backward digitalWrite (in1, LOW); digitalWrite (in2, HIGH); digitalWrite (in3, LOW); digitalWrite (in4, HIGH); analogWrite(enA, speedA); analogWrite(enB, speedB); } void calculatePIDA() { //compensates position drift errorA = stepsA - desiredStepsA; pidPA = kpA*errorA; pidIA = pidIA+(kiA*errorA); pidDA = kdA*((errorA-prevErrorA)/elapsedTime); pidA = pidPA+pidIA+pidDA; prevErrorA = errorA; } Proszę bardzo. Z pewnością nie jest to kod, którym można się chwalić, ale mniej lub bardziej działa. Starałem się go komentować, ale na pewnym etapie prac wymknęło się to spod kontroli. Na wszystkie pytania postaram się odpowiedzieć
  25. 1 punkt
    Może zamiast jechać po bandzie, zapomnij o tabelce ABSOLUTE MAXIMUM RATINGS i trzymaj się wartości z tabelki ELECTRICAL CHARACTERISTICS. Będzie zdrowiej dla mostka.
  26. -1 punktów
    W sumie Arduino to taka zabawka... edukacyjna co prawda ale jednak zabawka. Co w tym dziwnego, że większość projektów powstałych na bazie zabawki to po prostu zabawki następnej generacji? Pokaż przykłady projektów które były: bajerami duperelami aby potwierdzić swoją opinię. Twierdzenie że "coś tam to większość" to nie to forum - tu siedzą ludzie przyzwyczajeni (abo tacy, którzy powinni się przyzwyczaić) do ścisłych sformułowań
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×
×
  • Utwórz nowe...