Looking for suggestions to improve the UI in my homemade battery analyzer. - Page 1
Forum section: electronics / projects

author: Refrigerator
author_rank: Super Contributor
timestamp: June 11, 2021, 07:27:47 pm
content: I had a bunch on 18650 cells that needed to be analyzed but i also wanted to check what overdischarged cells do after recovery by testing their capacity over multiple cycles. So i built a battery capacity analyzer that can also cycle cells multiple times while recording the capacity each time.The project is pretty much done and is currently analyzing cells just like any other battery analyzer but i think the UI could still be improved.Even if i can live with the UI as-is, I'll be likely making similar projects in the future.I think it would be beneficial to learn to make a nicer UI now so that when another project comes along i'll already be over the learning curve somewhat.Also, right now i am willing to make compromises because it's my project but there might be a day when i'll have no say in the matter so i might as well get ready for it.What's inside the analyzer:TP4056's were used to control the charging and a CC load is used to discharge. Everything is controlled by an arduino and a 74HC595 to expand outputs. TP4056 charged LED outputs are fed into arduino and used to detect when the cells are charged.The analyzer is controlled with a single rotary encoder that has a push button inside.Currently the UI works as follows:A) On startup rotating the encoder changes between cells (or banks).Short push ( t < 1,5s ) does nothing.Long push ( t> 1,5s ) enters and exits configuration mode.B) In config. mode:Rotating encoder changes the value of selected setting.Short press chooses the setting to change.There are 4 settings in total:1) Test ON-OFF starts the test. END displays in this field when the test is over.2) Capacity display - mAh or Wh, this is self explanatory.3) Cycles - this setting decides how many discharge capacity tests are done on a single cell.4) View previous cycles - to view the data from previous cycles (to write it down).Right now i find the UI a little cumbersome. For example if i want to check the capacity of a cell that just finished discharging i have to: rotate to switch to cell -> long press to enter config -> click to choose view cycles -> rotate to choose cycle to view, and after this the mAh shows up but if i want to see Wh i have to additionally click over to the mAh field and rotate the encoder once to change to Wh.What i'm thinking:A) Config mode is unnecessary, perhaps it would be better to make it so that you are always in config mode and add cell number as another field to select with short press then rotate to switch cells.B) Long press would only start the test. There is currently no way to abort or pause a test so perhaps i should add that as well.Abort would be easy enough.C) There's also no way to see whether the cell is charging, discharging or charged, other than looking through the went hole inside and looking at the LED's or looking at the voltage on the LCD and guessing.D) I think i could add more things to display in the ON-OFF-END field on the top right of the LCD, but it would need to be 3-ish characters. I think there should be a CHG -charging, CHD -charged, OFF - charger and load is off, DSG -discharging, DSD -dischargedand maybe ABD - aborted and PSD - paused.CHG and CHD might be too hard to tell apart at a glance so perhaps CH+ and CH- would be better, maybe IN and OUT to indicate the charge?Arduino IDE allows me to add some custom characters to display, perhaps i could do it like they do in phones where a little battery icon is shown filling up?E) the "Cell n" field takes a lot of space, i think i could change it to "1234" (without spaces) where a selected cell would be highlighted somehow. I could use this to display the state of each cell without having to actually scroll to it to see. For example if cell 1 is selected the "1" is highlighted and if cell 2 is done charging the character "2" would indicate, perhaps by flashing or alternating between "2" and some letter like "F" for full?What do you guys think? I would appreciate some input.

author: coromonadalix
author_rank: Super Contributor
timestamp: June 12, 2021, 10:27:01 am
content: Why not using an 20x4 lcd ?? it would be less cluttered ?? the hard part is understanding the designer mind loll

author: Renate
author_rank: Super Contributor
timestamp: June 12, 2021, 11:13:31 am
content: Use an OLED display. Then you can use reverse video or box the current selection.It will give you enough resolution to allow a minimal status of the 4 circuits on a bottom fixed status line.Maybe add another pushbutton or two.Once you get into short and long presses things get too complicated.Maybe even 4 pushbuttons for quick select of channel?Add a USB HID interface to your desktop.Then you can plot things nicely but still allow the analyzer to run standalone.

author: tooki
author_rank: Super Contributor
timestamp: June 12, 2021, 12:51:39 pm
content: Quote from: Refrigerator on June 11, 2021, 07:27:47 pmAll of this is the result of wanting to cram a ton of information (both output and input) through a very minimal (physical) user interface. IMHO as a trained, former user interface designer, if you have to resort to long presses for core functionality, you’ve already got an overloaded UI. (And yes, I think this is the case with a ton of commercial products.)This is something that would lend itself well to a small touch screen. But also consider channel specific controls and indicators, like LEDs and physical switches.Heck, tiny displays are so cheap now that you could consider using a little 0.96” OLED for each channel, but you’d still have to add more controls to actually let you enter information in a better way.

author: phil from seattle
author_rank: Super Contributor
timestamp: June 12, 2021, 02:17:38 pm
content: I agree with the others that you have an overloaded UI. If you put the project down for a year, would you remember how it works?If I were doing this, I would use a larger, graphical display. 320x240 displays are cheap and easily driven from an arduino. Then you could label your fields, highlight selected ones, use fonts and so on. You could also add graphs to display voltage over time and such but that isn't what you asked about...

author: Refrigerator
author_rank: Super Contributor
timestamp: June 12, 2021, 02:37:09 pm
content: Quote from: tooki on June 12, 2021, 12:51:39 pmThanks for the input. I think long press still has its place, sort of like a confirmation when making major changes like staring the test, especialy when there's multiple cycles to complete.And currently i don't have a single IO remaining on the arduino, which is why i chose the encoder. It's also easier to mount on the front panel.That's also why i used the 74CH595, because i only had 3 IO left and needed to control 8 more outputs.Quote from: phil from seattle on June 12, 2021, 02:17:38 pmThat's exactly why i decided to start this thread.I know the UI because i made it, but a year down the road i would probably have forgotten everything.So it was important for me to find out other peoples opinion.Quote from: coromonadalix on June 12, 2021, 10:27:01 amI had some 16x2 LCD's on hand ready to roll so i decided to use them.Anyways, what i have gathered so far is that my UI is overloaded, 16x2 LCD is outdated, external interface is needed and more buttons need to be added.Also the V1 PCB has so many bodges that the thing is probably at V2 already.So the thing needs remaking from scratch basically.

author: tooki
author_rank: Super Contributor
timestamp: June 13, 2021, 08:41:03 am
content: One easy fix is to use I2C for most of your peripherals. You can easily get I2C LCDs of various types, and I2C port expanders, led drivers, etc are commonplace. In the project I’m just finishing up at work, all the peripherals except the LCD (color TFT, I2C is too slow), Bluetooth module (uses UART), and addressable RGB LEDs are connected via I2C. Among the I2C devices are an LED driver and two port expander chips, as well as the li-ion charger and fuel gauge ICs, so we don’t need to read a separate pin to determine charge status or what stage of the charging process it’s in, since we can get detailed information over I2C.