72  PID Implementation and Labs

In 60 Seconds

Implementing PID on ESP32/Arduino requires discrete-time conversion with fixed sample intervals (typically 10-100ms), anti-windup clamping to prevent integral saturation, and derivative filtering to avoid noise amplification. A well-tuned PID controller achieves less than 2% steady-state error and settling time under 5 seconds for thermal systems.

72.1 Learning Objectives

By the end of this chapter, you will be able to:

  • Implement PID Controllers: Write a discrete-time PID controller in Arduino/ESP32 C++ with proper sampling intervals
  • Simulate PID Systems: Use Python to model and tune PID controllers before hardware deployment
  • Apply Anti-Windup Techniques: Implement clamping and back-calculation to prevent integral saturation
  • Tune PID Parameters Systematically: Apply Ziegler-Nichols and manual methods to optimize controller performance
  • Evaluate PID Performance Metrics: Measure and compare settling time, overshoot, and steady-state error across configurations

Process control in IoT is about automatically adjusting systems to maintain desired conditions. Think of cruise control in a car: it continuously measures your speed, compares it to your target, and adjusts the throttle to keep you on track. IoT systems use similar feedback loops to control everything from room temperature to industrial manufacturing processes.

72.2 Hands-On Lab: PID Control Simulation

In this lab, you’ll experiment with a simulated PID controller to understand how each parameter affects system behavior.

72.2.1 Lab Objective

Tune P, I, and D gains to achieve optimal control of a simulated temperature system, observing the effects of each parameter.

72.2.2 Simulated System

Consider a smart thermostat controlling room temperature: - Process: Room heating/cooling - Set Point: 22C - Initial Temperature: 18C - Disturbance: External temperature changes

72.2.3 Lab Tasks

Task 1: P-Only Control

Set Kp=2.0, Ki=0.0, Kd=0.0 and run the simulation.

Observe:

  • How quickly does temperature rise initially?
  • Does the system reach exactly 22C?
  • What happens at t=50s when the disturbance occurs?
  • Is there steady-state error?

Expected Results:

  • Fast initial response
  • Settles with offset (steady-state error ~0.5-1C)
  • Disturbance causes permanent offset increase
  • Some oscillation possible
Task 2: PI Control

Set Kp=2.0, Ki=0.5, Kd=0.0 and run the simulation.

Observe:

  • Does the system now reach exactly 22C?
  • How does the response compare to P-only?
  • What happens to the disturbance-induced offset?
  • Is there any overshoot?

Expected Results:

  • Eliminates steady-state error
  • Reaches exactly 22C eventually
  • Recovers from disturbance automatically
  • Possible overshoot and longer settling time
Task 3: Full PID Control

Set Kp=2.0, Ki=0.5, Kd=1.0 and run the simulation.

Observe:

  • How does overshoot compare to PI?
  • Is settling time improved?
  • How does the system respond to the disturbance?
  • Look at the D term plot - when is it most active?

Expected Results:

  • Minimal overshoot
  • Faster settling time
  • Quick disturbance rejection
  • D term most active during rapid changes
Task 4: Parameter Tuning Exploration

Experiment with different gain values:

Test these scenarios:

  1. Aggressive P: Kp=5.0, Ki=0.5, Kd=1.0
    • What happens?
  2. Too Much I: Kp=2.0, Ki=2.0, Kd=0.0
    • Does it overshoot significantly?
  3. Excessive D: Kp=2.0, Ki=0.5, Kd=5.0
    • Does response become sluggish?
  4. Balanced Tuning: Find optimal values for:
    • Minimal overshoot (<0.5C)
    • Fast settling (<30s)
    • Zero steady-state error

72.3 Arduino PID Implementation

Discrete-time PID with 100ms sampling:

The continuous PID formula \(u(t) = K_p e(t) + K_i \int e(\tau) d\tau + K_d \frac{de}{dt}\) becomes discrete:

\[u[k] = K_p e[k] + K_i \sum_{j=0}^{k} e[j] \Delta t + K_d \frac{e[k] - e[k-1]}{\Delta t}\]

Example with Kp=2.0, Ki=0.5, Kd=1.0, \(\Delta t = 0.1\) seconds:

