-
Notifications
You must be signed in to change notification settings - Fork 16
Home
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.
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
- BicopShield - a bicopter 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
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 [email protected] 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!
You can also find the latest files for PCBs and 3D-printed parts in this repository. There may be newer releases of some shields than those presented in this Wiki.
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.
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 | |
BicopShield | ✅ | R1 | |
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 | ✅ | ✅ | ✅ | ||||
BicopShield | ✅ | ✅ | |||||
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 | ✅ | ✅ | ✅ | ✅ | ||||
BicopShield | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||
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
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
.
- 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
- 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 findAdd-Ons > Get Hardware Support Packages
then find the Simulink Support Package for Arduino Hardware. ClickInstall
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.
Takács et al., 2018-2023. The hardware design, software and manual featured in this repository is licensed under a Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0). Please consider citing our work in your publication.