O Voltímetro DIY com Arduino é um projeto desenvolvido com base na associação de valores entre a leitura do Módulo Sensor de Tensão e o ângulo do Servo Motor SG90, sendo que através desta associação, o mesmo apresenta de maneira analógica os valores no painel em MDF.
Hoje temos soluções para quase todas as necessidades eletrônicas e corriqueiras do nosso dia a dia, dentre elas, os multímetros digitais e analógicos responsáveis por demonstrar-nos informações como tensão, corrente, resistência e afins. Neste projeto, porém será desenvolvido um equipamento para verificação de tensão apenas.
O presente projeto terá como objetivo demonstrar a associação de dados entre dois equipamentos e através de uma simples função semelhante a uma regra de três simples, relacionar as tensões de 0 a 24V com respectivas posições angulares do servo motor, a variação do ângulo por sua vez estará associada a um painel analógico impresso no MDF e que possibilitará visualizar a tensão aplicada nos locais específicos.
Sensor de Tensão DC – Sistema de Funcionamento
O princípio de funcionamento do Sensor de Tensão DC utilizado no Voltímetro DIY com Arduino baseia-se na regra do divisor de tensão, um método que proporciona a uma tensão de entrada (Vin), uma tensão elétrica linear de saída (Vout), ou seja, através de uma tensão de entrada outra é gerada após passar através da associação de dois resistores, porém com um valor reduzido.
Bastante aplicado em projetos que necessitam de verificações contínuas da tensão, o Sensor de Tensão possibilita o teste de baterias, fontes e demais elementos com produção de carga dentro dos limites de 0 a 25V e dentro destes limites que agem os divisores de tensão, veja abaixo um exemplo simples de divisor:
No circuito acima, dois resistores (R1 e R2) são ligados em série e em uma de suas extremidades é utilizada como base coletora da tensão de entrada Vin e outra é conectada um elemento negativo (GND) que deverá ser comum também à tensão de saída (Vout) localizada entre os resistores do esquema elétrico.
Quanto aos elementos de funcionamento do Sensor de Tensão, podemos destacar os que estão diretamente associados ao esquema de conversão e verificação via Divisor de Tensão, dentre eles temos:
- Vin – A Voltage Input, ou voltagem de entrada, é a tensão que será aplicada nos bornes para verificação, respeitando o limite de 0 a 25V.
- Vout – A Voltage Output, ou voltagem de saída, é a tensão que irá sair para o Arduino e será responsável pelas devidas conversões analógica.
- R1 – O Resistor 1, é um Resistor SMD de código 3002 com resistência de 30k Ohms.
- R2 – O resistor 2, é um Resistor SMD de código 7501 com resistência de 7,5k Ohms.
O valor da Vout é convertido pelos resistores utilizando como base de cálculo a seguinte fórmula:
Desta maneira se tivéssemos, por exemplo, o valor de R1 = R2, teríamos uma tensão de saída igual à metade da tensão de entrada e para cada projeto, dependendo do valor desejado na saída, altera-se o valor dos resistores. Para o desenvolvimento do referente módulo, por exemplo, foram utilizados resistores que proporcionassem uma saída máxima de 5V.
A comunicação padrão do Arduino é digital, porém através do conversor A/D integrado no microcontrolador ATmega328 que possui uma resolução de 10 bits é possível também trabalharmos com valores de entrada e saída analógicos, o que possibilita consequentemente a obtenção de valores menores e mais precisos.
O primeiro passo que devemos observar na utilização de comunicações analógicas diz respeito a resolução base de seu funcionamento e que pode ser obtida através da seguinte equação:
Onde, Vref é a tensão de funcionamento do microcontrolador e n é o número de bits do microcontrolador. No Arduino UNO, por exemplo, a tensão de funcionamento é 5V e o número de bits é 10, desta forma temos:
Assim temos, que o número máximo de unidades permitidas na leitura de uma porta analógica é de 1024 e que cada uma destas, corresponde a um valor de 4,88mV. Desta maneira, ao realizarmos a leitura de valores externos teremos uma relação de 1024 unidades para uma tensão de 5V e para verificarmos a tensão de entrada específica temos que saber o valor da leitura analógica e respeitar a seguinte equação:
Onde Vout é a tensão de saída fornecida à porta analógica do Arduino e LA é o valor desta leitura analógica e Vref como já vimos anteriormente é a tensão de funcionamento do microcontrolador. Ao substituirmos esta informação junto à equação do Divisor de tensão seremos capazes de saber qual o valor esta sendo aplicado para verificação junto ao Sensor de Tensão.
Através desta equação resultante de Vin que o código irá verificar o valor da porta analógica e apresentar o respectivo valor presente nos bornes de entrada do Sensor de Tensão, um próximo passo que será aplicado junto ao software Arduino durante o desenvolvimento do projeto.
Produtos Utilizados no Projeto
Abaixo seguem todos produtos utilizados no desenvolvimento do projeto, os quais pode ser adquiridos de forma avulsa conforma listagem. Se você quiser, pode adquirir a versão do Voltímetro Analógico DIY Completo, o qual já possui todas as peças necessárias para montagem.
– 1 Arduino Uno SMD + Cabo USB;
– 1 Case em MDF para Voltímetro Analógico;
– 1 Sensor de Tensão DC 0-25V;
– 1 Micro Servo Motor 9g SG90 180°;
– 1 Jack P4 Plástico para Paineis e Chassis;
– 1 Borne Banana Fêmea – Vermelho e Preto;
– Jumper Premium para Protoboard Macho-Fêmea 20 cm;
– Jumper Premium para Protoboard Macho-Macho 20 cm.
Esquema de Ligação do Voltímetro DIY com Arduino:
O esquema de ligação do Voltímetro DIY com Arduino e Servo Motor e sistema de monitoramento analógico possui uma montagem extremamente simples, por ser desenvolvido junto de um case em MDF, porém possui algumas características diferenciadas como a fonte de alimentação que é posta junto ao Jack P4 para alimentação via pino Vin do Arduino.
Os componentes vermelho e preto conectados junto ao Sensor de Tensão DC são os Borne Banana para conexão de pontas de prova, elementos facilitadores para a utilização do produto final desenvolvido neste projeto. No mais, temos apenas a conexão dos pinos de comunicação do Sensor de Tensão na porta analógica e do Servo Motor na porta Digital PWM.
Código de Funcionamento do Voltímetro DIY com Arduino
O código de funcionamento é bastante simples e conta com apenas uma biblioteca, utilizada para o controle de funcionamento do servo motor e esta, a VarSpeedServo exclusivamente para o controle de velocidade dos mesmos.
Bibliteca VarSpeedServo: DOWNLOAD AQUI.
Segue abaixo, código completo e comentado para o desenvolvimento do Voltímetro DIY com Arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#include <VarSpeedServo.h> // Inclui a biblioteca VarSpeedServo.h VarSpeedServo meuservo; const int pinoSensor = A2; // Declara pinoSensor como pino A2 float tensaoEntrada = 0.0; // Inicia os valores de tensaoEntrada em 0 float tensaoMedida = 0.0; // Inicia os valores de tensaoMedida em 0 int posicaoservo1; int posicaoservo2; int posicaoservo3; float valorR1 = 30000.0; // Define valorR1 como 30k Ohms float valorR2 = 7500.0; // Define valorR2 como 7,5k Ohms float vref = 5; // Define vref como 5V int leituraSensor = 0; // Inicia a leituraSensor em 0 void setup() { pinMode(pinoSensor, INPUT); // Define o pinoSensor como entrada de sinal meuservo.attach(9); // Inicia o servo motor no pino D9 Serial.begin(9600); } void loop() { leituraSensor = analogRead(pinoSensor); // Chama de leituraSensor o valor analógico // Realiza os cálculos de conversão para valores vistos no artigo tensaoEntrada = (leituraSensor * vref) / 1024.0; tensaoMedida = tensaoEntrada / (valorR2/(valorR1+valorR2)); // Se o valor da tensaoMedida for maior igual a zero ou menor que 9, executa if (tensaoMedida >= 0 && tensaoMedida < 9) { posicaoservo1 = map(tensaoMedida, 0, 8, 180, 124); // Relaciona os valores de tensão e ângulo meuservo.write(posicaoservo1, 2, true); // Posiciona o servo com uma velocidade 2 } // Se o valor da tensaoMedida for maior igual a 9 ou menor que 17, executa if (tensaoMedida >= 9 && tensaoMedida < 17) { posicaoservo2 = map(tensaoMedida, 9, 16, 116, 60); // Relaciona os valores de tensão e ângulo meuservo.write(posicaoservo2, 2, true); // Posiciona o servo com uma velocidade 2 } // Se o valor da tensaoMedida for maior igual a 17 ou menor que 25, executa if (tensaoMedida >= 17 && tensaoMedida < 25) { posicaoservo3 = map(tensaoMedida, 17, 24, 52, 4); // Relaciona os valores de tensão e ângulo meuservo.write(posicaoservo3, 2, true); // Posiciona o servo com uma velocidade 2 } // Imprime os valores no monitor serial para possíveis verificações Serial.print("Tensão DC medida: "); Serial.print(tensaoMedida); Serial.println("V"); delay(500); } |
A sequencia de funcionamento do sensor de tensão respeita uma equação matemática simples e que podemos observar dividida em duas partes através do seguinte trecho do código Arduino:
1 2 3 |
// Realiza os cálculos de conversão para valores vistos no artigo tensaoEntrada = (leituraSensor * vref) / 1024.0; tensaoMedida = tensaoEntrada / (valorR2/(valorR1+valorR2)); |
A função if (tensaoMedida >= x && tensaoMedida < y) verifica se o valor do sensor de tensão está dentro da escala estipulada entre x e y e após executa a função de cada uma das equivalências através de uma regra de três simples delimitada pela função map();, veja:
1 |
posicaoservo3 = map(tensaoMedida, 17, 24, 52, 4); |
No exemplo acima, temos que a posicaoservo3 é delimitada pela função map quanto aos valores da tensaoMedida em relação ao ângulo do motor, ou seja, para tensões de 17V o valor correspondido é o ângulo de 52º, para tensões de 24V o valor correspondido é o ângulo de 4º e assim para todos os valores dentro do intervalo destes valores mínimos e máximos.
Conclusão:
O sistema de funcionamento do Voltímetro DIY com Arduino é bastante simplificado e pode ser utilizado para a verificação de tensões DC dentro dos limites estipulados pelo projeto, o referente código verifica as tensões grau a grau apenas, ou seja, desconsidera os valores decimais da mesma, uma característica da função map();.
Fica como desafio aos que desejarem, desenvolver uma atualização do código com a finalidade de proporcionar uma verificação dos valores decimais, porém vale lembrar que na utilização de servos é necessária a correspondência de valores angulares inteiros, foi levantada a hipótese de se utilizar o servo sem biblioteca, porém este procedimento não é recomendada tendo em vista a frequência de funcionamento do Arduino para os limites do servo motor.
Através deste projeto é possível verificar a tensão de das mais diversificadas fontes de alimentação como baterias, fontes de alimentação chaveada e todo e qualquer equipamento que forneça tensões dentro dos limites estipulados pelo sensor de tensão que é de 0 a 25, ou de 0 a 24 que são as capacidades de funcionamento do referente projeto.
Não se esqueça de comentar abaixo as experiências que obteve com este projeto e também compartilhar suas melhorias e adaptações realizadas, além disto, participe conosco dando opiniões e sugestões para nossos próximos projetos.