Skocz do zawartości

Tablica liderów


Popularna zawartość

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

  1. 4 punkty
    Podobnie jak @ethanak korzystam z pakietów płytek MCUdude. Ogólnie to na ten temat pisałem już nieco na moim blogu. https://rafal-bartoszak.blogspot.com/2019/05/programowanie-mikrokontrolerow-atmega.html
  2. 4 punkty
    Cześć, ja używałem "ATtiny Core": https://github.com/SpenceKonde/ATTinyCore z Attiny85 i działało poprawnie. BTW: korzystałem z pętli PLL dla zegara 16 MHz, aby wygenerować przebieg PWM o częstotliwości 20 KHz. Miałem małe przeboje z przetwornikiem ADC - analogRead ()nie działał i musiałem oprogramować ADC na rejestrach, wtedy ADC działał poprawnie Pozdrawiam
  3. 4 punkty
    Ja tam jak potrzebowałem to wziąśćłem od Wujka Gógla... ATtiny 85/84: https://github.com/damellis/attiny ATtiny13: https://github.com/MCUdude/MicroCore ATmegi: https://github.com/MCUdude i wybierz sobie która. Więcej na razie nie potrzebowałem. BTW. nieważne jaki programator jeśli używasz Arduino IDE.
  4. 4 punkty
    Inaczej mówiąc, to co wysyłasz do silnika jest jakims przebiegiem okresowym. Np. w najprostszym schemacie sterowania fazami silnika BLDC masz 6 komutacji skłądających się na jeden okres. Sterownik robi je po kolei a potem wraca do sytuacji początkowej i zaczyna się powtarzać. To jest całe 360° z punktu widzenia sygnału zasilającego uzwojenia, a poszczególne komutacje zachodziły oczywiście co 60°, czyli co zmianę stanu jednego z 3 czujników (jeżeli je masz w silniku). Ale nie widząc prawdziwego silnika nie wiesz o ile w czasie tych "elektrycznych" 360° obrócił się wał, bo to wynika z konstrukcji uzwojeń stojana i sposobu rozmieszczenia magnesów stałych na wirniku. Współczynnik ten może wynosisć 2, 3, 4 itd. Np. wielkość 4 oznacza, że na każdy pełny cykl sterowania ("elektryczne 360°) wirnik wykona tylko 90° obrotu mechanicznego, bo tak został zrobiony.
  5. 4 punkty
    Jutro będzie oficjalne ogłoszenie na stronie konferencji, więc mogę wreszcie co nieco napisać o tajnym projekcie, którym się zajmowałem przez kilka ostatnich miesięcy. Otóż produkujemy 1400 sztuk lekko zmodyfikowanych PewPew do rozdania na pewnej dużej europejskiej konferencji pythonowej. Wyglądają one tak (na tym zdjęciu urządzenie jest do góry nogami, żeby lepiej widać było szczegóły): Jest tutaj dla mnie kilka "pierwszych razy". Po pierwsze, pierwszy raz zamawiam z Chin tej wielkości zamówienie. Po drugie, ze względu na ilość produkowanych urządzeń mogliśmy sobie pozwolić na nietypowy kolor maski dla płytki — w tym przypadku pomarańczowy, jako jeden z kolorów tegorocznej konferencji (drugim jest niebieski, stąd kolor przycisków i ekranu). Po trzecie, pierwszy raz zrobiłem kompletny firmware, zawierający już w sobie zarówno bootloader, circuitpythona jak i wszystkie pliki, które mają być "fabrycznie" wgrane — przedtem procedura programowania była trochę bardziej skomplikowana. No i dochodzi jeszcze pierwszy raz kiedy kupuję 2800 sztuk baterii... Oczywiście na konferencji odbędą się warsztaty z programowania tego — mamy nadzieję, że uda nam się zwerbować ochotników, którzy sami się nauczywszy obsługi pomagać będą kolejnym uczestnikom — zobaczymy jak to wyjdzie w praktyce.
  6. 3 punkty
    Jakiś czas temu na forum zaprezentowałem projekt procesora zrealizowanego na układzie FPGA. Był to układ zrealizowany na dwóch płytkach Elbert v2. Aby go uruchomić należało wykonać dość sporo pracy. Dzisiaj prezentuję pierwszą wersję układu DCE Q816, czyli bezpośredniej kontynuacji poprzedniego projektu. Można powiedzieć, że pierwsza wersja Q818 to tak naprawdę Q816 zrealizowany tylko na jednej płytce Elbert v2. Układ jest w pełni kompatybilny z poprzednim projektem oraz posiada identyczną listę rozkazów. Na ten moment nie będę skupiał się na budowie procesora, ponieważ jest ona praktycznie identyczna jak w układzie Q816. Jedyną różnicą jest to, że pamięć ROM oraz procesor zaimplementowane została na tym samym układzie FPGA. W związku z tym każdy, kto posiada płytkę Elbert v2 może pobrać projekt, który dostępny jest tutaj, a następnie uruchomić procesor Q818 w swoim domu. Po implementacji projektu na płytce FPGA powinniśmy zobaczyć następujący efekt świetlny. Należy również wspomnieć, że porty procesora skonfigurowane zostały w następujący sposób. przełączniki DIP Switch - wejście IN procesora (logika odwrotna) przycisk SW1 - RESET port P1 - wyjście OUT1 procesora diody LED - wyjście OUT2 procesora Programowanie procesora odbywa się poprzez zmianę zawartości pamięci ROM procesora. Aby tego dokonać musimy otworzyć plik ROM.vhd i następnie wpisać binarną zawartość kolejnych komórek pamięci. Najmłodsze 5-bitów to rozkaz dla procesora. Kolejne 8 to tzw. dana bezpośrednia, którą możemy przesłać do innych rejestrów. Poniżej umieszczam spis dostępnych rozkazów procesora oraz instrukcje dla ALU zapisywane w rejestrze C. Na ten moment jest to pierwsza wersja układu Q816 w przyszłości postaram się o uporządkowanie samego kodu, jak i dodanie kolejnych funkcji. O zmianach i kolejnych wersjach postaram się informować w komentarzach do tego posta.
  7. 3 punkty
    Zamontowałem ramiona, BARDZO podstawowa funkcjonalność już działa. (chyba). Efekt można zobaczyć na poniższym filmiku.
  8. 3 punkty
    @hazi18, jeśli ten program używasz od dwóch lat to trochę zakopałeś te swoje 2 talenty. Jest do poprawy na wielu poziomach. Po pierwsze WDT, to tylko 3 linijki dodatkowe, jeśli to Arduino się zawiesi to rozwiąże problem, przykład: https://circuits4you.com/2018/01/24/tutorial-on-arduino-watchdog-timer-setup/. Kolejne to czujnik, jest niestety kiepskim wyborem, odczyt trwa ~250ms, lubi się powiesić. Nie używam go na co dzień, ale leży w szufladzie to sprawdziłem. W przykładzie jest jak zweryfikować czy w ogóle działa, Ty tego nie masz: if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!");, chyba warto zweryfikować czy w ogóle należy używać odczytanych wartości w dalszej części programu. Warto też dodatkowo sprawdzić, czy nie są jakieś trzepnięte, np. mniejsze niż 15oC czy większe niż 50oC, bo to w tym wypadku też byłoby podejrzane. Jak czytałem na forum sam reset układu Arduino + DHT często nie pomaga, trzeba odłączyć zasilanie by wszystko znowu zaczęło działać, chodzi zapewne od odłączenie czujnika, bo sam uC Atmega pracuje wg mnie bardzo stabilnie w porównaniu np. do ESP8266 czy ESP32, no w porównaniu z nimi to jest jak skała, wg mnie nie w tym leży problem. WDT w ESP czasami niewiele daje, gdy problemem jest jakiś spadek napięcia i procesor po prostu nie wstaje. W AVR domyślnie jest włączony BOD, który działa wg mnie znacznie pewniej. Dla DTH rozwiązaniem jest zasilenie go z pinu procesora, pobór prądu DHT rzędu kilku mA to pikuś dla AVR, po resecie z WDT wystarczy profilaktycznie wstrzymać program na 2s ze stanem niskim dla nóżki VCC DHT i masz czujnik zresetowany. Czyli po prostu zasil DHT jakbyś zaświecał leda, też można dać rezystor R=100. Odczyt DHT nie ma sensu częściej niż co 2s, w ogóle w programie nie zarządzasz czasem. Tu na blogu jest kurs Arduino, uzupełnij wiedzę o millis(). 3 ekrany nie mają sensu, wystarczy na jednym przez sekundę pokazywać np. 23.3C, potem przez sekundę 44.4H, potem ewentualnie stan licznika timeup sekund czy minut od resetu, by zauważyć czy był jakiś reset od WDT. Można też wymienić na jakiś z I2C. Trzy ekrany powinny też bez problemu działać na jednym pinie zegara jak zauważył @ethanak, jednak ta biblioteka ma kaprysy, ja sobie podłączyłem do pinów 11 i 13 i nie ruszyła w ogóle, piny są OK, bo inna biblioteka zadziałała. Przepiałem na domyślne 2 i 3, potem na 4 i 5 - tu było OK. Nie wiem o co jej chodzi.
  9. 3 punkty
    Niczego nie zwieraj. Skoro dziękujesz za odpowiedzi, to wypadałoby się do nich jakoś odnieść, nie uważasz? Bo ja mam z kolei wrażenie, że nic do Ciebie nie dotarło. Na Twoim schemacie widzę wszystkie błędy o jakich pisałem: ani na wejściach kostki nie masz oporników podciągających do +5V lub ściągających do masy, ani nie robisz nic by pozbyć się wielu impulsów generowanych przy jednym naciśnięciu. Czyli albo nie czytałeś, albo olałeś, albo nie zrozumiałeś. Wolisz nie wnikać tylko dostać potwierdzenie tego, że spaliłeś i z czystym sumieniem iść do sklepu po nowy układ? Tylko wiesz, tą metodą - mimo że to tani scalak - mogą Ci się skończyć pieniądze a nadal nic nie będziesz umiał. Ogólna zasada jest taka: żadne wejście układu serii 74HC.. nie może wisieć w powietrzu. U Ciebie wisi nie tylko jawnie niepodłączone OE, ale wiszą wszystkie (oprócz MR) gdy nie wciskasz żadnego przycisku a to oczywiście pierwszy poważny błąd. Podejrzewam, że tak jak wielu początkujących wykombinowałeś sobie, że na wejściach jest normalnie zero a jak podasz plus przez przycisk to będzie jedynka. Otóż tak nie jest. Tak więc po kolei: OE podłączasz na stałe do stanu niskiego, czyli do GND Od każdego z dwóch wejść: ST_CP i DS dajesz opornik 10-22k do GND, przyciski zostawiasz jak są - mają ciagnąć wejścia do stanu wysokiego, oporniki zapewnią stan niski Od wejścia SH_CP dajesz opornik jak wyżej i dodatkowo kondensator rzędu 1uF do masy - to powinno usunąć śmiecie na wejściu zegara rejestru przesuwającego. Dwa pozostałe wejścia z przycisków nie będa pracowały źle jeśli będą nieodfiltrowane. Czysty sygnał na SH_CP jest kluczowy dla poprawnego wsuwania kolejnych bitów. Przycisk ma podawać +5V na wejście SH_CP przez opornik szeregowy 1k. Między +5V a GND dajesz kondensator 100nF - układy cyfrowe potrzebują tego obowiązkowo Dla pewności narysuj schemat ze wszyskimi poprawkami i pokaż czy dobrze zrozumiałeś. Potem włączasz zasilanie, ponownie robisz testy i piszesz co tam zdziałałeś. BTW: Jeśli chcesz robić więcej eksperymentów z układami cyfrowymi będzie Ci potrzebny zestaw/moduł przycisków generujących dokładnie jeden impuls na każde wciśnięcie. Warto coś takiego (jakąś małą płyteczkę z kilkoma przyciskami i filtrami RC) zrobić raz a dobrze, by w kółko nie walczyć z tym samym problemem.
  10. 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.
  11. 3 punkty
    To zależy od tego jakie wyniki dostaniesz. Najprościej to wrzuć już te powyższe pary (przewodność [µs], napięcie [mV]) do arkusza i: zwyczajnie przyjrzyj się czy leżą na jednej prostej, spróbuj policzyć współczynniki regresji liniowej, jeśli punkty sa bardzo rozrzucone wokół prostej to spróbuj powtórzyć pomiary w tych punktach, jeśli to ewidentnie nie jest prosta tylko jakiś banan albo krzywa typu "S" to zacznij szukać dobrego przybliżenia wielomianem niskiego stopnia (max 3). Duże nieliniowości prądu względem LCD byłyby dziwne, bo akurat bardziej wierzę w błędy samego pomiaru czyli różnice między tym co naprawdę w wodzie piszczy a tym co pokazuje miernik na wyświetlaczu (a te są nie do zweryfikowania bez drugiego, dobrze skalibrowanego/wzorcowego miernika przewodności cieczy) niż w to, że urządzenie nie umie w miarę liniowo zamienić liczby pokazywanej na LCD na prąd w pętli. No, ale zobaczymy. Wrzuć do excela i pokaż jakiś wykres, najlepiej już z wykreśloną prostą regresji liniowej. Używaj napięć, bo masz jakieś kłopoty z rozdzielczością pomiarów prądów - mierzysz na 200mA? Zawsze używaj zakesu na którym masz jak najwięcej cyfr (*) i jesteś jak najbliżej końca skali. Czy używasz opornika 220Ω? Nie napisałeś tego. ------------------------------------------------- EDIT: (*) - ale staraj się nie zmieniać zakresu podczas takich przekrojowych pomiarów. Jeżeli tutaj widać, że pętla nie robi jakiś strasznych głupot i nie wypuszcza 50 czy 200mA, to zupełnie spokojnie całość możesz zmierzyć na zakresie 20mA. Wtedy, na typowym mierniku z wyświetlaczem 3½cyfry (czyli 1999) dostaniesz najlepsze możlwie na nim wyniki. Zmiana zakresu miernika gdzieś w trakcie robienia tabelki poskutkuje prawie na pewno jakimś nienaturalnym schodkiem na wykresie. Ale to tylko tak na marginesie, bo mając już włączony w obwód opornik prądy są rzeczą drugorzędną. I tak interesuje Cię tylko napięcie, bo to je będzie oceniał ADC w Arduino.
  12. 3 punkty
    Witam, W koncu udalo mi sie doprowadzic czesc mechaniczna "robota" do etapu, kiedy mozna go zaprezentowac na filmie. Konstrukcja jak wiele innych nieco wzorowana na kinowych "bohaterach". Troche wyroznia sie zastosowaniem komutatorow w dloniach (przez co maja ciagly obrot) oraz wydluzaniem szyi. Nieztety sterowannie na chwile obecna nie dziala poprawnie, po prostu mi nie wyszlo - na filmie powycinane sa fragmenty kiedy robot (a wlasciwie jego sterownik) zastanawia sie okolo 3 sekung przed kazdym ruchem. Jako napedy zastosowalem silniki DC z przekladnniami. Silniki maja po 2 wylaczniki krancowe zabezpieczajace na koncach ruchu. Zasilanie - akumulator 12V 12Ah.
  13. 3 punkty
    Jeszcze chciałbym dodać, że mam bardzo ciekawą wiadomość. Sprawa w tym, że jeden klient z Rosji napisał do mnie - A czy nie próbowałem robić filament z beczek KEG 30 litrowych od piwa. Nie miałem takiego pomysłu, więc sprawdziłem, czy idzie kupić takie beczki. Okazało się, że nie ma żadnego problemu, na Allegro można kupić dowolną ilość takich beczek po 7 zł/szt. Wg obliczeń z jednej takiej beczki mona zrobić ponad 70 m filamentu w jednym kawałku. Możliwe, że można uzyskać takie beczki za darmo w barach piwnych, ponieważ i tak oni nie wykorzystywane powtórnie tylko to już śmieci. Ścianka jest bardzo gruba w porównaniu z butelkami od napojów, czyli - 0,6 mm Tak, że dla zrobienia filamentu beczka musi byś pocięta na paski o szerokości 4,5 - 4,7 mm. Kupiłem na próbę 3 takich butli, zrobiłem przyrząd do rozcinania na paski o szerokości 4,5 mm. Na początek powcinałem z jednej butli parę pasków o długości po 5 m (dla sprawdzenia jak będzie robić się filament i jak nim będzie się drukować). Zrobiłem filament na swojej maszynce, przy czym zauważyłem, że przy takiej grubości ścianki w otrzymanym filamencie niema nawet malutkiego otworu, pręcik filamentu jest pełny. Właśnie dzisiaj zrobiłem próbne drukowanie małego kółka zębatego, wydrukowało się bardzo dobrze. Potem nagram specjalny filmik drukowania tym filamentem. Ale zauważyłem jedną rzecz. Z powodu sporej grubości ścianki rozcinanie ręczne idzie, ale bardzo ciężko, bardzo mocny opór, trzeba przyłożyć dużą siłę. Tak że ręcznie rozcinać bardzo ciężko. Ale możliwe, ponieważ z trudem, ale ponacinałem kilka pasków na próbę. Będę teraz projektować i wykonywać specjalną maszynkę do rozcinania tych burli na paski. Jak zrobię, to nagram wideo i poinformuje.
  14. 3 punkty
    Witam Od około półtora roku interesuję się sztuczną inteligencją, zwłaszcza zastosowaną w robotyce. Jest to dla mnie niezwykle ciekawy temat Kilka miesięcy temu zacząłem pracować nad moim prywatnym projektem, który cały czas jest w fazie rozwoju. Pewne elementy, takie jak uczenie się poprzez rozmowę z człowiekiem są gotowe, więc postanowiłem nagrać poniższe filmy: AgeBot podłączony jest do internetu. Platforma to gotowa konstrukcja - AlphaBot-PI. Użyłem jej, aby szybciej skupić się na oprogramowaniu. W ostatnim czasie domykałem widoczne na filmach możliwości robota i w międzyczasie zacząłem pracę nad wykorzystaniem kamery (aktualny stan to ~30%). W bliskiej przyszłości platformę mam zamiar wymienić na coś bardziej zaawansowanego lub zbudować swoją, ponieważ ta zaczyna mnie powoli ograniczać (pod względem hardware'u). Jej specyfikacja dostępna jest w internecie (np. na stronie firmy Waveshare), więc nie będę kopiował Jak już zauważyliście - używam Raspberry PI. Oprogramowanie na malinkę napisałem w C++, pozostała część to C++ oraz Python. Systemem jest Raspbian. Do zautomatyzowania instalacji niektórych zależności w systemie (akurat w przypadku samej malinki) używam narzędzia Ansible, a o te krytyczne dla działania aplikacji dba manager pakietów (apt, buduję paczki .deb). Do przetwarzania tekstu użyłem biblioteki Tensorflow, natomiast w procesie uczenia się, robotowi asystuje wnioskowanie. Kamera i przetwarzanie obrazu otworzy wiele nowych drzwi, ułatwi również pracę przy kolejnej domenie - planowaniu zadań. Sam robot jest stosunkowo małą częścią projektu, ale o tym... w przyszłości Każdy feedback mile widziany Pozdrawiam PS: W ciągu kilku dni napiszę posta z trochę bardziej szczegółowymi informacjami odnośnie przetwarzania tekstu - czatowania z robotem
  15. 3 punkty
    Jako sposób realizacji: napędy elektryczne plus zasilanie z pokładowego akumulatora, to na pewno na nie. Rzeczywiście, trendy są takie by do coraz nowszych urządzeń wstawiać coraz więcej inteligencji lub przynajmniej automatyki. Trochę to marketing, ale trochę jednak jakaś poprawa parametrów. Jeżeli udało się wstawić w przerzutkę silnik przełączający biegi i jeszcze to sprzedawać za chore pieniądze, to jakiś rynek na to jest. Weź jednak pod uwagę, że akurat rowery są bardzo trudnym rynkiem. Tu mechanika już dawno osiągnęła szczyty swoich możliwości i postępy z sezonu na sezon są bardzo małe, jeśli nie zerowe. Po prostu nie da się zrobić wiele lżejszych obręczy, ramy czy amortyzatora wciąż spełniających wymogi pracy w ciężkich warunkach wyścigów. Wszystko musi być lekkie i mega wytrzymałe tak, by nie zabić gościa podczas lądowania z dropa czy wybicia do przeskoku przez hopę. I nie mówię tu o maszynach downhillowych, gdzie masa w zasadzie może być dowolna tylko o lekkich ścigaczach do XC czy maratonów, bo trasy takich wyścigów także obfiują w trudne technicznie odcinki. Elektryczna przerzutka - jeśli już trzymamy się tego przykładu, nie używa mocy swojego źródła zasilania do przciwdziałąnia dużym siłom tylko do sterowania: do przesuwania wózka z trybu na tryb. To wydaje się lekkim zadaniem, prace nad tym by rozwiązanie było lźejsze (a przynajmniej w sumie tak samo ciężkie) jak osprzęt najwyższej klasy trwało latami. Nawet gdyby taki gadżet dawał jakieś zalety (np. szybsza zmiana biegów, brak problemów z przełączaniem przy lekko zużytym łańcuchu czy trybach, automatyczne przejazdy lekko dalej niż trzeba a potem cofanie co zwykle intuicyjnie robi się manetką), ale było cieższe niż zestaw mechaniczy, nikt by na to nawet nie spojrzał. Tutaj trzeba było maksymlanie odchudzić zasilanie (akumulator, sterownik i sam silnik krokowy zintergrownay w kosmicznej przerzutce) by dało radę to sprzedać. I dopiero wtedy mozna było mówić o zaletach jakie przed chwilą wymieniłem. A moim zdaniem, mimo zaangażowania giganta Shimano pomysł wciąż nie przyjął sie na rynku masowym. W przypadku rozwiązań "siłowych" typu napędy rowerowe, mamy wciąż do czynienia z niedoborami energii. Akumulatory są wciąż zbyt duże i zbyt ciężkie by stanowić ciekawe wsparcie nie tylko dla osób starszych czy w jakiś sposób ułomnych (nawet w sensie wypracowanej sprawności fizycznej). Jeżeli miałbym zamienić moją <10kg ścigałkę ustawioną pod maraton MTB na której z przyjemnością podjeżdżam pod dowolną górkę albo robię sobotnie 100km w lasach wokół Wawy na 20kg maszynę za 5-8kPLN, którą prowadzi się jak słonia, jest wołowata na singletrackach a prądu starcza na 40km, to musiałbym się chyba prochów najeść. Prowadzenie lekkiego i dobrze ustawionego roweru to przyjemność sama w sobie i kto raz tego spróbował, nigdy nie wróci do marketowego (lub w inny sposób obciążonego) sprzętu. Moim zdaniem Twoje rozwiązanie należy właśnie do tego drugiego rodzaju, tj. rozwiązania "siłowego". Będziesz walczył z grawitacją a to kosztuje mnóstwo mocy: popatrz na stojący w zawisie śmigłowiec. Rzeczywiście, ścieżka rozwoju amortyzatorów to z jednej strony coraz lżejsze konstruckje, ale z drugiej coraz więcej wycudowanych rozwiązań mechanicznych: lekkie sprężyny elastomerowe, dwie przeciwstawne, pompowane komory powietrzne, regulacje coraz większej liczby parameterów (naprężenie wstępne, tłumienie odbicia, długość skoku) właśnie po to, by ten sam amortyzator można było ustawiać pod a) różnych użytkowników, b) różne style jazdy, c) różne podłoża i profile trasy. A ponieważ w mechanikę trudno wbudować inteligencję (choć już zdarzają sie pierwsze jaskółki) to naturalnym kierunkiem wydaje się elektronika. Tu raczej bym sopdziewał się analizatorów drgań (wielkość, częstość) wbudowanych bezpośrednio w amortyzatory niż jakichś radarów podłoża. To przecież w amorku (tak przednim jak i tylnym) widać co i jak dzieje się z ramą czyli z rowerem. Biker intuicyjnie dociąża/odciąża przednie/tylne koło śledząc trasę i patrząc o wiele dalej niż zrobi to jakikolwiek czujnik. Jadąc 30km/h wąską scieżką wśród drzew nie patrzysz przecież pod przednią oś na dołki tylko kilkanaście (i więcej|) metrów do przodu, wybierając optymalną trasę, sposób przeskoczenia korzenia czy doła, ominięcie tarki czy wybierając punkt apeksu i konieczność wcześniejszego złożenia się w trudnym zakręcie z ujemnym skosem. Amortyzatory w tym pomagają, bo dzięki ich robrej regulacji opona utrzymuje jak nadłuższy kontakt z podłożem, ale nie są panaceum. Czasem największą ich wadą jest to... że są. Z uwagi na swoje własności pochłaniania energii zabierają ją nikomu innemu tylko Tobie, choćby tam gdzie musisz mocniej popracować: na podjazdach, na wyjściu z lasu na asfalt, gdy za wszelką cenę trzeba mocniej docisnąć by dojść grupę i nie zostać samotnie w otwartym polu itp. Wymyślono zatem blokadę skoku, by nagle rower MTB stał się sztywny jak szosówka. Wciskając/przekręcając odpowiedni guzik dostajesz za darmo +20% do mocy pedałowania, ale spróbuj nie odblokować takiego "sztywniaka" na najbliższym zjeździe: leżysz i płaczesz albo przynajmniej zostajesz w tyle. No, tak to działa. I właśnie tam przyda się automatyka: do wyczuwania ogólnego profilu trasy i usztywniania lub luzowania w zależności od przejeżdżanych odcinków,do blokowania ugięć gdy dochodzi do pompowania itp. To polega jednak na przytykaniu lub otwieraniu poszczególnych zaworów między komorami a nie siłowej walce zastępującej główną sprężynę lub pompowaną komorę. Wstawianie jakichś silników i ich zasilania do walki z grawitacją i próby "unoszenia" roweru są bez sensu. Z tym to akurat amory od dawna radzą sobie bardzo dobrze. Pamiętaj, że w samochodzie masz potężny silnik a w rowerze każdy gram musi być przesunięty czy wciągnięty na górkę przez użytkownika - to nie jest proste przeniesienie idei, tu nie działają te same pomysły. Niestety, takie modyfikacje o jakich piszę nie leżą w zasięgu amatorów. Nowoczesne amortyzatory już do samego rozmontowania i ponownego złożenia poserwisowego wymagają specjalistycznych narzędzi i wiedzy. Do tego trzeba by zaprojektować i wykonać sterowane zawory pracujące w naprawdę trudnych warunkach a przeciez konstrukcja już i tak jest optymalizowana na masę i wymiary. Tam po prostu nie ma miejsca na rozbudowę. No chyba, że ktoś ma warsztat z CNC i ogromne dośwadczenie w mechanice i rowerowaniu - ale czy wtedy jest jeszcze amatorem? Mam nadzieję, że powyższe potraktujesz nie jak podcinanie skrzydeł tylko jak spojrzenie kogoś z boku, kto używa tego rodzaj sprzętu i coś tamo jeżdżeniu wie. Oczywiście, kiedyś musiał powstać silnik spalinowy a pierwszy to pewnie nie podziałał dłużej jak kilka minut. Pierwsze samoloty nie latały w ogóle a pierwszy rower nie miał napędu i był z drewna. No i niestety to właśnie na takim poziomie będzie Twoje rozwiązanie, jeśli w ogóle zbudujesz coś działąjącego. I dlatego warto się zastanowić, czy chcesz na to poświęcić czas i pieniądze. Oczywiście własne doświadczenia, zdobyta wiedza i satysfakcja są bezcenne, ale prędzej czy później przychodzi podsumowanie i refleksja. Przemyśl to raz jeszcze, policz coś może, bo masz wystarczająco dużo narzędzi i wiedzy dostępnej na wyciągnięcie ręki by temat przepracować teoretycznie i samemu ocenić, czy Twoje założenia są w ogóle realizowalne.
  16. 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..
  17. 3 punkty
    Każdy tranzystor ma jakiś współczynnik wzmocnienia mieszczący sie w podanych widełkach i zmierzony w bardzo konkretnych warunkach. Jeżeli w Twoim układzie te warunki są inne to gwarancja producenta przestaje obowiązywać: jeżeli są łagodniejsze to możesz liczyć na więcej "niż ustawa przewiduje", jeżeli bardzo ciężko doświadczysz swój tranzystor to nie uzyskasz nawet tego co napisali w datasheet. Tak, wszelkie elementy mają rozrzut technologiczny i o ile np. opornikach można liczyć na 5% tolerancji rezystancji, w droższych na 1% a w naprawdę wypasionych (i drogich) na 0.1%, o tyle akurat wzmocnienie tranzystora jest jednym z najbardziej rozrzuconych parameterów. W zasadzie najlepiej mamy z napięciem Ucmax, bo właściwie nie zależy ono od tego jak tranzystora użyjesz. Już nawet prąd Icmax, określony w katalogu na jakąś konkretną wartość, bardzo zależy od sposobu aplikacji (długość wyprowadzeń, radiator, położenie na płytce, opływ powietrza, współczynnik wypełnienia PWM), czyli generalnie od warunków chłodzenia i obciążenia. Używanie tranzystora jako klucza to trochę osobne (względem tego "analogowego") zagadnienie. Tutaj zależy Ci na dwóch dobrze określonych stanach: na dobrym wyłączeniu i na pełnym załączeniu oraz na szybkim i bezbolesnym przejściu między nimi. W pierwszym przypadku nie masz strat mocy (i grzania się struktury) bo nie płynie prąd, w drugim minimalizujesz moc strat przez wprowadzenie tranzystora w głębokie nasycenie (małe Ucesat). Pierwsze wydaje się łatwiejsze, z drugim może być problem, bo dysponujesz rachitycznym wyjściem procesora, które jest w stanie wypuścić kilkanaście mA, ale przy potrzebach rzędu 50mA już trzeba kombinować. Najprostszy układ sterowania bazą to rzeczywiście opornik i dioda B-E tranzystora. W tej konkretnej tabelce widzisz, że mierzyli wzmocnienia dla trzech różnych prądów kolektora. Widać, że sugerują używanie tego tranzystora w okolicach kilkuset mA. Słabo sprawdzi się dla bardzo małych (jak na niego) Ic bo w wierszu Ic=5mA gwarantują tylko wzmocnienie 25. Najbogatszy w informacje jest wiersz dla Ic=150mA gdzie producent sugeruje, że większość jego wyrobów będzie miała wzmocnienie typowe 250 (całkiem spoko jak na tranzystor mocy) no a dla 500mA to już spadek na łeb. To górny zakres możliwości prądowych tego tranzystora i tam nie można wiele oczekiwać. Tu jedna ważna uwaga: podane wzmocnienia (i warunki pracy) nie są jeszcze tymi, których potrzebujesz do pracy jako klucza dwustanowego Zauważ, że mierzyli je dla Uce=2V a to trudno nazwać nasyceniem - to wciąż praca w zakresie liniowym. Przecież gdybyś tak używał tego elementu to już dla 150mA miałbyś stratę 0.3W. Dla 500mA straty na ciepło rosną do 1W a tego ta obudowa bez radiatora by raczej nie zniosła. Co wiecej: praca "analogowa" powoduje, że napięcie kolektora (czyli pośrednio to co widzi obciążenie) zależy od prądu kolektora więc zmieniając odbiorniki (dając więcej diodek LED lub mocniejszy silnik) zmieniałbyś jedynie moc strat na tranzystorze a nie prąd Ic, bo tranzystor pracuje wtedy jak źródło prądowe a tego bardzo nie chcesz. Tak więc zależy Ci na jeszcze głębszym wysterowaniu tranzystora, by jego Uce spadło ponżej setek mV. Tranzystory małosygnałowe umieją tutaj schodzić do <100mV, ale aż takiego wyczynu po historycznym BD139 bym nie oczekiwał.Potwierdza to kolejny wiersz tabeli: masz tu nasycenie mocno przesterowanego tranzystora: dostajesz 500mA kosztem wpychania w bazę aż 50mA i Uce wciąż na poziomie 0.5V - to chyba jest granica oporu tego elementu. Tylko skąd tu wziąć te wejściowe 50mA mając procesor jako driver, prawda? W warunkach nasycenia nie mówimy już o wzmocnieniu, bo przestaje obowiązywać zależność Ic=Ib*beta. Tu liczy się tylko małe Ucesat nawet kosztem absurdalnie dużego prądu wejściowego. Dlatego w tym wierszu nie ma podanego wzmocnienia 10, bo ta liczba tranci sens. No a kolejny wiersz pokazuje jak zachowuje się dioda B-E w warunkach ekstremalnych: potrzebuje aż 1V by popłynął w niej taki prąd, który umożliwi przepływ 0.5A podczas pracy jeszcze w obszarze "analogowym" (Uce=2V). Jesli oczekujesz poprawnej pracy jako klucz będziesz musiał jeszcze głębiej popchnąć tranzystor w nasycenie a więc i napięcie Ube będzie jeszcze wyższe (np. 1.3V?). tak, tyle odłoży się na diodzie BE, sporo na oporniku szeregowym ale pamiętaj, że i napięcie portu wyjściowego spada ze wzrostem wyciąganego z niego prądu. I to sporo. Być może z pewnych pinów procesora w ogóle nie jesteś w stanie wyssać 50mA, bo nawet jego prąd zwarciowy (stan wysoki zwarty do GND) daje mniejszy prąd . Wtedy potrzebujesz stopnia pośredniego, np.mały pnp (30V/100mA) powinien załatwić sprawę sterowania bazą czegoś dużego. Albo tranzystor Darlingtona (TIP120, BDW93, BDX53 itd itp). Albo MOSFET przygotowany do sterowania niskimi napięciami...
  18. 3 punkty
    No niestety, jest jak piszesz. Nie masz gwarancji konkretnego wzmocnienia i na jednym tranzystorze bardzo trudno zrobić stopnień o wzmocnieniu np. zawsze 50. Musiałbyś w każdej zbudowanej sztuce układu mierzyć parametry i dobierać okoliczne oporniki/kondensatory do uzyskania pożądanego wzmocnienia. Tego typu układy liczy się na najgorszy przypadek. Jeżeli chcesz w kolektorze dostać na pewno 200mA (bo tyle wymagają np. jakieśtam diody LED) to przyjmujesz najmniejsze wzmocnienie wymienione przez producenta dla danego typu (i grupy) tranzystora np. 65 i wychodzi, że musisz wepchnąć w bazę conajmniej 3mA. Sterowanie prądowe oznacza ni mniej ni więcej tylko to co już sam napisałeś: Ic = Ib * beta. Działamy na prądach. A smutną sprawą jest to, że tranzystor bipolarny "od strony wejścia" nie wygląda jak opornik tylko jak dioda. Jej charakterystykę prądowo-napięciową znajdziesz bez problemu. Po 5 sekundach patrzenia na wykres zrozumiesz, że aby w ogóle płynął w diodzie jakiś prąd, musisz podjechać z napięciem powyżej 0.5-0.6V. I niestety nie jest tak jak w oporniku, że jak już prąd zacznie płynąć to dwa razy większe napięcie powoduje przepływ dwa razy większego prądu. Dlatego, jeśli będziesz sterował tranzystor sygnałem napięciowym np. sinusoidalnym to prąd w tak sterowanej diodzie (jej anodą jest baza a katodą emiter w npn) sinusoidę będzie przypominał tylko we wspomnieniach. A właśnie tym prądem "żywi się" tranzystor i taki wygnał wyjściowy (liniowo wzmocniony) dostaniesz w kolektorze, np.na oporniku obciążenia. Słabe, prawda? Dlatego tą metodą (czyli prościutki stopień na jednym tranzystorze i kilku opornikach/kondensatorach) nie przetworzysz ani dużych sygnałów ani z dużym wzmocnieniem. To są stopnie tzw. małosygnałowe, pracujące na bardzo malutkim wycinku ch-ki diody wejściowej - tak małym, że od biedy można uznać że nic tam się nie zagina i że zależność Ib od Ub jest na tym kawałku liniowa. Oczywiście są metody linearyzacji takich stopni by mogły przetwarzać większe sygnały, ale zawsze jest to okupione spadkiem wzmocnienia. I jeszcze jedno: wzmocnienie zależy też niestety od wielkości prądu kolektora i dlatego w danych katalogowych podawane jest dla pewnej jego wartości. Im prąd wyższy tym gorzej. Moja wskazówka: jeśli jesteś zainteresowany tematem to poszukaj książki o podstawowych, analogowych układach tranzystorowych (wzmacniacze małosygnałowe, wzmacniacze mocy, wzmacniacze RF, generatory itp), bo w miarę możliwości mogę odpowiadać na pytania szczegółowe, ale na "rozjaśnianie" szerszego tamatu raczej nie ma tutaj miejsca.
  19. 3 punkty
    I tak i nie. Oba elementy są "analogowe" w swojej istocie więc problemy będą podobne. Czujnik TMP36 jest zespołem wielu tranzystorów a źródłem sygnału jest w nim tzw. bandgap czyli sprytny układ bazujący na fizyce złącza półprzewodnikowego. To z definicji jest liniowe więc dalej to już jakiś wzmacniacz by odseparować "jądro" pomiarowe od linii wyjściowej i tyle. Układ wyjściowy TMP ma niską impedancję wyjściową więc napięcie niewiele zależy od obciążenia czyli od pobieranego prądu - możesz podłączyć do tego np. magnetoelektryczny ustrój pomiarowy i mieć oldskulowy termometr wychyłowy. To oczywiście słaby przykład, ale generalnie ważne jest, by źródła sygnałów były w miarę niezależne od obciążeń. Niestety wzmacniacze są czułe na obciążenia pojemnościowe więc nie można do wyjścia TMP36 podłączyć bezpośrednio kondensatora by tłumić zakłócenia. Musi być po drodze opornik separujący, dopiero te dwa elementy tworzą filtr low-pass. Do tego, mimo dobrego PSRR (czyli współczynnika tłumienia zmian zasilania) czyli tego, że napięcie wyjściowe niewiele zależy od poziomu zasilania czujnika dla prądu stałego, zwykle bardzo on słabnie ze wzrostem częstotlwości. To z kolei oznacza, że szybkie zakłócenia na linii zasilania będa przenikać do wyjścia. I po to dajesz kondensator przy pinach Vcc/GND czujnika - żeby napięcie zasilania chipu nie mogło się szybko zmieniać. Z tych powodów TMP36 nie można traktować jak prostego elementu. W środku jest skomplikowany i trzeba się z nim trochę pocackać. Za to dostajesz doskonałą liniowość, łatwy do wykorzystania sygnał napięciowy i niewielkie błędy początkowe. W zasadzie można bez żadnej kalibracji robić na tym seryjnie termometry o dokładności 2-3 stopni w środku zakresu a to zupełnie wystarcza do większości popularnych zastosowań. Termistory to tanie elementy pasywne. Zmieniają jedynie swoja rezystancję z temperaturą i to wg skomplikowanego wzoru. Dalej to już Twoja inwencja jako projektanta. Robiąc dzielnik tworzysz źródło napięcia, którego sygnał wyjściowy zależy od temperatury (cieszymy się) ale także od a) napięcia zasilania (to bardzo źle) i b) tego co podłączysz dalej (to raczej też nie za dobrze). Takiego źródła nie możesz podłączyć nawet do długiego kabla, bo będzie jeszcze gorzej niż z TMP36. Nie dość, że do dzielnika dotrze inne napięcie zasilania niż wysłałeś (co TMP36 skutecznie ignoruje), to jeszcze bardzo słabo steruje ono obciążeniami. Musisz podłączyć coś co nie pobiera w ogóle prądu - wejście wzmacniacza lub wysokoomowe wejście przetwornika A/C. Za to możesz do takiego dzielnika od razu zapiąć kondensator robiąc filtr dolnoprzepustowy. TMP36 itp układy są wygodne, gdy musisz zadbać (i pomierzyć) np. profil termiczny swojego urządzenia. Mając np. dużą płytę z przetwornicami, stabilizatorami, procesorami, pamięciami itd itp rozmieszczasz w krytycznych punktach szereg takich czujników, podłączasz je do przetwornika A/C (i tak go masz bo to skomplikowany układ, prawda?) i możesz nadzorować i logować temperatury pracy poszczególnych bloków w różnych warunkach eksploatacji i testów. Robisz takich płyt 100 i w każdej wyniki są podobne z dokładnością do 2 stopni. To wygodne, bo skalowanie pomiarów temperatury w odróżnieniu od np. pomiarów napięć czy prądów jest megadrogie i upierdliwe. No, ale płacisz za to w cenie czujnika. Z kolei termistor daje mnóstwo możliwości aplikacyjnych. Może służyć jako element kompensacji termicznej w analogowych układach pomiarowych, w generatorach, wzmacniaczach itp, może być prostym czujnikiem poziomu alarmowego (komparator napięcia, pamiętasz?). Samodzielnie niewiele potrafi - tak jak każdy prosty element, ale z uwagi na cenę i uniwersalność jest wciąż stosowany. Decyzje zależą od wielu czynników: od pożadanych dokłądności, powtarzalności, kosztów produkcji, testowania i kalibracji, serwisu, zastosowania urządzenia itd itp. Wniosek: Moim zdaniem nie ma wyraźnego zwycięzcy. Każdy element trzeba umieć wykorzystać i zastosować, ten który akurat optymalnie pasuje
  20. 2 punkty
    Tak, prądy wejściowe tego typu elementów są znikomo małe. Co więcej nie wiesz w którą stronę ten prąd płynie i producent wcale tego nie gwarantuje. Jeśli chcesz się tym przejmować, to musisz tak projektować układ by był nieczuły na tego typu upływności. Dopóki jednak poruszasz się wokół oporników w granicach do kilkuset kΩ to raczej nA nie są problemem. Na schemacie pokazanym na lewym rysunku strzałka pokazuje jakiś prąd, ale on nie płynie do/z wejścia scalaka tylko przez oporniki z zasilania 5V do masy. Nie wiem kto policzył ten prąd, ale z prostego obliczenia 5V/(82k+82k) wychodzi jedynie 30µA więc.. 1000 razy mniej. Co chcesz na tym 311 zrobić?
  21. 2 punkty
    gorzki, to tak nie działa. Jeżeli z powodu braku wiedzy zrobiłeś prostą taczkę i pytasz jak ją zmodyfikować by mieć na podwórku samochód to sam rozumiesz, że żadnych konkretów nie dostaniesz. Nawet gdyby ktoś zaczął mówić o przekładniach różnicowych, skrzyni biegów, zawieszeniu, półosiach, karoserii samonośnej czy silniku 4-suwowym to i tak wiele z tego nie wyniesiesz gdy umiesz jedynie połączyć koło ze skrzynką na pomidory. Jedyna rada to wziąć się w garść, zacząć lekcje programowania od początku, robić przykłady od najprostszych do coraz trudniejszych aż nabędziesz wprawy i zrozumiesz jak korzystać z procesora tak, by wszystkie jednoczesne potrzeby Towjego projektu były zaspokojone. Nie twierdzę, że to rocket science, ale kilka dni z Arduino to nie jest wystarczająca baza do robienia takich rzeczy. Nie na darmo proste projekty opierają się na sekwencyjnym wykonywaniu jednego ciągu instrukcji - to jest łatwe. Równoległość wymaga zmiany podejścia i zupełnej zmiany myślenia o strukturze programu. Tak, ludzie korzystają z millis(() i jest to jedna z możliwości. Nie jest to wytrych do wszystkiego, ale też nie jedyna opcja. Było tu wiele wątków o tym samym. Jeśli bardzo się napaliłeś i od razu chcesz skoczyć do basenu, przeszukaj Forum pod tym kątem (znaczy wielowątkowości, równoległości i millis a nie skakania do wody rzecz jasna). Nie ma sensu każdemu opisywać tego samego. Na start: I jeszcze pamiętny wątek SOYER'a, w którym Elvis z dobrym skutkiem (i podobną cierpliwością) tłumaczył działania równoległe: Poczytaj, przemyśl, przygotuj się teoretycznie, popróbuj coś samemu i dopiero wtedy w razie problemów, pytaj.
  22. 2 punkty
    zapisz taki kod w pliku z rozszerzeniem .py na przykład app.py i uruchom go poleceniem: python3 app.py
  23. 2 punkty
    Dostępna jest już kolejna wersja układu wyposażona w pełni funkcjonalny interfejs UART. Poza tym dodane zostały nowe rozkazy dla ALU oraz sam kod procesora został zaktualizowany. Na moim blogu można dowiedzieć się więcej na temat budowy układu oraz pobrać projekt.
  24. 2 punkty
    Bardzo fajny poradnik Znalazłem jednak jedną rzecz, mianowicie nie usuwasz nigdzie QSerialPort. Najprościej zamienić ten fragment kodu: //this->device = new QSerialPort; this->device = new QSerialPort(this); //Ustawiamy rodzica obiektu Dzięki temu w momencie usunięcia obiektu klasy MainWindow zostanie usunięty obiekt device. pozdrawiam i czekam na kolejne części
  25. 2 punkty
    Dzięki @FlyingDutch, sam też ostatnio szukałem trochę informacji na temat przejścia z Spartana3 na Spartana6. Podrzucam tutaj kilka linków związanych z tym tematem dla osób które, tak jak ja napotkały pewne problemy z przejściem na układ Spartan6. https://www.xilinx.com/support/answers/33210.html https://www.xilinx.com/support/documentation/sw_manuals/xilinx14_5/spartan6_hdl.pdf https://forums.xilinx.com/t5/Welcome-Join/Asynchronous-Set-or-Reset-for-Registers-of-Spartan-6-FPGA/td-p/478370 https://forums.xilinx.com/t5/Spartan-Family-FPGAs-Archived/migration-spartan-6-from-spartan-3/td-p/543651
  26. 2 punkty
    Ta technologia to w zasadzie najlepsze co jest dostępne na rynku komercyjnym. Jak w każdej innej działce i tutaj są wykonania wyczynowe, przeznaczone np. do mega-szybkiego ładowania (15 min), do ogromnych prądów rozładowania, do skrajnych zakresów temperatur itp itd. To akurat ogniwo nie jest jakimś wielkim wyczynem, ma bardzo spokojne prądy (2C/3C) i zakresy temperatury więc to taka średnia półka. Stąd pewnie całkiem rozsądna cena. Oczywiście średnia półka LiFePO4, bo w porównaniu ze średniakami NiMH, Pb czy nawet LiPo, to to wypada bardzo dobrze. Rozładowanie gwarantowane przez producenta w -20°C nie trafia się często a i ładowanie 2C (to przecież 30A!) to także nie jest codzienność. Ładowarki oczywiście do tego są, tak jak do każdego spotykanego typu akumulatora. Może nie te po 20zł, ale i tak musisz kupić coś większego żeby nie czekać 2 dni na naładowanie. Pytanie, co planujesz zrobić? Czy chcesz tego kloca wbudować do urządzenia razem z całym systemem ładowania i nadzoru, czy po prostu potrzebujesz dużej baterii która i tak będziesz wymieniać lub wyjmować do ładowania. Moim zdaniem największą wadą takiego (pojedynczego) ogniwa jest małe napięcie. Jeśli przewidujesz zasilanie swojej elektroniki tylko z jednego aku, to będziesz miał do dyspozycji zakres od 3.65 pod koniec ładowania do ok. 2.0V pod koniec rozładowania. To mało i w zasadzie żeby mieć chociaż stałe 3.3V to konieczna jest przetwornica up/down. Niby nic wielkiego, ale zawsze to jakiś koszt. A jeśli planujesz jakieś czujniki czy układy analogowe na 5 czy 12V no to robi się nieciekawie. Nie wykluczam tu niczego, ale potrzebna jest jakaś analiza architektury urządzenia i jego systemu zasilania oraz kosztów. Ważne jest jak to urządzenie będzie użytkowane, ile będzie ciągnęło prądu między okresami pracy, jakie przewidujesz warunki klimatyczne itd.. Oczywiście obowiązkowo układy pomiaru napięcia i całkowitego odcinania ogniwa przy spadku poniżej katalogowych 2.0-2.5V. W zasadzie poniżej tych 2.5V to pojemności zostaje pewnie z 5%, więc dopóki nie lecisz na Księżyc to chyba nie ma o co walczyć. Jedno ogniwo jest fajne, bo ładowanie nie wymaga balansowania. Z drugiej strony małe napięcie to konieczność podwyższania a to zawsze kosztuje sprawność - szczególnie przy wyższych prądach. Napisz coś więcej. Osobiście używam m.in. ładowarki Q6 Plus: https://sklep.modelarnia.pl/p16585,ladowarka-smart-charger-q6-plus-300w-16a-kolorowy-lcd-yuki-700317.html ale jest ich cała rodzina : https://www.sonarsklep.pl/szukaj.html/szukaj=isdt/opis=nie/nrkat=tak/kodprod=tak/fraza=tak i jest to naprawdę fajny sprzęt. Wymaga sporego zasilacza, ale jeśli będziesz ładować jedno ogniwo, to nawet prąd 15A daje zaledwie 60W mocy wejściowej na 12V. A one potrafią 300 i 500W
  27. 2 punkty
    Piny D3 i D4 (czyli GPIO0 i GPIO2) mają specjalne znaczenie w czasie startu i nie wolno wtedy podawać tam zera. Analogicznie pin D8 (czyli GPIO15) musi mieć w czasie startu podane zero. Normalnie załatwiają to rezystory na płytce, ale Ty wymuszasz tam inny stan podłączając tam anemometr. Zmień piny na jakieś inne, tych trzech możesz użyć jako wyjścia, chcąc użyć je w charakterze wejść musiałbyś mieć jakiś dodatkowy układ podłączający je dopiero po uruchomieniu programu. Tutaj masz to fajnie opisane.
  28. 2 punkty
    Ojć, dużo tego. Żeby już nie przedłużać odniosę się tylko merytorycznie do ostatniego wpisu, bo sam trochę odpłynąłem OT a i Koledzy też dużo popisali. Przede wszystkim wszystkie trzy schematy z ostatnego posta (i te od atMegaTona i ten ttmdear) mają błędy i to poważne. Chłopaki, no co jest. Przecież to prosta rzecz a sadzicie takie babole jak stąd do jutra. Mogę je powytykać palcem, ale chyba zaraz sami zrozumiecie co jest źle. Zatem raz jeszcze do roboty. Odróżniamy wyjścia od wejść. Wyjścia mogą sobie wisieć - jeśli nie obchodzi nas co tam na którymś scalak wystawił, to zostawiamy je wolne. Wejścia wisieć nie mogą w żadnym razie. W 74HC595 mamy 16 pinów. Dwa od razu wykluczamy z jakichkolwiek rozważań, bo to zasilania: Vcc idzie bezpośrednio do plusa, GND do masy. Dalej mamy 8 głównych wyjść Q0..Q7 i do nich możemy a nawet powinniśmy podłączyć diodki LED bo to najciekawsze stany w przypadku tego scalaka. Rejestr jest 8-bitowy, więc 8 diodek by pasowało mieć. Absolutnie nie zwieramy żadnych wyjść do masy ani do zasilania - to groźne dla życia scalaka. Mamy jeszcze dodatkowe Q7' (to nie to samo co Q7) pomagające łączyć te kostki w dłuższe łańcuchy i tam też możemy zaczepić diodkę albo zostawić je wolne - jak każde typowe wyjście. Reszta pinów to wejścia. Niektóre z nich są czułe na poziom a niektóre na zbocze - to najważniejsze kryterium. Drugie istotne rozróżnienie to poziom aktywny (w przypadku tych czułych na poziom) i kierunek zbocza (to te drugie). Wejścia czułe na poziom to takie, w których ważny jest konkretny stan logiczny: niski lub wysoki, 0 lub 1. Przykładem takiego wejścia jest tutaj MR: gdy podamy tam 1 to wszystkie przerzutniki rejestru przesuwającego są zerowane. Stan ten trwa tak długo, jak długo trzymamy jedynkę na MR i jest to wejście o wysokim priorytecie. W czasie zerowania żadna inna funckja rejestru przesuwającego nie działa. Budzi sie on do życia gdy zdejmiemy MR czyli gdy zapodamy tam zero. Inne wejścia 74HC595 sterowane poziomem to DS i OE. Posługuję się nazwami z Waszych schematów, choć w kartach katalogowych innych producentów te same piny moga nazywać się inaczej: https://www.onsemi.com/pub/Collateral/MC74HC595-D.PDF Oczywiście to tylko zmiana nazewnictwa, funkcje zostają te same. DS to wejście danych rejestru przesuwającego - to tędy bity do niego "wchodzą". Pin OE to z kolei otwieranie wyjść - dopóki jest tu stan 1 to wszystkie wyjścia są wyłączone (mówimy, że są w trzecim stanie) i nie podają ani zera ani jedynki logicznej, trochę jakby sie upaliły na rozwarcie. OE w stanie niskim uaktywnia wyjścia Q0..Q7 i dopiero wtedy widzimy co w rejestrze wyjściowym siedzi. Do takich wejść możemy bezkarnie podłączać przyciski, bo nawet jeśli coś tam się w czasie zmiany stanu odbije, poda ciąg jedynek i zer to nic sięnie stanie. To jak przy włączaniu żarówki na suficie. Pukamy ręką w wyłącznik na ścianie i żyrandol świeci. Nikogo nie obchodzi, że zestyk jest trochę brudny czy odbija przez 20 milisekund. W końcu żarówka dostaje pełne napięcie i świeci i nikt tego nie zauważył. Zupełnie inaczej jest z wejściami czułymi na zbocze. Po pierwsze konkretne stany 0/1 nie są dla nich ważne. Tu liczą się zbocza czyli zmiany stanu. Jeżeli wejście reaguje np. na zbocze narastające, to tylko gdy stan zmienia się z 0 na 1 coś się zadzieje. Ani wcześniej ani później już nic się nie zmieni w stanie przerzutników w układzie. W 74HC595 mamy dwa takie wejścia: SH_CP i ST_CP. Pierwsze to zegar rejestru przesuwającego (SHift Clock Pulse). Każde narastające zbocze na tym wejściu "wciąga" aktualny stan wejścia DS na najmłodszy bit rejestru a pozostałych 7 przesuwa o 1 pozycję "w górę". Najstarszy, ten wciągnięty 8 zboczy temu "wypada" z rejestru i jest zapominany. Rejestr robi taką operację na każdym zboczu zegara SH_CP i nie ma tu ograniczeń ilościowych. Oczywistym jest więc, że w zawartość rejestru przesuwającego to co najwyżej 8 ostatnio wczytanych bitów, wszystkie wcześniejsze zginęły bezpowrotnie. Zawartości rejestru przesuwajacego nie widzimy bezpośrednio na wyjściach Q0..Q7, ale możemy przepisać aktualną zawartość tego rejestru do dodatkowego rejestru wyjściowego. Dokonuje tego narastające zbocze zegara ST_CP (STorage Clock Pulse). Dopiero po tym impulsie widać co było w rejestrze przesuwającym. Ponieważ mamy dwa osobne zegary to i funkcje rejestrów sa rozdzielone. Dzięki temu stany wyjść Q0..Q7 są stabilne w czasie, gdy rejestr przesuwający "łyka" nowe 8 bitów danych np. z szyny SPI. I dlatego 74HC595 jest tak masowo używany jako prosty i tani rejestr wyjściowy lub inaczej ekspander portów. Gdyby nie było rejestru wyjściowego pamiętającego ostatnie 8 bitów, to operacja przesuwania robiłaby maskrę na wyjściach.. Przykładem takiego uproszczonego rejestru jest starsza kostka 74HC164: https://www.onsemi.com/pub/Collateral/MC74HC164A-D.PDF Tutaj po każdym zegarze przesuwania widzimy jak stany "płyną" w stronę Q7 i w końcu "wypadają" z rejestru a na ich miejsce wchodzą nowe bity z wejścia danych. No dobra, to teraz te nieszczęsne przyciski. Aby sterować wejściem czułym na poziom wystarczy zapewnić stan niski i wysoki. Od wejścia puszczamy zatem opornik 10k do masy (to zrobi stan niski) a od tego samego wejścia do +5V dajemy przycisk. Teraz jego wciśnięcie (zwarcie) zrobi stan wysoki. To była ta łatwiejsza część. Wejścia czułe na zbocze wypadałoby sterować czystym sygnałem tj takim, który na jednym wciśnięciu przycisku daje jedno zbocze. W przeciwnym wypadku np. rejestr przesuwający "wciagnie" 2, 5 lub 12 bitów za jednym wciśnięciem i będzie wyglądało, że się popsuł. W przypadku wejścia ST_CP to już takie ważne nie jest, bo czy rejestr wyjściowy przeładujemy raz czy pięć razy to nie ma znaczenia (w tej zabawie). No, ale sztuka cierpi. Dlatego układ dopasowujący musi być tutaj bardziej skomplikowany. Rysujemy: od wejścia kondensator 1uF do masy, od wejścia opornik 10k do masy, od wejścia opornik 1k do przycisku, drugi koniec przycisku do +5V. I tak samo 2 razy, bo mamy dwa wejścia zegarów. No niech mi się teraz któryś pomyli.. Rysować nowy schemat i wrzucać tu do weryfikacji. Czekam
  29. 2 punkty
    O dht22 krążą różne (niestety potwierdzone) opowieści na temat zawieszania się. Co do temperatury lepszy będzie ds18b20 (chyba że dokładność 1/16 stopnia to za mało). A nodemcu dlatego, że ma wbudowanego watchdoga (którego nie wyłączysz jeśli się specjalnie nie postarasz), nie potrzebuje pośredników do łączenia z siecią, programuje się toto normalnie w ArduinoIDE, o mocniejszym procku i większej ilości pamięci to już nie wspomnę. Problem mógłby być z małą ilością pinów - ale to co jest powinno wystarczyć.
  30. 2 punkty
    Przede wszystkim: zastosuj jakąś płytkę typu NodeMCU albo coś na ESP32 zamiast tandemu Arduino-ESP01. Przynajmniej jak się zawiesi to po chwili zrobi reset, a przy okazji masz jedno ustrojstwo a nie dwa. Do tego coś bardziej pewnego niż DHT22. No i zastanowiłbym się jednak nad termostatem mechanicznym jako ostatnią deską ratunku...
  31. 2 punkty
    Jako zawodowy programista Qt bardzo ucieszyłem się, że na tym portalu pojawił się taki poradnik. Uważam, że Qt ma wielki potencjał i fajnie, że teraz społeczność Forbota będzie mogła się o tym przekonać. Chciałbym dodać, że Qt ma takze bindingi do Pythona, także, jeżeli ktoś niekoniecznie lubuje się w C++ to zawsze mozę skorzystać z PyQt. Planujesz poruszyć temat QML i QtQuick? Zakładając, ze przy pracy po WiFi łączymy się bezpośrednio z urządzeniem (aplikacja <-> urządzenie) i chcemy przerobić to na (aplikacja <-> serwer <-> urządzenie) to tak naprawdę wystarczy napisać prostą aplikację serwerową w Qt (wykorzystując np. QTcpServer). Idea jest prosta, serwer ma tylko pośredniczyć pomiędzy urządzeniem a aplikacją. Urządzenie będzie wysyłało dane na adres serwera a serwer tylko przekaże je do aplikacji (która również połączy się z serwerem). Nie mam gotowego snippetu kodu, ale w dokumentacji Qt jest kilka przykładów odnośnie wykorzystania QTcpServer i QTcpSocket.
  32. 2 punkty
    Z mojej strony wszystko jest gotowe, reszta zależy już od @Treker.
  33. 2 punkty
    Dokładnie takie proste sterowanie pojawi się w kolejnych częściach, najpierw za pomocą aplikacji na desktopie i portu szeregowego a w kolejnej części za pomocą aplikacji w telefonie i BT.
  34. 2 punkty
    Dlatego napisałem, że pomysł mi się podoba. Jest wart rozwijania i ciekawe rozszerzenia fukcjonalności są tu kluczowe. Na obecnym etapie to gadżet obok którego - jak zaznaczyłeś, przechodzi się w tłumie do następnego wystawcy po jednorazowej próbie. Dziś coraz więcej takich "jednorazówek", więc zachwycać się nad realizacją nie ma sensu. Program do tego co widzimy trudny nie jest, ale to pewnie szczyt możliwości tego co można zrobić w kilka godzin w hałasie i pośpiechu. Bo rozumiem, że taka jest idea tego wydarzenia. Gra powinna być sprawiedliwa i wynagradzać za wysiłki - ta z uwagi na trywialne zasady taka obecnie chyba jest, ale to sporo za mało by ktoś zechciał się nad nią pochylić. Powinna też być re/grywalna i ciekawa, mieć jakieś kolejne "dna" i tajemnice, które można odkryć tylko wchodząc na coraz wyższe poziomy, mieć miejsce na wypracowanie własnych (choćby i przewidzianych przez twórców, ale nieoczywistych na początku) taktyk i strategii dzięki którym wciąż masz chęć do "jeszcze jednego razu" i w końcu zauważasz, że za oknem świta. A to kosztuje o wiele więcej wysiłku, pisania, testowania, słuchania ludzi i ciagłego poprawiania niż napisanie szkieletu.Tutaj, gdzie jedyną umiejętnościa jak na razie jest szybkie naciskanie przycisku, jest tylko.. potencjał. Rozumiem, że Arduino, że takie czasy, że szybkie projekty, godzina, działa i robimy następny bo trzeba zrobić filmik, wrzucić kod do sieci itd.. Ale nie muszę się tym zachwycać. Odnosząc to do innych produkcji zobaczyliśmy wstępną wersję demo pomagającą podjąć decyzję "idziemy w to czy nie". Do dobrej gry jeszcze baaardzo daleko. A przecież można pójść dalej i pokusić się o zrobienie czegoś, na brak czego cierpi mnóstwo nawet wielkich gier: nieoszukującego przeciwnika jeżdżącego wg tych samych zasad co ja i mimo wszystko wygrywającego (lub przynajmniej umiejącego nawiązać równorzędną walkę) z człowiekiem. A może obserwującego, uczącego się i wyciągającego wnioski z moich błędów? Przecież każdy z nas to robi na co dzień, to Arduino nie da rady?
  35. 2 punkty
    Witajcie, w artykule zajmiemy się klasyfikacją tekstu z wykorzystaniem sieci neuronowej. W kontekście robotyki, klasyfikacji możemy użyć w sterowaniu robotem za pomocą języka naturalnego. Przykład można zobaczyć w wątku AgeBot. Przetwarzanie języka naturalnego (NLP) jest obszernym tematem, dlatego nie będziemy wdawać się zbytnio w szczegóły, ale przedstawię ogólną koncepcję i narzędzia przydatne do przetwarzania tekstu - da Wam punkt startowy w tej ciekawej dziedzinie Aby utrzymać artykuł we w miarę któtkiej formie zawierającej samo „mięso” założę, że Python jest Wam znany. Będziemy przetwarzać zdania w języku angielskim, który jest jednym z łatwiejszych języków w NLP. Język polski jest problematyczny (chociaż do niego też są narzędzia), więcej można dowiedzieć się z tego filmu. Niniejszy artykuł objaśni bardziej proces normalizacji tekstu, da Wam informacje czego dalej szukać oraz pokaże jak klasyfikacja tekstu z grubsza działa. Konkretną implementację udostępniłem na GitHubie (link), którą możecie traktować jako bazę, aby zrobić podobne sterowanie w Waszych robotach Polecam jednak przestudiować podlinkowany przykład kodu, aby dokładniej zrozumieć, co tam się dzieje lub rozwiać wątpliwości po przeczytaniu poniższych akapitów. Zacznijmy od początku Wspomniałem o sieci neuronowej, ale co to właściwie jest i jak ona działa? Polecam ten film. Wiedza jak działa sieć neuronowa nie jest jednak niezbędna, aby korzystać z powyższego kodu Jeśli korzystacie w swoich robotach z Raspberry PI, spokojnie powinniście bez problemu wykonywać poniższe czynności oraz uruchomić przykładowy kod na tejże platformie. Zainstalujmy potrzebne zależności: pip3 install tensorflow nltk tflearn numpy Tensorflow jest biblioteką, dzięki której możemy budować modele uczenia maszynowego. Tflearn jest nakładką, która ułatwia korzystanie z Tensorflow. Z Numpy korzystać będzie Tensorflow. Nltk natomiast jest biblioteką, która zawiera szereg przydatnych funkcji, jeśli zajmujemy się NLP. Po zainstalowaniu, przygotujmy bibliotekę nltk do użytku za pomocą konsoli Pythona (po tym kroku można uruchomić skrypt z GitHuba): import nltk nltk.download(‘punkt’) Pora na mięso Jeśli mamy sterować robotem, to przyjmijmy sobie jedno zdanie na którym objaśnię kolejne etapy - niech to będzie „move forward please”. W pierwszym kroku następuje tzw. tokenizacja – podzielenie zdania na mniejsze części, które nazywamy tokenami. W przypadku przyjętego zdania, dostaniemy: [‘move’, ‘forward’, ‘please’] Używamy do tego funkcji „word_tokenize” z biblioteki „nltk”. Samo zdanie zostało podzielone na słowa, jednak wynik przy trudniejszych zdaniach będzie wyglądał nieco inaczej. Spróbujmy „robot didn’t move!”. [‘robot’, ‘did’, „n’t”, ‘moved’, ‘!’] Pamiętajmy jednak, że języki mają różne reguły, więc rozbicie zdania za pomocą „spacji” niekoniecznie będzie poprawnym sposobem W powyższym „n’t” możemy zastąpić na „not”, gdyż te dwa słowa oznaczają to samo. Jeśli tego nie zrobimy, oba będą traktowane jako dwa osobne słowa, co może zakłócić trafność klasyfikacji. Kolejnym krokiem jest stemming. Co to takiego? Jest to redukcja konkretnych słów do ich podstawowych form. Co dzięki stemmingowi osiągamy? Jedną intencję można wyrazić na kilka sposobów, używając różnych odmian danych słów, jednak te zdania nadal oznaczają jedno. Istnieje wiele algorytmów, możecie pobawić się nimi tutaj. My użyjemy algorytmu Lancaster, który jest dosyć agresywny. Przykładowo zdanie: Programmer programmed a program which programs new programs zostanie zredukowane do formy program program a program which program new program Ostatnim krokiem jest normalizacja danych w taki sposób, aby proces był powtarzalny. Tworzymy więc sobie słownik zawierający unikalne słowa, w którym umieszczamy tokeny po stemmingu posortowane wg. alfabetu. Dane treningowe dla modelu, jako że sieć neuronowa pracuje na liczbach, musimy przekształcić... na liczby . Zakładając, że nasz słownik już po tokenizacji i stemmingu wygląda następująco: [‘forward’, ‘mov’, ‘pleas’] Tworzymy pierwszy wiersz danych trenujących korzystając z przykładów zdań. W naszym przypadku jest jedno zdanie, ale słowo „please” jest właściwie opcjonalne. Bez „please” po prostu będziemy mniej mili Tworzymy nową tablicę i iterujemy po słowniku. Jeśli napotkamy w nim słowo, które występuje w zdaniu, wstawiamy do nowo utworzonej tablicy 1, w przeciwnym wypadku 0. Ilość elementów w jednym wierszu danych trenujących musi być równa ilości słów w słowniku oraz ich kolejność musi być identyczna, stąd taki zabieg. Uzyskujemy następujące dane treningowe: Dla zdania „move forward please”: [1, 1, 1] Dla zdania „move forward”: [1, 1, 0] Analogicznie postępujemy z danymi wyjściowymi, czyli naszymi klasami. Tworzymy tablicę dostępnych, unikalnych oraz posortowanych alfabetycznie klas. Przyjmijmy, że nasze zdanie będzie sklasyfikowane jako „move” oraz do przykładów dodamy zdanie „hello there” oznaczone klasą „greeting”: [‘greeting’, ‘move’] Wyjściem będzie: Dla zdania „move forward please”: [0, 1] Dla zdania „move forward”: [0, 1] (to jest ta sama klasa zdania) Dla zdania „hello there”: [1, 0] Skupmy się jednak dalej na naszym bazowym zdaniu „move forward please”. Dane trenujące, które uzyskamy w całym tym procesie, czyli: X = [[1, 1, 1], [1, 1, 0]] Y = [[0, 1], [0, 1]] używamy, aby wytrenować sieć neuronową. Po wytrenowaniu, klasyfikując konkretne zdania, proces powtarzamy – sprowadzamy zdanie do liczb i klasyfikujemy. Gdy mamy już wytrenowany model (sieć), używamy go w celu klasyfikacji nowych (lub tych z przykładów) zdań. Ostatecznie pisząc do robota „move forward please” wiemy, że autorowi chodzi o „move”, ponieważ wyjście sieci neuronowej to prawdopodobieństwo z jaką algorytm jest "pewien" danej klasy. Suma tych liczb, przez użycie funkcji aktywacyjnej "softmax" będzie równać się jeden, niezależnie od ilości klas. Zatem programujemy programujemy robota zależnie od naszych potrzeb W tym artykule to już wszystko. Polecam jeszcze raz, aby zapoznać się z kodem na GitHubie. Jeśli coś było niejasne, chętnie odpowiem na Wasze pytania. PS: Celowo pominąłem część przykładów z kodem, ponieważ zależnie od tego jakiej biblioteki użyjecie, nazwy funkcji mogą się różnić.
  36. 2 punkty
    Wszystko fajnie, opisałeś tworzenie modelu dla języka angielskiego (i ogólnie dla języków pozycyjnych). Dla języka polskiego (i ogólnie dla języków fleksyjnych) zastosowanie stemmera usunęłoby praktycznie całą warstwę znaczeniową, pozostawiając "zupę" niezwiązanych ze sobą wyrazów. O ile w prostej klasyfikacji dłuższych tekstów przy założeniu niewielkiej ilości dobrze określonych gatunków i wzięcia jako cel wyłącznie ustalenia przynależności do danego gatunku algorytm pewnie by sobie poradził - o tyle przy klasyfikacji pojedynczych zdań (gdy nie wiadomo, co jest podmiotem, a czasem nawet orzeczeniem zdania) jest to kompletnie nieprzydatne. Czyli inaczej: algorytm będzie w stanie sklasyfikować książki w bibliotece, ale nie będzie umiał zanalizować większości kilkuwyrazowych poleceń. Pomijam już fakt, że algorytmiczne stemmery dla języka polskiego nie istnieją (a przynajmniej takie, które nadają się do czegoś więcej niż wyszukiwarka w wordpressie), a ich rolę grają rozwiązania słownikowe (np. ispell i pochodne) - dla algorytmu jest to to samo, tym niemniej warto o tym wspomnieć. Aha, tak poza tym "hello there" nie jest zdaniem, ale to szczegół
  37. 2 punkty
    "Reszta kodu działa prawidłowo" tzn. pakiety są odbierane poprawnie, moduły się widzą i odsyłają sobie ACK, CRC się zgadza a parametry radiowe, adresy, pipe'y itd są wzajemnie odpowiednie, tak? No to zakładając, że rozumiesz działanie modułu to szukałbym w bibliotece. Nie wiemy jak jej używasz. Czy np. poprawnie ustawia ona bity w rejestrze masek przerwań. Bo sam pin robi się niski z trzech jasno określonych powodów (odsyłam do datasheet). Każdy z nich możesz osobno zablokować, więc ustawienie tylko bitu MASK_RX_DR zrobi zero na pinie Maliny, gdy odebrany pakiet wejdzie do FIFO. Jak rozumiem, biblioteka przerwań nie używa, a rzeczy jakie musi(sz) zrobić w jego obsłudze (by się skasowało i było gotowe na następne zdarzenie tego samego typu) są trochę inne niż normalny odczyt danych z FIFO. https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf
  38. 2 punkty
    Jeśli "bez opóźnień" oznacza, że nie chcesz za każdym razem wykonywać 20 pomiarów tj. czekać na ich zrobienie, to spróbuj tego: Stwórz tablicę/bufor na 20 wyników pomiarów Zrób miejsce na nowy wynik na początku tablicy, przesuwając jej zawartość o 1 pozycję w górę. Najstarszy wynik (ten w ostatniej komórce) tym samym ulega zapomnieniu. Zrób pomiar i wstaw go do pustego miejsca w tablicy. Policz średnią przez zsumowanie i podzielenie przez długość tablicy i użyj jej jak uważasz. Tu jest "dalsza część programu".. Zawróć do pkt. 2 Oczywiście to nic innego jak tzw.filtr moving average. Jego historię można trzymać w tzw. buforze kołowym dzięki czemu unikamy przesuwania zawartości tablicy, ale powyższy schemat jest chyba prostszy do wytłumaczenia idei.Reszta to szczegóły implementacji.Czy to jest mniej więcej to o czym myślałeś? BTW: Oczywiście przez pierwszych 20 pomiarów średnia wyjściowa będzie zaniżona, bo tablica na początku będzie wypełniona zerami i wynik będzie musiał "dociągnąć" do poprawnej wartości. Żeby przyspieszyć "rozbieg" filtra możesz np. na początku wykonać jeden pomiar "startowy" i nim wypełnić całą tablicę (np. w punkcie 1). Im dłuższy filtr zrobisz tym lepiej będzie uśredniał i wycinał szumy, ale też odpowiedź na zmiany wartości prądu będzie wolniejsza.Musisz wybrać jakiś kompromis. Jeśli walczysz z konkretnym zakłóceniem (np. tętnienia sieci 50Hz) to musisz staranne dobrać długość filtra i częstość nowych pomiarów tak, by zapełnienie całej tablicy trwało dokładnie tyle ile okres zakłóceń. Wtedy będziesz je miał tłumione najlepiej. Przykładowo dla sieci 50Hz (okres 20ms) i tablicy o długości 20 musiałbyś kolejne pomiary robić co 1ms. Jeżeli szkoda Ci lub brakuje pamięci RAM na długą tablicę, możesz użyć filtra np. IIR pierwszego rzędu, gdzie przechowujesz tylko jedną liczbę, ale ten z kolei wymaga użycia nieco bardziej przemyślanej arytmetyki żeby głupio nie wpaść.
  39. 2 punkty
    Odpowiednie. To jedyna poprawna odpowiedź na taki problem. Napisz coś więcej, np. jakie prądy mają przewodzić, jakie prądy przeładowania przewidujesz, częstotliwość pracy itp. A może to do nauki sterowania takimi tranzystorami i będziesz do tego podłączał wiele różnych rzeczy w ramach nauki?
  40. 2 punkty
    Nie będzie. Do ładowania tego typu ogniw używamy ładowarek, czyli źródeł rozumiejących do czego są i co robią, a nie głupich zasilaczy, w dodatku z za małym napięciem wyjściowym. Zasilacz nie rozumie tego co robi więc skąd wiesz jaki prąd z siebie wypuści gdy podłączysz rozładowane akumulatory? Ma napisane 12V/1A to znaczy, że bezpiecznie możesz z niego pobrać max. 1A i wciąż utrzyma 12V. A jeśli akumulatory ściągną go do 9V to ile popłynie? 2A? 5A? A może się spali po 5 minutach, bo nikt nie przewidział takiego stanu jego pracy? Musisz mieć ładowarkę z kontrolowanym prądem i napięciem, przykro mi, takie są zasady bezpiecznego użytkowania sprzętu. W jakim sensie? Będziesz woził 3 klocki 18650 żeby korzystać z połowy ich pojemności? To od razu wstaw żelowy 12V/5Ah. Żadnych BMSów, ładowarka pewnie z 10zł na aukcji. Taki, by prądowo wystarczył. Nie wiemy czy robot będzie pobierał 10A czy 0.5A. A odłączanie podczas ładowania? To zależy od budżetu mocy ładowarki i poboru prądu przez robota. Pomyśl przez 10 sekund nad rozpływem prądów i sam sobie odpowiedz.
  41. 2 punkty
    Czujniki dotyku to 4 przyciski pozyskane z myszy komputerowych. Rozmieszczone w 4 rogach blachy maskujacej (z pryklejona guma). Blacha przymocowana luzno dwoma niedokreconymi nakretkami, luz na srubach = skokowi przelacznikow z myszy. Przelaczniiki podlaczone pod LEDy czerwono-zielone. Nacisniecie dowolnego przycisku lub kilku, powoduje (przez tranzystor) uruchomienie przekaznika, ktory wtraca rezystor w obwod silnika i ogranicza jego prad. Drugi palec chwytaka jest identyczny. Schwycenie przedmiotu (nacisniecie przyciskow w obu palcach) powoduje zadzialanie 2 przekaznikow i wtracenie 2 rezystorow w obwod silnika, co powoduje jego zatrzymanie przy lekkim oporze.
  42. 2 punkty
    @gdn porównujesz baterię 6f22 (czyli sześć ogniw 1.5V połączonych szeregowo) z pojedynczym ogniwem AA... trochę dziwne to porównanie. Jeśli już chcesz porównywać, to połącz szeregowo sześć ogniw AA. Zobaczymy co Ci wyjdzie.
  43. 2 punkty
    Łączymy się z Tobą w bólu... ale może gdybyś napisał na czym owo niechcenie skompilowania polega (tzn. włączył wyświetlanie wszystkich błędów kompilatora, następnie skopiował i wstawił na forum w tagach "code" najlepiej) może ktoś coś by pomógł...
  44. 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
  45. 2 punkty
    Niczego nie spalisz, choć rzeczywiście wybrałeś niezbyt optymalny w tej aplikacji układ pracy tranzystora. Próbujesz z robić klucz na plusie zasilania a narysowałeś wtórnik emiterowy. Ta konfiguracja ma tę cechę, że daje ogromne wzmocnienie prądowe - czyli małym prądem bazy sterujesz spory prąd obciążenia - ale niesteyy zerowe wzmocnienie napięciowe minus offset związany z Ube. Tak więc Scynk ma rację w tym, że serwo zobaczy jedynie tyle ile wyślesz z procka minus te klasyczne 0.7V a tak naprawdę pewnie jeszcze trochę mniej. Problemy są trzy: 1. Czy wzmocnienie prądowe jednego tranzystora wystarczy do napędzania silnika serwa? Nawet taki maluch jak SG92 może spokojnie wciągnąć amper w stanie zatrzymania lub impulsowo podczas startu - z punktu widzenia silnika to to samo. O ile tranzystor przeżyje start trwający 100ms o tyle zablokowane serwo będzie wymagało stałego prądu bazy na poziomie 30-50mA i prądu kolektora 1A. A przy takim prądzie napięcie wyjściowe z portu spadnie, serwo zabaczy jeszcze mniej a cała moc wydzieli się na złączu C-E tranzystora. Słabo. 2. Czy serwo będzie poprawnie pracować przy 4V? Na pewno jego moment i prędkość spadną a tranzystor będzie się grzał - szkoda cennej energii z baterii, prawda? 3. Baterie na pewno nie lubią dużych obciążeń więc nie wystarczą do utrzymania 6V przy działającym serwie a to spowoduje spadek także na linii 5V, bo przecież stabilizator liniowy też musi mieć jakiś zapas. Moje rady: 1. Klucze na zasilaniu robi się na dwa sposoby: chałupniczo czyli z tanzystorów pnp lub PMOS i tak jak każdy porządny człowiek: z gotowych układów klasy power management switch. Jeżeli chcesz koniecznie zrobić to na piechotę, uzbrój się w dwa tranzystory (dowolnie mały npn i coś większego pnp) i zacznij rysować: Od pinu procesora opornik do bazy npn. Emiter npn do masy. Kolektor npn przez opornik do bazy pnp Emiter pnp do plusa baterii Kolektor pnp do serwa Dodatkowy opornik między bazą a emiterem pnp Kolejny między pinem procesora a masą Dla pewności pokaż schemat i możesz zabawić się w liczenie oporników. Taka konfiguracja jest konieczna, bo tylko teraz procesor nie widzi dużego zasilania na swoim pinie a klucz na linii 6V pracuje w układzie OE dając na wyjściu napięcie tylko o Ucesat mniejsze niż wejściowe. Co więcej, bazę pnp możesz teraz sterować zupełnie dowolnym prądem a pinprocesora będzie obciążony w minimalnym stopniu dzięki buforowaniu przez npn. Przemyśl ten układ i do roboty. A kwestię scalonych kluczy przeznaczonych do wząłcznaia zasilań w rozbudowanyh układach możesz zacząc od obejrzenia tego: https://www.tme.eu/Document/d3deb8bba0581e2368d110cd34ae96c2/MIC250X-DTE.pdf Taki scalak nie dość że załącza obciążenie od strony plusa (czyli stojące na masie jak serwo - to wygodne) to jeszcze raportuje problemy (zwarcie, rozłączenie) i robi to z pewną prędkością. Bo pomyśl co się stanie gdy w sewomechaniźmie jest jakiś kondensator (a jest, to pewne). Podłączając elektronikę serwa do swojej baterii podłączasz do niej rozładowaną pojemność a więc zwierasz na chwilę 6V do masy. Nikt tego nie lubi a już układy cyfrowe mają na punkcie takich szpilek fobię, więc zwykle komutacje obwodów zasilań robi się z pewną ograniczoną prędkością by nie zabijać już działających szyn zasilania i układów do nich podpiętych. W przypadku Twoich dwóch tranzystorów wypadałoby zmniejszyć slew-rate kondenstorem w bazie pnp, prawda? Acha, i może spróbuj wyjść z piaskownicy baterii. Ani to wystarczające osiągi, ani tanie. Albo zrób/kup sobie jakiś zasilacz albo zacznij używać akumulatory. Dwa litowe 18650 dają 6-8V, mają >2Ah, wydajność wiele Amperów i można je ładować prawie w nieskończoność: https://www.tme.eu/pl/details/cl-18650-29e_2s1p/akumulatory/cellevia-batteries/cl-18650-29e-2s1p/ EDIT: Poza konkursem: RESET procesora zwarłeś do masy
  46. 2 punkty
    Może gdy patrzysz na te rysunki to dla Ciebie jest oczywiste co i kiedy. Ja nie rozumiem wykresów. Może przydałyby się jakieś strzałki oznaczone A, B, C z jakąś legendą? No ale skupmy się tylko na tym co napisałeś o wzroście wyników. W czystych warunkach, gdy wejście ADC nie pobiera prądu to ani rezystor szeregowy ani kondensator równoległy nie powinny spowodować zmian wartości DC. Jeżeli tak się dzieje, to znaczy, że przez rezystor płynie jakiś prąd dając spadek napięcia. Jeżeli wyniki wzrosły to napięcie także wzrosło a to oznacza, że prąd wypływa z wejścia ADC w kierunku czujnika. Jeżeli pominiemy możliwy wpływ jakiegoś dziwnego kondensatora to wygląda mi to na włączony pullup na wejściu ADC. Zobaczmy: podciąganie ok. 50k do Vcc wraz z opornikiem 220R robią dzielnik dający ok. 20mV a to są 2 stopnie temperatury. Jakoś dziwnie pasuje... W każdym razie 20mV zmiany na 220R to prąd ok. 100uA - nawet da się zmierzyć. Poszukaj go. A jeśli chcesz badać działanie układu RC to wyłącz wszelkie filtrowania cyfrowe i wtedy obserwuj zmiany. Nie musisz bawić się w porównywanie obrazków - to nie przedszkole. Wystarczy,, że Twój program będzie liczył jakąś statystykę z np. kilkuset ostatnich pomiarów i w sposób ilościowy pokazywał wyniki (odchylenie standardowe, wariancja?). Masz wtedy liczby pozwalające konkretnie ocenić jakość rozwiązań. Próbuj z różnymi wartościami: 220R, 1k, 5k1 i tak samo: 470nF, 2u2, 10uF itd. Dla usuwania 50Hz potrzebujesz filtra conajmniej 1k/10u, ale 1k da już zmianę o 10 stopni więc kluczowe jest znalezienie źródła tych dziwnych 100uA.
  47. 2 punkty
    możesz przerzucić komunikację z bazą na esp, ale to wymagałoby napisania na to coś oddzielnego programu (connector działa bardzo ładnie na esp). ogólnie lepiej zastosować do tego esp32 - będzie szybciej i taniej, niż zabawa z arduino i esp01.
  48. 2 punkty
    Podobno działa od 1k do 100k ale skrajnych wartości bym nie ryzykował Daj 4.7k albo coś podobnego.
  49. 2 punkty
    Do projektowania - zależy co projektujesz. Do czego innego użyjesz OpenSCAD-a, do czego innego Blendera. Do cięcia Cura lub Slic3r PE (nie zwykły Slic3r).
  50. 2 punkty
    Chciałbym zaprezentować konstrukcję malutkiego robota o nazwie Quatro. Budowa przebiegała etapami i trwała łącznie ok. 6 miesięcy. Pierwszym etapem było zbudowanie robota klasy Nanosumo. Prace w tym kierunku zakończyły się sukcesem w niespodziewanie szybkim czasie, dlatego powstał pomysł rozbudowy robota. Z racji, że robot od spodu posiada 3 optyczne czujniki odbiciowe, postanowiłem napisać program do linefollower’a. Od tej pory robot spełniał już 2 zadania. Widząc ogromny potencjał, który posiada malutka platforma, postanowiłem wykorzystać ją w jeszcze jeden sposób. Nad ogniwem zasilającym umieściłem transceiver i zbudowałem nadajnik. Za jego pomocą, dzięki wykorzystaniu potencjometrów oraz przycisków, można było zdalnie sterować robotem na kilka różnych sposobów. Miesiąc później Quatro był już sterowany z klawiatury telefonu z wybieraniem tonowym DTMF i posiadał kolejny moduł nad transceiver’em. Jego zadanie było stricte pokazowe i miało na celu przypominać pojazd uprzywilejowany. W maju br. roku do robota wprowadziłem komunikację dwukierunkową, a nadajnik radiowy został wyposażony w graficzny wyświetlacz LCD. Następnie wymieniłem silniki i dalmierze oraz płytkę PCB, na której znajduje się ogniwo zasilające. Kolejną funkcją jest sterowanie robotem za pomocą bezprzewodowej myszki optycznej. Reasumując robot posiada następujące funkcje: Nanosumo Linefollower Zdalnie sterowany za pomocą nadajnika radiowego Zdalnie sterowany z wykorzystaniem telefonu komórkowego Zdalnie sterowany przez zmodyfikowaną komputerową mysz optyczną Robot jak również pozostałe elementy są przystosowane do rozbudowy i tworzą zestaw dydaktyczny. Nanosumo Robot tej klasy musi spełniać kilka zasad. Jego wymiary nie mogą przekraczać 25mm*25mm*25mm. Quatro mieści się oczywiście w tych granicach, jednak bez PCB z modułem radiowym, który jest mu zupełnie niepotrzebny podczas walki na ringu, a jego obecność mogłaby stwarzać pewne kontrowersje. Waga robota nie powinna przekraczać 25g. Ten warunek także jest spełniony. Pozostałe zasady są takie same jak w większych klasach sumo i nie widzę potrzeby ich tu wymieniać. Orientację na ringu robotowi zapewniają trzy optyczne dalmierze. Ich elementem wykonawczym są HSDL-9100 współpracujące z układami APDS-9700. Oba te komponenty zawdzięczam firmie WObit i chcę je polecić wszystkim szukającym miniaturowego dalmierza o zasięgu nawet do 20cm . Elementy te znajdują się na PCB pod ogniwem li-ion. Od spodu umieszczone są trzy optyczne odbiciowe czujniki linii. Dwa z przodu i jeden z tyłu. Algorytm jest standardowy, tu nie wymyśliłem nic specjalnego. Linefollower Do wykrywania linii robocik wykorzystuje dwa przednie czujniki. Ze względów konstrukcyjnych robot jeździ po czarnym podłożu wzdłuż białej linii. Jest to spowodowane sposobem wykonania układu przerwań, który jest przystosowany do walk na dohyo. Oczywiście można nie wykorzystywać przerwań , jednak spowolni to przejazd po linii. Nadajnik Zdjęcie przedstawia obecną wersję nadajnika. Zielonym kolorem zaznaczone są guziki, za pomocą których można sterować robotem oraz po wybraniu odpowiedniej kombinacji, jego funkcjami. Czerwony kolor wskazuje gałki potencjometrów suwakowych. Lewy potencjometr służy do proporcjonalnego sterowania lewym kołem, prawy potencjometr analogicznie. W prawym, dolnym rogu, żółtym kolorem zaznaczony jest mikrofon, który odbiera sygnał DTMF. Diody LED zaznaczone jasnoniebieską obwódkami pokazują kierunek obrotu kół. Srebrna gałka potencjometru, na środku, służy do sterowania prędkością robota podczas używania guzików. Wartość jaką wybraliśmy za jej pomocą, można kontrolować na wyświetlaczu. Jest zaznaczona kolorem zielonym. Kolor czerwony i fioletowy pokazują odpowiednio stany czujników linii oraz dalmierza. Kolorem żółtym zaznaczone jest dwadzieścia dziewięć strzałek. Są to wskaźniki funkcji, o której wcześniej nie wspomniałem. Mianowicie robot może wykonywać cyklicznie wcześniej zaprogramowane ruchy. Ich kierunek wskazują właśnie te strzałki. Wykonywany aktualnie ruch jest negowany na wyświetlaczu. Mysz komputerowa Nie będę umieszczał jej zdjęcia, gdyż niczym się ona nie różni od zwykłej myszy komputerowej na USB. Modyfikacje polegały jedynie na usunięciu jednego z układów scalonych, umieszczeniu wewnątrz transceiver’a, akumulatora i oczywiście mikrokontrolera jakim jest ATmega8l. Do kontroli przemieszczenia użyłem sensora PAN3101. Wykorzystałem także trzy przyciski. Jeden do zatrzymania i dwa do kontroli prędkości robota. DTMF Sterowanie za pomocą telefonu odbywa się w najprostszy sposób. Należy przyłożyć słuchawkę telefonu do mikrofonu umieszczonego na nadajniku i wybrać odpowiedni klawisz. 2-przód 4-lewo 6-prawo 8-tył 1,3,7,9-po skosie *-szybciej #-wolniej 5,0-inne rzadko używane funkcje Dekodowaniem sygnału DTMF zajmuje się układ CM8870. Konstrukcja Robot zbudowany jest w formie „kanapki”. Obecnie składa się z czterech dwustronnych płytek PCB. Na dolnej płycie umieszczone są czujniki linii i napęd oraz niezbędne podzespoły takie jak sterownik silników. Płytka druga mieści procesor ATMEGA8L, złącze do programowania i komunikacji z modułem radiowym. Dalmierze, kontrola zasilania, gniazdo na ogniwo zasilające oraz układ resetu znajdują się na trzeciej płycie PCB. Ostatnia, umieszczona na samej górze płytka PCB, mieści moduł radiowy i jest przystosowana do rozbudowy robota o kolejne płytki. 1-dalmierz 2-silnik 3-złącze do programatora 4-moduł radiowy 5-ogniwo zasilające 6-czujnik linii 7-reset 8-koło i przekładnia 9-połączenie modułu radiowego z mikrokontrolerem
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×
×
  • Utwórz nowe...