Serie de circuitos TROLL con Arduino – (1) Buzzer aleatorio

Con este circuito basado en Arduino, comenzaré una serie de artículos combinando dos actividades que me agradan bastante,  la electrónica y el trolleo.

El fin es realizar divertidos y sencillos circuitos para aprender y mejorar técnicas de programación y electrónica basada en microcontroladores, utilizando como base la GUI de Arduino y microcontroladores Atmel

 

Este primer circuito genera con un parlantito un tono de 4Khz, de duración aleatoria con un tiempo de espera aleatorio también.

De forma que es totalmente imposible predecir cuando va a volver a sonar y por cuanto tiempo.

 

 

El código esta basado en una maquina de estados de dos estados, INICIO y TROLL, como se ve en la siguiente imagen.

En este primer estado (INICIO), de cargan los parámetros de duración del sonido y de pausa para el próximo intervalo.

Durante el estado de TROLL el buzzer estará sonando constantemente hasta finalizar el tiempo previamente definido como “duración” y luego generara una pausa, al finalizar, volverá al estado de INICIO y el ciclo se repetirá nuevamente.

 

 

Código fuente:
Descargalo desde aqui: TROLL1-buzzer-01

/***************************************************************************
 * Serie de circuitos TROLL  -(1) Buzzer aleatorio
 * 
 * Descripcion: 
 * Este circuito genera un tono de 4khz de duracion aleatoria 
 * y en lapsos aleatorios de tiempo, imposibilitando predecir cuando será 
 * la proxima vez que suene y por cuanto tiempo
 * 
 * Fecha 07-01-2018
 * 
 **************************************************************************/
// DEFINICIONES
#define BUZZER 12
#define FREC 4000 //4khz
#define INICIO 1
#define TROLL 2

void setup() 
{
  pinMode(BUZZER, OUTPUT);
  Serial.begin(9600);
}

void loop() 
{
 char estado; //estado de la maquina
 int duracion; //tiempo de duracion del sonido
 int pausa; //duracion del tiempo sin actividad
 char sonido; //seleccion del sonido
 int n,m; 
 estado = INICIO;
 while (1)
  {
   switch (estado)
   {
    case INICIO:
        //Sorteo el sonido y la duracion del mismo
        duracion=(random(1,5))*60; 
        pausa=(random(5,20))*60;
        sonido= random(0,3);
        estado = TROLL;
        Serial.print ("Duracion: ");
        Serial.println (duracion/60);
        Serial.print("Pausa: ");
        Serial.println (pausa/60);
        break;

    case TROLL:
        for (m=0; m<duracion; m++)
        {
          for (n=0; n<3330; n++)
          {
            digitalWrite(LED_BUILTIN,HIGH);
            molestar();
            digitalWrite(LED_BUILTIN,0);
          }
        }
        for (n=0; n<=pausa; n++)
        {
          delay (1000);
        }
        estado = INICIO; 
    
  } 
  }
}

void molestar (void)
{
    digitalWrite(BUZZER,HIGH);
    delayMicroseconds(1000000/(FREC*2)); //_frec*2 para un 50% de ciclo util
    digitalWrite(BUZZER,LOW);
    delayMicroseconds(1000000/(FREC*2));
}


Diagrama electrico:
Esta es solo la parte de salida para operar el parlante. El puerto 12 es el definido como BUZZER en el codigo.

Saludos!

Tambien pude interesarte:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *