Vibrómetro
-
amplificador (estamos usando 1k en lugar de 200 ohmios)
-
sensor (estamos usando 1k en lugar de 470 ohmios)
-
parlante y sensor
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);
}