Project POS

Point of Sale

  • For the need of a friend of mine, I've prototyped a point of sale for its business. He manages a restaurant. In practice, this is all about a touchscreen display run by a Raspberry Pi 3. The system is roughly simple. Instead of tailoring a special linux distribution through the use of BuildRoot or Open Embedded, I preferred a simple and proven Ubuntu release which provides suffiscient requirements for the job to get done and offers the possibility of an extension with tools and apps supplied by the main repositories of Ubuntu.

    Basically, the main app is based upon Qt5 toolkit (v5.1.1) which supplies a platform layer for X server for displaying windows (xcb support). Technically, this app aims to make product ordering easier for customers, and processing easier for the team.

    Key features:
    - Easy ordering process
    - SQLite DB for orders
    - Virtual keyboard
    - Planning auto-management
    - Archive for processed orders




    Below, the standard form factor for a POS. This is a 1024x768 screen, HDMI/VGA inputs with a mono-point touchscreen. It is intended to fit with a small computer unit.
    Touchscreen feature is available through USB plug and is recognized as a mouse device by linux kernel in /dev.



    A Raspberry Pi 3 is used for this prototype. It provides sufficient power to run an entire OS (Ubuntu 16.04LTS) and the business application.
    OS and application are installed onto sdcard.
    Click here for specifications. This is an great board, even though it lacks an RTC to be fully operational off-line.



    Below, board is booting..



    Right after X server is loaded, we enter a touchscreen calibration process. This is a mandatory step for the system to compute and apply factors of correction when triggering input events.



    After calibration process, application starts up with its GUI. First screen to appear is the login screen. TextLabel is intended to contain the brand name of the business. Below the login fields, there is homemade keyboard. I could have used a system virtual keyboard (like 'on-screen') with the drawback of not controlling its on-screen coordinates, and I needed something that fits seamlessly into the GUI.



    Below, one of the main part of the application. This screen is responsible for placing orders. We fill basic informations like name, phone number, products to be ordered and checkout price is automatically calculated as well as order availability.



    ..once you got started appending orders, you can switch to Orders screen which displays current orders being processed with a blinking green area. Each new order stacks over the previous one, describing the content and possibly pause an order for various reasons.



    More importantly, the system is able to determine the best availability for an order, taking into account several parameters, like an accurate evaluation of timing process for each order and the availability of planning. This aims to ease the workflow of order process, filling gaps of spare time. Time is even more money than before ! ;)



    ..in the mean time, everything is logged into DB, for backtrace.



    Eventually, you may find all the orders in the Archive screen.. with a bunch of statistics.



BadCav'PortFolio Framework