domingo, 10 de junho de 2018

TEMT6000 vs LDR - Comparação Básica - Vale a pena investir em um sensor?

Medir a intensidade de luz faz sentido, seja para controlar algo (como a cobertura de uma estufa), ou para realmente saber a intensidade da luz, que altera diretamente diversos fatores das plantas. Para isso temos que utilizar sensores, pode ser um profissional, ou apenas um LDR. Mas será que existem grandes diferenças, a enorme discrepância de preços faz sentido?

O preços abaixo são cotados no Mercado Livre, na data da postagem, para o TEMT6000 já com módulo para o Arduino e o LDR sem módulo, de 5mm.

TEMT6000: R$16,90
LDR: R$0,63

Percebemos que existe uma diferença de preços. Claro, o TEMT6000 já vem soldado em um PCB, com três pinos de conexão soldados e o resistor de 10K. O LDR vem o LDR, sem resistor, sem PCB, sem pinos, mas o único custo adicional para usar ele é um resistor, no caso R$0,02. A diferença continua sendo alta.

TEMT6000: Esse é um fototransistor NPN, com teórica precisão maior que o LDR, seu sinal de saída é analógico, variando de acordo com a incidência de luz. Faixa de largura de banda espectral: 360 à 970nm. Fabricado pela Vishay é aplicado normalmente em dispositivos móveis, como celulares, para controle automático do brilho. Datasheet.
Esse sensor é muito pequeno, então é necessário que compre o módulo ponto com ele já soldado. A vishay também produz sensores de luz ambiente de alta precisão, mas estes são estão disponíveis no Brasil e la fora custa 10 dólares ($1,69 avulso) já em módulo (SEN0228), um valor bem mais elevado. Quem sabe no futuro possamos utilizar um destes de excelentes 16bit.

LDR: O LDR também é um fotorresistor, que quando iluminado reduz proporcionalmente sua resistência. Tem muito conteúdo sobre este na internet.

Então, como podemos brincar um pouco com comparações básicas entre esses?

Vamos colocar ambos lado a lado em uma protoboard e fazer algumas leituras. Como o TEMT6000 vem com um resistor de 10K o LDR também foi utilizado com um destes, que já é o padrão para o LDR mesmo.

No primeiro teste posicionei a protoboard para uma janela com cortina fechada, deixei ambos fazendo a leitura do valor a cada três segundos, o ambiente foi deixado vazio, para que a única variação de luminosidade seja a natural do ambiente.

Foram coletados 64 dados, cerca de 3,25 minutos de coleta.

Clique na imagem para ampliar

Dá para perceber que ambos tiveram um comportamento muito semelhante. Mas o TEMT6000 apresentou uma amplitude de 137 e o LDR de 12.

Vale lembrar a respeito dos dados, que ambos tem a tendência a 0 no escuro.

Quando eu aproximei o LED do celular de ambos os sensores o TEMT marcou 1012 e o LDR 1016. 

Bom, o TEMT6000 apresenta uma confiabilidade maior em sua precisão que um LDR, que varia muito sua qualidade de acordo com a fabricação, não padronizada. Assim vale a pena ter um sensor deste para medições, mas não espere grandes diferenças, nem uma precisão tão superior. Quem sabe quando os novos sensores de alta precisão se tornarem mais acessíveis estes apresentem mais diferença.

sábado, 9 de junho de 2018

Opções para se medir temperatura com Arduino


Bom, podemos dizer que em muitas situações em que se precisa medir uma variável ambiental medir a temperatura faz sentido. As vezes ela influencia diretamente na situação, outras ela pode apenas ser a chave para resolver o problema. No ramo das ciências agrárias a temperatura é um fator chave, a cultura precisa ser adaptada a faixa de temperatura, se essa não for ideal podemos ter desde crescimento baixo, atraso de safra, perda de flores até a perda da planta. A temperatura também afeta a umidade, tanto do ar, quanto do solo.