At time step k=10, current error e[10] = 2.5°C, previous error e[9] = 2.8°C, accumulated error sum = 35°C·s:

  • P-term: \(2.0 \times 2.5 = 5.0\)
  • I-term: \(0.5 \times 35 = 17.5\)
  • D-term: \(1.0 \times \frac{2.5 - 2.8}{0.1} = 1.0 \times (-3) = -3.0\)
  • Total output: \(u[10] = 5.0 + 17.5 - 3.0 = 19.5\)

The negative D-term provides “braking” since error is decreasing (temperature approaching setpoint).

72.4 Interactive PID Output Calculator

Explore how changing PID gains and error values affects controller output. Adjust the sliders to see real-time results.

For real hardware implementation with ESP32:

// ESP32 PID Temperature Controller
#include <Arduino.h>

class PIDController {
    float kp, ki, kd, setpoint;
    float integral = 0, previous_error = 0;
    unsigned long last_time = 0;
public:
    PIDController(float Kp, float Ki, float Kd, float sp)
        : kp(Kp), ki(Ki), kd(Kd), setpoint(sp) {}

    float update(float measured) {
        unsigned long now = millis();
        float dt = last_time ? (now - last_time) / 1000.0 : 0;
        float error = setpoint - measured;

        float P = kp * error;
        integral = constrain(integral + error * dt, -100, 100); // Anti-windup
        float I = ki * integral;
        float D = dt > 0 ? kd * (error - previous_error) / dt : 0;

        previous_error = error;
        last_time = now;
        return P + I + D;
    }
    void setSetpoint(float sp) { setpoint = sp; }
    void reset() { integral = 0; previous_error = 0; last_time = 0; }
};

The main program reads a TMP36 temperature sensor and drives a heater via PWM:

#define TEMP_SENSOR_PIN 34
#define HEATER_PWM_PIN  25

PIDController pid(2.0, 0.5, 1.0, 22.0); // Kp, Ki, Kd, setpoint

float readTemperature() {
    float voltage = analogRead(TEMP_SENSOR_PIN) * (3.3 / 4095.0);
    return (voltage - 0.5) * 100.0;  // TMP36: 10mV/C, 500mV at 0C
}

void setup() {
    Serial.begin(115200);
    ledcSetup(0, 5000, 8);           // Channel 0, 5kHz, 8-bit
    ledcAttachPin(HEATER_PWM_PIN, 0);
}

void loop() {
    float temp = readTemperature();
    int pwm = constrain((int)pid.update(temp), 0, 255);
    ledcWrite(0, pwm);
    Serial.printf("%.1fs: setpoint=22.0, temp=%.1f, pwm=%d\n",
                  millis()/1000.0, temp, pwm);
    delay(100);
}

72.5 Interactive Quiz

Test your understanding of processes, systems, and PID control:

What is the key difference between a process and a system in IoT devices?

A) A process is hardware, a system is software B) A process is the algorithm/program, a system is all components working together C) A process handles inputs, a system handles outputs D) There is no difference

Answer

B) A process is the algorithm/program, a system is all components working together

Explanation:

  • Process: The series of actions or steps (typically the program running on the microcontroller) that transform inputs into outputs
  • System: The complete interconnected set of components (microcontroller, sensors, actuators, power supply, etc.) that work together to perform a function
  • Example: In a smart thermostat, the temperature control algorithm is the process, while the entire device with sensors, heater control, and user interface is the system

A smart irrigation system waters plants for exactly 10 minutes every morning at 6 AM, regardless of soil moisture, weather, or plant needs. What is the primary limitation of this open-loop design?

A) It’s too expensive to implement B) It cannot self-correct and may over-water or under-water C) It uses too much power D) It’s too complex for most users

Answer

B) It cannot self-correct and may over-water or under-water

Explanation: This is a classic open-loop system problem: - System operates based on predetermined schedule (time-based control) - No feedback about actual soil moisture or plant needs - Cannot adapt to: - Recent rainfall (may over-water) - Hot, dry weather (may under-water) - Different plant species with varying needs - Seasonal changes - Solution: Add soil moisture sensor and close the loop, watering only when soil moisture drops below threshold

Open-loop is acceptable when:

  • Environment is highly predictable
  • Precision is not critical
  • Cost is primary constraint
  • But for irrigation, closed-loop is strongly recommended

Your smart oven is heating up to 180C. Currently at 160C, the temperature is rising rapidly at 5C per second. Which PID term will act to reduce the heating power to prevent overshooting 180C?

