Chapter 8 Solutions

Question Solutions

  1. The relative sensitivity at 35 kHz is 30%.  For 36 kHz, it’s 50%.
  2. Precede a variable declaration with the const keyword.
  3. A for loop that starts indexing at 38000 and increases by 1000 with each repetition.
  4. A summing junction is a part of a block diagram that indicates two inputs are added together (or one subtracted from another) resulting in an output.
  5. The error term is the measured level subtracted from the desired set point level.
  6. If a distance sample is taken with each repetition of the loop function, then the delays more or less determine how long it takes between each sample.  That’s called the sample interval, and 1 ÷ sample interval = sampling rate.

Exercise Solutions

  1. Just reduce the for statement’s condition from f <=42000 to f <= 41000
  for(long f = 38000; f <= 42000; f += 1000) {
    distance += irDetect(irLedPin, irReceivePin, f);
  }
  1. Declarations
const int setpoint = 2;    // Target distances
const int kpl = -45;       // Proportional control constants
const int kpr = -55;

Project Solution

  1. One quick and simple solution would be to average the driveLeft and driveRight values in the FollowingShieldBot sketch.  The resulting single value can be applied both left and right speed parameters in the maneuver call.
void loop()                          // Main loop auto-repeats
{
  int irLeft = irDistance(9, 10);    // Measure left distance
  int irRight = irDistance(2, 3);    // Measure right distance
 
  // Left and right proportional control calculations
  int driveLeft = (setpoint - irLeft) * kpl;     
  int driveRight = (setpoint - irRight) * kpr;
 
  int drive = (driveLeft + driveRight)/2; // Average drive levels
 
  maneuver(drive, drive, 20);        // Apply same drive to both
 
  delay(10);                         // 0.1 second delay
}