Ok, acho que entendemos que vai ser necessário medir a temperatura. O bom é que temos muitas opções práticas para isso. Foi lendo um artigo no blog do José Cintra que percebi que faz sentido falar um pouco de sensores de temperatura na nossa área, além de fazer uma comparação entre eles.

Como o artigo já exemplifica muito bem os sensores, vou apenas comentar algumas questões sobre a aplicação deles e adicionar outros sensores também.

Termistor: Um NTC custa mais ou menos R$0,68. Para monitoramento é uma ótima opção sim. Se o uso por para monitorar se a temperatura de um ambiente se encontra em uma faixa não tão precisa, um NTC pode ser uma escolha, agora se você precisa saber a temperatura exata desse local o NTC não serve. Ele tem a desvantagem de não ser linear, ou seja, mais cálculos e memória do microcontrolador. Agora para uso encapsulado não vejo vantagens, é caro, não terá a mesma precisão de um sensor profissional, nem funcionar com dois fio é diferencial.

DHT: Muito legal para se capturar temperatura e umidade, o preço é muito baixo, o uso é muito fácil e seu tamanho ótimo. Mas só serve para prototipar a ideia. Não use em um estudo, mas tenha alguns guardados. A versão 22 já é diferente, mudou muito a sua precisão, e para medições de umidade de apresenta como uma opção, apesar de ter outras profissionais. Mas como o assunto aqui é temperatura não faz sentido usar o DHT22, existem outros com a mesma precisão, maior confiabilidade, menor tamanho e principalmente, mais barato.

LM35: Não vejo mais sentido nesse cara, isso porque ele apresenta muitos problemas de ruídos e oscilação de medição. Custar R$3,40 para substituir um NTC não faz sentido. Seu encapsulamento nem é diferencial. Existe uma situação que eu vejo sentido do uso, quando a memória do microcontrolador está tão cheia que não usar biblioteca se torna uma obrigação. Mas se for medir uma temperatura não serve para estudo.

DS18B20: Sobre esse carinha lindo e maravilhoso eu já comentei várias vezes. Para o uso na agronomia ele é lindo, tanto na versão normal quanto encapsulada. As vantagens não vou sem repetir, e ele também é bem estável. Seu preço de R$3,99 então... 

Termopar: Normalmente utilizado para aplicações industriais, por suportar uma faixa de temperatura imensa, principalmente positiva. Sua precisão é impressionante, suporta mais de 1000°C e são apresentados em vários modelos. Por R$20,00 já se compra um tipo K chinês e um módulo para leitura do dado. Para um estudo ele é 100% viável, mas recomendo apenas usar o módulo chinês, comprando um termopar profissional e aferido. Seu módulo para leitura é o MAX6675 de R$16. Vale a pena conhecer ao menos o chinês, em uso de estufas ou estudos com secagem de grãos ele é perfeito.

BMP280: Esse também é legal, porque ele é um sensor de pressão atmosférica, feito para aplicações em dispositivos móveis, principalmente vestíveis. Ele é da Bosch e também apresenta medição de temperatura. Seu tamanho é ridículo de mínimo e pode ser sim uma opção viável em algumas situações, só não tem um preço interessante. A linha BMP também tem outros modelos para uso em drones, para verificar a altura de voo destes.

Dessa turma atualmente eu possuo o DHT11, DHT22, BMP280, DS18B20 (Encapsulado) e o Termopar tipo K. Pensei que seria interessante estudar um pouco o comportamento deles, para verificar sua confiabilidade.

A primeira coisa que eu espero de um sensor é homogeneidade dos dados. Se eu coloco ele em um ambiente com a temperatura fixa eu espero que a leitura dele seja sempre a mesma, não que ela varie. Assim se eu colocar todos os sensores em uma caixa térmica eu espero que eles mostrem a mesma temperatura, com pequenas variações em um tempo curto.