A) Proportional (P) term B) Integral (I) term C) Derivative (D) term D) None - overshoot is unavoidable

Answer

C) Derivative (D) term

Explanation: The derivative term reacts to the rate of change of error:

Current Situation:

  • Set Point (SP): 180C
  • Current Temperature (PV): 160C
  • Error: +20C (need more heat)
  • Rate of change: +5C/s (temperature rising rapidly)

PID Term Responses:

  1. P term: Reacts to current error magnitude
    • Error = +20C so P wants to add heat
    • P doesn’t know temperature is rising rapidly
  2. I term: Reacts to accumulated past error
    • Integral has been accumulating positive error
    • I wants to continue adding heat
    • I doesn’t anticipate future
  3. D term: Reacts to error rate of change
    • Error was +40C, now +20C so error decreasing at -5C per second
    • Negative derivative (error decreasing) produces negative D output
    • D term reduces heating power to prevent overshoot
    • Acts as “predictive brake”

Without D term: Oven would overshoot to ~185C, then oscillate With D term: Oven smoothly approaches 180C with minimal overshoot

Key Insight: D term provides “damping” by anticipating where the system is heading

You implement a P-only temperature controller for an aquarium heater. The system settles at 24.3C when the set point is 25.0C. Which action will eliminate this 0.7C steady-state error?

A) Increase Kp gain B) Add integral (I) control C) Add derivative (D) control D) Decrease Kp gain

Answer

B) Add integral (I) control

Explanation:

Why P-only has steady-state error:

Proportional control output = Kp times Error

When system settles: - Error = 25.0 - 24.3 = 0.7C - P output = Kp times 0.7C - This small output only maintains current temperature - It’s not enough to eliminate the remaining 0.7C error - System is “stuck” with persistent offset

Why other options don’t work:

A) Increase Kp:

  • Reduces steady-state error but doesn’t eliminate it
  • May cause overshoot and oscillation
  • Still leaves some offset

C) Add D control:

  • D only responds to changing error (de/dt)
  • At steady state, error is constant (de/dt = 0)
  • D contributes nothing at steady state

D) Decrease Kp:

  • Makes steady-state error worse!
  • Weaker response to error

Why I control works:

Integral accumulates error over time: - Error = 0.7C persists - Integral keeps growing: integral of 0.7 dt = 0.7t - Integral output increases continuously - Heater power increases until temperature reaches 25.0C - Only when error = 0 does integral stop growing

Result with PI control:

  • System reaches exactly 25.0C
  • Steady-state error eliminated
  • Integral maintains whatever output is needed to hold temperature

An IoT water quality monitoring system measures dissolved oxygen (DO) levels in a fish farm. When DO drops below 5 mg/L, a cloud-based alert triggers an aeration pump via a remote actuator node. Is this a closed-loop or open-loop system?

A) Open-loop, because individual nodes don’t have feedback B) Closed-loop, because there’s feedback at the system level C) Neither, it’s purely a monitoring system D) Both, depending on perspective

Answer

D) Both, depending on perspective (though B is also a valid answer)

Explanation:

This question highlights an important concept in distributed IoT systems: feedback can exist at different architectural levels.

Local Device Perspective (Open-Loop):

  • Sensor node: Measures DO, transmits data - Open-loop (no local actuation)
  • Actuator node: Receives command, runs pump - Open-loop (no local sensing)
  • Neither device individually implements closed-loop control

System Perspective (Closed-Loop):

Distributed IoT feedback control loop for fish farm dissolved oxygen: DO sensor node sends readings to cloud platform, which compares against 5 mg/L setpoint and triggers aeration pump actuator node when DO is low, forming a system-level closed loop across the network
Figure 72.1: Fish farm cloud-based dissolved oxygen control loop

Distributed IoT Feedback Architecture: Individual edge devices (sensor, actuator) operate open-loop with no local control logic. Cloud platform closes the feedback loop by coordinating sensing and actuation across network, creating system-level closed-loop control.

This IS closed-loop feedback because:

  1. Set point exists (DO > 5 mg/L)
  2. Output measured (DO sensor reads actual DO)
  3. Error calculated (cloud compares SP vs measured)
  4. Control action taken (pump activated if error)
  5. Feedback path exists: Pump action affects DO level, which is measured by sensor

