Introduction: USB CPU and Memory Monitor

This little device shows you the CPU-load, how much physical and virtual memory is used. It shows this data per 10% on 3 ledbars. To do so it uses a VCP (Virtual COM Port), so that it can be connected to a PC via a USB connection to receive the data. Collecting the data and sending it to the device is done by a Python script.

By building my own onboard UART to USB converter and using SMD, I was able to make a relatively small device.

As always, comments and constructive criticisme are very much appreciated.

Step 1: What Do You Need?

To build this device, you will need:
  • An attiny2313 (datasheet)
  • A FT232RL Uart to USB converter (datasheet)
  • A Mini USB B connector
  • 3 x Kingbright DC-10EWA Ledbar(datasheet)
  • 10 x 150Ohm resistor
  • A ferrite bead
  • 2 x 100nF capacitor
  • A 10nF capacitor
  • A 4.7uF capacitor
  • A 6pin female header
  • Materials to make a PCB or some veroboard
  • A Programmer and compiler of your choice

To run the python script on your pc, you will need:

As always, you can use thru-hole components instead of smd parts.

Step 2: The Circuit

The circuit for this project is fairly easy. The USB part of the schematic can be found in the datasheet of the FT232RL as a USB-powered device with a microcontroller.

There are 2 connections from the FT232RL to the attiny2313: RX and TX (actually we need only The TX of the FT2313RL to the RX of attiny but connecting both lines makes debugging the microcontroller a lot easier).

The 3 ledbars are multiplexed. Their cathodes are connected to Port B, PortD.5 and PortD.6. The anodes are connected to Portd.2 - 4.

Miso, Mosi, SCK and Reset are connected to the header for programming together with VCC and GND.

Step 3: Programming

Once everything is soldered together and tested, you can load the actual code.

My code is written in BascomAVR so I added the original .bas-file here for other Bascom users and the code in a .txt-file as reference for C-programmers. I also added a .hex-file so that you can use it immediately.

The code receives the data via the USB and and multiplexes it into the 3 ledbars. The first one is the CPU-load, the second one is the physical memory and the last one is the virtual memory.

Step 4: The Python Script

'And now for something completely different...'

Indeed, a bit of Python.

I wrote the script in Python 2.7 while using PySerial and Psutil. You´ll need to download those 2 modules (links can be found in Step 1).

The script collects the CPU and Memory data via the Psutil-module and sends them over the virtual COM-port to the device.


import sys
import serial
import psutil
ser = serial.Serial(2)   #Change this according to your own COM-port. Remeber that the value you should add is one less than the      
                                     number of your COM-port.
while True:

q = psutil.cpu_percent(interval=1)
q = q/10
cpuload = '%.0f'%(q)
cpuload = 'a'+ cpuload
print cpuload
q = psutil.phymem_usage()
mem = '%.0f'%(q.percent/10)
mem = 'b'+mem
print mem
q = psutil.virtmem_usage()
virtmem = '%.0f'%(q.percent/10)
virtmem = 'c'+virtmem
print virtmem



AJC894 made it! (author)2012-01-05

Can you run analog gauges from it in place of led bar graph.

janw made it! (author)janw2012-01-05

It is possible but you would need a totally different circuit. This ledbars have a connection for each led so the microcontroller chooses a led to light up according to the data. To drive analog gauges, you would need a digital to analog converter to drive the gauges.

MRedu made it! (author)2011-10-28

This looks like a really cool gadget but it would be even cooler if it were bluetooth making it wireless. Is that possible?

janw made it! (author)janw2011-10-28

All kinds of wireless communication are possible but an USB cable is one of the easiest ways to communicate.

shabaki made it! (author)2011-08-12

It would be awesome if you could make something like this to show the available/used memory on like an external hardrive

BodenM made it! (author)2011-08-11

When you say "ferrite beads", do you mean this sort of thing:

BodenM made it! (author)2011-08-02

I'm looking at building this, so I have to ask if it is possible to have 2 cores showing independently, and just the free physical memory, instead of the setup shown here? And if so, could you please show me the changes I need to make (I'm a Python newbie)?

janw made it! (author)janw2011-08-02

I wrote you a code for the dual core setup. If you use this code with the same hex-file loaded in the microcontroller then the first bar is core1, the second is core2 and the last is your physical memory.

Good luck with your project.

BodenM made it! (author)BodenM2011-08-02

Thank you!

stan4 made it! (author)2011-07-30

Awesome work buddy.

You just inspired me, I was looking for something pretty to put on my computer, and be able to call it "mod".

janw made it! (author)janw2011-07-30


stan4 made it! (author)stan42011-07-30

I read through everything in detail, also the documentation for psutil, I couldn't spot a "function" to read the GPU usage, can you give me a few tips? perhaps another library, thanks in advance.

janw made it! (author)janw2011-07-30

There are indeed no functions to readout the graphic processing unit. Psutil workks only for CPU, memory and disks.

Megrathea69 made it! (author)2011-07-30

was thinking,maybe you could add another 2 led bars onto it for Hard Driv(C drive) temperature and fan speed readings as well.

janw made it! (author)janw2011-07-30

I is very easy to do indeed as there are still 2 free I/O pins on the Attiny. It can also be reprogrammed so that it gives the CPU-load of the 2 separate cores instead of the total CPU-load.

imBobertRobert made it! (author)imBobertRobert2011-07-30

good idea!

mathman47 made it! (author)2011-07-29

Interesting application. I use several Widgets on a 2 monitor setup to monitor system activity so I don't really need this, but I'm glad you showed how to do it. It reminds me of why people climb mountains - because they are there. In this case, it is because you can. Great job. Exposure to the code is enough for me.

janw made it! (author)janw2011-07-29

Great to see that there are people who understand that 'because I can' is a great motivation to build stuff. Most of my projects are not really original or pretty but build to see whether I can build it and to learn from it.

bertus52x11 made it! (author)bertus52x112011-07-30

I wish I masterd these skills though...

janw made it! (author)janw2011-07-30

I learned these skills by building stuff like this and learning from it but you will never hear me say that I mastered them. Every day I learn new things and for me thats the main drive to keep building these little projects.

ynze made it! (author)2011-07-29

I'm not very much into devices like this, but... What's the use of having a hardware device like this? Aren't there applications around that monitor data like this under Windows (I use a mac, and there are lots of "under the hood" apps available to do stuff like this...)

I'm pretty impressed by the simple fact that you can MAKE a device like this, anyway...



janw made it! (author)janw2011-07-29

There are indeed enough applications that can show you the data on the screen but when you run full-screen applications (like games), it can be handy to see the data without having to close your application.

It would be easier to read when you have an LCD but I had those bars for a while and so this was a nice opportunity to use them.

About This Instructable




Bio: I'm mainly interested in music, food and electronics but I like to read and learn about a lot more than that.
More by janw:Pickled ChilliesExtra hot sriracha sauce (Mme Jeanette)Build a Nest Box for Bumblebees
Add instructable to: