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

@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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »

×