Skocz do zawartości

Tablica liderów


Popularna zawartość

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

  1. 3 punkty
    Dodając krok po kroku trochę automatyki w mieszkaniu powstał projekt i realizacja sterownika rolet zewnętrznych. Główne cechy urządzenia: obsługa 7 rolet zdalny dostęp z dowolnego miejsca na świecie sterowanie przez Wifi sterowanie przez Bluetooth sterowanie przez sieć CAN automatyczny pomiar czasu pracy poszczególnych rolet harmonogram otwierania/zamykania rolet sterowanie grupowe tworzenie scen pobieranie aktualnego czasu z serwera NTP Sterownik został podzielony na dwie części, pierwsza to płytka z przekaźnikami i zasilaniem, druga płytka to układ sterowania wraz z modułami komunikacyjnymi. Główne elementy wykorzystane w sterowniku to: STM32F103C8T6 jako moduł Bluepill Moduł Wifi ESP-12 Bluetooth HC-05 Największym wyzwanie okazało się wykrywanie zakończenia pracy rolety. Było to niezbędne do automatycznego pomiaru czasu pracy, które jest wykorzystywane do określania pozycji pośrednich. Na początku testowałem wykrywanie prądu z wykorzystaniem modułu ACS711, ale niewielki prąd pobierany przez roletę podczas pracy powodował niestabilne pomiary z układu ACS711. Drugim pomysłem było wykorzystanie przekładników prądowych. Pomiary były stabilne, ale to rozwiązanie odpadło ze względu na fizyczne rozmiary takich przekładników, potrzebowałem użyć ich aż siedem sztuk. Ostatecznie zastosowałem rozwiązanie polegające na spadku napięcia na diodach, które aktywuje transoptor PC814. Rolety które posiadam mają wewnętrzne zabezpieczenie przed podaniem napięcia na oba uzwojenia silnika (góra, dół), jednak tak zaprojektowałem układ, aby sprzętowo nie było to możliwe. Pokazane jest to na poniższym rysunku. Program został napisany w C++ z wykorzystanie Arduino Core. ESP-12 pełni rolę konwertera komunikacyjnego, od strony wifi oferuje RestApi, konwertuje otrzymane wiadomości/zapytania na komunikację uart i wysyła do głównego procesora STM32. Na drugim porcie uart w STM32 jest podobna komunikacja z wykorzystaniem modułu bluetooth. Moduł BT aktualnie służy do przeglądania bieżących logów. Ponadto moduł posiada opcję komunikacji z wykorzystaniem sieci CAN, jestem bardziej fanem rozwiązań przewodowych tam gdzie jest to możliwe. Jak w mieszkaniu pojawi się więcej elementów automatyki to będę chciał całość przepiąć na sieć CAN zamiast Wifi. Sterowanie modułem odbywa się jak wspomniałem wyżej zapytaniami REST, na Banana Pro posiadam domowy serwer www, dołożyłem do niego prostą stronę w PHP, która pozwala w wygodny sposób wysyłać zapytania do sterownika. Do połączenia się ze sterownikiem poza domową siecią wykorzystuje OpenVPNa.
  2. 3 punkty
    Witam! Chciałbym przedstawić wam moją konstrukcję, która stała się przedmiotem mojej pracy inżynierskiej. Mechanika: Konstrukcja mechaniczna w zasadzie oparta jest na 2 płytkach PCB. Do płytki głównej zamontowane są dwie kulki podporowe, a także silniki pololu o przekładni 1:10 co stanowi napęd robota. Z przodu zamontowana jest płytka z podstawą zawierająca uchwyty do czujników ultradźwiękowych. Taki sam uchwyt pod czujnik znajduje się również na 'ogonie' robota - jest on nie używany i został zamontowany eksperymentalnie. Na przedłużonej osi silników zostały zamontowane magnesy enkoderów magnetycznych co ilustruje poniższa fotografia. Elektronika: Sercem robota jest mikrokontroler AVR ATmega162, którego zadaniem jest sterowanie robotem w tym: obsługa enkoderów, sterowanie silnikami, odbiór informacji z mikrokontrolera slave nt. odległości mierzonych przez czujniki, realizację algorytmów sterowania, realizacja połączenia bluetooth, obsługa wyświetlacza LCD hd44780. Drugi mikrokontroler również AVR, ATmega328 realizuje tylko i wyłącznie obsługę czujników odległości HC-SR04. Pomiary normalizuje i wysyła interfejsem SPI do jednostki głównej ATmega162. Na pokładzie robota znajdują się również dwa enkodery magnetyczne AS5040 pracujące w pętli sterowania regulatora PI silników. Enkodery te pracują w trybie defaultowym czyli wyjście kwadraturowe, rozdzielczość 2x256. Silniki sterowane są poprzez mostek H L293. Komunikacją z robotem zajmuje się moduł bluetooth bt222 - czyli komunikacja jest przez UART mikrokontrolera. Główny mikrokontroler jest taktowany zewnętrznym kwarcem 16Mhz co przy takiej ilości obsługiwanych urządzeń i wykorzystywanych interfejsów było po prostu konieczne, z kolei mikrokontroler atmega328 jest taktowany zewnętrznym kwarcem jednak z powodu lepszej podstawy czasowej, która jest konieczna do dokładnych odczytów z czujników odległości. Na wyświetlaczu LCD są wyświetlane aktualnie mierzone wartości odległości czujników. Automatyka: Zostało wspomniane, że silnikami steruje algorytm regulatora PI. Aby obliczyć jego nastawy została przeprowadzona identyfikacja transmitancji. W tym celu wykorzystałem UART do przesyłania aktualnej prędkości silników oraz środowisko Matlab do wizualizacji danych na wykresie. Z wyliczeń wyszło, że silniki z zastosowanymi kołami mają transmitancję: G(s)=107/(0.19s+1) Po obliczeniu nastaw regulatora i zastosowaniu w praktyce okazało się, że można jeszcze troszkę dopieścić nastawy i ostatecznie wykresy odpowiedzi skokowej bez i z regulatorem wyglądają następująco: Software: Napisane w C w środowisku Eclipse. Umożliwia robotowi 3 tryby. Tryb avoid. W trybie tym robot ma za zadanie omijać przeszkody wykorzystując regulator rozmyty Takagi-Sugeno. Wykorzystuje w tym celu odczyty z czujników odległości. Tryb goal seeking. Robot podąża do celu czyli do odebranych przez bluetooth współrzędnych kartezjańskich podanych w [mm], zakładając, że miejsce od którego zaczyna lub dostał nowy zestaw współrzędnych, ma współrzędne 0,0. W trybie tym regulator Takagi-Sugeno ma za zadanie na podstawie zaimplementowanej odometrii oraz współrzędnych końcowych sterować robotem w celu osiągnięcia zadanego położenia. Problem algorytmu przedstawia ilustracja: Tryb avoid + goal seeking. Jest to połączenie dwóch wcześniej opisanych trybów. W trybie tym działają równocześnie obydwa wcześniej opisane algorytmy, jednak na wejście regulatorów PI sterujących silnikami jest podawany zbalansowany sygnał z obu algorytmów. Tzn w zależności od najmniejszej odległości od przeszkody mierzonej przez któryś z czujników jest obliczany procentowy udział wartości sterowania od dwóch algorytmów. Brzmi skomplikowanie ale takie nie jest. Najlepiej zobrazuje to wzór: V=K*Vg+(1-K)*Va gdzie V jest prędkością zadaną na regulator PI silnika, Vg jest prędkością wynikającą z algorytmu goal seeking, Va jest prędkością wynikającą z algorytmu avoid, K jest parametrem, który przyjmuje wartość z przedziału 0-1 w zależności od mierzonej minimalnej odległości do przeszkody. Robota wprowadza się w odpowiedni tryb za pomocą dwóch przycisków lub poprzez interfejs bluetooth. Odpowiednie tryby sygnalizują diody LED. W celu przesłania komendy zawierającej współrzędne celu najpierw należy wprowadzić robota w odpowiedni tryb, a następnie wysłać do niego wg stworzonego prze zemnie protokołu dane. Protokół wysyłania danych jest następujący: X±⌴⌴⌴Y±⌴⌴⌴& gdzie +- – znak współrzędnej, _ – wartość współrzędnej. Testy. Konstrukcja została przetestowana pod względem dokładności odometrii. Robot podczas licznych testów na bieżąco wysyłał swoje współrzędne, które w dalszej kolejności były obrabiane w środowisku Octave do przyjemnych w analizie wykresów. Przykładowy wykres drogi, którą pokonał robot na 'placu manewrowym' w trybie avoid: ... oraz rzut z góry na 'plac manewrowy': U góry pozycja początkowa, na dole końcowa robota. Cały ten obszar był dookoła ogrodzony ścianką. Słowa samokrytyki Co bym zmienił ? Czujniki. Ze względu na problematyczność wykrywania małych przeszkód lub gdy płaszczyzna przedmiotu uniemożliwia odbicie się fali ultradźwiękowej w stronę odbiornika. Zdarza się, że z powodu gubienia przeszkód robot po prostu w nie wpada. Najciekawsze fragmenty programu: Regulatory PI: //######################################## REGULATOR PRĘDKOŚCI ############################################ erra = vl-Va;//liczenie błedu prędkości errb = vp-Vb; if(ua<1023&&ua>-1023)Ca = Ca+(erra*dt);//całka błędu ua = kp*(erra + Ca/Ti);//regulator PI //P I if(ub<1023&&ub>-1023)Cb = Cb+(errb*dt);//całka błędu ub = kp*(errb + Cb/Ti);//regulator PI //P I if((ua<10)&&(ua>-10))ua=0; if((ub<10)&&(ub>-10))ub=0; motor_set(ua,ub);//ustawia sterowanie silników Regulator rozmyty Takagi-Sugeno trybu goal seeking: inline void PsiZ2Vlr(float *Psi, float *z, int16_t *vl,int16_t *vp) { float PSI[3]; float XL[6],XR[6]; float NR,FR,L,S,P,VL=0,VP=0,m=0; uint8_t i,k; ///////////////////////////////LICZENIE PRZYNALEŻNOŚCI////////////////////////////////// if(*z<=100)NR=-0.01*(*z)+1;else NR=0;//jak bardzo blisko jest cel if(*z<=100)FR=0.01*(*z);else FR=1;//jak bardzo daleko jest cel if(*Psi<=0)L=-0.3183*(*Psi);else if(*Psi<-M_PI)L=1;else L=0; if(*Psi<=0)S=0.3183*(*Psi)+1;else if(*Psi<-M_PI)S=0; else if(*Psi>M_PI)S=0;else S=-0.3183*(*Psi)+1; if(*Psi>=0)P=0.3183*(*Psi);else if(*Psi>M_PI)P=1;else P=0; /////////////////////////////////////TABLICA REGUŁ////////////////////////////////////// PSI[0]=L; PSI[1]=S; PSI[2]=P; //NR; XL[0]=-4000;XR[0]=4000; XL[1]=0;XR[1]=0; XL[2]=4000;XR[2]=-4000; //FR; XL[3]=-4000;XR[3]=4000; XL[4]=4000;XR[4]=4000; XL[5]=4000;XR[5]=-4000; /////////////////////////////obliczanie prędkości silników////////////////////////////// for(k=0,i=0;k<3;k++,i++)//pierwszy wiersz tabeli { VL+=NR*PSI[k]*XL[i]; VP+=NR*PSI[k]*XR[i]; m+=NR*PSI[k]; } for(k=0;i<6;k++,i++)//drugi wiersz tabeli { VL+=FR*PSI[k]*XL[i]; VP+=FR*PSI[k]*XR[i]; m+=FR*PSI[k]; } *vl=(int16_t)VL/m; *vp=(int16_t)VP/m; } Obsługa czujników odległości: //PRZERWANIE OD CAPTURE PIN ISR(TIMER1_CAPT_vect) { if( (TCCR1B & (1<<ICES1)) ) { LastCapture = ICR1;//jesli zbocze narastajace, zlap ICR1 } else { PulseWidth = ICR1 - LastCapture;//Jeśli zbocze opadajace oblicz PW pomiar=0;//wyzeruj flagę pomiaru } TCCR1B ^= (1<<ICES1);//Zmiana zbocza wyw. przerwanie } Mam nadzieję że robocik się podoba. W razie pytań proszę śmiało. Całości kodu nie udostępniam ze względu na prawa autorskie niektórych funkcji bibliotecznych. Co mogłem udostępniłem. Pozdrawiam was wszystkich !
  3. 3 punkty
    @marek1707 Z perspektywy czasu muszę powiedzieć, że owszem brak jakichkolwiek rozkazów skoków to nie był najlepszy pomysł. Jednak na tamten moment wydawało mi się, że będzie to dobre rozwiązanie. Nie chciałem rozbudowywać licznika programu oraz układu sterującego do monstrualnych rozmiarów. I tak program odpowiedzialny za generowanie liczb z ciągu Fibonacciego składał się z kilkudziesięciu instrukcji. Gdyby układ obsługiwał jakiekolwiek skoki to można by to zrealizować na kilku instrukcjach. Był to pierwszy, że tak powiem pierwszy większy projekt, jaki realizowałem (poprzednie dwa to bardzo proste procesory, chociaż słowo procesor jest nadużyciem) ale mimo wszystko nie zakładałem możliwości podłączenia zewnętrznych urządzeń układ miał tylko i wyłącznie obsługiwać kilka prostych instrukcji oraz diody LED. Jeżeli chodzi o pamięć ROM to pierwsze 8 bitów był to adres dla pamięci RAM natomiast następne 4 bity były rozkazem. Trafiał on do części logicznej, która to generowała sygnały sterujące. Czy 8K RAM było nadużyciem możliwe jednak akurat taki układ miałem pod ręką, ale mimo wszystko procesor mógł zapisywać tam dane więc RAM nie był obsługiwany tylko za pomocą przycisków. Obecnie przeniosłem się na FPGA bo projektowanie w taki sposób jest prostsze i nie mamy ograniczeń, jakie stwarzają nam układy małej skali integracji, ale projektowanie układów cyfrowych w tej czy innej formie zawsze sprawiało mi wiele radości. Przyznam się szczerze, że nie wiem jakim cudem, ale nie słyszałem o tym układzie, chociaż w cyfrówce siedzę już od dłuższego czasu. Będę musiał poczytać sobie na ten temat więcej.
  4. 2 punkty
    Niewątpliwie procesory, bądź mikroprocesory stanowią ogromną część elektroniki użytkowej. Prawie w każdym urządzeniu, poczynając od najprostszych, a kończąc na najbardziej zaawansowanych komputerach, najważniejsza jest jednostka centralna. Czasy największej świetności ośmiobitowe procesory mają już za sobą, ale nadal stanowią ważną część elektroniki. Wiele urządzeń nadal z nich korzysta. Moją przygodę z elektroniką cyfrową rozpocząłem od programowania mikroprocesorów firmy Atmel były to dokładniej procesory Atmega8 oraz Atmega328. Mimo wielkich możliwości jakie dają mikrokontrolery bardziej interesowała mnie strona hardware’owa tych układów. Na ich podstawie oraz procesorów takich jak Intel 4004, 8080 stopniowo poznawałem budowę oraz działanie mikroprocesorów. W pewnym momencie stwierdziłem że nie jest to takie trudne i sam zbuduję własny procesor. Był to DCE 4 (D-digital, C-computer, E-electronic, 4 ponieważ była to jednostka czterobitowa). Następnie rozpocząłem prace nad ośmiobitowym procesorem DCE 84. Jednak i on z upływem czasu wydał mi się bardzo prosty. Prezentowany mikroprocesor DCE 812 zaprojektowałem korzystając z rozwiązań zastosowanych w DCE 84 bazując na pełnej architekturze harwardzkiej (gdzie pamięć dla programu i danych jest fizycznie rozdzielona). Schemat blokowy układu można znaleźć poniżej. Do budowy zostały użyte podstawowe układy logiczne wykonane w technologii CMOS (przykładowo bramki AND) oraz gotowe układy pamięci RAM (UL6516 2k x 8bit) oraz ROM(dwa układy 28c64 8k x 8bit) , ponieważ budowa własnych pamięci nie była możliwa z powodu braku czasu i środków. Elementy takie jak ALU, układ sterowania, zegar, oraz obsługa pamięci i poszczególnych rejestrów roboczych została zaprojektowana przeze mnie od podstaw. Fizycznie układ powstał stosunkowo niedawno i nie obyło się bez komplikacji. Zmiana układu obsługującego pamięć RAM sprawiła, że układ działa zgodnie z założeniami. Pozwala on na wykonywanie podstawowych działań matematycznych oraz prostych programów stworzonych w języku C++ i przekonwertowanych na polecenia dla tego procesora. Najbardziej zaawansowanym programem, który udało mi się uruchomić było generowanie kolejnych liczb z ciągu Fibonacciego. Praca mikroprocesora zostaje rozpoczęta od wciśnięcia fizycznego przycisku RESET, który ustawia stan "0" na wyjściach wszystkich wewnętrznych rejestrów. Uzyskujemy poprzez to adres zero na wyjściu licznika rozkazów co powoduje rozpoczęcie pracy od pierwszego wprowadzonego rozkazu (lista rozkazów widoczna na zdjęciu poniżej). Następnie układ zaczyna liczyć od 0 do 15 wewnątrz układu sterowania do każdej z tych mikrooperacji przypisane jest odpowiednie działanie zgodne z rozkazem wprowadzonym do pamięci ROM może to być np. zapis do rejestru B, reset licznika rozkazów. Po wykonaniu wszystkich mikrooperacji licznik rozkazów zwiększa swoją wartość o jeden co skutkuje przejściem do kolejnego rozkazu i cały cykl wykonywany jest ponownie. Programowanie procesora realizowane jest poprzez odpowiednie przełączniki które umożliwiają przełączanie układu między stanem pracy a programowaniem. Wprowadzanie danych oraz wybieranie adresów również realizowane jest w ten sposób. Odpowiednie przełączniki służą również do sterowania zegarem procesora. Generowanie impulsów może odbywać się automatycznie z częstotliwością ok. 10Hz lub manualnie poprzez wciśnięcie przycisku. Obecnie projektuje kolejną wersje własnego procesora tym razem staram się wszystko umieścić w jednym układzie FPGA (Korzystam z tej płytki). Postępy w pracach można obserwować na moim blogu https://rafal-bartoszak.blogspot.com/ Dodatkowo wstawiam też link do filmu gdzie można zobaczyć działanie układu.
  5. 2 punkty
    Hm, to pewnie nie jest miejsce na taką dyskusję - w końcu to wątek o Twoim komputerze DCE, ale chyba powinieneś poczytać coś o językach programowania bo mam wrażenie, że mylisz dwie zupełnie odrębne rzeczy. Asemblery to języki programowania w których jedna linia programu źródłowego przekłada się na jedną instrukcję procesora (dla purystów: dla prostoty nie myślę tu o makroasemblerach). Po prostu zamiast wpisywać binarne kody operacyjne korzystamy z tablicy mnemoników i pewnych dodatkowych zasad (np. dot. dozwolonych argumentów danej instrukcji) wbudowanych w program tłumaczący. Natomiast języki wysokiego poziomu, takie jak C, tak nie działają. Nie ma tam bezpośredniego odniesienia programu źródłowego do instrukcji procesora i nie możesz - nie budując kompilatora - zrobić tłumaczenia metodą "wywoływania pod programów". Przykładowo jedna instrukcja w C, np. switch może zamienić się na wieledziesiąt rozkazów procesora rozstrzelonych między inne rozkazy, wykonujące inne linie programu.To samo z pętlami: w jednym miejscu trzeba je zacząć, w innym skończyć a po drodze będzie wiele instrukcji wykonujących to w co w pętli zawarłeś. Do tego dochodzi gospodarka rejestrami i pamięcią, zmienne na stosie, analiza wyrażeń arytmetycznych, system typów i ich konwersji, jakaś spójna konwencja przekazywania argumentów do funkcji i odbierania z nich wyników itd.. Kompilator musi rozumieć strukturę całego programu i nie może patrzeć tylko na tę jedną linię kodu źródłowego jak asembler - to są zupełnie różne światy. W sposób w jaki opisałeś możesz natomiast zrobić interpreter, choć akurat C słabo się do tego nadaje. Wcześniej zaś - żeby w ogóle zacząć pisać programy dla nowego procesora - możesz skorzystać z gotowych asemblerów skrośnych sterowanych tablicami, które to tablice po stworzeniu (to są pliki tekstowe) opisują mnemoniki instrukcji Twojego procesora, ich argumenty itd. Piszesz wtedy kod jakbyś pisał dla Z80 czy 6502 tylko z wymyślonymi przez siebie instrukcjami, używasz etykiet, wyrażeń arytmetycznych w polach argumentów i tego wszystkiego do czego przywykliśmy w językach asemblera i dostajesz poprawny kod binarny wprost dla Twojego procesora.
  6. 2 punkty
    Chyba największy problem nie jest w sprzęcie, ale oprogramowaniu. Programatory oparte o FTDI to w rzeczywistości proste io-expandery. Cała logika jest po stronie aplikacji. ST ma pewnie swoje wersje i swoje tajemnice. Najbardziej otwarty jest OpenOCD, ale jego konfiguracja do łatwych nie należy. Natomiast Segger ma własne i już całkiem zamknięte rozwiązania, ale za to podłączasz i działa.
  7. 2 punkty
    Pochwalę się jeszcze jednym swoim projektem, który był efektem moich pierwszych eksperymentów z rodziną mikrokontrolerów PIC32. Z powodu, którego nie potrafię bliżej określić, po "wyrośnięciu" z AVR-ów zainteresowałem się 32bitowymi produktami firmy Microchip, zamiast od razu uczyć się programowania ARM-ów, np. STM32. Muszę przyznać, że polubiłem te mikrokontrolery i stosuję je w swoich projektach, chociaż obecnie powoli przerzucam się na STM-y. Jednym z moich pierwszych projektów wykorzystujących układ PIC32MX270F256B była płytka prototypowa, która miała łączyć dwie funkcje. Po pierwsze miała zawierać kilka podstawowych peryferiów, przy pomocy których mógłbym zapoznać się z bibliotekami MLA, po drugie w przyszłości mogłaby w przyszłości służyć za moduł wykonawczy w systemie automatyki domowej DIY. Prototypowa wersja płytki została zmontowana na jednostronnej płytce drukowanej, z wykorzystaniem układów w obudowach SO28. Poza mikrokontrolerem można na niej znaleźć kontroler ethernetu ENC28J60, pamięć flash SST25 oraz układ FT232. Nieco później powstało kilka kolejnych egzemplarzy nieco zmodyfikowanej wersji tej płytki. Projektując je chciałem nauczyć się czegoś nowego, przetestować swoje umiejętności i rozprawić się z paroma mitami dotyczącymi tego, co jest, a co nie jest możliwe w domowych warunkach. Po pierwsze był to mój pierwszy eksperyment z domową produkcją płytek dwustronnych. Po drugie chciałem przekonać się, jak wygląda sytuacja z zastosowaniem miniaturowych układów QFN/MLF w domowych warunkach. Wielokrotnie nasłuchałem się bowiem opinii mówiących, że ich montaż jest zbyt kłopotliwy przy pomocy amatorskich narzędzi. Płytka została metodą termotransferu (na kopertę). Wszystkie otwory pod przelotki wywierciłem ręcznie -przekonałem się bowiem, że tanie statywy pod wiertarki nie zapewniają odpowiedniej dokładności. O wiele lepiej jest wywiercić otwór do połowy z jednej strony, a potem ostrożnie kończyć z drugiej, pozwalając wiertłu wypaść z drugiej strony pd własnym ciężarem.Miedź została pocynowana stopem Lichtenberga, a mikrokontroler w obudowie MLF oraz rezonator SMD zostały wlutowane za pomocą taniej, chińskiej stacji hot air, po uprzednim zabezpieczeniu cienkich ścieżek taśmą kaptonową. Płytka posiada następujące możliwości: Dostęp do sieci przez Ethernet (wykorzystywany jest stos Microchipa z bibliotek MLA). Obsługa hostu USB celem podpięcia PenDrive'a (FatFS + sterowniki z bibliotek MLA). Wersja finalna została także przystosowana do obsługi funkcji USB OTG. Wbudowana pamięć SPI Flash SST25, obsługiwana przez FatFS jako dysk. Wbudowany rezonator do obsługi RTC (tylko wersja prototypowa, wersja finalna powstała z myślą o zewnętrznym RTC I2C z baterią podtrzymującą, np. DS1307). Złącza goldpin udostępniają następujące interfejsy: Interfejs programatora/debugera, np.. PicKit. UART (w wersji finalnej zrezygnowałem ze stosowania FT232). I2C wraz z jednym przerwaniem zewnętrznym, pozwalające na wygodne korzystanie z ekspanderów rekompensujących niewielką liczbę dostępnych pinów GPIO.
  8. 2 punkty
    Takie układy muszą być z konieczności proste, bo dodanie każdej kolejnej funkcjonalności to przyrost scalaków, miejsca na płytce i liczby połączeń, ale nie wiem czy tu nie posunąłeś się za daleko w tej prostocie. Oczywiście jest to duża praca i chwała za zaprojektowanie układu umiejącego pobierać i wykonywać instrukcje. Mam jednak wątpliwość dotyczącą założeń, może mógłbyś to wyjaśnić. Skoro jest to już Twój trzeci projekt to na pewno już widzisz istotne wady braku możliwości podejmowania przez program jakiejkolwiek decyzji. Twój procesor nie ma ani jednego skoku warunkowego lub choćby warunkowego rozkazu "Pomiń (wykonaj jako NOP) następną instrukcję" co powoduje, że cały przebieg pracy musi być liniowy aż do napotkania kodu 1000 lub końca pamięci i restartu od początku. Jak w takiej sytuacji możesz obsłużyć jakiekolwiek I/O gdzie musisz poczekać na dane, jak chcesz wykonać najprostszą pętlę czy rozgałęzienie. A przecież są to podstawowe bloki algorytmów. Czy program liczenia Fibonacciego polagał na powtarzaniu w kodzie wciąż tej samej sekwencji i jeśli wpisałeś ją 7 razy to liczył 7 pierwszych wyrazów? Trochę słabe. Czy nie myślałeś by nawet kosztem niektórych instrukcji zrobić jednak logikę skoków a już na pewno testowania jakiegoś warunku? Niechby to było A=0, cokolwiek. Jak rozumiem ROM w organizacji 16-bitowej służy wprost do generowania sygnałów sterujących poszczególne bloki, ale 2K RAMu w momencie gdy wpisujesz to ręcznie z przełączników (a może inaczej?) i w zasadzie nie możesz zrobić żadnego sensownego programu, wydaje się sporym nadmiarem. Choć pewnie trudno dziś kupić mniejszą kostkę. To nie są zarzuty, chciałbym tylko zrozumieć założenia jakimi się kierowałeś i czy masz zakusy na kolejną, jeszcze lepszą konstrukcję? Bo taki procesor może dać niesamowitą frajdę z puszczenia na nim np. pierwszej gry (a niechby i losowania kostki 6-ściennej) lub rozbudowania systemu przez podłączanie jakichś peryferiów - ale musi to umożliwiać.. Przejście na FPGA to już zupełnie inna dziedzina. Tam zrobienie własnego procesora CISC z pełną listą instrukcji, systemem przerwań, kolejką dekodowania i wykonywania, predykcją skoków a nawet spekulatrywnym wykonywaniem kodu zależy tylko od ilości czasu spędzonego przed ekranem i nie wygląda tak fajnie A moim osobistym zdaniem nie daje takiej radochy jak 100 TTLi robiących procesor grający z Tobą w kólko i krzyżyk. BTW: Czy słyszałeś kiedyś o kostce MC14500B? To proste CPU (1-bitowy arytmometr, 4-bitowy kod instrukcji) przeznaczone w zamyśle do programowej realizacji sterowników przemysłowych budowanych w innym przypadku ze "sprzętowej" logiki cyfrowej, które trzeba obudować wieloma scalakami by dało się użyć - ale nawet to ma instrukcję warunkową i skok (który trzeba sprzętowo zrobić samemu, ale taka instrukcja jest dekodowana i sygnalizowana przez 14500): https://en.wikipedia.org/wiki/Motorola_MC14500B http://old-computers.com/museum/computer.asp?st=1&amp;c=834 http://www.brouhaha.com/~eric/retrocomputing/motorola/mc14500b/mc14500b_icu_handbook.pdf W swoim czasie było do tego produkowanych kilka egzotycznych scalaków typu licznik instrukcji czy nawet (o ile pamiętam) sprzętowy stos(!) wywołań i powrotów z podprogramów co znakomicie ułatwiało budowę sterowników, ale nawet z prostych TTLi można dziś na tym zbudować już sensownie działający komputerek. Pomyśl o tym
  9. 1 punkt
    Posiadając dwa futrzaki pojawiła się potrzeba zapewnienia im odpowiedniej ilości jedzenia, szczególnie podczas weekendowych wyjazdów. Przeglądając gotowe rozwiązania stwierdziłem, że najlepiej zbudować samemu mając przy tym sporo frajdy i satysfakcji. Urządzenie zostało zbudowane w oparciu o: Raspberry Pi Zero W Kamera do Raspberry Pi Serwo L360 Uchwyt na kamerę Czujnik odległości Główne cechy urządzenia Zdalna możliwość karmienia z dowolnego miejsca na świecie podgląd z ruchomej kamery ultradźwiękowy czujnik wykrywający kota oświetlenie IR pozwalające na podgląd w nocy możliwość wgrywania i odtwarzania dowolnych plików audio opcja "Text To Speach" duży 10 litrowy zbiornik na karę detekcja pustego zbiornika harmonogram automatycznego podawania karmy Pierwszym etapem i najtrudniejszym było wykonanie niezawodnego mechanizmu podającego karmę. Przetestowałem kilka rozwiązań: podajnik ślimakowy mechanizm koszykowy zasuwa podajnik tłokowy - to rozwiązanie sprawdziło się świetnie Układ podający powstał z ogólnodostępnych elementów PCV Niżej widok od tyłu pokazujący montaż tłoka Na filmie pokazana jest idea pracy mechanizmu, były to pierwsze próby ze słabszym serwomechanizmem. Ostatecznie został wymieniony na L360, a ruch obrotowy samego serwa zastąpiony ruchem "po łuku - przód, tył" co pozwoliło zapobiec ewentualnemu zakleszczeniu się karmy. Mechanizm - film Kolejnym etapem było wykonanie dodatkowej elektroniki obsługującej: 2 serwa do kamery 1 serwo podające karmę wzmacniacz audio czujnik odbiciowy IR czujnik zbliżeniowy Dodatkową wyzwaniem było przerobienie zwykłej kamery na kamerę NoIR, w tym celu zdemontowałem układ optyczny i delikatnie usunąłem filtr podczerwony. Poniżej wygląd matrycy po zdemontowaniu tych elementów. Po ponownym zamontowaniu soczewki, kamera działała już prawidłowo przy oświetleniu podczerwonym. Poniżej widok od spodu: Główne oprogramowanie sterujące sprzętem zostało napisane w pythonie, a interfejs użytkownika w PHP, na raspberry pi jest postawiony serwer www razem z mysql, tak więc jest to mały potworek do karmienia kotów. Sterowanie odbywa się przez stronę www, co wyeliminowało pisanie dedykowanej aplikacji na każdy z systemów osobno. Na koniec kilka dodatkowych zdjęć
  10. 1 punkt
    Jakiś czas temu w moje ręce trafił dość specyficzny zabytek techniki - układ MCY7880, będący jedynym mikroprocesorem produkowanym seryjnie w Polsce. Element ten był klonem intelowskiego procesora 8080, wytwarzanym przez nieistniejące już przedsiębiorstwo CEMI. Początkowo potraktowałem go jako kolejną elektroniczną ciekawostkę do kolekcji, po jakimś czasie zacząłem się jednak zastanawiać, czy nie będę w stanie wykorzystać go w bardziej konstruktywny sposób. Zacząłem więc gromadzić pozostałe elementy potrzebne do zbudowania prostego systemu mikroprocesorowego, jednocześnie wczytując się w dokumentację i literaturę komputerową z epoki. Właściwa konstrukcja zaczęła powstawać niewiele później. Z uwagi na mocno eksperymentalny charakter przedsięwzięcia zdecydowałem się pominąć etap projektowania PCB i od razu przystąpić do montażu komputera na płytce prototypowej. Najpierw wlutowane zostały podstawki pod układy scalone, potem grubszą srebrzanką poprowadziłem masę i linie zasilające. Należy tutaj nadmienić, że MCY7880 jest dość kłopotliwym procesorem, jeśli chodzi o zasilanie. Nie tylko pobór prądu jest duży jak na obecne standardy, ale także konieczne jest dotarczenie trzech różnych napięć: +12, +5 oraz -5V. Dodatkowo muszą być one podane w odpowiedniej kolejności, niedopełnienie tego obowiązku grozi uszkodzeniem procesora. Oryginalnie systemy mikroprocesorowe na MCY7880 były zasilane z dużych zasilaczy transformatorowych. Była to pierwsza z kilku kwestii, co do których zdecydowałem się na drobny kompromis i zastosowałem nieco uwspółcześnione podejście. I tak napięcie 12V jest generowane przez przetwornicę boost na MC34063A, a -5V jest pobierane z pompy ICL7660. Głowna linia zasilająca o napięciu 5V jest zasilana bezpośrednio ze współczesnego, stabilizowanego zasilacza impulsowego. Po poprowadzeniu masy i zasilania, a także wlutowaniu wszystkich elementów pasywnych, przyszedł czas na najbardziej mozolny etap projektu. Łączenie linii sygnałowych przy pomocy kynaru. Bardzo dużej ilości kynaru. Zajęło mi to kilka wieczorów. O dziwo pomyliłem się tylko raz, zapominając o podciągnięciu jednego z wyprowadzeń EPROM-u do 5V. Po przebadaniu magistrali oscyloskopem i analizatorem stanów logicznych stwierdziłem, że procesor zachowuje się prawidłowo pracując "na luzie" (szyna danych pociągnięta w sposób wymuszający ciągłe wykonywanie instrukcji NOP i zwiększanie licznika instrukcji). Przyszedł więc czas na zaprogramowanie pamięci EPROM. Na potrzeby tego projektu zaopatrzyłem się w chiński programator oraz urządzenie do kasowania tych zabytkowych pamięci. Zapoznałem się także z podstawami asemblera 8080. Pierwszy napisany program służył rzecz jasna do migania diodą podłączoną do znajdującego się na płytce układu 8255. Potem zabrałem się za portowanie TinyBASIC-a, który po jakimś czasie udało mi się odpalić na tym komputerze. Obecnie POLON 7880 może komunikować się ze światem jedynie przez port szeregowy RS232, zrealizowany za pomocą układu 8251 oraz konwertera MAX232. W planach na bliżej nieokreśloną przyszłość jest budowa dodatkowej płytki z interfejsem monitora CRT i klawiatury, a być może także i sterownikiem stacji dyskietek. Pozwoliłoby mi to na uruchomienie systemu operacyjnego CP/M - organizacja pamięci komputera jest do tego przystosowana. Oczywiście najprostszym rozwiązaniem byłoby symulowanie układów I/O za pomocą jakiegoś współczesnego mikrokontrolera, wolałbym jednak wykorzystać w tym celu oryginalne układy scalone z epoki.
  11. 1 punkt
    Zdecydowałem się przestawić swój kolejny projekt utrzymany w klimatach retro. Wszystko zaczęło się jakiś rok temu, gdy przypadkowo odkryłem, że sprzedawcy na popularnych chińskim serwisie aukcyjnym posiadają podejrzanie duże ilości podejrzanie tanich układów MOS6502. Wydało mi się to zbyt piękne, aby było prawdziwe. Z ciekawości zamówiłem kilka sztuk, płacąc za nie kilka dolarów i zapomniałem o całej sprawie, licząc na to, że pewnie otrzymam podróbki z wygrawerowanymi laserowo oznaczeniami. Jak bardzo się myliłem! Po uruchomieniu na płytce prototypowej okazały się być prawdziwymi układami MOS6502, wykonanymi w technice NMOS. Zabrałem się więc za projektowanie właściwej płytki, myśląc o stworzeniu swojego własnego komputera pracującego pod kontrolą języka BASIC. Ten projekt ciągle jest w realizacji, ale nie o nim chcę tutaj napisać. W międzyczasie bowiem w mojej głowie pojawił się jeszcze jeden pomysł. Chciałem sprawdzić jak ta rodzina procesorów sprawdza się w roli mikrokontrolera. Albo innymi słowy - byłem ciekaw co by było, gdyby Arduino powstało trzydzieści lat temu. Tym razem od brytyjskiego sprzedawcy na eBay-u zamówiłem kilka sztuk nowszych procesorów WDC65C02, wykonanych w technologii CMOS. Zastosowanie tej wersji układów nie tylko zmniejszało znacznie pobór prądu, ale także upraszczało układ, niwelując konieczność stosowania bufora szyny adresowej. Za punkt wyjścia do tego projektu posłużyła płyta procesorowa mojego ciągle powstającego komputera na MOS6502, która została poddana pewnym modyfikacjom. Przede wszystkim zmieniła się organizacja pamięci - zwiększyłem ilość EPROM-u kosztem RAM-u, dodana została także pamięć EEPROM. Organizacja pamięci wygląda następująco, zaczynając od 0x000: 8 kB pamięci RAM 8 kB przestrzeni adresowej I/O 8 kB pamięci EEPROM 8 kB układ EPROM (dodatkowa pamięć, obecnie niewykorzystywana) 32 kB EPROM (główna pamięć, przechowująca program, dane i adresy wektorów) Urządzenie pracuje z prędkością 4 MHz. Sygnał taktowania pochodzi z jednoukładowego generatora kwarcowego. Układ DS1232 odpowiada za obsługę wejścia RST (likwidacja drgań styków i obsługa power-on reset). Urządzenie posiada także port wyjściowy na 74HCT373 - można za jego pomocą migać dwiema diodami, pozostałe linie są wyprowadzone na złącze IDC-40. Dekoder adresów jest zrealizowany na układach 74HCT138 i 74HCT139. Dodatkowo kilka bramek układu 74HCT00 posłużyło do generowania sygnałów !RD i !WR, wykorzystywanych w układach kompatybilnych z magistralą intela (a więc także zastosowanych pamięciach). Wszystkie sygnały szyny danych, adresowej, te związane z obsługą przerwań oraz wyjścia dekodera adresów są wyprowadzone na złącze IDC-40. Moim zamiarem było stworzenie płytki, która nie tylko będzie mogła służyć do eksperymentów z historyczną rodziną procesorów, ale także będzie mogła posłużyć jako podstawa do budowy jakiegoś użytecznego projektu, poprzez dodanie odpowiednich modułów, na wzór shieldów Arduino - z tą różnicą, że podpinanych bezpośrednio do magistrali procesora za pomocą taśmy IDC-40. Na pierwszy ogień poszła płytka zawierająca wyświetlacz HD44780 (4x20) oraz kilka przycisków tact switch. Wyświetlacz pracuje bezpośrednio na magistrali procesora - do tego w końcu został zaprojektowany. Konieczne było tylko dodanie prostej logiki, generującej sygnały sterujące. Od strony programowej obsługa wyświetlacza w takich systemach jest nawet prostsza niż obecnie - wystarczy jedynie wpisywać odpowiednie wartości pod odpowiednie adresy w przestrzeni adresowej procesora. Przyciski posiadają własny port wejściowy, zrealizowany na 74HCT245. Praca nad tym projektem była dla mnie także okazją do zapoznania się z asemblerem 6502, chociaż prawdę mówiąc większość kodu napisałem w C posługując się kompilatorem cc65, uzupełniając go o asemblerowe wstawki. Co prawda jest to dość prosty kompilator i być może nie nadaje się do pisania gier pod Commodore C64, ale w w tego typu zastosowaniach sprawdza się całkiem nieźle.
  12. 1 punkt
    Witam, dzisiaj przedstawię konstrukcję dość nietypową. Już temat brzmi zagadkowo co nie? "Blue pill" to nazwa taniej chińskiej płytki z mikro-kontrolerem STM32 F103. Kosztuje w Polsce ok 15 zł, za granicą chodzi po $2. Parametry w porównaniu do Arduino Uno na którym zwykłem wcześniej pracować są wręcz astronomiczne. Po chwili zabawy czujemy się jak po przesiadce z Malucha do Ferrari. Mamy na pokładzie kwarc 8MHz, którym według producenta możemy taktować płytkę do 72MHz. To jest oficjalna wartość, przy której producent gwarantuje nam że nasz mikro-kontroler będzie działać. Na własną odpowiedzialność natomiast można podkręcić ją sobie do 128MHz po prostu ustawiając mnożnik PLL-ki na najwyższą wartość. To jest na tyle proste że łatwo to przypadkiem zrobić Reszta parametrów porównując do starej poczciwej atmegi to również niebo a ziemia. Mamy 20kB ramu i 64kB flasha, pełnoprawne USB i 12-bitowe ADC. Mamy też całą masę timerów. I to wszystko za góra 15 zł. Dobra, teraz drugie tajemnicze słowo. HVR to skrót od Hearth Rate Variability. Po polsku przebieg zmienności rytmu serca. Każdy z nas słyszał o tętnie. Serce bije z jakimś tam tempem, 60 BPM, 80 BPM itd. Przy wysiłku bije szybciej, w trakcie spoczynku wolniej. Jednak już znacznie mniej osób wie że odstępy między kolejnymi uderzeniami serca prawie nigdy nie są równe. I to nie mówię tu o małych różnicach. Zdecydowanie nie. Dobra, po prostu pokażę wam wykres. Na osi Y mamy puls w uderzeniach na minutę. Na osi X mamy kolejne uderzenia serca. Czerwona linia to dokładny wykres tętna, a żółty to wartość uśredniona. Robi wrażenie? Pulsometr pokazuje wam tylko wartość uśrednioną. Żółtą linię. Widzicie tętno 80, na prawdę jednak wasze serce skacze od 65 do 95. Dzieje się tak z każdym oddechem. Nie dokładnie, ale z moich obserwacji wynika że tętno względnie synchronizuje się z oddechem. Bynajmniej w stanie koherencji. Ha, teraz co to jest koherencja? O tym za chwilę. Co do samego urządzenia - jest to nasz ukochany Blue Pill z podpiętym czujnikiem MAX30100. Wszystko siedzi sobie na płytce stykowej. Płytkę można programować programatorem bądz przez UARTa. Co więcej jak byśmy zmienili bootloader to płytka może programować sie sama. Przez USB. Ja akurat wybrałem pierwszą opcję bo przypadkiem miałem pod ręką ST-Linka. Skąd miałem? Otórz dawno dawno temu zachwycony ARM-ami kupiłem sobie o taką płytkę. To było moje pierwsze spotkanie z ARM-ami. I wyglądało tak że spaliłem ją w ciągu jakiś 15 minut od podłączenia. Do tej pory nie wiem jak. Ale nie spaliłem pokładowego programatora który jak się okazuje bardzo chętnie przygarnia obce mikro-kontrolery. Więc naszego Blue Pilla za 15 zł można sobie podebugować nawet . Dużo ciekawiej wygląda program. Albowiem postanowiłem nie używać żadnej biblioteki. Nawet CMSIS-a. Tak więc mamy profesjonalną tablice wektorów w Asemblerze i jakże poważnie wyglądające definicje rejestrów. #define RCC_APB2ENR (*(volatile uint32_t *)(0x40021018)) czyż to nie jest piękne? Dobra, teraz na poważnie. Schemat działania programu jest dosyć prosty: Czekamy na przerwanie od czujnika Zczytujemy dane z czujnika Przepuszczamy je przez filtr DC ...i przez butterwortha żeby wyciąć wysokie częstotliwości Teraz mamy dość długi algorytm mający za zadanie wykryć puls. Jeśli właśnie wykryliśmy uderzenie serca (szczyt tej górki na dolnym obrazku), wyliczamy czas od poprzedniego i robimy z tego puls. Na koniec wysyłamy co trzeba UARTem (4 bajty) Jak działa czujnik? Czujnik składa się z diody IR i czujnika który ma za zadanie mierzyć natężenie światła z diody. Do czujnika przykładamy palec. Skóra bendzie w różnym stopniu przepuszczać światło, w zależności od chwilowego ciśnienia krwi. MAX30100 ma 16-bitowe ADC i konfigurowalną częstotliwość próbkowania. W moim projekcie używam 1000Hz. Niestety jak chcemy mieć dużo próbek to nie mamy pełnych 16 bitów . Po przefiltrowaniu mamy coś takiego: Dla jasności: screen jest stary, jak jeszcze nie był na 1kHz, stąd skala inna (wtedy było 50-100Hz, nie pamiętam już). A tak wygląda wykrywanie uderzeń serca: A teraz efekt końcowy. Spójrzcie na dwie sytuacje: Tak jak na początku mamy puls na osi Y i uderzenia na osi X. W pierwszej sytuacji robiłem pomiar w sytuacji stresowej. Wykres jest zupełnie chaotyczny. W drugiej mamy tzw. stan koherencji. Pomiar robiłem jakąś godzinę później, jak sytuacja stresowa minęła. Serce elegancko przyspiesza i zwalnia. Co więcej ze stanu pierwszego da się w ciągu paru minut świadomie przejść do stanu drugiego, po prostu przywołując pozytywne wspomnienia. Nie chcę tu za dużo opowiadać bo powoli wchodzimy w medycynę. A tutaj, bazując tylko na książkach mogę nie być najlepszym źródłem wiedzy. Software na komputerze: PlatformIO (po podaniu pliku linkera potrafi działać bez frameworka) SerialPlot - bardzo fajna maszyna do rysowania wykresów z tego co idzie po uarcie. Na koniec parę zdjęć konstrukcji:
  13. 1 punkt
    A tutaj nasza paczka zdjęć: www.facebook.com/pg/ruchnaukowyfront/photos/bardzodługilink W ciągu kilku dni wrzucimy jeszcze film z zawodów.
  14. 1 punkt
    W końcu udało mi się zrobić parę zdjęć, które wrzucam poniżej. Dodatkowo dodaję link do filmów
  15. 1 punkt
    Dzień dobry! Dla naszego Klienta do Krakowa poszukuję INŻYNIERÓW ELEKTRONIKÓW, którzy będą zajmować się m.in. projektowaniem urządzeń elektronicznych dla zastosowań samochodowych, tworzeniem dokumentacji projektowej , przeprowadzaniem obliczeń i symulacji obwodów, walidacji i testowania prototypów. Wymagamy wykształcenia inżynieryjnego elektronicznego; doświadczenia w projektowaniu i testowaniu układów cyfrowych i analogowych ze szczególnym naciskiem na układy zawierające mikrokontrolery, układy średniej mocy i pomiar sygnałów. Oferujemy atrakcyjne wynagrodzenie, zatrudnienie na B2B lub umowę o pracę oraz udział w długoterminowych projektach realizowanych dla światowych marek samochodowych (BMW, Ferrari, Porsche, Audi) Miejsce wykonywania pracy (adres klienta): Powstańców Wielkopolskich 13, 30-707 Kraków Dane pracodawcy: Collabera Poland, Pawia 9, 31-154 Kraków Zapraszam do kontaktu pod adresem: jadwiga.czech(malpa)collabera.com lub tel. 782489019
  16. 1 punkt
    Co do krańcówek przy roletach, nie było takiej możliwości, żeby je dołożyć, dodatkowo nie miałem doprowadzonych przewodów pod to. Z samej rolety wystają tylko przewody zasilania, więc też nie było możliwości podłączyć się pod krańcówki wbudowane w roletę, a swoją drogą to zamiast krańcówek mam system przeciążeniowy w nich. Chciałem zrobić pomiar prądu jak najmniej inwazyjny i odseparować część wysokiego napięcia od niskiego, stąd spadek napięcia na rezystorze odpadł. ACS711 to czujnik magnetyczny więc fizycznie odseparowana strona pomiarowa, ale różnice w prądzie były zbyt małe, żeby sensownie interpretować wyniki. ACS711 trochę się wzbudza nawet jak nie płynie przez niego prąd. Rozwiązanie z diodami jest najprostsze, w momencie jak podaje napięcie na roletę to odkłada się na nich trochę ponad 1V, co aktywuje transoptor, a elektronika w rolecie nawet nie poczuje braku tego 1V Dwie diody w szereg, żeby spadek był większy, a przeciwstawnie bo jest tutaj napięcie AC i chciałem mieć detekcję w obu połówkach przebiegu napięcia.
  17. 1 punkt
    Już poprawione , coś mam z tym robotem ;> Bo nawet adres tak wprowadzam w pasku z ręki... A później ździwienie, że stronka się nie otwiera...
  18. 1 punkt
    A masz też LFa z przeszkodami? Chętnie bym zobaczył jak sobie radziły z pętlą, a niestety przegapiłem te zmagania Dojechałem trochę później niż planowałem i byłem "tylko na finałach". Ogólnie bardzo fajnie, sporo osób było obecnych nawet na samym końcu. Ciekawa lokalizacja do organizacji takiej imprezy. Dużo młodych zawodników, więc wszystko na plus. Jedyna moja obserwacja "na minus" to ogólny poziom, w niektórych konkurencjach. Mam wrażenie, że np. w minisumo poziom był niższy niż był kilka lat temu (wnioski po obserwacji finału). Nie krytykuję autorów konstrukcji - to tylko taka ogólna uwaga w stylu "kiedyś to było". Czy ktoś podziela taką opinię? Kilka zdjęć: Ostatnie zdjęcie może być niejasne dla osób nieobecnych. Z identyfikatora zawieszonego na szyi wyglądało, że to chyba "organizator", a nie konstrukcja z kategorii "freestyle". Ale tutaj muszę chyba poprosić o potwierdzenie "konstruktora" - @baton, jak było?
  19. 1 punkt
    Dzięki. Jescze jedno pytanie: zaintrygowałeś mnie tą konwersją z C++ na instrukcje tego procesora. Czy mógłbyś to rozwinąć, a konkretnie: czy zajmowałeś się przy okazji tego tematu kompilatorami i automatyczną generacją kodu wynikowego, czy dopasowałeś do binariów tej kontrukcji któryś z dostępnych np. meta-asemblerów albo czy masz na myśli tłumaczenie przy użyciu.. kartki i ołówka? No i napisz przy jakiejś okazji co tam w FPGA wydłubałeś albo chcociaż czy przewidziałeś skoki warunkowe I jak - jeśli robisz zupełnie własny procesor - zamierzasz go programować inaczej niż wpisując HEXy do RAMu.
  20. 1 punkt
    Cześć, właśnie przyszedłem do pracy i przyszła przesyłka z Chin z "LicheeTang Anlogic". Tak ,że teraz będę mógł sprawdzić działanie architektury "RISC-V" na fizycznym sprzęcie. Na pewno opisze moje zmagania. BTW: Próbuje poczytać dokumentację do płytki "LicheeTang Anlogic, ale słabo mi idzie - chyba już najwyższy czas aby się zapisać na jakiś kurs mandaryńskiego (tak mi się przynajmniej wydaje, że to jest mandaryński). Pozdrawiam
  21. 1 punkt
    Witam wszystkich na forbot.pl Nazywam się Łukasz, mam 36 lat. Moja mała pasia to elektronika. Niestety nie mam na nią za dużo czasu, ale niekiedy uda mi się coś zrobić. Jak istnieje potrzeba to nawet coś zaprogramuję (arduino, rasp pi, avr, stm), oczywiście wspomagam się w takich wypadkach aktywnie internetem. Z wykształcenia jestem automatykiem i zajmuję się projektowaniem układów automatyki, programowaniem PLC (Fanus, Siemens, Mitsubishi, Omron, Wago, inne wg potrzeb), tworzeniem aplikacji SCADA (iFix, InTouch, Cimplicity), tworzeniem wizualizacji na HMI (Weintek, Siemens, inne wg potrzeb). Dodatkowo zajmuję się eksploatacją układów automatyki u siebie w zakładzie wraz z utrzymaniem ruchu systemów DCS (Ovation, PCS7, DeltaV).
  22. 1 punkt
    @cami008, wydzieliłem Twoje pytanie z kursu Raspberry Pi, ponieważ dotyczy innego sprzętu niż ten, który jest używany w kursie Bibliotek w wersji 2.46 pochodzi z marca 2018, czyli momentu wydania modelu 3B+. Nie ma chyba nowszej wersji, która wspierałaby model 3A+. Biblioteka nie może rozpoznać płytki, bo nie ma pojęcia, że taki model RPi istnieje. Niestety nie udało mi się znaleźć w Internecie żadnej wersji, która wspierałaby ten model. Może ktoś inny doradzi jakieś alternatywne rozwiązanie Pytanie wydzielone z:
  23. 1 punkt
    Niestety lokalny internet nie pozwolił na livestream (a siedzieliśmy całą noc próbując go odpalić), ale mam nagrane wszystkie przejazdy LF w 4k, sporo sumo, a chłopaki z ElektroŚwiata (subskrybujcie, dobrzy ludzie) nagrali combat (bo nasze GoPro miało jakieś problemy ze sobą), to prawie to samo, nie? Ogólnie to mam jakieś 200GB materiału do obrobienia, za jakiś miesiąc coś powinno się pojawić W tym tygodniu ogłosimy też konkurs na zdjęcia i filmy z RA, będą nagrody
  24. 1 punkt
    Myślałeś nad dodaniem drugiej diody o innym paśmie i mierzeniu też natlenienia krwi?
  25. 1 punkt
    Cześć Elvis, tego zestawu narzędzi nie znałem, ostatnio zainstalowałem sobie "Freedom Studio" (Linux Mint). Dzięki za podpowiedź. Zainstalowałem to "SEGGER Embedded Studio for RISC-V 4.12" będę miał jakieś porównanie do "Freedom Studio". Pozdrawiam No właśnie znalazłem ten link: https://gnu-mcu-eclipse.github.io/debug/openocd/riscv/ Niestety nie mam tego programatora (olimex-arm-usb-tiny). Trochę ten programator kosztuje (40 Euro) https://www.olimex.com/Products/ARM/JTAG/ARM-USB-TINY/ Muszę porobić kilka prób, może uda się użyć jakiegoś innego programatora. Pozdrawiam
  26. 1 punkt
    Trzeba poczytać co wspiera openocd dla risc-v. A na szybko i bogato jest jeszcze segger: https://www.segger.com/risc-v/ Tutaj ktoś opisuje jak używać jtag w wersji olimex: https://gnu-mcu-eclipse.github.io/debug/openocd/riscv/
  27. 1 punkt
    Dla potomnych. Program jest testowy, więc nie oczekujcie zaawansowanej technologii. Zadaniem jest sprawdzenie poprawności działania I2C. Kod dla Master: //------------------------------------------------------- // Enable debug prints to serial monitor #define MY_DEBUG // Enable serial gateway #define MY_GATEWAY_SERIAL // Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender) #if F_CPU == 8000000L #define MY_BAUD_RATE 38400 #endif // Enable inclusion mode #define MY_INCLUSION_MODE_FEATURE // Enable Inclusion mode button on gateway #define MY_INCLUSION_BUTTON_FEATURE // Set inclusion mode duration (in seconds) #define MY_INCLUSION_MODE_DURATION 60 // Digital pin used for inclusion mode button #define MY_INCLUSION_MODE_BUTTON_PIN 3 #define MY_REPEATER_FEATURE //------------------------------------------------------- //------------------------------------------------------- #include <Wire.h> #include <MySensors.h> #include <SPI.h> #include <MFRC522.h> #include <Bounce2.h> //------------------------------------------------------- //------------------------------------------------------- #define BUTTON_PIN A9 Bounce debouncer = Bounce(); bool y = true; //------------------------------------------------------- //------------------------------------------------------- void setup() { Wire.begin(); // join i2c bus (address optional for master) pinMode(BUTTON_PIN, INPUT_PULLUP); // After setting up the button, setup debouncer. debouncer.attach(BUTTON_PIN); debouncer.interval(15); Serial.begin(9600); } //------------------------------------------------------- //------------------------------------------------------- void loop() { if (debouncer.update()) { // Get the update value. int value = debouncer.read(); // Send in the new value. if(value == LOW) { Wire.beginTransmission(10); // transmit to device #8 Wire.write(y); // sends one byte Wire.endTransmission(); // stop transmitting unsigned char statuss = Wire.endTransmission(); Serial.println (statuss); } } } //------------------------------------------------------- Kod dla Slave : //------------------------------------------------------- #include <Wire.h> //------------------------------------------------------- //------------------------------------------------------- volatile bool b; //------------------------------------------------------- //------------------------------------------------------- void setup() { Wire.begin(10); // join i2c bus with address #8 Wire.onReceive(receiveEvent); // register event Serial.begin(9600); // start serial for output } //------------------------------------------------------- //------------------------------------------------------- void loop() { if (b == true) { Serial.print(b); b = !b; } delay(100); } //------------------------------------------------------- //------------------------------------------------------- // function that executes whenever data is received from master // this function is registered as an event, see setup() void receiveEvent(int howMany) { while (0 < Wire.available()) { bool c = Wire.read(); // receive byte as a character b=c; } } //-------------------------------------------------------
  28. 1 punkt
    Cześć, prosto możesz to zrobić korzystając np. z bibliteki "Timer1" lub "Timer3" dla Arduino. Możesz sobie ustawić, co jaki czas ma być wywoływana procedura obsługi przerwania timera i w tej procedurze sprawdzać, czy piny zwarte, czy nie i inkrementować odpowiednie liczniki. Tutaj masz taki prosty szkielet programu (nie piszę całego kodu , aby nie psuć Ci radości z tego, że zrobiłeś coś sam): #include "TimerThree.h" const int PulsePin = 2; void setup() { pinMode(PulsePin, INPUT); Timer3.initialize(20); // initialize timer3, and set a 20 us second period Timer3.attachInterrupt(tim3Callback); // attaches callback() as a timer overflow interrupt } void tim3Callback() { //Tu sprawdzasz stan pinów i inkementujesz liczniki, oraz kończysz pomiar } void loop() { //Tu np. ustawisz zmienną która rozpoczyna pomiar } A tutaj linki do biblioteki: https://playground.arduino.cc/code/timer1 https://code.google.com/archive/p/arduino-timerone/ Oczywiście możesz zmieniać rozdzielczość pomiarów (czas co jaki jest wywoływane przerwanie od timera), oraz sposób dołącenia styków kontaktronu (możesz wykorzystać np. wewnętrzne rezystory PULLUP Arduino - zmieniasz wtedy typ wejścia na: INPUT_PULLUP a kontaktron podłączasz do masy). Jest też wiele innych bibliotek do obsługi timerów w Arduino. Pozdrawiam
  29. 1 punkt
    Dziękuję. Już się nad tym zastanawiałem i pewnie dałoby się bardziej. To znaczy gdyby EPROM-y zastąpić równoległymi EEPROM-ami i napisać jakiś bootloader, to teoretyczne wsad można by ładować przez RS232. Oczywiście wówczas UART musiałbym znaleźć na płytce trochę miejsca dla odpowiedniego kontrolera i konwertera poziomów. Stwierdziłem jednak, że to gra niewarta świeczki, bo i tak nie osiągnąłbym dostatecznego podobieństwa do współczesnego Arduino, o kompatybilności programowej nawet nie wspominając. Powód jest prosty - nie dosyć, że pakiet cc65 nie posiada kompilatora C++, to jeszcze pisząc w czystym C trzeba się liczyć z paroma kompromisami. Pozostaję więc przy klasycznej metodzie programowania EPROM-ów.
  30. 1 punkt
    Cześć, mam kilka uwag do instalacji narzędzia do syntezy układów FPGA Intela - "Quartus Lite Edition" w wersji 18.1 (najnowszej). Software jest do pobrania pod adresem: http://fpgasoftware.intel.com/18.1/?edition=lite&platform=windows&download_manager=direct Gdy klikniemy link "Operating System Support" widać, że Windows 10 jest w pełni wspierany przez tą wersję Quartus'a: http://fpgasoftware.intel.com/requirements/18.1/ Aby pobrać oprogramowanie trzeba założyć darmowe konto na stronie WWW Intela. Pobrałem potrzebne mi pliki: sam "Quartus Lite Edition" oraz "Model-SIM Starter Edition", a także pliki z obsługą układów FPGA (Cyclone IV, Cyclone V, Cyclone 10LP, Max10). Sprawdziłem sumy kontrolne MD5 pobranych plików, wszystkie się zgadzały. Próbowałem uruchomić instalator programu i ten się uruchamiał, oraz zaczynał rozpakowywać pliki - niestety pod dojściu paska postępu do około 40-tu procent program przestawał odpowiadać i się zawieszał. Podejmowałem około czterech prób (czekałem długi czas na "odwieszenie się" programu - bez powodzenia). Dopiero po wyłączeniu wszystkich rodzajów ochrony w czasie rzeczywistym dla "Windows Defendera" byłem w stanie bezproblemowo zainstalować program. Gdyby ktoś z was miał podobne problemy podczas instalacji Quartus'a pod Windows 10, należy wyłączyć ochronę w czasie rzeczywistym systemu plików przez "Windows Defender". Pozdrawiam BTW: natomiast pod Linux'em Mint 18.1 Serena (Desktop Mate) instalacja "Quartus lite" 18.1przebiegła gładko bez żadnych problemów (i co dziwne zajęła o wiele mniej czasu niż pod Windows 10)
  31. 1 punkt
    Cześć, nie chciałem wywołać wojny. Nie twierdzę, że rozwiązanie jakie przedstawiłem jest lepsze od tego, które opisuje kolega Ethanak. Zdaję sobie sprawę, że jest przekombinowane i wymaga sporo programowania, co w przypadku kolegi, który jest początkujący może stanowić problem. Potraktujmy tą propozycję, jako jedną z alternatyw i tyle. Pozdrawiam wszystkich BTW: a głównie chodziło mi o wyeliminowanie płytki z systemem operacyjnym. Próbowałem kiedyś zrobić urządzenie bezobsługowe na innym SBC (Cubieboard II+ Linux) i co jakiś czas urządzenie potrafiło się zawiesić. Musiałem dodać zewnętrzny "watchdog timer", aby było OK. Wiem, że teraz można wykorzystać wewnętrzny watchdog wbudowany w jądro Linuxa, ale nadal jest to trochę dodatkowej roboty.
  32. 1 punkt
    No to ostatnia rzecz, jaka przychodzi mi do głowy, to wgranie jakiegoś wcześniejszego firmware'u (albo jakiegoś kodu z miganiem diodą). Ale to jest bez sensu, bo problem jest z samym wgrywaniem softu, a nie z jego uruchomieniem Dziwne, żeby procek tak sobie umarł. Słaba sprawa. Ale jak procesor jest w jakiejś ludzkiej obudowie (np. TQFP), to bez problemu powinieneś wymienić
  33. 1 punkt
    Jak by tu powiedzieć żeby nie obrazić... RPi 3, 2 i zero mają dokładnie takie same wyjścia audio (tyle że zero ma to wyprowadzone na listwę, a 2/3 mają takie fajne gniazdko).
  34. 1 punkt
    Hej, ja też będę trzeźwy i nawet nie będę miał kaca Nie upieram się, że moje rozwiązanie jest lepsze. Tanie RPI zero nie ma wyjścia audio i trzeba je dorobić. Musi ono mieć odpowiednią jakość. RPI 3 lub dwa (które takie wyjście posiada) jest droższe, około 160 PLN. Rozwiązanie, które przedstawiłem zawiera się w kwocie około 65 PLN. Ale trzeba się trochę pomęczyć z programem, co jest wadą przyznaję, ale za to nie trzeba tam systemu operacyjnego co według mnie jest zaletą. Pozdrawiam
  35. 1 punkt
    wiesz co... siedzę teraz w knajpie, kończę piwo i idę do domu. przystanek mam jakieś 150m od baru, więc wezwę taksówkę. potem przejadę trzy przystanki, wyląduję 150m od domu, więc wezwę taksówkę... ja jednak wolę przejść te 300m na skróty z buta. szybciej i taniej. podłączenie głośnika do rpi to w najprostszym przypadku jeden tranzystor i parę elementów pasywnych. jeśli twoim zdaniem rozwiązanie z bt będzie lepsze... cóż, ja piję piąte piwo i jutro będę trzeźwy. a ty?
  36. 1 punkt
    Tu masz odbiornik Bluetooth i wzmacniacz stereo. Możesz poprzez Bluetooth wysyłać do niego pliki muzyczne do odsłuchania - możesz to zrobić także korzystając z RPI, czy np. z taniego modułu z ESP32 (który ma wbudowany Bluetooh): https://www.banggood.com/WeMos-ESP32-WiFi-Bluetooth-Development-Board-Ultra-Low-Power-Consumption-Dual-Core-ESP-32-ESP-32S-p-1175488.html?rmmds=search&cur_warehouse=CN Potrzebne jest podłączenie shieldu do obsługi karty SD (za kilka złotych) do tej płytki. Pozdrawiam
  37. 1 punkt
    Cześć, przeczytałem opis urządzenia i na jego podstawie dokonałem wyboru docelowego toru audio. Do tego można łatwo dodać np. Arduino z shieldem do karty uSD i tanim modułem Bluetooth do wysyłania plików. Za to cały tor audio ze wzmacniaczem (dość dobrej jakości) masz gotowy. Nie wiem, czy to jest na temat? W mojej ocenie tak, ale możesz mieć inne zdanie. Pozdrawiam
  38. 1 punkt
    Cześć, dlaczego nie chcesz wybrać gotowca? Np. coś takiego: https://www.banggood.com/50W50W-TDA7492-CSR8635-Wireless-Bluetooth-4_0-Audio-Receiver-Amplifier-Board-NE5532-Preamp-p-1109777.html?rmmds=search&cur_warehouse=CN Tutaj masz rozwiązanie z Bluetooth (przesyłasz pliki) i od razu wzmacniacz (wystarczy tylko podłączyć dwa głośniki). Do tego potrzebujesz aplikacji na Androida do wyboru plików muzycznych i wysłanie po Bluetooth (np,. na telefon). Cena około 34 PLN (z przesyłką). Pozdrawiam
  39. 1 punkt
    Spalenia przetwornika. Potrzebujesz przynajmniej tranzystor, bo głośnik jednak bierze trochę prądu. Te gotowe moduły już mają taki tranzystor na pokładzie.
  40. 1 punkt
    Czy tylko ja widzę w tym zdaniu sprzeczność? Wydaje mi się, że do przygotowania produktu zdatnego do produkcji masowej jednak pewna wiedza jest niezbędna - i raczej nie zdobędzie się jej pytając o wszystko na forach internetowych.
  41. 1 punkt
    Ja to robiłem i rzeczywiście, jakość jest dość słaba, choć do tego, do czego tego używałem (dźwięk do gier komputerowych retro) zupełnie wystarczająca.
  42. 1 punkt
    Oryginalne arduino uno rev3 według schematu schemat arduino uno rev3 ma zamontowany rezonator ceramiczny o dokładności 0,5%, więc trudno się dziwić osiąganej dokładności. rezonator ceramiczny arduino @narbej zobacz jaki rezonator jest u Ciebie. Paradoksalnie tanie klony arduino z rezonatorem kwarcowym mogą być dokładniejsze od oryginałów.
  43. 1 punkt
    Widzę, że nawet data ci się z Elektrody przekleiła. Trochę wstyd z takim lenistwem. Odpowiedzi, które dostałeś na https://www.elektroda.pl/rtvforum/topic3536744.html ci nie odpowiadają, czy nawet tam nie zajrzałeś? A do tej biblioteki się w końcu wybrałeś, tak jak ci poradzili, czy lenistwo nie pozwala?
  44. 1 punkt
    Nie wiem czy da się stworzyć symulację takiego urządzenia, ale spokojnie można zrobić w oparciu o Arduino. Za pomocą czujnika nacisku np. takiego https://botland.com.pl/pl/czujniki-nacisku/753-czujnik-sily-nacisku-fsr-402-2kg-okragly-13mm.html?search_query=czujnik+nacisk&amp;results=59 wykryjesz kieliszek oraz czy jest pełny. Pompa cieczy np. taka: https://abc-rc.pl/product-pol-11823-Mini-Pompa-do-wody-DC-3-12V-6W-pompka-cieczy-duza-wydajnosc.html. Do tego silnik krokowy jak pisałeś lub serwo (będzie prościej i taniej) ale obrót tylko o 180 stopni.
  45. 1 punkt
    Podstawowe pytanie to takie, czy zbieranie danych do modelowania silnika robiłeś, gdy robot stał na podłożu? Czy raczej koła kręciły się w powietrzu? Druga sprawa to ta odpowiedź skokowa mocno mi się nie podoba: 1) Zbyt mała częstotliwość próbkowania (w jeden okres próbkowania jest przejście od 0rad/s do praktycznie prędkości ustalonej, bez sensu) 2) Czemu najmniejsza zmiana mierzonej prędkości kątowej (rozdzielczość) to aż 20rad/s?
  46. 1 punkt
    Zgodzę się z @narbej, że takie poradniki w formie „zrób to sam” są niezastąpionym źródłem wiedzy dla osób początkujących. Trudno też nie przyznać racji Trakerowi, który staje w obronie czasu osób bardziej doświadczonych. Spróbuję taki poradnik popełnić. Sumo niskobudżetowy Projekt realizowali uczniowie klas pierwszych LO PB w Białymstoku w ramach zajęć z robotyki. Po kilku godzinach z podstaw programowania (miganie diodami, przyciski, serwo) przyszedł czas na pierwszego robota. Były to roboty sumo o wymiarach 15cm x 15cm. Projekt realizowany był w czasie 3 miesięcy (2 godziny tygodniowo). Założenia i cele Ograniczenie wiedzy teoretycznej do minimum. Oswojenie się z lutownicą. Zbudowanie i zaprogramowanie robota, którego koszt nie przekroczy 120 zł. Potrzebne części i materiały Zasilanie: Aby uprościć do minimum rozległy temat zasilania, zarówno silniki jak i elektronika zasilana była z 4 baterii AAA. Baterie umieszczone zostały w koszyczku z wyłącznikiem. https://abc-rc.pl/product-pol-8524-Koszyk-na-baterie-4xAAA-1-5V-koszyczek-z-pokrywka-i-wylacznikiem.html Podwozie robota: https://botland.com.pl/pl/podwozia-robotow/7243-chassis-round-2wd-2-kolowe-podwozie-robota-z-napedem.html?search_query=podwozie&results=80 Czujniki: Za jego pomocą szukamy przeciwnika: https://botland.com.pl/pl/ultradzwiekowe-czujniki-odleglosci/1420-ultradzwiekowy-czujnik-odleglosci-hc-sr04-2-200cm.html?search_query=czujnik+odleglosci&results=284 Aby robot wiedział, czy jest jeszcze na ringu użyjemy tych czujników przynajmniej jeden, ale proponuję cztery: https://botland.com.pl/pl/czujniki-odbiciowe/8244-czujnik-odleglosci-odbiciowy-tcrt5000-33v5v-8mm.html?search_query=czujnik+odbiciowy&results=88 Sterownik silników: https://botland.com.pl/pl/sterowniki-silnikow-moduly/10666-sparkfun-tb6612fng-dwukanalowy-sterownik-silnikow-15v12a-ze-zlaczami.html?search_query=sterownik+silnikow&results=624 Arduino: https://abc-rc.pl/product-pol-9588-NANO-V3-0-16MHz-USB-ATmega328P-CH340-Klon-piny-do-zalutowania-kompatybilny-z-Arduino.html – może i klon ale cena super. Inne: płytka uniwersalna - https://botland.com.pl/pl/plytki-uniwersalne/2745-plytka-uniwersalna-dwustronna-50x70mm.html?search_query=plytka+uniwersalna&results=45 goldpiny żeńskie - https://botland.com.pl/pl/gniazda-szpilkowe-goldpin/1103-listwa-zenska-goldpin-1x40-raster-254mm.html?search_query=goldpin&results=928 – potrzebujemy dwie sztuki Etap pierwszy – podwozie Myślę, że ze złożeniem tej konstrukcji nikt nie będzie miał problemów. W zestawie znajdują się wszystkie potrzebne śrubki i dystanse. Przed przykręceniem silników proponuję przylutować do nich przewody o długości około 15 cm. Można, to zrobić później, ale utrudnione jest dojście lutownicą. W naszych robotach zrezygnowaliśmy z jednego koła obrotowego, zastępując je wydrukowanym pługiem. Jeśli nie macie dostępu do drukarki to taki pług można zrobić wykorzystując na przykład zawias i płaskownik aluminiowy. Etap drugi – sterownik silnika i Arduino Zaczynamy od przylutowania goldpinów męskich do Arduino i sterownika silników. Tniemy goldiny żeńskie tak aby uzyskać dwie listwy po 15 i dwie po 8 sztuk. Wpinamy z Arduino i sterownik silników, a następnie lutujemy do płytki uniwersalnej. W tym miejscu warto zastanowić się nad rozmieszczeniem tych dwóch elementów na płytce. Pod uwagę trzeba wziąć piny Arduino wykorzystane przez sterownik. Do sterowania pierwszym silnikiem służą wejścia PWMA, AI1 oraz AI2, natomiast drugi silnik to PWMB, BI1 i BI2. O tym, że PWM posłuży do regulacji prędkości i na których pinach Arduino mamy taką możliwość nie muszę pisać bo wszyscy migaliśmy diodami przerabiając kurs Forbota. Proponuję następujące połączenie: Taki wybór pinów pozwoli oba elementy umieścić na płytce uniwersalnej obok siebie i połączenie ich bez użycia przewodów, po prostu łącząc je cyną. Dlaczego korzystamy z goldpinów i płytki uniwersalnej? Powody są dwa. Gdy znudzi się zabawa robotem wyciągniemy Arduino i sterownik do kolejnego projektu. W przypadku awarii łatwo podmienić zepsuty element. Kolejny pin sterownika to STBY – służy do włączenia (stan wysoki) i wyłączenia (stan niski) sterownika. Można go połączyć z pinem Arduino i uruchamiać programowo, ale my połączymy ten pin z 5V. Po włączeniu robota sterownik będzie od razu działał. Pin VM to zasilanie silników można podać napięcie do 12V, natomiast VCC to zasilanie modułu sterownika wymaga 5V. W naszym robocie elektronika i silniki zasilane będą bezpośrednio z koszyka z bateriami więc łączymy te piny ze sobą i z 5V na Arduino. Ostatnie połączenie to GND na sterowniku i Arduino. Wystarczy połączyć tylko jedno. Silniki przylutowujemy do wyjść sterownika A01 i A02 (jeden silnik) B01 i B02(drugi silnik). Etap trzeci – zasilanie Tu będzie najprościej jak się da. Przewód czerwony od koszyczka przylutowujemy do płytki uniwersalnej i łączymy do 5V na Arduino ( które połączone jest z STBY, VM, VCC). Natomiast czarny przewód łączymy z GND bez różnicy czy sterownik czy Arduino. Etap czwarty – test silników Program do sprawdzenia pierwszego silnika: Jeśli wszystko działa, to testujemy zmianę prędkości. Powtarzamy wszystko dla drugiego silnika. Uczymy robota jeździć po obwodzie kwadratu, a następnie robić ósemki. Etap piąty – czujnik odległości Czujnik HC-SR04 składa się z nadajnika i odbiornika ultradźwięków. Aby go uruchomić na pin Trig przez 10 mikrosekund podajemy stan wysoki. Więcej o czujniku w kursie Forbota: https://forbot.pl/blog/kurs-arduino-czujnik-odleglosci-hc-sr04-funkcje-id4290 . Do połączenia czujnika potrzebujemy goldpinów żeńskich (4 sztuki). Łączymy czujnik wg tabeli: Program do czujnika: Etap szósty – czujnik odbiciowy Czujnik TCRT5000 ma cztery wyprowadzenia, my wykorzystamy trzy z nich. Oczywiście zasilanie VCC i GND łączymy z odpowiednimi pinami na płytce uniwersalnej. Pozostają dwa piny D0 i A0. Można wybrać czy chcemy z czujnika uzyskać sygnał cyfrowy (D0) czy analogowy (A0). My podłączymy czujnik z pinem analogowym. Łączymy więc A3 (Arduino) z A0 (czujnik). Sprawdzamy czy czujnik działa prostym programem: Analogicznie sprawdzamy drugi, trzeci i czwarty czujnik (oczywiście każdy czujnik do innego pinu np. A1, A2, A4). Jeśli wszystko działa, pozostaje tylko złożyć wszystkie napisane programiki w jedną całość i testować robota w boju. Nie dam gotowca, ale na poniższych filmikach widać, że się da. Powodzenia. Skrócona wersja tego poradnika: https://lopbrobo.wixsite.com/robotyka/project05 Walki naszych robotów: https://www.youtube.com/watch?v=kFH3r2OmNXw https://www.youtube.com/watch?time_continue=2&v=jIwWJXGZW9o https://www.youtube.com/watch?v=YKbCYfTKEVU https://www.youtube.com/watch?v=RrMoUOdVV6c
  47. 1 punkt
    Jeśli chodzi o rezystory to w zasadzie nie ma znaczenia z której strony diody je postawisz. Zadaniem rezystora jest "dławienie" natężenia prądu. Wyobraź sobie że na tej płytce masz 5 obwodów po jednym na diodę. Wkładając rezystor do takiej pętli sprawiasz, że zmniejsza się "siła" prądu płynąca przez diodę z konkretnej pętli. Autorzy ćwiczenia mieli na pewno kilka celów w stworzeniu tego ćwiczenia które przynajmniej ja wywnioskowałem. jeśli chodzi o lutowanie jako takie- to ćwiczenie lutowania w "ścisku" i określanie kolejności wlutowywanych elementów. Jeśli chodzi o część teoretyczną to pokazanie jak wygląda układ/ ciąg różnie połączonych rezystorów i przećwiczenie jaki liczyć ich sumaryczną rezystancję. Z praktycznego punktu widzenia istnieją rezystory o dużych oporach i można by zastosować taką krowę ale są sytuacje kiedy lepiej użyć ciągu maluszków- kiedy mamy mało miejsca na płytce. Albo kiedy szukamy jakiejś nietypowej rezystancji dla naszego układu.
  48. 1 punkt
    Niestety - też potrzebuję czegoś podobnego i nie bardzo mogę znaleźć (nie interesuje mnie przesyłka z Chin za trzy miesiące ani kupienie w USA modułu za 5 USD i płacenie 25 za przesyłkę). Kombinowałem kiedy z TDA1543 ale (pomijając fakt że też ciężko to dostać) nigdy mi nie wyszło. Ale może ja coś spaprałem? W każdym razie jest to jakaś droga.
  49. 1 punkt
    Oczywiście obowiązkowo kupujesz XT60 a potem kable. Tutaj liczy się prąd. Możesz przyjąć, że zupełnie bezpieczną granicą są 3A/mm2. Dalej już łatwo: chcesz przepuścić 10A to potrzebujesz przekroju ponad 3mm2. Pułap ten wynika z rezystancji i związanych z nią strat mocy zamieniającej się wprost na grzanie przewodu. Jeśli nie upychasz kabli prądowych w jakichś wąskich kanałach obok siebie i nie otaczasz ich termokurczami itp to możesz podnieść tę granicę nawet dwukrotnie, choć trochę szkoda cennej energii z akumulatora na grzanie przewodów. W wyjątkowych przypadkach można pojechać w kosmos: dron biorący w szczycie 100A ma kable może 5mm2, ale tam wszystko jest na wierzchu, owiewane przez strumień powietrza ze śmigła a izolacje są obowiązkowo silikonowe a nie jakieś PVC. Jeżeli nie pracujesz z napięciami > 100V ta w zasadzie możesz nie zwracać uwagi na grubość izolacji. Każdy w jakimś plastiku będzie dobry. W montażu zasilań musisz zwracać uwagę na eliminację możliwości pomyłki w normalnej eksploatacji. Dlatego złącza akumulatorów muszą być polaryzowane by ich nie odwrócić. Jeśli w jakimś module (np. driverze silnikowym) masz przyłącze ze śrubkami no to trudno, podłączasz tam swoje przewody raczej na stałe. Zachowuj rozsądek w kolorach: masy niech będą zawsze czarne, brązowe lub niebieskie i pomaluj też kostkę flamastrem tak, by ciemno było po stronie masy. Żadnych dwóch różnych zasilań nie puszczaj tym samym kolorem itd itp, chyba sam rozumiesz co mam na myśli. Pierwszego dnia wszystko pamiętasz a potem to musisz działać i bronić się samo. Nowy, modelarski akumulator LiPol bez zabezpieczeń podłączony odwrotnie daje 200A a to załatwia wszystko.
  50. 1 punkt
    Dziękuję za porady. Faktycznie, sterowanie jasnością przez OE działa bez zarzutu, kondensatory wymienię. W pierwszym poście jest link do filmiku na YT, który pokazuje jak to obecnie wygląda w działaniu. Załączam jeszcze zdjęcia: Faktycznie, pobór prądu przydałoby się zmniejszyc, w tej chwili bez zasilacza nie ma opcji, zasilanie bateryjne dla zegarka byłoby dużo lepsze. Pytanie czy jeśli nigdy nie miałem lutownicy w ręku to czy dam radę z LEDami SMD? Obniżenie zużycia energii przez kontroler też w takim razie sprawdzę. Jeśli chodzi o docelowy wygląd to jeszcze tego do końca nie przemyślałem, ale raczej nie chciałbym tego wrzucać do zwykłej plastikowej obudowy. Podoba mi się na przykład taki projekt: Alternatywnie zastanawiałem się czy jestem temu w stanie nadać steampunkowy wygląd.
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×
×
  • Utwórz nowe...