7 Formas de Queimar um Arduino

 7 FORMAS DE NÃO USAR UM ARDUINO

Títulos como o deste tutorial podem não ser muito comuns. Porém, em se tratando de Arduino e de eletrônica, acredite, mais importante do que saber manusear essa placa, é ter em mente o que não fazer com ela. Do contrário, você poderá ter impasses nada agradáveis, incluindo a perda de funcionalidade do seu produto. Dito isso, ao longo deste tutorial, você vai entender como e por que certas práticas podem arruinar suas experiência com o Arduino, de modo que possa evitá-las. Mas antes disso, se esse universo ainda é uma novidade, não se esqueça de consultar o tutorial "O que é e como funciona o Arduino", disponível em nosso portal.

kit robotica educacional com Arduino ESP ou Microbit

Sobrecarga de Corrente

Para começar, o erro mais comum, em termos de eletrônica, que você pode cometer em relação ao Arduino é submetê-lo a uma sobrecarga de corrente. Isso pode ser feito de 2 formas:

Erro 1: Conexão de pinos I/O ao GND

Em primeiro lugar, vamos relembrar o que são pinos I/O. Trata-se dos pinos input/output ou entrada e saída (E/S) da placa, aqueles que nós usamos para conectar os LEDs e os demais componentes eletrônicos ao Arduino. Eles correspondem aos pinos digitais de 0 a 13, localizados na parte superior da placa, e aos pinos analógicos de 0 a 5, na parte inferior.

Sobre esses pinos, uma situação de sobrecarga de corrente pode acontecer quando um deles, definido como output, em estado HIGH, é conectado ao GND.

int pino=12;
void setup() {
  pinMode(pino,OUTPUT);
}
void loop() {
  digitalWrite(pino,HIGH);
}

 

Para entender como isso ocorre, lembre-se de que, quando o estado de um pino é definido como HIGH, a tensão a que ele é submetido é de 5V em média. Utilizando a Lei de OHM e tendo em mãos algumas informações técnicas disponíveis no datasheet do Arduino, podemos verificar que essa prática é danosa ao equipamento.

A Lei de OHM afirma que os valores de tensão, corrente e resistência se relacionam da seguinte forma:

Perceba, na folha de dados, que a resistência interna dos pinos I/O é de 25 OHM, e a corrente máxima suportada por eles é de 40mA.

Ao fazer as contas, chegamos à conclusão de que essa conexão possibilita que uma corrente aproximadamente 5 vezes maior que o limite passe pelo pino. Dessa forma, você provocará um curto e danificará o pino.

 

Erro 2: conexão entre pinos I/O em diferentes estados lógicos

Outra forma de provocar uma sobrecarga de corrente consiste na conexão entre 2 pinos I/O configurados como output, estando um em estado lógico HIGH e o outro em LOW.

int pino1= 12;
int pino2= 13;

void setup() {
  pinMode(pino1,OUTPUT);
  pinMode(pino2,OUTPUT);

}

void loop() {
  digitalWrite(pino1,HIGH);
  digitalWrite(pino2,LOW);
}

 

Dessa forma, um deles estará submetido a 5V (HIGH) e o outro 0V (LOW), fazendo com que a diferença de potencial do circuito seja de 5V. Assim como no caso anterior, esse tipo de conexão provocará um curto, só que, dessa vez, você terá dois pinos deteriorados.

Sobrecarga de Tensão

Além dos danos que uma corrente acima do valor limite pode causar, é importante ficar atento à tensão aplicada aos pinos. Nesse sentido, vamos analisar os erros que podem provocar essa situação.

Erro 3: sobrecarga de tensão nos pinos I/O

No datasheet, temos a seguinte informação a respeito da tensão máxima suportada pelos pinos I/O:

Para o nosso propósito, isso quer dizer que sempre que a tensão aplicada aos pinos I/O for superior a 5,5V, eles poderão ser queimados.

Ao longo de suas experiências com Arduino, é bem provável que você precise fazer uso de uma fonte externa, como baterias de 9V. Isso se faz necessário, por exemplo, para o controle de componentes que exigem maior potência, como alguns servo motores.

Nesse sentido, fique atento, pois você poderá aplicar acidentalmente uma sobrecarga de tensão a um pino I/O, se conectá-lo diretamente ao polo positivo da bateria. Danificar o pino, no entanto, seria o menor dos problemas, uma vez que é possível que o estrago se estenda para outras partes da placa, como o chip de interface USB.

 

Erro 4: conectar um fonte externa ao VIN de maneira invertida

Usualmente, quando é preciso utilizar uma fonte externa, você pode conectar seus terminais ao Arduino da seguinte forma:

 

Caso você não se lembre, o pino VIN é utilizado como entrada de energia elétrica para o Arduino quando o circuito exige o uso de uma fonte externa. Esse tipo de alimentação da placa pode ser feita pelo conector DC jack ou diretamente pelos pinos VIN e GND.

O polo positivo deve estar conectado ao pino VIN e o negativo ao GND. Se assim for feito, tudo bem, porém se houver uma inversão nessa conexão, o resultado será uma sobrecarga de tensão, e sua placa será danificada. Portanto tenha cuidado ao fazer esse tipo de conexão!

Erro 5: conectar GND ao VIN ao usar uma fonte externa

Conforme você notou nos 2 erros anteriores, o uso de fonte externa requer cuidado. Vamos então analisar mais uma prática dessa natureza.

Quando se alimenta o Arduino, seja com fonte externa ou pelo computador, a tensão de saída no VIN é praticamente a mesma que a de entrada. Desse modo, quando se usa uma bateria de 9V para alimentar placa, a diferença de potencial entre o VIN e o GND será de 9V.

Portanto, nessa situação, ao conectar o GND ao VIN, você aplicará uma tensão relativamente alta para uma resistência pequena. Como consequência, haverá uma sobrecarga, que provocará um curto na entrada de alimentação externa.

Erro 6: sobrecarga de tensão no pino RESET

O pino RESET tem como função reiniciar a placa e está conectado diretamente ao microcontrolador.

Como você já percebeu, o Arduino não é invencível; e o pino RESET, apesar de ser robusto, também tem seus limites. Nesse sentido, o erro 6 consiste em aplicar tensões superiores a 13V a esse pino, o que pode danificá-lo, conforme se pode consultar na folha d dados.

Erro 7: excesso de corrente total sobre o microcontrolador

Vamos ao último erro, que se refere ao valor máximo de corrente total que o microcontrolador suporta. Lembre-se de que, no erro 1, foi explicado que a corrente máxima suportada por um pino I/O individualmente é de 40mA. Caso ultrapasse esse valor, o pino será danificado.

Pois bem, analisando todos esses pinos em conjunto, a corrente total também deve ser limitada. Ela deve equivaler a, no máximo, 200mA; do contrário, você danificará o microcontrolador.

Um exemplo de prática em que isso ocorre é o seguinte:

Suponha que, para um projeto, haja 15 LEDs conectados, e cada um deles esteja consumindo 20mA. Dessa forma, a corrente total no circuito será de 300mA, o que é maior que o limite de 200mA recomendado pelo datasheet. Ou seja, você pode acabar queimando seu Arduino!

Ainda sobre o Erro 7: excesso de corrente total sobre o microcontrolador, vejo o erro mais comum entre iniciantes que merece um erro exclusivo para ele:

Erro 7.1: NÃO LIGUE MOTORES OU SERVOS DIRETO AO ARDUINO!

Esse erro ainda vejo acontecer demais, e sempre que falo que não pode alguém vira e fala "sempre liguei meu servo direto ao Arduino, e nunca deu problema!". O problema é que como diria o grade filosofo "Um dia isso vai dar merda!". Ou seja, isso funciona até um dia não funcionar mais!!

Motores, solenoides e outros equipamentos que demandam muita energia, precisam ser alimentado por fontes externas para que você não corra o risco de queimar o regulador de tensão da sua placa Arduino.

 

Por fim, espero que você não reproduza essas procedimentos e assim tenha ótimas experiências com Arduino. Além disso, em caso de dúvidas, lembre-se sempre de consultar o datasheet do microcontrolador, bom trabalho!


Osciloscópio Digital: Principais funcionalidades

Osciloscópio Digital: Principais funcionalidades

O osciloscópio digital é uma ferramenta de grande importância em um laboratório de eletrônica, permitindo visualizar a forma de onda de um sinal elétrico e analisar aspectos como frequência, amplitude e muitos outros. Neste tutorial iremos ver as funcionalidades básicas deste equipamento.

 

 

[toc]

kit robotica educacional com Arduino ESP ou Microbit

Canais de entrada

Primeiramente, um osciloscópio possui o que chamamos canais de entrada que são os locais por onde os sinais de tensão são lidos (normalmente, os osciloscópios possuem dois ou quatro canais). É necessário encaixarmos nessas entradas, cabos chamados de ponta de prova, a qual fará a conexão entre o circuito analisado e o osciloscópio. Note que para medir tensão nós precisamos de dois pontos, um para o sinal e outro para a referência, portanto a ponta de prova possui dois terminais para se conectar no circuito.

 

Display

Perceba que a tela do osciloscópio se assemelha a um gráfico, exibindo um sinal de tensão ao longo do tempo. Logo temos valores de tensão no eixo vertical e valores de tempo no eixo horizontal.

 


Funcionalidades

Configurações dos canais

Após conectadas as pontas de prova nas entradas do osciloscópio e nos pontos de medição do circuito, os sinais devem aparecer na tela. Caso não tenham aparecido, habilite-os no botão de seleção dos canais, que permitem escolher o que irá aparecer na tela. Feito isso, confira as configurações de medição do canal, sendo algumas opções:

  • Acoplamento: permite alternar o tipo de leitura do sinal, sendo CA (componente alternada) uma leitura apenas do desvio padrão do sinal; CC (componente contínua) uma leitura de qualquer valor absoluto do sinal, tanto componente contínua quanto alternada; GND (ground) uma leitura zerada.
  • Ganho: permite aplicar um multiplicador ao sinal de entrada. Algumas pontas de prova possuem fator atenuante de 10 vezes para acelerar a leitura, portanto a atenuação pode ser compensada pelo ganho do osciloscópio.

 

Ajuste de escala dos eixos

Podemos ajustar as escalas de tensão e tempo dos eixos por meio dos bornes correspondentes. Cada divisão dos eixos representa uma quantidade da escala escolhida, podendo variar o tempo de 5ns a 50s por divisão e a tensão de 1mV a 5V por divisão, dependendo do osciloscópio. Isso permite a leitura de sinais de frequências e amplitudes diversas. Existe também o botão Autoscale ou Auto Set que realiza esses ajustes automaticamente, exibindo na tela os canais formatados.

Deslocamentos vertical e horizontal

Juntamente dos bornes de ajuste das escalas dos eixos, existem outros dois bornes de ajuste de deslocamento vertical e horizontal, que permitem mover a referência dos canais para cima, para baixo ou para os lados. Dessa maneira pode-se adicionar um offset na visualização do sinal, tanto na escala de tempo quanto de amplitude.

 

Deslocamento vertical

Deslocamento horizontal

Configuração de trigger

Além desses ajustes, existe também um borne chamado Trigger, que serve para sincronizar as medições e a exibição no display. Ou seja, caso o sinal de algum canal estiver “louco” na tela, variando rapidamente de forma a impossibilitar a leitura, provavelmente o trigger está desajustado. O botão Set to 50% faz um ajuste automático desse parâmetro e deve ser o suficiente para as medições mais simples.

 

Canal matemática

Vimos como configurar e visualizar os canais do osciloscópio no display, mas além disso, o equipamento permite a exibição de uma terceira forma de onda chamada Math ou Matemática. Esse sinal tem duas utilidades: operações matemáticas e FFT (transformada rápida de Fourier). As operações matemáticas são geradas a partir dos canais 1 e 2 do osciloscópio, podendo somar, subtrair, multiplicar ou dividir tais sinais. A FFT gera no display a análise do espectro de frequência do sinal medido na entrada 1 ou 2.

 

Medidas dos sinais

É interessante além de visualizar as formas de onda dos sinais medidos, adquirir informações numéricas dos mesmos. Para isso o osciloscópio possui a funcionalidade Measure ou Medidas, que permite apresentar no display valores de alguns parâmetros dos sinais dos canais 1 e 2, ou mesmo do sinal Matemática. Pode ser lida informação de frequência, período, duty cycle, máximo, mínimo, média, RMS, tempo de subida, entre outros.

 

Cursores

Outra funcionalidade muito útil para medição dos sinais são os cursores. Com essa ferramenta, é possível ler o valor de tensão ou de tempo de um ponto específico da onda observada.

Cursor de tempo

Cursor de amplitude

Armazenamento USB

O osciloscópio possui também uma entrada USB para dispositivos de armazenamento, possibilitando salvar a imagem visualizada no display em um pendrive ou outra mídia de memória. Alguns dispositivos de memória não são reconhecidos pelo equipamento, por isso recomenda-se utilizar cartões ou pendrives de 2GB ou menos.


Considerações finais

Com este tutorial espero que você tenha aprendido o básico sobre o funcionamento do osciloscópio digital, que é um instrumento extremamente útil para quem trabalha com eletrônica. Agora é com você, a prática com esta ferramenta é essencial para que você se familiarize com todas as funcionalidades.


Confeccionando de placas de circuito impresso com tinta fotossensível

Confeccionando PCB´s com tinta fotossensível

O método de confecção de placas de circuito impresso por tinta fotossensível consiste, de forma geral, em fixar tinta nas regiões da placa que serão trilhas do circuito. Com isso, quando a mesma for submetida ao processo de corrosão, essas regiões permanecerão com a camada de cobre. Esta técnica é uma excelente alternativa para confecção caseira de placas por ser relativamente simples e apresentar resultados finais extremamente satisfatórios. Entretanto, é necessário realizar os procedimentos com cuidado, pois, simples detalhes podem desencadear uma série de falhas no processo. Neste tutorial, nós vamos te ensinar o passo a passo para que você consiga confeccionar as suas próprias placas de circuito impresso.

O procedimento envolve uma série de produtos químicos que podem ocasionar situações perigosas. Portanto, é importante lembrar a importância da utilização de equipamentos de segurança.

[toc]

kit arduino robótica educacional


Mãos à obra - Confeccionando uma PCB

Componentes necessários

- Componentes de segurança

  • Luva (necessária no preparo de todas as soluções ou contato com tinta)
  • Óculos de segurança (necessário durante o preparo das soluções)
  • Máscara (necessária durante o preparo das soluções, corte e furos da placa)

- Componentes para impressão

  • Folha de papel transparente (ou também conhecida como transparência)

- Componentes para confecção da placa 

Procedimentos para serem realizados

- Layout do circuito

O circuito pode ser montado como um protótipo ou simulado e testado em um software de sua preferência. Uma vez verificado o funcionamento correto do mesmo, podemos começar a desenvolver o layout da placa de circuito impresso.

O layout deve ser impresso em papel transparente, e o conjunto funcionará como filtro para que a luz ultravioleta fixe apenas os trechos necessários para a confecção das trilhas condutoras, de modo que, no layout, estas trilhas devem ser transparentes e as demais partes pretas. Note que não é necessário imprimir o layout de forma espelhada.

 

Layout do circuito impresso em folha transparente

- Corte da placa

O próximo passo que devemos seguir é marcar a placa de fenolite com a dimensão da placa definida no layout, isso pode ser feito com uma caneta permanente.

Com as marcações feitas, podemos cortar as partes não utilizadas com auxílio da micro retífica e disco de corte. Essa etapa pode ser feita com outro instrumento de corte caso você julgue melhor.

 

Delimitação das dimensões da placa

 

Corte da placa de fenolite

- Aplicação da tinta

Com a placa corretamente dimensionada, podemos aplicar a tinta fotossensível. Antes da aplicação em si, é necessário limpar muito bem a face de cobre da placa para que não existam regiões oleosas ou pequenos sedimentos. Feito isso, pode-se aplicar uma fina e uniforme camada de tinta utilizando uma luva (apenas como dica, a aplicação pode ser feita com auxílio de um cartão).

Para deixar a distribuição de tinta completamente uniforme devemos fixar a placa na micro retífica com cola quente para que ela gire uniformemente e o excesso de tinta saia por ação centrífuga. A micro retífica pode ser substituída por outro equipamento, como uma furadeira de bancada ou algum motor. Alguns cuidados adicionais são necessários nessa etapa, são eles:

  • Garantir que a placa esteja bem fixada, caso contrário ela pode cair e borrar a tinta;
  • Ao girar o sistema muitas gotas de tinta serão lançadas horizontalmente, portanto isso deve ser feito dentro de uma caixa de papelão para conter a tinta;
  • Se a velocidade angular for muito alta alguns riscos de tinta podem ser formados na superfície da placa, mantenha uma velocidade intermediária.

 

Colagem da placa no eixo da micro retífica

 

Aplicação de tinta sobre a placa

 

Distribuição da tinta sobre toda superfície com auxílio de um cartão

 

Uniformização da tinta por ação centrífuga

 

Resultado final da aplicação de tinta

- Secagem da tinta

Retire cuidadosamente a placa da micro retífica. Em seguida, utilize um secador de cabelo durante cerca de 15 minutos para realizar a secagem, pois, é importante garantir que o secador não leve nenhum tipo de sujeira para placa. A secagem também pode ser feita em um forno, entretanto o procedimento pode gerar forte odor.

 

Secagem da tinta

- Transferência do circuito

Com a tinta completamente seca e uniforme nós já podemos transferir o circuito para placa. O primeiro passo é posicionar a folha transparente sobre a placa e em seguida coloque a uma placa de vidro sobre os dois para evitar que a folha saia da posição correta. A face da folha transparente que contém o layout deve estar em contato com a superfície coberta de tinta.   

Posteriormente, submeta a face citada a luz ultravioleta com uma distância de cerca de 10 centímetros por 3 minutos. Por motivos de segurança, evite contato direto com a luz.

 

Posicionamento do layout do circuito sobre a placa

 

Ação da luz ultravioleta sobre a placa

- Revelação

Neste ponto o circuito já está gravado na placa, portanto, nós precisamos “revelar” o mesmo, ou seja, precisamos retirar a tinta que não foi fixada pela luz ultravioleta. Isso pode ser feito mergulhando a placa em uma solução de barrilha (também chamada de revelador). Esta solução pode ser armazenada em uma vasilha de plástico comum e deve conter aproximadamente duas colheres de chá de barrilha por litro de água. O processo pode ser catalisado esfregando-se levemente a placa.

Uso de barrilha para revelar o circuito

 

Revelação do circuito

- Corrosão

Com o circuito completamente revelado, nós devemos corroer o cobre das regiões expostas. Para isso, utiliza-se o percloreto de ferro, que pode ser encontrado em líquido ou pó. Caso você tenha acesso à versão em pó, basta misturar o pó com água da seguinte maneira: primeiro acrescente água em seguida o pó pois a reação é exotérmica e muito calor pode ser liberado caso você tenha feito o contrário.

Coloque a solução em uma vasilha de plástico com a placa totalmente submersa (é interessante prender a placa por uma fita adesiva na parte externa da vasilha ou utilizar luvas para evitar contato direto com o percloreto de ferro durante a retirada da placa no fim da corrosão). Como dica, balance levemente a vasilha durante o processo para diminuir o tempo necessário para completa corrosão.

Verifique se todas as partes sem tinta foram completamente corroídas, em seguida retire e limpe a placa com água corrente. A solução de percloreto de ferro pode ser armazenada para uso posterior, mas com o uso sua intensidade é reduzida e será necessário renovar a solução com mais percloreto.

 

Corrosão do circuito por percloreto de ferro

 

Resultado final da corrosão

- Retirada da tinta restante

A tinta sobre as trilhas pode ser retirada submetendo a placa a uma solução de soda cáustica, que pode ser extremamente corrosiva de acordo com a concentração. Uma outra alternativa é retirar a tinta apenas esfregando com palha de aço.

 

Dissolução de soda cáustica em água

 

Placa de circuito impresso com toda tinta removida

- Adição de componentes

Com a placa completamente pronta resta apenas furar e soldar os componentes. Os furos podem ser feitos com um furador de placa ou furadeira de bancada e a solda pode ser feita de forma tradicional, com estanho e ferro de solda.      

 

Procedimento de furo da placa para adição dos componentes

 

Soldagem dos componentes

 

Resultado final

Considerações finais

Este foi mais um conteúdo feito especialmente para te auxiliar em seus projetos de eletrônica. Esperamos que você tenha aprendido um pouco sobre o processo de confecção de placas de circuito impresso. Qualquer dúvida ou sugestão, deixe nos comentários abaixo.


Montando um medidor de batimento cardíaco com Arduino

O que é um fotopletismógrafo?

Fotopletismógrafo é um aparelho com o qual podemos medir a frequência cardíaca através da variação do fluxo de sangue em determinada parte do corpo.

A medida que o coração bate, a densidade de sangue em determinado membro do corpo varia mantendo um comportamento bem definido que acompanha a frequência cardíaca. Desta forma, podemos medir a frequência cardíaca citada através do uso de um emissor e de um sensor de luz, pois a intensidade de luz que atinge o sensor varia juntamente com a densidade de sangue. Este tipo de processo é também chamado de hemodinâmico, devido ao seu princípio de funcionamento.

[toc]

kit arduino robótica educacional


Mãos à obra - Montando um fotopletismógrafo

Componentes necessários

Para a montagem do projeto necessitamos dos seguintes itens:

Observação: Para montar este dispositivo, você precisará de um led de alto brilho branco e de um sensor de luz. Neste caso usaremos o BPW34, que nada mais é que um foto receptor cuja sensibilidade é mais direcionada (a luz ambiente pouco interfere no resultado, já que o sensor é sensível a luz incidente em uma área bem determinada). Além disso, construiremos filtros e amplificadores de sinais usando capacitores, resistores e amplificadores operacionais.

Montando o projeto

– Montagem do sensor

Primeiramente faremos a montagem do nosso sensor. Para isso, cortamos um pedaço de velcro, de modo que possa cobrir o dedo indicador e através de furos inserimos o fotoemissor em uma parte e o fotorreceptor em outra. Para firmá-los colocamos cola quente nas laterais e na parte de trás. Nas imagens abaixo temos o fotoemissor e o fotorreceptor respectivamente:

 

 

– Bloco amplificador

Nas montagens de protoboard a seguir as duas linhas de alimentação mais externas serão destinadas ao Ground ou referência do circuito.

Feito isso, agora vamos ao primeiro bloco do nosso circuito para tratar o sinal. O fotorreceptor gera um sinal de corrente que é proporcional a luz que incide sobre ele. Com isso, precisamos de um bloco que transforma esse sinal de corrente em um sinal de tensão amplificado. Para isso, usamos um Amplificador de Transresistência, que está representado abaixo:

 

– Bloco do filtro passa-alta

Assim, partimos para a segunda parte do nosso projeto, que é um filtro passa altas de primeira ordem com frequência de corte em 1Hz e ganho unitário:

 

– Bloco filtro passa-baixa

A terceira parte é um filtro passa baixas de segunda ordem, com frequência de corte em 40Hz e ganho de 20dB:

 

Com isso, a montagem completa do circuito é mostrada abaixo:

Na montagem podemos ver um resistor circulado em vermelho que serve para limitar corrente no LED de alto brilho, já que ele é ligado com a mesma tensão de alimentação positiva dos amplificadores operacionais. Seu valor é 680 ohms.

O fotorreceptor deve ter um de seus terminais ligados na entrada inversora do amplificador de transresistência e o outro ligado ao GND.

Com isso, já podemos visualizar a onda correspondente aos batimentos cardíacos de uma pessoa no osciloscópio. Na figura abaixo é mostrada a onda de frequência cardíaca de uma pessoa usando a montagem deste tutorial.

Caso você não tenha acesso a um osciloscópio, poderá plotar esse mesmo sinal com o Serial Ploter do arduino. Para isso, será preciso dar um Offset no sinal para que não haja parte negativa, já que a entrada analógica do arduino aceita tensões de 0V a 5V. Assim sendo, podemos acrescentar uma outra parte no nosso circuito, que é um amplificador somador.

– Adicionando um offset ao sinal

Além de amplificar o sinal, este bloco do circuito soma uma tensão DC ao sinal que é uma fração da tensão de alimentação, de modo que o sinal permanece no intervalo apropriado ao arduino.