A segunda coisa que eu desejo é precisão nos dados. Quando você coloca uma caixa no sol, de altura baixa para não ter corrente interna de ar, você espera que o gráfico das leituras seja linear, não que a temperatura suba e depois abaixe do nada e suba novamente. Tenho que pensar um pouco mais nisso.

sexta-feira, 1 de junho de 2018

DS18B20 - É confiável? Serve para monitoramento de solo?

O DS18B20 é uma grande opção de termômetro para agrônomos, isso por muitos motivos. O primeiro é suas duas versões, versão padrão (R$4) e a versão encapsulada, submersível em água (R$9). Ele também possui baixo consumo de energia, e pode ter vários sensores ligados em uma única porta digital. Realmente, são muito motivos.

Mas aí vem a dúvida, o DS18B20 é confiável? Ele pode medir a temperatura do solo sem discrepâncias?

Alguns sensores, como o LM35 não possuem grande confiabilidade, mostrando com frequência grandes variações bizarras em suas medidas. O NTC também é uma opção, mas sem a função de um fio, termistor é bem mais caro, e também necessita de módulo e portas.

Para determinar o comportamento do DS18B20 lendo a temperatura do solo eu realizei uma medição simples. Utilizei um NodeMCU 8266, que a cada 20 minutos efetuava a leitura de dois DS18B20 e enviava a temperatura para o ThingsSpeak. 
Um dos sensores foi enterrado em um gramado com grama baixa, a 5cm da superfície o outro foi coloca a sombra, debaixo de uma cadeira que estava ao lado do outro sensor, sem tampar o sol deste. A cadeira ficou exposta ao sol.

Os sensores foram posicionados e uma hora após o posicionamento (para equilíbrio da temperatura) foi feita a primeira medição, às 9hrs da manhã, em que já tinha sol no gramado. A medição encerrou às 17hrs, já sem sol em ambos os sensores.

O comportamento do DS18B20 de solo foi, digamos, exemplar, as medições foram totalmente condizentes, sem medições discrepantes ou duvidosas, como visto no gráfico, a temperatura do mesmo mostra uma curva, cuja temperatura máxima se mostrou às 14hrs, comparado com o do ar que atingiu sua máxima ao meio-dia.

Já o de ar mostrou algumas discrepâncias, não posso dizer se foi do sensor ou erro humano. O primeiro pico estranho foi referente a uma pontinha do metal do sensor tomar sol, depois tem uma queda bruta, foi quando o sol deixou de bater na ambiente que o sensor estava, o último pico não sei dizer o que houve. Acho que é possível concluir que o comportamento do DS18B20 em uma situação controlada (solo) foi muito bom. Acredito que o sensor possa ser utilizado em um datalogger. Vou deixar para download a tabela com os resultados, nela existe uma coluna sinal, que é a intensidade do sinal wifi do esp8266, pode ver que sempre ficou em um bom nível, nunca superior a -80.

terça-feira, 29 de maio de 2018

DS18B20 - Como ligar vários sensores em uma porta do Arduino


O DS128B20 é um sensor de temperatura quase que curinga em projetos agronômicos, ele tem algumas características extremamente interessantes, isso porque ele é fácil de programar e ligar, fácil de encontrar, preço muito em conta, ótima precisão (0,5°C) e é encontrado facilmente em duas apresentações, exposto normalmente ou encapsulado o que o torna resistente a água. Com ele é possível medir temperatura do ambiente, estufas, água e solo sem dificuldades.

Outra característica muito interessante é se pode utilizar diversos sensores utilizando apenas três portas do microcontrolador, VCC, GND e Data (ele também funciona apenas com Data e GND, mas causa alguns problemas que não vamos trabalhar), assim você pode usar muitos sensores apenas com um ATTiny85 e uma bateria. Tudo exposto ao tempo (com a devida proteção né).

Datasheet: clique aqui