Key Difference from Traditional Closed-Loop:

  • Distributed architecture: Components separated across network
  • Network latency: Feedback delay due to communication
  • Cloud processing: Decision-making in cloud instead of local controller
  • Still closed-loop: Feedback path exists, even if distributed

Practical Implications:

  • Slower response than local closed-loop (network latency)
  • Enables centralized monitoring and coordination
  • Single point of failure if cloud connectivity lost
  • Could add local closed-loop as backup for critical control
Best Answer: D because the answer depends on your level of analysis (device vs system), though B correctly identifies the system-level feedback that ultimately matters for control performance.

72.6 Python PID Implementation

72.6.1 PID Controller for IoT Systems

Key Features:

  1. Complete PID Implementation: Proportional, Integral, and Derivative terms
  2. Anti-Windup: Prevents integral term saturation
  3. Derivative Filtering: Reduces high-frequency noise
  4. Plant Simulation: First-order system with time delay
  5. Performance Metrics: Steady-state error, overshoot, rise time

Example Output:

=== PID Controller Simulation ===

--- P-only (Kp=2) ---
Steady-State Error: 16.67
Overshoot: 0.0%
Final Output: 33.33

--- PI (Kp=2, Ki=0.5) ---
Steady-State Error: 0.42
Overshoot: 12.3%
Final Output: 49.58

--- PID (Kp=2, Ki=0.5, Kd=0.1) ---
Steady-State Error: 0.38
Overshoot: 8.1%
Final Output: 49.62

=== IoT Temperature Control ===

Time(s)  Temp(C)  Heater(%)
------------------------------
   0.0    18.00      83.4
  10.0    20.15      67.2
  20.0    21.52      42.1
  30.0    21.89      28.3
  60.0    22.01      21.7

Performance:
  Steady-State Error: 0.15C
  Overshoot: 2.3%

72.7 Production Framework: IoT Control Systems

This section provides a comprehensive, production-ready Python framework for IoT control systems, implementing PID controllers, open-loop and closed-loop architectures, system simulation, and auto-tuning capabilities.

This production framework provides comprehensive IoT control system capabilities including:

  • PID Controller: Full PID implementation with anti-windup, output limiting, and configurable modes (P, PI, PD, PID)
  • Plant Models: First-order, thermal, and motor dynamics with realistic physics
  • System Simulation: Closed-loop and open-loop simulation with disturbance injection
  • Auto-Tuning: Ziegler-Nichols and Cohen-Coon tuning methods
  • Performance Analysis: 7 metrics including rise time, settling time, overshoot, and integral errors

The framework demonstrates production-ready patterns for IoT control systems with realistic plant models, comprehensive performance analysis, and auto-tuning capabilities.


Building a PID controller is like teaching a robot to be a perfect chef!

72.7.1 The Sensor Squad Adventure: The Robot Chef

Max the Microcontroller wanted to build a robot that could heat soup to EXACTLY 60 degrees – not too hot (ouch!), not too cold (yuck!).

“First, we need eyes!” said Sammy the Sensor. So they added a temperature sensor to the soup pot. Now the robot could CHECK the temperature every second.

“Next, we need a brain!” said Max, writing code on his ESP32 board. He programmed three rules:

  • Rule P: “If the soup is cold, turn the heat up. If it’s almost ready, turn it down.”
  • Rule I: “If the soup has been a teensy bit too cold for a while, slowly add more heat.”
  • Rule D: “If the temperature is shooting up fast, ease off the heat NOW before it gets too hot!”

“What about me?” asked Bella the Battery. “I keep the robot running! Without power, the robot chef falls asleep and the soup goes cold!”

“And I flash green when the soup is ready!” said Lila the LED proudly.

They tested it: The robot heated the soup from room temperature to exactly 60 degrees with NO burning and NO waiting too long.

“We just built a REAL PID controller!” cheered Max. “And it only took a tiny computer, a temperature sensor, and some clever code!”

72.7.2 Key Words for Kids

Word What It Means
Code Instructions that tell a computer what to do
ESP32 A tiny, cheap computer perfect for IoT projects
Anti-windup A safety rule that stops the robot from overreacting
PWM A way to control how much power goes to the heater (like dimming a light)

72.7.3 Try This at Home!

Be a human PID controller! Fill a sink with water and try to keep the temperature at “warm” by adjusting the hot and cold taps. Notice how you react to the current temperature (P), remember if it has been too cold for a while (I), and ease off when it is getting hot fast (D). You are running PID in your brain!

