/*
Definições e variáveis utilizadas no projeto do Módulo Sensor de Tensão AC com arduino
Esta instrução define quais as variáveis que iremos utilizar durante nosso programas os tipos
de variáveis e os valores ou pinos atribuídos a elas. Assim sendo, temos como primeira variável
do tipo int a variável “corrente_inst” sendo esta um vetor devido ao “[300]”. Em seguida temos
como primeira variável do tipo float “corrente_pico” declarada sem atribuições a ela. Logo
depois temos a declaração “maior_valor = 0” do tipo “double” a qual foi atribuído a ela o valor
0. Por fim, temos a declaração “tempo_zero_inicio” do tipo “unsigned long”. Todas está variaveis
de tipos diferentes foram declaradas assim, pois elas ocupam espaços diferentes na memoria.
Algumas ocupam menos como do tipo “int” e outras mais como do tipo “unsigned long”.
int corrente_inst[300];
int zero = 0;
int diferenca = 0;
int leitura = 0;
int pino_sensor = A2; //Define o pino A2 como pino do sensor
float corrente_pico;
float corrente_eficaz;
float tensao_rms;
float tensao_pico;
float frequencia_sinal;
double maior_valor = 0;
double corrente_valor = 0;
unsigned long tempo_zero_inicio;
unsigned long tempo_zero_final;
unsigned long semi_periodo;
unsigned long periodo_completo;
– Função Setup – Definindo pinos do Módulo Sensor de Tensão AC com arduino
A função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado.
Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. Com a
função Serial.begin(9600) inicializamos a comunicação serial e definimos uma velocidade para
podermos visualizar o que está acontecendo no serial monitor. Já com a pinMode definimos que
o pino do sensor, declarado anteriormente, é uma entrada.Ou seja, é ele que irá receber a
informação do meio e atuar atravez de saidas.
void setup(){
Serial.begin(9600);
pinMode(pino_sensor, INPUT);
}
– Função Loop – Leitura do nosso sensor Módulo Sensor de Tensão AC com arduino e Estruturas de
decisão
A função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop
constante até que seja reiniciado ou parado o programa. Antes de tudo temos a variável
“maior_valor = 0” que já foi declarada anteriormente recebendo o valor 0. Depois, ao longo do
código temos a estrutura de repetição for a qual foi inicializada com a variável “i” recebendo
o valor 0. Logo depois, temos que a função irá se repetir e tudo o que está dentro dela irá ser
executado até que “i” seja maior ou igual a 300. Enfim temos que será adicionado +1 a variável
“i” toda vez que a execução da estrutura terminar. Já na primeira linha depois do for temos que
o vetor “corrente_inst[i]” recebera a leitura analógica do pino do sensor a cada ciclo e
armazenará em seus devidos endereços.
void loop(){
maior_valor = 0;
for(int i = 0; i <300; i++){
corrente_inst[i] = analogRead(pino_sensor);
}
Após a estrutura anterior, temos ela novamente e dentro dela uma estrutura if de decisão. Nesta
ótica, temos que caso a condição entre os parenteses do if for verdadeira tudo o que está entre
os colchetes será executado. Então, caso o valor da variável “maior_valor” for menor que o
respectivo valor do vetor “corrente_inst[i]”, sendo esta variavel a que armazena os valores que
o sensor detectou do meio, a variável “maior_valor” vai receber o valor do vetor
“corrente_inst[i]” até que o valor que esteja na variavel “maior_valor” seja o maior valor que
o sensor detectou.
for(int i = 0; i <300; i++){
if(maior_valor < corrente_inst[i]){
maior_valor = corrente_inst[i];
}
}
Em seguida, como resultado as duas funções for anteriores temos a função Serial.print que irá
imprimir no monitor serial o texto “Maior Valor” e depois o maior valor que o sensor conseguiu
detectar e que está variável armazena. Logo em seguida temos o delay que interrompe o programa
por 5000 milissegundos.
Serial.print("Maior Valor");
Serial.println(maior_valor);
delay(5000);
A variável “tensao_pico” vai receber o valor da função “map(maior_valor,500,661,0,313)”. A função
“map(maior_valor,500,661,0,313)” nos permite efetuar o mapeamento de um intervalo numérico em
outro intervalo numérico desejado. Já a variável “tensao_rms” recebera o valor da razão entre a
variável “tensao_pico” e o valor 1.4. Para finalizar o código irá imprimir no serial monitor o
texto “Tensão de Rede Elétrica: ” e depois o valor da variavel “tensao_rms” que é a tensão que
queremos saber.
tensao_pico = map(maior_valor,500,661,0,313);
tensao_rms = tensao_pico/1.4;
Serial.print("Tensão de Rede Elétrica: ");
Serial.println (tensao_rms);
Considerações finais:
Neste tutorial mostramos como funciona e como utilizar o Módulo Sensor de Tensão AC – ZMPT101B.
Veja também o tutorial “MEDINDO TENSÃO AC COM TRANSFORMADOR” onde falamos mais a respeito da
tensão de corrente alternada. Esperamos que você continue nos acompanhando e sinta-se à vontade
para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários
abaixo.
Angelo Lyra
Angelo Lyra
Estudante de Engenharia Elétrica – IFES, Técnico em Eletrotécnica. Interesse por IoT, Robótica
e Sistemas embarcados. Aprecia e deseja desenvolver-se nas tecnologias e suas composições.
*/
int corrente_inst[300];
int zero = 0;
int diferenca = 0;
int leitura = 0;
int pino_sensor = A2;
float corrente_pico;
float corrente_eficaz;
float tensao_rms;
float tensao_pico;
float frequencia_sinal;
double maior_valor = 0;
double corrente_valor = 0;
unsigned long tempo_zero_inicio;
unsigned long tempo_zero_final;
unsigned long semi_periodo;
unsigned long periodo_completo;
void setup(){
Serial.begin(9600);
pinMode(pino_sensor, INPUT);
}
void loop(){
maior_valor = 0;
for(int i = 0; i <300; i++){
corrente_inst[i] = analogRead(pino_sensor);
}
for(int i = 0; i <300; i++){
if(maior_valor < corrente_inst[i]){
maior_valor = corrente_inst[i];
}
}
Serial.print("Maior Valor");
Serial.println(maior_valor);
delay(5000);
tensao_pico = map(maior_valor,500,661,0,313);
tensao_rms = tensao_pico/1.4;
Serial.print("Tensão de Rede Elétrica: ");
Serial.println (tensao_rms);
}