A ligação de vários sensores em uma única porta é bem simples quando você possui uma protoboard:
O esquema de ligação de um sensor pode ser visto na imagem no início do post, VCC no 5V, GND no GND e Dados em um pino digital. Com uma ligação com um resistor entre o Data e VCC. Quando for utilizar vários sensores permanece o mesmo esquema, só que todos os pinos de dados vão ser ligados em uma mesma trilha da protoboard, essa trilha será ligada por um resistor no VCC e ligada a um pino digital do arduino.

Sobre o resistor, o ideal é que seja utilizado um de 4.7K, e a resolução do sensor de 10bits. Se por acaso você tem apenas um kit iniciante do arduino que não possui resistor de 4.7K é possível usar o sensor, mas sua precisão não será tão confiável.

Você pode substituir o resistor, utilizando um de 10K, desde que no programa coloque a resolução como 12bits.

Vou detalhar as partes do programa básico para ler a temperatura de três sensores DS18B20 em uma única porta, no final eu deixo ele completo para download.

Mas imagino que você deva estar se perguntando: Como vou identificar cada sensor se eles estão em uma mesma porta? Bom, cada sensor vem de fábrica com uma identidade, então vamos dizer que o sensor A é o de identidade 1, e assim por diante. Então é necessário ter em mãos a identidade dos seus sensores.

Mas não desespere, basta fazer a ligação dos sensores, no Arduino, usando a porta de dados como a digital 10, iniciar a Serial e rodar o código abaixo: Na serial vai aparecer a identidade dos seus sensores. Download do código: clique aqui

Bom, agora que você tem a identidade dos seus sensores vamos ao código para ler os dados deles na serial:

No início do arquivo teremos as seguintes linhas, antes do void.setup()

Agora vamos colocar o nosso void.setup

Agora já terminamos o setup e vamos iniciar uma nova função que é própria da biblioteca, ela é realmente posicionada entre o setup e o loop. Ela vai ser responsável por verificar se o sensor está correto, se estiver ela já vai mostrar na serial a temperatura em C e F. Mesmo que retire a indicação na serial, não retire essa parte.

Agora em nosso loop se você quiser apenas mostrar na serial as temperaturas utilize o código abaixo

Mas se você quiser atribuir cada temperatura a uma função, seja para acionar um atuador, exibir em uma tela ou realizar um cálculo, é necessário adicionar também o código abaixo no seu loop


DOWNLOAD DO CÓDIGO

Construindo um Datalogger com Arduino - Parte 9 - Final

Bom, não foi possível cumprir com tudo que foi proposto ao longo da série, bom é possível, só não vai dar agora. E também alguns desejos fugiriam muito da proposta.

Acredito que optar por usar Arduino na Agronomia não é simplesmente para aprender detalhes de lógica de programação, linguagem C, códigos lindos e muitas funções. Ele é apenas uma ferramenta para alcançar um objetivo agronômico. Em um estudo que o arduino foi aplicado ele não é o foco, nos resultados finais não importa o quão lindo ficou seu código ou quantas animações seu display mostra, o que importa é o dado agronômico, a importância do arduino é a mesma da enxada, esta nem citadas nos arquivos, uma simples ferramenta para chegar onde se deseja.

Eu não teria como obter dados reais para analisar depois, pois o tempo aqui não está colaborando nem um pouco para um estudo desse, baixa temperatura, muita nebulosidade e vento, qual o cenário atual seria o oposto. Além de que a greve dos caminhoneiros impossibilita a chegada de novos materiais, como o buzzer. As novas modificações não adicionam vantagens reais ao datalogger, pois juntar em uma matriz as variáveis reduz o código, mas não traz facilidade na implementação. Colocar efeitos na OLED é muito legal, mas não vai fazer diferença no dado final, que é o que importa, sendo que animações demandam tempo.

Então o intuito do blog é ser uma grande biblioteca de partes de códigos sempre com o intuito agro. O objetivo é o seguinte:

