Problemas

  • Se especifica "Current transfer ratio" 20% en el TCST2103 Datasheet. En realidad, es casi 80%. Estoy bajando la alimentación del emisor por 50%.
  • Las fuentes de alimentación proveen demasiado voltaje.
  • El contenedor es poco rigido.
  • Es difícil alinear la banderita. Podemos incluir un luz visible dentro del instrumento para ayudar.


Código

const int control_pin = 25;
const int bias_pin = 26;
const int amplitude = 255;
const int neutral = 127;

int control_dac_val = neutral;

void setup() { 
  pinMode(34, INPUT);
  analogSetAttenuation(ADC_0db);

  // Cuando control está 127, Vout = 0.
  dacWrite(bias_pin, 118);
  dacWrite(control_pin, control_dac_val);
}

void loop() {
  #define BUFELEMS 32
  #define SAMP_PERIOD_MS 32

  int buf[BUFELEMS];
  for (int i = 0; i < BUFELEMS; i++) {
    buf[i] = analogRead(34);
    delay(SAMP_PERIOD_MS);
  }
  
  int sum = 0;
  for (int i = 0; i < BUFELEMS; i++) {
    sum += buf[i];
  }
  const int adc_avg = sum / BUFELEMS;

  const int adc_target = 2047;
  
  int error = adc_avg - adc_target;
  if (error >  100) error =  10;
  if (error < -100) error = -10;
 
  control_dac_val -= error;

  if (control_dac_val <= 0)   control_dac_val = 0;
  if (control_dac_val >= 255) control_dac_val = 255;
  dacWrite(control_pin, control_dac_val);
}