µDino is an alternative to the Arduino desktop application on macOS. You can visit the µDino project website here.
An “Arduino Board” is a type of small computer which can be programmed to perform various tasks. For example, by connecting sensors, doing some calculations and controlling motors and some LEDs, many creative projects can be realized. Together with the Arduino software it is much easier to start such a project compared to the traditional programming of microcontrollers. Because of the hardware and the libraries, the Arduino project makes many projects possible, plus it has a community with many great resources. We have personally used Arduino in many projects. With µDino we now want to improve the aspect we considered the weak point, the desktop application.
By designing an alternative application, we want to help beginners ease their entry into the Arduino world and create an optimized user interface that provides a more comfortable workflow.
We noticed shortcomings that are relevant for both beginners and advanced users. For example, the lack of guidance or explanation of the various terms during the first time use of the software. Or hard to read error messages. Another point is the “look and feel” of the application, which should be consistent with the surrounding system and create a pleasant workflow and working environment. Arduino chose the Java option, which is understandable given the cross-platform capabilities, but the result is a user interface that looks and feels out of place everywhere. This led to the slogan “Working with Arduino doesn't need to be Java”.
Throughout the entire design and creation process of µDino we incorporated many of our ideas to improve and optimize the Arduino workflow:
Interactive Intro Guide
Support for inexperienced users when opening the application for the first time is an essential aspect. An interactive guide helps to set up the working environment and explains every step.
µDino's horizontal navigation perfectly follows the workflow and can simultaneously be very screen estate efficient. The four sections are needed in different phases of the workflow. Each section can be reached quickly by scrolling, clicking on the handle or using shortcuts. Alternatively µDino scrolls to a specific section to show information currently of importance.
In this section the general setup is visualized and managed. The three basic components that are managed are:
The source code in the form of a project is stored on the computer. All Arduino projects can be managed here in one place. This area also provides some useful information, e.g. when the project was last compiled or if it uses the global Arduino standard libraries or the special µDino feature which allows managing libraries locally within a project.
The connection between the project on the computer and the Arduino board is the serial port. It defines which port on the computer the Arduino hardware is connected to. It is used for communication with the Arduino and for programming. This can be a source of confusion for inexperienced users. µDino tries to intelligently select a port in automatic mode. Of course a port can still be selected manually, which is necessary if a user has e.g. several Arduinos connected to the computer.
The last link in the chain is the Arduino board itself. There are many different versions, but the correct one must be selected for the upload to work correctly. The idea presented here is to let the user create a library of their Arduino boards. The ability to name each board individually makes it easier to distinguish between them. This makes it easier to choose the right board and allows the user to know which program was last uploaded to a particular board. Additionally, some useful hardware information is displayed for each board, such as the allowed current of I/O pins.
Helpful and easy to read error messages make it much simpler to locate errors. µDino parses the errors of the compiler and displays them in a more understandable way. Additional clarity is achieved by displaying the less important warnings separately (or not at all) instead of being mixed among the error messages. If it is unclear what an error means, it is possible to search for it by selecting the relevant part and clicking on the search button at the bottom. µDino recognizes the search engine that the user has set as default and uses this wording to ensure a consistent experience throughout the system.
3. Serial Monitor
The serial monitor allows users to access the serial communication interface of Arduino boards. Compared to Arduino.app, two points stand out, the chat-like structure and the counter for repeated messages. In the Arduino.app, the user's messages disappear after sending, i.e. in case of a flood of messages it is not clear which message was the Arduino board's response. The chat-like structure of µDino makes the sequence of events much clearer. Another way to deal with many received messages is not to output all identical messages but to count how often they were received. This not only reduces the fast scrolling of messages, but the information about how often a certain message is received could also be of interest.
This is the place to get practical help and get started quickly with a project. One of the tutorials might already contain some basic features a user might want for their envisioned project. After a quick search, it is easy to create a project from a tutorial, which is often a good starting point. For assistance with programming basics like loops or using Arduino's serial interface, another search can quickly provide useful sample code.
µDino focuses on working with existing source code editors. Creating a good editor is not a trivial task, as one can see with the Arduino.app. That's why there are a number of projects that focus exclusively on this problem. And users may already have invested time to configure and get to know their preferred editor. µDino takes advantage of this and lets users conveniently work with the editor of their choice.
The current project can be opened with the configured editor in the setup section. µDino detects when changes are saved, automatically recompiles the project in the background and gives feedback via a notification if the compilation was successful or if errors occurred.
µDino is written as a native macOS application in Xcode, and I couldn't resist to use the recently announced Apple programming language Swift.
In the background µDino uses the Arduino-Makefile project. It uses many resources like the compiler directly from the Arduino.app. But it is not fully compatible with existing Arduino code, mainly because there was no substitute for the Arduino preprocessor which merges all Arduino code files. The Arduino preprocessor is written in Java, and I wanted to stay true to the slogan “Working with Arduino doesn't need to be Java”, but at the same time ensure compatibility with most Arduino source code, so I wrote an Arduino preprocessor in Ruby, whose source code can be found on GitHub. Another aspect of being “Arduino Makefile”-based is the need for the Arduino.app. µDino looks to see if it can find any Arduino.app on the system and even prioritizes them based on their location. For example, an Arduino.app in
Applications is preferred to one in the
Downloads. It can be manually selected in the settings which Arduino.app should be used. This has the advantage that µDino releases are largely independent from Arduino.app releases. So improvements and bug fixes in the Arduino core or the use of a new compiler can be used immediately without the need for a new µDino version.
Another technical aspect µDino improves are “project specific libraries” - imagine you want to use different or maybe an edited version of the same library for different projects. The Arduino Sketchbook folder does not support this. When µDino finds a folder named
libs in a project folder, it automatically uses this folder to search for libraries.
This project was part of my interaction design studies at HfG Schwäbisch Gmünd.
Together with Lara Koch, 4th semester, “Application Design 2”.
Advisor: Prof. David Oswald