• Lucas Alexandre

Como fazer um gerador de funções simples com Arduino

Updated: Apr 25

Gerador de funções (ou gerador de sinais) é um aparelho que gera sinais elétricos com variadas formas, frequências e amplitudes. Entre essas formas, as mais comuns são a onda quadrada, a triangular, a dente de serra e a senoidal, que podem variar suas frequências e a voltagem de pico a pico. Aprenda, aqui, a gerar as principais ondas de forma prática usando um Arduino.

Um gerador de funções de bancada é muito útil em várias aplicações, principalmente para simular e testar um circuito eletrônico. Seu principal uso está ligado a circuitos osciladores, filtros e amplificadores.

Gerador de funções de bancada

Usamos os osciloscópios para fazer a medição dos sinais que estão sendo recebidos em relação ao tempo. Com ele, é possível observar a forma de onda que está sendo recebida em determinado ponto de um circuito.


Osciloscópio com onda senoidal

Há um problema no uso do gerador de sinais: um aparelho de qualidade custa a partir de R$ 1.000,00, ou seja, possui um custo alto, quando sua necessidade de uso é pontual e simples. Nesse caso, é possível programar um Arduino para funcionar como um gerador de funções básico e acessível através das suas saídas PWM. Isso nos possibilita de fazer testes para circuitos simples de forma rápida, barata e prática.


Veja, abaixo, o projeto dos principais formatos de onda.



1. Onda Quadrada:


A onda quadrada é um sinal digital que funciona com alternância de níveis lógicos: 1 (amplitude máxima) e 0 (amplitude mínima). É usada como referência de tempo em sinais de clock e utilizada na informática na transmissão serial de informações em redes de computadores.

Reproduzir esse tipo de onda no Arduino é bem simples, existe a função tone() que é responsável pela geração de ondas quadradas, precisando apenas explicitar o pino de saída e a frequência desejada do sinal, como pode ser visto no exemplo abaixo com uma frequência de 50 Hz.

Simulação no TinkerCad
// Projeto 20 – Arduino como um gerador de frequência (Onda quadrada)

void setup() {

Serial.begin(9600); // Inicia o Serial Monitor
}

void loop() {
// Imprime na tela a frequência gerada
Serial.println("A frequencia eh de: 50 Hz");
{
tone(6, 50); // Defini o pino em OUTPUT, e a frequencia gerada no pino
delay(2000); // Gera a frequência por 2 segundos
}
}


2. Onda triangular:

A onda triangular possui uma ascendência linear até sua amplitude máxima e uma decadência linear até sua amplitude mínima. É normalmente usada nos sintetizadores de som.


O problema de gerar essa onda, é que ela facilmente pode apresentar ruídos. Por isso é preciso sempre colocar algum tipo de filtro entre o sinal produzido e o circuito em que ele vai ser usado. Com o Arduino, um circuito RC resolve esse problema.

Simulação no TinkerCad
// Onda triangular
 
int saidaPWM;
int x;

#define saidaPWM 3

void setup()
{ 
pinMode(saidaPWM, OUTPUT)
}

void loop() 
{ 
  for (x=0; x<255; x++) 
  {
   analogWrite (saidaPWM, x);
     delay(10);
  }
   for (x=255; x>0; x--) 
   {
     analogWrite (saidaPWM, x); 
       delay(10);
   }
}
 // Esse código é seguido de um circuito RC na saida PWM do arduino


3. Onda Dente de Serra:

A onda dente de serra é uma particularidade da onda triangular, onde o tempo de subida ou o tempo de descida é igual a zero, se comportando nesse instante como um “sinal digital”.


As aplicações são as mesmas e o código é o mesmo somente com a alteração do delay() de subida ou descida mais próximo de zero.

Simulação no TinkerCad
// Onda dente de serra

int saidaPWM; 
int x; 

#define saidaPWM 3
  
void setup()  {
  pinMode(saidaPWM, OUTPUT);
}
    
void loop ()  {
  for (x=0; x<255; x++) {
    analogWrite (saidaPWM, x);
    delay(10);
  }
  for (x=255; x>0; x--) {
    analogWrite (saidaPWM, x); 
    delay(1);
  }
}

4. Onda Senoidal:

A onda senoidal é gerada a partir da função seno ou cosseno invertendo a polaridade de acordo com a frequência, por isso ela também é conhecida como corrente alternada. Ela possui diversas aplicações. Na eletrônica, a principal delas é como onda portadora nas modulações de rádio.

Assim como na onda triangular, nela podem ser encontrados ruídos, logo ela também necessita de um filtro RC antes de seu uso. O código do Arduino é muito parecido com a triangular, porém possui a adição da função sin() para a coleta de dados.

Simulação no TinkerCad
// Simulador de gerador de onda senoidal

int saidaPWM;
int x, valor;
float seno; 

#define saidaPWM 3 


void setup() {
  pinMode (saidaPWM, OUTPUT);
  
}


void loop () {
  for (x=0; x<255; x++) {
    seno = 100+(100*(sin(x*(6.28/255))));
    valor = int(seno);
    analogWrite(saidaPWM, valor);
    delay(10);
  }
}

Escrito por Lucas Alexandre