Home > .NET 4.0, C#, Tips > [PL] Ambilight for PC – Adalight for .NET

[PL] Ambilight for PC – Adalight for .NET

December 16, 2013 Leave a comment Go to comments

Adalight Net Client SlimDx Live CaptureOd jakiegoś czasu myślałem, żeby skleić coś po godzinach, co pozwoliłoby zasymulować na komputerze Ambilight. Są dostępne telewizory (być może i monitory) oferujące tą funkcjonalność, ale po co kupować coś można zrobić samemu, a dodatkowo co można zaprogramować. Zatem zabrałem się do roboty.

[EN] In this post I am mentioning about a project called Adallight which is presented on Adafruit pages. Also I am describing a self-made application called AdalightNET which communicates with the hardware (Arduino).

Na początku myślałem jedynie o paru diodach RGB, które będą dawały odpowiednie oświetlenie za ekranem monitora. Jednak po przeczytaniu posta na majsterkowie, który opisuje rozwiązanie wyświetlające kolory dla każdej krawędzi ekranu z osobna zachciało się więcej.

Zacząłem bardziej zagłębiać się w ten temat i doszedłem do rozwiązania przedstawionego na stronach Adafruit zawierającego 25 osobnych diód RGB sterowanych niezależnie. Pojawił się jednak problem – skąd wytrzasnę tamtą taśmę – odpowiedź szybko znalazła się na nettigo.pl – zakupiłem taśmę wraz z nowiutkim arduino (nie będę wspominał tutaj jednak o kosztach, aua).

Hardware

Wszystko co i jak połączyć i przyłączyć oraz jak uruchomić znajduje się na wspomnianej już stronie Adafruit. Tutorial tam przedstawiony jest w sposób jasny – tak, że każdy zrozumie. Poniżej znajduje się jedynie rezultat rozmieszczenia diód za moim monitorem – diody powinny być w miarę równo rozmieszczone, ważne jest aby zachować je w odpowiednich obszarach.

Adafruit Adalight Placed Behing Monitor

Software

Tutaj pojawiła się przeszkoda, a raczej wyzwanie. Przykład pozwalający śledzić ekran i wyświetlać odpowiednie LEDy za monitorem działa na… Javie. Nie, żebym miał coś do Javy (hate!), chciałem jednak utworzyć aplikację od podstaw dodając parę funkcjonalności i co najważniejsze pozbyć się zależności do jakiejkolwiek Javy.

AdalightNetClient

Rozwiązanie – projekt na GitHubie

Utworzyłem projekcik na githubie AdalightNet. Działa on na .NET 4 i posiada kilka dodatkowych funkcjonalności – część z nich przedstawię poniżej w wyzwaniach. Dostępny jest również instalator clickonce (offline) na moim SkyDrive. Architektura tej aplikacji (w uproszczeniu) składa się z dwóch bloków: Generatora oraz Serwisu LED. Generator odpowiedzialny jest za przetwarzanie obrazu do postaci tablicy reprezentującej diody LED. Serwis natomiast odpowiedzialny jest za wyświetlanie. Serwisem w moim przypadku jest Arduino z zainstalowaną apliakcją z Adafruit, dodatkowo kontrolka wyświetlająca podgląd również jest serwisem. W rezultacie istnieje nieskończona możliwość tworzenia własnych generatorów – na przykład można utworzyć generator wyświetlający odpowiednie kolory symulujące wschód i zachód słońca, czy też reagujący na dźwięk.

Wyzwanie pierwsze – śledzenie ekranu

Adalight Net Client SlimDx Live Capture

Znalazłem parę przykładów wyjaśniających w jaki sposób analizować obraz wyświetlany na ekranie i spośród paru znalezionych, najlepszy wydawał mi się ten bazujący na DirectX. Nie instalowałem żadnych bibliotek DirectXa – przykład opiera się na SlimDx i jest w miarę szybki (w miarę, ponieważ C++ z pewnością byłby jeszcze szybszy). Kod znajdujący się w tym generatorze nie jest perfekcyjny – kładłem nacisk na prędkość wykonywania kodu, a nie na czytelność – zmieniając parę linijek kodu lub dodając do siebie wartości w inny sposób, różnica w wyliczeniach sięgała od kilku do kilkunastu milisekund – wciąż jeszcze tam trzeba będzie poprawić.

Wyzwanie drugie – bieżąca tapeta

Nie było wielkiego problemu – pytanie brzmiało: Jak odczytać aktualnie wyświetlaną tapetę na pulpicie? Odpowiedź czekała na StackOverflow.

Zalety rozwiązania

  • Można powiedzieć, że jest to gadżet. Jednak muszę powiedzieć, że jest to fajny gadżet. Grając w grę – na przykład Tomb Raidera – ma się ‘rozszerzony obraz za monitorem’ – zatem sylwester będzie wystrzałowy.
  • Ustawiając odpowiednie oświetlenie za monitorem, które to z kolei rzuca się na ścianę, inaczej wpływa na samopoczucie i wzrok – nie mam już jedynie jasnej plamy monitora!
  • Fajnie jest robić coś poza codziennym programowaniem

Wady

  • Koszt – to rozwiązanie jest stosunkowo drogie, jednak warte swej ceny. Być może, ktoś, kto jest obeznany w zakupach zza granicy być może obniży cenę o połowę. Można też skupić się na prostszym rozwiązaniu przedstawionym na majsterkowie.
Tags:
  1. December 17, 2013 at 00:01

    Sprawdz wydajność z tym programem: https://code.google.com/p/light-pack/downloads/list też jest kompatybilny z Adalight (przynajmniej tym pisanym na Arduino)

    • December 17, 2013 at 17:06

      Pewnie tak zrobię – tutaj jest też inne rozwiązanie – w hardware mają mniejszą liczbę LEDów, co kosztem mniejszej liczby może polepszyć samą wydajność aplikacji (głównie w fazie analizowania obrazu). Dzięki za linki!

  2. December 17, 2013 at 00:03

    Wydaje mi się że teraz to już się nazywa tak: http://lightpack.tv/downloads (widze że w temacie trochę się pozmieniało). Powodzenia w zabawie.

    • December 17, 2013 at 17:04

      Tam jest kilka różnych rozwiązań – wiele bazuje na różnych układach i konfiguracjach.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: