Skocz do zawartości

Tablica liderów


Popularna zawartość

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

  1. 7 punktów
    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:
  2. 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
  3. 6 punktów
    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.
  4. 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.
  5. 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.
  6. 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
  7. 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.
  8. 4 punkty
    RozZuBeN – Robot z Zupełnie Bezsensowną Nazwą Jest to robot klasy nanosumo, który został stworzony na wiosnę 2018 roku przez Pojemnika i mnie - wtedy uczniów pierwszej klasy VIII LO w Poznaniu. Zainteresowaliśmy się tą kategorią na Robomaticonie 2018, gdzie nie było żadnego sumo w tej skali. Pomyśleliśmy, że gdybyśmy mieli akumulator z silnikiem, to byśmy łatwo zgarnęli nagrodę za ostatnie (pierwsze!) miejsce. Tak powstał ten robot. Przestudiowaliśmy regulaminy różnych zawodów i wyodrębniliśmy minimalne założenia które musi spełniać nasz robot podczas zawodów: Poruszanie się Nieporuszanie się (przed startem) Po starcie nie może się zatrzymać na dłużej niż 30 sekund Czekanie 5 sekund po starcie Fajnie by było, gdyby sam z siebie nie wypadał z ringu Udało nam się spełnić wszystkie 5 punktów. Płytka: O ile 1, 2 i 3 punkt założeń projektowych można rozwiązać jednym przełącznikiem, to do czwartego potrzebne by było jakieś opóźnienie (układ RC lub popularny NE555 z tranzystorem). 5 punkt przekonał nas do użycia mikrokontolera. Zastosowaliśmy attiny84, które ilością pinów cyfrowych zapewniło nam dużą elastyczność w projektowaniu płytki. Taktowany jest wewnętrznym oscylatorem (miał być zewnętrzny generator kwarcowy ale nie mogliśmy go polutować). Umieściliśmy sterownik silników A3901 z którego wykorzystujemy tylko jeden z dwóch kanałów, dwa czujniki KTIR0711s jako czujniki krawędzi ringu podłączone bezpośrednio do ADC mikrokontrolera, dwa ledy sygnalizacyjne (zielony i bursztynowy, który jest w praktyce pomarańczowy ), przełącznik do startowania robota, dzielnik rezystorowy do mierzenia napięcia akumulatora (chyba nawet niewykorzystany), złącze do programowania (2x3 żeńskie goldpiny precyzyjne) i stabilizator napięcia na 3,3V w obudowie SOT23 (nie pamiętamy oznaczenia). W Eaglu zrobiliśmy kwadrat 25x25mm, rozmieściliśmy elementy „na oko”, połączyliśmy ścieżkami, i wysłaliśmy do OSH Parku. Zajęło nam to dwie godziny. Był to koniec marca, płytka przyszła w połowie maja. Wcześniej zamówiliśmy wszystkie elementy, ale oczywiście pomyliliśmy attiny84 z attiny88, więc złożenie potrwało trochę dłużej niż przewidywaliśmy. Płytkę lutowało się całkiem dobrze, choć do drobnych elementów chyba jednak lepsze są płytki cynowane zamiast złoconych (niby złoto lepiej przewodzi prąd ale cynę najlepiej się lutuje do innej cyny). Praktycznie od razu płytka dogadała się z programatorem (co nie było takie oczywiste w naszych poprzednich robotach). Konstrukcja mechaniczna: Mieliśmy kilka pomysłów na spełnienie pierwszego założenia projektu: silniczek wibracyjny z jakiegoś telefonu, żeby robot tylko drgał (przecież ruch to ruch) albo umieszczenie dwóch silników tak by stykały się wałami z podłożem, aby nie była potrzebna przekładnia, mechanizmy sprężynowe chyba też były... Porządna przekładnia z zębatek odpadała, bo nie wiedzieliśmy jak ją zrobić. Ostatecznie wykorzystaliśmy przekładnię cierną. Wał silnika z nałożoną rurką termokurczliwą (dla lepszego tarcia) jest przyciśnięty do opony jedynego w robocie kółka wyciągniętego z jakiejś zabawki. Brzmi to okropnie i tak też zostało to zmontowane. „Felga” kółka trze o korpus silnika, więc to miejsce musi być często smarowane wazeliną techniczną, żeby robot nie zaciął się podczas walki. Wszystko jest zalane gorącym klejem z drucikami z goldpinów tworzącymi swego rodzaju usztywnienie. Czasem gorący klej sprawiał problemy czujnikom przeciwników (nie wiemy dlaczego). Robot o jednym kółku nie przewraca się, ponieważ na całej podstawie ma przyklejony kawałek styropianowej tektury znaleziony w szufladzie. Przed i za kołem znalazło się też trochę miejsca na ktiry. Wszystko połączyliśmy kabelkami, przykleiliśmy akumulator (Li-Po 1S 150 mAh) (oczywiście też na gorący klej) i włączyliśmy. Okazało się, że silnik jest za mocny i wywraca robota tuż po starcie, ale i tak byliśmy dumni, że robot porusza się całkiem skutecznie. Zrezygnowaliśmy też z przełącznika, który był bardzo niewygodny i zastąpiliśmy go odbiornikiem IR. Nie chcieliśmy się bawić z dekodowaniem sygnałów, więc sygnał połączyliśmy dużym kondensatorem do masy zmieniającym dane na jedną dłuuugą jedynkę odczytywaną przez procesor. Program: Po wielu próbach doszliśmy do wniosku, że najlepiej jest poruszać się metodą krótkich „skoków” polegających na szybkim włączeniu i wyłączeniu silnika (wtedy robot nigdy się nie przewracał). Po każdym „skoku” robot sprawdza czy jest na krawędzi. Jeśli tak to zaczyna poruszać się w drugą stronę i zapala bursztynowego leda. Po 10 sekundach ruchu robot zatrzymuje się na równe 10 sekund aby to przeciwnik zużywał akumulator. Całość powtarzana jest aż do utraty zasilania. Ta technika działa zaskakująco dobrze w przypadku konfrontacji z robotem, który też jest „ślepy”. Podczas ruchu może niechcący wypchnąć przeciwnika, a kiedy stoi bardzo ciężko jest go ruszyć (chyba, że przeciwnik jest rozpędzony lub ma dobre silniki). Akumulator starcza na bardzo dużo często remisowych walk. Zwykle ładujemy go przed zawodami do 4,20V a po walkach nadal ma ponad 4,10V. Osiągnięcia: 2018: 3. miejsce Bałtyckie Bitwy Robotów 3. miejsce Robocomp 2. miejsce Sumo Challenge 2019: 4. miejsce Robotic Arena 1. miejsce Robomaticon Robot tylko na Robotic Arena zajął ostatnie miejsce. Na każdych zawodach miał 3 przeciwników, więc na Robomaticonie wygrał ze wszystkimi! (z czego z jednym walkowerem) Wnioski: Robot spisuje się niespodziewanie dobrze, co obrazuje niestety poziom konkurencji w Polsce. Aktualnie kończymy prace nad kolejną konstrukcją, która tym razem będzie miała dwa kółka i będzie widzieć przeciwnika, co pozwoli liczyć na walkę a nie tylko łut szczęścia. Mamy nadzieję, że aktywnie zawalczy o pierwsze miejsca. Kilka filmów z zawodów: Chętnie odpowiemy na wszystkie pytania dotyczące robota.
  9. 4 punkty
    Cześć, od kiedy opisałem swojego robota Pika na forum, minęło już troszkę. W tym czasie zdążyło powstać kilka kolejnych konstrukcji, zarówno bez turbiny jak i z turbiną. W tym poście chciałbym przybliżyć Wam moją najnowszą konstrukcję - robota klasy Linefollower Turbo o nazwie Spark. Głównym założeniem, jakie przyświecało mi podczas projektowania była chęć nauczenia się wektorowego sterowania silnikami BLDC oraz wykorzystanie właśnie takich silników jako napęd bezpośredni w robocie. Podczas opisu założeń konstrukcyjnych posłużę się modelem 3D robota. Jak można zauważyć na powyższym zdjęciu, ogólna konstrukcja nie różni się od znanego wszystkim standardu. Na przedzie delikatna i lekka listewka z 14 czujnikami linii KTIR0711S. Centralnie umieszczona turbina QX-Motor 14000 kv o średnicy 30 mm. Dwa silniki hexTronik 1300KV umieszczone w tylnej części w taki sposób, aby możliwe było uniesienie przodu celem wjazdu na pochylnię/rampę w kategorii Linefollower Enchanced. Sercem robota jest mikrokontroler STM32H743VIT6. Jest on oparty na rdzeniu Cortex M7 oraz taktowany z prędkością 400 MHz. Wybór tak potężnej jednostki sterującej podyktowany był chęcią wydajnego obliczania komutacji sterowania wektorowego dla każdego z silników jezdnych oraz realizacji algorytmu jazdy przy pomocy tylko jednej jednostki. Dodatkowo tak szybki mikrokontroler pozwolił na zatuszowanie moich niedoskonałości w optymalizacji kodu Głównym elementem konstrukcyjnym jest 4-warstwowy obwód drukowany. W trakcie projektowania falowników do sterowania silnikami powstały dwa prototypy, w których miałem problem z przegrzewającymi się tranzystorami dlatego w docelowym PCB zastosowałem aż 4 warstwy. Dodatkową zaletą takiego obwodu jest jego większa odporność na zakłócenia elektromagnetyczne. Podświetlony obszar to miedź na wszystkich czterech warstwach połączonych setkami przelotek chłodząca tranzystory. Do sterowania każdym z silników wykorzystałem 6 tranzystorów w układzie pełnego mostka 3-fazowego. Posłużyły mi do tego półmostkowe układy BSG0813NDI za których udostępnienie serdecznie dziękuję firmie Infineon (oraz za tranzystory i drivery, które spaliłem w prototypach - ok 60 sztuk, nie od razu Rzym zbudowano ) Ostatecznie jako drivery wykorzystane zostały układy MIC4607-2 ze względu na możliwość sterowania całym mostkiem przy pomocy tylko jednego układu. Do odczytywania pozycji wirnika służy enkoder magnetyczny AMS5045B. Całość zasila akumulator Li-Po Tattu 450mAh 7.4V 75C. Za komunikację bezprzewodową odpowiada stary dobry moduł HC05. W celu zapewnienia pod robotem podciśnienia wywoływanego turbiną, zwiększającego nacisk kół na podłoże obrys uszczelniony został wydrukowaną w 3D ścianą. Do usztywnienia konstrukcji tak, aby opierała się ona o podłoże tylko kołami i ślizgaczami z przodu, posłużyły wałki węglowe o średnicy 4 mm. Do połączenia ze sobą poszczególnych elementów konstrukcyjnych wykorzystane zostały aluminiowe mocowania wykonane w technologii WEDM. Poniżej kilka fotek. Prototyp 1: Ratowanie prototypu 1 (rezystory bramkowe? A na co to potrzebne ) : Prototyp 2: Elementy konstrukcyjne: Pierwsze ruchy silnika: Poszukiwanie granic: Opona wykonana z poliuretanu 20': Aluminiowa felga wciśnięta na wirnik (Pololki dla skali): Zamontowana felga wraz z oponami (Mini-Z 20'): Turbina po dezintegracji (podczas jazdy eksplodowała): Przejazd w konkurencji Linefollower Drag podczas Bałtyckich Bitw Robotów 2018: Próby podczas RobotChallenge 2018 w Pekinie: Wnioski: Konstrukcja waży 250 g. To zdecydowanie za dużo, gdyż opony nie są w stanie zapewnić wystarczającej przyczepności na zakrętach i robot wpada w poślizg na zakrętach przez co osiągnięcie prędkości średniej na krętej trasie powyżej 3 m/s jest bardzo trudne. Zastosowanie silników BLDC jako direct-drive umożliwia rozpędzenie robota do ogromnych prędkości liniowych (15 m/s+) lecz aby posiadały one zadowalający moment przy niskich obrotach konieczny do gwałtownych zwrotów muszą być duże i ciężkie. Lepiej zastosować małe silniki z przekładnią. Nowa konstrukcja już się tworzy! Dziękuję za przejrzenie albumu, który utworzyłem i zapraszam do zadawania pytań w komentarzach
  10. 3 punkty
    Witajcie. Mam do zaprezentowania mój nowy projekt. Zdalnie sterowany robot kroczący z odbiornikiem podczerwieni. Jednostką centralną jest mikrokontroler ATmega8A-PU. Robot porusza się dzięki trzem serwomechanizmom TowerPro SG90. Inspiracją do sposobu chodzenia był robot kroczący Pololu. Robot posiada 6 niebieskich diod. Ich katody są połączone z odpowiednimi pinami mikrokontrolera, dzięki czemu steruję nimi w zależności od wykonywanego ruchu robota. Anody są połączone przez rezystor z nogami robota, te natomiast są połączone z potencjałem dodatnim zasilania. Jako pilota używam telefonu z androidem wraz z aplikacją RCoid. Korzystam ze standardu RC5. Kierunkami poruszania się robota są przód, tył, obracanie w lewo i prawo. Do zatrzymania robota służy dowolna inna komenda. Sterowanie serwomechanizmów odbywa się dzięki programowo stworzonemu PWM na 8 bitowym timerze mikrokontrolera. Tak wygląda kod przerwania od przepełnienia timera: ISR(TIMER0_OVF_vect) { static uint16_t cnt; if(cnt>=r) PORTC &= ~(1<<PC3); else PORTC |= (1<<PC3); if(cnt>=m) PORTC &= ~(1<<PC4); else PORTC |= (1<<PC4); if(cnt>=l) PORTC &= ~(1<<PC5); else PORTC |= (1<<PC5); cnt++; if(cnt>625) cnt = 0; } Zmienne r m i l odpowiadają za położenie poszczególnych nóg zmieniane w pętli głównej programu. Ich zakres mieści się od 17-76 (0.5ms-2.5ms) (0°-180°). Oczywiście zakres pracy jest mniejszy. Dla przykładu dobranymi wartościami dla nogi środkowej są 42 przy oparciu na lewej części, 44 pozycja środkowa, 46 oparcie na prawej części nogi. Zmienna licznika cnt jest porównywana z wartością 625, dzięki czemu uzyskuję częstotliwość 50Hz (8000000Hz/1/256/625=50Hz [20ms] [prescaler=1]). Jeżeli chodzi o kwestie zasilania to zdecydowałem się na użycie czterech zwykłych baterii AAA dających na wyjściu ~6V co zmusiło mnie do użycia przetwornicy Pololu S7V7F5 do zasilania mikrokontrolera. Diody i serwomechanizmy są zasilane bezpośrednio z baterii. Nogi zostały wygięte ze stalowego drutu o średnicy 1.5mm. Do orczyków zostały przymocowane za pomocą stalowego drutu o średnicy 0.3mm. Koniec każdej nogi zalałem gorącym klejem tak, aby zapobiec ślizganiu się robota na gładkiej powierzchni. Lista elementów: mikrokontroler ATmega8A-PU 3x serwomechanizmy TowerPro SG90 przetwornica Pololu S7V7F5 odbiornik podczerwieni TSOP31236 6x diody niebieskie rezonator kwarcowy 8MHz trytki i rurki termokurczliwe druty stalowe o średnicy 1.5mm, oraz 0.3mm płytka stykowa 170 otworów 4x baterie AAA z koszykiem parę rezystorów, kondensatorów i przewodów Zapraszam do śmiałego pisania swoich pytań, opinii i uwag Pozdrawiam, Karol
  11. 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!
  12. 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ę.
  13. 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.
  14. 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..
  15. 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
  16. 3 punkty
    Brymena znam tylko z opinii w internecie. Jeśli chcesz grzebać w instalacji elektrycznej budynku to zostałbym przy Brymenie, ze względu na zastosowane zabezpieczenia, chodzi mi o bezpieczeństwo użytkownika. Miernik nie musi być jakiś super dokładny, do serwisowania i uruchamiania różnych urządzeń wystarczy. Wydaje mi się też, że będzie go trudniej uszkodzić niż Uni-T. Możesz zobaczyć mierniki z serii BM23x. Droższe alternatywy, stawiając na pierwszym miejscu bezpieczeństwo, to Fluke lub Keysight. Mam dwa mierniki UT61E, jeden kupiony rok lub dwa lata po pokazaniu się tego modelu, a drugi parę lat później. Z zewnątrz takie same, w środku zupełnie inne, więc myślę, że Uni-T to jest tak, że nie wiadomo na co się trafi. Starszy miernik. Nowszy miernik. Na obu ten sam napis kategorii miernika. Żadna poważna firma w ten sposób nie postępuje (chodzi o napis na obudowie, te same klasy przy dwóch różniących się znacznie zabezpieczeniach w obu miernikach). Pierwszy ma tylko namiastkę zabezpieczeń w postaci termistorów i mniejsze, objętościowo, bezpieczniki. Nie wiem jak to ma działać skoro nie ma warystora. Chyba, że za warystor służy usmażona elektronika miernika i użytkownik jest bezpieczny, a miernik do wyrzucenia. Drugi ma poprawione zabezpieczenia, więcej termistorów, dodane warystory i większe bezpieczniki. W obu brakuje dużego wysokonapięciowego rezystora zabezpieczającego wejście woltomierza tak jak to jest u innych producentów. W momencie przepięcia, już po zwarciu przez warystory ten rezystor powinien wytrzymać i wstępnie ograniczyć prąd przepięcia dopóki nie zagrzeją się termistory i spowodują dalszy spadek prądu. Tutaj jest jeszcze trzecia wersja. Brak wlutowanych warystorów, ale człowiek wydaje się tym nie przejmować. Mniejsze, takie jak w moim zielonym bezpieczniki. Oba mierniki oczywiście działają, ale nie były poddawane żadnym ekstremalnym próbom, zwykłe pomiary bez kręcenia pokrętłem, jak każe instrukcja, przy podłączeniu do badanego układu. Może UT-139C robią w jednej wersji, stałej wersji. Ja, niezależnie jak dobrą i niedocenianą firmą jest Uni-Trend, chyba następnego Uni-T bym nie kupił. Bo to może być loteria. Chyba, że coś do 60zł do pomiarów przy bezpiecznym napięciu.
  17. 3 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
  18. 3 punkty
    Tylko że boty nie bawią się w skanowanie portów jakichś paszczatych serwerków tylko wbijają się na port 22. Jak długo pracuję jako admin (a to już paręnaście lat) nie widziałem aby ktoś mi się próbował wcinać na port na który stoi mój SSH. Poza tym zmiana portu nie tyle podnosi bezpieczeństwo, co eliminuje niepotrzebne obciążanie systemu przez wszelakie zombiaki z Kazachstanu. Klucze publiczne możesz sobie wsadzić tam gdzie słońce nie dochodzi, jeśli musisz czasem logować się z dowolnych maszyn (np. z każdej z 20 maszyn w biurze) nie udostępniając swojego systemu każdemu, kto posadzi tyłek na krześle. Owszem, są wygodne w domciu bo nie musisz hasełka do swojej malinki bez przerwy wpisywać - i tyle. Zresztą - biorąc po uwagę że malinki zwykle rosną w ogródku za furtką o nazwie NAT, dopóki nikt Ci się do sieci nie włamie to na malince możesz równie dobrze zainstalować serwer telnetu bez hasła, nie wpłynie to w żaden sposób na bezpieczeństwo. A zabezpieczanie routerów to już na pewno nie temat do tego wątku.
  19. 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
  20. 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.
  21. 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.
  22. 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.
  23. 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.
  24. 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
  25. 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.
  26. 2 punkty
  27. 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ę.
  28. 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
  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
    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
  31. 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
  32. 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
  33. 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
  34. 2 punkty
    Witam. Polecam również stronę http://nandland.com. Można z niej sporo się dowiedzieć o VHDL i nie tylko
  35. 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)
  36. 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.
  37. 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
  38. 2 punkty
  39. 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.
  40. 2 punkty
  41. 2 punkty
    Nazwa RoChN - Robot o Chwytliwej Nazwie obejmuje trzy wersje robota (V1 - V3), które zbudowaliśmy z kolegą paor na początku w ramach eksperymentu, a następnie już jako pełnoprawna szkolna drużyna robotyczna KRÓL. Jest to jedna z ostatnich tego typu (procesor, brak enkoderów) konstrukcji na dużych zawodach w Polsce. Pomimo tego osiąga całkiem przyzwoite wyniki, zdarzyło mu się też powalczyć o podium, którego jednak nigdy nie zdobył. Opiszę po kolei wszystkie wersje, ponieważ nie różnią się na tyle, aby można było je uznać za osobne konstrukcje. Elektronika: Zastosowaliśmy mikrokontroler ATmega324 taktowany 16MHz kwarcem, 12 czujników linii KTIR0711s podłączone do trzech poczwórnych komparatorów LM339 i mostek H - TB6612FNG. Do komunikacji wykorzystaliśmy HC-05. Sekcja zasilania od wersji trzeciej składa się z dwóch stabilizatorów na 5V - osobnych dla czujników i logiki. Silniki są zasilane bezpośrednio z akumulatora 2s. Z akumulatorem 150mAh waży około 70g. Mechanika: Zastosowane silniki to Pololu HP 10:1. Sprawdziły się dobrze, chociaż za względu na dość znaczny przebieg szczotki są mocno zużyte. Robot składa się z dwóch dwustronnych płytek drukowanych połączonych aluminiowymi listewkami i taśmą ffc. Z tyłu znajduje się dodatkowa podpórka wykonana z kawałka drutu, która zapobiega odwracaniu się robota przy starcie z dużą prędkością. Przednia płytka posiada ślizgacze wykonane z rezystorów THT - sprawują się lepiej, niż stosowane do tego przedtem LEDy. Oprogramowanie: Program do robota został napisany w języku C. Realizuje on regulator PD, z którym było sporo problemów ze względu na brak wiedzy teoretycznej oraz doświadczenia w strojeniu. Powstał też program na komputer ułatwiający komunikację z robotem poprzez bluetooth i umożliwiający zmiany w konfiguracji, ręczne sterowanie i trochę innych "bajerów". Krótki opis zmian w kolejnych wersjach: -V1 Pierwsze podejście do zbudowania linefollowera na zawody. Wykonana domowymi metodami płytka okazała się być bardzo wadliwa i ostatecznie robot ten nigdy nie ruszył z miejsca - przód nie został nawet wyczyszczony z tonera. Większość elementów z płytki głównej została później wylutowana. Wyciągnęliśmy z tej porażki wiele wniosków, w końcu człowiek najlepiej uczy się na błędach. -V2 W przeciwieństwie do poprzednika robot posiada płytkę drukowaną wykonaną na zamówienie. Problemy spowodowały części projektu, które nie zostały przetestowanie przy okazji wersji pierwszej - stabilizator napięcia przegrzewał się i trzeba było dodać mu radiator w postaci kawałka drutu. Już na zawodach okazało się, że robot jest za szeroki, w wyniku czego miewał problemy z ciasnymi zakrętami. Pojawiły się też kłopoty z modułem bluetooth - legendarnym HC-05, który po jakimś czasie odmówił współpracy i trzeba było go wymienić. W międzyczasie zmieniliśmy też kształt przedniej płytki, jak się później okazało z kiepskiego na jeszcze gorszy. Wyciągnęliśmy z tej konstrukcji dużo wniosków, które wpłynęły na wersję trzecią. Na zdjęciach widać, że część elementów została wylutowana do ponownego użycia. -V3 Prawdopodobnie ostatnia wersja z tej serii, praktycznie pozbawiona błędów projektowych. Węższa i lżejsza. Oddzieliliśmy zasilanie czujników linii od reszty, a do połączenie przedniej płytki z tylną zastosowaliśmy taśmę o rasterze 0.5 mm. Również ta konstrukcja miała kilka przodów w ramach eksperymentów z ułożeniem czujników. Przez jakiś czas używaliśmy opon odlewanych z silikonu, jednak okazały się mniej przyczepne niż mini-z - może to kwestia braku doświadczenia w doborze proporcji. Podczas początkowych testów udało nam się dwa razy spalić mikrokontroler i zepsuć rezonator kwarcowy, który niezbyt umiejętnie wymieniłem - wydać to na zdjęciach. Osiągnięcia: 6. miejsce Robotic Arena 2019 4. miejsce Robomaicon 2019 Zdjęcia i filmy z zawodów: Wersja 2 na starcie lf drag na BBR 2018
  42. 2 punkty
    Cześć, da się to przeskoczyć nawet na kartach pre-paid (raz już to robiłem). Od strony twojego urządzenia instalujesz skrypt, który co jakiś czas (np. co 3 minuty) próbuje odpalić klienta VPN a na serwerze masz server VPN do którego się podłączasz. Ponieważ, gdy to twoje urządzenie inicjuje komunikację w tą stronę porty nie są blokowane (a twój cały ruch po TCP-IP jest tunelowany). Sprawdzone praktycznie z kartami pre-paid Play - działa bez zarzutu ;). Nie wiem czy jasno to opisałem ale to działa - niestety wymaga instalacji klienta i serwera VPN. Nie wiem, czy na ESP jest jakiś klient VPN, to może być przeszkoda do realizacji tego pomysłu (ja robiłem to na SBC Cubieboard II gdzie był pełen LInux i dostępny klient VPN). Pozdrawiam
  43. 2 punkty
    Jaka karta wifi? Jeśli to TP-Link na rtl8188eu to ten model tak ma.
  44. 2 punkty
    Cześć, potwierdzam opinię @Alvedro jako zawodniczka MiniSumo. Myślę, że ze wszystkich kategorii właśnie MiniSumo najciężej na takich zawodach przeprowadzić i jest potrzebne bardzo duże doświadczenie. Niestety Robomaticon co roku organizują w dużej mierze nowe osoby, stąd ciężko mówić o ciągłości edycji, co by na pewno dużo dało. W xSumo było bardzo duże opóźnienie jak co roku, ale tym razem spowodowane dużym skupieniem na kategorii LegoSumo, które jako zawodnicy wiemy jak bardzo potrzebuje uwagi, które często rozwiązuje się poprzez wyznaczenie osobnego stanowiska tylko dla tej kategorii. Według mnie 95% problemu w tej konkurencji rozwiązałaby komunikacja z górą w jakiejkolwiek postaci oraz jak wspomina Alvedro umieszczanie informacji na stronie na temat grup. Brak komunikacji najbardziej widoczny był gdy mniej więcej 2h po rozpoczęciu xSumo przyszli zawodnicy z Sumo i LegoSumo, którzy byli zdziwieni, że byli wywoływani, bo siedzieli na górze i nie mieli żadnej informacji. Nie zapominajmy, że strefa jest dwa piętra wyżej i niestety na niej nie było nic słychać z tego, co było mówione na głównej sali. Też myślę, przydałoby się więcej informacji o drugiej sali z LineFollowerami. Pierwszy raz organizatorzy postawili na takie rozwiązanie i uważam, że było to bardzo dobre posunięcie, gdyż umożliwiło jakikolwiek ruch na głównej sali, który w poprzednich edycjach był praktycznie niemożliwy. Sama zazdroszczę zawodnikom Linefollower braku konieczności biegania na dół co chwilę Byłam na zawodach trzeci raz i uważam, że ze wszystkich te były najlepiej zrobione. Nagrody były ciekawe, chociaż mi nadal brakuje choćby malutkich statuetek. Widać było, że organizatorzy starają się bieżąco naprawiać problemy, brakuje jednak doświadczenia, które by te problemy niwelowały zanim się pojawiły. Nie mogę jednak pozostawić bez komentarza uwagi Atomowy o "Nieprzyjemna pani, której nie pasowała waga robota 502g na minus.". Nie spotkałam się z żadnymi zawodami, na których dopuszczalna była waga większa niż 500g. Nie raz widziałam zawodników, którzy dopiłowywali elementy, by zbić masę robotów, gdy ważyły nawet gram więcej niż regulaminowe 500g. Na innych zawodach by robota także nie zatwierdzili. Dziękuję za gratulację od @Sabre. Bardzo się cieszę, że miałam okazję poznać i za rok (a może i wcześniej, na przykład na zawodach Robotic Arena we Wrocławiu ) widzimy się jako zawodnicy! Tutaj filmik z mojego występu: https://www.youtube.com/watch?v=BcKX9AVf7aU
  45. 2 punkty
    A co ma do tego map? 1) Nie masz obsadzonych wszystkich możliwości fot1/fot2 - konkretniej par [(1, 2), (1, 4), (2, 1), (2, 4), (4, 1), (4, 2), (4, 5), (5, 4)] 2) map nie gwarantuje, że wynik będzie ograniczony do podanego zakresu (czyli równie dobrze może być zero albo siedem). Coś takiego: fot1=map(fot1, 200, 460, 1, 5); fot1 = constrain(fot1, 1, 5); zagwarantuje że fot1 będzie w granicach 1 do 5 włącznie. Pamiętaj, że constrain to makrodefinicja a nie funkcja, czyli zapis typu: fot1 = constrain(map(fot1, 200, 460, 1, 5), 1, 5); co prawda będzie działać, ale funkcja map może być niepotrzebnie wywołana dwukrotnie!
  46. 2 punkty
    no przecież na rpi nie masz bare metal tylko normalny os (chyba że bardzo chcesz, da się). interfejs możesz zrobić w gtk+, w qt czy jeśli jesteś leniem to po prostu w przeglądarce. i w żadnym z tych przypadków nie interesujesz się jakimiś rysowaniami guzików czy sprawdzaniem gdzie użytkownik raczył wrazić brudny palec czy na windowsie też rysujesz sam guziczki?
  47. 2 punkty
    Usypianie czujnika jest proste. Wystarczy na pin 3 dać stan niski Chodzi o to, że dioda laserowa się wypala i traci parametry, a co za tym idzie spada dokładność pomiarów. MTBF dla całego czujnika jest podawany na 3lata, ale widoczny spadek precyzji został zaobserwowany już po roku. Dotyczy to wszystkich urządzeń opartych o diody laserowe. Tak więc, jeśli masz drugi czujnik wykonany w takiej samej technologii to te "ograniczenia" dotyczą go w takiej samej mierze. (Taki sam efekt mamy z diodami przez które płynie duży prąd. Też się szybciej wypalaja i tracą jasność.) https://letscontrolit.com/wiki/index.php/PMSx003 Podłączenie: Pin 1 jest bliżej środka czujnika. Pin 8 na zewnątrz. Złącze 8 pinowe w rastrze 1.25mm. PinFunkcjaOpisUwagi 1 VCC zasilanie 5V4.5 - 5.5V 2 GND masa 3 SET stan WYSOKI lub zawieszony - praca, stan NISKI - uśpienielogika 3.3V 4 RX Dodbiór danych UART/TTLlogika 3.3V 5 TX Dnadawanie danych UART/TTLlogika 3.3V 6 Reset stan NISKI to resetlogika 3.3V 7 NC nie podłączony 8 NC nie podłączony
  48. 2 punkty
    I założę się o każdą sumę, że więcej się nauczyłeś przerabiając ten przykład niż instalując najnowszą wersję, przeklejając przykład i ciesząc się że działa Piszesz że słabo znasz Linuksa... więc najpierw poznaj go średnio (niekoniecznie dobrze), potem baw się w instalację programów spoza repozytoriów. Zobacz: wszyscy (łącznie z autorami Bardzo Poważnych Programów ™) jakoś grzecznie stosują 3.5 lub 2.7, prawda? To dobra rada starego linuksiarza który też przecież kiedyś zaczynał... A Pythona w najnowszej wersji możesz sobie spokojnie zainstalować na Windowsie i tam się bawić.
  49. 2 punkty
    @FlyingDutch - problem może być z obsługą ACPI, oczywiście nie ma to żadnego związku z użytą dystrybucją, po prostu konieczne jest zainstalowanie nowszego jądra. Przechodziłem przez to samo z i7-8750 na MSI. Na początek najprościej jest wyłączyć ACPI: https://askubuntu.com/questions/160036/how-do-i-disable-acpi-when-booting A jak już odpalisz system, to teraz chyba wystarczy zrobić update - jeśli nie to musisz doinstalować nowszą wersję jądra niż dostarcza dystrybucja. Są do tego gotowe paczki, więc nawet kompilować nie trzeba.
  50. 2 punkty
    Witam! Chciałbym się pochwalić moim pierwszym stworzonym projektem, a mianowicie systemem monitorowania środowiska. Interesuję się IoT i jego obszarami działania. Stworzyłem system, który składa się z urządzenia pomiarowego, chmury internetowej oraz aplikacji mobilnej. Struktura systemu została podzielona na 3 etapy, odpowiednia: warstwa sprzętowa, chmury i aplikacji. Warstwa sprzętowa Urządzenie ma za zadanie pobieranie danych z otoczenia oraz pobieranie ich do zewnętrznego serwera. Badane czynniki to: temperatura, wilgotność, opady atmosferyczne i ruch. Do wykonania urządzenia wykorzystano poniższe podzespoły: Arduino Uno Rev3, Czujnik temperatry i wilgotności DHT11, Czujnik ruchu PIR HC-SR501, Czujnik opadów deszczu YL-83, Moduł sieciowy Ethernet ENC28J60 mini, przewody połączeniowe, płytkę stykową. Projekt urządzenia wygląda następująco: Oraz urządzenie wykonane zgodnie z projektem: Następnie funkcje sensorowe urządzenia zostały przetestowane. Na płytkę został wgrany poniższy kod: #include <dht11.h> #define CzujnikTempWilgPin 2 //definicja numerów pinów #define CzujnikOpadAnalogPin A0 #define CzujnikOpadDigitalPin 4 #define CzujnikRuchPin 8 int wartosc_A0; int wartosc_D0; int wilgotnosc; int temperatura; int ruch; dht11 DHT11; int interwal = 30000; void setup() { Serial.begin(9600); //inicjalizacja monitora szeregowego pinMode(CzujnikOpadDigitalPin, INPUT);//konfiguracja zachowania pinów pinMode(CzujnikRuchPin, INPUT); } void loop() { DHT11.read(CzujnikTempWilgPin); //odczyt danych z czujnika DHT11 wilgotnosc = DHT11.humidity; Serial.print("Wilgotnosc (%): "); Serial.print((float)wilgotnosc, 0); temperatura = DHT11.temperature; Serial.print(" Temperatura (C): "); Serial.println((float)temperatura, 0); ruch = digitalRead(CzujnikRuchPin); //odczyt danych z czujnika ruchu if(ruch == HIGH){ Serial.println("Wykryto ruch"); } else { Serial.println("Nie wykryto ruchu"); } wartosc_A0 = analogRead(CzujnikOpadAnalogPin); wartosc_D0 = digitalRead(CzujnikOpadDigitalPin); if (wartosc_D0 == LOW) { Serial.print("DESZCZ PADA Z INTENSYWNOŚCIĄ "); Serial.println(wartosc_A0); } else { Serial.println("DESZCZ NIE PADA"); } delay(interwal); } Test monitorowania parametrów: Konieczna była regulacja czujników, aby mierzone wartości były jak najbardziej dokładne. Warstwa chmury Jako chmurę przechowującą i analizującą dane wybrano serwis Thingspeak.com. Jako sposób komunikacji wybrano interfejs REST API. W pierwszej kolejności założono konto oraz publiczny kanał wyposażony w 5 pól: temperatura, wilgotność, ruch, opady atmosferyczne i intensywność opadów. Sprawdzono również klucze danych odpowiedzialne za zapis i odczyt danych. Poniższa grafika przedstawia przesłane dane z urządzenia pomiarowego. Warstwa aplikacji Końcowym elementem systemu jest urządzenie z systemem Android. Stworzono aplikację, dzięki której możliwe jest połączenie z kanałem na thingspeak.com oraz pobranie danych. Aplikacja została zaopatrzona we wszystkie wyżej wymienione wykresy oprócz wykresu intensywności opadów. Projekt aplikacji został przedstawiony powyżej. Wszystkie wykresy zostały umieszczone w panelu przesuwnym. Do stworzenia wykresów wykorzystano biblioteki graficzne na system android: biblioteka do tworzenia kanału thingspeak.com oraz bibliotekę do tworzenia wykresów. Cały kod stworzonej aplikacji na system android. Agregacja całego systemu Następnie przyłączono urządzenie do sieci oraz został wgrany poniższy kod: #include <dht11.h> #include <UIPEthernet.h> #define CzujnikTempWilgPin 2 #define CzujnikOpadAnalogPin A0 #define CzujnikOpadDigitalPin 4 #define CzujnikRuchPin 8 byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };//adres MAC urządzenia EthernetClient client; char server[] = "api.thingspeak.com";//adres api thingspeak int wartosc_A0; int wartosc_D0; int wilgotnosc; int temperatura; int ruch; int interwal = 30000; dht11 DHT11; void setup() { Ethernet.begin(mac); //rozpoczęcie połączenia pinMode(CzujnikOpadDigitalPin, INPUT); pinMode(CzujnikRuchPin, INPUT); } void loop() { DHT11.read(CzujnikTempWilgPin); wilgotnosc = DHT11.humidity; temperatura = DHT11.temperature; ruch = digitalRead(CzujnikRuchPin); wartosc_A0 = analogRead(CzujnikOpadAnalogPin); wartosc_D0 = digitalRead(CzujnikOpadDigitalPin); if (client.connect(server, 80)) {//składanie komendy get client.print("GET /update?"); client.print("key=POZ0YSHN2VGMKS05"); client.print("&field1="); client.print(temperatura); client.print("&field2="); client.print(wilgotnosc); client.print("&field3="); client.print(wartosc_D0); if(wartosc_D0==LOW) { client.print("&field4="); client.print(wartosc_A0); } client.print("&field5="); client.print(ruch); client.println( " HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); client.stop();// } delay(interwal); } System funkcjonował prawidłowo dane były przesyłane na serwer. Następnie uruchomiono aplikację mobilną. Oto kilka screenów: Dodatkowymi funkcjami apikacji jest przesuwanie oraz przybliżanie wykresów oraz odczytywanie dokładnych wartości po kliknięciu w punkt wykresu. Mam nadzieję, że przedstawiłem to w ciekawy i przejrzysty sposób. :) Pozdrawiam
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×
×
  • Utwórz nowe...