Skocz do zawartości

MirekCz

Użytkownicy
  • Zawartość

    1219
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    50

Wszystko napisane przez MirekCz

  1. Nie jestem pewien, ale jak dla mnie za wcześnie włączyłeś DMA. Ja używam: ADC_Cmd(ADC1,ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); ADC_DMACmd(ADC1,ENABLE); ADC_StartOfConversion(ADC1);
  2. 1. Skoro rozumiesz miganie diodą to tutaj potrzebujesz coś praktycznie takiego samego.. tyle, że na przerwaniu - wersja optymalna. Zasada działania: a) Robisz jakiś licznik, który liczy poprzez przerwanie czas np. zlicza 1 co 10ms. b) Do warunki if (radio.available) dodajesz kasowanie licznika, czyli licznik = 0; c) W pętli loop na samym końcu (za warunkiem if (radio.available)) robisz coś w stylu if ( licznik > 100 ) { wyłącz silnik... } Czyli jak licznik zliczy do 100 * 10ms czyli 1000ms i nie będzie nowego pakietu z danymi to automatycznie wyłączymy silniki. Czas itd. oczywiście możesz dobrać do swoich potrzeb. 2. Prostszy sposób to zamiast przerwań oszukać system i używać pętli dodając do niej jakieś dosyć stałe, znane opóźnienie. Ma to swoje wady, ale nie będę się rozpisywał... Kod takiej zmiany to mniejwięcej ( sama pętla loop ) uint8 licznik = 0; /* definiujemy zmienną na początku */ void loop(void) { delay(10); // zakładam, że to jest w ms, więc każda pętla to min. 10ms if (licznik++>25) // pętla 10ms * 25 = 250ms { esc.writeMicroseconds(1500); // nie wiem jaka wartość to zatrzymanie silnika, ale przyjme 1500 licznik = 25; // nie chcemy, żeby licznik liczył dalej, bo mógłby się przepełnić } // if there is data ready if ( radio.available() ) { licznik = 0; // tutaj kasujemy wartość licznika, bo jest połączenie bool done = false; int ESC_value; while (!done) { // Fetch the payload, and see if this was the last one. done = radio.read( received_data, num_received_data ); ESC_value=received_data[0]*10; //Multiplication by 10 because the ESC operates for vlues around 1500 and the nRF24L01 can transmit maximum of 255 per packet esc.writeMicroseconds(ESC_value); Serial.println(ESC_value); servo.write((received_data[1])); //Serial.println(received_data[1]); } } }
  3. Potem podzielmy to na bogatych i biednych amatorów oraz bogatych i biednych studentów... to bez sensu. Prawda jest taka, że jak zrobisz jakiegoś dobrego robota ( a idąc rozsądnie w 500zł np. dla LF możesz zamknąć się ze wszystkim na naprawdę wysokim poziomie ) to możesz zdobyć też sponsora itd...
  4. Poczytaj też opisy na forbocie.. są m.in. o kondensatorach itd.
  5. Wystarczy je czymś oddzielić. Soczewki miałyby swoje plusy, ale jest to dużo bardziej skomplikowane mechanicznie. Na zwykłych diodach/fotodiodach idealnym rozwiązaniem była koszulka termokurczliwa, która pięknie obcinała widziany zakres.
  6. Robot duży, pobór prądu przez silniki ogromny więc z poborem prądu przez elektronikę nie ma problemu. Najprościej postawić jakiś komputer ( w tej chwili tablet z niezłym atomem i windowsem dostaniesz za 500zł? ), połączyć to po wi-fi z drugim komputerem i dopisać soft. Możesz wykorzystać kamerkę takiego tabletu/notebooka, albo dodać dodatkową kamerkę USB itp. Ewentualnie raspberry + moduły do tego, ale szczerze mówiąc tablet/laptop lepiej wyjdzie ( masz wifi, ekran, kamerę usb, mocniejszy procesor, więcej ramu itd. itd. w podobnej cenie co goły raspberry z kilkoma bajerami ) Z wi-fi nie pobijesz rekordów odległości, a transmisja ma też swoje opóźnienia, ale nie sądzę, żeby to był jakiś problem dla Ciebie... zawsze jeszcze można wi-fi zamienić na transmisję lte / 3g i mieć robota sterowanego praktycznie wszędzie gdzie dochodzi sygnał komórkowy... tylko wtedy sygnał video jest większym problemem. Do laptopa po USB musisz dołączyć jakieś moduły, które dalej pociągną komunikację ze sterownikami silników i czujnikami. W najprostszym rozwiązaniu mogą to być gotowy moduły typu maestro z pololu i sterowniki silników https://www.pololu.com/category/94/pololu-simple-motor-controllers . Oczywiście przy tej ilości silników warto się rozejrzeć za jakimś tańszym rozwiązaniem ( arduino + prostsze sterowniki silników ). PS. 28 silników to megaaa dużo... warto by było wg. możliwości część zamienić na serwa, które są dużo prostsze do kontroli, ale to zależy co od nich wymagasz...
  7. Najprościej to robot ma guzik i na początku przed startem za każdym razem go kalibrujesz - czyli podchodzisz każdym czujnikiem do ściany i przyciskasz guzik. Program wtedy odczytuje wartość ADC poprawnego odczytania ściany, odlicza od tego jakąś konkretną wartość i to ustala jako próg. Na zawodach jednak przeważnie można sporo testować, zmieniać itd. i nie zabranie laptopa ze sobą to grzech...
  8. Chłodzenie do 40℃ nie ma żadnego znaczenia dla procesu. Z mojego doświadczenia ważny jest początek chłodzenia i zejście tak do powiedzmy 150℃. Ten fragment przy otwartych drzwiach powinien być dużo szybszy. Potem jak temperatura płytki zbliża się do temperatury otoczenia wymiana ciepła jest dużo mniejsza i tym samym proces wyrównywania temperatury bardzo zwalnia.
  9. Ty tak serio? Osoby po 40stce? Jak ktoś ma 40 lat i nie może nauczyć się obsługi internetu to b.słabo... Znam osoby, które mają >80lat i nie tylko korzystają z internetu, ale też instalują sobie windowsa 10 i nieźle radzą sobie z rozwiązywaniem różnych drobnych problemów ( albo wiedzą do kogo pójść po pomoc... ) typu załatwienie dostępu przez internet do rozliczeń za prąd itd. Z moich obserwacji główna bariera to strach. Niektóre osoby boją się, że "coś zepsują" i dlatego unikają komputerów / internetu.
  10. CRC32 nie ma jednej słusznej definicji. Spójrz w opis użytej przez Ciebie funkcji w C++ jaki wielomian wykorzystuje do obliczenia CRC32 i wtedy zaimplementuj to tak samo. Na necie są różne skrypty javascript itd. które pozwalają Tobie wybrać wielomian i policzyć z tego CRC32. W ten sposób łatwo sprawdzisz czy masz dobry wielomian.
  11. Przeszedłem podobną drogę i generalnie zabawa jest w robotyce itd., ale w naszym kraju jednak lepiej zarobisz jako programista. Jak umiesz dobrze programować i masz przynajmniej podstawy porządnego programowania ( czyli umiesz coś zaprojektować, a nie tylko wrzucić 10000 linii kodu do jednego pliku i jakoś działa ) to z pracą nie powinno być problemu. Jak znasz języki obiektowe i UMLa tym lepiej. Możesz wystartować w jakiejś mniejszej firmie, która nie ma zbyt wygórowanych wymagań ( i najlepiej żeby miała dobrego programistę od którego możesz się uczyć ), a potem już pójdzie gładko...
  12. 1. Pomiar prędkości rzędu 300 impulsów na sekundę to żaden problem... 2. Ze względu na metodę działania czujnik szczelinowy moim zdaniem zawsze będzie lepszy - o ile konstrukcja mechaniczna na to pozwala. Nie masz problemu z odbiciem ( zależnym od koloru itd. ) i dużo więcej światła z diody pada bezpośrednio na fototranzystor, więc trudniej taki sygnał zakłócić.
  13. Chcesz odczytać wartość z 4 potencjometrów ( jak rozumiem 2* joystick x/y ) a z wysyłanych danych wyraźnie widać, że robisz to z 6 potencjometrów ( powtarzają się sekwencję y/x 0/0 , y/x 349/338, y/x 327/321 ). Czyli pewnie błąd w kodzie pętli, ale kodu w całości nie zamieściłeś, więc nie mamy o czym debatować.
  14. Świetny przykład metody KISS ( keep it simple, stupid ). Zgrabna realizacja fajnego pomysłu. Można tylko gratulować!
  15. ehh... to się nazywa tablica. coś w stylu unsigned short wyniki[25]; unsigned char liczbaWynikow = 0; unsigned char pokazWynik = 0; unsigned char klawiszDwa = false; .... while ( klawiszDwa == false ) { if ( klawiszJedenZostalWcisniety ) { wyniki[liczbaWynikow++] = pobierzWynik(); if ( liczbaWynikow >=25 ) klawiszDwa = true; // pobralismy maksymalna liczbe wynikow } if ( klawiszDwaZostalWcisniety ) klawiszDwa = true; } i podobnie robisz przechodzenie po wynikach, tylko ze jak pokazWynik >= liczbaWynikow to pokazWynik = 0; zamiast klawiszDwa = true. Oczywiście potrzebne są jeszcze dodatkowe warunki typu ze nie da sie skonczyc trybu pomiarowego jak nie zrobilismy nawet jednego pomiaru itp. - tak jak potrzebujesz...
  16. Używałem takich rozwiązań i nigdy nie miałem problemu. Jaka częstotliwość PWM? Może zbyt wysoka...
  17. Tak, chodzi o większą wydajność prądową. W praktyce bateria ma pewną rezystencję wewnętrzną i pobieranie dużego prądu powoduje spadek napięcia. Czyli bateria 9V może mieć na wyjściu 9v jak pobierasz 1mA , ale tylko 4V jak pobierasz 50mA i dużo niżej jak pobierasz więcej prądu. Dodatkowo prąd ten zależy od stanu naładowania baterii ( czym bateria bardziej wyczerpana tym spadki napięcia przy danym prądzie będą większe ). Wystarczy spojrzeć na dokumentację producenta np. GP: http://pl.gpbatteries.com/images/prod/prod/batteries/manual/13G.pdf http://pl.gpbatteries.com/images/prod/prod/batteries/manual/1604G.pdf Jak widzisz rezystancję wyładowania dla baterii 1.5V podają przy rezystorze 2.2R ( czyli masz prąd rzędu 400mA przez 8h), natomiast dla baterii 9V rezystancję podają 180R ( czyli masz prąd rzędu 33mA przez 8h). Jak widać z paluszka średnio możesz dostać 10x większy prąd. Samo arduino pójdzie i z tego i z tego, ale jak dodasz coś prądożernego typu silnik czy większą ilość ledów to napięcie baterii 9V spadnie poniżej tego jakie powinieneś mieć na wejściu arduino i procesor się zresetuje.
  18. 1. O ile chcesz iść dalej na studia to zastanów się nad sensem technikum. Jest to rok więcej, a tą samą wiedzę potem będziesz w dużej części wałkował na studiach... 2. Do tego co chcesz teoretycznie mechatronika jest lepsza, ale tutaj dużo zależy od szkoły / prowadzenia kierunku. Mechatronika to tak jak kolega wspomniał przedmiot bardzo interdyscyplinarny i można bardzo dużo o niej powiedzieć i niczego wartościowego kogoś nie nauczyć. Z elektroniką jest pod tym względem łatwiej. Mimo wszystko tak jak wspomniałem patrz na poziom szkoły / prowadzonych zajęć a nie tylko na kierunek...
  19. 1. Spojrzałem na opis komend tego fibocom i tam w paczce masz indykator długości... nie warto by było z tego skorzystać? 2. Zrób przerwanie na timerze np. co 10 ms. W tym przerwaniu dodawaj tylko 1 do zmiennej ( zmienna typu volatile char lub podobnego, oczywiście nie dopuść do przepełnienia). Teraz w przerwaniu od uarta możesz tylko sprawdzać czy zmienna dodawana w timerze nie przekroczyła 40 ( czyli Twoich 400ms ) i jak przekroczyła to obrobić pakiet no i oczywiście wyzerować zmienną zliczaną w timerze. W ten sposób nie blokujesz przerwania.
  20. cHumanista: Ty tak poważnie? GD32F103xxx daleko różni się od STM32F103xxx z całym oznaczeniem identycznym... Główny problem to na ile te ich procki spełniają jakieś normy. To, że można je wsadzić w miejsce STMa jest fajne, ale kto zagwarantuje że ADC dobrze mierzy, procek po roku nie padnie itd. itp. ? A głupio stracić tydzień pracy na tym, że coś w procku nie działa i zaoszczędzić 1$ na jego zakupie...
  21. Skoro zdjęcie mojego modułu to czuje się wywołany do tablicy To, że jest SMD, nie ma nic do rzeczy jak chodzi o delikatność. Potężne nóżki, duże pola lutownicze i sam ciężar scalaka sugerują coś zupełnie innego. Niestety, nie polecam tego scalaka na tak wysokie napięcia. Prawdopodobnie byś go ubił ( chociaż dioda zabezpieczająca z pewnością by pomogła, ale nie wiem czy na pewno przeżyje przy zasilaniu 24V ). Scalak świetnie działa z zasilaniem 12V i wtedy 10A to żaden problem... Nie liczyłbym na gotowy scalak, szczególnie podwójny. Raczej rozejrzyj się za mostkami z zewnętrznymi tranzystorami...
  22. To jest oryginalny bootloader stm32 czy jakiś inny? Jak oryginalny to wiele razy zatrzymywałem flashowanie w połowie pracy i nigdy nie miałem problemów z kolejnym wgrywaniem kodu. Najłatwiej będzie ew. wymienić procesor ( koszt samego procka rzędu 12zł ) i powinien ruszyć ponownie.
  23. Pytanie jest postawione trochę na głowie, bo natężenie prądu przechodzącego przez opornik zależy od napięcia, więc żeby utrzymać stałe natężenie podczas zwiększania oporu musisz w jakiś sposób zwiększyć napięcie. Napięcie nie zwiększy się samo z siebie...
  24. W kierunku RFM22 wystarczy rezystor rzędu 10k. W kierunku ATMEGI teoretycznie nic nie trzeba, ponieważ poprawnie widzi napięcie od 3V... Oczywiście dla pewności można zastosować scalaki z translacją napięć.
  25. Tylko jaki jest sens używać mały procesor + mały expander zamiast średni procesor? O ile duża część pinów nie jest potrzebna w zupełnie innym i słabo dostępnym miejscu to nie widzę w tym sensu. Popatrz na tme, mają np. PCA9554PW, który jest dosyć zgrabnym rozwiązaniem...
×
×
  • Utwórz nowe...