Repare que o amplificador usado no final será um Amplificador somador inversor, de modo que a forma de onda estará de “cabeça para baixo”. Com isso, você precisará inverter seu sinal no arduino (usando uma lógica simples com valores altos para tensões perto de 0V e valores baixos para tensões perto de 5V), antes de plotá-lo no Serial Plotter, ou você poderá optar por usar um amplificador somador não-inversor. Ou ainda, acrescentar mais um circuito amplificador inversor antes do amplificador de Offset, o que não será muito eficiente, mas funcionará bem.

Hardware montado

Com isso, nossa montagem final para representar o sinal no arduino será a seguinte:

Programando

Caso você não tenha o osciloscópio e deseje ver a forma de onda no seu computador, basta utilizar o seu arduíno com o código descrito abaixo. A saída da montagem precisa estar conectada na entrada A0 analógica do arduíno. O código abaixo possui a função de ler o sinal e monta o gráfico em função do tempo do sinal de entrada.

int analogPin = A0;
int sinal = 0;

void setup()
{
  Serial.begin(9600);
void loop()
{
  sinal = analogRead(analogPin);   
  Serial.println(sinal);     
}

Feito isto, basta apertar Ctrl+Shift+L.


Entendendo a fundo

Os batimentos do coração bombeiam sangue para as diversas partes do corpo de modo que a densidade sanguínea varia na mesma frequência que o coração bate. Com isso o sensor de luz na ponta do dedo indicador capta essa variação de densidade e transforma isso em um sinal de corrente que é amplificado e transformado em um sinal de tensão pelo amplificador de transresistência. O BPW34 é um fotorreceptor que funciona como uma fonte de corrente, com valores na faixa de µA, portanto, dependentes da luminosidade que incide nele.

Depois do amplificador de transresistência, temos um filtro passa-altas com frequência de corte de 1Hz, cuja função é atenuar toda e qualquer tensão com frequência menor que 1Hz. Deste modo, eliminamos qualquer tensão DC da iluminação natural sobre o sensor.

Com o filtro passa baixas de 40Hz, conseguimos atenuar tensões de frequência maiores que 40Hz, que na maioria das vezes são ruídos e não compõem os harmônicos do sinal de interesse.Esse filtro atenua as frequência maiores que 40hz de forma mais abrupta, pois ele é de segunda ordem. Além disso ele dá um ganho de 20dB (10 vezes) no sinal de entrada que está na banda de passagem (menor que 40Hz).

Todos os capacitores cerâmicos e os dois capacitores eletrolíticos (que ficam entre o +vcc e o terra e o outro entre o terra e o -vcc) servem para manter a tensão de alimentação dos amplificadores operacionais constantes e assim, eliminar ruídos e interferências.

No fim, o amplificador somador, além de amplificar o sinal, soma-o com uma tensão DC que neste caso é 0.22% da tensão de alimentação.

Se você ainda tiver problemas com ruído, talvez seja devido ao efeito capacitivo do diodo fotorreceptor. Para resolver isto, basta acrescentar um capacitor em paralelo com o resistor de 4.7MΩ. O valor deste capacitor deve o mesmo do efeito capacitivo do diodo, algo na faixa de pF, basta verificar no datasheet do componente (no caso do BPW34 é algo na faixa de 20 a 100 pF).


Considerações finais

Assim concluímos o nosso tutorial. Espero que todos consigam montar este, que é um dos dispositivos mais usados na área médica. Lembrem-se de verificar os valores de todos os componentes e testar cada bloco do projeto para que erros sejam facilmente detectados. Em caso de dúvidas, deixem nos comentários.


LTSpice: Primeiros passos

O software LTSpice

O LTSpice é um software produzido pela Linear Tehcnology e que agora é parte da Analog Devices cuja finalidade é a simulação e análise do comportamento de circuitos elétricos contendo os mais variados componentes: resistores, capacitores, diodos, amplificadores operacionais e outros. Neste tutorial iremos aprender como montar e simular circuitos práticos utilizando esta ferramenta. Com isso, podemos estimar os valores de tensão e corrente, bem como de resposta em frequência de nossos circuitos antes mesmo de executá-los na prática.

Para se realizar uma simulação no LTSpice, podemos inserir as informações de entrada de duas formas: através de uma sequência de linhas de descrição, ou através de sua interface gráfica que nos possibilita desenhar o circuito e selecionar a representação desejada dos resultados. Aqui, iremos focar na segunda maneira, ou seja, selecionando os componentes desejados e criando o desenho.

Neste tutorial usaremos o LTSpice XVII em sua versão mais atual.

[toc]

kit arduino robótica educacional


Mãos à obra - Como utilizar o LTSpice

Instalação

A primeira coisa que faremos será a instalação do software. Para isso, basta entrarmos no site da Analog Devices ->Design Center -> LTSpice e clicar na opção de download que corresponde ao seu sistema operacional. O link para o download é o seguinte:

https://www.analog.com/en/design-center/design-tools-and-calculators/ltspice-simulator.html

Figura 1 - Fazendo o download do LTSpice

Para instalarmos o LTSpice, basta clicarmos no arquivo de extensão .exe que foi baixado. Com isso a janela abaixo será aberta e se você concordar com os termos de instalação, basta clicar em ACCEPT:

Figura 2 - Instalando o LTSpice

Com isso, o botão INSTALL NOW será liberado e a instalação poderá ser iniciada clicando nele.

Figura 3 - Instalando o LTSpice

Depois de alguns minutos a instalação será concluída, clique em OK e depois de alguns segundos o software estará pronto para uso.

Criando o primeiro esquemático

Depois que o programa for aberto nosso primeiro passo será criar um novo esquemático a partir do qual poderemos desenhar o nosso circuito, para isso, basta apertar Ctrl+N ou clicar no local indicado de acordo com a figura abaixo:

Figura 4 - Criando um esquemático

Primeiramente, desenharemos um circuito RLC, selecionando um resistor, um capacitor e um indutor, como indicado abaixo através da barra de ferramentas ou apertando R para resistor, C para capacitor e L para indutor. Uma vez selecionado um tipo de componente, você poderá inserir quantos desejar e se quiser trocar de componente basta apertar ESC e selecionar o próximo.

Figura 5 - Selecionando capacitores, resistores e indutores

Usando MOVE, podemos selecionar e mover os componentes que já escolhemos e com ROTATE e MIRROR podemos rotacioná-los e espelhá-los para que assim possamos representar-los de uma melhor maneira em nosso circuito. O botão WIRE serve para desenharmos as conexões entre nossos componentes.

Figura 6 - Botões Wire, Ground, Component, Move, Rotate e Mirror.

 

Figura 7 - Fazendo as conexões entre os componentes

Clicando com o botão direito do mouse nos componentes selecionados, podemos inserir seus valores de resistência, capacitância ou indutância, lembrando que podemos inserir diretamente as letras k para multiplicar o valor por 1000, m para multiplicar por 0,001, u para multiplicar por 0,000001 e assim por diante. De forma semelhante, se você clicar com o botão direito em cima do nome do componente é possível alterá-lo,  no entanto, basta tomar cuidado para não atribuir o mesmo nome a dois componentes diferentes.

O próximo passo será inserirmos nossa fonte de sinal de entrada. Para isso clicamos em COMPONENT , escrevemos VOLTAGE e depois clicamos no botão OK.

Figura 8 - Inserindo uma fonte de sinal de entrada

O botão COMPONENT nos permite selecionar uma grande variedade de componentes eletrônicos mais específicos para aplicações mais avançadas.

Selecionada a fonte de sinal, basta clicarmos com o botão direito para atribuirmos um valor de tensão a ela. Entretanto, se você deseja que o sinal de sua fonte seja alternado ou que simplesmente varie com o tempo, temos que selecionar a opção ADVANCED, a partir da qual poderemos selecionar um sinal de tensão em forma de pulso, senoidal, exponencial e outros. Uma vez escolhido o tipo de sinal de entrada, basta preencher os campos correspondentes aos parâmetros do sinal, como amplitude, frequência, etc. Para o nosso exemplo usaremos um fonte senoidal com uma tensão de offset de 0V, uma amplitude de 2V e uma frequência de 100Hz.

Figura 9 - Configurando os parâmetros da fonte de sinal de entrada

Com isso, ligamos nossa fonte ao circuito e selecionamos GROUND para indicar onde será a referência de nosso circuito, que neste caso será na ligação inferior entre todos os componentes. Com isso, estaremos prontos para avaliarmos os valores de tensão e corrente em todos os pontos que desejarmos.

Figura 10 - Esquemático do circuito finalizado

 - Análise do circuito

Para analisarmos o circuito precisamos clicar em RUN, de modo que será aberta uma janela onde nós devemos inserir o intervalo de tempo em segundos no qual o programa analisará nossa montagem. No nosso exemplo colocamos 0.1s.

Figura 11 - Botão Run

 

Figura 12 - Analisando o circuito

Sendo assim, quando clicamos em cima de um dos componentes do circuito, o programa irá plotar o gráfico da corrente que passa por esse dispositivo durante o intervalo de tempo determinado. Se clicarmos em cima de uma das ligações ou nós o programa nos dará o gráfico da tensão correspondente àquele ponto em relação ao Ground. Vale lembrar que para o nosso exemplo, o gráfico da tensão em cada componente será igual ao da fonte, visto que eles se encontram em paralelo com ela.

- Imprimindo ou salvando o projeto

Podemos ainda imprimir ou salvar o nosso projeto através do menu FILE, selecionando a opção PRINT para imprimir ou SAVE AS para salvar em algum lugar desejado. Uma vez salvo, você pode abrir o arquivo sempre que desejar clicando nele ou escolhendo a opção OPEN do menu FILE.

Simulação e análise de um circuito mais complexo

- Utilizando um amplificador operacional

Um componente bastante usado em circuitos práticos é o amplificador operacional. Para usá-lo em um circuito é preciso selecioná-lo da mesma forma que a fonte de tensão. Clicando em COMPONENT e depois em OPAMPS. Será aberta uma janela com vários modelos de amplificadores, alguns baseados em CIs reais de mercado e outros que simulam o funcionamento ideal do dispositivo.

Para o próximo exemplo selecionamos o UniversalOpAmp2.

Figura 13 - Selecionando um amplificador operacional

Uma maneira prática de ligar a alimentação do amplificador é usando a opção NET NAME (F4), pois com ela, podemos igualar a tensão em um ponto com a tensão de outro sem necessitar de escrever ligações. Para isso, basta apertar F4 e escrever o nome da tensão de ponto e colocar o símbolo que surgir nos locais em que se deseja igualar as tensões, como está exemplificado na figura abaixo.

Figura 14 - Fazendo as ligações de alimentação do amplificador

Agora estamos prontos para simular um circuito mais avançado. O circuito que analisaremos é o Filtro Notch, um circuito famoso em projetos eletrônicos de baixíssima tensão cujo objetivo na maioria das vezes é eliminar o ruído de 60Hz da rede elétrica. Para isso, é necessário que você faça no seu LTSpice o seguinte desenho:

Figura 15 - Esquemático do circuito Filtro Notch

O circuito acima é chamado de Rejeita Faixa e seus valores de capacitores e resistores fazem com que essa rejeição seja de 60Hz (Fc = 1/2piRC). A análise desse circuito pode ser feita de forma mais apropriada através de sua resposta em frequência. Para isso, nas configurações da fonte, selecione apenas a amplitude AC, que pode ser de 1V:

Figura 16 - Alterando as configurações da fonte

Depois disso, no menu SIMULATE selecione a opção EDIT SIMULATION CMD e vá para a aba AC ANALYSIS. Nesta janela você poderá escolher a opção de representação do eixo das frequências, além da frequência de início e a de fim, bem como do número de pontos para análise no intervalo. Depois de preencher as opções com os dados adequados, clicamos em OK e colocamos a linha de comando em algum lugar perto do circuito.

Figura 17 - Editando as opções de simulação

 

Figura 18 - Editando as opções de simulação

Feito isso, colocamos para executar mais uma vez (RUN) e clicamos no ponto de tensão referente a saída, o gráfico gerado está na imagem abaixo:

Figura 19 - Gráfico gerado para análise do circuito

Neste gráfico, podemos ver o que acontece com a amplitude do sinal para diferentes frequências de entrada e também o que acontece com a fase. É fácil ver que o sinal é bastante atenuado para uma frequência próxima de 60Hz. Os resistores de 10k e 1k controlam o quanto é atenuado o sinal para frequências próximas a frequência de corte, você pode alterá-los e verificar o que acontece com a resposta do circuito para diferentes pares de valores.


Considerações finais

Com isso, concluímos nosso estudo sobre as funções básicas do software LTSpice. O programa é uma ferramenta muito poderosa e muito usada em disciplinas dos cursos de engenharia elétrica e eletrônica. Além disso, pode lhe poupar muito tempo no projeto de circuitos práticos que você se propor a fazer.


Utilizando displays OLED 0.96" I2C em paralelo com Arduino

Utilizando displays OLED 0.96" I2C em paralelo com Arduino

O display OLED 0.96″ é considerado uma boa opção para estabelecer uma interface de visualização de dados, no entanto, o seu tamanho limita a quantidade de informações que podem ser exibidas em uma única tela. De forma a possibilitar o aproveitamento das vantagens que o uso do display fornece e garantir a exibição de uma maior quantidade de informações, neste tutorial, aprenderemos a modularizar mais de dois displays OLED 0.96″ com o Arduino UNO utilizando o demux CD4051E.

kit arduino robótica educacional

Displays OLED 0.96" I2C 

A estrutura de um OLED (Organic Light-Emitting Diode, ou, Diodo Emissor de Luz Orgânico) é constituída basicamente de uma camada de semicondutor orgânico, situada entre dois eletrodos, sendo que um deles geralmente é transparente. Esse material orgânico ao ser estimulado por uma corrente ou campo elétrico, emite luz nas cores vermelho, verde e azul (RGB), dispensando a necessidade de haver luz traseira (backlight), ao contrário das telas dos displays LCD, por exemplo. Essa característica do OLED traz uma grande vantagem frente ao uso dos outros tipos de tela que é a considerável economia de energia.

Estrutura de um OLED

Devido a presença de material orgânico na sua constituição, a vida útil do display OLED costuma ser menor do que a dos outros tipos de displays e também apresenta a desvantagem de ter baixa resistência à água. Entretanto, além do baixo consumo de energia, o display OLED proporciona uma melhor resolução, qualidade de cor, brilho, contraste e além disso, costuma ser mais leve e fino em relação aos outros displays.

O display utilizado neste projeto possui controlador SSD1306 e a tela tem 0.96 polegadas com resolução de 128x64 pixels (também pode ser encontrado com resolução de 128x32 pixels). A comunicação com o arduino é feita via interface I2C (também pode ser por SPI), portanto, além dos pinos de alimentação (VCC e GND), o display OLED conta com mais 2 pinos (SDA e SCL) para a conexão com o arduino. Certamente a pinagem reduzida do OLED é outra grande vantagem deste display frente aos outros disponíveis no mercado.

Display OLED

O display OLED pode apresentar dois endereços diferentes (0x3C ou 0x3D), possibilitando alternar entre eles a partir da modificação da configuração de resistores na parte traseira da placa. Sendo assim, o modo de endereçamento possibilita utilizar apenas dois displays em paralelo.

O multiplexador/demultiplexador CD4051E

Enquanto um demultiplexador (demux) é um sistema digital que contém apenas uma entrada (analógica ou digital) cujo conteúdo é passado para uma das saídas a partir da combinação dos sinais de controle, um multiplexador (mux) apresenta uma lógica inversa: contém uma saída que recebe o conteúdo de uma entre várias entradas (analógicas ou digitais) dependendo da configuração dos sinais de controle. O CD4051E é um CI (Circuito Integrado) que pode agir tanto como um demultiplexador quanto um multiplexador e nesse tutorial, usaremos ele como um demux.

Diagrama de pinos do 4051

O componente que iremos utilizar contém uma entrada analógica/digital e 8 saídas, além de 3 entradas de controle. Seguindo o diagrama da figura 3:

  • O pino 16 (VDD) é o de alimentação (pode ser 5V ou 3.3V)
  • O pino 8 (VSS) é o GND ou terra
  • O pino 7 (VEE) é a tensão negativa para a geração de ruído entre as entradas e saídas (neste tutorial, o conectaremos ao GND)
  • Os pinos 9 a 11 (A0, A1 e A2) são as entradas de controle digitais
  • Os pinos 1, 2, 4, 5, 12 a 15 (Y0 a Y7) são as entradas/saídas (neste tutorial, serão saídas analógicas)
  • O pino 3 (Z) é a entrada/saída que irá ser conectada ao arduino (neste tutorial, será entrada analógica).
  • O pino 6 (E) é o pino de habilitação do CI (neste tutorial, o conectaremos ao GND)

Como iremos utilizar um demux de 8 canais, é possível utilizar até 8 OLEDs em paralelo. Entretanto, para facilitar o entendimento e simplificar a lógica, iremos modularizar apenas 3 OLEDs, portanto, utilizaremos 3 entradas do demux.


Mãos à obra - Imprimindo informações nos displays

Componentes necessários

Você também pode optar por utilizar outro demux da família do 4051 (por exemplo, o HEF4051B) ou outros da família do 4052 que são de 4 canais, mas atente-se a pinagem do componente que costuma ser diferente de uma família para outra. Se você escolher utilizar outro Arduino, verifique os pinos de comunicação I2C para estabelecer as ligações corretamente.

Montando o projeto

Esquemático do projeto
  • Conecte os pinos de VCC dos displays e do demux ao 5V do arduino.
  • Conecte os pinos de GND dos displays e os pinos 6, 7 e 8 do demux ao GND do arduino.
  • Conecte os pinos SCL dos displays ao pino A5 do arduino (os pinos podem ser ligados em paralelo como mostra a figura 4).
  • Conecte cada um dos pinos SDA dos displays aos pinos 12 a 14 do demux (você pode escolher qualquer combinação de 3 pinos dentre os pinos de saída do demux).
  • Conecte o pino 3 do demux ao pino A4 do arduino.
  • Conecte os pinos 9 a 11 do demux aos pinos digitais 2, 3 e 4 do arduino (você pode escolher qualquer combinação de 3 pinos digitais do arduino).

Verifique como ficou nossa montagem na prática:

Montagem do projeto na prática

Bibliotecas

Neste projeto, usaremos apenas a biblioteca “U8glib.h” para estabelecer a comunicação com os displays e imprimir informações nos OLEDs. Você pode baixar-lá no site: https://github.com/olikraus/u8glib/.

Instale a biblioteca no diretório padrão de suas bibliotecas. Geralmente, este diretório se encontra dentro da pasta “Arduino”, localizada em “Documentos”.

Adicionando a biblioteca ao diretório

Programando

Segue o código a ser usado no projeto:

#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);

//Pinos do arduino conectados as entradas de controle do demux
int a0 = 2;
int a1 = 3;
int a2 = 4;

//Função que contém os comandos gráficos do display 1
void draw0() {
  
  u8g.setFont(u8g_font_fur25);//Seleciona a fonte de texto

  u8g.drawStr( 30, 42, "Vida");//Escreve uma palavra no display
  
}

//Função que contém os comandos gráficos do display 2
void draw1() {
  
  u8g.setFont(u8g_font_fur25);

  u8g.drawStr( 40, 42, "de");
  
}

//Função que contém os comandos gráficos do display 3
void draw2() {
  
  u8g.setFont(u8g_font_fur25);

  u8g.drawStr( 20, 42, "Silicio");

}

void setup(void) {
  //Declara os pinos do arduino como saídas
  pinMode(a0, OUTPUT);

  pinMode(a1, OUTPUT);

  pinMode(a2, OUTPUT);

  //Para inicializar o display 1
  digitalWrite(a0, LOW);

  digitalWrite(a1, LOW);

  digitalWrite(a2, LOW);
  u8g.begin();

  //Para inicializar o display 2
  digitalWrite(a0, HIGH);

  digitalWrite(a1, LOW);

  digitalWrite(a2, LOW);
  u8g.begin();

  //Para inicializar o display 3
  digitalWrite(a0, LOW);

  digitalWrite(a1, HIGH);

  digitalWrite(a2, LOW);
  u8g.begin();

}

void loop(void) {
  //Combinação dos sinais de controle para o display 1 (em binário)
  digitalWrite(a0, LOW);

  digitalWrite(a1, LOW);

  digitalWrite(a2, LOW);

  //Bloco de comandos necessário para a escrita no display 1
  u8g.firstPage();
  do
  {
    draw0();//Chama a função que contém os comandos gráficos
  } while ( u8g.nextPage() );

  delay(500);

  //Combinação dos sinais de controle para o display 2 (em binário)
  digitalWrite(a0, HIGH);

  digitalWrite(a1, LOW);

  digitalWrite(a2, LOW);

  u8g.firstPage();
  do
  {
    draw1();
  } while ( u8g.nextPage() );

  delay(500);

  //Combinação dos sinais de controle para o display 3 (em binário)
  digitalWrite(a0, LOW);

  digitalWrite(a1, HIGH);

  digitalWrite(a2, LOW);

  u8g.firstPage();
  do
  {
    draw2();
  } while ( u8g.nextPage() );

  delay(500);

}

Colocando para funcionar

Veja como ficou o resultado final:

Testando o código

 

Testando o código

Entendendo a fundo

Software

Para ter acesso a todas as funções que a biblioteca “U8glib” disponibiliza, consulte: https://github.com/olikraus/u8glib/wiki/userreference

- Objeto SSD1306, 128x64 

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);

Os displays utilizados neste projeto apresentam controlador SSD1306, contém 128 por 64 pixels e se comunicam com o arduino via protocolo I2C. Para verificar quais controladores e tamanhos de tela são suportados pela biblioteca, consulte: https://github.com/olikraus/u8glib/wiki/device.

- Função .setFont()

u8g.setFont(u8g_font_fur25);

Esta função seleciona a fonte do texto que será impresso na tela do display. Para selecionar outra fonte de texto, consulte:

https://github.com/olikraus/u8glib/wiki/fontsize

- Função .drawStr()

u8g.drawStr( 30, 42, "Vida");

Esta função possibilita a escrita de uma palavra no display.  Seus respectivos argumentos são: coordenada x, coordenada y e uma string.

- Função .begin()

u8g.begin();

Esta função é responsável por inicializar o OLED. É necessária utilizar-lá antes do comando de escrever no display.

- Função digitalWrite()

digitalWrite(a0, LOW);

Esta função escreve 1 (HIGH) ou 0 (LOW) no pino associado.


Considerações finais

Em suma, os displays OLED possibilitam a exibição de imagens e caracteres com muita nitidez e por apresentarem uma biblioteca com uma infinidade de funções é possível exibir qualquer tipo de informação que se deseja. Neste tutorial, com o objetivo de aproveitar as inúmeras vantagens que estes pequenos displays proporcionam e possibilitar a exibição de uma maior diversidade de informações, aprendemos a utilizar mais de dois displays em paralelo com a ajuda de um pequeno componente, que é o demux.  

Espero que tenham gostado deste tutorial e não se esqueçam de deixar suas dúvidas, sugestões, críticas ou elogios nos comentários abaixo.


Medindo rotação de motores com osciloscópio

Medindo rotação de motores com osciloscópio

Osciloscópios são instrumentos de medição de sinais elétricos cujos resultados são apresentados como gráficos em dois eixos. Os eixos mais comuns são o de diferença de potencial (eixo vertical) e o eixo da frequência (eixo horizontal). Com o objetivo de medir a rotação de um motor, pode-se fazer o uso de diversos instrumentos de medição, entre eles o osciloscópio. Como comparação, o instrumento de medição mais comum usado em trabalho de instalações elétricas prediais, o multímetro, tem excelente aplicação quando os sinais analisados na medição tem alteração gradual. Todavia, caso a alteração seja dinâmica, ou a variável de interesse seja a própria alteração (crescimento da curva de tensão em um capacitor por exemplo) o osciloscópio se torna um equipamento bem mais interessante que o multímetro.

kit arduino robótica educacional

O osciloscópio

Os osciloscópios são capazes de fornecer valores de amplitude, frequência, largura do impulso, além da forma e do padrão do sinal que está sendo medido. A medida é obtida através de um processo semelhante ao que ocorre no caso dos multímetros, ou seja, são utilizados apenas dois cabos no local onde desejamos obter uma resposta. A vantagem sobre o multímetro é que o tempo de amostragem do osciloscópio é muito superior.

Figura 1: Exemplo de osciloscópio