Suponha que você precise armazenar em um SD a temperatura de uma estufa, isso vai ocorrer a cada duas horas. Ao invés de programar todo o código, resolver os problemas basta vir aqui no blog, copiar o código de SD em datalogger e o código do DHT22. Juntar os dois e pronto. Pois o que importa não é desenvolver o código e sim só fazer a ferramenta.

Desta forma acredito que a série conseguiu atingir seus objetivos, e os códigos gerados já podem ser usados para a construção de um datalogger, seja lá o que ele vai armazenar. Assim temos já vários códigos que bastam copiar, colar e customizar para ter uma nova ferramenta em menos de vinte minutos, e com essa série aprendemos muito também, cito alguns exemplos:

  • Como escolher a plataforma de desenvolvimento para a sua ferramenta
  • Determinar quais os recursos do nosso datalogger
  • Escolher os sensores e atuadores da nossa ferramenta
  • Como determinar que o hardware escolhido não foi o adequado
  • Solucionar problemas decorrentes
  • Como fazer verificações de SD
  • Escolher como lidar com o nosso intervalo
  • Millis contra delay, seus uso de problemas em datalogger
  • Como verificar e trabalhar com tamanhos de arquivos em SD ao nosso favor
  • Uso de LDR para capturar variáveis ambientais, aplicações, limitações e uso
  • Trabalhando com OLED, posicionamento de texto, exibição de variáveis e imagens
  • Como trabalhar com o DHT22
  • Como trabalhar com diversos DS18B20
E acredito que houveram mais conhecimentos documentados ao longo da série, assim vou adicionando os demais posts cujo conhecimento ficaram embutidos no código, facilitando assim encontrar os códigos no futuro. Alguns conhecimentos já foram documentados, como verificação de arquivos, uso de millis e uso de LDR.

Nessa versão que eu chamo de V1.0 eu apenas corrigi o bug que havia na A0.3, em que a verificação no OLED era apenas se houve gravação, mas indicava ser se o arquivo abrir e se houve a gravação. Deixei apenas uma indicação: se houve a gravação, pois no final apenas ela importa.

Não vi muito sentido em colocar a ligação dos fios, pois é basicamente VCC e GND, além dos fios padrão de protocolo SPI e I2C. Os fios diferentes são apenas os de dados, que estão no cabeçalho do código e a seguir o download do código: clique aqui para baixar o código

domingo, 20 de maio de 2018

Construindo um Datalogger com Arduino - Parte 8 - LDR em Porcentagem


Bom, na versão A0.3 do nosso datalogger foi implementado um LDR na porta analógica A7, já mostrando a intensidade de luz em porcentagem. Essa implementação foi bem simples, apenas adicionei as linhas do arquivo base (clique aqui) utilizando como limites 1023 e 0. Depois foi adicionado para mostrar o valor da variável LDR no serial, no SD e no OLED. Uma implementação bem simples de funcionalidade. Entendendo como foi implementado o LDR no nosso código, comparando a versão A0.2 e A0.3 você já entende como adicionar qualquer sensor básico no datalogger em poucos minutos.

Como tudo que poderia ser comentado aqui foi comentado no post com o arquivo base vou apenas deixar o link para download

Mostrando LDR em porcentagem - Arduino

Mencionei que seria interessante adicionar um LDR em nosso projeto de datalogger, pois podemos assim cruzar informações, a exemplo: Com 50% de luminosidade a amplitude térmica é 30% menor que a 80% de luminosidade. Nem sei se isso vai ser possível, mas vamos lá.



Um LDR é um resistor que varia seu valor de acordo com a luz, e essa leitura é feita de forma analógica, que no Arduino se apresenta com valores entre 0 e 1023. Então quando fizermos a leitura em um LDR ideal, sem receber luz alguma o arduino lerá 1023. Quando a leitura for no LDR exposto ao máximo de luz a leitura será 0.

Então temos duas condições que trabalharemos com mínimos e máximos diferentes:

