Skocz do zawartości

Tablica liderów


Popularna zawartość

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

  1. 2 punkty
    Faktycznie, kod źródłowy sporo pomaga. Problem okazał się dużo ciekawszy niż w pierwszej chwili wyglądało, więc w końcu odnalazłem zakurzone blue pill, podłączyłem programator i postanowiłem sprawdzić o co w tym chodzi. Najpierw wersja skrócona - lepiej na razie nie używać CubeIDE... to nowe środowisko, powiedziałbym że wersja beta. Więc jest w nim dużo więcej błędów niż w starych i sprawdzonych. A teraz pełna wersja: Na początek faktycznie - błąd się pojawia, występuje w dość przypadkowych momentach, nie ma najmniejszego sensu... Chociażby podczas inicjalizacji DMA, HardFault jest wynikiem dereferencji wskaźnika NULL, który pojawia się magicznie. Więc typowe debugowanie niewiele daje oraz wskazuje na problemy ze stosem. I tutaj niestety musimy zejść do poziomu samego procesora. Po uruchomieniu mamy: Jak widzimy po prawej stronie wskaźnik stosu, czyli rejestr sp ma wartość 0x200001fc, czyli od początku pamięci SRAM dzieli go 0x1fc = 508 bajtów. To za mało na skomplikowany program działający na liczbach zmiennopozycyjnych. Teoretycznie wielkość stosu ustawiamy w pliku linkera, czyli STM32F103C8TX_FLASH.ld: Tutaj znajdziemy dwie ważne wartości. _estack to adres "końca" stosu, czyli najwyższego adresu zajmowanego przez stos. Widzimy tutaj pierwszy błąd, bo adresy powinny być podzielne przez 4, a często i przez 8. W każdym razie powinniśmy zmienić deklarację na: /* Highest address of the user mode stack */ _estack = 0x20005000; /* end of "RAM" Ram type memory */ Teraz to czego szukamy, czyli wielkość stosu: _Min_Stack_Size = 0x400 ; /* required amount of stack */ Domyślna wartość 0x400 oznacza 1024 bajty. Mikrokontroler STM32F103C8 ma 20 KiB pamięci SRAM, więc nie musimy być aż tak oszczędni - można ustawić stos na nieco większy. Okazuje się jednak, że zmiana _Min_Stack_Size nie wpływa na wartość rejestru SP, czyli faktyczny wskaźnik stosu... Mamy 508 bajtów bo coś się komuś pozajączkowało. Nie jestem pewien, czy to najlepsze rozwiązanie, ale można poprawić problem zmieniając plik startup_stm32f103c8tx.s, który znajdziemy w katalogu Startup. Teoretycznie rdzeń Cortex-M3 ustawia wartość rejestru SP podczas uruchamiania programu - ale to jak widać nie działa poprawnie. Możliwe że wynika to ze sposobu działania debuggera i po wgraniu do pamięci flash byłoby poprawnie, ale możemy zastosować "obejście" i sami ten rejestr ustawić. Do wspomnianego pliku wystarczy dodać jedną instrukcję: ldr sp, =_estack Program wygląda wówczas tak: I u mnie działa...
  2. 1 punkt
    @dkrakowski Wygląda jak brak włączonego debugowania USB w opcjach programistycznych w opcjach telefonu.
  3. 1 punkt
  4. 1 punkt
    A może pokażesz kod? Bo to mi wydaje się proste: Masz zrobione: serwer odbiera wiadomość "włącz/wyłącz". Merda sobie przekaźnikiem i w odpowiedzi zwraca informację, że pomerdał. A chcesz mieć dodatkowo: serwer odbiera wiadomość "pokaż czujnik". Odczytuje wartość czujnika i w odpowiedzi zwraca tę wartość. Przy okazji: lepiej użyj serwera http zamiast socket, 90% rzeczy będziesz miał gotowe na dzień dobry.
  5. 1 punkt
    @Mtmiszak witamy na forum! Czasem zajecia akademickie dalece odbiegają od praktyki, także fajnie że chcesz podziałać coś we własnym zakresie. @KRZYSIEKSZAMAN również witam na forum! Powodzenia w nauce
  6. 1 punkt
    A czym jest serwo, jeśli nie silnikiem z przekładnią? Jak widzisz, wcale nie jest tak łatwo. Stosując zwykłę serwo łatwo sterujesz położeniem, a nie prędkością bo ta jest stała. Tak, na przykład takie Ewentualnie robisz to, o czym parę postów wyżej rozmawialiśmy z @marek1707 Czyli samodzielnie w pocie czoła konstruujesz to, co można kupić w sklepie pod nazwą "servo" Dodatkowa możliwość: 4. Stosujesz silnik krokowy. 5. Kupujesz serwo, wywalasz całą elektronikę podłączasz swoją (połączenie punktu 2 i 3, osobiście bym to zastosował gdyby finansowo się opłacało bo najmniej roboty i odpadają jakieś czujniki położenia). Takie silniczki (12V) kolega kiedyś kupił na Allegro ale nie mogę znaleźć aukcji. Zresztą z Twojego programu wynika, że ok. 11, wcześniej coś mówiłeś o 2 sekundach, stąd moja propozycja silnika 14 RPM.
  7. 1 punkt
    Cześć jestem Krzysiek i dopiero rozpoczynam przygodę z elektroniką. Trochę późno ale jestem dobrej myśli
  8. 1 punkt
    Cześć, Na imię mam Marcin, mam 29lat, a zainteresowanie elektroniką zostało zasiane w mojej głowie już lata temu, byłem studentem elektrotechniki - lata temu poniosłem porażkę w tym kierunku, a dzisiaj mam okazję coś zmienić w zaciszu własnego mieszkania, pomijając sale wykładowe. Pozdro.
  9. 1 punkt
    Miałem pewien problem i udało się rozwiązać pewną banalną rzecz, ale napiszę w razie gdyby ktoś też na tym utknął Nie wiem czy to jakiś błąd u mnie, czy na każdej płytce tak to działa. Gdy przerabiając początkową część artykułu miałem ustawiony pomiar jedynie w osi Z (btw. w artykule nadal jest błąd, który wytknął kolega w poście poprzednim!) to potem przechodząc do pomiaru w trzech osiach musiałem odłączyć płytkę od komputera i podłączyć z powrotem. Bez tego wszystkie odczyty z akcelerometru były wyzerowane i długo mi zeszło na szukanie błędu
  10. 1 punkt
    @Neko Tak sobie czytam Twój kod i... Zaraz... Skoro wynik jest zmienną globalną... ...to po co funkcja zwraca wartość zmiennej wynik... ...do zmiennej wynik!? A zamiast tego fragmentu o wiele łatwiej użyć pauzy pętlą while: Serial.println("Podaj dlugosc boku"); while(Serial.available()<=0){ //czekanie na odpowiedź
  11. 1 punkt
    @crbjsfso Dzięki za odpowiedź. Powodzenia z laserem, jestem ciekawy jak Ci pójdzie. @BeheGrzmot Rozumiem, że chodzi Ci o takiego robota jeżdżącego, który rysuje za pomocą przymocowanego pisaka. Pomysł ciekawy - nie masz ograniczenia wielkości pola. Jednak byłby problem z odpowiednim bazowaniem (ustaleniem początku układu współrzędnych - dwie współrzędne i kierunek początkowy) - ale to problem do rozwiązania. Może taki robot by znalazł zastosowanie w malowani jakiś murali (duże płaskie powierzchnie?) - wystarczy wymyśleć jak przymocować puszkę farby i jak wyzwalać farbę. Co do skrócenia ramienia, najlepiej zmienić konstrukcje, kosztem wielkości (mobilności) i wygodnego umieszczenia silników krokowych (i ilości). Np. taką jaką zrobił ten chłopak (tutaj głowicą jest dremel): Ogólnie polecam śledzić co robi Nikodem - parę fajnych doświadczeń i pomysł można od niego "kupić".
  12. 1 punkt
    Do tej pory ustaliłem co następuje: najlepiej utworzyć do tego zupełnie nowy workspace, trzeba pamiętać, że MX i GFX nadpisują niektóre pliki po swojemu po każdym wygenerowaniu i przez to za każdym razem trzeba bawić się od nowa. Żeby móc uruchomić designera GFXa z poziomu MXa należy odznaczyć opcję generowania projektu w root co zdecydowanie utrudnia połapanie się co i jak bo tworzone są puste foldery a skróty do plików widoczne są tylko w eclipse. Błędy wyświetlane przez eclipse nie zawsze są też jednoznacznie opisane co pogarsza sprawę. Biorąc pod uwagę powyższe doszedłem do wniosku, że można utworzyć 2 projekty, najlepiej w osobnych workspace'ach i po każdej aktualizacji kopiować pliki pomiędzy projektami dzięki czemu da się zrobić backup plików zamiast zaczynać od nowa w razie jak się coś pomiesza. Przydaje się też do tego funkcja exclude'owania zasobów z projektu, dzięki czemu jest mniej do przewietrzania. Mimo możliwości uruchomienia projektu GFXa z poziomu MXa i tak nie uniknie się zupełnie kopiowania plików ( najlepiej z projektu do projektu, żeby nie musieć ciągle ich ręcznie uzupełniać). Zaczynam się zastanawiać, czy producent zrobił taką sieczkę celowo czy tak jakoś samo wyszło, bo szczerze mówiąc to już rzygam tym eclipsem a zadanie jeszcze nie wykonane --------------------------------- Na stronie GFXa jest zamieszczona taka instrukcja: https://touchgfx.zendesk.com/hc/en-us/articles/206116381-Using-other-IDEs-with-TouchGFX Metoda druga. Wygląda trywialnie, niestety u mnie nie działa. ---------------------------------- Okazało się, że ścieżki w projekcie eclipsa produkowanym przez CubeMX były przypisane z błędem, wystarczyło przypisać pliki ponownie a najlepiej całe foldery ze źródłami. Niestety nadal występuje problem z make, trzeba ręcznie przepisać z pliku *.ld konfigurację dla eclipsa i uruchamiać make ręcznie do tego jeszcze uzupełnić ten plik dla GFXa jeśli się chce coś dołożyć z zewnątrz do projektu. BTW włączenie w eclipse parallel build w opcjach projektu znacząco przyspiesza kompilacje, zapomniałem o tym ---------------------------------- Dużo czasu kosztują próby składania tego w sposób odpowiedni. Na pierwszy rzut oka - nic trudnego. Gfx generuje swoje pliki na swoim miejscu w projekcie eclipsa i nawet niczego ważnego nie nadpisuje, to samo Mx. Z założenia nic prostszego: włączasz MXa, konfigurujesz procka (ustawienia domyślne dla płytki). Należy jedynie skonfigurować QUADSPI: 1,4, 6 cycles, half, size 24, reszta jak było. Wybierasz opcje projektu dla eclipse: nazwa, miejsce, IDE (odznaczyć root) generujesz projekt, z poziomu MXa włączasz GFXa (GRAPHICKS -> execute) , rysujesz sobie Gui, generujesz pliki GFXa, generujesz pliki MXa i włączasz eclipse klikając "open project" na pop upie. Po tych zabiegach powinno się dać skompilować projet, niestety się nie da. Trzeba poprawić przypisania w eclipse, głównie te od GFXa i dołożyć biblioteki BSP z firmware'u i ewentualnie te od AI dystrybuowane przez ST ;). Po kilku godzinach zabawy eclipsem w końcu udało się powiązać źródła i skompilować projekt. Przykłady zestawione przez producenta flashują się bez problemu (np. pralka automatyczna fajnie wygląda ;). Nie ma też problemu z budowaniem i flashowaniem projektów wyprodukowanych przez GFXa. Problemy się zaczynają kiedy się chce samemu zestawić projekt w całość za pomocą SW4STM32, aktualizowanie pliku ld nie jest zbyt wygodne ale za to za pomocą GFXa można sobie zbudować projekt i wgrać na płytkę za pomocą TYLKO jednego kliknięcia!
  13. 1 punkt
    Co do kształtu to w fusionie masz narzędzie ... loft? Rysujesz 2 szkice i tworzysz pomiędzy nimi przejście - np koło przechodzi w prostokąt. W ten sposób mógłbyś zrobić mocowanie na śruby które przejdzie w gwintowaną rurę. Patrzę na ofertę aliexpres i ta płytka ma na sobie soczewki - czyli zdejmujesz soczewkę i chcesz tam zamontować własny obiektyw?
  14. 1 punkt
    Stacja meteorologiczna służy do przeprowadza dokładnych pomiarów pogody oraz sprawdzania jakości powietrza. Urządzenie pobiera dane z czujników, następnie zapisuje je do bazy danych po czym zostają wyświetlone na stronie internetowej. Całe urządzenie zostało zamknięte w obudowie wydrukowanej w drukarce 3D. Czujniki zainstalowane w urządzeniu pobierają dokładne dane pogodowe. Stacja posiada zaawansowaną metodę pomiaru prędkości wiatru przy użyciu ultradźwiękowych czujników ruchu. Stacja działa na Raspberry PI 3+, obsługuje również starsze modele (z wbudowanym wifi) oraz na Raspberry PI ZERO (W). System operacyjny to Linux wersja Raspbian STRETCH LITE bez interfejsu graficznego. Kod źródłowy czujników został napisany w Python’ie. Dane z czujników zapisywane są przy użyciu Raspberry PI do bazy danych MySQL. Następnie zostają wyświetlone w aplikacji internetowej, która napisana została w PHP. Urządzenie wymaga połączenia z Internetem. Aktualnie wykorzystywane jest połączenie poprzez WIFI. Komunikacja pomiędzy urządzeniem a administratorem przeprowadzana jest poprzez protokół SSH i FTP. Stacja jest zbudowana w taki sposób, żeby użytkownik mógł w łatwy sposób ją obsługiwać. Aby włączyć stację należy podłączyć ją do prądu. Działanie urządzenia zostanie zasygnalizowane świeceniem diody (czerwonej) oraz miganiem diody zielonej, która świeci przy wysyłaniu danych do bazy. Oprócz graficznego przedstawienia danych aplikacja posiada skrypty do obliczenia m. in. wschodu i zachodu słońca w danej lokalizacji. Oprogramowania posiada opcje, w których m. in. możemy ustawić czas pomiaru pogody i zapisu do bazy danych. Jest to ważne ponieważ możemy sami ustalać jak często stacja ma sprawdzać stan pogody Projekt obudowy Obudowa została zaprojektowana w programie FreeCAD. Składa się ona z 9 elementów. Została wydrukowana w drukarce 3D – Anet A8 (moja własna drukarka). Materiał wykorzystany podczas druku to PLA, temperatura druku 205°C. Łączny czas druku wynosi 19 godzin, zużywa 174 gram materiału przy wysokości warstwy 0.2mm. Projekt obudowy został wykonany w taki sposób, aby urządzenie było odporne na deszcz i wiatr. Opływowość stacji pozwala na wykonywania dokładnych pomiarów prędkości wiatru. Na samej górze stacji zamontowany został czujnik opadów deszczu oraz czujnik natężenia światła. Następnie pod nimi umieszczone są ultradźwiękowe czujniki prędkości wiatru. Kolejny element to obudowa chroniąca RB PI i elektronikę. Obudowa posiada specjalne mocowanie na RP PI, które sztywno trzyma urządzenie. Następnym elementem jest rdzeń, do którego przymocowane są pozostałe czujniki. Obudowę zamyka podstawka, w której znajduję się główny przewód zasilający oraz diody sygnalizujące działanie. Czujniki Urządzenie w czasie rzeczywistym pobiera dane z 7 czujników, następnie są one w odpowiedni sposób przekazywane do modułu detektorów i mikrokontrolerów, które zwracają dane do Raspberry PI. Lista czujników: Czujnik opadów Czujnik pomiaru opadów atmosferycznych składa się z dwóch części: sondy pomiarowej „YL-83” oraz modułu detektora „LM393”, który posiada wyjście analogowe umożliwiające pomiar deszczu. Moduł zasilany jest napięciem 5V. Czujnik natężenia światła Czujnik światła bazuje na fotorezystorze „GL5537-1”. Jest to opornik fotoelektryczny, który zmienia swoją rezystancję pod wpływem padającego światła. Prędkość wiatru Pomiar prędkości wiatru bazuje na ultradźwiękowym czujniku odległości „HC-SR04”. Ultradźwiękowy pomiar prędkości polega na zmierzeniu różnicy czasu przejścia impulsów ultradźwiękowych propagujących w kierunku przeciwnym do kierunku przepływu. Temperatura i wilgotność Do wykonywania pomiaru temperatury i wilgotności powietrza został wykorzystany popularny moduł „DHT11”. Moduł składa się z czujnika oraz niezbędnego do poprawnego działania układu: rezystora i kondensatora filtrującego napięcie zasilania. Ciśnienie Moduł z cyfrowym barometrem „BMP180” wykonuje pomiar ciśnienia w zakresie od 200hPa do 1100hPa. Układ komunikuje się przy użyciu interfejsu IC2, co zapewnia wysoką dokładność i stabilność wykonywanych pomiarów. Jakoś powietrza Moduł jakości powietrza „MQ-135” wykrywa w atmosferze: benzen, amoniak (NH3) oraz dwutlenek węgla (CO2). Inne: Przetwornik A/C i C/A 8-bitowy I2C Głównym układem przetwarzania danych w tej pracy jest przetwornik PCF8591. Moduł posiada czterokanałowy przetwornik analogowo-cyfrowy działający w oparciu o 8-bitowy systemem akwizycji danych. Komunikacja opiera się na szeregowej wysyłce danych za pomocą dwukierunkowej magistrali I2C.
  15. 1 punkt
    @Treker Tak - powstała wersja programu do sterowania samym oświetleniem (ilośc kanałów pwm zwiększona do 6) dołożone oświetlenie nocne dla każdego kanału (od zmroku do północy i od północy do świtu) a także wprowadzone opóźnienia świtu i zmroku dla każdego kanału. Omówiłem to dokładnie na filmie: W planach na tych samych płytkach jest sterownik do terrarium (nazwa robocza "Luna") ale to najprędzej za jakieś pół roku (brak czasu i tym podobne )
  16. 1 punkt
    @SOYER Dobrze W wolnym czasie postaram się przygotować coś ciekawego z dokładnym opisem i kodem źródłowym. W internecie można znaleźć kilka ciekawych jak nie lepszych rozwiązań np. ten.
  17. 1 punkt
    Ja tak. Bardzo ciekawa sprawa (pomiar prędkości wiatru bez części ruchomych). Pewnie nie wykorzystam, ale dobrze byłoby znać praktyczne rozwiązanie... może się przyda do czegoś innego?
  18. 1 punkt
    @badrabbit96 ten sposób pomiaru prędkości wiatru zdecydowanie kwalifikuje się do osobnego artykułu na Forbocie ;), kto za?
  19. 1 punkt
    @Treker Dziękuję Projekt ten wykonałem do zrobienia pracy inżynierskiej. Co do pomiaru prędkości wiatru to dosyć skomplikowany proces same czujniki zostały lekko zmodyfikowane oraz napisałem dosyć skomplikowany algorytm bazujący na tej publikacji. Oczywiście następnie musiałem kalibrować czujnik ale wynik końcowy jest zadowalający.
Tablica liderów jest ustawiona na Warszawa/GMT+01:00
×
×
  • Utwórz nowe...