Our Golf Cart instru­ment clus­ter is an inter­nal pro­ject in which deve­lo­pers from Codelab’s HMI Cent­re of Com­pe­tence crea­te an instru­ment clus­ter 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 screen to crea­te a pro­to­ty­pe and then the com­ple­te soft­ware. Qt for MCUs is a new gra­phics frame­work and tool­kit which deli­vers ever­y­thing what is neces­sa­ry to design, deve­lop and deploy GUIs on micro­con­trol­lers. The dif­fe­rence bet­ween 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­ti­ons to run on bare metal or on a real-time ope­ra­ting sys­tem. The frame­work was shared to deve­lo­pers last year.

Main goal of the pro­ject is to increase the employee’s com­pe­ten­ci­es in crea­ting HMI sys­tems and expand know­ledge about the new frame­work. The clus­ter for an elec­tric golf cart shall ful­fill the fol­lo­wing functionalities:

  • Pre­sent the cur­rent speed of the vehic­le, bat­tery level and cur­rent power
  • Inform about lights on, turn signals and various types of failures
  • Enable the ope­ra­ti­on of mul­ti­me­dia devices
  • Dis­play navi­ga­ti­on and cur­rent posi­ti­on of the vehic­le on the map
  • Pre­sent the vehic­le char­ging status
  • Dis­play cur­rent weather


After coll­ec­ting the requi­re­ments, pre­pa­ring the design and set­ting up the envi­ron­ment we went straight to the imple­men­ta­ti­on of the sys­tem. Almost every part of the pro­ject is writ­ten using QML lan­guage. CMake is used for build manage­ment which made our com­pi­la­ti­on pro­cess ful­ly automated.

The main tar­get of the appli­ca­ti­on is STM board but the pro­gram can also run on Win­dows. This faci­li­ta­tes the imple­men­ta­ti­on and test­ing pro­cess becau­se STM board is not always available for every deve­lo­per. We crea­ted the inter­face which makes it pos­si­ble to send the spe­ci­fic events to the appli­ca­ti­on on but­tons click. It allows us to test the beha­vi­or of the appli­ca­ti­on on various events.

Usual­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­t­ed per­for­mance of the STM board. Appli­ca­ti­on had too litt­le frames per second so its per­for­mance was not smooth at times. We had to find a cau­se. In order to do that we had to ana­ly­ze in which way resour­ces are loa­ded to the pro­gram. We also che­cked the impact of the ani­ma­ti­ons in the pro­gram on the sys­tem per­for­mance. We found out what we could do bet­ter. After making the chan­ges our pro­gram runs much smoot­her. The pro­ject allo­wed us to learn not only about a new frame­work but also about opti­miza­ti­on methods.

The pro­ject is still in pro­gress. The appli­ca­ti­on is con­stant­ly evol­ving with new func­tion­a­li­ties. The gra­phi­cal inter­face is chan­ging to be more user-fri­end­ly. 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 about it.