Common Mistake: Incorrect Sampling Rate in PID Controllers

The Mistake: A student implements PID temperature control for a greenhouse heater using an ESP32 and DHT22 sensor. They set the control loop to run every 100 ms (10 Hz) because “faster is better.” After deployment, the heater oscillates wildly between 50% and 100% power every few seconds, and temperature never stabilizes.

Why It Fails:

  1. DHT22 sensor limitation: The DHT22 has a 2-second minimum sampling period. Reading it every 100 ms returns stale data 19 times out of 20. The controller sees 19 identical readings, then a sudden jump – the derivative term interprets this as a massive rate of change and overreacts.

  2. Thermal time constant mismatch: A greenhouse heating system has a time constant of 5-10 minutes (the time to reach 63% of setpoint after a step input). Sampling every 100 ms is 3,000x faster than the process dynamics. The Nyquist criterion requires sampling at least 2x the highest frequency of interest, but sampling far beyond process dynamics amplifies noise without improving control.

  3. Integral windup acceleration: With 10 Hz sampling, the integral term accumulates error 600 times per minute instead of 30 times. A 1°C error for 10 seconds adds 60°C-sec to the integral (instead of 5°C-sec at 0.5 Hz). Integral windup happens 12x faster, causing severe overshoot.

The Correct Approach:

Rule of thumb: Control loop frequency = 10x faster than process time constant, but never faster than sensor update rate.

For greenhouse temperature control:

  • Process time constant: 5 minutes
  • Sensor update rate: 2 seconds (DHT22 limit)
  • Required loop frequency: 5 min / 10 = 30 seconds
  • Chosen loop frequency: 10 seconds (2 sec sensor rate is fine, 30 sec provides margin)

Fixed implementation:

const unsigned long SAMPLE_INTERVAL = 10000; // 10 seconds in ms

void loop() {
    static unsigned long last_time = 0;
    unsigned long current_time = millis();

    // Only run control loop every 10 seconds
    if (current_time - last_time >= SAMPLE_INTERVAL) {
        float temperature = readDHT22();
        float pid_output = pid.update(temperature);
        applyHeaterControl(pid_output);

        last_time = current_time;
    }

    // Other non-control tasks can run every loop iteration
}

Results before vs after:

Metric 100 ms Loop (Wrong) 10 sec Loop (Correct) Improvement
Temperature stability ± 3.5°C oscillation ± 0.4°C steady 8.75x better
Heater cycling 180 on/off per hour 6 on/off per hour 30x less wear
Power consumption 2.8 kWh/hour (oscillating) 1.9 kWh/hour (smooth) 32% reduction
Control output variability 0-100% every 3 seconds 40-60% gradual Stable operation

Key lesson: Sampling too fast is as bad as sampling too slow. Match your control loop frequency to the process time constant (10x faster rule), and never exceed sensor update rate. For thermal systems (HVAC, ovens, refrigerators), 5-30 second sampling is typical. For motor control, 10-100 ms. For pressure control, 1-10 seconds.

Key Takeaway

Implementing PID on microcontrollers like ESP32 requires converting continuous-time PID math into discrete-time code with fixed sampling intervals (typically 10-100ms for fast processes, 5-30 seconds for thermal systems). Three critical implementation details separate working controllers from failing ones: anti-windup clamping prevents integral saturation during startup, derivative filtering avoids amplifying sensor noise, and proper output limiting keeps actuator commands within safe bounds. Start with lab simulation (P-only, then PI, then PID) to build tuning intuition before deploying on real hardware.

Key Concepts

  • Discrete PID: The digital implementation of PID using numerical approximations of integration (accumulation) and differentiation (finite difference) updated at fixed sampling intervals, required for microcontroller execution
  • Anti-Windup: A mechanism preventing the integral term from accumulating during actuator saturation — implemented by clamping the integral, back-calculating to reset it, or disabling integration when output is saturated
  • Sample Time: The fixed interval (Ts) at which the PID algorithm executes on a microcontroller — must be 5–20× shorter than the dominant process time constant and consistent enough that Ki and Kd gains have predictable effect
  • Output Clamping: Limiting the PID output to the physical range of the actuator (0–100% for a valve, 0–255 for PWM duty cycle) to prevent physically impossible commands from being sent to the actuator
  • Bumpless Transfer: The technique of initializing the integral term to the current output when switching from manual to automatic control mode, preventing a step change (bump) in actuator output at the mode transition
  • Fixed-Point Arithmetic: Integer-only computation scaling PID terms by a constant factor to avoid floating-point operations, required for microcontrollers without FPUs — must account for integer overflow in intermediate calculations
  • Interrupt-Driven Control Loop: Executing the PID algorithm from a hardware timer interrupt at fixed intervals, ensuring consistent sample timing independent of other firmware tasks — critical for Kd and Ki accuracy

