Funções são relações entre dois conjuntos, onde a cada elemento do primeiro conjunto (domínio) é associado exatamente um elemento do segundo conjunto (imagem). Elas são usadas para descrever fenômenos matemáticos, científicos e do cotidiano, como o crescimento populacional ou a parábola da trajetória de lançamento de um objeto.
Uma função é geralmente representada como f(x), onde x é a variável independente, e f(x) é o valor associado a x. Por exemplo, f(x) = 2x + 3 associa cada valor de x a um valor correspondente obtido pela fórmula.
As parábolas são os gráficos de funções quadráticas. Elas podem ser voltadas para cima (se a > 0) ou para baixo (se a < 0), e o ponto mais baixo (ou mais alto) da parábola é chamado de vértice. Elas são simétricas em relação a um eixo vertical que passa pelo vértice.
A seguir, iremos montar um projeto gerador de gráficos de funções lineares e quadráticas com Arduino. Esse projeto permite que o usuário insira os coeficientes de equações de 1º ou 2º grau através do monitor serial do Arduino e escolha o intervalo de x, assim os resultados dessas funções serão calculados e exibidos. Além disso, LEDs serão usados para indicar se a função é crescente ou decrescente, proporcionando uma indicação visual interativa.
//Criado por Daniel Vasconcelos
#include <SoftwareSerial.h> // Biblioteca para comunicação serial com outro dispositivo (não usada diretamente no código)
int i; // Declaração de uma variável inteira 'i', usada para iterar no loop
float num; // Declaração de uma variável de ponto flutuante 'num', que armazenará os resultados das funções
float xi; // Variável de ponto flutuante 'xi', que define o valor inicial do intervalo de x
float xf; // Variável de ponto flutuante 'xf', que define o valor final do intervalo de x
float xa; // Variável de ponto flutuante 'xa', que define o incremento para iteração de x
float a; // Variável de ponto flutuante 'a', que configura o coeficiente a
float c; // Variável de ponto flutuante 'c', que configura o coeficiente c
float b; // Variável de ponto flutuante 'b', que configura o coeficiente b
// Setup inicial: Este bloco é executado apenas uma vez quando o programa começa
void setup() {
Serial.begin(31250); // Inicializa a comunicação serial a 9600 bps (bits por segundo)
pinMode(7, OUTPUT); // Define o pino 7 como saída (controlará o LED vermelho)
pinMode(8, OUTPUT); // Define o pino 8 como saída (controlará o LED amarelo)
delay(1000); // Espera 1 segundo para garantir que tudo esteja inicializado corretamente
Serial.println("digite start para exibir o gráfico de equações de 1º grau, digite start2 para funções de 2º grau");//imprime no monitor serial
// Exibe a mensagem no monitor serial para o usuário
}
// Função auxiliar para verificar o valor de 'a' e acionar os LEDs
void verify(){
if (a < 0 ){ // Se 'a' for negativo,
digitalWrite(7, HIGH); //Liga o LED vermelho (pino 7)
digitalWrite(8, LOW); // Desliga o LED (pino 8)
}
else if (a > 0) { // Se 'a' for positivo
digitalWrite(7, LOW); //Desliga o LED vermelho
digitalWrite(8, HIGH); // Liga outro LED (pino 8)
}
else { // Se 'a' for zero, desliga ambos os LEDs
digitalWrite(7, LOW);
digitalWrite(8, LOW);
}
}
// Loop principal: Este bloco é executado repetidamente enquanto o Arduino está ligado
void loop() {
// Se o usuário digitar "start", começará o processo para calcular a função de 1º grau
if (Serial.readString() == "start") {
Serial.setTimeout(5000); // Define um tempo de espera de 5 segundos para leitura serial
Serial.print(" escreva o valor de a: ");
a = Serial.parseFloat(); // Lê o valor de 'a' inserido pelo usuário
Serial.setTimeout(5000);
Serial.println(a); // Exibe o valor de 'a'
Serial.print(" escreva o valor de b: ");
b = Serial.parseFloat(); // Lê o valor de 'b'
Serial.setTimeout(5000); // Define um tempo de espera de 5 segundos para leitura serial
Serial.println(b);
Serial.print(" escreva o intervalo de x, de: ");
xi = Serial.parseFloat(); // Lê o valor inicial de 'x' (xi)
Serial.setTimeout(5000); // Define um tempo de espera de 5 segundos para leitura serial
Serial.print(xi);
Serial.print(" para: ");
xf = Serial.parseFloat(); // Lê o valor final de 'x' (xf)
Serial.setTimeout(5000);
Serial.print(xf);
Serial.print(" com: iteraçao de: ");
xa = Serial.parseFloat(); // Lê o valor de incremento de 'x' (xa)
Serial.setTimeout(5000);
Serial.println(xa);
verify(); // Chama a função para verificar e controlar os LEDs
// Laço para calcular e exibir os resultados da função de 1º grau (f(x) = ax + b)
for (i = xi; i <= xf; i += xa) {
num = (a * i) + b; // Calcula o valor da função no ponto 'i'
Serial.println(num); // Exibe o resultado
delay(100); // Espera 100 milissegundos entre as iterações
}
}
// Se o usuário digitar "start2", começa o cálculo para a função de 2º grau
if (Serial.readString() == "start2") {
Serial.setTimeout(5000); // Define um tempo de espera de 5 segundos para leitura serial
Serial.print(" escreva o valor de a: ");
a = Serial.parseFloat(); // Lê o valor de 'a'
Serial.setTimeout(5000);
Serial.println(a);
Serial.print(" escreva o valor de b: ");
b = Serial.parseFloat(); // Lê o valor de 'b'
Serial.setTimeout(5000);
Serial.println(b);
Serial.print(" escreva o valor de c: ");
c = Serial.parseFloat(); // Lê o valor de 'c'
Serial.setTimeout(5000); // Define um tempo de espera de 5 segundos para leitura serial
Serial.println(c);
Serial.print(" escreva o intervalo de x, de: ");
xi = Serial.parseFloat(); // Lê o valor inicial de 'x'
Serial.setTimeout(5000);
Serial.print(xi);
Serial.print(" para: ");
xf = Serial.parseFloat(); // Lê o valor final de 'x'
Serial.setTimeout(5000);
Serial.print(xf);
Serial.print(" com: iteraçao de: ");
xa = Serial.parseFloat(); // Lê o valor de incremento de 'x'
Serial.setTimeout(5000); // Define um tempo de espera de 5 segundos para leitura serial
Serial.println(xa);
verify(); // Chama a função de verificação dos LEDs
// Laço para calcular e exibir os resultados da função de 2º grau (f(x) = ax² + bx + c)
for (i = xi; i <= xf; i += xa) {
num = a*(i * i) + (b *i) + c; // Calcula o valor da função no ponto 'i'
Serial.println(num); // Exibe o resultado
delay(100); // Espera 100 milissegundos entre as iterações
}
}
}Este código foi projetado para calcular e exibir no monitor serial os resultados de equações de 1º e 2º grau, com base em valores inseridos pelo usuário. Ele faz uso de um Arduino com comunicação serial e LEDs como indicadores. O usuário escolhe entre calcular uma função linear ou quadrática digitando “start” ou “start2”, respectivamente. Para melhor visualização, use o plotter serial, assim será possível observar o gráfico feito pela função.
Para a comunicação ocorrer sem defeitos, no monitor serial selecione a opção “No Line Ending”. Lembre-se que a comunicação UART entre arduino e computador é assíncrona, ou seja, é possível ocorrer perda de dados durante a comunicação.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!