Neste tutorial, apresento uma forma de utilizar o osciloscópio para medir a rotação de um motor elétrico, utilizando da ideia da taxa de amostragem e frequência de impulsos. Para esse uso é necessário introduzir o conceito de um componente que será utilizado, o sensor hall.

O sensor hall

Um sensor Hall ou sensor de efeito hall é um transdutor, isto é, um dispositivo utilizado em sistemas de medição que recebe um estímulo e responde com um sinal de tensão. No caso do sensor hall, esse estímulo é a presença de um campo magnético. Sensores Hall podem ser tanto analógicos, sendo capazes de enviar diferentes sinais de tensão para diferentes intensidades de campos magnéticos, quanto digitais, que enviam sinal lógico (alto ou baixo) na presença ou não do campo magnético. Por exemplo, um sensor hall digital alimentado com 5 Volts envia constantemente sinal lógico baixo 0 Volts em sua saída, na presença de um campo magnético que  ative o transdutor o sinal passa a ser alto até que o campo não seja mais sentido pelo dispositivo.

Mãos à obra - Medido a rotação com um osciloscópio

A fim de medir a rotação de um motor elétrico, um ímã é fixado em seu rotor. Um sensor hall digital é posicionado de modo que quando o ímã gira, seja possível captar o campo magnético através do sensor. Ademais, o sinal de saída do sensor de efeito hall é  ligado à ponta de prova do osciloscópio. O motor em funcionamento faz com que o ímã fixo no eixo do rotor acompanhe o movimento de rotação do motor e passe a girar também. O movimento do imã provoca uma reação no sensor com certa frequência e esse valor de frequência nos permite calcular a velocidade do motor.

Componentes necessários

  • Osciloscópio
  • Imã (o imã deve ser de tamanho e força de atração que não impossibilite a medição)
  • Sensor hall digital (olhar no datasheet do sensor a necessidade de um resistor entre os terminais do sensor)

Procedimento

Fixe o imã no eixo do motor que deseja medir a rotação. A nossa recomendação é que você utilize uma resina de base epóxi ou fita de alumínio. Uma vez que a alta velocidade do motor  pode forçar o ímã a ser arremessado, a fixação incorreta pode oferecer certo perigo.

 

Figura 2: Detalhe da fixação do ímã com fita de alumínio

 

Com o datasheet do sensor hall digital em mão, verifique a necessidade de um resistor entre os terminais dele. Depois alimente o sensor segundo as especificações do fabricante, através de uma fonte de bancada, baterias ou outros métodos.

 

Figura 3: Montagem do Sensor Hall na Protoboard

 

A ponta de prova do osciloscópio deve ser ligada na saída do sensor hall, e o outro terminal deve ser aterrado junto do GND (ground)  do sensor. Posicione o sensor de efeito hall próximo ao ímã, de modo que quando o motor girar o sensor seja capaz de sentir a presença do campo magnético. Esse procedimento é através de tentativa e erro, pois depende da intensidade do ímã utilizado e de quão sensível é o sensor escolhido.

 

Figura 4: Sensor Hall próximo ao ímã fixo no eixo do motor

 

Para exemplificar, um sensor hall KY_003 é capaz de sentir o campo proveniente de um ímã de neodímio a uma distância média de 1 cm entre eles.

 

Figura 5: Sensor KY_003

 

Ligue o motor, o osciloscópio e certifique que a medida está sendo realizada. Possíveis erros nessa etapa estão relacionados com mal contato dos componentes ou da ponta de prova do osciloscópio. Portanto, certifique que erros não estejam ocorrendo e prossiga . Outro erro possível está nas configurações do osciloscópio, que pode estar exibindo valores de tensão em uma faixa maior ou menor que a necessária. Verifique o manual dos equipamentos  faça os ajustes necessários.

 

Figura 6: Montagem de bancada

Resultados obtidos

Com base em todo o procedimento, observe o valor de frequência com que o pulso do sensor acontece. O valor informado diz quantas vezes o pulso acontece em um segundo, ou seja o número de voltas do motor em um segundo. Utilizando matemática simples é possível determinar o número de voltas por minutos, efetuando a seguinte regra de 3:

 

pulsos em um segundo — 1 segundo

velocidade em rpm — 60 segundos

 

O resultado desse cálculo fornece a velocidade do motor medida em rpm. É possível, conforme aplicação do motor, utilizar do mesmo sistema para medir a rotação e com alguns cálculos obter valores em m/s ou km/h.

Considerações finais

A possibilidade de adaptação do método existe, com a utilização de um Arduíno por exemplo. Os pulsos do sensor podem ser contados, e transformados em velocidade da mesma maneira. Um exemplo de utilização no Arduíno está relacionada ao acionamento e controle do motor utilizado o Arduíno. É possível utilizar o valor da velocidade tanto como feedback para o controlador, quanto para variável de saída.

Figura 7: Gráfico plotado no MatLab com dados adquiridos pelo Arduíno

Saber a velocidade do motor é útil em vários aspectos. Testes de bancadas para melhoria em plantas de controle por exemplo. Com base nos valores de velocidade oferecido pelo método e tensão/corrente pela fonte é possível modificar algum parâmetro da planta de controle. Seguindo esse raciocínio, a utilização do método é útil em um serie de aplicações e seu baixo custo o torna atrativo.


Utilizando um multímetro digital

O multímetro digital

Tensão, resistência e corrente elétrica. Em algum momento da vida, certamente você já ouviu falar dessas três grandezas físicas, tamanhas são as suas importâncias para o funcionamento do mundo hoje, desde iluminação pública e assistir a um jogo de futebol no sofá de sua casa até lançar foguetes no espaço. Neste tutorial, iremos aprender sobre as funções mais comuns de um multímetro digital, como utilizá-lo para medir tais grandezas e como interpretar as informações que ele nos fornece.

O multímetro, também chamado de multiteste, é um instrumento praticamente obrigatório no pacote de qualquer entusiasta da área.

Um multímetro digital

 

https://youtu.be/5gFsIrnbkhg

 


Mãos à obra - Conhecendo o multímetro

kit arduino robótica educacional

Componentes necessários

Este tutorial será feito baseado principalmente no multímetro digital HM-1100, disponível à venda no site da Vida de Silício. Contudo, as informações aqui contidas podem ser levadas para a grande maioria dos outros modelos de qualquer marca, pois o princípio de funcionamento destes são exatamente iguais, alterando-se características como os níveis de medição permitidos para cada grandeza, além de funções adicionais que podem ou não estar incluídas.

Alerta de segurança

Note que este multímetro possui a inscrição “CAT III” próxima ao terminal de entrada “COM”. Por vezes despercebida, essa é uma caracterização de extrema importância entre esses instrumentos pois ela diz respeito, basicamente, ao nível de proteção que o aparelho fornece ao usuário, variando do “CAT I” ao “CAT IV”, sendo o “CAT IV” o nível mais elevado de proteção. Para efeitos práticos, recomenda-se, em relação ao uso:

  • CAT I (ou superior): Equipamentos eletrônicos (sinais).
  • CAT II (ou superior): Redes domésticas (tomadas de alimentação de eletrodomésticos, etc).
  • CAT III (ou superior): Painel de distribuição; barramentos.
  • CAT IV: Linhas de baixa tensão (poste até residência).

Considera-se uma boa prática de operação sempre colocar uma ponta de prova preta no borne de entrada “COM”, que nada mais é que um borne comum a todos os outros, e nos demais, de acordo com a medição a ser realizada, uma ponta de prova vermelha.

Principais funcionalidades

- Medindo tensão elétrica

Uma das funções mais comuns de um multímetro é a medição de tensão elétrica entre dois pontos quaisquer (lembre-se que a tensão elétrica é simplesmente a diferença de potencial existente entre dois pontos). Essa tensão pode ser alternada (como nas tomadas residenciais) ou contínua (como baterias em geral).

Sabendo disso, se você deseja medir a tensão elétrica de uma fonte contínua, como a de uma pilha, o primeiro passo é posicionar a chave rotativa do aparelho de modo a deixá-la na posição de seção correspondente à tensão contínua conforme veremos em seguida. Note que, para esta seção, neste instrumento, teremos os seguintes valores:

  • 200 m (até 0,2 Volts em corrente contínua);
  • 2 (até 2 Volts em corrente contínua);
  • 200 (até 200 Volts em corrente contínua);
  • 600 (até 600 Volts em corrente contínua).

Se a faixa de grandeza da tensão a ser medida é desconhecida, é uma prática comum utilizar-se da maior escala disponível (nesse caso, 600 V) e efetuar a medição. Caso a escala escolhida seja muito superior ao valor mostrado, então altera-se a escala para a mais próxima e ainda superior ao valor lido e efetua-se novamente a medição. Assim, o valor lido terá uma precisão maior.

No caso de fontes de tensão contínua, como dissemos antes, é uma boa prática sempre conectar a ponta de prova preta, já conectada na entrada “COM” do instrumento, ao borne ou terminal negativo da fonte em questão e a ponta de prova vermelha, também já conectada à entrada referente à tensão, ao terminal positivo da fonte. Do contrário, como veremos mais adiante, o valor exibido pelo aparelho virá acompanhado de um sinal negativo, indicando que a polaridade está invertida.

Disposição de um voltímetro em um circuito elétrico

No caso de fontes de tensão alternadas, como a tomada de sua casa, por exemplo, essa polaridade não faz diferença, pois, como o nome sugere, as polaridades se alternam ao longo do tempo e por isso, não há um negativo ou um positivo. A medição é feita da mesma maneira que em uma fonte contínua, devendo-se apenas atentar-se para colocar a chave rotativa na posição referente à medição de tensão alternada conforme veremos em seguida.

- Medindo resistência elétrica

Atenção: Por questões de segurança, sempre que se for medir a resistência elétrica de um qualquer componente, certifique-se de que o mesmo não está energizado.

Na prática, a medição de resistência elétrica seguirá os mesmos preceitos dos enunciados acima, em tensão elétrica. Todos os multímetros digitais possuem a característica de um único borne de entrada tanto para tensão quanto para resistência. De fato, note que o modelo utilizado (HM 1100), inclusive, ainda usa esse mesmo borne para a medição de corrente elétrica na escala de miliamperes - essa configuração final pode variar de instrumento para instrumento, alguns possuindo um borne adicional para essa última grandeza.

Assim, para medir a resistência elétrica entre dois pontos, basta conectar as pontas de provas à estes pontos (lembre-se de que o circuito deve estar desenergizado).

- Medindo corrente elétrica

A “função amperímetro” de qualquer multímetro é um quesito bastante sensível enquanto que na “função voltímetro” bastava ligar as pontas de prova do instrumento aos terminais do elemento que se pretendia medir, em uma configuração que chamamos de ligação em paralelo. Para medir a corrente elétrica de um componente em um circuito precisa-se posicioná-lo de forma a deixá-lo em série (ligação em série) com o componente em questão. E, claro, se desejamos medir a corrente elétrica, é necessário que o circuito esteja energizado, ou seja, em pleno funcionamento (nos casos da tensão elétrica e resistência elétrica, este não era um requisito).

Disposição de um amperímetro em um circuito elétrico

Note que, para a ligação em série, seria necessário desconectar o componente da fonte de alimentação, de modo a colocar o multímetro entre estes dois elementos (assim, a corrente que passar pelo componente também passará pelo multímetro).

Atenção: Se conectarmos o multímetro em paralelo com o componente e utilizarmos a escala de corrente, certamente criaremos um curto-circuito que poderá danificar instantaneamente o instrumento, além de um possível acidente. Isto ocorre porque na função amperímetro, o multímetro fica com a resistência elétrica quase nula (de fato, quanto menor for este valor, melhor será a medição do aparelho) e com isso, é necessário que haja pelo menos uma resistência em série com o mesmo para o controle da corrente elétrica. Note que, pela Lei de Ohm, temos:

I = V/R

em que i representa a intensidade da corrente elétrica, em amperes (A); V representa a tensão elétrica, em Volts (V); e R representa a resistência elétrica, em Ohms (Ω). Como na função amperímetro R estará próximo de zero, para qualquer valor de V teremos facilmente uma corrente absurdamente alta, caracterizando um curto-circuito.

Pelas razões acima, não recomenda-se o uso do multímetro para medição de corrente elétrica - especialmente para valores em que seja necessário utilizar a escala de amperes (A), em detrimento da de miliamperes (mA). Recomenda-se, para a medição de correntes, o uso de alicates amperímetros, cuja operação é extremamente intuitiva e mais segura.

Realizando experiências práticas

Pegue uma pilha nova e vamos confirmar sua tensão. Primeiro, como já sabemos, conectamos as pontas de provas no multímetro de modo que, a ponta preta no borne de entrada “COM” e a vermelha, no borne de entrada com o símbolo “V”, referente à Volts. Em sequência, colocamos o multímetro na escala de tensão contínua neste ponto, é importante observarmos que como o valor máximo esperado é de 1,5 V, deixaremos a chave rotativa em “2”, pois assim, o multímetro estará preparado para fazer uma medição de tensão contínua de no máximo 2 Volts.

Agora, basta conectar a ponta de prova vermelha ao terminal positivo da pilha e simultaneamente colocar a ponta de prova preta em seu terminal negativo; dessa forma, o multímetro deverá informar a diferença de potencial existente entre os terminais da pilha.

Medindo a tensão de uma pilha

Se invertermos a ligação das pontas de provas em relação aos terminais da pilha, como já dito, teremos um sinal negativo no display do multímetro, de forma a sinalizar que a polaridade está invertida

Medindo a tensão de um pilha

Para tensão alternada, o procedimento é o mesmo. Desta vez, porém, não haverá “polaridade invertida”, visto que não há terminais positivos e negativos fixos (daí o nome “alternada”). Certamente as tomadas de sua casa possuem esse tipo de tensão e para medir ela procedemos da seguinte maneira: em primeiro lugar, para alterar a escala do multímetro, recomenda-se desconectar pelo menos uma das pontas de prova, para evitar contato com possíveis partes energizadas de circuitos. Feito isso, posicionamos a chave giratória na parte de tensão alternada. No nosso caso, temos duas possibilidades: 600 e 200. Como não sabemos se determinada tomada é 127 V ou 220 V, escolhemos “600”, ou seja, deixamos o multímetro preparado para uma medição de tensão alternada de no máximo 600 Volts. Assim feito, reconectamos a ponta de prova previamente retirada do borne de entrada e procedemos da mesma maneira que em tensão contínua.

Medindo a tensão de uma tomada

A leitura obtida foi de 119V, que é menor que 200V. Assim, a escala mais indicada para essa leitura é a de “200”. Desconectamos novamente uma das pontas de prova do borne de entrada (e também da tomada), e mudamos a chave giratória para “200”. Fazemos a medição novamente.

Medindo a tensão de uma tomada

Note que a leitura do multímetro agora é mais precisa, com mais algarismos significativos. Isso porque agora a escala está melhor ajustada para este valor de tensão. Se invertermos a polaridade das pontas de prova em relação à tomada, nenhuma diferença será notada. Além disso o valor lido pode ser um pouco oscilante, devido à instabilidade da tensão da rede de energia.

Por fim, mediremos resistência elétrica. Pode-se medir a resistência de qualquer componente, mas, por simplificação, mediremos a resistência elétrica de nosso próprio corpo. Posicionaremos o multímetro em sua função “ohmímetro”, na escala para resistência elétrica. Em nosso caso, como não sabemos a resistência de nosso corpo, deixaremos no valor máximo, que no multímetro utilizado é “20M”, equivalente a 20 milhões de Ohms - dessa forma, o multímetro estará preparado para medir uma resistência elétrica de até 20.000.000 Ohms.

Seguramos uma ponta de prova em uma mão, e a outra ponta de prova com a outra mão.

Medindo a resistência elétrica interna do corpo de uma pessoa

O valor obtido com essa prática foi de 1.58, o que equivale a uma resistência elétrica interna de aproximadamente 1,58MΩ de nosso corpo. Esse valor varia consideravelmente dependendo da força com que as pontas são seguradas, a área de contato dos dedos com essas pontas, umidade do corpo, entre outros parâmetros. Qual o valor obtido por você? Maior ou menor que o nosso? Quem estaria mais “protegido” em caso de tomar o mesmo choque elétrico? Deixe sua resposta nos comentários!


Desafio

Faça a medição de resistência elétrica em outros pontos de seu corpo, como, por exemplo, entre a mão esquerda e o antebraço esquerdo; entre a mão esquerda e sua perna direita; entre outros. O que você pôde observar dos valores obtidos? Entre quais pontos você afirmaria obter o maior valor possível?


Considerações finais

Esperamos que tenha gostado deste tutorial que, embora seja de um instrumento relativamente simples, é, sem dúvida alguma, um dos mais utilizados no meio da elétrica e eletrônica em geral. Lembramos que, ainda, este equipamento não se limita às funções aqui explicitadas: há ainda funções como continuidade, diodo e outros (alguns multímetros têm inclusive uma parte para teste de transistores!). Este com certeza um equipamento must have para todo e qualquer entusiasta da área, e, com sorte, acrescentamos aqui algo ao seu conhecimento! Qualquer dúvida, sugestão, elogio ou crítica, basta deixar nos comentários.


Como Fazer um Circuito Dimmer

Circuito Dimmer - Gradador monofásico

Você já brincou com algum daqueles interruptores tecnológicos que aumentam ou diminuem a intensidade de uma lâmpada? Eles são gradadores monofásicos (dimmer) e neste tutorial veremos como construir um de forma muito simples com poucos componentes eletrônicos.

Um dimmer é um circuito que permite ajustar a potência entregue a uma carga através de controle manual. A palavra dimmer significa "escurecedor" em uma tradução literal do inglês, devido a comum aplicação deste dispositivo para reduzir o brilho de uma lâmpada.

kit arduino robótica educacional

Dicas  e triacs

Primeiro vamos entender como uma lâmpada ou qualquer dispositivo elétrico funciona ao ser conectado. A energia elétrica disponibilizada em nossas casas está na forma de uma tensão alternada, normalmente de 127 V ou 220 V com frequência de 60 Hz, algo semelhante ao que mostra a imagem.

Forma de onda da tensão da rede elétrica.

Quando ligamos algum dispositivo na tomada, toda essa tensão é aplicada a ele, consumindo a máxima energia disponível. Uma forma de controlar a quantidade de energia entregue à carga seria ligar e desligar rapidamente essa tensão aplicada, de forma que apenas uma parcela da energia disponível é consumida. Para fazer isso na velocidade necessária, são utilizadas chaves eletrônicas que são capazes de fazer o chaveamento automaticamente. Existem diversos tipos de chaves eletrônicas para o nosso dimmer, no entanto, para esta aplicação usaremos um TRIAC e um DIAC.

- DIAC

DIAC e sua representação esquemática.

DIAC é a sigla em inglês para diodo de corrente alternada, então seu funcionamento é similar a um diodo, no entanto conduzindo corrente em ambos sentidos. Quando a tensão nos seus terminais atinge um valor de disparo, ele permite a condução de corrente em qualquer sentido, até que a tensão caia abaixo de +-2 V, como ilustrado no gráfico.

Curva de funcionamento de um DIAC.

- TRIAC

TRIAC e sua representação esquemática.

O TRIAC tem funcionamento bem semelhante ao DIAC, porém ao invés de permitir condução a partir de uma tensão pré-determinada, um pulso de corrente aplicado em seu terceiro terminal permite o seu disparo, conduzindo até que a corrente que o percorre caia a um valor limite.


Mãos À obra - Construindo um dimmer

Componentes necessários

Montagem do circuito

O circuito para construir o gradador é simples, como mostrado na imagem. É importante alertar que este circuito não deve ser ligado à qualquer tipo de dispositivo elétrico. Ele pode ser usado para cargas simples como lâmpadas incandescentes, fornos resistivos. Para cargas complexas, tais como lâmpadas fluorescentes, motores e máquinas elétricas, o controle de tensão é feito por circuitos como conversores buck, ponte H, inversores, retificadores, entre outros métodos que envolvem componentes eletrônicos mais elaborados. 

 

Circuito do gradador monofásico (Dimmer).

Se você for testar o circuito em uma protoboard, certifique-se de que a corrente exigida pela sua carga esteja dentro das limitações da protoboard. Para confeccionar a placa de circuito impresso, você poderá usar programas como Proteus, KiCad, Fritzing, que possibilitam projetar o circuito que será passado para o placa. Se você possui alguma dúvida quanto a esse processo, confira o tutorial de confecção de placas.

Quando o circuito estiver devidamente montado na placa de circuito impresso, esteja atento antes de ligá-lo à rede, já que a tensão de entrada será maior que 100V e pode causar choques elétricos. Esteja certo de que o dimmer foi devidamente isolado com fita isolante e fixado antes de ligá-lo.

Quando for ligá-lo, verifique se o funcionamento está de acordo com aquele esperado e se o dimmer é capaz de variar a potência entregue à carga pelo ajuste do potenciômetro. É possível que o funcionamento não ocorra exatamente da forma correta, devido às imprecisões dos valores de resistência e capacitância dos componentes utilizados. Talvez você note que o brilho não se altera quando o potenciômetro está em algum dos limites, seja o superior ou inferior. Caso a lâmpada não esteja respondendo ao controle para acender, deve-se diminuir o valor do capacitor para faixa de 47 a 80nF, podendo ser feito pela inserção de capacitores de 100 a 470nF em série com o C1 de 100nF. No caso oposto, quando o brilho máximo for atingido mesmo antes do giro completo do potenciômetro, deve-se aumentar para 120nF a 200nF o valor da capacitância, sendo feito através da inserção de capacitores de 10 a 47nF em paralelo com o C1.

Funcionamento

Circuito RC.

Para entender como esse circuito funciona, primeiramente é necessário saber o papel do capacitor. Esse componente é capaz de armazenar carga elétrica ao ser ligado em série com uma resistência, será carregado em um tempo definido pelos valores de R e C. Chama-se constante de tempo, ou τ (tau), de um circuito RC simples (como o da figura acima), definida pelo produto R x C, sendo que o capacitor carrega em aproximadamente 4 constantes de tempo. A imagem abaixo demonstra a curva de tensão de um capacitor de um circuito RC série (em azul) após um degrau de tensão, ilustrando o carregamento. Um degrau de tensão se aproxima ao comportamento de um interruptor sendo acionado, onde uma tensão constante é aplicada instantaneamente, como mostra a curva vermelha. O ponto marcado corresponde ao tempo de um τ após o degrau.

Curva de tensão de um capacitor de um circuito RC série após um degrau de tensão.

No circuito do dimmer, conseguimos variar esse tempo de carga do capacitor por meio do resistor variável, o que permite que o capacitor demore mais ou menos tempo para atingir a tensão de condução do DIAC, que por sua vez possibilita disparar o TRIAC e acionar a carga. Quando o potenciômetro está no seu curso máximo, o tempo de carga será maior e o disparo acontecerá no final do semiciclo da tensão da rede, fazendo o brilho ser mínimo. Já quando o potenciômetro estiver no batente mínimo, a carga será mais rápida e o disparo será dado logo no início do semiciclo, fazendo o brilho da lâmpada ser máximo. Os gráficos abaixo ilustram a forma de onda da tensão sobre a carga com os disparos em instantes variáveis.

Formas de onda da tensão sobre a carga para diferentes disparos.

Considerações finais

Espero que tenham gostado e aprendido com este tutorial. Embora se trate de um circuito simples, podemos fazer um dispositivo interessante e bastante prático. Mãos à obra! Explore as diversas possibilidades com o seu dimmer e traga suas dúvidas sempre que surgirem!


Aprendendo a crimpar cabos de rede

Aprendendo a crimpar cabos de rede

Redes de computadores estão por todo lado, seja para uso profissional - onde tais redes podem comportar centenas de computadores - ou até mesmo para uso doméstico, com pelo menos duas máquinas. Apenas como curiosidade, em 2016, segundo o IBGE, o Brasil possuía em torno de 116 milhões de pessoas conectadas à internet. Neste tutorial iremos aprender a como deixar os cabos de rede perfeitos para uso.

Um ponto crucial para o funcionamento correto dessas redes são as suas conexões, isto é, a forma com que esses dispositivos irão se comunicar uns com os outros. A forma mais segura (menos suscetível à instabilidades por fatores externos) e rápida (velocidade de conexão) de fazê-lo é utilizando-se cabos de rede.

kit robotica educacional com Arduino ESP ou Microbit


Mãos à obra - Crimpando cabos de rede

Componentes utilizados

  • Alicate crimpador
  • Conectores RJ-45
  • Cabo de Rede (também conhecido como Cabo de Par Trançado ou Cabo UTP)
  • Estilete
  • Alicate de Corte
  • Testador Cabo de Rede

