Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 16 lip 2025, o 12:40


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
    Autor Wiadomość
    PostNapisane: 5 sie 2013, o 23:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 05 sie 2013
    Posty: 1154
    Lokalizacja: Lublin / Kraków
    Pomógł: 72

    Witam wszystkich
    Jeśli walnę jakąś bzdurę czy coś to proszę o wybaczenie bo to mój pierwszy post na forum. :P

    Na tzw. dobry początek chciałem podzielić się czymś, co zapewne było wałkowane czyli sterowaniem diodą RGB.
    Otóż zapragnąłem zrobić użytek z bardzo fajnej diody RGB (3 x 3W). Oczywiście nie chodzi tu o sam PWM. Szybko odkryłem, że sterowanie jej za pomocą wartości RGB (płynne przewijanie kolorów) nie jest wygodne. Pierwsza "implementacja" zawierała tablicę ponad 100 wartości wczytywanych w FOR.
    Jednak po dyskusji z kolegą okazało się, że nie warto na siłę trzymać się przestrzeni kolorów RGB i raczej podejść do tematu używając modelu HSV (HSB). Ma on trzy wartości barwę, nasycenie i jasność. Parametr barwy jest okręgiem, więc można go łatwo wpuścić w pętlę.
    Przystosowałem nieco znalezioną w sieci funkcję konwertującą HSV na RGB

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Bardzo ładnie działa, ale po pewnym czasie mi sie znudziło :)
    Napisałem więc proste funkcje losowych zmian kolorów, skokowych i płynnych.
    Kolor skacze albo płynie w zadanych granicach HSB.
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Oczywiście zamierzam docelowo usunąć _delay'e i dodać jeszcze kilka rzeczy :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sie 2013, o 23:15 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    Bardzo ciekawy pomysł na wykorzystanie innej przestrzeni barw niż RGB - też muszę się kiedyś tym zająć ;)

    ale taka uwaga do kodów. KOMPLETNIE niepotrzebnie stosujesz tu specyfikator volatile :(

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    szczególnie że są to zmienne lokalne a nie globalne - więc tak na prawdę NIGDY ten volatile nie będzie przydatny - OK ?


    Autor postu otrzymał pochwałę

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sie 2013, o 23:26 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 05 sie 2013
    Posty: 1154
    Lokalizacja: Lublin / Kraków
    Pomógł: 72

    Tak oczywiście masz rację. Volatile wsadziłem chyba z rozpędu :)

    Zmian kolorów w RGB nie mogłem opanować i nie wiem nawet czy się da to zrobić. Jeśli zrobimy trzy zagnieżdżone pętle FOR to zewnętrzna będzie wykonywać się 655536 razy wolniej niż najbardziej wewnętrzna a kolor będzie się zmieniał bardzo powoli. Tablica też nie jest dobra, bo zabiera pamieć. Myślę, że podejście z HSB może się przydać komuś :)
    Dzięki Twojej książce rozbudowałem "projekt" o uarta więc mam kontrolę nad losowanymi zakresami kolorów. A także zamierzam zrobić na ADC (super poradnik) zmianę kolorów potencjometrem :)

    Michał



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sie 2013, o 23:48 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 sie 2012
    Posty: 245
    Lokalizacja: Kielce
    Pomógł: 6

    fajne podejście do problemu.
    Czy zmienne odpowiedzialne za nasycenie, jasność, barwę - zmieniasz liniowo uzyskując wtedy ważenie liniowej zmiany kolorów?
    W tradycyjnym PWMie z bezpośrednim modelem RGB trzeba było jak już mówiłeś robić tablicę.

    _________________
    1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sie 2013, o 23:57 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    tzn płynną regulację kolorów RGB też da radę zrobić. Nie potrzeba nawet zagnieżdżonych pętli for(). Wystarczy sobie zmieniać indeks koloru od 0 do 2 (rgb) i za każdym obiegiem pętli zwiększać indeks i+1. Gdy się zwiększy do MAX, to zmniejszać indeks i. W kolejnym obiegu zwiększyć indeks o 1 i znowu powtórzyć kroki i tak w kółko. Oczywiście traktując indeks cyklicznie. Czyli jeśli i+1 jest = 3 to ma być 0

    W efekcie uzyskamy chcąc nie chcąc H z palety HSB ;) ale to jakby nie patrzeć jedno i to samo ...

    ------------------------ [ Dodano po: kilkunastu sekundach ]

    sq8dsr napisał(a):
    A także zamierzam zrobić na ADC (super poradnik) zmianę kolorów potencjometrem


    To też fajny pomysł ;)

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sie 2013, o 00:01 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 05 sie 2013
    Posty: 1154
    Lokalizacja: Lublin / Kraków
    Pomógł: 72

    ]Żeby kolor płynął od czerwieni do czerwieni (maksymalna jasność i nasycenie) wystarczy zmieniać wartość H od 0 - 1530. Wartość ta jest okręgiem. Argumenty S i B dajemy na 255. Jeśli damy stałe H a zmieniać będziemy S (od 255 do 0) to jeden kolor będzie nam się rozjaśniał do białego (wartość S = 0) przy zmianie B będziemy ściemniać diody.

    Tablica przy RGB była potrzebna dlatego by ustawić 150 gotowych "mieszanek" kolorów

    konstrukcja:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Nic nie da bo jest hierarchiczna. RGB jest sześcianem. Najpierw będziemy jechać po kolumnie podstawy, później następny wiersz, po 256 wierszach zaczniemy robić następną warstwę więc wykonanie tych pętli to 2^24 kroków. A nie o to chodzi.

    ------------------------ [ Dodano po: 5 minutach ]

    mirekk36 napisał(a):
    W efekcie uzyskamy chcąc nie chcąc H z palety HSB ale to jakby nie patrzeć jedno i to samo ...


    Tak, no fakt. W sumie to to samo bo będziemy jechać po okręgu maksymalnej jasności i nasycenia.
    HSB daje za to łatwą możliwość ściemniania i regulacji nasycenia koloru. Oczywiście trzeba dokładnie dobrać prądy diod (szczególnie czerwonej, która ma znacząco mniejszy spadek napięcia), żeby biały był biały :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sie 2013, o 05:38 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    sq8dsr napisał(a):
    HSB daje za to łatwą możliwość ściemniania i regulacji nasycenia koloru.


    No jeśli o to chodzi to tak - zdecydowanie ... przyznaję rację.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sie 2013, o 09:20 
    Offline
    Użytkownik

    Dołączył(a): 15 lut 2012
    Posty: 344
    Lokalizacja: Bydgoszcz
    Pomógł: 11

    Witaj sq8dsr na naszym forum ;) !

    Ja bym przy okazji jeśli by była taka możliwość oczywiście ;) poprosił o pokazania jak działa twój projekcik(jakieś zdjęcia albo filmik ) bo szczerze mówiąc ciekawy jestem jak to działa na żywo ta inna przestrzeń barw niż RGB jak to Mirek ujął.

    Pozdrawiam!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sie 2013, o 12:16 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 sie 2012
    Posty: 245
    Lokalizacja: Kielce
    Pomógł: 6

    Oczywiście dużą zaletą jest to że można samym parametrem "barwa" uzyskiwać skrajnie różne kolory (przy sterowaniu RGB trzeba by było jednocześnie operować 3 zmiennymi) ale i tak żeby płynnie, ze stałą prędkością poruszać się po krawędzi koła barw trzeba uwzględnić to że sterujemy PWMem. Więc albo zmienna "barwa" nie powinna zmieniać się liniowo albo zmienne R,G.B.

    Np. jesteś na zieleni i poruszasz się liniowo w kierunku cyjanu więc kod konwertujący HSV na RGB będzie liniowo zwiększał składową zielonej a PWM i bezwładność oka spowoduje że wrażenia liniowości nie będzie.

    _________________
    1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sie 2013, o 13:16 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 05 sie 2013
    Posty: 1154
    Lokalizacja: Lublin / Kraków
    Pomógł: 72

    MichalXY napisał(a):
    Witaj sq8dsr na naszym forum ;) !

    Ja bym przy okazji jeśli by była taka możliwość oczywiście ;) poprosił o pokazania jak działa twój projekcik(jakieś zdjęcia albo filmik ) bo szczerze mówiąc ciekawy jestem jak to działa na żywo ta inna przestrzeń barw niż RGB jak to Mirek ujął.

    Pozdrawiam!


    Witam
    a proszę bardzo:
    [youtube]
    http://www.youtube.com/watch?v=X6nHCYbWuaI
    [/youtube]

    Zakresy zmian kolorów są losowane a prędkość przesuwania się w obrębie wylosowanego koloru jest dość spora.
    Samej diody nie filmowałem, bo jest tak jasna, że kamera widzi tylko białą plamę.
    W rzeczywistości wygląda to lepiej :)

    Wojtek001 napisał(a):
    Np. jesteś na zieleni i poruszasz się liniowo w kierunku cyjanu więc kod konwertujący HSV na RGB będzie liniowo zwiększał składową zielonej a PWM i bezwładność oka spowoduje że wrażenia liniowości nie będzie.


    Tak owszem, choć muszę przyznać, że jest wrażenie liniowości przy przesuwaniu się po całym zakresie H. Jeden problem jest w chwili gdy kolor osiąga wartość pomarańczowo żółtą, wtedy przejście staje się bardziej gwałtowne. I tu ogólnie jest spory problem, bo oko też nie ma liniowej czułości, co więcej mózg nie każdą, matematycznie równą, różnicę między dwoma kolorami tak samo postrzega. I z tego co się zorientowałem nie jest to prosta funkcja. Dlatego tyle jest różnych metod konwersji kolorów w poligrafii.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sie 2013, o 14:48 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 sie 2012
    Posty: 245
    Lokalizacja: Kielce
    Pomógł: 6

    sq8dsr napisał(a):
    bo oko też nie ma liniowej czułości,
    No właśnie o tym mówię. Ciężko by tu było znaleźć odpowiedni wielomian jako funkcje. Zawsze można zrobić zmienną tablicową (1 wystarczy).

    Nawiasem fajnie by było jakby się udało znaleźć taki wielomian - może jest jakiś program który szuka wielomianów ( mających określone wartości (ewentualnie z pewnym zaokrągleniem ) dla określonych argumentów. - to się nazywa "interpolacja wielomianowa" ;) Co więcej okazuje się że wielomian nie jest jakiś bardzo skomplikowany ,bowiem wystarczy już f(x) = ax^2.
    Grunt w tym żeby początkowo szedł w górę powoli a potem b. szybko.

    _________________
    1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sie 2013, o 16:03 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 paź 2011
    Posty: 582
    Pomógł: 17

    Postanowiłem sobie to dzisiaj przetestować.
    Wszystko OK, tylko przy wywołaniu funkcji
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    mam warning
    Kod:
    Multiple markers at this line
       - passing argument 6 of 'hsv_to_rgb_8_n' from incompatible pointer type
       - passing argument 5 of 'hsv_to_rgb_8_n' from incompatible pointer type
       - passing argument 4 of 'hsv_to_rgb_8_n' from incompatible pointer type


    Da się coś zrobić, żeby go nie było?
    I czy też ty go masz?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sie 2013, o 21:06 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 05 sie 2013
    Posty: 1154
    Lokalizacja: Lublin / Kraków
    Pomógł: 72

    xamrex napisał(a):
    Da się coś zrobić, żeby go nie było?
    I czy też ty go masz?


    Witam
    Ja mam dodatkowe zmienne red, green, blue typu uint8_t które dopiero wpisuję do rejestrów timerowych.
    Możesz też zrobić jawne rzutowanie do typu uint16_t.

    ------------------------ [ Dodano po: 15 minutach ]

    Wojtek001 napisał(a):
    bowiem wystarczy już f(x) = ax^2.
    Grunt w tym żeby początkowo szedł w górę powoli a potem b. szybko.


    Funkcja kwadratowa raczej nie radzi bo ona na początku rośnie wolno a później strzela w górę.
    Skok kolorów jest na początku około wartości 100. Trzeba by pomyśleć o czymś logarytmicznym, ale tylko w początkowym zakresie bo później niepotrzebnie spowolni.
    Na filmie do którego link wkleiłem dioda zmienia kolory nie przedziale całej wartości H tylko w wylosowanym przedziale, następnie losowany jest następny przedział. Sama funkcja konwertująca działa bardzo płynnie, tak płynnie, że uznałem iż jest zbyt monotonna dlatego dodałem losowość :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sie 2013, o 23:37 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 sie 2012
    Posty: 245
    Lokalizacja: Kielce
    Pomógł: 6

    sq8dsr napisał(a):
    Wojtek001 napisał(a):
    bowiem wystarczy już f(x) = ax^2.
    Grunt w tym żeby początkowo szedł w górę powoli a potem b. szybko.


    Funkcja kwadratowa raczej nie radzi bo ona na początku rośnie wolno a później strzela w górę.
    Skok kolorów jest na początku około wartości 100. Trzeba by pomyśleć o czymś logarytmicznym, ale tylko w początkowym zakresie bo później niepotrzebnie spowolni.
    Na filmie do którego link wkleiłem dioda zmienia kolory nie przedziale całej wartości H tylko w wylosowanym przedziale, następnie losowany jest następny przedział. Sama funkcja konwertująca działa bardzo płynnie, tak płynnie, że uznałem iż jest zbyt monotonna dlatego dodałem losowość :)

    No nie mogę się z tym zgodzić. Przecież PWMem ma właśnie na początku rosnąć powoli. Wiele zależy też od koloru, modelu diody ale dla zobrazowania powiem że np. przy wypełnieniu 12% mamy wrażenie ze dioda jest ustawiona na połowę jasności. (tą korektę ja bym robił już po konwersji na RGB na zmiennych R,G,B).

    Apropo funkcji kwadratowej - nie jest to jakaś zaawansowana matma żeby przeciętny licealista (nawet przy dzisiejszym poziomie nauczania) tak dobrał współczynniki funkcji kwadratowej aby ta na początku rosła szybko a później powoli <-- akurat kiedyś w tym charakterze ją dokładnie wykorzystywałem w jakimś programie - wtedy musiałem jeszcze punkty wierzchołka regulować z poziomu aplikacji więc to wszystko miało jakiś tam sens, ale tak jak mówię w tym wypadku nie jest to potrzebne.
    Ale wiesz może my myślimy od odwrotnej strony ;) sterujesz stanem niskim? bo to w zasadzie wszystko jedno czy na początku powoli a potem szybko czy na odwrót bo przecież wystarczy bez zaawansowanej matmy odjąć
    256- f(x)
    tylko trzeba tak dobrać a żeby wyniki były w przedziale <0,256>.

    Logarytmy to rzeczywiście pierwsze co przychodzi na myśl ale w tym wypadku się chyba nie opłaca.

    _________________
    1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 sie 2013, o 00:16 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 05 sie 2013
    Posty: 1154
    Lokalizacja: Lublin / Kraków
    Pomógł: 72

    Wiesz to może faktycznie sporo zależeć od diody, ja nie używam "normalnej" diody tylko takiego potworka:
    Obrazek

    Ma to to 10W. Zdjęcie jest obrazem rzuconym przez soczewkę na sufit :)

    Wojtek001 napisał(a):
    sterujesz stanem niskim?

    Nie, stanem wysokim.

    Ale sprobuję jutro zobaczyć jakie będzie subiektywne odczucie wzroku przy jakich wypełnieniach PWM.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO