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.
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.
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.
// 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.
// 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.
// 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.
// 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