Skocz do zawartości

Tablica liderów


Popularna zawartość

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

  1. 6 punktów
    Od dawna interesowały mnie pomiary warunków meteorologicznych w mojej miejscowości, pierwsza stacja meteorologiczna, którą zbudowałem około roku 2010, wykonana była na mikrokontrolerze Atmega32. Do komunikacji z światem wykorzystywała moduł LAN Wiznet 7010a. Stacja ta była oprogramowana w języku BASCOM. Projekt który chcę zaprezentować dzisiaj działa już od roku 2018 i został oprogramowany w środowisku Arduino. Stacja została podzielona na 2 moduły, pierwszy pomiarowy oparty jest na klonie Arduino Nano oraz drugi odbiorczy którego sercem jest ESP8266 NodeMCU v3, służy on również do wyświetlania aktualnych pomiarów na wyświetlaczu LED dot matrix o wymiarach 8x56 punktów. Na pracach stolarskich się nie będziemy skupiać napiszę tylko że klatka meteorologiczna została wykonana z drewna sosnowego i umieszczona na wysokości 2 m. Moduł Pomiarowy Czujniki jakie zastosowałem to dwie sztuki DS18B20 pierwszy zajmuje się pomiarem temperatury przy gruncie na wysokości 5cm, drugi pełni rolę zapasowego czujnika temperatury na wypadek uszkodzenia się głównego czujnika BME280. Do pomiaru prędkości wiatru wykorzystuję wiatromierz firmy Maplin na jeden obrót wiatromierza przypadają 2 impulsy z kontaktronu który jest w nim zamontowany, producent dostarcza również odpowiedni wzór według którego można obliczyć rpm oraz prędkość wiatru w km/h. Dane mierzone przez wiatromierz możemy podzielić na dwie wartości, pierwsza to chwilowa prędkość, druga prędkość w porywach, aby uśrednić wartości mierzone program zlicza impulsy z 5s a następnie dokonuje odpowiednich obliczeń. Zebrane dane przesyłane są do drugiego urządzenia poprzez moduły radiowe które działają na częstotliwości 433,92 MHz. W tym celu zastosowana została biblioteka RCSwitch. Każda mierzona wartość jest wysyłana jako osobna transmisja. aby rozróżnić pomiary z konkretnych czujników mierzona wartość mnożona jest przez 100 a następnie dodawana jest liczba 100 000 dla pierwszego czujnika, 200 000 dla drugiego itd. Przykład kodu który realizuje tę funkcję poniżej: // temperatura sensor BME codetosend = temp * 100 + (1 * 100000); mySwitch.send(codetosend, 24); // wilgotnosc sensor BME codetosend = hum * 100 + (2 * 100000); mySwitch.send(codetosend, 24); Moduł Wewnętrzny Obudowa, która idealnie nadawała się do implementacji wewnętrznego modułu pochodzi z tunera IPTV Motorola VIP1910-9. Przedni panel został wykonany z ciemnego półprzepuszczalnego plastiku który idealnie nadaje się do umieszczenia w nim wyświetlacza. Sercem urządzenia jest układ ESP8266. "Moduł wewnętrzny" został również wyposażony w czujnik temperatury oraz wilgotności DHT22, dodatkowo w celu prezentacji zmierzonych wartości dołączone zostało 7 szt. modułów wyświetlacza LED dot matrix z układem MAX7219. Do obsługi tej matrycy zastosowałem bibliotekę Max72xxPanel.h która współpracuje z biblioteką Adafruit_GFX.h w ten sposób nie byłem zmuszony implementować do rozwiązania własnych czcionek. Matryca ta oprócz modułowej konstrukcji umożliwia również sterowaniem jasnością podświetlania, w tym celu aby uprzyjemnić użytkowanie w porach nocnych odbiornik został wyposażony w fotorezystor dzięki któremu potrafi określić natężenie oświetlenia otoczenia i odpowiednie ustawienie podświetlenia. Na wyświetlaczu w pierwszej kolejności wyświetlam aktualną godzinę oraz temperaturę wewnątrz pomieszczenia oraz wilgotność, po około jednej minucie wyświetlane są informacje odczytane z stacji meteo czyli temperatura wilgotność i ciśnienie, postanowiłem nie wyświetlać tutaj informacji dotyczących prędkości wiatru oraz temperatury przy gruncie. Decyzję tą podjąłem na podstawie użytkowania innego podobnego rozwiązania, akurat jak chcemy odczytać godzinę to wyświetlane są inne informacje. Dodatkowo w godzinach nocnych, które zostały ustawione w sztywnych ramach czasowych między 21:00 a 7:00 informacje odczytane z stacji meteo zostały okrojone tylko do temperatury. W projekcie zostały zastosowane 2 rodzaje animacji pierwsza z nich, przesuwa tekst z prawej strony wyświetlacza na lewą, z możliwością zatrzymania w interesujących momentach. Drugi rodzaj to pionowa animacja. Mikrokontroler również poprzez protokół NTP i bibliotekę time.h pobiera aktualną godzinę i datę. Za odbiór danych z pierwszego układu odpowiedzialny jest moduł radiowy którego obsługą tak jak w poprzednim module zajmuje się biblioteka RCswitch. Poniżej fragment programu który demonstruje w jaki sposób odbierane i dekodowane są dane: rc = mySwitch.getReceivedValue(); // czujnik temperatury powietrza BME280 if (abs(rc)>=50000&& abs(rc)<150000) { rc=(rc-100000)/100; if (rc > -50 and rc < 60) { temp1 = rc; Serial.print("Czujnik BME280 - temperatura: \t"); Serial.println(rc); matrix.drawPixel(55,0,1); matrix.write(); } } // czujnik wilgotności BME280 if (abs(rc)>=150000 && abs(rc)<250000) { rc=(rc-200000)/100; if (rc > 5 and rc <= 100) { hum = rc; Serial.print("Czujnik BME280 - wilgotnowsc: \t"); Serial.println(rc); matrix.drawPixel(55,1,1); matrix.write(); } } Dzięki zastosowaniu zewnętrznej anteny oraz odbiornika opartego na superheterodynie, zasięg w otwartym terenie to około 250 m. Po odebraniu danych z pierwszego układu poprzez moduł radiowy następuje przekazanie ich do serwera z systemem Domoticz. Domoticz to bardzo lekki system automatyki domowej, który pozwala monitorować i konfigurować różne urządzenia, przełączniki, czujniki takie jak temperatura, opady deszczu, wiatr, promieniowanie ultrafioletowe (UV), zużycie energii elektrycznej, zużycie gazu, zużycie wody i wiele więcej. Wykresy dostępne są również na stronie www http://meteo.palowice.net Poniżej film z działania odbiornika, smużenie animacji które występuje na filmiku ludzie oko nie rejestruje. Gdyby kogoś interesował kod to również zamieszczam: meteo.zip
  2. 5 punktów
    LiPol Charger v1.0 / v2.0 Szanowni czytelnicy forum w tym krótkim artykule przedstawię Wam projekt ładowarki do akumulatorów litowo-polimerowych 2 celowych (7,4V). Prace nad projektem rozpoczęły się bardzo dawno temu, co można było śledzić w tym wątku. Dużą rolę w trakcie projektowania samego układu odegrał kolega @marek1707. Tak naprawdę ostateczna forma pierwszej wersji ładowarki została bardzo mocno zasugerowana przez niego dzięki temu działa ona niezawodnie. Układy zostały zaprojektowane wedle następujących założeń: możliwość ładowania akumulatorów 2 celowych przy pomocy źródła zasilania o napięciu 5V i natężeniu prądu nie większym niż 1A (na tyle pozwalały zastosowane elementy elektroniczne) oraz ładowanie z wykorzystaniem 2 paneli słonecznych 6V/300mA, które aktualnie miałem pod ręką - stąd zastosowano układ przetwornicy typu boost, zastosowanie przewodowej lub bezprzewodowej komunikacji z komputerem PC, wykorzystanie diod LED do sygnalizacji stanów pracy ładowarki, (v2.0) wyświetlanie informacji na wyświetlaczu alfanumerycznym 2x16, (v2.0) dodanie przycisków do ręcznej interakcji użytkownika z urządzeniem, (v2.0) wbudowanie prototypu prostego balansera ogniw, (v2.0) wyprowadzenie padów do programowej kalibracji przetwornika ADC. LiPol charger v1.0 Wersja pierwsza ładowarki jest wersją niekombinowaną oraz dość niezawodną. Pełny cykl ładowania akumulatora obejmuje zarówno fazę CC (stałoprądową) oraz CV (stałonapięciową). Cykl ten świetnie obrazuje WYKRES, który podrzucił mi kolega @marek1707 i który zapamiętam do końca swojego życia Zasadę działania przetwornicy boost wydaje mi się, że każdy elektronik powinien znać. Jeśli jednak czytelniku nie miałeś okazji zapoznać się z tym rodzajem przetwornic podsyłam ciekawe artykuły na ten temat: LINK, LINK. W skrócie - na wejściu przetwornica otrzymuje napięcie maksymalne 6V oraz prąd maksymalny 1A. Sygnał PWM generowany przez mikrokontroler ze stałą częstotliwością, a zmiennym wypełnieniem otwiera lub zamyka tranzystor kluczujący przetwornicę, który dzięki temu reguluje napięcie lub prąd wyjściowy przetwornicy w zależności od fazy algorytmu ładowania CC/CV. Zastosowano w tym celu najzwyklejszy regulator proporcjonalny. Mikrokontroler ma możliwość pomiaru potrzebnych parametrów tj. napięcia i prądy wejściowe/wyjściowe oraz napięcie międzyogniwowe. Napięcia są mierzone poprzez dzielniki napięciowe natomiast pomiar prądów odbywa się z wykorzystaniem układów bocznikowych. Komunikacja z komputerem odbywa się poprzez moduł Bluetooth (BTM222 lub HC-05) lub z wykorzystaniem przejściówki USB-UART. Dodatkowo domowymi metodami wykonałem shield umożliwiający podłączenie wyświetlacza alfanumerycznego 2x16. Ostatecznie wykorzystując źródło napięcia stałego 5V/1A udało się uzyskać przetwornicę o sprawności ok. 65%. Całkiem niezły wynik jak na prototyp. Straty mocy są związane ze stratami na diodzie, indukcyjności oraz NIE zastosowaniu kondensatorów typu Low ESR. Wszystkie te parametry można jeszcze trochę poprawić przez co możliwe jest zwiększenie sprawności samej przetwornicy. Wykorzystanie do ładowania paneli słonecznych zmusiło do zastosowania najprostszego algorytmu MPPT - śledzenia punktu maksymalnej mocy. Panele słoneczne połączone są równolegle przez co uzyskano większy prąd wejściowy na przetwornicę. W tym połączeniu maksymalny prąd wejściowy wynosi 600 mA dla posiadanych przeze mnie paneli 6V/300mA. Biorąc pod uwagę to, że w polskich warunkach z tych paneli jestem w stanie wyciągnąć maksymalnie 70-80% całkowitej sprawności przy bezchmurnej pogodzie prąd ładowania akumulatorów jest niewielki. Dlatego ten tryb ładowania sprawdza się raczej przy niewielkich akumulatorach. Ale najważniejsze, że się sprawdza LiPol charger v2.0 Druga wersja ładowarki nie została jeszcze przetestowana!!! Natomiast wzbogaciłem ją o kilka praktycznych dodatków, których brakowało mi w poprzedniej wersji. Wersja v2.0 została wzbogacona o prototyp balansera złożonego z dwóch oporników dużej mocy oraz tranzystorów sterowanych z poziomu mikrokontrolera, który na podstawie pomiaru napięcia międzyogniwowego decyduje o tym, który obwód „strat mocy” załączyć. Jeśli któryś z tranzystorów zostaje otwarty, przez rezystor przepływa prąd, natomiast ładowanie danego ogniwa akumulatora jest pomijane. Dzięki temu możliwe jest wyrównanie poziomów napięć na obu ogniwach. Dodatkowo wyprowadzone zostały pady pomiarowe, które znacznie ułatwiają kalibrację odczytów z przetwornika ADC. Wbudowano również konwerter USB-UART na podstawie chipu FT230XQ, wyprowadzono również piny Rx i Tx w celu podłączenia np. modułu Bluetooth. W tym projekcie udało się znacząco zmniejszyć wymiary ładowarki. Kompletne schematy obu wersji ładowarki udostępniam w pdf’ach poniżej. LiPolCharger_v1_0.pdf LiPolCharger_v2_0.pdf Wykaz ważniejszych elementów wykorzystanych w układach ładowarek: mikrokontroler ATmega32 tranzystor kluczujący MOSFET-N STS12NF30L driver MOSFET MCP1402T cewka 220 uH wzmacniacze operacyjne LM358 wyświetlacz alfanumeryczny 2x16 konwerter USB-UART FT230XQ, tranzystory bipolarne NPN i PNP dowolne, pod warunkiem, że maksymalny prąd kolektor-emiter będzie większy niż 1A. Jeśli ktoś z czytelników będzie zainteresowany tematem owych ładowarek serdecznie zapraszam do zadawania pytań w komentarzach, a także ewentualnego krytykowania (oczywiście konstruktywnego) mojego projektu.
  3. 5 punktów
    Pojawiła się potrzeba wykonania prostego sterownika do bramy garażowej, który miałby powiadamiać mieszkańców czy aktualnie garaż jest zamknięty czy otwarty oraz w dowolnej chwili sprawdzić status. Tak powstało niewielkie urządzenie montowane na szynę DIN. Jest zasilane z dowolnej ładowarki od telefonu, posiada zabezpieczenie przed odwrotną polaryzacja zasilania. Sterownik ma kilka wejść/wyjść; IN1 - dolna krańcówka od zamknięcia garażu. IN2 - górna krańcówka od pełnego otwarcia garażu. wyjście przekaźnikowe NO do zdalnego otwierania/zamykania bramy. RS485 - pozwala podłączyć czujnik odległości wykrywający czy auto jest w garażu. czujnik temperatury DS18B20. przycisk do resetowania ustawień WiFi i uruchomienia ponownej konfiguracji. W sterowniku zastosowałem popularny układ ESP8266 w wersji WemosD1 mini. Jak widać za wiele rzeczy tu nie ma, oprócz ESP znajduje się przekaźnik, DS18B20 oraz transceiver RS485. Projekt miał być prosty, szybki i jednostkowy dlatego nie zastosowałem dodatkowych stopni ochrony wejść w postaci np. optoizolacji. Tradycyjnie płytka powstała na żelazku i wytrawiona w kwasie. Polutowana i zabezpieczona lakierem do PCB. Schemat ideowy: Wspomniany wcześniej czujnik odległości jest zbudowany z wykorzystaniem ultradźwiękowego czujnika HC-SR04 i Arduino Nano, które cyklicznie wysyła informacje do głównego sterownika. Schemat czujnika: Sterownik ma zaimplementowany serwer WWW co pozwala na sterowanie praktycznie dowolnym urządzeniem z przeglądarką. A panel sterowania prezentuje się tak: Dodałem obsługę powiadomień push na telefon z wykorzystaniem mechanizmu IFTTT (if this then that). Wystarczy zainstalować tą aplikacje na telefonie, a w sterowniku wprowadzić unikalny klucz aplikacji powiązany z konkretnym telefonem. Aktualizacja oprogramowanie wykorzystuje mechanizm OTA i sprowadza się do wgrania pliku przez panel www. Dodatkowo wystawione jest proste API, które pozwala na integracje z większością systemów smart home typu Domoticz, Home Assistant itp.
  4. 4 punkty
    Artykuł przeznaczony do wszystkich zapaleńców druku 3D. Można nie kupować dość drogi filament do swojej drukarki 3D, a produkować w domu własny filament z zużytych butelek PET od napojów. Przy tym nieważne, jeżeli butelka jest pognieciona, ona również się nadaje do domowej produkcji filamentu. Filament z butelek ma sporo zalet w porównaniu z firmowym filamentem kupowanym – ABS albo PLA. Przede wszystkim, że produkowany filament nic nie kosztuje, jest po prostu darmowy Produkowany pręt filamentu Jest bardzo sztywny i absolutnie nie łamliwy, wytrzymuje sporo ostrych przegięć. Filament własnej produkcji jest sporo mocniejszy i twardszy, jak na rozciąganie tak i o wiele bardziej odporny na uderzenie. Absolutnie nie pochłania wody, czyli nie trzeba go ani suszyć, ani chronić w zamkniętym zabezpieczonym od nawilżania się opakowaniu. Praktycznie nie skurcze się przy ochłodzeniu w trakcie druku. Nie wymaga chłodzenia drukowanej warstwy. Nie wymaga stołu podgrzewanego. Dla przyczepności wystarczy miejsce na stole posmarować cienką warstwą kleju w sztyfcie na przykład typu „Glue Stick” Wydrukowane detal można obklejać od razu po skończeniu wydruku. Taki filament jest bardzo odporny na działanie rozpuszczalników i środków chemicznych. Jak widać filament produkcji własnej ma sporo zalet w porównaniu z filamentami kupowanymi, a najważniejsze – że jest darmowy. Niżej przedstawiono zdjęcia maszynki do produkcji filamentu: Do domowej produkcji filamentu wykorzystywane zużyte butelki od napojów. Ale butelki muszą być czyste, resztki kleju do nalepki powinni być usuwane. Technologia produkcji jest bardzo prosta i składa się z trzech następujących operacji: Poprawa zgniecionych butelek i butelek z ryflowaną powierzchnią tak, żeby ścianka boczna butelki była gładka. Nacinanie butelek na paski o określonej szerokości, od 5mm do 12mm w zależności od grubości ścianki butelki. Produkcja pręta filamentu z nacinanych pasków na specjalnej maszynce z nawijaniem na bębenek odbiorczy. Na tych wideo można obejrzeć prace maszynki i przyrządu do nacinania pasków z butelek: Zębatka drukowanie:
  5. 4 punkty
    Manipulator "Copernicus" to mój najnowszy projekt, model 4-osiowego robota przemysłowego z ssawką podciśnieniową jako efektorem. Bezpośrednim przyczyną rozpoczęcia budowy był zachwyt nad tego typu profesjonalnymi konstrukcjami, typu Kuka, ABB, Fanuc itd., a które można podziwiać między innymi na różnych targach przemysłowych Robot powstawał w ekspresowym jak dla mnie tempie, około 2 miesięcy, a jego budowa nie byłaby możliwa bez wsparcia sponsorów, którym chciałbym w tym miejscu serdecznie podziękować: Agencji Pracy MONDI Polska, która w ramach programu stypendialnego Mondi Wspiera Talenty sfinansowała większość niezbędnych elementów i części; Firmie IGUS Polska, która jako próbkę udostępniła mi przekładnię ślimakową RL-D-30; Firmie STMicroelectronics, dzięki której otrzymałem płytkę Nucleo; Zespołowi Szkół Łączności im. M. Kopernika w Poznaniu, również za pomoc finansowo-merytoryczną. Dobrze, na początek kilka zdjęć ogólnie przedstawiających robota - przepraszam za nienajlepsze tło, zdecydowanie lepiej ideę pracy robota wyjaśniają filmy Konstrukcja jest trójmodułowa, pierwsze cztery zdjęcia ilustrują właściwego robota, piąte przedstawia stację generującą podciśnienie, dwa ostatnie to sterownik robota Mechanika Podstawę robota stanowi prostokąt plexiglass'u 10mm. Pierwsza oś swobody jest pryzmatyczna, składa się z dwóch prowadnic liniowych ø10 i listwy zębatej. Następnie, na wózku z łożyskami liniowymi DryLin, również firmy Igus, znajduje się pierwsza oś obrotowa z wspomnianą już przekładnią ślimakową. Następnie, trzecią oś swobody, a drugą obrotową stanowi silnik z przekładnią planetarną oraz paskiem zębatym HTD. Ostatnią, czwartą oś, służąca ustawieniu ssawki prostopadle do powierzchni, stanowi ssawka podciśnieniowa Festo, bezpośrednio obracana przez silnik krokowy NEMA17. Taki sam silnik napędza przekładnię ślimakową, natomiast w pierwszej i trzeciej osi wykorzystałem, jak wspomniałem, silniki z wbudowaną przekładnią planetarną. Elektronika Sterownik robota jest trójpoziomowy - na pierwszym z nich znajduje się gniazdo trapezowe, sygnalizatory napięć i 2 zasilacze - 24V/8,5A oraz 12V/5A. Ten pierwszy zasila tylko silniki, natomiast drugi - pompkę podciśnieniową, elektrozawór i wszystkie pozostałe elementy, wykorzystując w tym celu przetwornicę step-down (dającą na wyjściu 5V DC - Nucleo wykorzystuje własny, znajdujący się na płytce stabilizator 3,3V). Na drugim poziomie znajdziemy wspomniane Nucleo F103 i przetwornicę, 2 przekaźniki do sterowania pompką i elektrozaworem, płytkę dystrybuującą zasilanie oraz 4 sterowniki silników krokowych TB6560. Na trzecim poziomie - przycisk bezpieczeństwa i 2 wentylatory. Płyty w sterowniku wykonane są również z plexi 5mm. Do połączeń sterownik-robot-stacja generująca podciśnienie używam w większości złącz wielopinowych dedykowanych automatyce. Robot posiada czujniki krańcowe, potrafi się zerować. Oprogramowanie Napisałem program w Arduino IDE, który zawiera kinetykę odwrotną liczoną z zależności geometrycznych oraz korzystając z biblioteki AccelStepper() steruje "na sztywno" wszystkimi czterema silnikami krokowymi. Następnie wpisałem kilkanaście punktów, i tak robot układa krążki i rozkłada, i tak w pętli... Osiągnięcia, dalsze plany i film Aktualnie, robot może pochwalić się wzięciem udziału w RoboDay 2019 (pokazy na Politechnice Poznańskiej) i II miejscem na µBot (zawody organizowane przez V LO Kraków). Projekt jest aktualnie zamknięty, ale myślę nad rozwojem konstrukcji, na przykład dodaniem kamery PixyCam2. Opis jest dość zwięzły - gdybyście mieli jakiekolwiek pytania, chętnie dopowiem szczegóły Pozdrawiam, wn2001
  6. 4 punkty
    Ze względu na cenę, prostotę, wystarczającą do latania jakość i małe opóźnienia systemy FPV posługują się pradawnym standardem telewizji analogowej PAL. Dlatego na wyjściu takiego odbiornika dostajesz sygnał tzw. composite video po jednym drucie i to wprowadzasz do monitora, którym może być zwykły telewizor z odpowiednim wejściem, gogle itp. Jeśli chcesz taki sygnał wciagnąć do komputera (niechby i do Maliny) potrzebujesz tzw. frame grabbera czyli urządzenia, które "rozumie" analogowy sygnał CVSB, "rozpakowuje go" na kolejne ramki obrazu, ew. kompresuje i udostępnia w postaci cyfrowej np. przez USB. Poszukaj hasła "usb frame grabber" lub np. "usb video capture" - powinno pomóc. EDIT: Pierwszy z brzegu: https://rc-planeta.pl/pl/okablowanie-i-akcesoria/666-konwerter-fpv-usb-grabber-konwerter-video.html ale jest tego pełno.Szukaj w sklepach modelarskich albo RTV/AGD w działach video lub na aukcjach.
  7. 3 punkty
    Witam! Dzisiaj chciałbym zaprezentować Wam mój projekt wykonany w celu obrony inżynierskiej. Jest to mój pierwszy tak rozbudowany projekt, jak i za razem pierwszy wpis na Forbocie, więc od razu przepraszam wszystkich za wszelakie poważne błędy, które mogłem popełnić. Pomysł na niego zrodził się na 3 roku studiów na kierunku Inżynierii Biomedycznej za sprawą mojego promotora dr inż. Jarosława Zubrzyckiego, któremu chciałbym bardzo serdecznie podziękować za poświęcony czas oraz użyczenie drukarek 3D. Całość składa się ze zrobotyzowanego ramienia o sześciu stopniach swobody wraz z osobnym, prostym kontrolerem. Na ramię robota składa się: konstrukcja mechaniczna wykonana z materiału ABS na drukarce 3D Zortrax M200, uPrint SE Plus oraz taniej Creality 10S, małe łożyska kulkowe o średnicy zewnętrznej ∅13 mm i wewnętrznej ∅5 mm, śrubki oraz nakrętki o wielkości metrycznej od M2,5 do M5, część napędowa, na którą składają się serwomechanizmy: TowerPro MG-946R, TowerPro SG-5010, PowerHD HD-1501MG, TowerPro SG92R. Na kontroler składają się: obudowa wykonana z materiału ABS na drukarkach 3D wymienionych wyżej, płytka Arduino UNO Rev3 (klon zakupiony na Allegro), nakładkaprototypowa do Arduino Uno z przylutowanymi komponentami, takimi jak, przewody wyprowadzające potencjometry, LED'y, rezystory, kondensatory oraz stabilizator napięcia L7805CV, oraz sterownik serwomechanizmów Pololu Mini Maestro 12-kanałowy. Serwomechanizmy dobrałem biorąc pod uwagę ich specyfikację (napięcie zasilania) oraz opinię użytkowników wykorzystujących je w swoich projektach. Z racji wykorzystania platformy jaką jest Arduino, jak i tego, że na pracę magisterską planuje ulepszyć projekt , postanowiłem ograniczyć efektor ramienia do postaci prostego chwytaka. Następna wersja projektu zostanie wyposażona w płytkę Raspberry Pi 4B wykorzystującą efektor w postaci teleskopu z podstawową kamerą i diodą doświetlającą. Sterownik serwomechanizmów Pololu Mini Maestro wybrałem ze względu na bardzo prostą obsługę napędów i świetną współpracę układu z Arduino za sprawą dedykowanej biblioteki udostępnionej przez producenta. Sterowanie ramieniem postanowiłem zrealizować dzięki zastosowaniu kontrolera w fizycznej obudowie z zastosowaniem potencjometrów obrotowych, liniowych o wartości 20 kΩ. Dzięki takiemu rozwiązaniu można w prosty sposób zasymulować pracę podstawowego trenażera. Do sygnalizowania trybu pracy ramienia użyłem 2 LED'ów (zielonego i czerwonego) sygnalizujące podłączenie do zasilania (czerwona) oraz możliwość zmiany położenia wałów serwomechanizmów, czy też brak takiej możliwości (zielona). Sterowanie trybem pracy umożliwia przełącznik z zastosowaniem prostego filtru RC eliminującego drgania styków. Wszystkie komponenty zostały przylutowane do nakładki prototypowej, z zastosowaniem przewodów połączeniowych do płytek stykowych (wiem, nie najlepsze rozwiązanie, ale poganiający czas zrobił swoje ). Cały projekt zasilany jest za pomocą zasilacza impulsowego 12 V/ 2,5A CZĘŚĆ MECHANICZNA Po dobraniu wszystkich komponentów i upewnieniu się, że będę miał dostęp do drukarki, niezwłocznie przystąpiłem do projektowania części konstrukcyjnych w oprogramowaniu Autodesk Inventor 2018. Zamierzony projekt prezentował się następująco: Podczas projektowania efektora (chwytaka) zastanawiałem się nad zastosowaniem gotowego rozwiązania, lecz z uwagi na to, że większość znalezionych przeze mnie rozwiązań składało się z wielu komponentów, lub po prostu wizualnie mi nie odpowiadały zaprojektowałem swoje własne (trochę ułomnie, po mechanizm zębaty został zaprojektowany bez użycia modułu wbudowanego w program, ani bez przeprowadzenia potrzebnych obliczeń, ale jak na pierwszy raz nie jestem zawiedziony ). Podstawa ramienia składa się z dwóch części: statycznej oraz ruchomej. Pierwsza jest przymocowana do podstawy przy użyciu 4 wkrętów do drewna M4 i osadziłem w niej jeden z serwomechanizmów. Początkowo planowałem zastosowanie łożyska kulkowego wzdłużnego do wsparcia konstrukcji, ale po "dogłębnej" analizie konstrukcji (czyt. oszczędzanie pieniążków) osadziłem część ruchomą bezpośrednio na wale serwomechanizmu (przy użyciu aluminiowego orczyka). W części ruchomej umieściłem kolejne, dwa, serwomechanizmy odpowiedzialne za sterowanie odpowiednio ramieniem i przedramieniem manipulatora. Ruch z podstawy na przedramię przekazywany został dzięki zastosowaniu ogniwa łączącego "bark" z "łokciem". W "łokciu" osadziłem kolejny serwomechanizm odpowiedzialny za ruch obrotowy przedramienia wokół własnej osi. Na końcu przedramienia, w nadgarstku umieściłem mały serwomechanizm odpowiedzialny za ruch nadgarstka oraz takie same serwo sterujące efektorem (chwytakiem). Przed przystąpieniem do druku 3D elementów ramienia przeprowadziłem analizę MES konstrukcji manipulatora. Manipulator obciążyłem siłą działającą pionowo w dół o wartości 1,5 N, przymocowaną do ramion chwytnych efektora, co symbolizowało obciążenie o wadze około 150g. W efekcie uzyskałem wynik dający wskaźnik bezpieczeństwa konstrukcji w wysokości powyżej 11 (0 fatalnie, 15 max), co świadczy o tym że zaprojektowana konstrukcja jest sztywna i wytrzymała na trwałe odkształcenia. Największe naprężenia wystąpiły na ramionach chwytnych efektora i wynosiły 1,55 MPa. Obudowę kontrolera podzieliłem na 3 części, aby było łatwiej ją wydrukować na drukarce 3D. W panelu górnym umieściłem sześć otworów montażowych na potencjometry liniowe oraz dwa na kolorowe LED'y i jeden większy na przycisk. Dolna część obudowy podzielono na 2 elementy. W jednym z nich umieszczono otwory umożliwiające dostęp do złącz płytki Arduino oraz podłączenie serwomechanizmów do sterownika. UKŁAD STEROWANIA Realizację układu sterowania rozpocząłem od zaprojektowania schematu działania konstrukcji oraz schematu podłączenia wszystkich elementów: Mając gotowy schemat przystąpiłem do realizacji fizycznego układu. Całość prezentuje się następująco: Kod sterujący projektem został napisany w środowisku Arduino IDE, z wykorzystaniem dedykowanej biblioteki do sterownika serwomechanizmów Pololu Mini Maestro: #include <PololuMaestro.h> #include <SoftwareSerial.h> #define pot1 0 //podstawa #define pot2 1 //bark #define pot3 2 //staw łokciowy #define pot4 3 //przedramie #define pot5 4 //ndagarstek #define pot6 5 //chwytak #define sw1 9 //przycisk #define led_g 8 //zielona dioda SoftwareSerial sterownikSerial(10,11); //obiekt treansmisji szeregowej (pin 10 RX, pin 11 TX) MiniMaestro sterownik(sterownikSerial); //obiekt umozliwiający komunikacje ze sterownikiem int val1 = 0; int angle1 = 0; int w1 = 0; int val2 = 0; int angle2 = 0; int w2 = 0; int val3 = 0; int angle3 = 0; int w3 = 0; int val4 = 0; int angle4 = 0; int w4 = 0; int val5 = 0; int angle5 = 0; int w5 = 0; int val6 = 0; int angle6 = 0; int w6 = 0; //===================================PĘTLA KONFIGURACYJNA=================================================== void setup() { //Serial.begin(9600); //urochomienie transmisjii szeregowej w razie potrzeby komunikacji z komputerem sterownikSerial.begin(9600); //uruchomienie transmisjii szeregowej w celu komunikacji ze sterownikiem pinMode(led_g,OUTPUT); pinMode(sw1,INPUT); //brak konieczności zastosowania trybu INPUT_PULLUP ze względu na zastosowanie w układzie rezystora podciągającego digitalWrite(led_g,LOW); //dioda zielona domyślnie jest zgaszona } //========================================PĘTLA GŁÓWNA======================================================= void loop() { val1 = analogRead(pot1); //odczyt danych z potencjoetrów oraz mapowanie otrzymanych wartości angle1 = map(val1,0,1023,2000,10000); //na zakres ruchu poszczególnych serwomechanizmów (jednostka: 0,25us) val2 = analogRead(pot2); angle2 = map(val2,0,1023,2000,10000); val3 = analogRead(pot3); angle3 = map(val3,0,1023,2000,10000); val4 = analogRead(pot4); angle4 = map(val3,0,1023,2000,10000); val5 = analogRead(pot5); angle5 = map(val3,0,1023,2000,10000); val6 = analogRead(pot6); angle6 = map(val3,0,1023,2000,10000); if(digitalRead(sw1) == 0){ //Jeżeli przycisk jest wciśnięty, zielona dioda się świeci oraz digitalWrite(led_g,HIGH); //możliwe jest sterowanie serwonapędami. if(abs(angle1 - w1) < 15) //Jeżeli różnica pomiędzy dwoma kolejnymi wartościami jest mniejsza o 15 jednostek sterownik.setTarget(0,0); //to sygnał nie jest wysyłany do sterownika. else{ sterownik.setTarget(0,angle1); w1 = angle1;} if(abs(angle2 - w2) < 15) sterownik.setTarget(1,0); else{ sterownik.setTarget(1,angle2); w2 = angle2;} if(abs(angle3 - w3) < 15); //sterownik.setTarget(2,0); else{ sterownik.setTarget(2,angle3); w3 = angle3;} if(abs(angle4 - w4) < 15) sterownik.setTarget(3,0); else{ sterownik.setTarget(3,angle4); w4 = angle4;} if(abs(angle5 - w5) < 15) sterownik.setTarget(4,0); else{ sterownik.setTarget(4,angle5); w5 = angle5;} if(abs(angle6 - w6) < 15) sterownik.setTarget(5,0); else{ sterownik.setTarget(5,angle6); w6 = angle6;} } else{ //Jeżeli przycisk nie jest wciśnięty, następuje zgaszenie zielonej diody, a sterowanie digitalWrite(led_g,LOW); //serwomechanizmami jest niemożliwe. } } PREZENTACJA DZIAŁANIA Poniżej zamieszczam krótkie wideo przedstawiające działanie całej konstrukcji. PODSUMOWANIE Tak prezentuje się wykonany przeze mnie projekt. W przyszłości planuje wymienić płytkę Arduino UNO na Raspberry Pi 4, serwomechanizmy na silniki krokowe, efektor w postaci chwytaka na wysuwany teleskop z kamerą na jego końcu oraz drastyczną przebudowę konstrukcji mechanicznej . Jestem świadomy wszystkich uproszczeń jakie popełniłem i na pewno niektóre kwestie mogłem wykonać lepiej (lub po prostu inaczej), lecz z powodu małego zasobu czasowego lub pod wpływem bliżej nieokreślonych emocji postawiłem na rozwiązania zaprezentowane wyżej. Z góry dziękuję za konstruktywną krytykę i cenne uwagi i wskazówki na przyszłość. Pozdrawiam mocno!
  8. 3 punkty
    A po co tam JSON? Natywnym obiektem w C/C++ jest struktura, nie trzeba kombinować. Przykładowo: struct ramka { uint16_t potencjometr[4]; uint16_t klawisze; } ramka; // wypełniamy ramkę danymi, np.: ramka.potencjometr[0] = analogRead(A0); ramka.potencjometr[1] = analogRead(A1); ramka.potencjometr[2] = analogRead(A2); ramka.potencjometr[3] = analogRead(A3); ramka.klawisze = digitalRead(2); // no i wysyłamy: Serial.write((const uint8_t *)&ramka, sizeof (ramka)); A po stronie odbiorczej mamy coś analogicznego: Serial.readBuffer((uint8_t *)&ramka, sizeof(ramka)); Pomijam tu oczywiście problem synchronizacji, czy wysyłania różnych typów ramek, chodziło mi tylko o zasadę.
  9. 3 punkty
    Kąt elektryczny dotyczy wirującego pola magnetycznego, a kąt mechaniczny wirnika. Silniki BLDC często mają zwielokrotnioną ilość biegunów magnetycznych - krotność k. Wirnik podąża za wirującym polem magnetycznym, ale niekoniecznie kąt obrotu musi być w stosunku 1:1. Dla przykładu jeśli krotność k = 4 to 1 obrót elektryczny pola magnetycznego spowoduje tylko 1/4 obrotu mechanicznego wirnika. Należy pamiętać, że zwiększenie krotności uzwojenia to nie to samo co zmiana ilości faz w silniku.
  10. 3 punkty
    Tak, tylko to jest znów pewien przypadek szczególny w którym liczby jakie dodajesz do ułamkowego akumulatora fazy (tak, to jest właśnie on ) będą miały postać 1/2, 1/3, 1/4, 1/5 itd. Wtedy rzeczywiście będziesz odczytywał tę samą próbkę 2, 3, 4, 5 itd razy, ale po co się ograniczać? Ani to w niczym nie upraszcza programu ani nie umożliwia generowania częstotliwości w szerokim zakresie z małym rastrem. A jeśli chcesz mieć krok 0.625 (czyli 5/8) albo 2.828125 (czyli 2 i 53/64)? Obie te liczby mają skończone rozwinięcie dwójkowe na mniej niż 8 bitach i zaaplikowane do naszego DDSa z bezwzględną precyzją dadzą odpowiednio 97.65625Hz i 441.89453125Hz. A przecież to prosty programik z jedną, 16-bitową zmienną licznika gdzie za pomoca trywialnego dodawania niecałkowitych kroków dostajesz zakres od 0.61Hz (0x0001) do 2.5kHz (0x1000) z rastrem 0.61Hz. Pomysł jest tak prosty i efektywny, że żal go nie wykorzystać, prawda? Jak rozumiem Twój pomysł polega na tym, że po prostu odliczamy co ile próbek wysłać kolejną pozycję z tablicy. Zadziała, ale nie wiem co to daje, bo ani to prostsze ani lepsze. Akumulator fazy robi to, i wiele więcej. Wszystko zależy od liczby jaką dodajesz. Bardzo istotnym elementem DDSa jest analogowy filtr wyjściowy. Musi to być porządnie zrobiony układ tnący ostro trochę poniżej połowy częstotlwości próbkowania. W prostych zabawkach można stosować jakieś kondensatorki i oporniki, w lepszych urządzeniach dawać filtry aktywne a w tych najbardziej wypasionych trzeba sięgać po scalone filtry z przełączanymi pojemnościami. Takie coś kosztuje z 10 USD, ale za to jest filtrem Czebyszewa np. 8 rzędu więc tnie ostro, a jego częstotlwość ustalasz zegarem cyfrowym. Bez takiego stopnia wyjściowego DDS produkuje przebiegi bardzo zniekształcone i zawierające sporo harmonicznych, których zawartość jest niestety różna w zależności od ustawionego kroku. Tak więc niektóre częstotliwości z DDSa będą ładniejszą sinusoidą a niektóre będą poszarpane, co jest chyba zgodne z intuicją. Filtr analogowy to wycina i każdemu daje równą szansę Przy okazji: puszczając kilka DDSów równolegle, korzystających oczywiście wspólnie z tego samego przerwania od jednego timera i tym samym jednej, wspólnej częstoliwości próbkowania oraz sumując ich sygnały wyjściowe jeszcze w procesorze, można zupełnie spokojnie zrobić polifoniczne organki np. na Arduino mogące grać rozbudowane akordy a nie tylko "Wlazł kotek na płotek" jednym palcem. A mając kilka tablic różnych sygnałów, można łatwo przełączać "brzmienia", bo jednak czysta sinusoida jest akustycznie mało ciekawa..
  11. 3 punkty
    Nie ma czegoś takiego jak zasilacz halogenowy. Co to ma na wyjściu? Prąd stały czy zmienny? Podasz jakieś konkretne parametry? Być może zasilacz musi być obciążony jakimś minimum, i wtedy metr paska to za mało i albo drugi zasilacz, albo sztuczne obciążenie może byc potrzebne. Ale tych byćmożów to jest mnóstwo wielce za dużo
  12. 3 punkty
    I tutaj dochodzimy do tego czym różnią się biblioteki od zwykłych progamów. Każdy sposób będzie poprawny - jeśli jako kryterium przyjmiemy po prostu działanie programu, to ten z 144x kopiuj-wklej też. Ale niektóre sposoby są lepsze, niż inne. W przypadku małego, krótkiego programu wybór sposobu implementacji często nie ma znaczenia. Natomiast w przypadku biblioteki podjęte decyzje mogą mieć długofalowe konsekwencje - jak chodziażby interfejs funkcji printf, który od początku był zły, ale teraz jego zmiana jest właściwie niemożliwa.
  13. 2 punkty
    Cześć, odpowiedź jest bardzo dobra i uzasadnienie także. Raczej rzadko używa się "podwójnych" wskaźników do poruszania się po tablicy dwuwymiarowej, łatwiej jest użyć indeksów. Niemniej warto wiedzieć jak to działa na wskaźnikach (przenoszą się te zależności także na tablice o większej liczbie wymiarów - wynika to wprost z rozmieszczenia danych tablicy w pamięci. I tak dla tablic trzy wymiarowych mamy już potrójną a nie podwójną de-referencję. To może teraz kolega zada jakieś pytanie - zobaczymy, czy uda się odpowiedzieć poprawnie Pozdrawiam
  14. 2 punkty
    Podpinasz bezpośrednio, możesz oczywiście podpiąć zasilanie do czegoś mocniejszego. Nie wiem jak chcesz rozwiązać zasilanie - ja zasilam albo całość z porządnego 5V, albo serwa (w prxypadku większej ilości) z oddzielnej przetwornicy 6V. Czujniki muszą działać naprzemiennie. W przypadku przekładni owszem, będzie to ruch wahadłowy. Z tym czasem rzeczywistym to sobie dokładnie przemyśl... ile czasu trzeba, aby czujnik zwrócił dane o otoczeniu? Ile ma być odczytów na obrót czujnika? Jaki dystans przejedzie robot w tym czasie? Mój eksperyment: czujnik na wprost, po otrzymaniu informacji o przeszkodzie robot się zatrzymywał, skanował otoczenie i wybierał następny fragment trasy. Tyle, że była to dość wolna gąsienicówka... Z czujnikiem TOF wcale nie było weselej, przy 50 msec na odczyt (poniżej tej wartości dokładność pomiaru była za mała) i 9 odczytach odległości czas skanowania wynosił ok. sekundy. Pamiętaj, że serwo też potrzebuje vzasu aby się obrócić, a w czasie pomiaru musi być zatrzymane
  15. 2 punkty
    Zapraszam do zapoznania się z zaktualizowaną wersją opisu procesora Q818. Pojawiła się już dość spora sekcja poświęcona architekturze układu oraz blokom tworzącym procesor.
  16. 2 punkty
    Bardzo dobrze - o to chodziło. Od razu dwie uwagi: Przede wszystkim - trochę bez sensu jest konstrukcja z pustym ifem. Czyli zamiast: if (a > b) { } else { coś_robimy(); } powinno być if (a <= b) { coś robimy(); } Kompilator co prawda powinien dać sobie z tym radę, ale człowiek odniesie wrażenie że gdzieś tu się czai błąd. Jeśli dodajesz/odejmujesz pozycję i x zadbaj o to, aby pozycja nie wyskoczyła poza zadany zakres. Ty odejmujesz 20 od pozycji jeśli jest >= 10... czyli ile wyjdzie? Poza tym dalej nie napisałeś na czym polega niedziałanie tego czegoś... a nikomu się nie chce bawiś we wróżkę Co do programowania - co Ci się nie podoba w kursach na Forbocie? Prosto, po polsku... Możesz się wspomóc dowolną książką o C++. Poza tym na arduino.cc masz referencje i tutoriale, korzystając z takich źródeł nie potrzebujesz żadnych jutubów.
  17. 2 punkty
    Jeśli próbujesz bezmyślnie kopiować to żadna różnica , czy masz lat 15 czy 85. Masz tu bardzo fajne kursy elektroniki i Arduino.- może sobie poczytasz? My tu na forum nie jesteśmy interfejsem dla nieczytatych... I uwierz mi, 15 lat to wcale nie jest tak mało, jest na forum paru młodszych... i umieją czytać! Tak że na razie zapoznaj się z kursami, jeśli czegoś nie zrozumiesz chętnie wyjaśnimy. Powodzenia! Tak przy okazji - jeśli czegoś nie zapisałeś to nie trąb o tym na forum, bo nie jest to powód do dumy i chwały.
  18. 2 punkty
    Jak to zwykle bywa w przypadku katastrof, przyczyna opisanego zachowania nie jest jedna. Po pierwsze zwróćcie uwagę na strukturę wewnętrzną układu 4026 w okolicach wejścia zegarowego. Mamy tu pin CLOCK, który wprowadzony jest przez jakiś tam bufor na wejście bramki NAND oraz pin CLOCK_INHIBIT puszczony przez inwerter na wejście tej samej bramki. Z jej wyjścia dostajemy zegar głównego licznika. Taki schemat oznacza, że oba wspomniane wejścia nie są niezależne od siebie: 4026 zlicza na narastającym zboczu sygnału CLOCK pod warunkiem, że CLOCK_INHIBIT jest w stanie niskim, wejście CLOCK_INHIBIT działa dobrze, gdy CLOCK jest w stanie niskim. Schemat zaprezentowany w artukule nie uwzględnia pierwszego warunku tj. "parkuje" CLOCK w stanie wysokim. To jeszcze nie jest źle od warunkiem, że zwieramy CLOCK_INHIBIT do masy i tak jest to zrobione. Jeżeli można mówić o wadach tego rozwiązania to może to, że licznik zlicza podczas puszczania przycisku CLOCK tj. gdy stan linii powraca pod wpływem opornika do stanu wysokiego a nie podczas wciskania - co wydaje się bardziej naturalne. No i jeśli teraz próbujemy ro\budowac układ o dodatkową blokadę zegara za pomocą wejścia CLOCK_INHIBIT to niestety, każda jego zmiana 0->1 będzie powodowała zliczenie dodatkowego impulsu, bo przy CLOCK=1 generowane jest zbocze na wyjściu wewnętrznej bramki NAND. Aby wejście blokady działało porawnie trzeba zmienić obwód sterowania wejściem CLOCK: opornik dać do masy a przycisk musi podawać plus zasilania. Wtedy nie dość, że licznik będzie inkrementowany w chwili przyciśnięcia to jeszcze CLOCK_INHIBIT będzie bezboleśnie blokował kolejne impulsy zegara.
  19. 2 punkty
    @Tomcat witam na forum Jest to znany błąd - aktualne wersje bibliotek nie obsługują jeszcze pull-upa w nowym Raspberry Pi 4. Trzeba poczekać na aktualizację biblioteki, skorzystać z czegoś innego lub dodać rezystor podciągający ręcznie. Więcej informacji oraz przykładowe rozwiązania znajdziesz tutaj: https://forbot.pl/forum/topic/10480-kurs-raspberry-pi-12-podstawy-gpio-skrypty/?do=findComment&comment=133201
  20. 2 punkty
    A dlaczego miałbyś robić pakiet 3S skoro teraz 2S jest OK? No i co to za ładowarki masz, ja nie wiem i chyba nikt oprócz Ciebie nie wie. EDIT: Przypomnij sobie urządzenie, które kupiłeś w sklepie i które wymaga dwóch dziwnych źródeł zasilania. Trudne prawda? Bo projektuje się tak, by to użytkownikom było wygodnie a nie by schemat był prostszy (a raczej szuka się jakiegoś optimum). Czy samochodzik zdalnie sterowany albo odkurzacz bezprzewodowy wymagają dwóch źródeł? Wyjmujesz akumulator, ładujesz i jednocześnie biegniesz do kiosku po dodatkowy plauszek AA do zasilania, nie wiem, diodek LED? Dlatego proponuję, byś zarówno silniki jak i elektronikę napędzał ze wspólnego źródła. Od silników głównie zależy, czy będzie to 2S czy 3S. Jeżeli są na 6V to naturalnym jest 2S, gdy na 12V - 3S. Reszta elektroniki zawsze sobie poradzi - zrobisz jakąś małą przetwornicę albo i zwykły stabilizator i tyle. Uznałem, że skoro i tak chcesz wsadzić trzy ogniwa 18650 z tego dwa na silniki a jedno dla procesora, to masz tyle miejsca by dołożyć jeszcze czwarte i zrobić pakiet 2S2P/7.2V/5Ah co bardzo odciąży akumulatory i da spory zapas energii. Być może to nie ma sensu w przypadku, gdy praca urządzenia zamyka się np. w 5 minutowym przejeździe przez rynnę. Wtedy szukasz małego aku o dużej obciążalności (np. 2S/800mAh/45C) i korzystasz z tego trochę jak w dronie. Energii wystarcza na powiedzmy 15 minut pracy, ale całość jest megalekka a silniki nie muszą dźwigać klocka z akumulatorami, bo zasilanie waży wszystkiego 80g. Gdy zdecydujesz się na dwa osobne źródła, po kilku uźyciach (jesli nie po pierwszym) będziesz przeklinał ten dzień. A to jeden będzie rozładowany a to drugiego zapomnisz naładować itd.. Jeden pakiet to wygoda. Możesz takie zrobić sobie dwa i jeździć na zmianę. Przy dwóch różnych zestawach już robi się zagadnienie z zarządzania, bo przecież między dniami pracy powinieneś przechowywać je w stanie "storage" a więc rozładowane do połowy. Ładowarka modelarska jest w tym wypadku nieoceniona bo (zwykle) umie też rozładowywać właśnie do poziomu 3.8V. Być może jest to projekt, w którym masa się nie liczy a wręcz przeciwnie - urządzenie walczące z syfem zalegającym po zimie powinno być spore i ciężkie. Wtedy nie ma sensu oszczędność LoPolowa i być może lepszym rozwiązaniem jest jakiś mały żelowy typu 12V/3Ah z którym nie trzeba się cackać, ładujesz go sprzętem za 10zł a dodatkowo robi spory procent masy całości i zapewnia stabilność podczas pracy. Podsumowując: chcę tylko powiedzieć, że wybór zasilania to nie jest decyzja chwili i rzut oka do szuflady, bo złe pomysły położą się cieniem na cały okres użytkowania sprzętu i na jego cechy funkcjonalne. Nawet jeśli już podjąłeś decyzję (tak, bo tak mi się podoba), przemyśl ją raz jeszcze patrząc na to pod różnymi kątami, nie tylko jak najszybszego przejścia do budowy podwozia. Być może warto zainwestować teraz jakieś (niewielkie) pieniądze by potem nie jęczeć, że trzeba było zrobić inaczej.
  21. 2 punkty
    Trochę Ciężko Cię zrozumieć, nie wiem czy tylko ja mam takie wrażenie? No ale z tego co do mnie dotarło radzę: Wywal przetwornicę - jest kompletnie zbędna. Od regulacji silników masz mostki. Zasilaj je wprost z akumulatorów a jeśli naprawdę boisz się o silniki, nie steruj PWM do 100%. Nie używaj układów L29x, na nich spadają zawsze 1.5-4V więc się grzeją i są mało wydajne. To starocie, zapomnij o nich. Zapomnij także o prądach podawanych na pierwszych stronach not katalogowych. To są wyniki uzyskiwane w laboratorium dla idealnego, maksymalnego dla danego scalaka chłodzenia. Nie masz szans (albo jest to kompletnie niepraktyczne) robienie tego w swoim układzie. Jeśli chcesz gęsto pakować elementy i nie przewidujesz jakichś przemyślanych radiatorów ("doda sie jakis radiator...") to przyjmuj 50% tego co piszą w katalogu. Potrzebujesz 2A na silnik? Szukaj mostka na 4-5A - wtedy postawisz go obok drugiego takiego samego, obok jeszcze jakiś stabilizator, wszystko zamkniesz w obudowie i nadal będzie działać. Bez sensu ten trzeci akumulator. Staraj się nie kombinować z rodzajami źródeł zasilania. Jeden główny akumulator łatwiej kontrolować, mierzyć w układzie a nawet ładować i niż dwa różne. Tylko jedna ładowarka i jeden pakiet. Jeżeli masz miejsce, to już lepiej idź w pojemność i daj 2x2x18650. Masz wtedy 7.2V/5Ah na 4 ogniwach a to już jest coś. Równolegle połączone aku są też mniej obciążone i dłużej pożyją.W porównaniu z silnikami to procesor i reszta cyfrówki bierze tak mało prądu, że wystarczy moim zdaniem zwykły stabilizator liniowy typu 1117. No chyba, że wstawiasz Malinę, kamerkę (dwie, trzy?), transmisję video po WiFi, itp. Serwa raczej nie służą do pracy ciągłej pod dużym obciążeniem albo muszą być sporo przewymiarowane. Nawet jeśli wypatroszyłeś elektronikę i korzystasz z samej mechaniki, to ich małe silniczki są zapakowane w plastikowe pudełeczko i chłodzenia to raczej nie mają. Jeśli ten napęd ma robić w rynnie armageddon, to ja bym co najmniej jakieś otwory powiercił w obudowach albo dał naprawdę mega serwa. Koniecznie musisz kontrolować stan silników napędzających ten mechanizm oczyszczania - obroty lub chociaż temperaturę, bo to pierwsza rzecz która się spali przy blokadzie a jak rozumiem będzie tam miało co blokować.. Nie jestem pewien czy odróżniasz moc od momentu. Jeśli potrzebujesz momentu (czyli mocno ale może być powoli), wystarczy mały silniczek i przekładnia zwalniająca - jak w serwie. Ale jeśli oczekujesz mocy (czyli mocno i szybko jednocześnie), to ona w całości bierze się z silnika i tylko od jego wymiarów zależy to ile dostaniesz na wyjściu. Szczotkowy silniczek modelarski oddający kilkadziesiąt Watów przy chłodzeniu w powietrzu ma wymiary fi 25 i długość ze 40mm. Zaglądałeś jaki biedaczek siedzi w serwie? Myślę, że 10W to szczyt jego możliwości.
  22. 2 punkty
    Jakiś czas temu na portalu z ogłoszeniami natknąłem się na ofertę sprzedaży zabytkowego układu scalonego AY-3-8500. Jest to dość specyficzny element, wykorzystywany na przełomie lat siedemdziesiątych i osiemdziesiątych do budowy konsol do gier pierwszej generacji. Układ scalony zawiera w swojej strukturze kompletną logikę, niezbędną do generowania kilku prostych gier, m.in. kultowego "Ponga". Wykorzystywany był m.in. w kultowym ELWRO/Ameprod TVG-10 - jedynej polskiej konsoli do gier, jaka trafiła do masowej sprzedaży. Oczywiście nie byłbym sobą, gdybym go wtedy nie kupił i nie spróbował odpalić. Zacząłem więc szukać w Sieci informacji na temat tego układu. Efekty tych poszukiwań przeszły moje oczekiwania - natknąłem się na stronę, której autor zajął się podobnym projektem. Była tam cała niezbędna dokumentacja, karty katalogowe, a także projekt płytki drukowanej konsoli wykorzystującej posiadany przeze mnie układ scalony. No cóż... Postanowiłem nie wyważać otwartych drzwi i wykorzystałem ten wzór, prowadzając jednakże pewne modyfikacje w swojej implementacji tego projektu. Największa z nich dotyczyła kontrolerów , które zbudowałem w oparciu o niewielkie, plastikowe obudowy. Musze przyznać, że tworzą one całkiem poręczne "pady". Każdy z kontrolerów jest wyposażony w potencjometr służący do kontrolowania położenia paletki oraz przycisk do serwowania. Sama konsola została umieszczona w typowej plastikowej skrzynce. Na przednim panelu znajdują się przełączniki dźwigniowe dwu i trzypozycyjne służące do konfiguracji trybu rozgrywki, a także przełącznik obrotowy, do wyboru właściwej gry. Układ AY-3-8500 pozwala na korzystanie z pistoletu świetlnego. Dwie z generowanych przez niego gier wymagają posiadania takiego sterownika. Zdecydowałem się jednak zrezygnować z jego budowy. Na płytce są wyprowadzone odpowiednie piny, więc w przyszłości będzie możliwa taka rozbudowa. Niestety strona na której znalazłem oryginalny projekt niedługo później przestała działać, jednak wciąż można się do niej dostać przez Wayback Machine. Konsola przez jakiś czas była dostępna na wystawie "Game start/game over" w krakowskim Muzeum Inżynierii Miejskiej. Przetrwała - grupy gimnazjalistów nie były w stanie jej zniszczyć. W ramach ciekawostki mogę dodać, że mojemu sześcioletniemu siostrzeńcowi spodobała się ta gra sprzed kilku dekad.
  23. 2 punkty
  24. 2 punkty
    Dostałem Kupon rabatowy, jak go chcesz to pisz. Mnie on sie nie przyda a szkoda aby się zmarnował. Byłem młody i promuję młodzież.
  25. 2 punkty
    Co do artykułu. Jeśli przestaniesz zasilać ogniwo peltiera to ciepło z jednej strony szybko zostanie przerzucone na drugą także to niezbyt eleganckie rozpraszanie ciepła, żeby utrzymać temperaturę wewnątrz. Lepiej liniowo zmniejszać napięcie zasilające a co za tym idzie pobierany prąd, żeby transfer ciepła był tylko w jedną stronę. Poza tym nadal się zastanawiam skąd ludzie tutaj wiedzą na podstawie samego ogniwa jaka bądzie temperatura. Jeśli dostatecznie dobrze zaizolujesz lodówkę to możesz nawet otrzymać ujemne temperatury. Pytanie oczywiście jak długo chcesz czekać. Tu gość używa słabszego ogniwa: i jakoś udaje mu się uzsyakć po stronie chłodnej ujemną temperaturę.
  26. 2 punkty
  27. 2 punkty
    Moim zdaniem schemat jest już na poziomie pozwalającym na przejście do etapu rysowania płytki. Gdybym miał jeszcze trochę podyskutować, to w temacie pomiaru napięcia akumulatora - zostawiłem go sobie na deser. Moduł alarmowy - nawet jeśli już jakiś kupiłeś - lepiej zostaw w spokoju, może przyda się do jakiegoś kolejnego projektu bo a) nie wiadomo jak tam jest sterowany buzzer i nie ma gwarancji, że będziesz mógł jego pin podciągnąć bezpośrednio pod procesor, b) wygodniej będzie dysponować informacją "analogową" z własnego źródła danych czyli lokalnego ADC. Przy tej wielkości schemacie rozszerzenie go o dwa oporniki niczego nie zmienia, a pozbywasz się dyndającego gdzieś na drutach obcego modułu alarmowego. Tak więc aby wyposażyć Twój kombajn w pomiary analogowe powinieneś zrobić dwie rzeczy: doprowadzić odpowiedni sygnał do ADC, ochronić ADC przed śmieciami na +5V. Pierwsza z tych rzeczy to prosty dzielnik z dwóch oporników, jaki wstawiasz między +12V a GND. Liczysz oporniki (oba w zakresie 10-51k) tak, by doprowadzały do któregoś pinu analogowego (ADC3?) nie więcej jak 5V przy maksymalnym napięciu akumulatora. Mając LiPol 3S możesz teoretycznie dostać 12.6V więc przyjmij, że wtedy ADC "zobaczy" nie więcej jak 4.6-4.8V. Dokładny współczynnik nie jest ważny, i tak kupujesz oporniki kilkuprocentowe a kalibracja systemu w czasie uruchamiania kodu będzie dobrym ćwiczeniem z pomiarów Oprócz dwóch oporników potrzebujesz jeszcze filtrowania tego sygnału: dajesz kondensator rzędu 1uF równolegle do dolnego opornika dzielnika. W ten sposób dostajesz filtr dolnoprzepustowy wycinający i uśredniający jeszcze po stronie analogowej "schodki" produkowane na zasilaniu przez modulator PWM i silnik. Druga ze wspomnianych spraw to zapewnienie przetwornikowi ADC spokojnej pracy. W AVRach bloki analogowe zasilane są na szczęście z osobnego pinu AVCC i na nim trzeba się skupić. Na schemacie, pomiędzy strzałkę +5V a kondensator C5 musisz wstawić element, który wytnie szpile i inne ew. zakłócenia biegające po linii +5V. Będą się one brać z samej pracy procesora, ale też w takim środowisku jak tutaj będą indukować się przez powietrze i laminat z okolic stopnia mocy. Daj więc szeregowo we wspomniane miejsce albo mały dławik 10-22uH albo opornik 10-22R. Dławik jest trochę lepszy, bo tłumi lepiej większe częstotliwości ale z kolei jest elementem czułym na pole magnetyczne i w pewnych sytuacjach może nawet pogorszyć zasilanie AVCC. Jego położenie (orientacja) zaczyna być krytyczne w okolicach dużych prądów i optymalne PCB jest nie do przewidzenia w pierwszym podejściu. Opornik w wersjach "poor-men" działa wystarczająco dobrze i nie sprawia niespodzianek. Acha, mając oba piny magistarali I2C wolne (myślę o SDA/SCL), wyciągnąłbym je na dodatkowe złącze i podciągnął opornikami 10k do +5V, bo za miesiąc, gdy już ogarniesz co najważniejsze może Ci przyjść ochota na pomiary temperatury, wilgotności czy jakiś inny ciekawy czujnik umieszczony na łodzi lub nawet podpięcie małego wyświetlacza OLED i zabawa z wyświetlaniem parametrów pracy (liczba ramek odebranych/straconych, siła sygnału radiowego, wysterowanie PWM, napięcie zasilania itp). Poza tym przecież nie jest powiedziane, że płytka będzie wyłącznie pływać. To może być dobra baza do innych projektów, dodatkowe złącze nic nie kosztuje a nie musisz lutować drutów do gołych padów procesora. Na złączu daj +5V, GND i linie I2C. Jeśłi masz jakiś wolny pin portu, możesz go wypuścic na kolejny (piąty?) pin tego złącza, nigdy nie wiadomo co tam ktoś będzie potrzebować.. Acha, odepnij wyjście OUTB od masy. To nie jest dobry zwyczaj przywieranie wyjść do czegokolwiek. Wymusiłeś stan niski na wejściu INB i OK, a OUTB jest mocno sterowane z wewnątrz czipu i niech tak zostanie. Wszystkie moje drony mają buzzer na pokładzie informujący o uzbrojeniu/gotowości kontrolera do lotu, alarmie akumulatora itp. Być może warto - jeśli płytka będzie umieszczona i zabudowana pod pokładem - wstawić podobne coś tutaj. LEDów nie widać a po załączeniu zasilania będziesz mógł zrobić biip pokazujący gotowość (i np. nawiązanie kontaktu radiowego) albo różnorodne bip-bip-bip informujące o jakimś problemie. To się przydaje. Więc jeśli nie masz jeszcze dość, wstaw jakiś mały tranzystor npn (opornik w bazie!) i biper 5V w jego kolektorze, sterowane z któregoś wolnego pinu procka. To także "nic nie kosztuje" a na płytce nie musisz nawet buzzera umieszczać tylko małe złącze. Sam głośniczek możesz wyciagnąć gdzieś na pokład żeby było lepiej słychać. Jak chcesz fizycznie zamontować moduł radiowy? Czy bedzie leżał na Twojej płytce (mocowanie?), czy na kabelkach gdzieś obok? Czy moduł ma zintegrowaną antenę czy raczej wymaga czegoś zewnętrznego na kablu? Masz już tę antenę? Jej poprawny (lub zły) montaż może kilkukrotnie zmienić zasieg. Niniejszym, po wprowadzeniu powyższych poprawek dysponujesz schematem na którym zrobiłeś wszystko co potencjalnie można było zrobić by układ działał poprawnie i stabilnie. Czeka Cię zatem PCB. Tutaj będziesz musiał procyzyjnie odróżnić część cyfrowo-sterująco-pomiarową od stopnia wyjściowego. Pogrupuj elementy zgodnie z tym podziałem, gdzie z oczywistych względeów elementem pośrednim będzie driver bramki. W podział wchodzą też kondenstaory na zasilaniach. Możesz też w celach roboczych przerysować sobie schemat tak, by było widać ten podział, bo kluczowym jest zrozumienie którędy a) będzie płynął prąd silnika, b) którędy będą płynąć impulsy zasilania bramki. Jeśli te obwody zrobisz dobrze, reszta będzie kaszką z mleczkiem. Pamiętaj, że prąd płynie w zamkniętych oczkach więc przykładowo prąd silnika wypływa z "+" akumulatora przez złącze +12V na płytce, złącze silnika (tam i z powrotem) dren tranzystora, źródło tranzystora, ścieżkę masy do pinu "-" złącza zasilania i ujemnego zacisku akumulatora. Ten obwód musisz wydzielić z całego PCB jako krytyczny. Zapomnij o zalewaniu masą wszystkiego co się rusza. Płytka będzie wymagała fizycznego odseparowania mas opisanego oczka od masy procesora i połączenia ich tylko w jednym, dobrze dobranym miejscu. Topologicznie na PCB skup blikso siebie elementy: złącze zasilania, złącze silnika, dioda i MOSFET. Niech ścieżki łączące te elementy bądą krótkie i szerokie a masa będzie jedną "wyspą" miedzi w której osadzisz źródło MOSFETa i złącze zasilania z aku. Do tej wyspy podłączysz później masy procesora i drivera. Pokaż schemat (3.1?) po ostatnich poprawkach i.. zaczynaj Wrzucając ew. rysunki PCB nie pokazuj na razie ścieżek a tylko samo rozłożenie elementów (placement). To wystarcza by ocenić (wprawnym okiem ) poprawność tego kroku i rokowania na przyszłość. Pamiętaj, że w zasadzie każda płytka jest pewnym kompromisem między wymaganiami elektrycznymi a mechanicznymi. Połączenia prądowe powinny byc krótkie i szerokie, ale wzajemne rozmieszczenie elementów, ich wymiary, mocowania lamiantu, radiatory itp rozpychają wszystko i trzeba wiele aspektów brać pod uwagę. Od razu zakładaj jakieś umieszczenie tranzystora na radiatorze (pionowy czy poziomy, jak duży, jego montaż, śruby, otwory), otwory mocujące płytkę (np. 4xM3 w rogach?) itd itp. Wprowadzanie tego później to rewolucja i ogromna strata czasu. Dobra, dość trucia, masz ciekawsze rzeczy do roboty
  28. 2 punkty
    @Faramir Można też po prostu przestać pisać, w końcu każdy ma prawo zmienić zdanie i może konto jeszcze się przyda. A to że forum nie jest dla każdego... coś w tym jest. Ja tylko zacytuję powiedzenie "Jeśli jedna osoba mówi ci że jesteś osłem to ją zignoruj, jeśli dwie osoby mówią ci ze jesteś osłem to je zignoruj. Jednak jeśli pięć osób mówi ci że jesteś osłem to idź i kup sobie siodło..." - tak do przemyślenia
  29. 2 punkty
    Cześć, znalazłem kod w VHDL'u do mnożenia macierzy (32x32: 16-bit unsigned integer): https://www.fpga4student.com/2016/11/matrix-multiplier-core-design.html mógłby się przydać do policzenia pozycji (x,y,z) z liczników enkoderów dla przegubów w tym manipulatorze. A tutaj kod w Verilogu do mnożenia macierzy o wymiarze 4 : https://www.fpga4student.com/2016/12/fixed-point-matrix-multiplication-in-Verilog.html Jest lepszy w tym sensie, że mnoży macierze o wymiarze 4 (a nie 32 jak w poprzednim przykładzie), a właśnie takie rozmiary są nam potrzebne, aby obliczyć zadanie proste kinematyki dla tego manipulatora. Pozdrawiam
  30. 2 punkty
    Cześć @Szałszanin, pytanie z czystej ciekawości: do czego chcesz użyć tego skanera? Jeśli przeczytasz moje dalsze posty to zobaczysz, że zrobienie dekoderów dla enkoderów kwadraturowych jest proste. Jeśli podałbyś jak z wartości 7-miu liczników pozycji w dekoderach dla każdego przegubu obliczyć pozycję x,y,z ramienia, to może udałoby się całość sterowania zrobić na układzie FPGA (bez potrzeby zatrudniania mikro-kontrolera). Jestem dość słaby z mechaniki - jeśli podałbyś jak obliczyć to zadanie proste kinematyki, to może udałoby się to policzyć w całości na układzie FPGA Przejrzałem trochę teorii pod tym linkiem: https://www.robotyka.com/teoria.php/teoria.75# Jeśli byś podał macierze w notacji Denavita-Hartenberga dla twojego manipulatora to myślę, że całość udałoby się policzyć na układzie FPGA (bez użycia soft-procesora). Funkcje trygonometryczne można stablicować i policzyć korzystając z algorytmu CORDIC, a mnożenie macierzy wykonać na sprzętowych układach mnożących i blokach DSP z układu FPGA. Pozdrawiam
  31. 2 punkty
    6.3 #include <Servo.h> Servo serwomechanizm; byte pozycja = 0; int pozycjaPoprzednia = 0; int mini=500; int maxi=500; void setup() { serwomechanizm.attach(11); Serial.begin(9600); } void loop() { int odczytCzujnika = analogRead(A5); if(mini>odczytCzujnika){ mini=odczytCzujnika; } if(maxi<odczytCzujnika){ maxi=odczytCzujnika; } pozycja = map(odczytCzujnika, mini, maxi, 0, 180); if (abs(pozycja-pozycjaPoprzednia) > 3) { serwomechanizm.write(pozycja); pozycjaPoprzednia = pozycja; } Serial.println(pozycja); Serial.print("mini"); Serial.println(mini); Serial.print("maxi"); Serial.println(maxi); Serial.println(); delay(500); }
  32. 2 punkty
  33. 2 punkty
    Musisz wejść C:/Users/Twoja nazwa użytkownika.../.platformio/lib, i tam wkleić folder z biblioteką, potem jak uruchomisz VSC to biblioteka powinna pojawić się w zainstalowanych. Mam nadzieję że pomogłem
  34. 2 punkty
    Nie możesz tutaj użyć filtra RC z uwagi na sprawność. Tak jak napisał grg0 jednym rozwiązaniem jest znacznie zwiększenie częstotliwości PWM - to nie gryzie. Przecież możesz zrobić 1kHz i zapomnieć o wszelkich drganiach a nawet pojechać wyżej niż akustyka (>16kHz) i przestać słyszeć to upierdliwe piszczenie silnika. L298 spokojnie działa do 35-40kHz. Swoją drogą jest on tak beznadziejny (co wciąż ludzi składania do kupowania tego badziewia?), że ogromne straty związane z jego przewodzeniem i tak przekroczą straty na przełączanie. Drugim rozwiązaniem - owszem, jest filtr, ale LC. Tylko taki zestaw zapewni wystarczającą sprawność. Popatrz: układ RC jest z definicji układem stratnym, bo ma opornik. Jeżeli chcesz przez niego przesyłać moc do silnika (a nie tylko sygnał np. z czujnika do ADC) to musisz pogodzić się z tym , że opornik będzie się grzał i spora część energii (ta która nie przejdzie do wyjścia) wyparuje w postaci ciepła. Natomiast konfiguracja LC teoretycznie jest bezstratna, bo indukcyjność magazynuje energię w polu magnetycznym i może mieć zerową rezystancję a do wyjścia dociera tylko to co zostało pobrane z wejścia - nic po drodze nie znika. Oczywiście w praktyce tak nie jest( bo jesteśmy w realnym świecie miedzi i rdzeni a nie nadprzewodników), a na dodatek tak niska częstotliwość powoduje, że cewka musiałaby mieć ze 100mH i wciąż przepuszczać ponad 1A prądu (jaki masz silnik? jaki prąd? - to ważne dla projektu filtra). To już się robi klocek wielkości i pudełka zapałek.. Do tego dajesz jakiś bipolarny (nie-elektrolityczny) 100uF i powinieneś zauważyć znaczący (np 10-krotny) spadek tętnień prądu w silniku. Gdybyś wbrew wszelkiej logice zdecydował się na tak absurdalne rozwiązanie (może np. nie masz wpływu na częstotliwość PWM), to narysuj jakiś schemat i pokaż. Zobaczymy czy załapałeś o co chodzi.
  35. 2 punkty
    Ok, zrozumieliśmy, że (na razie) nie umiesz tego zrobić. A jakie jest pytanie? Czy po prostu informujesz nas, że zabierasz się do roboty, przestajesz ściągać z sieci kody których nie rozumiesz, zaczynasz czytać kursy programowania i począwszy od prostych problemów uczysz się rozwiązywać coraz bardziej skomplikowane? To super, będziemy kibicować. Każdy kiedyś zaczynał i świetnie, że postanowiłeś wziąć byka za rogi i poświęcić miesiąc-dwa na zrozumienie jak planować i pisać programy. Brawo. Nie święci garnki lepią, Tobie na pewno też się uda. Pamiętaj, żeby zawsze dobrze określić co program ma robić i kiedy, jakie są wejścia i jakie wyjścia. Acha, i jeszcze: programów nie pisze się metodą łączenia kilku w jeden większy, to nie lepienie bałwana gdzie każda garść śniegu da się przypaćkać do reszty. Myśl o tym bardziej jak o budowaniu zagarka: każdy trybik musi mieć swoje miejsce, powinien być wstawiony w odpowiedniej kolejności i pasować do pozostałych. Nie zrobisz tego, gdy na siłę będziesz próbował łączyć ze sobą przypadkowo wyjęte z szuflady zębatki. Rezultat takiej pracy będzie raczej steam-punkową biżuterią lub bezużytecznym kurzołapem, ale na pewno nie działającym zegarkiem. Musi być jakiś pierwotny zamysł, plan wg którego postępujesz od pierwszej do ostatniej linii kodu. Może załóż worklog gdzieś w dziale "Projekty nieukończone", opisz dokładnie co chcesz zrobić i wrzucaj co jakiś czas postępy. Pomocnicze pytania z Forum gwarantowane
  36. 2 punkty
    A liczyłeś zapotrzebowanie na energię? Bo z prostego rachunku, gdy wszystkie diody świecą na biało wychodzi 144*3*0.02A*5V*1h = 43Wh a to wydaje się na styk z tym co masz w ogniwie. Szkoda, że sami nie podają energii, ale przybliżając masz: 3.2V*15Ah = 48Wh. A gdzie jeszcze jakieś sprawności przetwornic, marginesy bezpieczeństwa, cyfrówka, radio itd? Moim zdaniem dopiero zapas 50% zaczyna wyglądać obiecująco. EDIT: Ale podają gęstość mocy (100Wh/kg) i masę ogniwa (480g) a z tego prosty wniosek: strzelałem dobrze, 48Wh
  37. 2 punkty
    Schemat jest OK. Dobrze rozumiesz jego działanie więc oporniki liczysz także dobrze. Ja bym nie by takim pesymistą i zaczął od np. 5x mniejszego prądu bazy pnp odpowiednio zwiększając R2. Opornik R3 rzeczywiście zapobiega ew. delikatnemu załączaniu pnp przez prądy upływu npn i może być nawet większy, 22-100k. R4 zapobiega stanom nieustalonym (czyli załączaniu układu) w chwilach gdy program nie steruje portami: gdy załączane jest zasilanie, gdy programujesz procesor lub gdy z innego powodu stoi on w stanie RESET.Wtedy nie wysyłasz tam wcale zera a pin jest w stanie wysokiej impedancji. Specyfikacje pinów tego typu zwykle podają jakąś niezerową wartość prądu płynącego do lub z pinu bo przecież nie ma pewności, że oba wewnętrzne tranzystory drivera pinu są idealne i mają zerowe prądy wyłączenia.Ponieważ są to zwykle jakieś pojedyncze uA, to możesz dać tu nawet i 100k.Ważne, żeby nie popłynęło to do bazy npn. Kondensator kształtujący/zwalniający załączanie powinno dawać się tam gdzie rezystancje są największe a prądy najmniejsze po to by nie musiał być zbyt duży. Dobrym miejsce jest baza npn (do masy) bo ten punkt jest sterowany przez R1 więc łatwo możesz tu uzyskać względnie dużą stałą czasową małym kosztem (tj. małą pojemnością). Zacznij od 1uF - to dobry punkt początkowy i zobacz oscyloskopem jak szybko narasta napięcie wyjściowe z i bez tego kondensatora. A potem (albo jednocześnie) obejrzyj drop zasilania 6V w obu przypadkach. Baterie - jako źródła chemiczne - generalnie są dość wolne więc słabo reagują na takie skokowe zmiany prądu obciążenia i spadek podczas załączania serwomechanizmów może być dość spory. Aby troszkę poprawić "odporność" źródła zasilania na takie szpile prądu możesz dać równolegle do baterii jakieś dobre 100uF. Masz co prawda kondensator na wejściu stabilizatora, ale nie wiem gdzie go tam upakujesz. Najlepiej gdyby było coś bezpośrednio na kolektorze pnp. EDIT: Uwaga poprawka: powinno być: na emiterze pnp. Chodzi przecież o wsparcie baterii a nie o powiększenie szpilki prądu.. Przepraszam, pisałem trochę w pośpiechu. Moim zdaniem stawianie sobie bardziej skomplikowanych zadań i rozwiązywanie praktycznych problemów w nich występujących jest dużo lepsze niż robienie monotematycznych lekcji typu "LED", "buzzer", "LCD" itd. Powodzenia EDIT: Jamik: pisaliśmy razem. Symulator oczywiście jest fajny, ale intuicja wyrabiana podczas ręcznego analizowania tak prostych schematów jest niezastąpiona. A kolega Scynk poradził sobie świetnie. Oczywiście kwestia spalenia się jest otwarta. Moim zdaniem raczej nie, ale przecież wszystko zależy tu od wielu czynników: typu, stanu pracy, sposobu sterowania i obciążenia serw, stanu baterii.. Nie wymyślimy tego tutaj zdalnie. Na pewno zmiana układu pracy tranzystora mocy i zminimalizowanie jego Uce była konieczna bo ewidentnie była to skucha w projekcie
  38. 2 punkty
    No wiesz, ESP32 ma wbudowany ESP w 99% przypadków programujesz to tak samo jak Arduino. Do złącz analogowych wystarczy zwykły dzielnik napięcia (jeśli potrzebujesz, bo pewnie nie). Sprawdź jakie moduły będą działać na 3.3V.
  39. 2 punkty
    Witam. Polecam również stronę http://nandland.com. Można z niej sporo się dowiedzieć o VHDL i nie tylko
  40. 2 punkty
    Witam. Jak już mierzysz napięcie, to na cewkach, czyli pomiędzy 1A-1B lub 2A-2B. Kiedy silnik stoi, należy mierzyć napięcie stałe, kiedy się kręci - przemienne. Taka różnica nie ma krytycznego znaczenia. Ja bym tu widział inny problem. Jak tak patrzę na schemat, który przedstawiłeś, to widzę, że w zasilaniu silnika masz włączony stabilizator napięcia. Ten stabilizator właściwie jest zbędny. Oprócz tego pomiędzy wyjściem stabilizatora a sterownikiem masz wstawione szeregowo dwa rezystory o łącznej rezystancji (jeśli dobrze widzę) 30 Ohm. Te rezystory też są zbędne, a właściwie mogą przeszkadzać. W trybie pełnokrokowym (piny MS1-3 podłączone do masy) sterownik zasila dwie cewki jednocześnie, więc łączny prąd dostarczony do silnika powinien wynosić 0,8A. Biorąc pod uwagę, że równolegle połączone cewki będą miały rezystancję wypadkową 15 Ohm + dodane przez Ciebie dwa rezystory łącznie 30 Ohm, to razem 45 Ohm, razy 0,8A to daje potrzebne napięcie zasilające 36V. Nie wiem, jakie masz napięcie na wyjściu stabilizatora, ale podejrzewam, że mniejsze. Poza tym w różnych trybach w różnych pozycjach silnika zapotrzebowanie na prąd zasilający może się zmieniać, a to spowoduje różne spadki napięcia na rezystorach szeregowych. Dlatego ja proponowałbym (biorąc pod uwagę rezystancję cewki i wymagany prąd) zwykły zasilacz 12V napięcia stałego (wystarczy niestabilizowany) o wydajności prądowej minimum 1A, bez rezystorów w szereg z zasilaniem silnika. Do prób powinno wystarczyć. Gdybyś chciał bardziej precyzyjnie dobrać zasilanie silników, zerknij tutaj. Jak już wspomniał wcześniej kolega @FlyingDutch , jednego kroku możesz nie zauważyć, więc dobrze byłoby zrobić pętlę nieskończoną. Ja chciałbym tylko zwrócić uwagę, że kiedy tworzysz pętlę, to trzeba dodać w pętli jeszcze jedno opóźnienie. No i dałbym krótsze te opóźnienia. Podczas pracy pełnokrokowej, przy opóźnieniu 0,1s i 200 krokach na obrót, jeden obrót będzie trwał 40 sekund (podczas pracy mikrokrokowej jeszcze więcej) więc to i tak bardzo wolne obroty. while True: GPIO.output(16, GPIO.HIGH) #stan_wysoki time.sleep(0.1) GPIO.output(16, GPIO.LOW) #stan_niski time.sleep(0.1)
  41. 2 punkty
    Cześć, temat znalazłem dopiero teraz. Wiem że odkopuję ale myślę że warto, mało jest informacji o Black Magic Probe po polsku. Ja zrobiłem swoje BPM sam - wgrałem firmware na tą niebieską płytkę z STM32 F103 za 2$ - i używam w obecnym projekcie zamiast ST Link. Rzeczywiście BMPzawiera serwer GDB na pokładzie. Wystarczy podłączyć i otworzyć port szeregowy. Pierwsze wrażenie było takie że wgrywanie programu działa mi zauważalnie szybciej niż na ST Link, podejrzanie szybko musiałem dać dla pewności jakiegoś blinka czy tam hello world po serialu żeby mieć jakieś obserwowalne zmiany. Może to kwestia jakichś przesadnie zachowawczych domyślnych ustawień ST Link które można sobie zmienić, nie szukałem więcej. Debugowanie działa stabilnie, jeszcze mi się nie wywaliło ani razu. Do tego jest dodatkowy port szeregowy po tym samym kablu. Korzystałem tylko z programowania i debugowania STM32 po SWD, jest jeszcze JTAG i wspierane jest więcej rodzin MCU od kilku innych firm, choćby Nordic nRF51 i 52. Podsumowując jestem zadowolony. Mam oskryptowane flashowanie firmware BMP, jak komuś się przyda mogę udostępnić repozytorium.
  42. 2 punkty
    Mały update dla zainteresowanych, aktualnie jestem na takim etapie: Niestety kula okazała się dość gruba, i zakupione magnesy są w stanie ledwo utrzymać się na wzajem, więc do środka prawdopodobnie będę musiał dokupić jakieś większe(o ile nie zmienię w przyszłości sfery). Teraz mam pytanie, jakie sterowniki polecacie do silników 12V, 2A(pik 3.8A) z czujnikiem Halla? Oraz jeżeli zdecydowałbym się nie korzystać z czujników czy 2 sterowniki L298 z oddzielnymi źródłami zasilania to dobry pomysł? Ogólnie planuję mieć 1 lub 2 źródła zasilania na silniki i oddzielne na arduino z sensorami.
  43. 2 punkty
    Cześć, niedawno był wątek bardzo podobny i użytkownik forum chciał kupić jako swój pierwszy multimetr - multimetr wzorcowy Brynera za 2K PLN (taki jaki jest używany w mojej firmie do sprawdzania dokładności innych mierników). Watek według mnie trochę podobny. Ja osobiście używam Bitscope mini (BS10) i nie zamienił bym go na Hantek'a czy Rigol'a z 2 do 3 K PLN. Powody: 1) Jest dużo bardziej uniwersalnym narzędziem pomiarowym od taniego oscyloskopu stacjonarnego (takiego z 2K PLN) 2) Zajmuje dużo mniej miejsca 3) Software ma bardzo wymyślne funkcje i jest bardzo często aktualizowany 4) Wyświetlacz jest dużo większy 5) Jest tańszy Przedtem używałem przez 2 lata Bitscope micro: http://bitscope.com/product/BS05/ i byłem też zadowolony, ale od czasu gdy zacząłem zajmować si,ę układami FPGA to pasmo 20 MHz przestało mi wystarczać. W firmie dla której robiłem zlecenie przez kilka miesięcy używałem Hantek'a za właśnie gdzieś około 2 K PLN. Gdybym miał wybór wybrałbym Bistcope Mini ze względu na dużo większy zakres funkcjonalności i większy wyświetlacz. W pracy mam oscyloskop za około 20 K PLN i analizator widma za około 40 K PLN i razem mają zbliżoną do niego BS10 funkcjonalność (oprócz oczywiście od szerszego pasma częstotliwości). Oczywiście masz pełne prawo mieć odmienne zdanie i właśnie po to jest forum. Ja też kiedyś uważałem, że osobny oscyloskop jest lepszy, niestety praktyka tego nie potwierdziła. Stacjonarnego oscyloskopu nie wsadzisz do niedużego plecaka, czy torby, zajmuje sporo miejsca a często dostęp do zabudowanych urządzeń jest utrudniony (np. na jakichś wyjazdach serwisowych). Funkcje software'u są bardzo rozbudowane co często bardzo się przydaje i dość często aktualizowane. Nie obraź się, ale nie uważam, żeby zakup oscyloskopu analogowego miał większy sens niż cyfrowego Pozdrawiam
  44. 2 punkty
    Zawsze możesz użyć jakichkolwiek mechanizmów blokowania - w przypadku kilku programów działających równolegle np. flock.
  45. 2 punkty
  46. 2 punkty
    Super projekt i sam pomysł nauki programowania przez pisanie gier też jest bardzo ciekawy. Nie tak dawno temu miałem chęć napisania takiej namiastki gry działającej w konsoli. W efekcie powstało coś takiego.
  47. 2 punkty
    @Brawler pomiar tego typu można dokonać normalnie za pomocą miernika. Upewnij się tylko, że to "goły" przewód i nic do niego nie jest podłączone. Jeśli przewód jest gdzieś zamontowany (np. w ścianie) i nie masz możliwości przytknięcia sond pomiarowych do obu końców kabla to... możesz zwyczajnie po jednej stronie zewrzeć dwie żyły przewodu, a po drugiej stronie przyłożyć sondy pomiarowe do obu żył. Pamiętaj tylko, aby taki wynik podzielić przez dwa. Pomiar oporu został omówiony tutaj: Kurs elektroniki – #1 – napięcie, prąd, opór, zasilanie
  48. 2 punkty
    Przyszła pora na zbudowanie czegoś jeżdżącego a, że jakiś czas temu trochę spodobały mi się linefollowery to stwierdziłem, że i ja takiego zbuduję. Prezentowany robot to w sumie jego druga wersja, pierwsza była trochę niedoskonała i nie wyszła z fazy alfa, za to od niej wzięła się nazwa tego robota czyli „Grzmot” (po prostu tamten był jeszcze większy i cięższy a przede wszystkim brzydszy). Mechanika Całość oparta jest na dużej płytce uniwersalnej o wymiarach 150x90 na której znajdują się wszystkie elementy mechaniczne oraz elektroniczne. Napęd stanowią dwa silniki Pololu z przekładnią 30:1, koła to również firma Pololu, 32x7, do tego plastikowe mocowania silników. Przednie ślizgacze są zrobione z tego co akurat było pod ręką, kilka warstw kartonu przyklejonych na kropelkę. Działa zadziwiająco dobrze i jeszcze się nie urwało. Elektronika Mózgiem robota jest arduino pro mini, sterownik silników to L293D (wiem, dinozaur ale to nie jest konstrukcja na zawody tylko do nauki, wystarcza w zupełności). Czujniki linii to 5x pojedynczy moduł z czujnikiem ktir0711s, które są przylutowane za duży, metalizowany otwór do podłużnych padów na krawędzi płytki uniwersalnej (odczytywane analogowo). Do tego z przodu znajduje się cyfrowy czujnik odległości sharp, planowo miał służyć do wykrywania przeszkód jednak stanęło na tym, że używam go do startowania i stopowania robota (czasem nawet jak wpadnie na przeszkodę to też się zatrzyma :P). Sekcja zasilania zaczyna się od gniazda na akumulator, tutaj t-deans, dalej włącznik zasilania, dioda zabezpieczająca i stabilizator 7805 do elektroniki oraz przetwornica lm2596 (trochę nie spełniła oczekiwań) do zasilania silników. Do tego na płytce znajdują się trzy diody led (czerwona wskazuje zasilanie, dwie są podłączone do mikrokontrolera) oraz microswitch, akurat nie wykorzystywany. Jedno co na mi przeszkadza w tej części to gniazdo zasilania, którego ni jak nie dało się wlutować bezpośrednio w płytkę i musiałem to robić przez krótkie odcinki przewodów i odrobinę kleju na gorąco. Na szczęście nie psuje się, nie łamie a działa bardzo dobrze. Ogólnie to jak ktoś chce coś takiego zbudować ale nie chcę za bardzo w to inwestować to polecam taki sposób budowy, tzn na płytce uniwersalnej. Dzięki temu jest dużo szybciej niż z projektowaniem i wykonaniem pcb a ewentualne poprawki i przeróbki też są łatwe do wykonania. Wiadomo, że jak chcesz budować bolid na zawody no to czegoś takiego nie użyjesz ale do prototypowania jest super. Całość zasilana z dwu celowego akumulatora litowo polimerowego o pojemności 500mAh. Schemat jako taki nigdy nie powstał, całość była robiona na bieżąco, pinologię można wyczytać ze źródeł programu (w załączniku). Oprogramowanie Algorytm sterowania to PD oparte w dużej części na artykule batona z forum z tym, że dostosowany do arduino. W obecnej wersji samą część regulatora oparłem o bibliotekę pid, uruchomienie jest proste i efekty są widoczne dosyć szybko. Oczywiście polecam najpierw przyjąć trochę teorii o tym regulatorze a dopiero potem siadać do programowania. Osobiście nie jestem wielkim fanem matematyki więc po prostu wolę uruchomić bibliotekę i poświęcić więcej czasu na inne elementy programu. Poza tym mamy fragmenty do liczenia błędu, odczytywania ADC, sterowania silnikami i włączania/wyłączania robota (taki bezpiecznik, odczytuje napięcie akumulatora i stan czujnika sharp). Z rzeczy, które mi brakuje to na pewno kalibracja, jakiś interfejs z użytkownikiem, np. moduł bluetooth i odczyt telemetrii w czasie rzeczywistym. Przemyślenia W pierwszej rewizji tego robota silniki były zasilane bezpośrednio z akumulatora przez co strojenie regulatora było dosyć kłopotliwe bo parametry jezdne się dosyć dynamicznie zmieniały. W ramach późniejszej modyfikacji dodałem moduł przetwornicy (dlatego tak średnio pasuje i przechodzą pod nią przewody) i myślałem, że wyeliminuje to do pewnego poziomu problem zmiennej dynamiki. Niestety rzeczywistość mnie trochę zaskoczyła, napięcie na wyjściu to około 6V gdy akumulator ma jeszcze 7.5-8V to robot już wyraźnie traci werwę (napięcie się nie zmienia). Na szczęście mam dwa akumulatorki więc jak jeden jeździ to drugi się ładuje i tak się zmieniają co kilkanaście minut testów (nie ciągłej jazdy). Drugi problem to złe rozłożenie masy. Zdarza się, że koła tracą przyczepność i zaczynają buksować i robot się zatrzymuje. Położenie rolki taśmy izolacyjnej na wysokości silników rozwiązuje ten problem. Do tego jeszcze ciekawostka, wydaje mi się, że robot lepiej radzi sobie na samym regulatorze P (przynajmniej na mojej, domowej trasie). Owszem, oscyluje ale i tak wydaje się, że jedzie średnio szybciej niż po dłuższej chwili strojenia metodą z artykułu. Postaram się to pokazać na filmach, liczę, że bardziej doświadczeni coś podpowiedzą (chciałbym tutaj jeszcze poeksperymentować). Jeżeli macie jakieś pytania albo czegoś nie napisałem/napisałem niezrozumiale to proszę o zwrócenie uwagi, odpowiem i uzupełnię opis. Grzmot2.0.zip
  49. 1 punkt
    @Eukaryota Gratuluję świetnej konstrukcji, po mojej głowie też chodzi Delta (oczywiście nie tak zaawansowana i z tak profesjonalnym podejściem do tematu jak Twoja), więc mam kilka pytań (na razie 2 1) Jak zerujesz ramiona po włączeniu? Krańcówki? Robot pamięta swoją pozycję? 2) Kinematyka odwrotna - wyszedłeś, tak jak w poprzedniej Delcie, z zależności geometrycznych? Mógłbyś chociaż nakreślić, jak podejść do tematu? Na początku myślałem, że można traktować każde z ramion jako SCARA i z trójkąta i tw. cosinusów określić kąt, ale nie jest to przecież takie proste, bo jeżeli końcówka nie jest w pionowej osi symetrii, to trójkąt ten jest w innej płaszczyźnie niż ramię bezpośrednio odchodzące od silnika Pozdrawiam == 1) pytanie - już wiem, nie doczytałem, przepraszam Mógłbyś powiedzieć o nich (tzn o tych enkoderach) coś więcej?
  50. 1 punkt
    @RebelMan91 Arduino nie jest stworzone do odtwarzania plików MP3. Można to rozwiązać za pomocą dodatkowej nakładki, która zajmie się odtwarzaniem plików z karty. Właściwie dałoby się to pewnie nawet zrobić bez Arduino, wystarczyłoby odpowiednio wykorzystać tego typu płytkę: https://www.sparkfun.com/products/13720 Podaję w ramach podpowiedzi jakbyś nie znalazł nikogo do pomocy
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×
×
  • Utwórz nowe...