Skocz do zawartości

moderin

Użytkownicy
  • Zawartość

    17
  • Rejestracja

  • Ostatnio

Wszystko napisane przez moderin

  1. Dziwna sprawa, jakby to był stały offset, to po obróceniu o 180 stopni powinno być mniej niż po obróceniu o 90. Inne osie działają? W sensie jest-1G i 1G jak je obracasz? Daj znać jak coś wymyślisz, sam ciekaw jestem
  2. A jak obrócisz o 90? Uwzględniasz w rozważaniach że 1G to przyspieszenie ziemskie, nie? Jaka jest ta wartość po obróceniu o 180? Jaki zakres ustawiłeś, 8G?
  3. Runcam ma wyjście video chyba, nie musisz drugiej do FPV kupować... Z zamawianiem z chin silników/regulatorów/śmigieł bym uważał, bo jak ci się coś rozwali to kupowanie pojedyńczych sztuk/części z chin może być tak średnio opłacalne. Śmigieł kup co najmniej kilka zestawów, bo rozwalisz . Zwłaszcza jak zamierzasz się tym ścigać. Każdy pilot musi czasami drzewko zaliczyć... Co do wszelkich urządzeń radiowych musisz sie zorientować czego możesz używać w Polsce. Nadajnik który podałeś ma moc konfigurowalną do 1W, nwm czy przypadkiem maksymalna moc na 5.8 dozwolona w Polsce to nie jest 25mw... Tu sie nie znam, poczytaj sobie
  4. Jak zasilasz Arduino, masz masy połączone z VNH? I jak nim sterujesz? Jakbyś dał jakieś wycinki kodu byłoby łatwiej . To ma być taki przepływowy ochładzacz wody? Ta woda tam cały czas się zmienia czy stoi? Jak ma dążyć do utrzymania konkretnej temperatury przydała by się jakaś informacja zwrotna, czyli czujnik temperatury jakiś. Wtedy w zależności od tego czy temperatura wody jest niższa czy wyższa od żądanej mógłbyś po prostu ogniwo włączać na 100% bądź wyłączać. Taki termostat jak w piekarniku. I co tam robią te tranzystory na płytce stykowej (bądź inne urządzenia, nie widać napisów)?
  5. Gdybyś chciał zrobić ten program bardziej profesjonalnie powiedzmy, powinieneś mieć całą transmisję na przerwaniach. Czyli atmega większość czasu zajmuje się sterowaniem diodami, a gdy odbiornik IR zmieni stan na wyjściu (wejściu atmegi), twój mikro-kontroler na chwilę przerywa sterowanie diodami, liczy co trzeba i znów wraca do sterowania diodami. Gdybyś to zrobił w ten sposób, wszystko by działało idealnie. Twoje funkcje mogłyby mieć dalay() w środku. Generalnie kod wyglądałby tak: volatile int tryb; // [Kod przerwań] void loop() { switch(tryb) { case 1: // [funkcja trybu 1] break; case 2: // [funkcja trybu 2] break; // itd. } } Kod wykonuje funkcje danego trybu. Jeśli wciśniesz przycisk na pilocie przerwana zmienią zmienną tryb i atmega zacznie wykonywać funkcje innego trybu. Problem w tym że wtedy musiałbyś sam to liczyć w sensie biblioteki nie wykorzystasz. Robiąc to na bibliotece musisz zadbać żeby co chwila wywoływać rc5.read(), bo on nie ma przerwań tylko ciągle sprawdza czy pin zmienił stan. Na maksa nie efektywne. Ale za to proste. To co ci proponowałem w poprzednim poście (z zapalaniem i gaszeniem) to miał być test czy biblioteka nadal będzie działać jesli pomiędzy kolejnymi wywołaniami rc5.read() coś zrobisz - czyli minie pewien czas. Wygląda na to że pomiędzy nimi możesz coś zrobić - jeśli zajmie mało czasu. digitalWrite() to jest chwila, delay() to są wieki. Więc: void loop() { rc5.read(&toggle, &address, &command) switch(command) { case 1: // tu możesz wstawić funkcje odpowiedzialną za tryb 1 break; case 2: // tu możesz wstawić funkcje odpowiedzialną za tryb 2 break; case 3: // tu możesz wstawić funkcje odpowiedzialną za tryb 3 break; } } ALE: Te funkcje nie mogą zajmować dużo czasu. Jeśli zajmą go za dużo, pin odbiornika może zmienić stan, a atmega tego nie zauważy - bo wykonuje wciąż twoją funkcje a nie rc5.read(). I w ten sposób zdekoduje sygnał źle, bądz nie zdekoduje. Więc: żadnych delay-ów! Jeśli chcesz żeby funkcja na przykład ściemniała diody płynnie, nie rób pętli z delay(), tylko spraw by funkcja za każdym wykonaniem wywoływała analogWrite z miejszą wartością. To nie jest specjalnie profesjonalne podejście - w sensie wstawianie czegoś między rc5.read(). Ale nie mam innego pomysłu jak to zrobić bez przerwań. Jeśli twoje funkcje będą dostatecznie szybkie, powinno działać.
  6. Trochę się wczytałem w te podczerwienie i wygląda na to że faktycznie będzie trochę kombinowania. Kod który ci podałem nie będzie działał z twoimi funkcjami. Czyli źle ci podałem . Zamysł biblioteki RC5 jest chyba taki że wywołujesz rc5.read() jeden po drugim aż przyjdzie komenda. Wtedy robisz co chcesz na chwile przerywając "czuwanie" i znów zaczynasz wywoływać rc5.read() w pętli. I to musi być wywoływane jeden po drugim bo on ciągle obserwuje ten pin od czujnika. Sygnał to ileś zmian tego pinu, które on musi "zauważyć". Więc kod co ci proponowałem nie będzie działał z twoimi funkcjami bo masz tam delay() co chwile, czyli atmega sobie czeka, pin sie zmienia, a biblioteka tego nie widzi. Możesz spróbować zrobić tak na razie: void loop() { rc5.read(&toggle, &address, &command) switch(command) { case 2: digitalWrite(diodyLED, HIGH); break; case 3: digitalWrite(diodyLED, LOW); break; } } Powinien włączać i wyłączać diody na 2 przyciski (z pamięcią). Jak będzie działać znaczy że tak krótki odstęp między rc5.read() mu nie przeszkadza, można wtedy kombinować jak to dalej robić.
  7. Przy zbyt małym nie uszkodzisz, będzie słabiej świecić. Bylebyś tych 5A nie przekroczył. Co to za przetwornica? To jest regulacja natężenia czy maksymalnego natężenia?
  8. Może coś w tym stylu: int tryb; // aktualny tryb void loop() { if(rc5.read(&toggle, &address, &command)) { switch(command) { // tutaj zależnie od tego co dostaniesz zmieniasz (bądz nie) zmienną tryb } } switch(tryb) { // tutaj zależnie od zmiennej tryb dajesz funkcje odpowiedzialne za dane tryby, dioda(), dioda1() itp, ale bez powtórzeń } } Jeśli nie odebrano komendy, zmienna tryb się nie zmienia i program w następnym switchu będzie kontynuował ten tryb który jest ustawiony. Nie masz powtórzeń wewnątrz funkcji, rolę powtórzeń pełni loop(), więc w trakcie możesz zmienić tryb. Nie wiem czy o to ci chodziło, jak nie spróbuj opisać trochę bardziej szczegółowo co to ma robić, w sensie jaki efekt ma być (fizycznie, nie program).
  9. Natężenie będzie zależeć od tego co tam podłączysz, co nie? Czyli jeśli nic do przetwornicy jeszcze nie podłączyłeś, to aktualne natężenie to 0. Po prostu ustaw na przetwornicy dobre napięcie, pasek weźmie wtedy tyle prądu ile będzie potrzebował.
  10. Jak dobrze rozumiem masz dwa różne błędy - jeden z kompilacją i drugi z komunikacją. Przy tym z komunikacją wygląda na to że program jakoś się skompilował, tylko nie chce przejść do Arduino. Możesz spróbować sobie z nim poradzić podłączając zewnętrzny konwerter USB/UART. W moim klonie na przykład, ten wbudowany nie działał od nowości. Jak nie masz konwertera, może masz drugie Arduino? Jak się nie myle może robić za konwerter. Tylko pamiętaj że przy zewnętrznym konwerterze, przy programowaniu będziesz musiał sam reset naciskać w odpowiednim momencie. Ps. To jest wszystko co do błędu z : avrdude: stk500_recv(): programmer is not responding
  11. Co do programu na komputer polecam serialplot. Co do części na STM32 - co to za mikro-kontroler? Na niektóre STM32 są biblioteki Arduino. Jeśli nie chcesz używać bibliotek, możesz to zrobic to od zera, w przypadku STM32 F103 wygląda to tak: Włączasz i konfigurujesz USART Wysyłasz pustą ramkę (nwm jak to się tłumaczy, indle frame) i włączasz przerwanie TXE Przerwanie będzie wchodzić za każdym razem jak USART będzie gotowy do przyjęcia danych. Teraz wystarczy napisać przerwanie z jakimś licznikiem w środku, które za pierwszym razem wstawi do USART_DR pierwsze 8 bitów, a za drugim razem drugie.
  12. Samo wykrycie uderzenia wygląda tak: if((fl < max_value) && (max_value != 0) && (max_value > (last_beat_value/2)) && (max_age <= 10)) { if (last_beat_age > (uint16_t)((109.0/400.0)*SAMPLING_RATE)) { // Mamy uderzenie } } fl - filtered value - aktualny odczyt po filtrach max_value - odczyt może ją podnieść, ale nie może obniżyć (przy wykryciu uderzenia będzie to wartość poprzedniego odczytu) last_beat_value - wartość odczytu z poprzedniego uderzenia serca. Warunek: (max_value > (last_beat_value/2)) ma za zadanie wykluczyć mniejsze szczyty. Nie można ustalić tu stałego poziomu od jakiego akceptujemy uderzenia, bo w zależności od tego jak położymy palec amplituda potrafi parę razy wzrosnąć lub zmaleć. max_age - czas w próbkach od ostatniego podbicia max_value. last_beat_age - czas od ostatniego uderzenia, żółta linia: (109.0/400.0)*SAMPLING_RATE - wyjdzie 272.5 próbek, tj 0.27s czyli czas między uderzeniami przy tętne 220. Zakładam że nie będe wyżej mierzyć. Czyli po prostu czekamy aż wykres zacznie spadać i na różne sposoby próbujemy rozpoznać czy to ten szczyt który nas interesuje. Nie wiem na ile jest to precyzyjna metoda - ciężko sprawdzić bez EKG. Ale zdaje się działać. W liceum jestem . Bazuje na dwóch książkach: "Antyrak" i "Zdrowiej!" - obie tego samego autora, dr. Davida Servan-Schreibera. Zacytuje fragment: "Badania przeprowadzone na kierowniczej kadrze dużych przedsiębiorstw wykazują, że oddziaływanie stanu koherencji na fizjologie znajduje wyraz w łagodzeniu normalnych przejawów stresu: liczba osób twierdzących że dostają palpitacji serca ""często albo niemal cały czas" spada z 47% (!) do 30% w ciągu 6 tygodni, a do 25% w ciągu 3 miesięcy. Objawy wewnętrznego napięcia spadają z 41% do 15%, a później do 6%, bezsenności z 34% do 6%, zmęczenia z 50% do 12%." - tego jest kilka stron. Czy są dostępne handlowo nie wiem, część smartfonów z takim czujnikiem ma opcję "mierzenia stresu", przypuszczam że może to działać właśnie na takiej zasadzie.
  13. Dioda nawet tam jest. I po włączeniu bardzo fajnie świeci . Tyle że na ten moment nie bardzo wiem do czego by to mogło służyć. Sam pomysł na tą maszynę wziął się z pewnej książki - autor jako jeden ze sposobów walki ze stresem i depresją opisywał kontrolowanie własnego serca - pokazując właśnie wykres HRV w stanie koherencji i w stanie chaosu. Mówił jak świadomie ze stanu chaosu przechodzić do koherencji (po prostu przywołując pozytywne wspomnienia) i jakie niesie to za sobą skutki po dłuższym czasie. Tak średnio w to wierzyłem. I stąd pomysł żeby to sprawdzić. Za 35zł . Także to był główny cel projektu. Ale jak się dowiem co można ciekawego zrobić z pomiarów SpO2 to wystarczy zmienić program.
  14. Ładnie. Dobrze rozumiem że wyciągasz 39 km/h na silniku z samochodzika dla dzieci? Jaką dałeś przekładnie? I jak z momentem, wystartuje pod górkę na przykład? Ogólnie - robi wrażenie.
  15. Wykres może wyglądać jak sinusoida, ale nie musi. Zależy to od naszego stanu emocjonalnego - wszelkie negatywne emocje oraz stres sprawiają że wykres się "psuje", z ładnej eleganckiej sinusoidy robi się totalny chaos (ostatnie dwa wykresy). Podobnie jest z depresją. Często występują też stany pośrednie - wykres przypomina sinusoidę ale wciąż jest nierówny. @wn2001 Wykres jest odświeżany w momencie nadejścia nowych danych z UARTa. Te powstają po wykryciu uderzenia serca. Wykres puls=f(t) wyglądałby trochę inaczej, bo odległości między kolejnymi uderzeniami serca nie są równe. A na osi X punkty są w jednakowej odległości. Różnica niewielka, ale jest. Okres względnie zależy od szybkości oddechu. Względnie bo mam wrażenie że serce jest trochę niezależne. Na przykład gdy po wydechu (puls niski) na chwilę wstrzymamy oddech, puls mimo to pójdzie trochę do góry, jakby "nie zauważył" że wstrzymaliśmy oddech. Zatrzyma się może w 1/3 wysokości amplitudy (z moich obserwacji). Amplituda natomiast zależy np. od wieku. Im człowiek starszy tym będzie mniejsza. @Zealota Dzięki, co do pisania w rejestrach - najpierw miało być w Asemblerze . Nie wiem coś tak mnie naszło. Takie ambicje dziwne. Nawet tutorial zrobiłem na blinka w Asemblerze. Od 2 miesięcy google pokazuje całe 2 kliknięcia . W końcu się poddałem bo program się robił długi jak dżdżownica i znalezienie jakiegokolwiek błędu graniczyło z cudem. Więc teraz jest w C.
  16. 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:
×
×
  • Utwórz nowe...