Realizado por José María Amusquívar Poppe, Fabián Alfonso Beirutti Pérez y Prashant Jeswani Tejwani

Índice del contenido:

  1. Introducción
  2. Diseño y configuración
  3. Código implementado
  4. Descargar código en Arduino
  5. Referencias

Introducción

Se programa un Arduino de manera que se genere una pulsación de frecuencia variable en el LED integrado en la placa. Se produce una señal senoidal que define la envolvente, de manera que cuando dicha señal alcance su valor máximo el LED parpadeará a una cierta frecuencia freqMax, mientras que cuando alcance el valor mínimo parpadeará a una frecuencia mínima freqMin. A continuación:

  • Se describe el trabajo realizado argumentando las decisiones adoptadas para la solución propuesta
  • Se incluye las referencias y herramientas utilizadas
  • Se muestra el resultado con un gif animado

Diseño y configuración

El diseño y configuración ha sido el que se puede observar en la siguiente figura. Se adjunta el enlace de la configuración en Tinkercad para visualizar la simulación y modificar el código si se desea.

Código implementado

A continuación se describe el trabajo realizado. Se crean e inicializan las variables necesarias, como la frequencia mínima, máxima y normal la cual se establecen a 600, 60 y 250 respectivamente. Se inicializan las variables jump (incremento), value (valor en radianes del seno con rango entre -PI/2 y PI/2) y senFreq (resultado del seno con rango entre -1 y 1).

// En milisegundos
const float threshold = 0.75;
const int freqMax = 60;
const int freqMin = 600;
const int freqNormal = 250;

float jump = 0.1;
float value = 0;
float senFreq = 0;


En la función setup() se habilita el monitor serie y se establece el led incorporado en el Arduino como salida.

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


En la función loop() se calcula el seno de la variable value y se actualiza la variable. A continuación, se comprueba que esta variable esté en el rango -PI/2 y PI/2. Se cambia la frecuencia del parpadeo según el valor del seno calculado llamando la función blinkLed().

void loop() {
  senFreq = sin(value);
  value += jump;

  if (value >= PI/2 || value <= -PI/2) jump = -jump;

  Serial.println(senFreq);

  if (senFreq > threshold) {
    blinkLed(freqMax);
  } else if (senFreq < -threshold) {
    blinkLed(freqMin);                       
  } else {
    blinkLed(freqNormal);
  }
}


La función blinkLed(freq) se encarga de encender y apagar el led acorde a una frecuencia que es pasada como parámetro.

void blinkLed (int freq) {
  digitalWrite(LED_BUILTIN, HIGH);  
  delay(freq);
  digitalWrite(LED_BUILTIN, LOW);    
  delay(freq);  
}    


A continuación, se muestra el resultado final mediante un gif animado:

Descargar código en Arduino

Para descargar el código en Arduino, acceda a: Descargar código en Arduino o acceda a la carpeta del repositorio del proyecto en: Repositorio del proyecto

Repositorio del proyecto de José María Amusquívar Poppe

Repositorio del proyecto de Fabián Alfonso Beirutti Pérez


Referencias

Guión de prácticas

Página de Arduino

Creación del enlace de descarga