Skocz do zawartości

Pomocna odpowiedź

Napisano (edytowany)

Witam. Chciałbym przedstawić mój projekt, mianowicie monitor zasobów (coś jak zakładka wydajność w menadżerze zadań) wyświetlany na wyświetlaczu Arduino.

Potrzebne Rzeczy:
Jest to bardzo prosty projekt do którego budowy potrzebujemy zaledwie 2 rzeczy:

  • Arduino Uno (można też użyć np. Arduino Uno WiFi aby połączyć się przez wifi lub Arduino Mega gdyby brakowało nam pinów)
  • Wyświetlacz dotykowy. Ja użyłem nakładki tzw. shielda na arduino, jednak jeżeli chcemy ograniczyć liczbę używanych pinów można użyć dowolnego wyświetlacza, przykładowo takiego, ja użyłem ekranu o rozdzielczości 240x320 pikseli.
  • No i wiadomo kabel do połączenia z komputerem.

Tak wygląda mój zestaw:

arduino.thumb.png.714b1f2652786a6503af2a9b16645664.png

Cel Działania:
Celem tego wyświetlacza jest pokazywanie aktualnego obciążenia systemu, bez ciągłego patrzenia na menadżer zadań i konieczności jego ciągłego działania. Możemy np. podczas gry w jakąś wymagająca grę patrzeć, czy czasem nie palimy karty graficznej 😜 Tutaj screen podczas gry w gta v, jak widać moja karta graficzna chodzi na pełnych obrotach:

gtav.thumb.png.b8e39db8a62483278b134007c4dd9d66.png

Działanie:
Program uruchamiany na komputerze wysyła dane do arduino, które następnie wyświetla odpowiednią ilość kwadratów. Tak to mniej więcej działa:

all.thumb.png.8c4902ebf06c114e07ea71efd90ddef1.png

Tutaj widać porównanie menadżera zadań windows i arduino - jest lekkie opóźnienie ok. 1s, prawdopodobnie wynikające z tego, że program wysyła dane w innym czasie niż menedżer zadań, jednak myślę że ta jedna sekunda nic nie zmienia.

other.thumb.png.4737893995ca96668d714eb41c09e888.png

A z kolei tutaj widać odpowiednio - zużycie procesora podczas kopania btc, dane, które przechodzą przez sieć i zużycie dysku podczas przenoszenia dużych plików.

Program:
Jeżeli chodzi o program na arduino to wszystko zależy od tego jak ktoś zaplanuje wygląd i zależy też dużo od sterownika wyświetlacza. Przyjmowanie danych to odczytywanie kolejnych wartości serial'u, zaczynając od procesora, a kończąc na internecie. Natomiast żeby arduino znało zużycie poszczególnych podzespołów należy uruchomić program na komputerze. W tym celu trzeba stworzyć aplikację działającą w tle (ja wybrałem aplikację konsolową c#) i utworzyć skrót do aplikacji w menu start.

autostart.thumb.png.7ae0ba004e6ecc6b37d8851d8fe71811.png

Tym sposobem program uruchomi się nam przy starcie systemu. A co zawiera program? Na początku otwarcie serial'u:

SerialPort Serial = new SerialPort("COM6", 9600);
Serial.Open();

COM6 oznacza numer portu (ten sam co w programie arduino), 9600 to bitrate. Aby wysłać dane do arduino wystarczy:

while(true)
{
    // Wysyłanie zużycia procesora w skali 1-10:
    PerformanceCounter ProcessorUsage = new PerformanceCounter("Processor", "% Processor Time", "_Total");
    Serial.Write(Math.Floor(ProcessorUsage.NextValue() * 0.1));

    // Wysyłanie zuzycia karty graficznej w skali 1-10:
    Computer = new Computer() { GPUEnabled = true };
    Computer.Open();
    foreach (var HardwareItem in Computer.Hardware)
    {
        if (HardwareItem.HardwareType == HardwareType.GpuNvidia)
        {
            HardwareItem.Update();
            foreach (var SubHardware in HardwareItem.SubHardware)
            {
                SubHardware.Update();
            }
            double Numbers = 0;
            int Number = 0;
            foreach (var Sensor in HardwareItem.Sensors)
            {
                if (Sensor.SensorType == SensorType.Load)
                {
                    Numbers = Numbers + Sensor.Value.Value;
                    Number++;
                }
            }
            Serial.Write(Math.Floor((Numbers / Number) * 0.1));
        }
    }

    // Wysyłanie użycia sieci w Mb/s:
    NetworkInterface[] NetInterfaces = NetworkInterface.GetAllNetworkInterfaces();
    long BytesDown = NetInterfaces[0].GetIPv4Statistics().BytesReceived;
    long BytesSend = NetInterfaces[0].GetIPv4Statistics().BytesSent;
}

Jak widać zużycie procesora (a także pamięci czy dysku) możemy pobrać za pomocą performance counter. Dla innych podzespołów wystarczy zmienić nazwy w cudzysłowach. Karta graficzna jest trochę bardziej skomplikowana i trzeba obliczyć średnią dla różnych elementów, tzn. zużycie procesora graficznego, zużycie pamięci graficznej itd. Uwaga: Tutaj potrzebna będzie zewnętrzna biblioteka, tzn. OpenHardwareMonitor. Można ją pobrać np. menadżerem pakietów NuGet. A ostatnie 3 linie to wysłane i odebrane bajty. Jednak trzeba wziąć pod uwagę że jest to naliczane od startu komputera, więc trzeba sobie co sekundę sprawdzić o ile zwiększyła się ta liczba.

Na Zakończenie:

realtime.thumb.gif.9329a6d6d2411abecaa5fb41ff986d2d.gif

Tutaj taki krótki film z działania wyświetlacza.

Edytowano przez Treker
Poprawiłem formatowanie.
  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

@KubekSzklany, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Właśnie zaakceptowałem Twój opis, możesz go teraz zgłosić do akcji rabatowej umieszczając link w temacie zbiorczym. Dziękuję za przedstawienie ciekawego projektu, zachęcam do prezentowania kolejnych DIY oraz aktywności na naszym forum 🙂

Udostępnij ten post


Link to post
Share on other sites

Dlugo piszesz w C#? Nigdy nie posiadlem dobrej umiejętności pisania aplikacji PCtowej komunikujacej się z moimi urządzeniami, więc chciałem się spytać jak się sprawdza ten język? Blisko mu do C++ w takich zastosowaniach?

Udostępnij ten post


Link to post
Share on other sites

I tak już mi dużo naświetliłeś 🙂 Niestety na studiach miałem C# w takiej formie, że pisaliśmy pół roku cyferki na konsoli 😄 Nie zaraziłem się nim wtedy 

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...