Common Pitfalls

Executing PID in an Arduino loop() function without fixed timing — if other code adds variable delay, Ki and Kd become incorrect because they depend on a fixed Ts. Use hardware timer interrupts for control loops requiring Ki or Kd terms.

Storing the integral accumulator as a 16-bit integer when the accumulated value can exceed 32,767 over multiple seconds of error. Integer overflow causes the integral to silently wrap to a large negative value, causing the controller to slam the actuator in the wrong direction.

Implementing anti-windup without first clamping the output to actuator limits. If the PID output is not clamped, the anti-windup logic cannot detect saturation and the integral continues to wind up. Always clamp output first, then use the saturation state to trigger anti-windup.

Tuning PID gains in a MATLAB/Simulink simulation then flashing to hardware and expecting the same behavior. Real hardware has sensor noise, actuator nonlinearity, communication delays, and timing jitter absent from simulation. Always validate and fine-tune on actual hardware with realistic loads.

72.8 Summary

This chapter provided hands-on implementation guidance for PID control systems.

Key Takeaways:

  1. ESP32 Implementation: Complete PID controller class with anti-windup, suitable for real hardware deployment

  2. Lab Exercises: Systematic exploration of P, PI, and PID configurations to build intuition for tuning

  3. Performance Metrics: Steady-state error, overshoot, settling time are key indicators of control quality

  4. Production Framework: Auto-tuning (Ziegler-Nichols, Cohen-Coon), plant models, and comprehensive simulation capabilities

  5. Distributed Control: System-level feedback can span cloud and edge, but local control loops minimize latency

  6. Edge Processing: Feature extraction and analytics at the edge reduces bandwidth 100-1000x for high-frequency sensor data

72.9 Further Reading

Control Theory Fundamentals:

  • Ogata, K. (2010). Modern Control Engineering. Prentice Hall.
  • Astrom, K. J., & Murray, R. M. (2021). Feedback Systems: An Introduction for Scientists and Engineers. Princeton University Press.

PID Tuning Methods:

  • Ziegler-Nichols tuning method
  • Cohen-Coon method
  • Software auto-tuning algorithms

IoT-Specific Resources:

  • ESP32 PID library: Arduino PID Library
  • Industrial IoT control systems
  • Edge computing for distributed control

Online Simulators:

72.10 References

  1. Perera, C., et al. (2014). “Context Aware Computing for The Internet of Things: A Survey.” IEEE Communications Surveys & Tutorials.

  2. Franklin, G. F., Powell, J. D., & Emami-Naeini, A. (2019). Feedback Control of Dynamic Systems. Pearson.

  3. Ang, K. H., Chong, G., & Li, Y. (2005). “PID control system analysis, design, and technology.” IEEE Transactions on Control Systems Technology.

  4. IoT Architecture Working Group. (2016). “IoT Reference Architecture.” IoT-A Project Deliverable.


Chapter Summary

This chapter established the practical implementation of PID control systems for IoT applications.

System Fundamentals: We explored how PID controllers are implemented in both Arduino/ESP32 C++ and Python, with anti-windup mechanisms and proper gain tuning.

Feedback and Control: The labs demonstrated how P-only, PI, and PID configurations behave differently, building intuition for when to use each approach.

Distributed Architecture: We examined how feedback loops can span edge and cloud, with local control loops handling time-critical responses and cloud coordination optimizing overall system performance.

These implementation skills prepare you for deploying real PID controllers in IoT applications from temperature control to motor speed regulation.

72.11 What’s Next?

Having mastered PID control theory and implementation, we now examine multi-hop ad-hoc networks. The next chapter builds upon these control foundations to explore network architectures and routing.

Continue to Multi Hop Ad Hoc Networks

Previous Current Next
Integral and Derivative Control PID Implementation and Labs Multi-Hop Fundamentals