1) Quando vamos medir um ambiente variável qualquer:
Nesse ambiente não existe um controle de qual será a luminosidade mínima e máxima, inclusive ela não não pode ser controlada. Nesse caso se define que o valor mínimo será 1023 e o máximo 0. Um exemplo de situação é quando se deseja capturar dados de luminosidade a campo.

Quando se deseja comparar o crescimento vegetativo de uma muda de café, uma exposta a sol pleno em sistema convencional. A outra parcialmente sombreada em um consórcio com mogno. Assim você terá a informação da luminosidade e do crescimento, e pode cruzar esses dados. Mesma coisa sobre peso de 1000 grãos, qualidade do grão, etc...

2) Quando podemos controlar a luminosidade dentro de uma faixa de valores. Um exemplo seria uma câmara fechada, nela eu possuo uma lâmpada, e preciso controlar e armazenar o percentual de luminosidade que a planta está recebendo de acordo com a intensidade da lâmpada.
Assim eu coloco a lâmpada no mínimo e gravo o valor lido pelo LDR, depois no máximo e novamente gravo o valor, e utilizo eles como limites do LDR, assim meu percentual será entre esses limites.

Você deve ter percebido que o LDR pode ser utilizado com alguma validade em experimentos cuja luminosidade máxima e mínima são controladas. Agora em experimentos que os valores serão 0 e 1023 isso pode ser um problema, se for utilizado para comparação entre dois valores o uso pode ser válido:
Descobrir que a planta Y recebe 25% mais luz que a planta Z.
Agora para valores absolutos o LDR não se demonstra tão interessante, porque descobrir o máximo de luz (valor 0) não traz precisão. No meu LDR colado ao led de celular mais forte que encontrei o valor foi de 23.

Um LDR é muito barato e fácil de usar, é até difícil comprar unidades na internet, normalmente a venda se dá em kits. Mas existem outros tipos de sensores que podem ser mais confiáveis para medições absolutas, de luz ou de semelhantes:
  • LDR 5mm: R$0,29
  • LDR 7mm: R$0,95
  • Sensor de Lux BH1750: R$11,50
  • Sensor de UV GYML8511: R$19,40
  • Sensor de Luz TEMT6000: R$17
Ok, agora que discutimos um pouco sobre o LDR, seu funcionamento, aplicações e alternativas vamos aos códigos:

O primeiro código é para descobrir o valor máximo e mínimo de leitura do LDR naquele ambiente.



Execute o código acima com o Arduino ligado na serial, submeta o LDR a menor luminosidade por algum tempo e depois a maior luminosidade por um tempo, assim depois basta armazenar o valores. Seu LDR precisa apresentar o valor de 1023 quando coberto com duas camadas de fita isolante.

O próximo código é a conversão da escala dos valores de 0 a 1023 para 0 a 100. Esse código será o utilizado em seu programa para ambos os casos, após o código eu explico como trabalhar com ele.



 Para a conversão de escala vamos utilizar a função map do Arduino, nesse caso vamos ler a porta e gravar no ValorLDR, depois converter essa leitura na escala nova e gravar na variável LDR. Logo após vamos exibir o valor na serial seguido do símbolo de porcentagem.

Como usar a função map com o LDR

map(valorLDR, LDR_mínima_luz, LDR_máxima_luz, 0, 100);

Na função map basta substituir os dois valores com os valores conseguidos no teste anterior, o 600 seria o valor conseguido com a mínima luz e 23 com a máxima luz.

Se o LDR for utilizado no ambiente, sem controle máximo e mínimo se utiliza os valores padrões de 1023 e 0, ficando assim:

LDR = map(valorLDR, 1023, 0, 0, 100);

Acredito que tudo foi bem discutido e estamos aptos a adicionar um LDR em nossos projetos agronômicos. Sempre escolhendo se ele é a opção correta para efetuar a leitura. Agora quando for para um controle (como acender uma luz) o LDR é incrível.

Até mais quando vamos adicionar o LDR no datalogger de terra.