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!