DAVEga: Battery monitor, odometer, speedometer

Here’s a project that I’ve been working on for quite a while and that I’d like to share with this community since I feel like I owe you guys a lot.

It’s a gadget that you plug into a VESC based controller to display some of the most important data, such as battery status, speed and distance travelled. It not only displays the data, but it also stores them and thus it doubles as an odometer. The design is Arduino compatible and thus the firmware can be easily customized without any special equipment.

I know that there have been a number of similar projects, but I wanted a display with nice graphics (instead of text only) and I wanted it to be compact. BTW, the graphics is inspired by @Pimousse’s smart ring.

I thought that the gadget would be best demoed in a video. So here it is. Please bear with my presentation skills. :smile:

Some noteworthy features:

  • uses both battery voltage and coulomb counter for estimating current battery capacity
  • data retained after powering off and on again
    • updated in reasonable intervals so that the EEPROM doesn’t get destroyed (should last for 10,000 km)
  • automatic detection of battery fully charged => resets the coulomb counter
  • odometer can be initialized to a custom value
  • firmware customizable with Arduino IDE
  • low cost - less than $10 for the parts

I would like to hear your thoughts and suggestions. Also, please let me know if you’d like one. I will make the code available soon. I want to do a little bit of clean up first. I don’t mind embarrassing myself as an DIY builder since I’m a noob, but I don’t want to embarrass myself as a software engineer since that’s what I’ve been doing for 20 years+ for living. :smile:

If there’s interest, I think I could have professionally built PCBs made and collect the parts for DIY kits. It should be around $10 + shipping. I’m not looking to make money of this. I would love to spread these gadgets among people and it would be great if we can make them better together. For example, it would be helpful if someone designed an enclosure or a panel mount since I personally don’t have much experience with that and I don’t even have a 3D printer.

Update: There’s a post down there that you can like if you’d like one of these.

Update 2: Beta-testing kits can now be ordered here.


Might be good to incorporate it into @akhlut x things and mount above the front truck


This is great. I personally wouldn’t need something like this but it’s clear you’ve put some good work in here.

Edit. Just watched your video and I’d be nuts not to find a way to incorporate this into a build for $10 right? Even if it’s just sitting inside the enclosure gathering odometer readings it’s worth the money

1 Like

This looks very interesting. $10???

1 Like

@Grozniy I’m not aware of the “x things”. Could you post a link please.

1 Like

So the display is the most expensive part and you can get it for less than $5 from AliExpress. The chip is around $2 and the USB-UART adapter also around $2. Other than that, it’s just small and cheap parts.

1 Like

Everything about this is excellent… except the name.

It needs an epic name, something Will Park industries would be willing to back.

As it’s a personal helper of sorts and following the line of recent Amazon and Google naming activity I suggest calling this: Dave


that looks really great, especially for 10$ why not. just interested, how the speed and battery voltage calculated? if I change from 10s to 12s or the gearing the values need to be changed too.

how about water resistens? you think there is an option to get it as min splash proof?

Awesome tool ! Proud to be kind of inspiration ! Yours is crazy ! Coulomb counting and non-volatile variables (such as odometer, working hours, etc.) are defo added-value that we miss. I’d love to see you hardware. Using a Nano (as you mention in your video) is a bit overkill compared to a simple Atmega 328. I need to go this way for a SmartRing V2 less bulky.

Thanks for sharing and pushing it Open Source. :slight_smile:


1g6dnx Dude… :+1::+1::+1:


would gladly pay a markup for one of these.


Love the design!

I think you have you have kicked a goal in term of feedback to the rider, especially for the cost of components.

I realise this argument is a bit premature, but aesthetically I do think the layout adjustment of the data could be worked on to improve the readability of the Speed graph readout, perhaps rotate the readout 90 degrees to use a landscape orientation for the screen instead of portrait? (because humans). Regardless, I want one.

And while I can see you have used light blue square blocks on your prototype to demonstrate changes in speed, and green through red for battery capacity, I am sure an enterprising coder can make something a bit more nuanced and refined.

Suggestion: using inspiration from a Honda S2000 tachometer for the speed graph :smile:



How are you going to do coulomb counting? Current clamp or transformer?

I think it would be great to keep the profile of the device down. rather than mounting the board and Screen together. You can mount the board under the deck inside your enclosure and have a wire going to the screen mounted top side.


sandwich style…:sweat_smile: good idea!

Thanks all for the nice comments.

Uh, OK. :sweat_smile: Is that a random pick or is there an obvious justification that I have missed? I agree it needs an enterprise level name and I have nothing against Dave, but just to give the opportunity to the others, are there any other suggestions? :smile:

Battery voltage is read directly from the VESC. So is the current motor erpm, which can be converted to speed. You need to provide your wheel size and gear ratio in the firmware config variables. The same goes for estimating the battery capacity from the voltage. You need to define the number of cells and you can even customize the discharge ticks, i.e. you can define which voltage corresponds to 100%, 50%, 0% etc. You can make it as finegrained as you want to.

Sure. We could have various skins. Landscape orientation is not a problem. If you or anyone else would like to design an alternative skin (as a 176x220 bitmap – that’s the display resolution), I’m happy to do the coding to make it work. Just note that the display resolution is low and complex shapes may not look very nice. That’s why I’m using squares, rectangles and simple fonts with no anti-aliasing.

It would also be possible to display more VESC data, such as temperature, motor current, etc.

The coulomb counting is done inside the VESC and I honestly don’t know how it’s done. I just read the values from the VESC using UART.

Yes, that’s definitely possible. It’s just a matter of having a cable between the headers and the display rather than plugging the display in directly.


Did you read a single vesc or both of them? Because if you running dual you need to have both those values :wink:

1 Like

I read only one and multiply by the number of VESCs (config option). Is that a bad estimate? Reading from both with CANBUS forwarding is of course also possible with some extra work. I think that will be the V2.0. :slight_smile:


That’s a matter of the enclosure, which I don’t have and I’m not sure I can design it. But I guess if you can make one that’s water-tight around the display, it should make the thing at least splash proof.