Skip to main content

Overview

The Control module provides advanced algorithms including PID controllers, fuzzy logic systems, and machine learning classifiers for embedded automation and robotics.

PID Controllers

PID (Basic)

Basic PID controller implementation with output limiting.
#define ENABLE_MODULE_PID
#include "Kinematrix.h"

PID pid;
pid.setConstants(2.0, 1.0, 0.5, 0.1);  // Kp, Ki, Kd, Td
pid.setOutputRange(0, 255);

pid.calculate(setpoint, actualValue);
float output = pid.getOutput();
setConstants
void
Set PID constants
setOutputRange
void
Set output limits
calculate
void
Calculate PID output
getOutput
float
Get calculated output
getError
float
Get current error (setpoint - actual)
reset
void
Reset PID state (clear integral)

PIDv3 (Advanced)

Advanced PID with auto-tuning and additional features.
#define ENABLE_MODULE_PID
#include "Kinematrix.h"

PIDv3 pid;
pid.setTunings(2.0, 1.0, 0.5);  // Kp, Ki, Kd
pid.setOutputLimits(0, 255);
pid.setMode(AUTOMATIC);

if (pid.compute(setpoint, input)) {
  float output = pid.getOutput();
  // Apply output
}
setTunings
void
Set PID tuning parameters
setMode
void
Set controller mode
compute
bool
Compute PID output
setControllerDirection
void
Set controller direction

Fuzzy Logic Systems

FuzzyMamdani

Mamdani fuzzy logic controller with multiple defuzzification methods.
#define ENABLE_MODULE_FUZZY_MAMDANI
#include "Kinematrix.h"

FuzzyMamdani fuzzy(2, 1, 10, 3);  // 2 inputs, 1 output, 10 rules, 3 sets/var

// Add input variable
fuzzy.addInputVariable("temperature", 0, 40);
float tempLow[] = {0, 0, 20};  // Triangular membership
fuzzy.addFuzzySet(0, true, "low", TRIANGULAR, tempLow);

// Add output variable
fuzzy.addOutputVariable("fanSpeed", 0, 100);
float speedSlow[] = {0, 0, 50};
fuzzy.addFuzzySet(0, false, "slow", TRIANGULAR, speedSlow);

// Add rule: IF temp is low THEN speed is slow
int antecedentVars[] = {0};
int antecedentSets[] = {0};
fuzzy.addRule(antecedentVars, antecedentSets, 1, 0, 0, true);

float inputs[] = {25.0};
float* outputs = fuzzy.evaluate(inputs);
FuzzyMamdani
constructor
Create Mamdani fuzzy system
addInputVariable
bool
Add input variable
addFuzzySet
bool
Add fuzzy set to variable
addRule
bool
Add fuzzy rule
evaluate
float*
Evaluate fuzzy system
setDefuzzificationMethod
void
Set defuzzification method

Machine Learning

KNN (K-Nearest Neighbors)

K-Nearest Neighbors classifier with multiple distance metrics.
#define ENABLE_MODULE_KNN
#include "Kinematrix.h"

KNN knn(3, 4, 100);  // k=3, 4 features, 100 max samples

// Add training data
float sample1[] = {5.1, 3.5, 1.4, 0.2};
knn.addTrainingData("setosa", sample1);

float sample2[] = {6.3, 2.9, 5.6, 1.8};
knn.addTrainingData("virginica", sample2);

// Predict
float test[] = {5.0, 3.0, 1.5, 0.3};
const char* prediction = knn.predict(test);
Serial.println(prediction);  // "setosa"
KNN
constructor
Create KNN classifier
addTrainingData
bool
Add training sample
predict
const char*
Predict class for sample
setDistanceMetric
void
Set distance calculation method
enableNormalization
void
Enable/disable feature normalization
crossValidate
float
Perform k-fold cross-validation

DecisionTree

Decision tree classifier supporting mixed input types and multiple split criteria.
#define ENABLE_MODULE_DECISION_TREE
#include "Kinematrix.h"

DecisionTree tree(4, 100, 10);  // 4 features, 100 samples, depth 10

// Add training samples
FeatureValue features1[] = {5.1, 3.5, 1.4, 0.2};
tree.addTrainingSample(features1, "setosa");

// Train the tree
tree.train(ENTROPY, COST_COMPLEXITY);

// Predict
FeatureValue test[] = {5.0, 3.0, 1.5, 0.3};
const char* prediction = tree.predictClass(test);
DecisionTree
constructor
Create decision tree
addTrainingSample
bool
Add training sample (classification)
train
bool
Train the decision tree
predictClass
const char*
Predict class for sample
getFeatureImportance
float*
Get feature importance scores
printTreeStructure
void
Print tree structure to Serial

Performance Characteristics

AlgorithmExecution TimeMemoryUse Case
PID~100μsMinimalTemperature, motor control
Fuzzy Logic~500μs - 2msMediumHVAC, irrigation
KNNVariableHighPattern recognition
Decision Tree~200μsMediumClassification

Platform Support

ESP32

Full support including complex ML

ESP8266

All algorithms with optimization

AVR

PID and basic fuzzy logic

Build docs developers (and LLMs) love