Esquemas de cores

Figura 1 - Esquema de cores de um cabo de rede

Primeiramente, para preparar o cabo para receber os conectores, retira-se, em ambas as pontas do mesmo, a capa de isolamento azul em um comprimento de aproximadamente 3 cm. Para realizar esta tarefa, recomenda-se utilizar o estilete, tendo cuidado para não forçar demais sua lâmina e ferir os cabos que são protegidos por este isolante. Uma vez retirada esta capa, nota-se que existem 4 pares de fios, sendo cada um destes formado por dois fios entrelaçados. Desenrole todos os fios e deixe-os lado a lado, o mais reto possível. No desenvolvimento desta experiência, siga o padrão de disposição de cores que julgar conveniente, no entanto, neste tutorial utilizaremos o padrão EIA/TIA 568A.

Figura 2 - Ponta de um cabo de rede sem a capa de isolamento azul

Além do estilete, pode-se também optar por usar a parte de corte do alicate crimpador, com o qual é possível descascar o revestimento azul sem ferir os pares internos.

Figura 3 - Alicate crimpador

Uma vez acertada a disposição escolhida, deve-se comparar o comprimento dos 8 fios com o espaço do conector RJ-45, ajustando-o de forma que base inteira do conector coincida com a parte de proteção azul do cabo. Esse passo é importante pois essa base será fortemente prensada contra o cabo, de modo a não permitir-lo sair do conector facilmente, dessa forma, é mais seguro deixar que esta força atue contra essa capa de proteção, mais resistente mecanicamente que os fios em si. Do contrário, os fios podem ser danificados, causando mal funcionamento e diminuindo vida útil do cabo. 

Figura 4 - Cabo de rede com o conector RJ-45 na ponta

Observado o comprimento ideal, corta-se então os fios nessa medida, utilizando-se o alicate de corte. Feito isso, não é necessário desencapar a ponta dos fios: basta introduzi-los no conector RJ-45, sempre respeitando o padrão de cores escolhido. Deve-se empurrar os fios até o final do conector, garantindo que todos estes cheguem até os contatos metálicos dourados da extremidade oposta do conector. Confira novamente se as cores estão de acordo com o padrão pré-determinado. Se houver divergência, é aconselhável repetir o processo.

O padrão de cores a ser utilizado é mostrado na figura a abaixo:

Figura 5 -  Padrão de cores

Na figura, vemos que olhando de frente para os contatos metálicos, o padrão de cores dos fios será:

  • Branco/Verde;
  • Verde;
  • Branco/Laranja;
  • Azul;
  • Branco/Azul;
  • Laranja;
  • Branco/Marrom;
  • Marrom.

Em alguns cabos, a cor branco/verde é  na realidade um verde mais claro, o branco/azul é um azul mais claro e assim por diante.

Feito isto, basta encaixar o conector na parte reservada a este do alicate crimpador e pressionar esta ferramenta até o seu travamento (geralmente é possível ouvir um “click”) e pronto! Repita o processo com a outra ponta do cabo e este estará pronto para uso. Caso todos os cuidados aqui relatados tenham sido seguidos, você provavelmente evitará quaisquer manutenções futuras por mal funcionamento.

Figura 6 - Crimpando um cabo de rede

É possível, ainda, testar a disposição do cabo de rede com um aparelho chamado “testador de cabo”. Basta colocar cada uma das duas pontas do cabo, já com seus devidos conectores, no aparelho e ligá-lo. Os LEDs que se acendem no aparelho fazem referência à disposição dos fios do cabo, assim, se de um lado acende o LED referente ao número 1, a outra parte do aparelho que recebe a outra ponta do cabo deve acender o LED referente ao número 1, indicando que o sinal foi enviado e recebido no fio de posição 1; em seguida, ambos devem mudar para a posição 2, e assim deve ocorrer sucessivamente até o número 8, demonstrando que todas as posições estão corretamente interligadas.

Figura 7 - Aparelho utilizado para testar a disposição do cabo de rede

Os cabos de rede UTP são os mais amplamente usados, pois possibilitam a transmissão de informações em alta velocidade, cerca de 100Mbps na categoria 5E, que é a que utilizamos neste tutorial. Além disso, o fatos de ser composto por pares de fios trançados possibilita uma melhor qualidade na transmissão, eliminando interferências eletromagnéticas externas e entre fios.

Considerações finais

Agora que você viu como é simples o procedimento de crimpagem de cabos de rede, pode fazer seus próprios cabos do tamanho que precisar para estender sua conexão com a internet. Espero que tenha gostado deste tutorial e fique bem conectado!


Soldando componentes eletrônicos

A solda eletrônica

A solda eletrônica é um procedimento muito recorrente para quem trabalha com circuitos eletrônicos. Aprender a soldar é bastante útil para quem pensa em começar a mexer com equipamentos, manutenção e até mesmo criações próprias. Neste tutorial veremos os procedimentos básicos para realizar a solda de componentes eletrônicos.

[toc]

kit robotica educacional com Arduino ESP ou Microbit

Ferramentas

Antes de mais nada vamos conhecer as ferramentas mais comuns para solda eletrônica.

Ferro de solda

Figura 1 - Ferro de solda

O ferro de solda é uma das principais ferramentas para soldar componentes. Existem vários modelo de ferro de solda que, por sua vez, são voltados para os mais diversos tipos de aplicações, apresentando portanto características diferenciadas entre si como potência, ajuste de temperatura e diâmetro da ponta. Para quem faz trabalhos mais caseiros ou quer mexer com eletrônica por hobby, um ferro de solda de 25W a 45W sem ajuste de temperatura já é o suficiente.

Estanho

O estanho também é um material indispensável para soldar componentes. Sua composição consiste em uma liga metálica normalmente de estanho e chumbo que derrete em temperatura alta e possibilita a conexão elétrica entre um componente e uma placa. Existem vários tipos de estanho, com composições e espessuras diferentes, sendo recomendado os fios por volta de 0,5 mm para soldar componentes eletrônicos. Por conter chumbo, esse material deve ser manuseado com atenção e em local ventilado, evitando respirar a fumaça expelida durante seu aquecimento.

Figura 2 - Fios de estanho

Esponja vegetal

A esponja vegetal é extremamente útil para se limpar a ponta do ferro de solda ao longo do processo de soldagem. Em virtude de ser rígida quando está seca, ela deve ser molhada para ficar macia e adequada para o uso.

Figura 3 - Esponja vegetal

Pasta de solda

Figura 4 - Pasta de solda

A pasta de solda é um produto opcional no procedimento de soldagem. Consiste em uma pasta que se liquefaz quando aquecida e facilita o espalhamento e adesão do estanho em outros metais. Normalmente usada em componentes ou placas com efeitos de oxidação ou de difícil acesso.

Sugador de solda

O sugador de solda não é uma ferramenta essencial para soldagem, mas ajuda bastante tanto na retirada dos excessos de estanho quanto no processo de dessoldagem de componentes.

Figura 5 - Sugador de solda

Mãos à obra - Soldando componentes

Componentes necessários

Preparativos

Ligue o ferro de solda na tomada e espere de 2 a 3 minutos enquanto ele aquece. Verifique se o ferro de solda já está quente encostando o estanho na sua ponta, quando derreter facilmente é sinal de que o ferro esquentou. Molhe a esponja vegetal na água sem encharcá-la, apenas deixando ela úmida. Em seguida limpe o ferro de solda passando sua ponta na esponja úmida.

Procedimento

As etapas para realizar a soldagem de um componente eletrônico são:

  • Etapa 1: encaixe o componente na placa. Passe o componente pelos furos e dobre o seus terminais sobre a placa para facilitar a soldagem.

 

Figura 6 - Encaixando um componente na placa furada

 

Figura 7 - Componente encaixado na placa
  • Etapa 2: com o uso do pincel passe um pouco de pasta de solda sobre o local que quer soldar e retire o excesso.
  • Etapa 3: com o ferro de solda, toque o local onde quer soldar e aproxime o estranho.
Figura 8 - Soldando um componente na placa
  • Etapa 4: espere o estanho escorrer pelo local e aderir tanto à placa quanto ao componente.
  • Etapa 5: remova o ferro de solda e espere o estanho esfriar
  • Etapa 6: verifique se ficou bem firme.
  • Etapa 7: para dar acabamento, corte o excesso do terminal que acabou de ser soldado.
Figura 9 - Cortando o excesso de material que foi soldado
  • Etapa 8: para soldar itens maiores, é válido estanhar antes o terminal. Por exemplo, caso desejo soldar um fio na minha placa, estanho o terminal do fio e depois o soldo na placa. O procedimento em si é o mesmo.
Figura 10 -Soldando um componente na placa
  • Etapa 9: para remover o excesso de solda, armamos o sugador de solda, aquecemos o local da solda com o ferro de solda e aproximamos e apertamos o botão do sugador, que puxa o estanho aquecido e desarma o sugador.
Figura 11 - Usando o sugador de solda

Dicas

  • A prática é essencial para ter domínio de soldagem.
  • Uma boa solda é aquela na qual o estanho fica uniformemente espalhado e brilhando. Para isso é necessário ter um equilíbrio entre a quantidade de estanho aplicado e a temperatura do ferro de solda.
  • Se o estanho ficou fosco, esbranquiçado ou aparenta não ter aderido bem à placa e/ou ao componente, verifique se o ferro de solda está quente o suficiente ou se o estanho utilizado passou da validade.
  • Cuidado com o tempo de aplicação da ponta do ferro na placa, pois alguns componentes podem ser danificados se forem esquentados por muito tempo.
  • A fim de aperfeiçoar a técnica, encontre um circuito eletrônico antigo e sem uso, como placa-mãe velha, e tente remover e soldar novamente os componentes.

Considerações finais

Espero que tenha gostado desse tutorial e comece suas próprias criações eletrônicas agora que já sabe soldar. Uma solda de qualidade é um processo que requer tempo e a melhor de forma de melhorar a técnica é através da prática. Então não perca tempo e comece a soldar! Sucesso!


Utilizando fontes de bancada

Utilizando fontes de bancada

As fontes de bancada são equipamentos essenciais para o desenvolvimento da grande maioria dos projetos de eletrônica e serão o assunto deste tutorial. A utilização desse tipo de fonte é bastante simples, entretanto, é importante dominar o assunto para trabalhar em seus futuros projetos com tranquilidade e segurança.

kit robotica educacional com Arduino ESP ou Microbit

Introdução

É comum no cotidiano dos estudantes, profissionais ou pessoas aficionadas por eletrônica a necessidade de utilização de um nível contínuo de tensão ou corrente para alimentação de circuitos, sensores, módulos, microcontroladores e vários outros elementos. É possível suprir esta demanda com baterias ou fontes de tensão, no entanto, a vantagem de se utilizar a segunda opção está no fato de que pode-se variar a tensão e corrente máxima fornecidas dentro de de um intervalo especificado pelo fabricante.

O objetivo primordial de uma fonte de bancada é receber a tensão alternada de alimentação proveniente da rede elétrica e gerar níveis contínuos de tensão e corrente conforme definidos pelo operador, normalmente por potenciômetros. As estratégias para conversão de tensão alternada em contínua  são variadas e os circuitos das fontes relativamente complexos, portanto as definições de hardware não serão discutidas neste tutorial.


Tipos de fontes

Fonte com um canal

Inicialmente, vamos definir os elementos externos de uma fonte de tensão. A figuras a seguir ilustram a configuração típica de uma fonte com um canal ajustável e seu esquemático simplificado, respectivamente:

Exemplo de uma fonte de bancada

 

Esquemático simplificado de uma fonte de bancada

Neste tipo de configuração existem três bornes de saída disponíveis. O borne negativo (preto) fornece acesso ao referencial adotado pelo instrumento, ou seja, o referencial ou terra do circuito externo a ser alimentado. Já o borne positivo (vermelho) fornece um nível de tensão em relação ao referencial citado anteriormente. Por exemplo, quando se ajusta a fonte para fornecer 5 Volts, existirá uma diferença de potencial igual a 5 Volts entre os bornes positivo e negativo.

O terceiro borne disponível é o GND (verde), através dele é possível ter acesso ao aterramento da estrutura física da fonte. É importante não confundir o negativo do circuito com este terminal de aterramento, eles não são equivalentes.

Note também a existência de quatro potenciômetros que funcionam como chaves para ajustes. Dois deles são para ajuste do nível de tensão e os outros dois para ajuste da corrente máxima fornecida. Em ambos os casos um dos potenciômetros é para ajuste grosso e o outro para ajuste fino, caso a aplicação demande maior precisão de valores das respectivas grandezas.

Uma prática comum para verificar o nível máximo de corrente ajustado é curto circuitar os terminais positivo e negativo da fonte com os cabos de alimentação por um breve período, ou seja, um cabo é conectado ao borne positivo e outro ao borne negativo e posteriormente deve-se encostar um cabo no outro. O circuito para este caso é:

Curto circuito em fonte de bancada.

Pela Lei de Ohm temos que:

Como a resistência é nula obteríamos uma corrente infinita, entretanto ela está limitada ao valor de limite de corrente da fonte. É por isso que um curto circuito nesses terminais da fonte de bancada nos permite visualizar e ajustar o limite de corrente da mesma. 

Quando sabemos de antemão qual é a corrente máxima requerida pelo circuito a ser alimentado, devemos ajustar o limite de corrente, pois, em caso de anomalias como um curto circuito, por exemplo, a corrente não excederá o valor definido como usual e o circuito ou equipamento externo não será danificado.

De forma geral, as fontes também apresentam dois visores digitais que mostram os valores de corrente e tensão e também dois LEDs, C.C e C.V., que acendem quando os limites de corrente e tensão são atingidos, respectivamente.

Fonte com dois canais

Existem outras fontes de bancada comerciais que, ao contrário da anterior, possuem dois canais para uso, ou seja, existem duas fontes de alimentação dentro da fonte de bancada que podem se relacionar de diferentes formas. A figura a seguir ilustra esta configuração:

Exemplo de fonte de bancada com dois canais

Algumas variações podem ser observadas entre os modelos, como a existência ou não de um potenciômetro para ajuste fino e a presença de terminais com um nível fixo de tensão, normalmente 5 Volts - na imagem acima, esses terminais são os dois posicionados mais à direita.

Como exposto anteriormente, é possível variar o estado dos dois botões no centro da fonte para fazer com que os canais se relacionem de três formas diferentes, são elas:

- Independentes

Os dois canais são independentes e podem ser utilizados para aplicações distintas simultaneamente.

Esquemático simplificado de uma fonte bancada com os canais selecionados no modo “independente”

- Em série

Os canais são associados em série, de modo que a tensão fornecida seja a soma das contribuições de cada um deles.

Esquemático simplificado de uma fonte bancada com os canais selecionados no modo “série”

- Em paralelo

Os canais são associados em paralelo, de modo que a corrente total fornecida seja a soma das corrente de cada um. Com esta configuração é possível extrair maior corrente da fonte de bancada e alimentar equipamentos que demandam maior potência, como motores elétricos.

     

Esquemático simplificado de uma fonte bancada com os canais selecionados no modo “paralelo”

Informações adicionais

Regular tensão e corrente antes de ligar a fonte ao circuito ou equipamento e zerar esses valores antes de a desligar são boas práticas que evitam. respectivamente, expor a o objeto alimentado a regimes indesejados e surpreender o próximo usuário da fonte de bancada.

É importante lembrar que todas as fontes de alimentação reais possuem uma impedância interna associada aos seus terminais. No entanto, para aplicações convencionais, não é preciso se preocupar com esse fato.

Além disso, o valor indicado no visor de uma fonte não apresenta grande exatidão. Portanto, caso a aplicação demande, é necessário conferir o valor com um instrumento de medição apropriado - um multímetro, por exemplo.   

Por fim, o layout de outras fontes pode se distinguir em alguns aspectos dos apresentados aqui. Entretanto, eles são normalmente intuitivos e em pouco tempo de uso você estará familiarizado!  


Considerações finais

Fontes de bancadas são equipamentos essenciais para o desenvolvimento de hardware ou teste de equipamentos. Em relação à baterias ou pilhas, elas nos permitem obter maior controle sobre o fornecimento de tensão e corrente.

É importante conhecer bem o aparelho para otimizar seu uso no cotidiano e evitar submetê-lo a situações perigosas ou que possam danificar o mesmo. Planeje bem como a fonte será utilizada em seus experimento e mãos à obra!


Medindo tensão AC com Transformador

Medindo tensão elétrica com Arduino e Transformador

Alguns projetos exigem que seja feita a medição de grandezas elétricas referentes a algum determinado aparelho ou circuito, visando assim monitorar suas condições de funcionamento, para assim prevenir alguma falha, ou mensurar seu consumo de energia. Neste tutorial, estaremos ensinando como realizar a medição da tensão alternada da rede elétrica utilizando um transformador 127/220 para 12 V em conjunto com um Arduino Uno. 

[toc]

kit robotica educacional com Arduino ESP ou Microbit

Por que medimos tensão elétrica?

Em ambientes industriais, o monitoramento da tensão elétrica é de suma importância para o funcionamento da indústria, pois por meio da análise tanto da tensão quanto da corrente, é possível realizar manutenções preventivas e evitar que máquinas venham a sofrer algum tipo de danificação proveniente de sobrecarga ou outras possíveis causas de falha.

Imagem meramente ilustrativa

Visto o cenário atual, no qual muitos desejam automatizar suas casas controlando a iluminação, controlando o ar condicionado, dentre outros comandos, tudo pelo celular, ocorre-se a necessidade de se monitorar o consumo de energia, seja individualmente ou de maneira geral em sua residencial, e para isso faz-se necessário efetuar a leitura de grandezas elétricas como tensão e corrente, para assim poderem fazer os cálculos de consumo de potência elétrica e assim monitorarem seu consumo de energia.

Imagem meramente ilustrativa

Para acrescentar-lhe conhecimento a respeito da medição de corrente elétrica, citada como parte vital tanto de um sistema de automação industrial quanto residencial, recomendamos que vejam o tutorial relacionado ao sensor SCT-013 e ao módulo ACS712.

Transformador

O transformador é uma máquina elétrica capaz de reduzir e elevar tensões elétricas AC (corrente alternada) por meio da indução eletromagnética. Existem diversos modelos de transformadores, de modo que, o que utilizaremos neste tutorial é semelhante ao representado logo abaixo.

Exemplo de um transformador
Exemplo de um transformador

O transformador em questão é empregado em sistemas elétricos AC, pois depende da variação constante do valor da corrente para que, por meio da indução, ele possa rebaixar ou elevar os valores de tensão.

A vantagem do transformador comparado aos outros métodos consiste no motivo que por meio dele podemos fazer com que o arduino "veja" a forma de onda senoidal que deverá ser medida, possibilitando não só o cálculo do valor RMS da tensão como também permite análises mais profundas a respeito da forma de onda da tensão.

Esse tutorial envolve conceitos de eletricidade e programação que serão explicados no  no tópico Entendendo a fundo.


Mãos à obra - Medindo a Tensão Elétrica AC da Rede com transformador

Neste projeto, iremos monitorar o valor de tensão de um equipamento, podendo assim perceber se ele está ligado ou desligado. 

Componentes necessários

Montando o projeto

Primeiro é necessário identificar quais fios do transformador devem ser conectados à fonte de tensão. Esta informação normalmente está contida no próprio transformador. Caso não seja possível distinguir quais fios são do primário e quais são do secundário, basta ver qual lado possui a mesma cor de fios para todos, pois, o lado que possuir essa característica corresponderá ao secundário do transformador.

Indicação do lado secundário do transformador
Indicação do lado secundário do transformador

Após identificar os fios, é necessário conectá-los em PARALELO com a fonte de tensão a ser monitorada.

Agora é necessário montar o seguinte circuito na protoboard para que o arduino possa ler os valores de tensão da saída do transformador.

Esquema para montagem prática do projeto para medição de tensão AC com transformador e Arduino Uno
Esquema para montagem prática do projeto para medição de tensão AC com transformador e Arduino Uno

Feito isso, só nos resta programar o arduino para que ele possa interpretar os valores que serão lidos em sua porta analógica.

Programando

Com o arduino conectado ao computador, faça upload do seguinte programa:

void setup() {
  
  Serial.begin(115200);  

  ADCSRA = 0;
  ADCSRB = 0;

  ADMUX |= (0 & 0b0000);

  ADMUX |= (1 << REFS0);
  ADMUX |= (1 << ADLAR);

  ADCSRA |= (1 << ADPS2);

  ADCSRA |= (1 << ADEN);
  ADCSRA |= (1 << ADSC);

}

void loop() {

  float amostras[200];          // Variável criada para armazenar as amostras lidas pelo arduino
  float tensaoPROTO[200];       // Utilizada para armazenar os valores correspondentes a tensão na protoboard
  float tensaoREAL[200];        // Valores reais de tensão
  
  int i;
  float soma = 0;

  float tensaoRMS;

  for(i = 0; i < 200; i++)
  {
    amostras[i] = analogRead(A0);
    delayMicroseconds(63);
  }
  
  for(i = 0; i < 200; i++)
  {
    tensaoPROTO[i] = (amostras[i] * 0.004882812) - 2.5;
    
    tensaoREAL[i] = tensaoPROTO[i] * 221.73;

    tensaoREAL[i] = tensaoREAL[i] * tensaoREAL[i];
    soma = tensaoREAL[i] + soma;
  }

  tensaoRMS = soma / 200;
  tensaoRMS = sqrt(tensaoRMS);
  
  Serial.print("Tensao: ");
  Serial.println(tensaoRMS);

  Serial.println("");
}

Com porta e placa selecionados corretamente, basta realizar o upload código.

Colocando pra funcionar

Montagem e programação concluídos, só nos resta conectar o aparelho a ser monitorado na tomada.

ATENÇÃO: Cuidado ao realizar este projeto, pois você estará trabalhando diretamente com energia elétrica.

O resultado pode ser conferido logo abaixo:

Vista superior da montagem prática
Vista superior da montagem prática

 

Montagem prática na protoboard
Montagem prática na protoboard

 

Informações apresentadas no monitor serial

Entendendo a fundo - Hardware

Conceitos básicos de Eletricidade e Eletromagnetismo

Para esse conteúdo é importante que o leitor entenda alguns conceitos de Eletricidade Básica e Electromagnetismo.

- Corrente Alternada

É uma corrente elétrica no qual seu valor varia com o tempo, mudando seu sentido constantemente. Sua forma de onda muitas vezes se assemelha a uma senoide, como podemos ver na imagem logo abaixo.

Corrente Alternada
Corrente Alternada

- Lei de Ampère

Segundo esta lei, todo condutor percorrido por corrente elétrica variante no tempo faz surgir em seu entorno um campo magnético variante proporcional ao valor da corrente elétrica. A lei em questão estabelece uma relação matemática entre o campo magnético, a corrente elétrica e a distância do condutor. A equação pode ser vista logo abaixo:

B = ( μ × i ) ÷ ( 2π × R )

É possível descobrir o sentido das linhas de campo geradas pela corrente elétrica variante no condutor seguindo a Regra da Mão Direita, no qual o polegar da mão direita indica o sentido da corrente, e os outros dedos indicam o sentido das linhas de campo. Isso pode ser melhor entendido com a imagem logo abaixo.

Ilustração da Regra da Mão Direita

- Lei de Faraday

A Lei de Faraday estabelece uma relação entre a variação do fluxo magnético e a força eletromotriz induzida em uma espira. Do mesmo modo que a corrente elétrica variante faz surgir um campo magnético variante, ocorre o mesmo quando expomos um condutor a uma variação de campo magnético.

Lei de Faraday
Lei de Faraday

Como observado logo acima, surge uma diferença de potencial entre os terminais da bobina conforme ocorra a variação do campo magnético (movimentação do imã).

Entendendo o Transformador

- Transformador 127/220 para 12V

O transformador em questão é composto de duas partes principais: o enrolamento e o núcleo. O enrolamento consiste em várias bobinas que serão responsáveis por realizar a indução eletromagnética. O núcleo é por onde as linhas de campo provenientes das bobinas transitam, onde normalmente é constituído por um material ferromagnético.

Esquemático do funcionamento de um trasnformador
Esquemático do funcionamento de um trasnformador

