LinkShield R3 - gergelytakacs/AutomationShield GitHub Wiki
Introduction
Application programming interface
Examples
System identification
Feedback control
Detailed hardware description
Circuit design
Parts
PCB
About
Authors
The LinkShield belongs to the family of control engineering education devices for Arduino that form a part of the AutomationShield project. The basic design of LinkShield consists of a vertically placed motor connected to a horizontal flexible cantilever beam to simulate the vibration response of dynamic systems in motion—such as high-speed slender flexible robotic manipulator arms. The goal is to attenuate the vibrations of the beam measured by an FlexSensor taped on it, thus creating a simple single-input single-output (SISO) feedback loop. The user may also set the reference angle of the servo manually—using a potentiometer.
The basic application programming interface (API) serving the device is written in C/C++ and is integrated into the open-source AutomationShield Arduino library. This library contains hardware drivers and sample exercises for control systems engineering education. All functionality associated with the LinkShield is included in the LinkShield.h
header, which contains the LinkClass
class that is constructed by default as the LinkShield
object. The functions specific to this shield mostly perform input/output peripheral communication.
The summary of basic functions and the illustration below should get you started quickly:
- Output (sensor):
LinkShield.servoPotRead();
- Output (motor):
LinkShield.flexRead();
- Input (actuator):
LinkShield.actuatorWrite();
Before you begin an experiment you must initialize the hardware by calling
LinkShield.begin();
which initializes serial comunication and reference voltage for analog-digital converter (ADC) to maintain both 3.3V system compatibility and analog resolution. Finally, the FLexSensor can be optionally calibrated by running the calibrate()
method to remove sensor bias in the zero bend state.
The FlexSensor can be read at any time instant by calling
float y1 = LinkShield.flexRead();
which returns a floating-point number providing bend value in radians.
The motor shaft position can be read at also any time instant by calling
float y1 = LinkShield.servoPotRead();
which returns floating-point number providing shaft angle also in radians.
ActuaNut
Part | Name | Type/Value/Note | PCS |
---|---|---|---|
Motor | Servo | Micro-servo motor, Savox SH-0257MG, (Edited) | 1 |
IMU | Connector | 4-lead FFC/FPC, Molex 52745-0497 (optional) | 1 |
Pot1 | Potentiometer | 250 mW, 10 kΩ, ACP CA9MV-10K | 1 |
Pot2 | Potentiometer | 250 mW, 10 kΩ BOURNS 3266W-1-103LF | 1 |
R1, R4 | Resistor | 0805, 24,9 kΩ, ROYAL-OHM 0805S8F249JT5E | 2 |
R2,R3,R6,R7 | Resistor | 0805, 10 kΩ, ROYAL-OHM 0805S8J0103T5E (R2,R3 optional) | 4 |
R5,R8 | Resistor | 0805, 1 kΩ, ROYAL-OHM 0805S8F1001T5E | 2 |
C1, C3, C4, C5 | Capacitor | 0805, ceramic, 0,1 µF, KEMET C0805C104M5RACTU | 1 |
C2 | Capacitor | 1206, tantalum, 4,7 µF, KEMET T491A106M016AT | 1 |
IC1 | Op-Amp | LM324AMX/NOPB | 1 |
IC2 | H-bridge | ZXBM5210-SP-13 | 1 |
PCB | 2-layer, FR4, 1.6 mm thick, green mask | 1 | |
Screw | M2×8, steel | 1 | |
Nut | M2, steel | 1 | |
Spacer | 6-hran, polyamide, M2, 10mm | 2 | |
Screw | M2×5, Phillips, polyamide | 2 | |
Nut | M2, polyamide | 2 | |
Shaft | Potentiometer shaft, ACP CA9MA9005 | 1 | |
Header | 6×1, female, 2.54mm pitch | 1 | |
Header | 8×1, female, 2.54mm pitch | 2 | |
Header | 10×1, female, 2.54mm pitch | 1 | |
Hub | 1.1g green PETG filament, 21m to print, 0.07kWh electricity | 1 | |
Magnets | Ø9×2mm, N50, ∼13N, Omo Magnets N50D00960020 | 4 | |
Beam | 85×10×0.3mm, Ø2mm hole, 5mm from edge, AISI 301 | 1 |