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]

kit robotica educacional com Arduino ESP ou Microbit

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).

sensor capacitivo
Sensor capacitivo.

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.

exemplo de detecção de liquido dentro de um tanque. Em cima o tanque vazio e em baixo cheio com um liquido vermelho.
exemplo de detecção de liquido dentro de um tanque. Em cima o tanque vazio e em baixo cheio com um liquido vermelho.

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

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.

Pinagem do sensor capacitivo
Pinagem do sensor capacitivo

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:

Descrição do nome do sensor.

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 comutarconecta 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:

Diferença entre sensor NPN e PNP.

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.

Ligando sensor capacitivo a uma fonte DC - não comutado.
Ligando sensor capacitivo a uma fonte DC – não comutado.
Ligando sensor capacitivo a uma fonte DC - comutado. 
Ligando sensor capacitivo a uma fonte DC – comutado.

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:

Circuito diodo zener + resistor
Circuito diodo zener + resistor

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):

Circuito diodo zener + resistor com saída do sensor em 12V.
Circuito diodo zener + resistor com saída do sensor em 12V.

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:

Circuito diodo zener + resistor com saída do sensor em 0V.
Circuito diodo zener + resistor com saída do sensor em 0V.

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:

Circuito divisor de tensão
Circuito divisor de tensã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:

Parafuso de ajuste de sensibilidade e led indicativo de comutação.
Parafuso de ajuste de sensibilidade e led indicativo de comutação.
Ajustando a sensibilidade do sensor.
Ajustando a sensibilidade do sensor.

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.

Diagrama do circuito de tratamento do sinal do sensor capacitivo.
Diagrama do circuito de tratamento do sinal do sensor capacitivo.

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!

Privacy Preference Center