Sensor Capacitivo com Arduino
Neste tutorial ensinaremos a você o princípio de funcionamento de um sensor capacitivo, como fazer a alimentação e o tratamento do sinal de saída do mesmo utilizando o Arduino.
[toc]
Sensor capacitivo
O sensor capacitivo é um sensor amplamente empregado para detecção de materiais diversos sem que estes precisem ter algum tipo de contato com o mesmo. Este processo é feito através da variação da capacitância interna do sensor. O princípio de funcionamento básico deste sensor é caracterizado pela presença de duas placas metálicas separadas por um dielétrico (como um capacitor convencional) de forma que, quando algum tipo de material entra na sua zona de detecção, a capacitância interna do circuito é alterada e, a partir desta variação, os contatos normalmente abertos (NA) e normalmente fechados (NF) são comutados).
Como o sensor capacitivo funciona
– Capacitâcia
Como dito, o sensor capacitivo detecta a variação de capacitância. Para entender como isso pode ser útil, vamos entender primeiro, de forma simples, como funciona um capacitor e o que é capacitância.
Um capacitor é um componentes que armazena energia em forma de campo elétrico. Ele é formado por duas placas separadas que podem conter(,) ou não um material dielétrico entre elas.
Uma das principais propriedades de um capacitor é a capacitância, que por sua vez, define a quantidade de energia que esse capacitor pode armazenar. Essa capacitância é proporcional a constante dielétrica do material entre as placas , de modo que, quanto maior for a constante dielétrica, maior será a capacitância.
Por sua vez, essa constante dielétrica está relacionada com a facilidade de condução do campo elétrico no material entre as placas. Podemos ter, entre as placas, materiais tais como o ar, mica e cerâmica. Cada um possui sua própria contante dielétrica que interfere na capacitância de forma diferente.
– O sensor capacitivo
O sensor capacitivo nada mais é que um capacitor, mas suas placas estão dispostas de modo que o campo elétrico forma um meio circulo, tal como a figura a seguir:
Dessa forma, podemos detectar um objeto que entre no campo elétrico do sensor, já que o mesmo influenciará na capacitância.
Uma aplicação muito comum seria a de verificar a presença de liquido dentro de um recipiente, podendo constatar se há nível dentro de um tanque, por exemplo.
Perceba que no exemplo dos dois tanques, quando o tanque está cheio, o liquido interfere na capacitância do sensor e, dessa forma, ele consegue detectar que o tanque está cheio.
Aplicações
Diversos são os campos onde o sensor capacitivo pode ser empregado devido à sua capacidade de ser sensibilizado tanto por materiais condutores como não condutores. Alguns exemplos de aplicação:
- Sensor de proximidade;
- Controle do nível de fluido;
- Contadores em linha de produção;
- Medidor de espessura;
- Medidor de posicionamento;
- Detectar o conteúdo de caixas em linhas de produção.
Um exemplo peculiar pode ser analisado uma vez que este sensor é também aplicado na área automobilista em projetos de veículos Baja. As equipes realizam a detecção de combustível, no interior do tanque, posicionando o sensor na parte externa desse podendo assim coletar informações sobre o nível de gasolina. O emprego do sensor é baseado no fato de ser possível medir o nível da gasolina externamente e informar ao piloto, através de algum indicativo(Led ou Display), que é necessário abastecer. Nesta aplicação e em muitas outras onde o ambiente de medição de nível esta sujeito a vibrações e movimento, a realização de filtros ou médias de um conjunto de amostras coletadas para que se tenha uma saída de maior confiabilidade, é uma das estratégias utilizadas para sanar a inconsistência dos dados.
Mãos à obra – Como tratar o sinal deste sensor
Componentes Necessários
- 1 x Arduino Uno ou Arduino Mega
- 1 x Sensor capacitivo
- 1 x Resistor 10KΩ
- 1 x Diodo Zener
- 1 x Protoboard
- Fios Jumpers
Ligando o sensor a uma fonte DC
O sensor utilizado nesse tutorial é o CM18 – 3005NC NPN desenvolvido pela empresa JNG, mas essa aplicação é válida para a maioria de sensores capacitivos existentes. A faixa de alimentação do mesmo é de 10 à 30 volts em tensão contínua(DC), possui um range de comutação de aproximadamente 8 milímetros e contato normal fechado (NF). O cabo de sinal do sensor se mantém no mesmo nível de tensão de alimentação. Quando houver a detecção, o cabo de sinal recebe o nível baixo (0V) e um Led de sinalização na parte de trás do sensor é energizado, evidenciando seu funcionamento.
O sensor é do tipo NPN (NC). Esse dado pode ser obtido ao se analisar o nome de identificação do sensor uma vez que as duas últimas letras são reservadas para informar a forma de saída e o estado de saída, respectivamente. Portanto a letra ‘N’ corresponde a NPN e a letra ‘C’ fornece o contato que é normal fechado (NC).
O dispositivo Normalmente Fechado (NF) – em inglês Normally Closed (NC) – é aquele que o circuito normalmente está conduzindo. Quando esse dispositivo sofre alguma alteração, já esperada, ele abre o circuito e para de conduzir.
O dispositivo Normalmente Aberto (NA) – em inglês Normally Open (NO) – é aquele que normalmente não está conduzindo. Quando esse dispositivo sofre alguma alteração, já esperada, ele fecha o circuito e começa a conduzir.
No sensor capacitivo essa alteração esperada seria equivalente a detecção do sensor. Ou seja, quando o sensor é normalmente fechado e ele detecta algo ele irá abrir o circuito.
Desta forma, o nome do sensor pode ser decomposto segundo o exemplo abaixo:
Sendo assim, a saída digital é controlada pelo transistor NPN ou PNP. A diferença entre estes tipos está atrelada ao fato que aquele, ao comutar, conecta o negativo (azul) à carga, já este, o PNP ,conecta o positivo (marrom) à carga. Tal fato pode ser facilmente compreendido ao se analisar a imagem abaixo:
A imagem a seguir mostra o sensor capacitivo alimentado por uma fonte de tensão DC, observe que o sensor esta alimentado com 12Vcc através do cabo “jacaré”. Assim, com um multímetro conectado ao terminal de sinal(preto) e a referência(azul) do sensor podemos medir a tensão de saída quando o mesmo não detecta o objeto ou fluido.
Agora que já sabemos como alimentar um sensor capacitivo e a amplitude do sinal de saída, é hora de montar o circuito que reduz a tensão do sensor a um nível seguro para o Arduino.
Realizando as conexões
Uma vez identificados os terminais do sensor e fixado este nas proximidades da superfície de medição, é necessário reduzir a tensão para os níveis de trabalho suportados pelo Arduino. Para isso, podem ser empregadas algumas configurações de circuitos que realizam a redução desta tensão. Tais componentes ou circuitos integrados são listados abaixo:
- Diodo zener + resistor;
- Divisor de tensão;
- Optoacopladores;
- Amplificadores operacionais(Ampop)
- Transistores MOSFET ou TBJ;
Nesse tutorial será utilizado o circuito composto por um diodo zener e um resistor, em vista da facilidade de montagem e por apresentar um ótimo desempenho para a aplicação. O circuito desta configuração citada foi simulado utilizando o software Proteus conforme apresentado na imagem a seguir:
Como pode ser observado na imagem acima, foi utilizado um resistor que tem a função de restringir a corrente no pino digital do Arduino, evitando danos ao mesmo. Para essa função, resistores entre 4.7kΩ a 10KΩ são suficientes para limitar a corrente.
Já o diodo zener tem a função de regular a tensão de saída do sensor em um valor seguro de operação para o Arduino. Nesse caso, a escolha do mesmo deve levar em conta que o máximo valor de tensão admissível nas entradas do microcontrolador é de 5V. Para esse tutorial o diodo zener utilizado foi o 1N4732A, esse semicondutor opera numa faixa de 3.3 a 24Vdc, fixando a tensão em 4.7V com uma corrente nominal de 53mA, garantindo assim que a tensão na entrada digital do Arduino não exceda o valor limite e danifique sua entrada ou o embarcado definitivamente.
Na simulação para representar a dinâmica do sinal de saída do sensor (lembrando que o sensor é NF), foi utilizada uma bateria de 12V, juntamente com uma chave que expressa a comutação do sensor. Na imagem a seguir é possível observar que no instante em que a chave está fechada (sensor não detecta objeto ou fluído) a tensão no pino digital do Arduino será nível lógico alto(≅4.7V):
No instante em que algum objeto interceptar a área de detecção do sensor (chave aberta), a saída comuta para 0V e a tensão na entrada do microcontrolador também será 0V, como mostrado na figura abaixo:
Tratando o sinal do sensor com divisor de tensão
Existem diversas formas de tratar o sinal de saída do sensor capacitivo, de modo que, algumas delas já foram apresentadas anteriormente. Nesta seção vamos explicar como montar outro circuito: o divisor de tensão. Como o nome já diz, a segunda maneira de reduzir a tensão de saída do sensor é utilizando um divisor de tensão, muito parecido com a anterior, substituindo o diodo por outro resistor e aumentando o valor das resistências de ambos os resistores. A imagem a seguir exibe tal configuração:
Esta configuração é bem simples também. É comum adicionar resistores na ordem de MΩ pois assim o circuito não drena corrente do sinal do sensor e também não interfere no valor da tensão sob o resistor R2 (que será composto apenas pelo sinal de tensão de saída do sensor reduzido). Para dimensionar os valores de resistência é necessário estipular um dos dois resistores, sendo assim, fixamos R2 = 1MΩ. Aplicando a seguinte formula, podemos encontrar o valor de R1:
Vout = (R2 * Vin)/R1 + R2
Como conhecemos o valor de tensão que pode entrar no pino digital do Arduino(Vout) e o valor da tensão de saída do sensor(Vin) juntamente com o valor do resistor R2, temos:
R1 = (R2 * Vin/Vout) – R2
R1 = (1M * 12/5) – 1M
R1 = 1.4MΩ
Desta forma, é possível definir o valor do primeiro resistor que compõe o divisor de tensão. Como existem valores tabelados para resistores(,) e o valor encontrado para R1 não é comercial, colocamos no circuito um resistor de 1.5MΩ, para que este não interfira de forma brusca no funcionamento do circuito. A diferença é que no momento em que o sensor não detecta objetos, sinal de saída 12V, o valor da tensão na entrada do Arduino será um pouco menor que 5V, mas ainda sim garantindo seu correto funcionamento.
É importante destacar que, se comparado com o circuito diodo Zener e divisor de tensão, o circuito utilizando opto acoplador possui a vantagem de isolar o circuito do sensor, atuando com uma proteção. Em caso de ocorrência de algum curto circuito no sensor, esta corrente não afetará a placa de circuito microcontrolador.
Ajustando a sensibilidade do sensor
É comum que esses sensores disponham de um parafuso na parte traseira da carcaça para ajustar a sensibilidade de comutação. Uma vez que se deseja empregar esse sensor em algum projeto prático, é necessário realizar o devido ajuste. Outra observação importante é a existência de um pequeno led na parte traseira do invólucro, que tem o papel de indicar a comutação do sensor, auxiliando até mesmo no ajuste da sensibilidade e em casos de manutenção e verificação de falhas. A imagem a seguir permite identificar o parafuso de ajuste e o led:
Montando o projeto
Agora, vamos conectar os componentes do projeto na protoboard. Para isso, desligue o cabo USB de seu Arduino e monte seu circuito conforme a figura a seguir.
Existem duas observações importantes sobre a montagem: a primeira diz respeito a alimentação do sensor, pois, como sabemos, o sensor pode ser alimentado por uma fonte DC de 10 a 30Vdc (no diagrama acima utilizamos uma bateria comum por questões de representação). A segunda observação é sobre o jumper de GND do Arduino conectado ao da fonte de alimentação do sensor, pois, sem essa conexão o circuito não funcionará de forma adequada pois os mesmos não dispõem de um sinal de referência em comum. Uma vez que a montagem acima esta finalizada, falta realizar a programação do seu modulo Arduino.
Programando
Abra sua IDE e conecte o Arduino ao computador por meio do cabo USB e analise o código a seguir.
– Código utilizado
Agora que toda a parte de hardware da aplicação está montada, vamos ao software responsável por coletar o sinal do sensor e fazer a indicação da comutação do sensor capacitivo:
//Arduino e Sensor Capacitivo #define pinSensor 8 //Define o pino de entrada do sinal do sensor #define LED 13 //Define led(pino 13) da placa do arduino bool statusSensor = false; //variável que armazena o estado do sensor void setup() { Serial.begin(9600); //Inicialização da porta de comunicação Serial pinMode(pinSensor, INPUT); //Define o sensor como entrada de informações pinMode(LED, OUTPUT); //Define o led como saída } void loop() { //Faz a leitura digital do estado do sensor //acionado - 0(0V) desacionado - 1(+Vcc) statusSensor = digitalRead(pinSensor); //se o valor da variável for 1(true) entra no if if (statusSensor == true) { Serial.println("Objeto nao Detectado!"); //exibe na serial a string dentro das aspas digitalWrite(LED, LOW); //Apaga o led } //se o valor da variável for 0(false) entra no else if else if (statusSensor == false) { Serial.println("Objeto Detectado!"); //exibe na serial a string dentro das aspas digitalWrite(LED, HIGH); //Acende o led } delay(500); //atraso de 1/2 segundo }
Colocando para funcionar
Para se verificar o funcionamento do sensor capacitivo, foi montado em bancada o circuito que reduz a tensão de saída juntamente com um Arduino Mega, como pode ser visualizado na imagem a seguir:
Leitura do sinal do sensor capacitivo com Arduino.
Monitor serial aberto.
Entendendo a fundo
Software
– Declarando as variáveis do projeto
Primeiramente, para desenvolver a aquisição do sinal do sensor é necessário a criação ou definição das variáveis de entrada e saída do Arduino. A variável pinSensor é responsável por definir o pino de entrada do sinal do sensor no microcontrolador e a variável LED é utilizada para definir o pino do led da placa Arduino Mega. Ja á variável statusSensor (do tipo booleana) tem a função de armazenar o valor referente ao estado do sensor.
#define pinSensor 8 #define LED 13 bool statusSensor = false;
– Estabelecendo as configuraões iniciais
Na função setup(), existem duas seções, a primeira delas é a função Serial.begin(9600), onde é inicializado a porta de comunicação serial e definimos o baudrate para 9600. A segunda parte é composta pela definição das I/O, ou seja, com a função pinMode(pinSensor, INPUT) definimos que a variável pinSensor é um pino de entrada de dados. Da mesma forma com a instrução pinMode(LED, OUTPUT) determinamos que a variável LED é um pino de saída do Arduino.
void setup() { Serial.begin(9600); pinMode(pinSensor, INPUT); pinMode(LED, OUTPUT); }
– Aquisição do sinal do sensor
Na função void loop(), utiliza-se primeiramente a instrução digitalRead(pinSensor) para armazenar na variável statusSensor o valor digital do estado do sensor que pode ser 0(false) ou 1(true), o parêmetro dentro dos parênteses é o pino a ser lido.
statusSensor = digitalRead(pinSensor);
Na próxima linha de código, existe a condicional if(), caso o estado do sensor armazenado na variável statusSensor venha a ser 1(true), a condição é aceita e o Arduino executa as duas funções dentro da condicional. A primeira função Serial.println(“Objeto nao Detectado!”), exibe no monitor serial Objeto nao Detectado!, que o sensor não esta detectando nenhum objeto ou fluído próximo a sua área de contato. A segunda instrução executada é a digitalWrite(LED, LOW), tal função recebe dois parâmetros (pino do Arduino, nível lógico) desta forma como o comando foi LOW a saída(led) é desligado.
if (statusSensor == true) { Serial.println("Objeto nao Detectado!"); digitalWrite(LED, LOW); }
Da mesma forma existe uma condicinal else if() que avalia o caso em que o sensor esta detectando algum objeto próximo a sua região de sensibilidade. Sendo assim, se o valor de statusSensor for 0(false), a condição é válida e o Arduino executa as duas próximas funções dentro das chaves. A primeira função Serial.println(“Objeto Detectado!”), exibe no monitor serial Objeto Detectado!, que o sensor esta detectando objeto próximo a sua face frontal, e a segunda instrução ascende o led da placa digitalWrite(LED, HIGH), pois foi passado o parêmetro HIGH(ligado, 1).
else if (statusSensor == false) { Serial.println("Objeto Detectado!"); digitalWrite(LED, HIGH); }
A última linha de código é composta pela função delay(ms), essa função quando executada gera um atraso no código em milisegundos de acordo com o valor do parâmetro passado dentro dos parênteses, nesse caso 500ms ou 1/2 segundo.
delay(500);
Desafio
Desenvolva um projeto que seja possível medir o nível de algum fluído em um reservatório e acionar uma bomba d’água quando o nível estiver baixo. Para isso utilize um sensor capacitivo, uma válvula solenóide ou bomba de aquário e uma ponte H para fazer o acionamento destes.
Considerações finais
Espera-se que este tutorial possa ter ajudado no desenvolvimento de seu projeto. A equipe responsável agradece pela sua leitura e, em caso de dúvidas e sugestões, deixe seu comentário para que possamos sanar suas dúvidas! Obrigado!
muito bom e explicado.
Parabens ao desenvolvedor…
so uma duvida e se for mais de um sensor. como seria.