Здравствуйте, уважаемые читатели. Сегодня хочу рассказать об устройстве телеметрии или мониторинга для компьютера. Схема подключается к USB-порту компьютера, как внешнее устройство, показывает в реальном времени основные параметры процессора и видеокарты (частоту, температуру, загрузку). Под катом — схема устройства, сборка, немного столярки и демонстрация работы, текста немного, больше фото…
Проект был найден на просторах интернета, называется он Gnat-Stats, ссылка на
hackaday.io. Проект предусматривает сборку устройства на основе разных плат микроконтроллеров (Arduino ProMicro, STM32 BluePill) и разных дисплеев (на SH1106 и SSD1306).
Компоненты и схема
Схема устройства очень простая, в основе всего два компонента — плата Arduino ProMicro и OLED дисплей с размером экрана 1,3", были куплены на Aliexpress у одного продавца.
ProMicro —
ссылка
OLED дисплей —
ссылка
Нарисовал схему устройства
Сборка
В среде Arduino IDE прошиваем наш микроконтроллер, собираем схему для проверки:
Скетч есть на сайте проекта, дополнительно выложил на Google Drive, ссылка в конце статьи. Убедившись что всё работает, можно собирать в более компактный вид, для будущей установки в корпус. Питание соединяем проводами, а линию данных через разъём PLS:
Получился такой себе «бутерброд»:
Что бы ничего не закоротило, между платами наклеил небольшой кусочек двухстороннего скотча
Теперь нужно делать корпус.
Корпус
Делать корпус буду конечно же из дерева, в закромах нашлась дубовая доска, толщиной 20 мм. Разметил и с помощью стамески выдолбил место под платы:
Ножовка, наждачный круг и не ограниченное время — получаем это:
Корпус решил сделать немного под наклоном, что бы экран лучше читался:
Корпус не опрокидывается, так как доска, из которой он был сделан, была довольно толстая (20 мм).
С помощью дремеля, вырезал отверстие для USB-кабеля:
Для передней панели нашёл у себя синее затемнённое оргстекло, вырезал из него кусочек нужного размера:
Примеряем все части «пазла»:
Пропитываем корпус льняным маслом, собираем и склеиваем всё вместе
Испытания
Для работы устройства, помимо прошивки микроконтроллера, необходимо ещё две программки:
• первая
Open Hardware Monitor — собирает все данные с датчиков компьютера (температура, частота и др.)
• вторая
Hardware Serial Monitor — передаёт эти данные нашему устройству
Программы можно поставить в «Автозагрузку», они будут висеть в трее и не мешать, ссылка на программы в конце статьи.
При первом включении
Hardware Serial Monitor автоматически определит к какому порту подключено наше устройство, если по каким либо причинам это не произошло, можно указать в ручную. После этого устройство готово к работе:
Для демонстрации работы нашей телеметрии, запустил игру чтобы нагрузить систему и сделал гифку, испытания проводились на домашнем компьютере (в рабочем нет видеокарты):
Как видно из демонстрации, присутствуют три «экрана» с разными параметрами процессора и видеокарты.
Для понимания размеров устройства — фото рядом с мышкой:
Вот такая собственно телеметрия или мониторинг (кому как угодно), из доработок для себя я вижу что нужно было выпаять светодиоды на ProMicro, чтобы убрать красную засветку внутри корпуса.
Скетч и программы для работы устройства —
ссылка
Всем удачных поделок, спасибо за внимание.
Хотел сделать на основе LCD1604 и LCD Smartie, но не прокатило, все скетчи расчитаны либо на 1602, либо 2004.
Сейчас вашу схему попробую, тем более есть и экран и ардуинка.
А вот и первая засада :( в проект требуется Arduino pro micro…
Может кто из знающих переделал проект на Arduino Nano, или хотя бы подсказал что менять.
а диоды можно тупо изолентой заклеить, парой слоев.
Я забыл выключить девайс на выходные с таким же экраном, изображение выгорело. При полной заливке яркость выгоревших пикселей на глаз составила не более 50% от остальных. Будет инверсия-не за 3, а за 6 дней общая яркость упала бы на 50%
Но вообще девайс годный… понять бы, сколько отжирает ресурсов по, постоянно анализирующее нагрузку и отправляющее эти данные по коп порту
Все же скринсейвер надо
На самом деле, там из примечательного только корпус. Донором блестящих элементов для которого, как справедливо отметили выше, послужил реобас AEROGATE II.
В программной части — ничего интересного, обычный «быдлокод». Могу поискать исходник, если действительно интересно.
там точно олед?
Чтобы делать какие-то выводы у меня, по крайней мере, есть работающий пример. А у Вас?
Мне, безусловно, льстит, что этот девайс можно принять за некое фабричное изделие. Но если Вы не поняли, то это самодельное устройство, т.е. я САМ его сделал. И какой там стоит дисплей знаю абсолютно точно — OLED на контроллере SH1106.
я отлично знаю, что есть возможность делать равномерное выгорание и дисплеи сами по качеству сильно отличаются, тем не менее, сейчас в общей массе так, как писали выше. ладно, проехали
Может и то, что дисплей «отдыхает» несколько часов в день, помогло ему сохраниться. А может и нет. ))
Класс!!!
Так что стенки малой толщины наверняка будут скалываться при ручной обработке.Очень не приятный и сложный материал.
Ну и пропитывать такой пористый материал маслом… ну на любителя.Лучше уж лаком или вообще не покрывать.Дуб в защите и стабилизации древесины в комнатных условиях не нуждается.
Лучше взять Бук, граб, берёзу, ясень, ольху… и не иметь проблем.
В данном случае tft оправдан. Есть качественные, но дорогие ips, есть не очень хорошего качества, но относительно дешевые tn. Для данного применения TN должно хватить
автор показывает в чуть больше года (378 дней)
или в… где живёте год составляет всего 180 дней?
Но в любом случае получилось очень здорово. Однозначно плюс и спасибо за наводку. Закажу себе такой дисплей и тоже попробую собрать.
Прямые линии, ровные углы…
И аэрозольный баллончик чёрной автомобильной алкидной эмали.
А пластиковую рамку нужно точно вырезать углы и она имеет заметную толщину-не бумага чай.
GTX1060, живут же люди)))
P.S. Шлифовать грани стекла дело не самое здоровое, не уверен, что стоит в данном случае…
Например минимальный комплект мультитула 44,5$ с бесплатной доставкой, я себе брал. Кстати, неплохая зверюга, тут уже он обозравался, только там шильдик HILDA и KINGDIAN были, внутри все трое — аналоги.
Ладно, сам нашел кромочник: 32+5$, за качество — не скажу, просто первый в выборке, так что предыдущий оратор прав.
Вот только этим фрезером прямоугольное отверстие не сделать(ограничены радиусом фрезы), а мультитулом — можно. Дабы не разжигать холивар — напомню, чо у каждого из них своя специфика и область применения.
+Demz
Вот это называется «мультитул»: ссылка
А то, что на фото у u3712 и по первой ссылке Demz, за 44,5$, называется «реноватор». Давайте будем называть вещи своими именами.
Что именно не хватало во внутренней телеметрии и зачем нужна внешняя?
P.S. А так проект на ардуино конечно интересен ))
а то самому делать у меня руки наверное никогда не дойдут.
(lpt+44780 не предлагать)
по крайней мере плагины под Windows Media Center Edition, Windows Media Player, BS Player имеются.
где ж его нынче взять то, адаптеры городить что ли.
1602 или 2004 в связке с ардуино
Код с некоторым допилом заработал отсюда, но я пробовал WH1604, работает, но с глюками, а знаний в ардуино-программировании нет, чтобы поправить.
Спасибо Vitaliy_S за наводку.
Но настоящие крутые парни все-таки делают это из бойка кувалды килограмм на 5, напильником, сверлами и зубилом.
А зачем название процессора и видяшки там? Вдруг при работе поменяется что ли?)) Это лишняя инфа имо.
Хотел использовать старый андроид смартфон/планшет для этого, но заряжать и одновременно передавать данные по кабелю(т.е. не переводя устройство в режим хоста) — невероятно муторно, а для беспроводной передачи я слишком параноидален)
Сейчас погугли ссылки только на андурину.
хотя разрешение идентичное, всё же фруктовые библиотеки не очень мне нравятся
OLED_SH1106 <---> OLED_SSD1306
И очень старая прога монитора. У меня проца совсем не видит, только его загрузку.
LibreHardwareMonitor поновее брал здесь нормально райзены и показания датчиков AsRock AB350 Pro4 определяет.
Пока забил, лучше на LCD Smartie соберу.
Но всё таки
Косяки, это накладывающиеся надписи (ну не влазит в одну строку название моего процессора) и бредовая температура процессора (15 градусов, когда в квартире 30+).
Просто собрал метеостанцию, поигрался, подпалил NodeMCU и заказал еще парочку на «поиграться». Затем решил уменьшить потребление и на пробу заказал парочку ESP-12E, но у них оказалась проблема с выходом из глубокого сна, по крайней мере на скетче Arduino IDE. В итоге заказал еще Wemos, ESP-12F, ESP-12E и еще один экранчик SSD1306.
Пока заказ шел, появилась ваша статья. Arduino Pro Micro собираюсь (а может и собирался, если со скетчем справлюсь) заказать. А тем временем решил вот собрать из того, что есть.
Правда, тут мне повезло, скетч собрался с SSD1306, а с SH1106 некультурно матерился. Ну и пришлось добавить строки после void setup() {:
Wire.begin(D6, D5);
Wire.setClock(100000);
что бы повесить экран на GPIO12 и GPIO14.
Adafruit_SH1106-master
Adafruit-GFX-Library-master
esp8266-oled-sh1106-master
OLED_SH1106
может какие-то и лишние, но с этими вроде всё работает
Выставьте дисплей, который вам предпочтителен и закомментируйте строки:
Изображение на этот экран я выводил с видеокарты, через hdmi. Потом этот экран перетягивание на этот доп монитор, и с зажатым шрифтом один раз выкл комп, тогда винда запомнит и не нужно будет перетягивать каждый раз это окно на этот доп экран
[email protected]
Эй, мину сер — на лбу себе так же, тихонько, маркером ватерлинию для остатков «серого вещества» начерти, авось поможет :-)
Пока что «решил» длинное имя названия процессора. Сделал может криво и не совсем универсально, но результат меня устраивает. Значит так, во вкладках DysplayStyle1-3 перед строкой: добавьте строку где вместо «12» поставьте удобное для себя количество символов.
По поводу того, что бы был только один экран, я ответил выше.
Попробую накопать отсутствие показа температуры процессора.
В это же время температура CPU Core в OHM (3) может показать и 19 градусов в то время как в квартире 25-27, т.е. полная чушь.
Значит надо либо как то выциплять данные, которые передает Hardware Serial Monitor (задумка есть) и смотреть, передаются ли данные с датчиков якобы материнской платы, а затем править скетч; либо искать другую версию OHM (ту, что выложили в коментариях выше уже попробовал.
Т.е. вывод такой — эта утилита уже скомпилированна таким образом, что бы брать из Open Hardware Monitor только определенные данные, и если необходимо что-то добавить или изменить, придется брать исходники и собирать самому.
Но в принципе можно необходимую инфу из 3-х дисплеев собрать на одном. А перехваченные мною данные просто помогают понять логику работы скетча.
Оказалось, что если скомпилировать эти сорцы, то нет отображения температуры процессора и использования памяти (по крайней мере на моём железе). Не буду претендовать на универсальность, но проблему с памятью победил. Для запуска с отладкой раскомментировал вывод в консоль и обнаружилось, что если в выводе память показана как то в коде мы имеем поиск значения в строке
Поменял на «Memory Used» и ву-а-ля!!! Память отображается.
Копаю дальше. Держу в курсе. %)
Если что, вот список захватываемой информации без правки кода (может и до этого доберусь):
Checking: Mainboard
Hardware Name=AMD A8-5600K APU with Radeon HD Graphics
Checking: CPU
Sensor: CPU Core #1 Type: Load Value: 45,37572
Sensor: CPU Core #2 Type: Load Value: 53,17919
Sensor: CPU Core #3 Type: Load Value: 43,93064
Sensor: CPU Core #4 Type: Load Value: 50
Sensor: CPU Total Type: Load Value: 48,12139
Sensor: CPU Cores Type: Voltage Value: 1,55
Sensor: Northbridge Type: Voltage Value: 1,55
Sensor: CPU Core #1 Type: Clock Value: 3600,468
s.Name=CPU Core #1
Sensor: CPU Core #2 Type: Clock Value: 3600,468
s.Name=CPU Core #2
Sensor: CPU Core #3 Type: Clock Value: 3600,468
s.Name=CPU Core #3
Sensor: CPU Core #4 Type: Clock Value: 3600,468
s.Name=CPU Core #4
Hardware Name=Generic Memory
Checking: RAM
Sensor: Memory Used Type: Data Value: 5,872391
Sensor: Memory Available Type: Data Value: 6,078323
Sensor: Memory Type: Load Value: 49,13841
Sensor: Virtual Memory Used Type: Data Value: 6,731728
Sensor: Virtual Memory Available Type: Data Value: 7,031487
Sensor: Virtual Memory Type: Load Value: 48,91101
Hardware Name=NVIDIA GeForce GTX 560 Ti
Checking: GpuNvidia
Sensor: GPU Core Type: Temperature Value: 38
s.Name=GPU Core
Sensor: GPU Type: Fan Value: 1140
Sensor: GPU Core Type: Clock Value: 50,625
s.Name=GPU Core
Sensor: GPU Memory Type: Clock Value: 135
s.Name=GPU Memory
Sensor: GPU Shader Type: Clock Value: 101,25
s.Name=GPU Shader
Sensor: GPU Core Type: Load Value: 1
Sensor: GPU Memory Controller Type: Load Value: 7
Sensor: GPU Video Engine Type: Load Value: 0
Sensor: GPU Fan Type: Control Value: 20
Sensor: GPU Memory Total Type: SmallData Value: 1024
Sensor: GPU Memory Used Type: SmallData Value: 360,0586
Sensor: GPU Memory Free Type: SmallData Value: 663,9414
Sensor: GPU Memory Type: Load Value: 35,16197
Hardware Name=Generic Hard Disk
Checking: HDD
Sensor: Used Space Type: Load Value: 61,48637
Hardware Name=Generic Hard Disk
Checking: HDD
Sensor: Used Space Type: Load Value: 67,71809
Hardware Name=Generic Hard Disk
Checking: HDD
Sensor: Used Space Type: Load Value: 44,25489
Hardware Name=Generic Hard Disk
Checking: HDD
Sensor: Used Space Type: Load Value: 74,04384
И вот что еще интересно!!! Я всегда запускал Open Hardware Monitor вместе с Hardware Serial Monitor . Но дело в том, что в Hardware Serial Monitor уже входит библиотека OpenHardwareMonitorLib.dll, а значит достаточно только запуска Hardware Serial Monitor .
Checking: Mainboard
Hardware Name=AMD A8-5600K APU with Radeon HD Graphics
Checking: CPU
Sensor: CPU Core #1 Type: Load Value: 55,95855
Sensor: CPU Core #2 Type: Load Value: 53,88601
Sensor: CPU Core #3 Type: Load Value: 52,3316
Sensor: CPU Core #4 Type: Load Value: 53,88601
Sensor: CPU Total Type: Load Value: 54,01554
Sensor: CPU Cores Type: Voltage Value: 1,4375
Sensor: Northbridge Type: Voltage Value: 1,2
Sensor: CPU Core #1 Type: Clock Value: 5821,921
s.Name=CPU Core #1
Sensor: CPU Core #2 Type: Clock Value: 5821,921
s.Name=CPU Core #2
Sensor: CPU Core #3 Type: Clock Value: 5821,921
s.Name=CPU Core #3
Sensor: CPU Core #4 Type: Clock Value: 5821,921
s.Name=CPU Core #4
Sensor: CPU Package C2 Type: Level Value: 0
Sensor: CPU Package C3 Type: Level Value: 0
Sensor: CPU Cores Type: Temperature Value: 38
s.Name=CPU Cores
Sensor: Bus Speed Type: Clock Value: 306,4169
s.Name=Bus Speed
Hardware Name=Generic Memory
Checking: RAM
Sensor: Memory Used Type: Data Value: 5,893776
Sensor: Memory Available Type: Data Value: 6,056938
Sensor: Memory Type: Load Value: 49,31735
Sensor: Virtual Memory Used Type: Data Value: 7,545967
Sensor: Virtual Memory Available Type: Data Value: 6,217247
Sensor: Virtual Memory Type: Load Value: 54,82707
Hardware Name=NVIDIA GeForce GTX 560 Ti
Checking: GpuNvidia
Sensor: GPU Core Type: Temperature Value: 33
s.Name=GPU Core
Sensor: GPU Type: Fan Value: 1110
Sensor: GPU Core Type: Clock Value: 50,625
s.Name=GPU Core
Sensor: GPU Memory Type: Clock Value: 135
s.Name=GPU Memory
Sensor: GPU Shader Type: Clock Value: 101,25
s.Name=GPU Shader
Sensor: GPU Core Type: Load Value: 9
Sensor: GPU Memory Controller Type: Load Value: 8
Sensor: GPU Video Engine Type: Load Value: 0
Sensor: GPU Fan Type: Control Value: 16
Sensor: GPU Memory Total Type: SmallData Value: 1024
Sensor: GPU Memory Used Type: SmallData Value: 370,9961
Sensor: GPU Memory Free Type: SmallData Value: 653,0039
Sensor: GPU Memory Type: Load Value: 36,23009
Hardware Name=SanDisk SDSSDHII120G
Checking: HDD
Sensor: Temperature Type: Temperature Value: 37
s.Name=Temperature
Sensor: Used Space Type: Load Value: 61,59744
Hardware Name=WDC WD10EFRX-68JCSN0
Checking: HDD
Sensor: Temperature Type: Temperature Value: 26
s.Name=Temperature
Sensor: Used Space Type: Load Value: 67,71809
Hardware Name=ST3250410AS
Checking: HDD
Sensor: Temperature Type: Temperature Value: 32
s.Name=Temperature
Sensor: Used Space Type: Load Value: 44,25489
Hardware Name=ST3250310AS
Checking: HDD
Sensor: Temperature Type: Temperature Value: 30
s.Name=Temperature
Sensor: Used Space Type: Load Value: 74,04384
Hardware Name=Ethernet
Checking: NIC
Sensor: Data Uploaded Type: Data Value: 1,051758
Sensor: Data Downloaded Type: Data Value: 3,5173
Sensor: Upload Speed Type: Throughput Value: 12758,05
Sensor: Download Speed Type: Throughput Value: 5538,295
Sensor: Network Utilization Type: Load Value: 0,1463708
Hardware Name=Ethernet 3
Checking: NIC
Sensor: Data Uploaded Type: Data Value: 0,04324725
Sensor: Data Downloaded Type: Data Value: 0,6420373
Sensor: Upload Speed Type: Throughput Value: 91,60709
Sensor: Download Speed Type: Throughput Value: 81,06239
Sensor: Network Utilization Type: Load Value: 0,001381356
Т.е. в HardwareSerialMonitor я добавил вывод в COM использование памяти видеокарты, а в скетче добавил её обработку и собрал всё мне необходимое на одном экране.
Правда так и не нашел, как выводить датчики материнской платы, видимо для этого нужна другая библиотека. Но для большинства это и не надо, просто в моём случае правильная температура процессора показывается как датчик №1 матери.
Схема подключения разная возможно из-за того, что пины подключения задаются в самом скетче, а значит надо разбирать подключение с самим скетчем.
К примеру мой экран подключается по I2C и для подключения к удобным мне пинам (ну а точнее что бы не перепаивать конструкцию выше, что осталась от первой версии метеостанции) я добавил в скетч:
А по TTF я вот по быстрому нашел страничку http://robotchip.ru/podklyuchenie-tft-displeya-1-8-k-arduino/. Тут подключение задается строками
Но стоит заметить, что в этом случае команды вывода на экран другие и придется переписывать всю вкладку DysplayStyle. Но это я так по быстрому глянул. Возможно есть способы и проще.
По крайней мере просто графика и тест проходит нормально, а вот мониторинг глючит.
Подозрение именно на эту проблему, т.к. (как выяснилось) моргание светодиодом при приеме данных на NodeMCU — это результат «мистического» взаимодействия со строкой display.display(); при использовании OLED экранов.
вроде работает, частоту hwmonitor у амд как я понял не умеет показывать в итоге статичную цифру сам написал
У меня частенько при перезагрузке/запуске компа частота начинает показывать погоду на Марсе. Исправляю перезапуском самого Serial Monitor, но и после этого в основном показывает максимальную частоту.
Самое интересное, что когда компилируешь Serial Monitor в Visual Studio, по окончании монитор запускается и его работа контролируется Студией. В этом случае показ смены частоты процессора более выражен.
И еще, раз видеокарта Nvidia, можно заставить показывать использование памяти. С своей версии HSM я добавил такую возможность, но так как поменял карточку на Радеон, в скетч добавлять не стал.
Если хотите, можете попробовать мою версию с таким выводом — ссылка на файл на OneDrive
Для показания надо добавить в скетч строки:
Правда это не последняя версия. Меня бесило, что в Win10 по ALT-TAB вылазит пустое окошко приложения. В итоге с помощью говнокода (как я подозреваю) я решил эту проблему.
А ещё hdwmonitor обновился и умеет в камни АМД теперь.
Что AMD сделали — это хорошо, но я на днях перелез на Xenon. Тут смену частот показывает оперативно.
Запускаю и… послан, ибо нет библиотеки Adafruit-ST7735. Ну это для меня не проблема. Скачиваю библиотеки, запускаю… и послали ещё дальше раскидистой такой портянкой.
Удаляю библиотеку, скачиваю с github.com, устанавливаю ручками, запускаю… «А, ты уже вернулся? Ну так сходи туда-же еще раз. За одно и дорогу получше запомнишь!»
В общем решил пойти на крайние меры — удалил всё из папкиC:\Users\%пользователь%\Documents\Arduino\libraries, установил только необходимые библиотеки, запрашиваемые при компиляции и проверка прошла без ошибок.
Пишу просто в надежде, что кому-то это может помочь.
Собирается без особых плясок с бубном
для тех кто искать будет инфу: заработало на плате D1 mini pro и NodeMcu (код запустился без каких либо изменений, тупо загрузил и заработало)
на ардуино нано не отображает значения, не хватает оперативки, а если использовать более ранние версии данного кода, тогда работает если видит экран в разрешении 128 на32, и никак по другому не удалось запустить
тут мало кто отвечает спустя столько времени, так что думаю инфа будет полезна