Quando conectamos em sua bobina primária (linhas vermelhas) uma tensão elétrica, pela Lei de Faraday, surge um campo magnético, no qual suas linhas de campo passarão pelo material ferromagnético (estrutura cinza), e induzirá uma corrente na bobina secundária (linhas azuis), fazendo surgir uma diferença de potencial entre seus terminais.

Representação das linhas de campo em um transformador
Representação das linhas de campo em um transformador

- Circuito do medidor de tensão

Neste tópico iremos explicar os detalhes que compõem o circuito proposto nesse tutorial.

Primeiramente temos um circuito divisor de tensão entre os terminais do transformador, que tem por objetivo diminuir o valor de pico da tensão de saída para que o arduino possa ler os valores de tensão. Abaixo é possível ver o diagrama que indica o circuito divisor de tensão.

Circuito divisor de tensão

Com este divisor de tensão, as formas de onda encontradas em cada resistor serão as seguintes:

Formas de onda em cada resistor

Utilizando a Lei de Ohm, podemos também calcular os valores de pico de tensão nos resistores, levando em conta que o secundário do transformador possua uma tensão de saída de 12V. Fazendo os cálculos, descobriremos o seguinte.

V = R × I

12 = 21000 × I

I = 12 ÷ 21000

I = 0,57 mA

Com isso, descobrimos que a corrente do circuito equivale a 0,57 mA. Com este valor, podemos descobrir a queda de tensão sobre o resistor R3.

V = 1000 × 0,00057

V = 0,57 V

Precisamos transformar esse valor, que corresponde ao rms, em valor de pico. Para isso, multiplicaremos o resultado anterior por √2.

V = 0,57 × √2

V = 0,81 V ou 810 mV

Sabemos agora que o valor de pico, ou seja, o valor mais alto que a tensão sobre esse resistor atinge, é de 800 mV.

Necessitamos agora de um circuito que irá adicionar uma tensão de offset sobre esse resistor, para que o arduino também possa ler os valores que correspondem ao semiciclo negativo da forma de onda, visto que se conectarmos esse resistor diretamente nele, o arduino não conseguirá ler esses valores negativos. Para isso, foi montado um segundo divisor de tensão, no qual utiliza a alimentação do arduino (5V e GND) para gerar o valor de tensão DC que será adicionado a forma de onda do resistor R3. O circuito equivalente a este divisor pode ser visualizado logo abaixo.

Divisor de tensão para offset

Com o acréscimo de uma tensão de offset na forma de onda presente no resistor R3, teremos o seguinte resultado:

Forma de onda resultante

O esquemático do circuito final pode ser visualizado logo abaixo.

Esquemático do circuito apresentado neste tutorial

 


Entendendo a fundo - Software

Será abordado neste tópico os detalhes sobre cada linha de programação, vista na seção Mãos à obra

Abaixo está o diagrama geral informando como ocorre o processo de conversão dos valores analógicos para digitais, visto que ele será necessário para a explicação dos registradores. Durante as explicações, serão apresentados partes específicas desse diagrama. Ele também poderá ser consultado indo diretamente ao datasheet do microcontrolador ATmega328p.

Diagrama de blocos representando a operação de conversão analógica para digital

- ADMUX

ADMUX é um registrador composto por 8 bits no qual ele contém a tensão de referência a ser utilizada para a leitura dos terminais analógicos e qual terminal será utilizado para as leituras. Abaixo está a tabela que informa os bits correspondentes a cada informação do registrador.

Tabela geral das informações que compõem o byte ADMUX
  • MUX3...0

Os primeiros 4 bits correspondem ao pino responsável pela leitura analógica. Abaixo está a tabela com as informações referentes para setar o pino desejado.

Tabela referente aos pinos e sua representação binária no registrador ADMUX

Pelo diagrama abaixo vemos que os bits relacionados a seleção dos pinos de entrada são conectados a um decodificador, no qual sua saída é conectada ao multiplexador, onde os terminais A0...A5 estão conectados nas entradas desse multiplexador.

Diagrama relacionado aos pinos de leitura analógica

- REFS1 e REFS0

Os dois bits mais significativos (7º e o 6º bit) corresponde a tensão de referência que deverá ser utilizada para a leitura do valor analógico. Assim como anteriormente, o datasheet do ATmega328p apresenta uma tabela para auxiliar a configuração desta informação.

Tabela referente a seleção da tensão de referência

O padrão é utilizar AREF, no qual não conectamos nada ao terminal.

Pelo diagrama abaixo podemos entender melhor o funcionamento a respeito do 6º e 7º bit do ADMUX, para a seleção da tensão de referência.

Diagrama relacionado ao 6º e 7º bit

O bit REFS1 é conectado ao multiplexador, no qual esse bit definirá qual entrada será direcionada a saída. Se o REFS1 seja 0, a saída será o AVCC, mas  se o bit for 1, será a tensão interna de referência 1,1V. Já o bit REFS0 é responsável por controlar a conexão entre a saída do multiplexador acima e o AREF, onde caso seja esse bit seja 0, não haverá conexão, mas caso seja 1, haverá conexão entre eles.

- ADLAR

O bit referente ao ADLAR é responsável pela configuração da forma de exibição dos resultados (/da conversão feita pelo ADC) no Registrador de Dados ADC. Setando ele em 1, o resultado será alinhado a esquerda, e setando 0, se alinhará a direita. Ele é composto por dois registradores, chamados: Registrador de Dados ADC Low e High. Abaixo está o diagrama com sua localização na operação de conversão. Veja que abaixo do nome principal do registrador está entre parênteses os nomes ADCH e ADCL, que correspondem a siglas correspondentes de Low (ADCL) e High (ADCH).

obs: o registrador principal do Registrador de Dados ADC possui 16 bits, pois se trata da união dos dois registradores.

Diagrama referente ao registrador ADC Data Register

- ADCL

ADCL corresponde ao registrador localizado a direita do principal. Quando ADLAR está setado em 0, temos a seguinte configuração:

Tabela referente ao ADCL quando setado em 0

Já quando setado em 1:

Tabela referente ao ADCL quando setado em 1

- ADCH

ADCH corresponde ao registrador localizado a esquerda do principal. Quando ADLAR está setado em 0, temos a seguinte configuração:

Tabela referente ao ADCH quando setado em 0

Já quando setado em 1:

Tabela referente ao ADCH quando setado em 1

Os valores ADC9...ADC0 equivalem aos bits resultantes da conversão AD realizada anteriormente.

Processo de conversão

O ADC irá gerar um resultado de 10 bits que será apresentado nos Registradores de Dados ADC, ADCH e ADCL. Dependendo do valor de ADLAR, o resultado será apresentado a esquerda ou a direita. Caso o resultado seja ajustado a direita e apresente 8 bits, basta ler o valor presente no registrador ADCH. Caso contrário, o ADCL deverá ser lido primeiro, e logo após o ADCH, pois após a sua leitura, não será possível modificar os valores desses registradores. Já quando é efetuada a leitura no registrador ADCH, o acesso para modificação é reativado. Com isso, pode ocorrer as seguinte situações:

  • Efetuar a leitura do ADCL, e ocorrer uma conversão antes do registrador ADCH ser lido, tanto os dados desse registrador quanto os novos valores que foram convertidos serão perdidos;
  • Caso seja feita uma inversão na ordem de leitura dos registradores (ler ADCH antes de ADCL), após efetuar a leitura de ADCL, o acesso aos valores serão bloqueados e nenhuma alteração poderá ser feita, perdendo com isso os dados de conversões futuras.

ADCSRA e ADCSRB

Os registradores ADCSRA e ADCSRB são responsáveis pelo processo de conversão analógica para digital no arduino. ADCSR é a sigla do termo inglês ADC (Analog Digital Converter) Control and Status Register (Registrador de Status e Controle ADC), no qual o microcontrolador do arduino apresenta dois, A e B.

O ADCSRA é composto pelos seguintes bits:

Byte referente ao registrador ADCSRA

Os bits que compõem o byte do registrador ADCSRA são:

  • ADEN: ativa o sistema ADC. É necessário estar setado em 1 para que o processo de conversão ocorra. Quando o processo se encerra, ele retornará ao valor 0.
  • ADSC: quando 1 ele inicia o processo de conversão, já quando for 0, encerra-se o processo.
  • ADATE: é utilizado para configurar o trigger do arduino. Caso seja setado em 1, o auto trigger do conversor AD é habilitado.
  • ADIF: Este bit é definido quando uma conversão de ADC é concluída e os registros de dados são atualizados.
  • ADIE: Quando esse bit é gravado em um e o bit 1 em SREG é definido, a interrupção completa de conversão do ADC é ativada.
  • ADPS2...0: Esses bits determinam o fator de divisão entre a freqüência do clock do sistema e o clock de entrada para o ADC.

É necessário manipular diretamente os registradores no void setup() pois desse modo o arduino conseguirá fazer um maior número de leituras durante o tempo de 16,66 ms (equivalente a um período da frequência de 60 Hz da rede elétrica).

Até aqui poderia ir para outro tutorial


- Iniciando a comunicação serial

É iniciado uma comunicação serial com baud rate de 115200. Caso você não conheça bem os recursos da comunicação serial, recomendamos que veja o tutorial Comunicação Serial Arduino.

Serial.begin(115200);

- Limpando registradores

É atribuído o valor 0 aos registradores ADCSRA e ADCSRB:

ADCSRA = 0;
ADCSRB = 0;

- Setando o pino de entrada analógica

É definido o pino A0 como INPUT, assim como a tensão de referência:

ADMUX |= (0 & 0b0000);
ADMUX |= (1 << REFS0);

- Configurando a forma de exibição

Alinha o valor ADC a esquerda, para que seja lido somente os 8 bits mais significativos do registrador ADCH:

ADMUX |= (1 << ADLAR);

- Determinando o fator de divisão

É determinado o fator de divisão entre o clock do sistema e a entrada de clock do ADC. Neste caso, como ADPS0 e ADPS1 estão em estado lógico 0, e o ADPS2 é setado com estado lógico 1, o valor do fator de divisão será 16.

ADCSRA |= (1 << ADPS2);

- Ativação do conversor ADC

O conversor ADC presente no arduino é habilitado:

ADCSRA |= (1 << ADEN);

- Iniciando as medições ADC

É iniciado as medições ADC:

ADCSRA |= (1 << ADSC);

- Criando variáveis locais para o código

São criados vetores que serão responsáveis por armazenar o valor bruto lido, e de mesmo modo, os valores convertidos e tratados. Foi criado vetores com 200 pontos pois estes já serão suficientes para que seja realizado o cálculo do valor quadrático médio da tensão.

float amostras[200];
float tensaoPROTO[200];
float tensaoREAL[200];

Também são criados outras variáveis auxiliares e a variável em que será armazenado o valor final.

int i;
float soma = 0;
 
float tensaoRMS;

- Captação dos valores instantâneos da tensão

É realizado um laço for para realizar a leitura das 200 amostras que serão lidas pelo pino analógico A0. O delay foi utilizada para que ao final da leitura das 200 amostras, o tempo gasto fosse próximo dos 16,66 ms, que equivale ao tempo de duração de um ciclo da senoide de 60 Hz.

for(i = 0; i < 200; i++)
{
  amostras[i] = analogRead(A0);
  delayMicroseconds(63);
}

- Tratamento dos valores armazenados na variável "amostra[200]"

Da mesma maneira que o tópico anterior, é realizado um laço for para que seja feito o tratamento em todos os 200 valores armazenados na variável amostra, para que sejam utilizados após isso no processo de encontro do valor quadrático médio.

for(i = 0; i < 200; i++)
{
  tensaoPROTO[i] = (amostras[i] * 0.004882812) - 2.5;
  
  tensaoREAL[i] = tensaoPROTO[i] * 221.73;

  tensaoREAL[i] = tensaoREAL[i] * tensaoREAL[i];
  soma = tensaoREAL[i] + soma;
}

De início, é feito a conversão de número decimal binário para o valor real de tensão de 0 à 5V, multiplicando-o por 0,004882812, que equivale a 5 dividido por 1024.Após isso, é necessário subtrair este valor por 2,5, que equivale ao valor da tensão de offset que foi adicionado propositalmente para que o arduino pudesse ler os semiciclos negativos da forma de onda da tensão.

tensaoPROTO[i] = (amostras[i] * 0.004882812) - 2.5;

O próximo passo consiste em realizar um cálculo que corresponde a proporção dos valores na protoboard com os valores reais da tensão elétrica.

Como foi explicado anteriormente, o valor de pico que o resistor R3 terá será de 0,81 mV, e isso nos quer dizer que quando a tensão sobre o primário do transformador for de 127 V, o valor de pico sobre o resistor R3 será de 0,81 mV. Com esta informação, podemos traçar uma regra de três que fará a proporção conforme ocorra variação dos valores instantâneos colhidos pelo pino A0, já que a proporção entre os valores de pico será a mesma para todas as outras amostras. Desse modo, é realizado o seguinte cálculo:

(127 × √2)     -     0,81 mV

                                            x     -     valor da amostra lida

Realizando a multiplicação em forma de x, podemos ver que o valor da amostra lida será multiplicado pela divisão de 179,60 (127 × √2) por 0,00081. Realizando essa divisão, teremos o seguinte valor:

(127 × √2) ÷ 0,00081

221,73

Logo, para convertermos o valor correspondente a tensão sobre o resistor R3 para a tensão equivalente no transformador, basta multiplicarmos esse valor por 221,73, e é isso que o código faz, como mostrado logo abaixo.

tensaoREAL[i] = tensaoPROTO[i] * 221.73;

Concluído esse processo, o cálculo que deve ser realizado agora corresponde a raiz da média quadrática, no qual sua fórmula pode ser visualizada logo abaixo.

Fórmula da raiz média quadrática

Com isso, a primeira coisa a ser feita é a elevação ao quadrado de cada termo dentro do vetor, no qual esse processo pode ser visualizado abaixo.

tensaoREAL[i] = tensaoREAL[i] * tensaoREAL[i];

Após isso é necessário realizar a soma de todos os termos presentes no vetor, e para isso foi realizado o seguinte comando:

soma = tensaoREAL[i] + soma;

E com isso terminamos o último laço for do código.

- Descobrindo o valor RMS

Dando prosseguimento ao processo citado no tópico anterior, é necessário dividir a soma de todos os termos pelo número de termos (que equivale a 200, o número total de amostras presente no vetor) e realizar a raiz quadrada dessa divisão. O comando sqrt() é responsável por efetuar o cálculo da raiz quadrada na programação de arduino.

tensaoRMS = soma / 200;
tensaoRMS = sqrt(tensaoRMS);

- Mostrando no monitor serial

É realizado o print do valor RMS da tensão no monitor serial.

Serial.print("Tensao: ");
Serial.println(tensaoRMS);
 
Serial.println("");

E com isso, encerramos as explicações a respeito do hardware e software deste tutorial.


Considerações finais

Esperamos que este tutorial tenha lhe acrescentado conhecimento tanto na área da eletrônica assim como na área de programação.

Obrigado pela atenção e continuem buscando conhecimento no portal Vida de Silício.


Primeiros passos com Firebase - ESP8266

Primeiros passos com Firebase - ESP8266

Neste tutorial vamos fazer um circuito que permita observar a temperatura e umidade de um sensor via internet, mostrando como podemos receber sinais de um sensor DHT22 que chegam a um ESP8266 e enviá-los pela internet para uma plataforma Firebase, fazendo uma aplicação bem simples de Internet das Coisas, a famosa IoT , do inglês Internet of Things.

 

kit robotica educacional com Arduino ESP ou Microbit

O que é o Firebase?

O Firebase, produto oferecido atualmente pela Google e utilizado por empresas em todo o mundo, que integra um conjunto de tecnologias disponíveis em diversas linguagens, entregando serviços como:

  • Banco de dados armazenados em nuvem e sincronizados em tempo real;
  • Autenticação de usuários, inclusive por meio de login em provedores como Google e Facebook;
  • Facilitação na hospedagem web;
  • Pode ser usado para testes e manutenção durante o desenvolvimento dos seus apps, assim como o monitoramento dos mesmos.

Com as muitas ferramentas e serviços disponíveis pela plataforma, o desenvolvimento de apps, se torna mais ágil e problemas comuns são resolvidos mais facilmente.

A possibilidade de criar um único SDK contendo APIs do Firebase para uso tanto em Android, como também no iOS e na web é uma das facilidades oferecidas a desenvolvedores, assim como a implementação de bate-papo na aplicação e a viabilidade de testes AB, melhorando a experiência do usuário.

Há recursos também para expansão e envolvimento do público com a sua aplicação, tal como o conhecido Google Analytics, Slack e PlayStore, por exemplo.

No campo da IoT, quando tem-se objetos e aparelhos físicos conectados e em comunicação por meio da internet, também há espaço para o Firebase. Combinados os serviços oferecidos com microcontroladores, como o Arduino, são inúmeras as possibilidades de aplicações, seja em monitoramento de sensores para telemetria, ou em vertíveis (wearables), tecnologias que podem ser vestidas, como relógios inteligentes, por exemplo.

O que é IoT?

IoT, que vem do inglês "Internet of Things", refere-se à conexão da Internet com objetos do dia a dia, permitindo que estes coletem e troquem dados entre si. Basicamente, trata-se de dispositivos que, anteriormente, não tinham capacidade de conexão com a internet, como geladeiras, lâmpadas, relógios, agora estarem conectados à web para coletar e trocar dados, otimizando e automatizando processos.

O que é SDK?

SDK, que é a sigla para "Software Development Kit", refere-se a um conjunto de ferramentas de software que permitem aos desenvolvedores criar aplicações para uma determinada plataforma ou framework específico. O SDK fornece uma série de bibliotecas, guias, documentações, código e outras ferramentas para facilitar o desenvolvimento.

O que é API?

API, que significa "Application Programming Interface", é um conjunto de regras e protocolos que permite a comunicação entre diferentes software. Pode ser entendida como uma ponte que permite que diferentes programas de software se comuniquem entre si. As APIs são essenciais para permitir a integração de sistemas, permitindo que aplicativos e plataformas trabalhem em conjunto.

O que é um banco de dados?

Um banco de dados é um sistema estruturado de armazenamento que permite a coleta, organização, armazenamento e recuperação de dados. Estes dados podem ser de diversos tipos, como textos, números, imagens, entre outros. Os bancos de dados são fundamentais para sistemas e aplicações, pois fornecem uma maneira organizada de gerenciar grandes volumes de informações.

O que são Vestíveis ou wearables?

Vestíveis, ou "wearables", são tecnologias que podem ser usadas como peças de vestuário ou acessórios, como relógios, pulseiras, óculos, entre outros. Estes dispositivos normalmente possuem sensores e estão conectados à internet, coletando e fornecendo dados em tempo real para os usuários. Exemplos populares incluem relógios inteligentes, óculos de realidade aumentada e fones de ouvido inteligentes.


Mãos à Obra - Usando o Firebase em projetos de IoT

Vamos explorar algumas funcionalidades do Firebase com um exemplo prático de um circuito teste, entendendo o código necessário para um projeto simples!

Neste tutorial vamos fazer um circuito que permita observar a temperatura e umidade de um sensor via internet. Utilizaremos um DHT22, que age como um sensor de temperatura e umidade, porém você pode aplicar a outros sensores para obter diferentes informação que você deseja obter podem ser diferentes.

Componentes necessários

Montando o projeto

A montagem deve ser feita seguindo o esquema:

Ilustração do circuito e sua montagem

Olhando o DHT de frente, para a parte onde há aberturas e é feita a leitura, usa-se o pino 1 (mais à esquerda) para alimentação e o pino 4 (mais à direita) como terra.  Eles devem ser ligados, respectivamente, ao Vin e ao Gnd do ESP. Ainda seguindo essa lógica, o pino 2 do DHT deve ser ligado a uma porta digital do ESP que, no caso, foi a porta digital 5 (pino D5 do ESP). O pino 2 também deve ser ligado à alimentação (Vin) com um resistor de 10K entre eles.

Veja como ficou no nosso projeto:

Criando um banco de dados na Firebase

Entre os serviços oferecidos pelo Firebase está o Realtime Database que, como o próprio nome já diz, é um banco de dados que armazena e sincroniza dados em tempo real. Estruturalmente, ele é um banco NoSQL hospedado em nuvem, o que nos livra da necessidade de configurar servidores. Outra grande vantagem é a facilidade de integrá-lo em aplicações, seja em aplicativos iOS, Android e até Web, como é o nosso caso.

Para criar o banco:

a) Acesse a console em https://firebase.google.com  e faça login com uma conta Google.

b) Na próxima tela, adicione um novo projeto.

c) No menu à esquerda, escolha Database, depois Realtime Database e coloque modo público. Dessa forma você terá o banco e a URL que será usada para acessá-lo.

d) O último passo é o segredo do banco, uma espécie de senha. No menu lateral, é preciso clicar na engrenagem, ao lado de ‘Project Overview’ > Configurações do Projeto > Contas de serviço > Chaves secretas do banco de dados. Clicando em mostrar, o segredo pode ser obtido.

Programando

- Configurando a Arduino IDE para NodeMCU

Acesse o caminho Arquivo > Preferências e insira a URL http://arduino.esp8266.com/stable/package_esp8266com_index.json, como descrito nas fotos abaixo.

Feito isso, clique em OK e as placas esp8266 já estarão disponíveis no gerenciador de placas pelo caminho Ferramentas > Placa > Gerenciador de Placas > Instalar ‘esp8266 by ESP8266 Community’.

- Adicionando bibliotecas na Arduino IDE:

Biblioteca do Firebase

