ICs

viernes, 15 de abril de 2016

Radio El Taller 2016 V2

En una entrada anterior se planteó un controlador ATtiny 85 para mutear y controlar la luz de aire.
La capacidad de entradas y salidas del controlador estaba saturada. El proyecto no llegó a la luz. Se necesitaba otra acción así que por esta razón y por posibles agregados en el futuro reemplacé el ATtiny por un ATMega 328 (procesador del Arduino UNO).

Una necesidad inmediata era que al hablar por el Talkback desde el control al estudio debía mutearse los micrófonos si es que estuvieran abiertos para evitar que los micrófonos del estudio registraran lo que salía por el monitor. Si eventualmente quisiera que salga lo que dice el operador puede entrar por una entrada de línea en la consola y así salir al aire.

El sketch modificado es:



/* Radio El Taller marzo 2016
basado en el ejemplo debounce para eliminar el rebote de un pulsador 
el pulsador Aire comanda dos optoacopladores para manejar los muteadores y un rele para la luz de AIRE 
elpulsador TlkB comanda un opto para habilitar el talkback y silenciar temporalmente los mic si estuviesen abiertos

pines At Mega328
pulsador Luz Aire ---> pin 7
pulsador Talk back ---> pin 8
Opto 1 -----> pin 11
Opto 2 -----> pin 12
OptoTlkB---> pin 10
Luz aire(rele) ---> pin 9
5 Volt pin 8
Gnd pin 4
Flavio Ragazzi abril 2016


 ********************************************************************************************/

// constantes para seteo de pines

const int buttonAire = 7;    // pin pulsador luz aire
const int buttonTlkB = 8;   //pin pulsador TalkBack
const int Opto1 = 11;      // pines Opto
const int Opto2 = 12;    
const int OptoTlkB=10;
const int retraso =50;    //tiempo de delay para separa talk Back de mic 
const int LuzAire = 9;      //pin para luz(relé)

// Variables 

int OptoState = LOW;         // estado inicial para los pines de salida 
int ReleState = HIGH;        // estado inicial para el rele bobina no exitada
int buttonState;             //  estado del pulsador
int lastButtonState = LOW;   // estado previo del pulsador

// las siguientes variables son del tipo long, milisegundos que crecen muy rapido
long lastDebounceTime = 0;  // ultimo instante que se digitó el pulsador
long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
  pinMode(buttonAire, INPUT);
  pinMode(buttonTlkB, INPUT);
  pinMode(Opto1, OUTPUT);
  pinMode(Opto2, OUTPUT);
  pinMode(OptoTlkB, OUTPUT);
  pinMode(LuzAire,OUTPUT);

  // seteo inicial de los pines de salida
  digitalWrite(Opto1, OptoState);
  digitalWrite(Opto2, OptoState);
digitalWrite(OptoTlkB, OptoState);
    digitalWrite(LuzAire, ReleState);
}

void loop() {
  // lectura del estado del pulsador. Se guarda en una variable local
  int reading = digitalRead(buttonAire);

  // checkea si se digitó elpulsador
  // cambia de estado
  // y espera para evitar los rebotes antes  
  //de ordenar el cambio de estado de los pines de salida

  // si se pulsó, resetea el tiempo
  //y con el siguiente if se pregunta por el tiempo de espera
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:

    // if the button state has changed:
    if (reading != buttonState) {
      buttonState = reading;

      // only toggle the LED if the new button state is HIGH
      if (buttonState == HIGH) {
        OptoState = !OptoState;
      ReleState =!ReleState;
      }
    }
  }

  // set the LED:
  digitalWrite(Opto1, OptoState);
  digitalWrite(Opto2, OptoState);
 // digitalWrite(Opto3, OptoState);
  digitalWrite(LuzAire, ReleState);
  // save the reading.  Next time through the loop,
  // it'll be the lastButtonState:
  lastButtonState = reading;
 //chekea si se quiere hablar por TTalkBack
 int talk=digitalRead(buttonTlkB);
if(talk==HIGH){
  digitalWrite(Opto1,LOW);
  digitalWrite(Opto2,LOW);
  delay(retraso);
  digitalWrite(OptoTlkB,HIGH);
  }
  else{digitalWrite(OptoTlkB,LOW);
  delay(retraso);
  digitalWrite(Opto1,OptoState);
  digitalWrite(Opto2,OptoState);
}
}

*********************************************************************************

Esquema de de conexión

La placa de los Muteadores es la comentada en una entrada anterior.
El Arduino UNO es la "Fatto in Casa" se agregó la placa de opto acopladores.



No hay comentarios.:

Publicar un comentario