LinkShield R3 - gergelytakacs/AutomationShield GitHub Wiki

Contents

Introduction
Application programming interface
Examples
   System identification
   Feedback control
Detailed hardware description
   Circuit design
   Parts
   PCB
About
  Authors

LinkShield R1

Introduction

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.

LinkShield

Application programming interface

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
⚠️ **GitHub.com Fallback** ⚠️