Our Golf Cart instru­ment clu­ster is an inter­nal pro­ject in which deve­lo­pers from Codelab’s HMI Cen­tre of Com­pe­ten­ce cre­ate an instru­ment clu­ster for an elec­tric golf vehic­le. We cho­se the Qt for MCUs tech­no­lo­gy and an STM micro­con­trol­ler with an inte­gra­ted scre­en to cre­ate a pro­to­ty­pe and then the com­ple­te softwa­re. Qt for MCUs is a new gra­phics fra­me­work and tool­kit which deli­vers eve­ry­thing what is neces­sa­ry to design, deve­lop and deploy GUIs on micro­con­trol­lers. The dif­fe­ren­ce betwe­en nor­mal Qt and Qt for MCUs is that Qt for MCUs uses the new QML ren­de­ring engi­ne — Qt Quick Ultra­li­te (QUL) which allows appli­ca­tions to run on bare metal or on a real-time ope­ra­ting sys­tem. The fra­me­work was sha­red to deve­lo­pers last year.

Main goal of the pro­ject is to incre­ase the employee’s com­pe­ten­cies in cre­ating HMI sys­tems and expand know­led­ge abo­ut the new fra­me­work. The clu­ster for an elec­tric golf cart shall ful­fill the fol­lo­wing functionalities:

  • Pre­sent the cur­rent spe­ed of the vehic­le, bat­te­ry level and cur­rent power
  • Inform abo­ut lights on, turn signals and vario­us types of failures
  • Ena­ble the ope­ra­tion of mul­ti­me­dia devices
  • Display navi­ga­tion and cur­rent posi­tion of the vehic­le on the map
  • Pre­sent the vehic­le char­ging status
  • Display cur­rent weather


After col­lec­ting the requ­ire­ments, pre­pa­ring the design and set­ting up the envi­ron­ment we went stra­ight to the imple­men­ta­tion of the sys­tem. Almost eve­ry part of the pro­ject is writ­ten using QML lan­gu­age. CMa­ke is used for build mana­ge­ment which made our com­pi­la­tion pro­cess ful­ly automated.

The main tar­get of the appli­ca­tion is STM board but the pro­gram can also run on Win­dows. This faci­li­ta­tes the imple­men­ta­tion and testing pro­cess becau­se STM board is not always ava­ila­ble for eve­ry deve­lo­per. We cre­ated the inter­fa­ce which makes it possi­ble to send the spe­ci­fic events to the appli­ca­tion on but­tons click. It allows us to test the beha­vior of the appli­ca­tion on vario­us events.

Usu­al­ly when you learn some­thing new you have to deal with some pro­blems. In our case it was a pro­blem rela­ted to the limi­ted per­for­man­ce of the STM board. Appli­ca­tion had too lit­tle fra­mes per second so its per­for­man­ce was not smo­oth at times. We had to find a cau­se. In order to do that we had to ana­ly­ze in which way reso­ur­ces are loaded to the pro­gram. We also chec­ked the impact of the ani­ma­tions in the pro­gram on the sys­tem per­for­man­ce. We found out what we could do bet­ter. After making the chan­ges our pro­gram runs much smo­other. The pro­ject allo­wed us to learn not only abo­ut a new fra­me­work but also abo­ut opti­mi­za­tion methods.

The pro­ject is still in pro­gress. The appli­ca­tion is con­stan­tly evo­lving with new func­tio­na­li­ties. The gra­phi­cal inter­fa­ce is chan­ging to be more user-frien­dly. I hope that some­day the pro­ject will see the light of day and we as deve­lo­pers will be able to boast abo­ut it.