Generador de onda cuadrada Arduino

Ammar Ali 12 octubre 2023
Generador de onda cuadrada Arduino

Este tutorial discutirá la generación de una onda cuadrada usando la función digitalWrite() en Arduino.

Generador de onda cuadrada Arduino

Una onda cuadrada consta de un valor máximo y un valor mínimo, y la transición entre estos valores es instantánea. La duración de los valores máximo y mínimo es la misma en una onda cuadrada.

Por ejemplo, una onda cuadrada puede tener un valor mínimo de 0 y un valor máximo de 1 con una duración de tiempo de 1 segundo para cada valor. Una onda cuadrada se muestra en el siguiente diagrama.

Onda cuadrada de Arduino

Una onda cuadrada también tiene una frecuencia específica que especifica el número de ciclos que tendrá una onda cuadrada en una duración de un segundo. Un valor de frecuencia de 60 Hz significa que la onda completa 60 ciclos en un segundo.

Podemos generar una onda cuadrada en Arduino usando la función digitalWrite().

Sintaxis:

digitalWrite(pin_num, value)

La sintaxis anterior establece el PIN dado especificado por la variable pin_num en HIGH o LOW especificado por la variable value. En Arduino, el estado del pin “BAJO” significa 0 voltios, y el estado del pin “ALTO” significa 5 voltios o 3,3 voltios, según la placa Arduino.

Para generar una onda cuadrada, debemos establecer el valor de un pin digital en “BAJO”, y después de un tiempo, debemos establecer el valor del pin digital en “ALTO”. Antes de configurar el valor de un pin digital, tenemos que configurar el modo para la ENTRADA o SALIDA similar a un pin porque hay una resistencia pull-up presente con cada pin digital que reducirá el valor del voltaje si no lo hacemos. t establecer el modo de un pin digital.

Podemos usar la función pinMode() para establecer el modo de un pin. Tenemos que pasar el PIN como primer argumento y el modo pin como SALIDA o ENTRADA como segundo argumento dentro de la función pinMode() para establecer el modo de un pin digital.

También tenemos que agregar un retraso después de establecer el valor de un pin digital, y podemos usar la función delay() o delayMicroseconds() para agregar un retraso en el código Arduino. La función delay() establecerá el retraso dado en milisegundos, y la función delayMicroseconds() establecerá el retraso dado en microsegundos.

Generemos una onda cuadrada con una frecuencia de 10 Hz en Arduino.

Código:

int f_hz = 10;

double delay_time = 1000 / (f_hz * 2);

void setup() { pinMode(11, OUTPUT); }
void loop() {
  digitalWrite(11, LOW);
  delay(delay_time);

  digitalWrite(11, HIGH);
  delay(delay_time);
}

Calculamos el tiempo de retardo en el código anterior utilizando la fórmula 1/f, donde f es la frecuencia de onda cuadrada. Multiplicamos el periodo de tiempo por 1000 porque usamos la función delay(), que establece el retraso en milisegundos y para convertir el tiempo de segundos a milisegundos, hemos multiplicado el periodo de tiempo por 1000.

Para verificar la forma de onda y la frecuencia de salida, tenemos que usar un osciloscopio, o podemos usar un LED con el pin 11, que parpadeará si la frecuencia es baja. Para usar el osciloscopio, tenemos que conectar la terminal positiva del osciloscopio con el pin 11 y la terminal negativa a tierra del Arduino.

También hemos dividido el período de tiempo con 2 porque tenemos dos pulsos en un solo ciclo, y estableceremos el valor de retardo igual a la mitad del período de tiempo total después de configurar el pin digital en BAJO y la otra mitad del período de tiempo será se puede utilizar para establecer el retraso después de establecer el pin digital en ALTO. Podemos ver en el código anterior que hemos usado la función delay() dos veces.

El tipo de dato del valor de entrada de la función delay() es unsigned long, y si queremos añadir un retraso inferior a 1 milisegundo, tenemos que utilizar la función delayMicroseconds() que puede agregar retraso en microsegundos. Podemos generar ondas cuadradas de alta frecuencia utilizando la función delayMicroseconds().

Tenga en cuenta que las funciones delay() y delayMicroseconds() no admiten números de punto flotante, por lo que debemos establecer un valor de frecuencia que no debería generar el período de tiempo como un número de punto flotante. Agregar retraso en el código Arduino también detendrá la otra operación de Arduino porque Arduino no pasará a la siguiente línea de código hasta que finalice el tiempo de retraso, pero PWM y las interrupciones seguirán funcionando.

Si queremos generar la onda cuadrada y realizar alguna otra tarea simultáneamente, podemos utilizar la función millis(), que nos devolverá el tiempo en milisegundos desde que el programa empezó a ejecutarse. Podemos utilizar la función millis() y la instrucción if para comprobar el tiempo transcurrido, y si el tiempo transcurrido es igual o mayor que el período de tiempo, cambiaremos el estado del pin digital.

Consulta este sitio para más detalles sobre la función millis(), y este sitio para la función delayMicroseconds(). Haz clic en este enlace para obtener más detalles sobre la función delay(), y en este enlace para la función digitalWrite().

También podemos usar la función analogWrite() para crear una onda cuadrada, pero no podemos definir su frecuencia. La frecuencia ya está definida, en su mayoría 499 Hz, o en el caso de algunos pines, la frecuencia es de 1000 Hz.

Debemos pasar el PIN como primer argumento y el bucle de trabajo de la onda, que debe ser 127, como segundo argumento dentro de la función analogWrite() para generar una onda cuadrada. Tenemos que pasar 127 como segundo argumento porque establecerá el bucle de trabajo a la mitad, lo cual es necesario para generar una onda cuadrada.

Haga clic en este enlace para obtener detalles sobre la frecuencia de los pines PWM y para obtener más información sobre la función analogWrite().

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook