Skip to content
AnnaVargova edited this page Feb 5, 2023 · 67 revisions

AutomationShield is an open-source hardware and software initiative focused on creating tools for control engineering and mechatronics education.

The core of the project are reference designs of extension modules for the popular Arduino microcontroller prototyping boards, which are implementing feedback control experiments to teach control systems engineering and mechatronics. These hardware extensions—known in the Arduino world as shields—are then in essence experimental systems on a single printed circuit board (PCB).

The didactic process for teaching control engineering is often overly focused on theory and lacks practical implementation and hands on experience. In numerous universities the didactic tools and lab equipment for control engineering and mechatronics is simply not available, since a single laboratory tool for feedback control costs in the order of tens of thousands of dollars. Even if the tools are available in the laboratory, students cannot take these home and complete assignments or experiment outside of the academic environment.

Our aim is to design feedback control experimental devices that can fit on an Arduino shield and provide an application programmer's interface (API) and examples for students, educators and researchers.

About the Shields

Currently the reference designs of these shields are available:

  • MagnetoShield - a magnetic levitation feedback experiment
  • FloatShield - a floating ball feedback experiment
  • HeatShield - a thermal system feedback experiment
  • MotoShield - motor speed and position feedback experiment
  • OptoShield - a low cost optical feedback experiment
  • LinkShield - a rotational link feedback experiment
  • AeroShield - motor speed and angle feedback experiment
  • BoBShield - the classical ball-on-beam (seesaw) control experiment
  • PressureShield - a pressure control experiment

We are in the process of developing new types of shields. We are currently working on a new experimental device to add to this portfolio in the future. Concept devices include

  • TempShield - a device to teach temperature metrology concepts
  • FurutaShield - a Furuta rotational pendulum shield
  • TugShield - an elastic structural deformation feedback experiment

Where can I buy an AutomationShield Device?

Unfortunately we lack the infrastructure to manufacture, market and sell the shields en-masse, to individuals, using a online shop and at low price points. We may be able to help to equip a laboratory with custom and hand-made devices, please contact us at automationshield@automationshield.com for more information and a quote.

However, remember this is an open-source hardware project and you are welcome to manufacture your own devices. We only ask you not to sell these commercially and to give credit in references to our work. Here, we include downloadable CAD files for the PCB, a list of required components and in some cases files necessary for 3D printing. A major design goal while making the boards was low-cost, simplicity and universality. We always attempt to exclude exotic mechanical or electrical components. The files necessary to produce the circuit boards are available for download, these can be sent to PCB manufacturing services and made for as low as $5 for 10 pieces. Making the shield itself is a great educational experience too!

About the Library Build Status CodeFactor Codacy Badge DOI

The main role of the software part of the AutomationShield project is to provide C/C++ source code to manage inputs and outputs to the individual boards. In other words, the library is an application programming interface (API), so that students and educators can focus on feedback control design, instead of programming low-level hardware drivers. In addition to this, the AutomationShield library aims to provide complete routines for implementing precise timing for control. The library contains numerous examples that implement examples in system identification an feedback control. The library contains examples written for the Arduino IDE, MATLAB and Simulink. Those who do not wish to complete the hardware may still benefit from the library, as there are numerous experimental measurements that can be used for system identification tasks and feedback control simulations based on the physical hardware.

Supported Shields and Software

The library currently supports the following AutomationShield hardware in their respective release (R) versions:

Release Beta Hardware
MagnetoShield R4
FloatShield R4
BOBShield R2
LinkShield R1
MotoShield R1
PressureShield R2
HeatShield R1
OptoShield R1
AeroShield R3
FurutaShield ❌¹
TugShield R1
TempShield ❌²
  • ¹ Under development
  • ² Not available
  • ³ Hardware has not been realized yet.

The current status of the library for individual API is as follows:

Arduino MATLAB Simulink⁵ Python³ LabView Octave Scilab
MagnetoShield ❌¹ ❌¹⋅² ❌¹ ❌¹
FloatShield ✅¹⋅⁴
BOBShield
LinkShield ❌¹
MotoShield ✅¹
PressureShield
HeatShield ✅¹
OptoShield ❌¹
FurutaShield
TugShield
AeroShield
TempShield
  • ❌ Can not be deployed for technical reasons.
  • ¹ Serial communication only, no deployment possible.
  • ² LabView LINX: lower end of loop speed is about 140 Hz (7 ms) for a LED toggle example. Tested with LabView 2020.
  • ³ CyrcuitPython
  • ⁴ Works for FloatShield R1-R3. Currently under development for R4 - it is likely to be implementable.
  • ⁵ An Arduino Mega2560 is recommended for the Simulink API. External mode and data logging is not guaranteed to work on the Arduino Uno for its limited memory.

The library implements the following feedback control concepts in real-time hardware examples in at least one of the API for at least one supported prototyping board:

Model¹ Identification² PID³ LQ⁴ MPC⁵ PP⁶ Kalman⁷ Luenberger⁸
MagnetoShield
FloatShield
BOBShield
LinkShield ✅ᵝ
MotoShield
PressureShield
HeatShield
OptoShield
AeroShield
FurutaShield
TugShield
TempShield
  • ¹ Mathemaical-physical analysis of the system dynamics
  • ² Experimental system identification
  • ³ Proportional-Integral-Derivative (PID) control
  • ⁴ Linear Quadratic (LQ) control
  • ⁵ Model Predictive Control
  • ⁶ Pole placement
  • ⁷ Kalman filtering
  • ⁸ Luenenberger observer
  • ᵝ According to the Positive Position/Velocity Feedback variant
  • ᵞ Contains bugs

How to Get the Library

If you are not familiar with Git, please download the latest release of the library from the Releases section, as the production code download does not include certain dependencies. Search for the AutomationShield_vX.Y.tar file in the Assets, where vX.Y is the major and minor version number of the release. Do not use the Source Code files in the Assets, since these lack the dependent code as well.

For those who wish to use Git, this repository contains submodules, therefore you should use git clone --recursive git://github.com/gergelytakacs/AutomationShield.git to get these as well. In case you have already cloned the repository, the submodule directories in src/lib/ may be empty. In this case, you have to initialize it by calling git submodule update --init --recursive.

Arduino IDE Quick Start

  • In case you have cloned the repository in Git, please create a Zip archive, then open the Arduino IDE and read the archive Tools > Include Library > Add .ZIP Library.
  • You may browse for examples in File > Examples > AutomationShield

Simulink Quick Start

  • Download and install MATLAB / Simulink R2019a or newer. Be sure to install Simulink Coder and Embedded Coder and DSP System Toolbox features along with the base installation. In case your current installation does not support these features, go to Add-Ons > Get Add Ons and find the missing packages.
  • Install Simulink Support Package for Arduino Hardware. On the Home tab find Add-Ons > Get Hardware Support Packages then find the Simulink Support Package for Arduino Hardware. Click Install and follow the usual installation procedure. Installing a support package requires a MathWorks account.

Tips:

  • We recommend you to use the Arduino Mega2560 for the AutomationShield Simulink API. Simulink examples should run on the Arduino Uno for most cases, but data logging and interactive (External) mode is not guaranteed to work on the Uno. The Simulink compilation process decides whether this functionality will fit into the available memory of the board, and according to our experience, this may change from Simulink release to release - even for the same example.
  • Should you run into the rtiostream.h missing error, follow this procedure.