Para instalar a biblioteca do Firebase, primeiro é preciso baixá-la do GitHub: (https://github.com/googlesamples/firebase-arduino/archive/master.zip). Depois, é só acessar a Arduino IDE, adicioná-la seguindo o caminho Sketch > Incluir Biblioteca > Adicionar Biblioteca .ZIP e escolher o arquivo que foi baixado.

Biblioteca do DHT

O DTH é uma família de sensores de temperatura e umidade. O modelo que vamos utilizar aqui é o DHT22, que permite distinguir temperaturas na amplitude de -40°C até 80°C. É preciso instalar duas bibliotecas: a ‘Common sensor library’ (https://github.com/adafruit/Adafruit_Sensor) e a ‘DHT Sensor Library’ (https://github.com/adafruit/DHT-sensor-library), e incluí-las na IDE do arduino, assim como feito anteriormente.

- Escrevendo o código

O código do ESP precisa de certas alterações:

  • FIREBASE_HOST: forneça a URL do banco criado anteriormente.
  • FIREBASE_AUTH: forneça o Segredo do seu banco no Firebase.
  • WIFI_SSID e WIFI_PASSWORD: dados da sua rede WiFi.

Uma prática comum na programação são os comentários. No código abaixo, os comentários (indicados por "//") explicitam o significado e funcionalidade de cada trecho.

// Inclusão das bibliotecas necessárias
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#include <Ticker.h>

// Parâmetros do banco
#define FIREBASE_HOST "URL_do_banco"
#define FIREBASE_AUTH "Segredo_do_banco"

//Parâmetros da rede
#define WIFI_SSID "SSID"
#define WIFI_PASSWORD "Password"
#define DHT_PIN D5
#define DHTTYPE DHT22

// Intervalos de publicação. Configurado a cada 30 segundos
#define PUBLISH_INTERVAL 1000*30
DHT dht(DHT_PIN, DHTTYPE);
Ticker ticker;
bool publishNewState = true;

void publish(){
  publishNewState = true;
}

void setupPins(){
  dht.begin(); 
}

void setupWifi(){
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
	Serial.print(".");
	delay(500);
  }

  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
}

void setupFirebase(){
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}

void setup() {
  Serial.begin(115200);
  setupPins();
  setupWifi();	
  setupFirebase();
  // Registra o ticker para publicar de tempos em tempos
  ticker.attach_ms(PUBLISH_INTERVAL, publish);
}

void loop() {
  // Apenas publique quando passar o tempo determinado
  if(publishNewState){
	Serial.println("Publish new State");
	// Obtem os dados do sensor DHT
	float humidity = dht.readHumidity();
	float temperature = dht.readTemperature();
	if(!isnan(humidity) && !isnan(temperature)){
  	// Manda para o firebase
  	Firebase.pushFloat("temperature", temperature);
  	Firebase.pushFloat("humidity", humidity);	
  	publishNewState = false;
	}else{
  	Serial.println("Error Publishing");
	}
  }
 
  delay(200);
}

Pelo Serial Monitor da Arduino IDE será possível ver a conexão com a internet, o endereço IP associado e as publicações de valores no banco. Cada ‘Publish new state’ é uma nova instância de dado gerada e armazenada no Firebase. Esses dados são gerados de acordo com a constante PUBLISH_INTERVAL e o valor é passado em milisegundos. No nosso exemplo, para cada 30 segundos o valor é de 1000*30.

Na console do firebase podem ser vistos os valores que estão sendo lidos:

 


1, 2, 3, Testando...

Vamos criar um site simples, utilizando as tecnologias web padrão HTML5, CSS3 e Javacript e hospedando-o diretamente no Firebase Hosting, outro serviço também muito lindo oferecido pelo Firebase.

 

- Ferramentas e configurações necessárias

Para fazer deploy da aplicação no Firebaseprecisamos instalar o firebase-tools, que é uma ferramenta de linha de comando para gerenciar o banco de dados e hosting de aplicações dentro da própria plataforma. Essa ferramenta é baseada em NodeJS, então precisamos da ferramenta instalada. Baixe o NodeJS no site oficial. Junto também será instalado o gerenciador de pacotes — NPM (similar ao PIP para Python).

Feito isso, é só rodar o comando no terminal: npm install -g firebase-tools

Ao final da instalação rode o comando a seguir e coloque suas credenciais do Firebase:

firebase login

 

- Programação

Crie uma pasta para o seu projeto e utilize o seguinte comando dentro da pasta:

firebase init

Assim, você estará vinculando a pasta ao projeto criado no console do Firebase, então escolha corretamente o projeto criado anteriormente. Uma pasta public será criada, onde ficarão os arquivos que podem ser hospedados no Firebase e acessados na web e também alguns arquivos de configuração do próprio projeto.

Há ainda um servidor embutido no firebase-tools. Dessa forma, estando na pasta, você também pode rodar firebase serve, para iniciar um servidor web na pasta public, na porta 5000 por padrão.

Usando a IDE da sua preferência, utilize o código de exemplo da aplicação que pode ser encontrado nesse link (app.js e o front-end em index.html). Para adequar a aplicação ao seu projeto no Firebase, deve-se alterar o começo do arquivo app.js, com as configurações do console do projeto no Firebase, seguindo os passos:

  1. Clique em Overview no menu lateral
  2. Clique em “Adicionar o Firebase ao seu aplicativo da Web”
  3. Copie o trecho dentro da segunda tag <script> e substitua pelo código correspondente no arquivo app.js

Feito isso, é só dar deploy da aplicação no hosting do Firebase. Rode o comando firebase deploy, assim você vai enviar os arquivos da pasta public pra lá e será mostrado um link para que você acesse sua aplicação online.

A aplicação deve se parecer com isso:


Considerações finais

Sobreviveu?

Simmm, acabou! Tudo certo até aqui? Finalizado este tutorial, você tem uma aplicação web que une um sensor a serviços do Firebase, contando com dados em tempo real e guardados em nuvem, ou seja, você tem uma aplicação de IoT. Esperamos que você tenha gostado e, caso tenha usado um sensor diferente, tenha sugestões, críticas ou elogios, não deixe de comentar abaixo (:


Controle de Tensão AC com Arduino e TRIAC

Controle de Tensão AC utilizando Arduino e TRIAC

Neste tutorial, ensinaremos a você como controlar o valor de tensão de cargas AC utilizando arduino, no qual será possível ver o resultado observando a variação de luminosidade de uma lâmpada incandescente. Para o controle de potência será utilizado um componente chamado TRIAC, no qual será abordado sobre seu funcionamento e aplicação no decorrer desse tutorial.

Esse tipo de controle é amplamente utilizado, desde controlar a temperatura de uma estufa, até controlar a velocidade de algum equipamento. Ventiladores de teto que possuem a opção de mudar sua velocidade por meio de um potenciômetro apresentam um sistema no qual também é empregado o controle de potência, onde chamamos o sistema que pode efetuar esse controle de dimmer.

Dimmer de ventilador

Antes de irmos para a parte prática de montagem e programação do arduino, devemos entender alguns conceitos que nos farão compreender a fundo o que está ocorrendo, possibilitando fazer melhorias e corrigir possíveis problemas que o circuito apresentar. Começaremos falando sobre o que é Corrente Alternada.

kit robotica educacional com Arduino ESP ou Microbit

Corrente Alternada (AC)

Defini-se como a corrente elétrica no qual ocorre a mudança no sentido da corrente em função do tempo, assumindo valores tanto positivos quanto negativos. Sua forma de onda em grande parte das situações se assemelha a uma senoide, como pode ser visto logo abaixo. Isso se deve ao fato de a forma de onda da tensão variar de maneira que se assemelhe a uma senoide, e como a corrente assume valores em função da relação V = R · I, a corrente acaba assumindo uma forma semelhante.

Senoide correspondendo a forma de onda da corrente

Potência Elétrica

É definida como a quantidade de energia consumida em uma determinada variação do tempo. É dado em Watts (W), que corresponde a quantidade de energia por segundo (joule/segundo).

Potência = Tensão · Corrente

Quando se trata de circuitos de corrente alternada, a potência elétrica se divide em três outras grandezas elétricas, que são: potência ativa, reativa e aparente.

Triângulo das potências

Potência Ativa

É a parte da potência convertida em trabalho de fato. Corresponde ao que foi realmente consumido para a realização do que foi proposto. Sua unidade de medida é em W (Watts) e sua fórmula é dada por:

P = V · I · cosΦ

Potência Reativa

Corresponde a parte da potência que é perdida nas excitações de campos magnéticos e elétricos. Sua unidade de medida é em VAr (Volt Ampère reativo).

Q = V · I · senΦ

Potência Aparente

Trata-se da potência total consumida pela carga. Corresponde a soma vetorial das potências ativa e reativa. Sua unidade de medida é em VA (Volt Ampère) e sua fórmula é dada por:

S = V · I

Fator de Potência

Dentro da área da elétrica, existem termos dados a certas características que os circuitos apresentam, que são eles: resistivo, capacitivo e indutivo.

Circuitos resistivos são compostos basicamente por resistores, no qual eles não apresentam nenhuma influência sobre as formas de onda da corrente e da tensão.

Formas de onda em um circuito puramente resistivo

Circuitos capacitivos são compostos por capacitores, e apresentam a característica de afetar a forma de onda da corrente de tal forma que faça com que ela seja 90º adiantada em relação a tensão. Ou seja, as formas de onda agora apresentam uma defasagem entre si, no qual a forma de onda da tensão está defasada (atrasada) em 90º da forma de onda da corrente.

Formas de onda em um circuito puramente capacitivo

Circuitos indutivos são compostos por indutores, e apresentam um comportamento semelhando ao do circuito capacitivo, porém com uma diferença, de que agora a corrente é que está defasada em 90º da forma de onda da tensão.

Formas de onda em um circuito puramente indutivo

Esse ângulo de defasagem entre a forma de onda da tensão e corrente dá origem ao que chamamos de Fator de Potência, que equivale ao cosseno do ângulo de defasagem entre a tensão e a corrente.

O que são Controladores de Tensão AC?

Consiste em um circuito que controla a tensão, possibilitando controlar indiretamente a corrente e a potência de uma carga AC por meio de dispositivos semicondutores de potência, como: SCR, TRIAC, Mosfet, IGBT. Por meio do controle do valor da tensão de entrada, é possível controlar a potência média entregue a carga, e com isso controlar certas ações de equipamentos.

Exemplo de formas de onda após a ação de um semicondutor de potência

Esse controle é efetuado distorcendo a forma de onda entregue a carga, como a imagem indica logo acima, no qual definindo o ângulo de disparo, parte da forma de onda antes do disparo "sumirá", pois o TRIAC não estará em condução, fazendo com que a tensão média entregue a carga diminua.

Com isso encerramos a parte teórica introdutória ao tutorial. Mais ao final do tutorial serão feitas explicações mais profundas a respeito dos acontecimentos ocorridos no circuito.

Mãos à obra - Controlando a Luminosidade de uma Lâmpada Incandescente

Componentes necessários

Para a realização da atividade prática proposta por esse tutorial, serão necessários:

  • 1 x Arduino;
  • 1 x Protoboard;
  • 1 x TRIAC;
  • "" x resistores de ""Ω;
  • "" x capacitores de ""μF;
  • Jumpers.

O modelo de TRIAC utilizado é o BTA41 600b. Seu datasheet pode ser visto clicando aqui.

Montando o projeto

 

Programando

 

Colocando pra funcionar

 


Entendendo a fundo

Hardware

Neste tópico serão abordados os componentes utilizados no circuito bem como suas características.

TRIAC

É um dispositivo semicondutor capaz de controlar a passagem de corrente em dois sentidos. Possui o comportamento semelhante a dois SCRs ligados em antiparalelo, no qual ele só passará a conduzir corrente entre os terminais A1 e A2 quando houver um pulso de corrente no terminal do gate. O TRIAC para de conduzir assim que a tensão entre seus terminais cair abaixo da tensão de manutenção (próximo de zero). Clique aqui para visualizar o datasheet do componente.

TRIAC modelo BTA41 600b

O controle de tensão é feito atuando diretamente na forma de onda da tensão, no qual por meio de um semicondutor de potência é possível deformar a forma de onda, alterando com isso os valores de corrente e tensão da carga. Tomemos como exemplo a senoide e o circuito de exemplo logo abaixo.

Forma de onda senoidal
Circuito de exemplo

Por meio do controle da condução de corrente AC, o TRIAC

Optoacoplador

É um dispositivo isolador óptico no qual apresenta um LED e um fototransistor internamente, onde quando há passagem de corrente pelo LED, fará com que o fototransistor passe a conduzir.

Optoacoplador modelo 4N26
Representação de um optoacoplador

Detecção da Passagem por Zero

Agora que sabemos que o TRIAC deixa de conduzir no momento em que a tensão cai para abaixo da tensão de manutenção, sabemos que a cada mudança de semiciclo (positivo para negativo e vice-versa) o TRIAC deixará de conduzir, retornando ao funcionamento aós um pulso de corrente no gate. Com isso, devemos estabelecer um sistema de controle em que após o TRIAC parar de conduzir, o arduino permita com que ele volte a conduzir.

Uma forma de solucionarmos isso é por meio de um circuito de detecção de zero, no qual esse circuito indicará ao arduino o momento em que a forma de onda passa pela tensão de 0 V, mostrando que o TRIAC deixou de conduzir, permitindo ao arduino acionar novamente o TRIAC no ângulo desejado.

O circuito de detecção de zero desenvolvido para este tutorial pode ser visualizado logo abaixo.

(CIRCUITO DETECTOR DE ZERO)

--- Explicação ---

Circuito para Disparo do TRIAC

Software

Considerações finais


Medindo Tensão AC com Módulo GBK P8 e Arduino

Medindo Tensão Elétrica AC com Módulo GBK P8 e Arduino

Neste tutorial vamos aprender como medir a tensão da rede elétrica utilizando o sensor de tensão GBK P8 em conjunto com um Arduino UNO.

[toc]

Módulo GBK P8

Em alguns projetos, é necessário medir grandezas elétricas em algum aparelho ou circuito, para monitorar condições de funcionamento, prevenir falhas, ou medir seu consumo de energia.

O módulo Sensor de Tensão GBK P8 é uma opção para medição de tensão elétrica. A placa é baseada num optoacoplador (TIL 116) e com ela é possível realizar a medição de tensões de 127 até 220 V.

Imagem do módulo GBK P8

kit robotica educacional com Arduino ESP ou Microbit


Mãos à obra - Medindo Tensão AC com Módulo Sensor de Tensão GBK P8

Componentes necessários

Neste projeto, vamos monitorar o valor de tensão de um equipamento para verificar se ele está ligado ou desligado. Para isso, precisaremos de:

Montando o projeto

A placa possui três terminais, que estão identificados, como a figura abaixo.

 

Pinagem do sensor de tensão AC

Os três terminais são:

  • +5Vcc, é o pino de alimentação, que é ligado ao 5 V do Arduino
  • gnd, é o terminal de 0 V, ligado no GND do Arduino
  • Out, que será conectado no do Arduino

ATENÇÃO! Ao realizar este projeto, você estará trabalhado diretamente com tensões maiores que o habitual. Nesse nível de tensão, um choque elétrico pode causar danos a você e ao seu equipamento.

Se você está em dúvida sobre como proceder nessa parte, peça ajuda a alguém que saiba como trabalhar com segurança.

A montagem fica assim:

 

Esquema de ligação sensor de tensão com Arduino

 

Programando

Após conectarmos o Arduino ao computador e abrirmos sua IDE, selecionamos o modelo da placa que estamos usando - no caso, Arduino UNO - e selecionamos a porta de conexão dele com o computador.

Escreva na IDE o seguinte código:

#define gbk A0

const int R1 = 220000;
const int R2 = 10000;
int valorLido = 0;
float acum = 0;
float v1 = 0;

void setup() {
  Serial.begin(9600);
}

void tensaoCalculo() {
  valorLido = analogRead(gbk);
  v1 = valorLido * 0.004882812;
  acum = v1 / (R2 / (R2 + R1));
  if(acum == 0) {
    Serial.println("Aparelho desconectado da tomada");
    Serial.println("");
  } else {
    Serial.println("Aparelho conectado a tomada");
    Serial.print("Tensao = ");
    Serial.print(acum);
    Serial.println(" V");
    Serial.println("");
  }
}

void loop() {
  tensaoCalculo();
  delay(1000);
}

Colocando pra funcionar

ATENÇÃO! Ao realizar este projeto, você estará trabalhado diretamente com tensões maiores que o habitual. Nesse nível de tensão, um choque elétrico pode causar danos a você e ao seu equipamento.

Se você está em dúvida sobre como proceder nessa parte, peça ajuda a alguém que saiba como trabalhar com segurança.

Após dar upload do código ao Arduino, conectamos o módulo em PARALELO ao dispositivo. No nosso caso, adaptamos uma extensão para ligar direto na rede elétrica em tensão AC.

IMAGEM LIGAÇÃO EXTENSÃO E SENSOR

Depois de concluir todos os passos, o Arduino deve imprimir a seguinte mensagem no monitor serial: "Aparelho desconectado da tomada". Agora conecte a extensão na tomada e veja o resultado no monitor serial.

IMAGEM MONITOR SERIAL

Através da saída analógica do sensor de tensão AC o Arduino consegue dizer quando o aparelho está conectado a tomada e informar a tensão elétrica.

Entendendo o Módulo GBK P8

Hardware

O módulo GBK é composto por um optoacoplador, resistores e um capacitor. O esquema de ligação pode ser visto logo abaixo.

(esquemático GBK P8)

Por estar conectado em paralelo com a tomada, entre os terminais de conexão da rede elétrica haverá uma diferença de potencial interligados por um resistor de 220 kΩ (como visto no esquemático acima), com isso, circulará uma corrente com valor bem reduzido por esse resistor. Essa corrente passará também pela entrada do optoacoplador TIL116.

Optoacoplador TIL116
O esquemático interno do TIL 116

Na entrada do optoacoplador existe um diodo infravermelho, que emite luz quando há corrente. Essa luz chega ao fototransistor do acoplador, chaveando corrente e criando um sinal de tensão em sua saída.

Forma de onda antes do capacitor

A forma de onda da saída do optoacoplador seria a um retificador de meia onda, permitindo corrente apenas nos ciclos positivos de corrente. Entretanto, a presença do capacitor no circuito altera o sinal, descarregando para o circuito no ciclo negativo, criando uma tensão de ripple com menos variação.

Forma de onda após o capacitor

Software

Vamos explicar os trechos do código, para que você entenda por completo o que está sendo feito, e possa modificar o que for necessário no seu projeto.

- Variáveis do programa

O programa inicia com a definição de uma constante para o compilador: onde aparecer gbk o compilador interpreta como A0, que é o pino da leitura analógica. A vantagem desse recurso é que se o pino for alterado fisicamente depois, basta fazer a alteração em apenas um lugar do código, o que é bem útil em programas muito grandes.

Depois são declaradas algumas variáveis e constantes que ficarão na memória. R1 e R2 são constantes que armazenam os valores das resistências do módulo. A variável valorLido armazena a leitura analógica do pino A0, que vem do módulo. As variáveis v1 e acum são utilizadas no cálculo da tensão.

#define gbk A0

const int R1 = 220000;
const int R2 = 10000;
int valorLido = 0;
float acum = 0;
float v1 = 0;

- As definições no setup

No setup acontece a inicialização da comunicação serial, para a utilização do monitor serial

Serial.begin(9600);

- A função de cálculo da tensão

A função que calcula a tensão, com base na leitura analógica, é chamada logo no início da função loop.

void tensaoCalculo() {
  valorLido = analogRead(gbk);
  v1 = valorLido * 0.004882812;
  acum = v1 / (R2 / (R2 + R1));
  if(acum == 0) {
    Serial.println("Aparelho desconectado da tomada");
    Serial.println("");
  } else {
    Serial.println("Aparelho conectado a tomada");
    Serial.print("Tensao = ");
    Serial.print(acum);
    Serial.println(" V");
   Serial.println("");
  }
}

Ela inicia fazendo a leitura analógica do pino A0 e armazenando na variável valorLido. Em sequência, faz a conversão da leitura, que vai de 0 a 1023, para um valor de tensão, que vai de 0 a 5 V. A conversão é feita multiplicando o valorLido por 0,004882812. Esse valor é equivalente a 5/1024, e representa quanto vale em volts cada inteiro da leitura analógica. A multiplicação então, converte a leitura analógica para um valor de tensão.

valorLido = analogRead(gbk);
v1 = valorLido * 0.004882812;

Depois, se faz o cálculo de quanto a tensão lida representa no valor real. A tensão lida no sensor é uma tensão de 0 a 5 V, na saída de um divisor de tensão. Para o valor real, a tensão faz o cálculo inverso ao do divisor de tensão:

acum = v1 / (R2 / (R2 + R1));

 

 

- Declarando a função tensaoCalculo()

Antes de iniciar o void loop(), é necessário declarar a função que será chamada por ele.

void tensaoCalculo()

- Lendo os dados do pino A0

É armazenado o valor lido no pino A0 na variável do tipo inteiro "valorLido".

valorLido = analogRead(A0);

- Convertendo para tensão

Multiplica-se o valor lido na entrada analógica por 0,00482812 para descobrir o valor da tensão da entrada analógica do arduino.

v1 = valorLido * 0.004882812;

Considerações finais

Esperamos que este tutorial tenha ajudado a entender como utilizar o Módulo Sensor de Tensão GBK P8, e como utilizá-lo em projetos para medir tensão da rede elétrica, ou de dispositivos ligados em tensão AC.

Deixe nos comentários suas dúvidas. Críticas e sugestões também são muito bem vindas.

Até o próximo!


Módulo ACS712 - Medindo Corrente Elétrica Alternada e Contínua com Arduino

Módulo ACS712 - Medindo Corrente Elétrica Alternada e Contínua com Arduino

Neste tutorial você aprenderá como medir corrente elétrica alternada utilizando o  módulo sensor de corrente ACS712 juntamente com um Arduino. Para isso, realizaremos a medição do valor de corrente de um motor universal monofásico, com o objetivo de monitorar seu consumo de energia. Recomendamos a você que leia os tópicos introdutórios do tutorial SCT-013 - Sensor de Corrente Alternada com Arduino, pois, além de serem abordados os conceitos à respeito da medição de corrente, também são vistos os conceitos relacionados à Potência Elétrica, os quais, que serão utilizados neste tutorial. 

Apesar de abordarmos como medir corrente alternada, a medição de corrente Contínua é muito semelhante e será comentada em um tópico ao final do tutorial.

[toc]

kit robotica educacional com Arduino ESP ou Microbit

Sensor de corrente ACS712

O ACS712 é um pequeno sensor de corrente invasivo para baixas e médias correntes com alta sensibilidade e baixo custo. Ele é capaz de medir valores de corrente continua e alternada.

O ACS712 é um sensor de efeito Hall que gera uma saída de tensão proporcional a corrente que flui entre os pinos IP+ e  IP- do sensor.

Chip sensor ACS712
Chip sensor ACS712

Por usar o efeito Hall, o circuito do sensor ficar isolado eletricamente do circuito cujo o qual se está aferindo a corrente.

Existem diversos modelos do ACS712 com diferentes limites de medição de corrente, como podemos ver na tabela abaixo.

Tabela de opções sensores de corrente ACS712

As informações que serão importantes para nós são: os modelos (Part Number), a temperatura de operação em graus Celsius (TA), a corrente máxima a ser medida em Ampères (Optimized Range) e a relação de mV/A (Sensitivity, Sens). As informações completas podem ser consultadas no datasheet do fabricante.

O Módulo sensor de corrente ACS712

O módulo ACS712 nada mais é que um placa com o ACS712 e tudo que é preciso para usá-lo de maneira mais simples. Lembrando que este é um sensor de corrente invasivo, onde é necessário interromper o circuito para que ele seja instalado. Para este tutorial, será utilizado o módulo ACS712 30A, que por sua vez, consegue ler valores de corrente de até 30 Ampères.

Caso esteja usando o módulo ACS712 5A você precisa levar em conta a sensibilidade dele e fazer a devida alteração no código do Arduino.

Imagem do Módulo sensor de corrente ACS712
Imagem do Módulo sensor de corrente ACS712

Efeito hall

O ACS712 utiliza do efeito Hall para realizar a interface entre a corrente real do circuito com o Arduino, no qual, segundo preleciona Thomazini no livro Sensores Industriais:

"O efeito Hall caracteriza-se basicamente pelo aparecimento de um campo elétrico transversal em um condutor percorrido por uma corrente elétrica, quando ele se encontra mergulhado em um campo magnético".

Os sensores por efeito Hall são constituídos por dispositivos semicondutores que sofrem influência de campo magnético. Quando colocamos esse dispositivo semicondutor em série com a fonte e a carga, ocorre a passagem de elétrons por meio dele.

Passagem de corrente elétrica por um material semicondutor

Ao adicionarmos um campo magnético perpendicular ao movimento dos elétrons, surge uma força magnética, chamada de força de Lorentz.

Adição de um campo magnético

Sob influência dessa força, os elétrons livres não se moverão mais de forma retilínea, mas se concentrarão na direção da força magnética.

Regra da mão direita, indicando o sentido da força magnética
Concentração dos elétrons livres na parte superior do material semicondutor

Essa concentração faz surgir um potencial negativo, logo, na parte onde houver falta desses elétrons, surgirá o potencial negativo. Dessa forma, haverá uma diferença de potencial entre essas extremidades que será proporcional ao valor de corrente que está passando pelo material semicondutor. Com isso, medindo a tensão entre essas extremidades e por meio de cálculos, é possível descobrir o valor de corrente.


Mãos à Obra - Medindo Corrente Elétrica Alternada com Módulo ACS712 30A

Componentes necessários

Para a realização deste tutorial serão necessários:

Além desses itens, utilizaremos um pequeno motor universal monofásico para realizar a medição da corrente inerente ao funcionamento da mesma e também da potência consumida estipulada.

Montando o projeto

Por se tratar de um sensor de corrente invasivo, é necessário realizar a interrupção do circuito para que o ACS712 possa ser conectado ao circuito, como vemos abaixo.

Após isso, conectamos a alimentação (5V e GND) do ACS712 no arduino, e o pino OUT conectamos ao pino analógico A0, de acordo com o diagrama abaixo.

Programando

Após concluir a montagem descrita acima, basta dar upload no código abaixo para o arduino, no qual a explicação detalhada de cada linha poderá ser vista no tópico "Entendendo a fundo/Software". Lembre-se de selecionar a placa e a porta que está utilizando corretamente.

float vetCorrente[300];

void setup()
{
  Serial.begin(9600);
  pinMode(A0, INPUT);
}

void loop()
{
  double maior_Valor = 0;
  double valor_Corrente = 0;  

  float tensao = 127;
  float potencia = 0;

  for(int i = 0; i < 300; i++)
  {
    vetCorrente[i] = analogRead(A0);
    delayMicroseconds(600);
  }  

  for(int i = 0; i < 300; i++)
  {
    if(maior_Valor < vetCorrente[i])
    {
      maior_Valor = vetCorrente[i];
    }
  }  

  maior_Valor = maior_Valor * 0.004882812;
  valor_Corrente = maior_Valor - 2.5;
  valor_Corrente = valor_Corrente * 1000;
  valor_Corrente = valor_Corrente / 66;         //sensibilidade : 66mV/A para ACS712 30A / 185mV/A para ACS712 5A
  valor_Corrente = valor_Corrente / 1.41421356;

  Serial.print("Corrente = ");
  Serial.print(valor_Corrente);
  Serial.println(" A");

  potencia = valor_Corrente * tensao;

  Serial.print("Potencia = ");
  Serial.print(potencia);
  Serial.println(" W");
  
  Serial.print(".");
  delay(500);
  Serial.print(".");
  delay(500);
  Serial.print(".");
  delay(500);

  Serial.println("");
}

Colocando pra funcionar

Código compilado e circuito montado! Veja o resultado abaixo.

Resultado da montagem prática
Valores mostrados no monitor serial

Entendendo a fundo

Neste tópico serão tratados o funcionamento de cada parte do projeto deste tutorial, onde veremos os cálculos realizados pelo arduino para chegar ao valor de corrente correto.

Hardware

O circuito integrado ACS712 é fabricado pela Allegro MicroSystems, no qual é possível visualizar sua pinagem na imagen logo abaixo.

Pinagem do circuito integrado ACS712
  • IP+ / IP- : são os terminais que serão conectados em série com a carga. É por onde a corrente elétrica irá fluir.
  • VIOUT: corresponde ao pino de saída do sensor. Ele irá representar a forma de onda da corrente proporcional a sua entrada, no qual a sua proporcionalidade é definida pelo modelo que será utilizado. A forma de onda em sua saída apresentará um offset de 2,5V.
  • FILTER: terminal no qual será conectado um capacitor que definirá a largura de banda.
  • VCC / GND: correspondem aos terminais de alimentação do circuito integrado.

Logo abaixo é mostrado o circuito típico de suas aplicações.

Circuito do sensor ACS712

Software

A programação será responsável por, primeiramente, realizar várias leituras do pino analógico, no qual o ACS712 está conectado, durante um período de tempo, assim, podemos ter uma noção dos valores que constituem a senoide da corrente. Com esses valores, o arduino poderá calcular o valor de pico da senoide, no qual o mesmo equivale ao maior valor da amostra encontrada, e após isso, basta dividir esse valor por √2, segundo a seguinte fórmula:

Irms = Ipico / √2

Assim, conseguiremos descobrir o valor rms (eficaz) da corrente passando pelo condutor no qual o ACS712 está conectado.

Agora será explicado a função de cada linha presente no código apresentado no tópico "Programando".

- Criando um vetor

Inicialmente é criado um vetor que será utilizado para armazenar 300 amostras de valores que serão lidos adiante.

float vetCorrente[300];

- Aquisição das amostras por meio de uma estrutura de repetição

É criado um "for" para que o arduino possa armazenar vários valores de corrente durante um determinado instante de tempo.

for(int i = 0; i < 300; i++)
{
  vetCorrente[i] = analogRead(A0);
  delayMicroseconds(600);
}

- Encontrando o maior valor de amostra do vetor "vetCorrente[300]"

Cria-se outro laço "for" para que o arduino possa encontrar, entre as 300 amostras, a que apresente o maior valor.

for(int i = 0; i < 300; i++)
{
  if(maior_Valor < vetCorrente[i])
  {
    maior_Valor = vetCorrente[i];
  }
}

- Calculando o valor da corrente

No primeiro instante é necessário converter o valor encontrado, que se encontra entre 0 e 1023, para o valor de tensão lido pelo arduino. Para isso, por meio de uma regra de 3 simples, é possível encontrar o valor de tensão.

1024     -     5

(valor da amostra)     -     x

Seguindo essa regra de 3, é possível descobrir que basta multiplicar o valor da amostra por 0,004882812 para encontrar o valor da tensão lido pelo arduino.

maior_Valor = maior_Valor * 0.004882812;

- Removendo o valor de offset das amostras

A forma de onda resultante na saída do módulo ACS712 equivale a uma senoide com uma tensão de offset, como podemos ver abaixo.

Exemplo da forma de onda da saída do módulo ACS712

Seguindo seu datasheet, o valor da tensão de offset (equivalente ao zero da forma de onda senoidal da corrente) é proporcional ao valor de VCC * 0,5, que no nosso caso seria:

Voffset = VCC * 0,5

Voffset = 5 * 0,5

Voffset = 2,5 V

Por esse motivo foi necessário diminuirmos o valor de tensão encontrado por 2,5, como é indicado logo abaixo.

valor_Corrente = maior_Valor - 2.5;

- Convertendo para mili

O datasheet deste módulo apresenta os valores de sensibilidade de mV/A, com isso, foi necessário converter os valores de V para mV, para que o arduino possa calcular o valor da corrente adiante.

valor_Corrente = valor_Corrente * 1000;

- Encontrando o valor de pico da corrente

Agora dividiremos o resultado pelo valor equivalente a sensibilidade do sensor. Como visto anteriormente, existem diferentes modelos de ACS712, no qual o que foi utilizado neste tutorial é o ACS712ELCTR-30A-T, conhecido como ACS712 30A, no qual consultando seu datasheet foi possível encontrar o valor de sensibilidade de mV/A, que corresponde a 66 mV/A.

valor_Corrente = valor_Corrente / 66;

Caso o seu ACS712 seja de outro modelo, substitua o valor "66" pelo valor que corresponda a sensibilidade do seu módulo. Para o ACS712 5A, por exemplo, você precisa mudar para 185.

- Calculando o valor rms da corrente

Achado o valor de pico, é possível calcular o valor rms da corrente, finalizando assim o código referente a corrente.

valor_Corrente = valor_Corrente / 1.41421356;

- Mostrando o resultado no monitor serial

É mostrado os valores de corrente e potência no monitor serial, para que você possa visualizá-los.

Serial.print("Corrente = ");
Serial.print(valor_Corrente);
Serial.println(" A");

Serial.print("Potencia = ");
Serial.print(potencia);
Serial.println(" W");

É dado um tempo para a próxima atualização dos valores.

Serial.print(".");
delay(500);
Serial.print(".");
delay(500);
Serial.print(".");
delay(500);

Medindo corrente contínua

Uma vantagem deste sensor é que com ele você poderá medir também o valor da corrente de cargas DC, ou seja, do mesmo modo que ele pode ser empregado para medir corrente alternada, ele também pode ser empregado para medir corrente contínua.  Para isso, basta mudarmos algumas linhas da programação referentes ao vetor de amostras vetCorrente[300]. Abaixo é detalhado as alterações que deverão ser feitas.

Ao invés de encontrarmos o maior valor presente no vetor, como foi descrito no tópico Encontrando o maior valor de amostra do vetor "vetCorrente[300]" logo acima, teremos que realizar um cálculo de média aritmética com todos os valores.

Veja abaixo o código a ser retirado.

for(int i = 0; i < 300; i++)
{
  if(maior_Valor < vetCorrente[i])
  {
    maior_Valor = vetCorrente[i];
  }
}

maior_Valor = maior_Valor * 0.004882812;
valor_Corrente = maior_Valor - 2.5;

Em seu lugar, colocaremos o seguinte código.

int somaTotal;

for(int i = 0; i < 300; i++)
{
  somaTotal = vetCorrente[i] + somatorio;
}

valor_medio = somaTotal / 300;

valor_medio = valor_medio * 0.004882812;
valor_Corrente = valor_medio - 2.5;

Além disso, devemos retirar a seguinte linha do código:

valor_Corrente = valor_Corrente / 1.41421356;

Retirar essa linha se faz necessário pois ela converter o valor de pico da corrente para o valor rms, mas, por estarmos tratando de corrente contínua, isso não é necessário.

Essas modificações surtirão no seguinte efeito:

  • Por meio do laço for será realizado a soma de todos os valores presentes no vetor vetCorrente[300], e armazenando o resultado na variável somaTotal;
  • É realizado a divisão da variável somaTotal pelo número 300, encerrando assim o cálculo da média aritmética;
  • As linhas seguintes serão responsáveis por converter o valor achado até o momento no valor de corrente realmente lido.

O código final com essas alterações pode ser visualizado logo abaixo.

float vetCorrente[300];

void setup()
{
  Serial.begin(9600);
  pinMode(A0, INPUT);
}

void loop()
{
  double maior_Valor = 0;
  double valor_Corrente = 0;  

  float tensao = 127;
  float potencia = 0;

  for(int i = 0; i < 300; i++)
  {
    vetCorrente[i] = analogRead(A0);
    delayMicroseconds(600);
  }  



  int somaTotal = 0;

  for(int i = 0; i < 300; i++)
  {
    somaTotal = vetCorrente[i] + somaTotal;
  }
  valor_medio = somaTotal / 300;
  
  valor_medio = valor_medio * 0.004882812;
  valor_Corrente = valor_medio - 2.5;



  valor_Corrente = valor_Corrente * 1000;
  valor_Corrente = valor_Corrente / 66;         //sensibilidade : 66mV/A para ACS712 30A / 185mV/A para ACS712 5A

  Serial.print("Corrente = ");
  Serial.print(valor_Corrente);
  Serial.println(" A");

  potencia = valor_Corrente * tensao;

  Serial.print("Potencia = ");
  Serial.print(potencia);
  Serial.println(" W");
  
  Serial.print(".");
  delay(500);
  Serial.print(".");
  delay(500);
  Serial.print(".");
  delay(500);

  Serial.println("");
}

Com essas alterações, você poderá medir a corrente de sua carga DC tranquilamente.


Considerações finais

Esperamos que este tutorial tenha tanto trazido-lhe o entendimento a respeito do módulo ACS712 quanto tirado suas dúvidas sobre esse sensor de corrente.


Como utilizar o LED RGB com Arduino

Como utilizar o LED RGB

Neste tutorial, você aprenderá como utilizar o LED RGB integrado a uma placa Arduino Uno, utilizando as saídas PWM para demonstrar as cores emitidas do componente. Por meio do monitor serial, o Arduino lerá o nome da cor escrita pelo usuário e, por meio do LED RGB, a cor digitada será reproduzida.

Caso ainda não tenha conhecimento básico sobre como usar o monitor serial da Arduino IDE, sugerimos que você leia o tutorial Comunicação Serial Arduino, para compreender melhor o projeto a ser desenvolvido, principalmente na parte de software.

[toc]

kit robotica educacional com Arduino ESP ou Microbit

O que é um LED? O que significa o termo "LED"?

LED é uma sigla para Light Emitting Diode que em português significa Diodo Emissor de Luz. O LED é um componente eletrônico que, quando ocorre passagem de corrente elétrica, emite luz. Possui dois terminais, chamados de anodo (positivo) e catodo (negativo).

Identificação dos terminais e simbologia

Por que utilizar um LED?

É sempre bom termos um auxílio visual nos nossos projetos, seja como sinalizador ou alarme, indicando que algo está ligado ou não, como os encontrados em televisores, aparelhos de DVD, computadores, dentre outros, ou por opções de design de produto, como podemos ver logo abaixo.

Exemplo de aplicação do LED RGB

Ou seja, um LED é uma forma visual simples de um projeto conversar conosco. Outra forma visual de um projeto interagir é através de displays LCDs.

Falamos um pouco mais sobre a importância das interfaces homem maquina (IHM) no tutorial Display lcd 16x2 com Arduino.

O que é um LED RGB?

Assim como os LEDs tradicionais, o LED RGB emite luz por meio da passagem de corrente elétrica, mas ele apresenta a peculiaridade de ser composto por três LEDs de cores diferentes, sendo elas: vermelho (Red), verde (Green) e azul (Blue), surgindo daí o nome "RGB".

LED RGB
LED RGB

Cada LED pode ser controlado de maneira individual, conectando apenas os seus terminais em alguma fonte de energia, deixando os outros desconectados, mas o seu grande diferencial está em justamente utilizar os três ao mesmo tempo, no qual utilizando pulsos PWM (recomendamos que veja o tutorial Arduino - Grandezas digitais, analógicas e PWM) para realizar o controle de intensidade de cada cor individualmente, de modo que, a cor resultante será a mistura das cores emitidas por cada LED.

Demonstração do resultado da mistura de intensidades diferentes das cores: vermelho, verde e azul

Tipos de LED RGB

Por se tratar da associação de três LEDs distintos em um único LED, eles podem ser denominados de: catodo comum ou anodo comum, sendo o catodo comum o mais utilizado.

Descrição dos pinos LED RGB
Descrição dos pinos

O tipo catodo comum possui uma interligação entre os catodos dos três LEDs, fazendo com que se torne apenas um. Já o tipo anodo comum apresenta uma interligação entre os anodos dos três LEDs, tornando-o apenas um, como é possível visualizar na figura abaixo.

Tipos de LED RGB
Tipos de LED RGB

Para identificar o terminal que equivale ao comum, basta ver qual terminal é o maior, ou ver qual está conectado a maior "placa" presente no interior do LED, como é possível ver na ilustração abaixo.

Identificação de cada pino RGB
Identificação de cada pino

Mãos à obra - Comandando a cor a ser mostrada no LED RGB pelo Monitor Serial

O projeto deste tutorial visa integrar o monitor serial com o LED RGB, no qual o usuário enviará o nome de uma cor e o Arduino reproduzirá essa cor por meio do LED. Para este fim, serão necessários:

Montando o hardware

Com os componentes em mãos, montaremos o circuito abaixo.

Circuito montado em protoboard com Arduino Uno e LED RGB
Circuito montado em protoboard

Programando

Após montar o circuito na protoboard, damos início a parte de programação do arduino. Escreva em sua IDE o código apresentado abaixo. Não se preocupe, a explicação detalhada de cada linha será abordado logo abaixo.

const int azul = 9;
const int verde = 10;
const int vermelho = 11;

String cor;

void setup()
{
   Serial.begin(9600);
  
   pinMode(azul, OUTPUT);
   pinMode(verde, OUTPUT);
   pinMode(vermelho, OUTPUT);
}

//Funções responsáveis por executar o brilho selecionado
void vermelhoFuncao(){
  digitalWrite(azul, LOW);
  digitalWrite(verde, LOW);
  digitalWrite(vermelho, HIGH);
}
void azulFuncao(){
  digitalWrite(azul, HIGH);
  digitalWrite(verde, LOW);
  digitalWrite(vermelho, LOW);
}
void verdeFuncao(){
  digitalWrite(azul, LOW);
  digitalWrite(verde, HIGH);
  digitalWrite(vermelho, LOW);
}
void amareloFuncao(){
  analogWrite(azul, 0);
  analogWrite(verde, 50);
  analogWrite(vermelho, 255);
}
void roxoFuncao(){
  analogWrite(azul, 207);
  analogWrite(verde, 0);
  analogWrite(vermelho, 255);
}
void brancoFuncao(){
  digitalWrite(azul, HIGH);
  digitalWrite(verde, HIGH);
  digitalWrite(vermelho, HIGH);
}


void loop()
{
  if(Serial.available()){
    cor = Serial.readString();
    Serial.println(cor);
  }

  if(cor == "Vermelho"){
    vermelhoFuncao();
  }
  if(cor == "Azul"){
    azulFuncao();
  }
  if(cor == "Verde"){
    verdeFuncao();
  }
  if(cor == "Amarelo"){
    amareloFuncao();
  }
  if(cor == "Roxo"){
    roxoFuncao();
  }
  if(cor == "Branco"){
    brancoFuncao();
  } 
}

Depois de passar o código acima para a sua IDE, verifique se a porta no qual o arduino está conectado está selecionada. Com tudo pronto, basta carregar o código para o arduino.

Colocando para funcionar

Agora vamos conferir o resultado deste projeto!

Resultado da montagem prática

Entendendo a fundo

Hardware

- Como funciona

Quanto ao funcionamento específico do LED, recomendamentos que veja o artigo Como funcionam os LEDs, do Instituto Newton Braga, no qual ele explica o funcionamento dos LEDs de maneira geral comparando-o  com a lâmpada incandescente.

- Montagem na protoboard

Relacionado a montagem, é composto apenas por resistores e um LED RGB, no qual os resistores estão presentes apenas para limitar o valor da corrente que circulará pelo circuito, pois sem ele a corrente poderia danificar o LED, ocasionando falha no funcionamento. Logo abaixo está o esquema eletrônico do projeto desenvolvido no tutorial de hoje.

Esquema eletrônico

Software

Neste tópico abordaremos cada instrução realizada pelo nosso código citado acima.

- Declarando as variáveis

São criadas quatro variáveis no código, três do tipo inteiro e uma do tipo string. O termo "const" utilizado antes do termo "int" foi empregado para dizer ao programa que a variável não sofrerá modificação em seu valor, ou seja, ela permanecerá com o mesmo valor no programa. Isso foi utilizado para declarar os pinos responsáveis pelas saídas que comandarão os terminais do LED RGB.

A String cor foi criada com o objetivo de ser armazenado nela a palavra que for escrita no monitor serial.

const int azul = 9;
const int verde = 10;
const int vermelho = 11;

String cor;

Caso queira utilizar outros pinos para comandar seu LED RGB, lembre-se de utilizar somente os que possuem saída PWM.

- Configurações no void setup()

É iniciada a comunicação serial de 9600 bps (relembrando, caso você tenha dúvidas sobre como utilizar a comunicação serial, veja o tutorial Comunicação Serial Arduino). São declarados os pinos 'azul', 'verde' e 'vermelho' (no qual anteriormente foi atribuído a eles o valor que corresponde ao pino) como OUTPUT, ou seja, como saída.

void setup()
{
   Serial.begin(9600);
  
   pinMode(azul, OUTPUT);
   pinMode(verde, OUTPUT);
   pinMode(vermelho, OUTPUT);
}

- Criando funções para comandar o LED RGB

Nesta parte do código são criadas funções que tem por função comandar os terminais do LED RGB. Todas são iniciadas com void pois não retornarão nenhum valor para a função principal.

void vermelhoFuncao(){
  digitalWrite(azul, LOW);
  digitalWrite(verde, LOW);
  digitalWrite(vermelho, HIGH);
}
void azulFuncao(){
  digitalWrite(azul, HIGH);
  digitalWrite(verde, LOW);
  digitalWrite(vermelho, LOW);
}
void verdeFuncao(){
  digitalWrite(azul, LOW);
  digitalWrite(verde, HIGH);
  digitalWrite(vermelho, LOW);
}
void amareloFuncao(){
  analogWrite(azul, 0);
  analogWrite(verde, 50);
  analogWrite(vermelho, 255);
}
void roxoFuncao(){
  analogWrite(azul, 207);
  analogWrite(verde, 0);
  analogWrite(vermelho, 255);
}
void brancoFuncao(){
  digitalWrite(azul, HIGH);
  digitalWrite(verde, HIGH);
  digitalWrite(vermelho, HIGH);
}

- Recebendo e armazenando a string de entrada

É verificado se há algum termo a ser lido do monitor serial. Caso haja, o termo é armazenado na variável cor. Logo após o armazenamento, é realizado um print no monitor serial do que foi recebido.

if(Serial.available()){
   cor = Serial.readString();
   Serial.println(cor);
}

- Verificação do termo recebido

É realizada uma série de comparações para verificar o que foi recebido do monitor serial. As cores disponíveis para serem mostradas pelo LED RGB são: Vermelho, Azul, Verde, Amarelo, Roxo e Branco. Caso haja a confirmação que o que foi escrito corresponde a uma das opções, é chamada uma função específica para a realização do comando do LED RGB.

if(cor == "Vermelho"){
  vermelhoFuncao();
}
if(cor == "Azul"){
  azulFuncao();
}
if(cor == "Verde"){
  verdeFuncao();
}
if(cor == "Amarelo"){
  amareloFuncao();
}
if(cor == "Roxo"){
  roxoFuncao();
}
if(cor == "Branco"){
  brancoFuncao();
}

Considerações finais

Esperamos que este tutorial tenha lhe esclarecido sobre a utilização deste componente eletrônico tão utilizado na área de desenvolvimento eletrônico.

Obrigado pela atenção e continue buscando conhecimento no portal do Vida de Silício.


Robô seguidor de linha

Robô seguidor de linha

Neste tutorial vamos aprender a fazer um robô seguidor de linha utilizando o sensor de obstaculo infravermelho (Você poderá usar o Módulo Segue Faixa - TCRT5000) em conjunto com um Arduino.

Robô seguidor de linha em competição

Para melhor entendimento deste tutorial é necessário que você já tenha um conhecimento prévio sobre Arduino e ponte H. Mas não se preocupe pois nossa equipe já produziu outros tutoriais sobre esse assuntos e você pode conferir alguns destes nos seguintes links: Entradas e Saídas Analógicas e Módulo Ponte H L298n .

[toc]

kit robotica educacional com Arduino ESP ou Microbit

A importância do robô seguidor de linha

O robô seguidor de linha, também conhecido como seguidor de faixa, é um projeto bem famoso entre os apaixonados por robótica. Quase sempre é o primeiro projeto de robótica móvel.

Em todo o mundo, competições de robótica possuem modalidades únicas  para o seguidor de linha, o que faz deste projeto algo que nunca irá deixar de ser melhorado.

Seu projeto envolve conceitos de dimensionamento de energia, controle de motores, programação de embarcados, entre outros.

Esses mesmos conceitos são levados para projetos maiores e mais complexos, tanto acadêmicos quanto industriais.

Robô seguidor de linha em uma industria
Exemplo de aplicação industrial de um robô seguidor de linha

Robôs seguidores de linha na industria

As aplicações industriais são bem diversificadas. Os robôs que gerenciam o estoque da grande rede de varejos Alibaba, começaram a funcionar com os princípios do seguidor de linha.

Eles manejavam as prateleiras de produtos dentro do estoque por meio de orientação de faixas no chão. Sua função era transportar os materiais de um lado para outro, seja para reajustar o estoque ou para levar para uma área de exportação.

Atualmente o Alibaba evoluiu os robôs, de forma que eles se comunicam, e se localizam, por meio de IA (Inteligência Artificial).

Centro de distribuição do Alibaba com uso de robô
Centro de distribuição do Alibaba

 


Como um robô seguidor de linha funciona ?

O funcionamento do robô seguidor de linha é simples. Ele deve seguir andando por cima de uma linha de cor preta (fita isolante) ou branca.

Os circuitos podem alternar entre as cores do campo e da faixa, no nosso caso iremos assumir que a pista é branca e a faixa é preta.

Usaremos 2 sensores infravermelho que detectam a presença ou não desta faixa. De acordo com a combinação dos sensores, o carrinho irá para frente ou virar para um dos lados.

Funcionamento do sensor infravermelho

O módulo sensor de obstáculo infravermelho IR é bem simples. Ele emite uma luz infravermelha por um LED negro e capta o reflexo com um LED receptor (LED claro).

Como sabemos, a luz reflete em superfícies claras e é absorvida em superfícies negras, como a fita isolante. Sendo assim o LED receptor irá detectar a luz infravermelha no branco e não detectar no preto.

Para uma melhor eficácia do sensor, a superfície em contraste com a faixa preta deve ser branca. Para ajustar a sensibilidade ao contraste, o modulo possui um potenciômetro de calibração.

sensor infravermelho
Funcionamento do sensor infravermelho

Diferença entre sensores infravermelho obstaculo e o TCRT5000

Você pode usar diferentes sensores infravermelhos para o projeto seguidor de linha, o que você precisa levar em conta é as especificações de cada um.

Um sensor infravermelho amplamente utilizado é o TCRT5000, que tem como vantagem seu tamanho e preço. Porem, ele precisa está próximo ao chão para que seja capaz de identificar a faixa, uma vez que seu alcance é de até 8mm. Entretanto, ele possui a vantagem de sofrer menos interferências de luzes infravermelhas externas.

Sensor de linha TCRT5000
Módulo Sensor de linha TCRT5000

Em contrapartida, a vantagem de usar o sensor de obstaculo é o seu maior alcance possuir ajuste, porem ele é mais suscetível a interferências das luzes ambientes.

Sensor de obstáculo infravermelho
Sensor de obstáculo infravermelho

Nesse tutorial, usaremos o sensor de obstaculo infravermelho. Dessa forma, caso esteja usando o TCRT5000, fique atento com a distância do chão. Ele precisa ficar com uma distância entre 1mm e 8mm para ser capaz de detectar a faixa.

Controlando motores com Ponte H

Quando lidamos com controle de cargas que consomem grande quantidade de energia, é importante que essas cargas sejam controladas com circuitos que separem o circuito de controle do circuito de potência.

Para controlar motores, é comum usarmos um circuito chamado ponte H, ele é capaz por controlar o sentido de giro do motor e a sua velocidade, usando o PWM.

PWM

PWM (Pulse Width Modulation – Modulação por Largura de Pulso) é uma técnica para obter resultados analógicos por meios digitais (Leia mais sobre Grandezas digitais e analógicas e PWM).

Essa técnica consiste na geração de uma onda quadrada em uma frequência muito alta em que pode ser controlada a porcentagem do tempo em que a onda permanece em nível lógico alto, alterando, assim, a tensão média.

Por exemplo, se a saída é de 5V, porem ela fica apenas 50% do tempo em 5V e outros 50% do tempo em nível lógico baixo, isso resulta em uma tensão média de 2,5V (50% x 5V).

Dessa forma, esta variável de tempo é capaz de controlar de velocidade do nosso carrinho alterando a tensão média aplicada no motor.

Os valores de PWM variam de 0 (parado) até 255 (velocidade máxima ou 5 V).

Controlando a velocidade do motor através da Ponte H

Existem varias opções de Ponte H, nesse tutorial usaremos o módulo Ponte H com CI L298N que dispões de duas pontes H, sendo capaz assim de controlar dois motores.

Cada ponte H possui um pino que ativa ou não a ponte H. Caso tenha um sinal de 5V aplicado nele, a ponte estará ligada, caso seja 0V a ponte estará desligada. Como temos 2 pontes H, temos o Enable A(Ativa A) e o Enable B (Ativa B).

Normalmente os Enables A e B ficam em curto com um sinal de 5V da placa através de um jumper.

Jumpers Enable A e B

Se retiramos esse jumper e inserimos um sinal PWM nessas entradas, modularemos a tensão que é enviada para o motor. Isso ocorre porque a ponte H só ira “funcionar” enquanto o sinal de Enable estiver com 5V, assim teremos o mesmo efeito de tensão média explicado anteriormente.

Apesar de a ponte H ser controlada por um sinal de 5V, elá pode chavear uma tensão diferente. Podemos, por exemplo, controlar uma tensão de 6V, vindo de um conjunto de 4 pilhas AA. Nesse caso, apesar de o sinal PWM ser de 5V ele modulará os 6V nos motores.

A descrição completa sobre como funciona uma ponte H L298N e como controlar a velocidade de um motor usando uma ponte H L298N pode ser visto nos nossos tutoriais sobre os respectivos assuntos.

 


Montado um robô seguidor de linha com sensor infravermelho

A partir de agora iremos mostrar como montar o seu próprio robô seguidor de linha.

Componentes Necessários

Para este projeto iremos utilizar:

 

Montando o projeto do robô seguidor de linha

Abaixo segue um esquema de ligações e montagem ELETRÔNICA do projeto:

Este projeto possui um procedimento de montagem complexo devido ao fato da necessidade de termos que passar vários fios por um espaço limitado ao tamanho do chassi do seu carrinho.

Calibração do Sensor infravermelho

Ao usar o sensor infravermelho, seja o sensor de obstaculo ou o TCRT5000, você precisa calibrar o sensor para que seja capaz de detectar adequadamente a mudança de cor entre preto e branco.

No vídeo a segui eu mostramos como fazer essa calibração.

Programando o controle do Robô seguidor de linha

A programação do projeto é bem simples. O carrinho precisa fazer a leitura dos sensores e definir pra qual  lado ele deve ir, somente isso, até por que um programa muito extenso pode prejudicar o rendimento.

/*DECLARAÇÃO DE VARIAVEIS*/
#define MotorA_sentido1 2
#define MotorA_sentido2 4
#define MotorB_sentido1 8
#define MotorB_sentido2 9
#define MotorA_PWM 3  
#define MotorB_PWM 10  

#define veloc0 0
#define veloc1 80
#define veloc2 180
#define veloc3 255

#define Sensor_direita 6
#define Sensor_esquerda 7

bool direita, esquerda;

void setup() {
  Serial.begin(9600);
  pinMode(MotorA_sentido1, OUTPUT);
  pinMode(MotorA_sentido2, OUTPUT);
  pinMode(MotorB_sentido1, OUTPUT);
  pinMode(MotorB_sentido2, OUTPUT);
  pinMode(MotorA_PWM, OUTPUT);
  pinMode(MotorB_PWM, OUTPUT);
  pinMode(Sensor_direita, INPUT);
  pinMode(Sensor_esquerda, INPUT);
  
}

void loop() {
   //Define o sentido de rotação dos motores
  digitalWrite(MotorA_sentido1, LOW);
  digitalWrite(MotorA_sentido2, HIGH);
  digitalWrite(MotorB_sentido1, HIGH);
  digitalWrite(MotorB_sentido2, LOW);
  
  //Leituras dos Sensores
  direita = digitalRead(Sensor_direita);
  esquerda = digitalRead(Sensor_esquerda);
  Serial.print(direita);
  Serial.print(" || ");
  Serial.println(esquerda);

  //Rodando os motores dependendo das leituras
 if(direita == false && esquerda == false){
 analogWrite(MotorA_PWM, veloc2);
 analogWrite(MotorB_PWM, veloc2);
 } else if(direita == false && esquerda == true){
 delay(400);
 analogWrite(MotorA_PWM, veloc2);
 analogWrite(MotorB_PWM, veloc1);
 delay(400);
 }else if(direita == true && esquerda == false){
 delay(400);
 analogWrite(MotorA_PWM, veloc1);
 analogWrite(MotorB_PWM, veloc2);
 delay(400);
 
 }else if(direita == true && esquerda == true){
 analogWrite(MotorA_PWM, veloc0);
 analogWrite(MotorB_PWM, veloc0);
 }
}

Colocando o Robô seguidor de linha para funcionar

Agora é só por o carrinho pra rodar na pista !

Robô seguidor de linha montado
Robô seguidor de linha montado

 

Problemas comuns e como resolver

Vale notar que ele pode não fazer o percurso de primeira, o que significa que ajustes devem ser feitos no código ou ate mesmo no hardware. Alguns problemas comuns de acontecer:

  • Bateria fraca - Os testes podem ter consumido a bateria e talvez seja necessário o uso de uma nova. Baterias abaixo de 6,5 Volts já começam a diminuir a eficiência do carrinho.
  • Carrinho saindo da pista - Isso pode acontecer por ele estar rápido de mais ou por falha do infravermelho. Em caso de ele estar muito rápido basta trocar a velocidade dos motores em cada situação, o nosso código já possui outras velocidades definidas no cabeçalho. Se o problema for com o contraste da pista (talvez parte dela esteja mais escura) use 2 LEDs de alto brilho na frente do carrinho para iluminar a pista próximo aos sensores. Os LEDs podem ir conectados diretos no 5 V do arduino (lembrando de por um resistor de 300Ohms).
  • Carrinho não roda - Este é um problema complexo, pois podem ser infinitas possibilidades. Tente isolar os componentes e testar 1 por 1, principalmente os motores e a ponte H. Em alguns casos pode ser problemas de aterramento da bateria também.

Entendendo a fundo o Software

Declaração de Variáveis

Na primeira parte do código é feita a declaração das variáveis a serem utilizadas. Nota-se que a existe um grande numero de variáveis utilizando #define, isto é por conta de serem apenas nomes associados a números, não precisamos fazer contas com essas variáveis, portanto elas não precisam ser do tipo INT, FLOAT, entre outras.

O fato de declarar algo por meio de #define ocupa menos espaço de memória, o que dá um ganho na velocidade de execução do programa. As únicas variáveis a serem definidas por um tipo são as que armazenarão os valores lidos dos sensores (direita e esquerda), essas variáveis são do tipo bool e portanto só assumem dois estados (FALSE e TRUE).

/*DECLARAÇÃO DE VARIAVEIS*/
#define MotorA_sentido1 2
#define MotorA_sentido2 4
#define MotorB_sentido1 8
#define MotorB_sentido2 9
#define MotorA_PWM 3  
#define MotorB_PWM 10  

#define veloc0 0
#define veloc1 80
#define veloc2 180
#define veloc3 255

#define Sensor_direita 6
#define Sensor_esquerda 7

bool direita, esquerda;

Cada motor possui 3 pinos: 2 para definir o sentido de rotação da roda (IN1 e IN2 / IN3 e IN4) e 1 pra definir a velocidade de rotação (Enable A / Enable B)por meio de valores PWM. Lembre-se de que os pinos de velocidade devem conter o "~" desenhado ao lado da porta na placa Arduino, caracterizando o pino como PWM.

Declaramos também 4 velocidades de PWM que podem ser interpretadas como PARADO, DEVAGAR, NORMAL e RÁPIDO, respectivamente. Os sensores foram definidos em suas respectivas portas digitais(6 e 7) e por fim, foram declaradas 2 variáveis do tipo BOOL para armazenar os valores dos sensores.

Função Void Setup()

A função void setup, que roda apenas uma vez, defini todas as configurações necessárias para funcionamento do sistema.

void setup() {
  Serial.begin(9600);
  pinMode(MotorA_sentido1, OUTPUT);
  pinMode(MotorA_sentido2, OUTPUT);
  pinMode(MotorB_sentido1, OUTPUT);
  pinMode(MotorB_sentido2, OUTPUT);
  pinMode(MotorA_PWM, OUTPUT);
  pinMode(MotorB_PWM, OUTPUT);
  pinMode(Sensor_direita, INPUT);
  pinMode(Sensor_esquerda, INPUT);
  
}

Nesta função declaramos as variáveis que definem os pinos utilizados no Arduino como sendo Entrada(INPUT) ou Saída(OUTPUT). Além disso colocamos a função Serial.begin() que inicializa a comunicação serial entre o Arduino e o computador.

MAS O CARRINHO NÃO RODA LIGADO NA BATERIA ?!?!?! Sim, porém precisamos fazer testes antes de executar a versão final, para isso utilizamos alguns comandos via serial para poder calibrar sensores, averiguar execução do programa, entre outros.

Função  Void Loop ()

Em seguida temos o loop do nosso programa onde o carrinho ira fazer suas principais funções.

- Definindo sentido de giro dos motores

Primeiro é necessário definir o sentido de rotação das rodas.

//Define o sentido de rotação dos motores
  digitalWrite(MotorA_sentido1, LOW);
  digitalWrite(MotorA_sentido2, HIGH);
  digitalWrite(MotorB_sentido1, HIGH);
  digitalWrite(MotorB_sentido2, LOW);

Nesta parte do código precisamos mandar um sinal alto e um sinal baixo entre os pares de portas IN1/IN2 e IN3/IN4. Como nosso carrinho não anda pra trás nós vamos setar essas configurações para que as rodas girem no mesmo sentido(pra frente no caso).

Veja que os pares no nosso código estão invertidos, isso acontece por que a montagem de hardware foi invertida entre os motores.

É como se os polos fossem trocados de lugar entre os motores, porém lembre-se que motores DC não possuem polaridade definida, logo podemos inverter a ligação + e - sem problemas. Isso altera apenas o sentido para o qual o motor gira. Essa é uma das partes que devem ser testadas antes da montagem final do carrinho.

- Leituras dos Sensores

Adiante, temos as leituras dos sensores infravermelhos e a impressão na serial dos valores lidos. Isso é apenas para verificar se os sensores estão funcionando corretamente, não interferindo no funcionamento final do projeto.

//Leituras dos Sensores
  direita = digitalRead(Sensor_direita);
  esquerda = digitalRead(Sensor_esquerda);
  Serial.print(direita);
  Serial.print(" || ");
  Serial.println(esquerda);

As variáveis do tipo BOOL são utilizadas para armazenar os valores digitais lidos pelos sensores.

- Controlando a direção do robô

Por fim, temos as condições de giro do motor com base no sensores infravermelhos.

//Rodando os motores dependendo das leituras
 if(direita == false && esquerda == false){
 analogWrite(MotorA_PWM, veloc2);
 analogWrite(MotorB_PWM, veloc2);
 } else if(direita == false && esquerda == true){
 delay(400);
 analogWrite(MotorA_PWM, veloc2);
 analogWrite(MotorB_PWM, veloc1);
 delay(400);
 }else if(direita == true && esquerda == false){
 delay(400);
 analogWrite(MotorA_PWM, veloc1);
 analogWrite(MotorB_PWM, veloc2);
 delay(400);
 
 }else if(direita == true && esquerda == true){
 analogWrite(MotorA_PWM, veloc0);
 analogWrite(MotorB_PWM, veloc0);
 }

Para isso, utilizamos as condições IF Else, que são mais comum. São 2 variáveis combinatórias que geram 4 possibilidades, porém a ultima condição é quase "impossível" (true e true), pois seria a leitura dos sensores detectando a faixa preta ao mesmo tempo (como é um erro estranho, o carrinho deve parar).

Os motores estão ligados em portas DIGITAIS mas lembre-se que estamos utilizando valores PWM, logo as funções de comando são do tipo analogWrite(porta, PWM). Para que o carrinho possa ter tempo de verificar o estado dos sensores novamente, alguns delays de curto período são utilizados, mas isso pode variar de projeto para projeto.

Entendendo a fundo o Hardware

O carrinho funciona com uma comunicação entre os sensores, o Arduino e a ponte H controlando os motores.

Através das leituras do sensores enviadas para o Arduino por meio das portas digitais, o controlador irá acionar um motor mais rápido ou mais devagar do que o outro. Os sensores emitem 5 V (faixa preta) ou 0 V(pista branca) para as portas digitais. O Arduino modula os valores de velocidade pelos valores PWM que variam de 0 volts (0) até 5 volts (255), fazendo isso ao longo de todo trajeto.

Observe que utilizamos apenas 1 bateria para todo o sistema. A bateria que alimenta o Arduino pelo pino P4 energiza não somente o controlador como também a ponte H dos motores por meio do pino Vin do Arduino. Esta porta é capaz de emitir valores maiores do que os 5 volts que o regulador de tensão da placa utiliza. Sendo assim a tensão de entrada no pino P4 é a mesma do pino Vin.


Conclusão

Este é um dos projetos mais simples de robótica móvel utilizando Arduino e claro que pode ser melhorando em muitos aspectos.

Algumas sugestões de melhorias são:  controle de velocidade PID, desvio de obstáculos, reconhecimento de pista, machining learning, etc.

Desafio

Crie uma função para o robô desviar de obstáculos e retornar para a pista. O sensor ultrassônico é uma ótima opção para ajudar nesse desafio.


Sensor de Distância Infravermelho Sharp GP2Y0A21YK0F

Sensor de Distância Infravermelho Sharp GP2Y0A21YK0F

Ao desenvolvermos projetos voltados a robótica ou sistemas para detecção de corpos, precisamos sempre utilizar sensores de distância. Estes dispositivos nos permitem detectar obstáculos que possam estar no caminho do nosso robô, ou até mesmo identificar se alguém, ou algum objeto passou, pelo local.  Já vimos em outro tutorial que é possível medir distancias através som, usando, por exemplo, o famoso sensor ultrassônico HC-SR04. Além do som, podemos usar a luz infravermelha para medir distancias, usando, por exemplo, o Sensor Sharp GP2Y0A21YK0F, que é pequeno, robusto e capaz de medir distância com precisão e velocidade surpreendentes. Outra vantagem desse sensor é o fato de sua implementação junto ao Arduino ou outro microcontrolador ser muito simples. Dessa forma, neste tutorial você aprenderá a utilizar o sensor de distância infravermelho da Sharp (10cm a 80cm) em conjunto com um Arduino.

[toc]

kit robotica educacional com Arduino ESP ou Microbit

Sensor infravermelho Sharp GP2Y0A21YK0F

O sensor infravermelho Sharp GP2Y0A21YK0F é um sensor de distância voltado a projetos em que precisamos de uma boa precisão na distância com resposta rápida.

Com uma interface de comunicação bem simples, esse sensor conta com apenas três pinos, sendo dois para alimentação e um para saída. O módulo Sharp GP2Y0A21YK0F é capaz de medir distâncias de 10 cm até 80 cm, fornecendo como saída de dados um valor analógico que é inversamente proporcional a distância lida ( quanto mais longe menor a tensão ).

  • Especificações:
    • Alimentação: 4,5 V até 5,5 Volts
    • Distância: 10 até 80cm
    • Sinal de Saída: Analógico
    • Consumo: Aproximadamente 30 mA

 

Sensor de distância infravermelho Sharp GP2Y0A21YK0F
Sensor infravermelho Sharp GP2Y0A21YK0F

Funcionamento do sensor

O sensor Sharp GP2Y0A21YK0F é composto por basicamente três componentes:

  • Unidade de controle do emissor infravermelho: Responsável por emitir a luz infravermelha. Este conjunto é composto pela unidade de controle e o led emissor. Unidade de processamento de sinais: Responsável por ler o sinal emitido pela unidade emissora. Este conjunto é composto pela unidade  de cálculo de distância e receptor infravermelho.
  • Circuito de saída analógica: Circuito responsável por converter o sinal vindo da unidade de processamento em uma onda analógica equivalente a distância lida.
Estrutura física do circuito responsável por calcular a distância

Para calcular a distância, executa-se o seguinte processo:

  • Inicialmente o módulo de controle do emissor infravermelho é ativo e o led infravermelho dispara um feixe de luz ( invisível ao olho humano) no objeto em questão
Processo de emissão
  • Quando a luz chega até um determinado objeto, uma parte costuma ser absorvida e uma outra parte refletida, sabendo disso, a unidade de processamento de  sinais é capaz de medir a distância baseada na quantidade de luz que foi refletida pelo objeto.
Reflexão
  • Através de cálculos com a luminosidade recebida pelo receptor e algoritmos de triangulação, a unidade de processamento de sinais é capaz de aferir a distância e com o auxílio de um circuito de saída, retornar um valor analógico equivalente a distância lida.
Distancia em valor analógico

 


Mãos à obra - Acionamento de leds baseado na distância

Para ilustrar o funcionamento desse sensor, vamos construir uma aplicação bem simples, onde utilizando dois leds ( azul e vermelho ) iremos definir se um objeto está próximo ou não.

Componentes Necessários

Montando o projeto

A montagem deste projeto é bem simples, pois neste tutorial iremos apenas utilizar duas portas digitais e uma analógica de nosso Arduino. Sabendo disso, a montagem será feita com base no o seguinte esquema de ligação:

Vejam só como ficou a montagem final :)

 

Antes de ligar o seu circuito, verifique se todas as conexões foram feitas corretamente. Um curto circuito causado por uma ligação errada pode danificar todo o seu projeto.

 

Programando

Agora que montamos o nosso projeto, iremos partir para a parte do código. Nesta versão não será necessário o uso de nenhuma biblioteca de terceiros, já que o sensor fornece uma saída analógica que pode ser lida através do método AnalogRead(). Porém, teremos  que fazer um pequeno estudo sob o comportamento do sinal analógico resultante da leitura do sensor, estimando com base em sua onda uma formula fechada que nos informe a distância aproximada com base na leitura realizada. O código abaixo ilustra todo o processo de leitura dos dados.

/* Nome: Acionamento de leds com sensor de distância IR
 * Feito por: Danilo Almeida
 * Data: 20/12/2017
 */

#define pinoAnalogico A0          // Definição do pino Analógico utilizado na leitura do sensor de distância
#define ledAzul 2                 // Definição do pino digital onde iremos ligar o led azul
#define ledVermelho 3             // Definição do pino digital onde iremos ligar o led vermelho
void setup() {
  Serial.begin(9600);             // Inicialização da comunicação serial ( Caso queira ver a distância em cm )
  pinMode(ledAzul,OUTPUT);        // Inicialização do led azul como saída
  pinMode(ledVermelho,OUTPUT);    // Inicialização do led vermelho como saída
  digitalWrite(ledAzul,LOW);      // Inicia o led azul em nível lógico baixo ( desligado )
  digitalWrite(ledVermelho,LOW);  // Inicia o led vermelho em nível lógico alto ( desligado)
}

void loop() {
   // Obtenção do valor em Volts através da formula ( valorAnalógico * (5/1023) )
   double valorVolts = analogRead(pinoAnalogico) * 0.0048828125; 

   // Formula para cálculo da distância levando em consideração o valor em volts
   double distancia = 4800/(valorVolts*200 - 20 ); 
  

   Serial.print(distancia);
   Serial.println(" CM");
   // Se a distância for maior que 20 CM ligamos o led azul e desligamos o led Vermelho
   if (distancia>=20){ 
     digitalWrite(ledAzul,HIGH);
     digitalWrite(ledVermelho,LOW);
   }
   // Caso contrário ligamos o led vermelho e desligamos o azul
   else{ 
     digitalWrite(ledAzul,LOW);
     digitalWrite(ledVermelho,HIGH);
   }

   // Bloqueio de execução por 100 ms
   delay(100); 

}

Colocando pra funcionar

 


Entendendo a Fundo

Software

- Declaração de pinos utilizados

Inicialmente  declaramos todos os pinos que utilizaremos, tanto para leitura do sensor quanto para ligar e delisgar leds. O trecho de código abaixo ilustra a definição dada a cada pino utilizado.

#define pinoAnalogico A0      // Definição do pino Analógico utilizado na leitura do sensor de distância
#define ledAzul 2             // Definição do pino digital onde iremos ligar o led azul
#define ledVermelho 3         // Definição do pino digital onde iremos ligar o led vermelho

- Função Setup

Na função setup iremos configurar os pinos utilizados para ligar e desligar os leds. Iremos também inicializar a comunicação serial para fins de depuração da distância calculada.

void setup() {
  Serial.begin(9600);            // Inicialização da comunicação serial ( Caso queira ver a distância em cm )
  pinMode(ledAzul,OUTPUT);       // Inicialização do led azul como saída
  pinMode(ledVermelho,OUTPUT);   // Inicialização do led vermelho como saída
  digitalWrite(ledAzul,LOW);     // Inicia o led azul em nível lógico baixo ( desligado )
  digitalWrite(ledVermelho,LOW); // Inicia o led vermelho em nível lógico alto ( desligado)
}

- Função loop

Já na função loop faremos todo o processo de leitura e cálculo da distância, baseados na saída analógica fornecida pelo sensor.  Na linha abaixo, realizamos uma conversão do valor vindo do circuito ADC do Arduíno em um valor de tensão equivalente a saída do sensor. Basicamente multiplicamos o valor lido do  ADC pela razão entre o nível de tensão utilizado como referência 5 Volts pela amplitude do circuito ADC, que no caso do Arduíno é 210 .

// Obtenção do valor em Volts através da formula ( valorAnalógico * (5/1023) )
  double valorVolts = analogRead(pinoAnalogico) * 0.0048828125; 

Com o valor em volts em mãos, podemos partir para a equação da distância, que é dada pela seguinte equação:

Onde V0 é o valor em  volts lido na porta analógica e  d é a distância em cm. Essa equação foi obtida através da análise da onda comportamental do circuito na figura abaixo:

Sinal resultante da distância lida pelo sensor.
double distancia = 4800/(valorVolts*200 - 20 ); // Formula para cálculo da distância levando em consideração o valor em volts

Por fim, com a distância calculada verificamos se existe um objeto a menos de 20 cm de distância, caso exista, o led vermelho é aceso e o azul é apagado, caso  contrário o led azul é aceso e o vermelho é apagado.

Serial.print ("Distancia: ");
Serial.println(distancia);  
if (distancia>=20){   // Se a distância  for maior que 20 CM ligamos o led azul e desligamos o led Vermelho
    digitalWrite(ledAzul,HIGH);
    digitalWrite(ledVermelho,LOW);
  }
  else{               // Caso contrário ligamos o led vermelho e desligamos o azul
    digitalWrite(ledAzul,LOW);
    digitalWrite(ledVermelho,HIGH);
  }
delay(100);

Desafio

Agora que você é capaz de acionar e apagar leds apenas com base na distância de um objeto, tente fazer com que outro tipo de dispositivo seja acionado ao se aproximar. Um tipo de acionamento largamente utilizado consiste em acionar um relé ao se aproximar de um sensor de distância, com base nisso, use o artigo Módulo relé - Acionando cargas com Arduino e tente fazer com que um relé acione ao detectar um objeto em uma determinada  distância.Considerações Finais

Este tutorial teve como objetivo apresentar uma ótima alternativa aos sensores ultrassônicos de distância. Através da utilização do sensor Sharp GP2Y0A21YK0F é possível medir pequenas distâncias com uma ótima precisão, o que facilita bastante a elaboração e controle de processos onde necessitamos que a distância medida tenha uma boa precisão e um baixo tempo  de resposta. Espero que tenham gostado do conteúdo apresentado, sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.

Referências

Tudo que foi explicado neste tutorial pode ser encontrado no datasheet do dispositivo, que se encontra no seguinte link: