Escolar Documentos
Profissional Documentos
Cultura Documentos
Faculdade de Tecnologia
TRABALHO DE GRADUAÇÃO
ENGENHARIA DE CONTROLE E AUTOMAÇÃO
Brasilía
2022
Universidade de Brasília
Faculdade de Tecnologia
Brasilía
2022
Castro Neto, Aldegundes Cesa Nery de.
C355o Otimização do Controle e Automação de um Reator de Torre-
fação de Biomassa / Aldegundes Cesa Nery de Castro Neto; orien-
tador Edgar Amaral Silveira; coorientador Jones Yudi Mori Alves
da Silva. -- Brasilía, 2022.
78 p.
Brasilía
2022
Aos meus pais, familiares e amigos que me deram
todo o apoio necessário durante esta jornada.
Agradecimentos
Tabela 1 – Calibração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Tabela 2 – Parâmetros malha controle de temperatura. . . . . . . . . . . . . . . . . 33
Tabela 3 – Relação Lambda %O2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Tabela 4 – Parâmetros malha controle concentração de oxigênio. . . . . . . . . . . 38
Tabela 5 – Setpoint ensaios torrefação. . . . . . . . . . . . . . . . . . . . . . . . . . 44
Tabela 6 – Resultado ensaio de voláteis. . . . . . . . . . . . . . . . . . . . . . . . . 48
Tabela 7 – Análise imediata. (BORGES, 2013). . . . . . . . . . . . . . . . . . . . . . 48
Tabela 8 – Análise imediata (SILVA, 2015). . . . . . . . . . . . . . . . . . . . . . . 48
Lista de abreviaturas e siglas
CA Corrente Alternada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
CC Corrente Continua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
g Gramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Hz Hertz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
O2 Oxigênio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
s Segundos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
us Microssegundos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
v Volts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
ºC Graus Celsius . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Lista de símbolos
𝜆 Lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Sumário
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1 Contextualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2 Definição do problema . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3 Objetivos do projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2 FUNDAMENTAÇÃO TEÓRICA . . . . . . . . . . . . . . . . . . . . 18
2.1 Biomassa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.1 Conversão Termoquímica . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.1.1 Pirólise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.1.2 Torrefação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2 Reatores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2.1 Sistemas Térmicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.2 Corrente Alternada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.2.1 Sensor de Temperatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.2.2 Sensor de Corrente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3 Aquisição de Massa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3.1 Célula de Carga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4 Sistemas de Gases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4.1 Sensores de Oxigênio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4.1.1 LSU 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5 Automação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5.1 Controle PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1 Controle de Temperatura . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.1.1 Calibração do Sensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.1.2 Circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.1.3 Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 Potência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3 Aquisição de Massa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4 Controle da Concentração de Oxigênio . . . . . . . . . . . . . . . . . 35
3.4.1 Circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.4.2 Válvula Solenoide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.4.3 Controlador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.5 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1 Painel de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2 Controle de Temperatura . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.3 Controle da Concentração de Oxigênio . . . . . . . . . . . . . . . . . 41
4.4 Perda de Massa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.5 Ensaio Teste de Torrefação . . . . . . . . . . . . . . . . . . . . . . . . 43
4.6 Ensaios de Torrefação . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.7 Determinação do Teor de Matéria Volátil . . . . . . . . . . . . . . . 47
5 CONCLUSÕES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.1 Perspectivas Futuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
APÊNDICES 53
ANEXOS 74
1 Introdução
1.1 Contextualização
A crescente demanda energética mundial juntamente com a busca pela redução
das emissões de carbono impulsionam o desenvolvimento de tecnologias para a geração de
energia limpa como a energia eólica e solar, sendo esta última a que mais cresceu nos últimos
anos (PESQUISA ENERGÉTICA - EPE, 2021; REN21, 2021), uma outra via muito estudada
e ainda pouco explorada que tem ganhando espaço é a energia advinda da biomassa, haja
vista que apresenta vantagens significativas sobre os recursos fósseis, ao apresentar menor
impacto ambiental, baixo custo, possibilidade de reaproveitamento e menor dano corrosivo
aos equipamentos.
No Brasil e no mundo, o uso da biomassa como fonte renovável de energia ocorre
através do uso do bagaço de cana nas usinas de açúcar e álcool, lenha, carvão vegetal e restos
de madeiras nas indústrias de cimento e ferro gusa, além da utilização de dejetos de animais,
álcool e outras fontes primárias de energia (PESQUISA ENERGÉTICA - EPE, 2021).
2 Fundamentação Teórica
2.1 Biomassa
Segundo (BASU, 2013) o termo biomassa abrange a matéria orgânica animal e vegetal
além de gases e líquidos recuperados da decomposição de materiais orgânicos não fossilizados
e biodegradáveis. A utilização da biomassa como fonte energética remonta aos tempos antigos
com a utilização de recursos vegetais ou animais providos pela própria natureza na qual as
primeiras civilizações estavam inseridas, no entanto entre o final do século XVIII e início do
século XIX foi o momento mais marcante sendo o auge do consumo da biomassa em virtude
da lenha utilizada na indústria e no transporte a vapor.
A pesar das vantagens da utilização da biomassa sobre os recursos fósseis ( menor
impacto ambiental, baixo custo, menor dano corrosivo aos equipamentos além ser uma fonte
renovável), o volume, a baixa densidade energética e a forma inconveniente de biomassa são
alguns dos fatores que impedem a mudança de utilização dos combustíveis fósseis para a
biomassa. A fim de contornar tais problemas e na busca por obter o maior poder calorífico
fornecido pela biomassa existem diversos processos para a conversão de biomassa em energia,
os quais são apresentados na figura 2 (BASU, 2013).
Como pode ser observado existem basicamente duas rotas para a obtenção de energia
através da utilização da biomassa. A primeira utiliza processos bioquímicos que através da
fermentação da matéria orgânica permite a obtenção de gases utilizados para a geração da
energia, já a segunda rota utiliza processos termoquímicos a partir dos quais é possível a
obtenção de materiais sólidos como o carvão ou gases como o metano.
19
2.1.1.1 Pirólise
2.1.1.2 Torrefação
2.2 Reatores
Assim como a qualidade da biomassa (MCKENDRY, 2002) as condições do processo
exercem uma forte influência sobre o produto final (MACEDO, 2012). Tanto na torrefação
quanto na pirólise para que seja possível a obtenção de um produto final com alto poder
calorifico é necessário que o processo ocorra de forma controlada garantindo assim a quali-
dade final do produto. Reatores de biomassa suprem esta demanda refinando o processo
através do controle fino de temperatura, quantidade de oxigênio, controle de pressão, análise
da perda de massa, entre outas variáveis presentes no processo.
A figura 3 apresenta uma planta de pirólise continua desenvolvida pela BESTON
utilizada para conversão de biomassa em energia implementada em diversos países, incluindo
do Reino Unido, Filipinas, Índia, Indonésia, Canadá, África do Sul, Brasil, Coreia, etc.
20
A fim de viabilizar projetos como este da BESTON, é necessário que ocorram estudos
em escala reduzida buscando validar o processo antes de passar para uma escala industrial.
Neste contexto projetos como o caso do reator desenvolvida na figura 4 , o qual estudou a
acústica na cinemática de degradação termoquímica da biomassa, são maneira de aprimorar
os processos e buscar aumentar a eficiência destes além de elevar o grau de qualidade do
produto final.
controlador o qual interpreta e define qual ação de controle sobre a coleira deve ser realizada.
Essa ação de controle pode ocorrer através de um método simples como um controle on-off
apenas ligando e desligando a coleira, usando PWM (Modulação por Largura de Pulso em
tradução livre) ou através do controle de potência por ângulo de fase, sendo este o método
de controle desenvolvido no trabalho.
A figura 5 apresenta o circuito de uma pote retificadora composta pelos diodos D1,
D2, D3 e D4 o qual rebate a parte negativa da onda fazendo com que a frequência passe de
60Hz para 120Hz vista sobre a ótica da carga, desta forma cada semiciclo da onda possui
8,33us. O tiristor então realiza o disparo e permite a passagem de corrente pela carga no
inicio do ciclo com um pequeno atraso causado pelas limitações físicas dos componentes,
desta forma a potencia máxima fornecida a carga ao utilizar o controle da fase é levemente
menor quando comparado a sistema ligado diretamente a rede.
Para realizar o controle de forma automática é possível então fazer uso do circuito
retificador para identificar os pontos de passagem da onda pelo zero, utilizando para isso
um circuito conhecido como detector de passagem por zero, este por sua vez compreende
um circuito retificador conectado a um optoacoplador o qual isola o circuito de alta tensão
de um micro controlador ou computador o qual realiza a leitura dos pulsos gerados pelo
optoacoplador durante a passagem da onda pelo ponto zero. Sabendo o ponto exato de
cruzamento e realizando algum processamento o microcontrolador pode então ativar o
tiristor permitindo a passagem de corrente através da carga. Caso seja defino que a potencia
fornecida a carga deva ser de 50% o tiristor então será ativado em 4,165us após a detecção de
passagem por zero correspondendo a exatamente metade da duração de um semiciclo da
onda.
22
A temperatura é uma grandeza física que tem sua origem relacionada à percepção
sensorial humana, podendo ser definida como o grau de agitação das moléculas de um corpo.
Sensores de temperatura nada mais são que a racionalização da percepção humana tomando
como base uma referência estabelecida.
Dentre os sensores mais comuns utilizados na industria destacam-se os sensores
do tipo infravermelho, termopares, RTDs (Detectores de temperatura de resistência) e os
termistores. Sensores do tipo infravermelho apresentam a vantagem de realizar medições
através da absorção da radiação infravermelha emitida pela superfície aquecida, destina-
dos a aplicações onde a medição direta de temperatura não é possível.Os termopares são
um tipo específico de sensor de temperatura cujo funcionamento tem como base o efeito
Seebeck, descoberto pelo físico Thomas Seebeck em 1822, ao unir dois metais diferentes é
possível através da diferença de potencial entre as extremidades opostas a junção determinar
a temperatura a qual a junção está inserida, estes sensor são precisos, altamente sensíveis a
mudanças de temperatura além de possuírem uma faixa extremamente ampla de medição.
RTDs possuem um enrolamento de fio o qual apresenta mudanças na resistência em de-
corrência de variações na temperatura, estes sensores são fácil calibração e apresentam boa
estabilidade na saída para longos períodos de tempo. Por último os termistores são sensores
extremamente sensíveis porém com uma limitada faixa de temperatura (SILVEIRA, C. B.,
2022).
realizam a medição através do campo magnético. O dispositivo então envolve o fio sem a ne-
cessidade de contato elétrico, o fio funciona como o primário de um transformador, gerando
no secundário presente no sensor uma corrente proporcional à razão de transformação do
sensor.
O sensor lambda de banda larga aumenta a precisão do modelo anterior ao fazer uso
de uma célula de Nernst em conjunto com uma "bomba de oxigênio", ambos coexistindo
com um elemento aquecedor e uma câmara de referência figura 10. Com o aumento de
precisão também ocorre o aumento da complexidade ao ponto que sensores desta categoria
25
A figura 11 apresenta uma sonda lambda planar modelo LSU 4.2 da Bosch a qual em
conjunto com um controlador permite medir a relação ar/combustível através da obtenção
do valor de lambda, que por sua vez se relaciona a quantidade de oxigênio presente no
ambiente através da equação :
2.5 Automação
Diferente dos modernos controles digitais utilizados na atualidade os primeiros
controladores com sistemas de realimentação remontam a milhares de anos. Por volta de 300
26
a.C os gregos começaram a engenharia de sistemas com realimentação, tais conceitos eram
aplicados a fim de resolver problemas cotidianos, o relógio de água inventado por Ktesibios
é um dos exemplos clássicos no qual através da manutenção de determinado nível de água
em um reservatório era possível manter uma taxa constante de gotejamento a partir da qual
era possível inferir o tempo transcorrido.
No século XIX com o avanço tecnológico foram desenvolvidos os primeiros sistemas
de controle para os sistemas térmicos e controladores mecânicos para sistemas com pressão,
já no início do século XX foi possível a condução automática de navios através de um sistema
com elementos de compensação e controle adaptativo (NISE, 2013).
Figura 13 – Controle PID aplicado a uma planta genérica. Adaptado (OGATA, 2010)
3 Metodologia
Por último no intuito padronizar os ensaios foram realizadas testes definindo pro-
cedimentos e setpoints padrão para bom funcionamento do equipamento, garantindo a
qualidade e equidade entre ensaios futuros.
O PT100 foi então inserido no banho térmico juntamente com os termopares tipo k
conectados ao arduino, foram definidos 6 pontos de calibração os quais após serem atingidos
e a referencia se manter estável, os dados foram coletados durante alguns minutos e a média
destes foi calculada.
Este fato pode ser compreendido pela maior conservação da energia no interior do reator
enquanto os pontos de medição externa presentes na coleira têm contanto com o ar em um
ambiente aberto. Apesar de ser possível relacionar a temperatura externa com a interna, a
partir deste ensaio optou-se por manter a medição de temperatura no interior do reator, pois
desta forma é possível realizar uma análise mais precisa das variações e comportamentos da
temperatura ao longo do processo.
3.1.2 Circuito
O circuito de temperatura foi redimensionado e foram realizadas algumas modifica-
ções a fim de corrigir problemas de aquisição causados pelas altas temperaturas. O circuito
proposto é apresentado na figura 20 O controle de temperatura é realizado através do controle
de potência via ângulo de fase. O circuito é então composto por um de detector de passagem
por zero e por um circuito de ativação da carga, que neste caso é o reator. O circuito de
detecção de passagem por zero, composto por um retificador de onda completa, um conjunto
de resistores e um opto-acoplador permite ao arduino identificar através de interrupção de
hardware a mudança de nível lógico de forma que em 1s serão detectadas 120 passagens já
que ao utilizar o retificador de onda completa a frequência vista pelo opto-acoplador será
de 120Hz. Identificando os pontos de cruzamento o controlador implementado no arduino
compara a referência de temperatura utilizada no setpoint com o valor medido pelo termopar
definindo desta forma o instante de ativação e realizando controle da potência fornecida ao
31
reator.
3.1.3 Controlador
Em trabalho anterior (CORDEIRO, 2021) a fim de definir os parâmetros do contro-
lador foram realizados ensaios a partir dos quais obteve-se que o sistema era estável para
Kp menor ou igual a 1,3. Buscando refinar o processo e reduzir oscilações bruscas causadas
pela perturbação proveniente da liberação de gases pelas amostras de biomassa foi realizada
uma análise mais profunda do processo.
Com o objetivo de obter o comportamento da curva de aquecimento do reator o
mesmo foi ligado e os dados de temperatura durante seu aquecimento foram coletados,
o mesmo permaneceu ligado por aproximadamente uma hora e meia quando a taxa de
aquecimento é mínima e o sistema se aproxima do seu limite físico figura 22.
Com os dados em mãos utilizando o PID Tuner presente no Matlab foi realizada a
identificação do modelo da planta o qual como mostra a figura 23, foi aproximada por um
polo e uma atraso sendo uma representação aceitável para o reator. A partir da identificação
do modelo da curva de aquecimento do reator obteve-se os valores iniciais para o controlador
com kp = 1,168, Ki = 0,00103 e Kd = 0. O controlador PID foi implementado no arduino
com o auxilio da biblioteca 𝑃𝐼𝐷 − 𝑣1.ℎ .
32
Figura 23 – PID Tuner Caracterização e obtenção dos parâmetros inicias para o controlador.
O modelo de primeira ordem com atraso se mostrou uma aproximação valida para
representar o aquecimento real da planta. A figura 24 mostra o resultado do controle de
aquecimento utilizando os parâmetros obtidos através desta simplificação.
A pesar de o controle apresentar um bom resultado, é possível verificar que a tempera-
tura fica estável em torno dos 200 °C no entanto, a temperatura definida como setpoint neste
caso era de 230 °C. Este fato ocorre devido a limitações físicas dos componentes utilizados
no sistema de controle, já que na prática é necessário existir um tempo limiar de ativação e
desligamento do circuito. Desta forma a potência máxima do reator, conectado ao circuito
de controle é inferior a potência do mesmo apenas conectado diretamente a tomada.
Foi definida uma taxa de aquecimento próxima dos 7°C/min, para isso a potên-
cia do reator foi reduzida ainda mais quando comparada com figura 24. Sendo utilizada
aproximadamente 90% de sua potência total.
33
Para está nova potência, foram realizados novos testes a fim de verificar o compor-
tamento do sistema como mostra a figura 25, nela é possível observar o comportamento
do processo para três valores de Kp. Devido a redução da potência, como esperado, a tem-
peratura atingida ficou abaixo do patamar determinado, para contornar este problema foi
definido um setpoint acrescido de um offset igual a 30% do valor base de temperatura.
O ponto de operação para controle de temperatura a partir de testes realizados ficou
na faixa de 150°C a 350°C, neste intervalo é possível garantir que a temperatura atingirá o
patamar desejado com variações aceitáveis e taxa de aquecimento inferior a 8°C/min sem
necessidade de alterações nas configurações.
3.2 Potência
O sistema de medição da corrente consumida desenvolvido em trabalho anterior
(CORDEIRO, 2021) foi mantido já que apresentava bom funcionamento, sendo feitas apenas
modificações no código.
34
Para que o arduino seja capaz de interpretar o valor da corrente, este precisa ser
convertido para um valore de tensão, desta forma o circuito desenvolvido realiza a conversão
de valores de corrente para valores de tensão entre 0 e 5v. A potência é calculada através da
multiplicação do valor de tensão pelo valor de corrente obtido através do sensor não invasivo
SCT013.
Após a realização dos primeiros ensaios ficou claro que suspender o fio preso ao
cadinho a fim de realizar a calibração da balança no inicio dos ensaios era uma tarefa delicada,
35
sendo necessário pensar em uma solução que facilitasse tal procedimento, desta forma foi
confeccionado um suporte no qual o fio pode ser apoiado e a balança calibrada de forma
rápida e pratica evitando o erro de calibração obtido algumas vezes quando o fio era mantido
suspenso manualmente e acabava encostando-se à balança durante a calibração.
3.4.3 Controlador
A quantidade de O2 presente dentro do reator é controlada de forma inderita pela
inserção de nitrogênio que reduz a quantidade de oxigênio presente. A medição de oxigênio
inicialmente foi realizada na saída da linha dos gases com um sensor lambda de banda larga,
LSU 4.2 da Bosch conectado ao controlador LC1 da Innovate Motorsports já disponível no
laboratório. O controlador possui uma saída analógica configurável o qual relaciona tensão
ao valor de lambda. A saída do controlador foi então configurada para funcionar de 0-5v
permitindo uma fácil leitura pelo arduino.
A tabela 3 apresenta a relação entre lambda e O2, observando a figura 12 nota-se que
é possível determinar a quantidade de O2 através do valor de lambda medido, no entanto
para isso antes é necessário determinar este valor o qual se relaciona a tensão lida pelo
37
𝜆 = 1,1 ∗ 𝑦 + 0,5
, nos permite então determinar o valor de lambda que por sua vez através da equação
3.5 Interface
Desenvolvida em LabVIEW a interface é responsável por centralizar os sistemas de
controle e aquisição de dados em único local facilitando a inicialização do sistemas como
também possibilitar ao usuário visualizar os dados em um único local. A utilização do
software permitiu a integração de todos os sistemas presentes em dois arduinos de forma
relativamente simples e robusta ao passo que quando realizado o mesmo procedimento
com Matlab foram encontrados muitos problemas relacionados à comunicação serial de
múltiplos dispositivos arduino o que impossibilitou sua utilização.
Figura 33 – Dashboard.
39
4 Resultados
o setpoint de 275°C ocorrem variações cujas máximas ficam por volta dos 18°C quando
ocorrem injeções com maior duração, já para o setpoint de 200°C as variações ficaram por
volta dos 13°C.
41
A ação de controle pode ser observada na figura 39, no inicio do processo o controlador
fornece potência máxima ao sistema e a medida que a temperatura se eleva a potência é
reduzida até um valor que permite a estabilidade da temperatura no patamar definido. As
oscilações ocorridas são consequência da injeção de nitrogênio o qual faz com que em
um curto intervalo de tempo a temperatura lida seja inferior a real o que faz com que o
controlador responda fornecendo mais potência para compensar a queda, no entanto apesar
das perturbações o controle apresenta um bom resultado.
temperatura do setpoint ser atingido, neste momento o reator é removido da tomada sendo
aguardada a redução da temperatura até um valor próximo ao 100 graus quando o processo
é finalizada, o reator é aberto e a massa é pesada.
A figura 48 mostra os resultados obtidos após a torrefação sendo cada número cor-
respondente ao seu ensaio e zero correspondente aos peletes antes da torrefação. Como fica
claro, os ensaios realizados a 200 graus (1 e 3) apresentam visualmente uma torra mais leve
os ensaios realizados a 275 (2 e 4) cuja cor é relativamente mais escura, quanto a concentra-
ção de oxigênio utilizada no processo é possível inferir a concentração de 5% fez com que
ocorresse menor perda de massa que os processos realizados a 10% de oxigênio proveniente
da menor oxidação dos peletes em contato com a atmosfera do reator.
Figura 50 – Ensaio de voláteis biomassa in natura, torrificada a 200°C e 275°C com com 5% de O2.
Amostra Massa Inicial (g) Massa Final (g) Massa de Voláteis (%)
Natura A 1,0118 0,1947 80,76
Natura B 1,0072 0,1968 80,46
200°C A 0,9802 0,2116 78,41
200°C B 0,9773 0,2078 78,74
275°C A 0,9758 0,3391 65,25
275°C B 0,9900 0,3411 65,25
Tabela 6 – Resultado ensaio de voláteis.
resultados próximos, apensar das diferenças entre a biomassa (Eucalipto) utilizada em cada
trabalho.
5 Conclusões
Outro problema decorrente da injeção de gás é sua influencia sobre a balança, desta
50
forma é proposta a obtenção futura de uma válvula com um controle fino de vazão. A
aquisição de tal válvula em conjunto com o sistema de aquecimento do gás deve gerar
interferência mínima tanto na balança quanto na temperatura. Uma segunda medida para
reduzir a influência sobre a célula de carga é fechar o sistema de aquisição de perda de massa,
já que, como mostra a figura 52 durante injeções mais fortes de N2, ocorre uma liberação
significativa de gases pelo duto transpassado pelo fio utilizado na medição da massa.
Figura 52 – Gases expelidos pelo sistema de aquisição de massa durante ensaio de teste.
Por último, como o equipamento utilizado para medição da massa não apresentou
bom desempenho durante o processo é sugerida à substituição da célula de carga por um
equipamento com maior grau de precisão e menor tempo de resposta, a fim de suportar as
condições impostas durante os ensaios.
51
Referências
APÊNDICE A – Códigos de
programação
38 long t ;
39
40 void z e r o _ c r o s s s _ i n t ( )
41 {
42
43 i n t powertime = ( 32 * ( 256 − power ) ) ;
44 d e l a y M i c r o s e c o n d s ( powertime ) ;
45 d i g i t a l W r i t e ( loadR , HIGH) ;
46 d e l a y M i c r o s e c o n d s ( 8 .3 3 ) ;
47 d i g i t a l W r i t e ( loadR , LOW) ;
48 c o n t ++;
49 }
50
51
52 void setup ( )
53 {
54 S e r i a l . b e g i n ( 9600 ) ;
55
56 s c a l e . b e g i n (LOADCELL_DOUT_PIN , LOADCELL_SCK_PIN ) ;
57 s c a l e . s e t _ s c a l e ( c a l i b r a t i o n _ f a c t o r ) ; / / T h i s v a l u e i s o b t a i n e d by u s i n g t h e
SparkFun_HX711_Calibration s k e t c h
58 s c a l e . t a r e ( ) ; / / Assuming t h e r e i s no weight on t h e s c a l e a t s t a r t up ,
r e s e t the s c a l e to 0
59
60 pinMode ( loadR , OUTPUT) ;
61 a t t a c h I n t e r r u p t ( 0 , z e r o _ c r o s s s _ i n t , RISING ) ;
62 p i d . S e t O u t p u t L i m i t s ( 10 , 150 ) ; / / 20 130
63 p i d . SetMode (AUTOMATIC) ;
64 SetPoint = target_temperature * temperature_correction ; // temperatura
desejada
65
66 SCT013 . c u r r e n t ( pinSCT , 60 ) ;
67
68 d i g i t a l W r i t e ( loadR , HIGH) ;
69
70 }
71
72 void loop ( )
73 {
74 P r e s e n t V a l u e = TermoKa . r e a d C e l s i u s ( ) ; / / C a l c u l a o v a l o r manipulado
75 p i d . Compute ( ) ;
76 power = ManipulatedValue ;
77
78 double Irms = SCT013 . c a l c I r m s ( 1480 ) ; / / C a l c u l a o v a l o r da C o r r e n t e
79 LC1 = analogRead ( pinLC1 ) ; / / l e i t u r a de O2
80 O2 = ManipulatedValue ;
56
61 i n t adcValue_UB = 0 ; / * ADC
v a l u e r e a d from t h e v o l t a g e d i v i d e r c a l u c l a t i n g Ubat * /
62 i n t adcValue_UA_Optimal = 0 ;
63 i n t adcValue_UR_Optimal = 0 ; / * UR
ADC v a l u e s t o r e d when CJ125 i s i n c a l i b r a t i o n mode , o p t i m a l t e m p e r a t u r e
*/
64 i n t HeaterOutput = 0 ; /*
C u r r e n t PWM o u t p u t v a l u e (0 −255) o f t h e h e a t e r o u t p u t pin * /
65 int serial_counter = 0 ; /*
Counter used t o c a l c u l a t e r e f r e s h r a t e on t h e s e r i a l o u t p u t * /
66 i n t CJ125 _ S t a t u s = 0 ; /*
L a t e s t s t o r e d DIAG r e g i s t r y r e s p o n s e from t h e CJ125 * /
67 bool logEnabled = f a l s e ; /*
V a r i a b l e used f o r s e t t i n g d a t a l o g g i n g e n a b l e or d i s a b l e d . * /
68
69
70 / / PID r e g u l a t i o n v a r i a b l e s .
71 int dState ; /* L a s t
p o s i t i o n input . */
72 int iState ; /*
I n t e g r a t o r s t a t e . */
73 c o n s t i n t iMax = 250 ; /*
Maximum a l l o w a b l e i n t e g r a t o r s t a t e . */
74 c o n s t i n t iMin = −250 ; /*
Minimum a l l o w a b l e i n t e g r a t o r s t a t e . */
75 c o n s t f l o a t pGain = 120 ; /*
P r o p o r t i o n a l g a i n . D e f a u l t = 120 * /
76 c o n s t f l o a t i G a i n = 0 .8 ; /*
I n t e g r a l gain . D e f a u l t = 0 . 8 */
77 c o n s t f l o a t dGain = 10 ; /*
D e r i v a t i v e g a i n . D e f a u l t = 10 * /
78
79 / / Lambda Conversion Lookup T a b l e . (ADC 39 −791) .
80 c o n s t PROGMEM f l o a t Lambda_Conversion [ 753 ] {
81 0 .7 50 , 0 .7 51 , 0 .7 52 , 0 .7 52 , 0 .7 53 , 0 .7 54 , 0 .7 55 , 0 .7 55 , 0 .7 56 , 0 .7 57 , 0 .7 5
8 , 0 .7 58 , 0 .7 59 , 0 .7 60 , 0 .7 61 , 0 .7 61 , 0 .7 62 , 0 .7 63 , 0 .7 64 , 0 .7 64 ,
82 0 .7 65 , 0 .7 66 , 0 .7 66 , 0 .7 67 , 0 .7 68 , 0 .7 69 , 0 .7 69 , 0 .7 70 , 0 .7 71 , 0 .7 72 , 0 .7 7
2 , 0 .7 73 , 0 .7 74 , 0 .7 74 , 0 .7 75 , 0 .7 76 , 0 .7 77 , 0 .7 77 , 0 .7 78 , 0 .7 79 ,
83 0 .7 80 , 0 .7 80 , 0 .7 81 , 0 .7 82 , 0 .7 82 , 0 .7 83 , 0 .7 84 , 0 .7 85 , 0 .7 85 , 0 .7 86 , 0 .7 8
7 , 0 .7 87 , 0 .7 88 , 0 .7 89 , 0 .7 90 , 0 .7 90 , 0 .7 91 , 0 .7 92 , 0 .7 93 , 0 .7 93 ,
84 0 .7 94 , 0 .7 95 , 0 .7 96 , 0 .7 96 , 0 .7 97 , 0 .7 98 , 0 .7 99 , 0 .7 99 , 0 .8 00 , 0 .8 01 , 0 .8 0
2 , 0 .8 02 , 0 .8 03 , 0 .8 04 , 0 .8 05 , 0 .8 05 , 0 .8 06 , 0 .8 07 , 0 .8 08 , 0 .8 08 ,
85 0 .8 09 , 0 .8 10 , 0 .8 11 , 0 .8 11 , 0 .8 12 , 0 .8 13 , 0 .8 14 , 0 .8 15 , 0 .8 15 , 0 .8 16 , 0 .8 1
7 , 0 .8 18 , 0 .8 19 , 0 .8 20 , 0 .8 20 , 0 .8 21 , 0 .8 22 , 0 .8 23 , 0 .8 24 , 0 .8 25 ,
86 0 .8 25 , 0 .8 26 , 0 .8 27 , 0 .8 28 , 0 .8 29 , 0 .8 30 , 0 .8 30 , 0 .8 31 , 0 .8 32 , 0 .8 33 , 0 .8 3
4 , 0 .8 35 , 0 .8 36 , 0 .8 37 , 0 .8 37 , 0 .8 38 , 0 .8 39 , 0 .8 40 , 0 .8 41 , 0 .8 42 ,
59
87 0 .8 43 , 0 .8 44 , 0 .8 45 , 0 .8 46 , 0 .8 46 , 0 .8 47 , 0 .8 48 , 0 .8 49 , 0 .8 50 , 0 .8 51 , 0 .8 5
2 , 0 .8 53 , 0 .8 54 , 0 .8 55 , 0 .8 55 , 0 .8 56 , 0 .8 57 , 0 .8 58 , 0 .8 59 , 0 .8 60 ,
88 0 .8 61 , 0 .8 62 , 0 .8 63 , 0 .8 64 , 0 .8 65 , 0 .8 65 , 0 .8 66 , 0 .8 67 , 0 .8 68 , 0 .8 69 , 0 .8 7
0 , 0 .8 71 , 0 .8 72 , 0 .8 73 , 0 .8 74 , 0 .8 75 , 0 .8 76 , 0 .8 77 , 0 .8 78 , 0 .8 78 ,
89 0 .8 79 , 0 .8 80 , 0 .8 81 , 0 .8 82 , 0 .8 83 , 0 .8 84 , 0 .8 85 , 0 .8 86 , 0 .8 87 , 0 .8 88 , 0 .8 8
9 , 0 .8 90 , 0 .8 91 , 0 .8 92 , 0 .8 93 , 0 .8 94 , 0 .8 95 , 0 .8 96 , 0 .8 97 , 0 .8 98 ,
90 0 .8 99 , 0 .9 00 , 0 .9 01 , 0 .9 02 , 0 .9 03 , 0 .9 04 , 0 .9 05 , 0 .9 06 , 0 .9 07 , 0 .9 08 , 0 .9 0
9 , 0 .9 10 , 0 .9 11 , 0 .9 12 , 0 .9 13 , 0 .9 15 , 0 .9 16 , 0 .9 17 , 0 .9 18 , 0 .9 19 ,
91 0 .9 20 , 0 .9 21 , 0 .9 22 , 0 .9 23 , 0 .9 24 , 0 .9 25 , 0 .9 26 , 0 .9 27 , 0 .9 28 , 0 .9 29 , 0 .9 3
1 , 0 .9 32 , 0 .9 33 , 0 .9 34 , 0 .9 35 , 0 .9 36 , 0 .9 37 , 0 .9 38 , 0 .9 39 , 0 .9 40 ,
92 0 .9 41 , 0 .9 42 , 0 .9 44 , 0 .9 45 , 0 .9 46 , 0 .9 47 , 0 .9 48 , 0 .9 49 , 0 .9 50 , 0 .9 51 , 0 .9 5
2 , 0 .9 53 , 0 .9 54 , 0 .9 55 , 0 .9 57 , 0 .9 58 , 0 .9 59 , 0 .9 60 , 0 .9 61 , 0 .9 62 ,
93 0 .9 63 , 0 .9 65 , 0 .9 66 , 0 .9 67 , 0 .9 69 , 0 .9 70 , 0 .9 71 , 0 .9 73 , 0 .9 74 , 0 .9 76 , 0 .9 7
7 , 0 .9 79 , 0 .9 80 , 0 .9 82 , 0 .9 83 , 0 .9 85 , 0 .9 86 , 0 .9 87 , 0 .9 89 , 0 .9 90 ,
94 0 .9 91 , 0 .9 92 , 0 .9 94 , 0 .9 95 , 0 .9 96 , 0 .9 98 , 0 .9 99 , 1 .0 01 , 1 .0 03 , 1 .0 05 , 1 .0 0
8 , 1 .0 10 , 1 .0 12 , 1 .0 15 , 1 .0 17 , 1 .0 19 , 1 .0 22 , 1 .0 24 , 1 .0 26 , 1 .0 28 ,
95 1 .0 30 , 1 .0 32 , 1 .0 35 , 1 .0 37 , 1 .0 39 , 1 .0 41 , 1 .0 43 , 1 .0 45 , 1 .0 48 , 1 .0 50 , 1 .0 5
2 , 1 .0 55 , 1 .0 57 , 1 .0 60 , 1 .0 62 , 1 .0 64 , 1 .0 67 , 1 .0 69 , 1 .0 72 , 1 .0 75 ,
96 1 .0 77 , 1 .0 80 , 1 .0 82 , 1 .0 85 , 1 .0 87 , 1 .0 90 , 1 .0 92 , 1 .0 95 , 1 .0 98 , 1 .1 00 , 1 .1 0
2 , 1 .1 05 , 1 .1 07 , 1 .1 10 , 1 .1 12 , 1 .1 15 , 1 .1 17 , 1 .1 20 , 1 .1 22 , 1 .1 24 ,
97 1 .1 27 , 1 .1 29 , 1 .1 32 , 1 .1 35 , 1 .1 37 , 1 .1 40 , 1 .1 42 , 1 .1 45 , 1 .1 48 , 1 .1 51 , 1 .1 5
3 , 1 .1 56 , 1 .1 59 , 1 .1 62 , 1 .1 65 , 1 .1 67 , 1 .1 70 , 1 .1 73 , 1 .1 76 , 1 .1 79 ,
98 1 .1 82 , 1 .1 85 , 1 .1 88 , 1 .1 91 , 1 .1 94 , 1 .1 97 , 1 .2 00 , 1 .2 03 , 1 .2 06 , 1 .2 09 , 1 .2 1
2 , 1 .2 15 , 1 .2 18 , 1 .2 21 , 1 .2 24 , 1 .2 27 , 1 .2 30 , 1 .2 34 , 1 .2 37 , 1 .2 40 ,
99 1 .2 43 , 1 .2 46 , 1 .2 50 , 1 .2 53 , 1 .2 56 , 1 .2 59 , 1 .2 62 , 1 .2 66 , 1 .2 69 , 1 .2 72 , 1 .2 7
6 , 1 .2 79 , 1 .2 82 , 1 .2 86 , 1 .2 89 , 1 .2 92 , 1 .2 96 , 1 .2 99 , 1 .3 03 , 1 .3 06 ,
100 1 .3 10 , 1 .3 13 , 1 .3 17 , 1 .3 20 , 1 .3 24 , 1 .3 27 , 1 .3 31 , 1 .3 34 , 1 .3 38 , 1 .3 42 , 1 .3 4
5 , 1 .3 49 , 1 .3 52 , 1 .3 56 , 1 .3 60 , 1 .3 64 , 1 .3 67 , 1 .3 71 , 1 .3 75 , 1 .3 79 ,
101 1 .3 82 , 1 .3 86 , 1 .3 90 , 1 .3 94 , 1 .3 98 , 1 .4 01 , 1 .4 05 , 1 .4 09 , 1 .4 13 , 1 .4 17 , 1 .4 2
1 , 1 .4 25 , 1 .4 29 , 1 .4 33 , 1 .4 37 , 1 .4 41 , 1 .4 45 , 1 .4 49 , 1 .4 53 , 1 .4 57 ,
102 1 .4 62 , 1 .4 66 , 1 .4 70 , 1 .4 74 , 1 .4 78 , 1 .4 83 , 1 .4 87 , 1 .4 91 , 1 .4 95 , 1 .5 00 , 1 .5 0
4 , 1 .5 08 , 1 .5 13 , 1 .5 17 , 1 .5 22 , 1 .5 26 , 1 .5 31 , 1 .5 35 , 1 .5 40 , 1 .5 44 ,
103 1 .5 49 , 1 .5 54 , 1 .5 58 , 1 .5 63 , 1 .5 68 , 1 .5 72 , 1 .5 77 , 1 .5 82 , 1 .5 87 , 1 .5 92 , 1 .5 9
7 , 1 .6 01 , 1 .6 06 , 1 .6 11 , 1 .6 16 , 1 .6 21 , 1 .6 27 , 1 .6 32 , 1 .6 37 , 1 .6 42 ,
104 1 .6 47 , 1 .6 52 , 1 .6 58 , 1 .6 63 , 1 .6 68 , 1 .6 74 , 1 .6 79 , 1 .6 84 , 1 .6 90 , 1 .6 95 , 1 .7 0
1 , 1 .7 07 , 1 .7 12 , 1 .7 18 , 1 .7 24 , 1 .7 29 , 1 .7 35 , 1 .7 41 , 1 .7 47 , 1 .7 53 ,
105 1 .7 59 , 1 .7 64 , 1 .7 70 , 1 .7 76 , 1 .7 83 , 1 .7 89 , 1 .7 95 , 1 .8 01 , 1 .8 07 , 1 .8 13 , 1 .8 2
0 , 1 .8 26 , 1 .8 32 , 1 .8 39 , 1 .8 45 , 1 .8 52 , 1 .8 58 , 1 .8 65 , 1 .8 72 , 1 .8 78 ,
106 1 .8 85 , 1 .8 92 , 1 .8 98 , 1 .9 05 , 1 .9 12 , 1 .9 19 , 1 .9 26 , 1 .9 33 , 1 .9 40 , 1 .9 47 , 1 .9 5
4 , 1 .9 61 , 1 .9 68 , 1 .9 75 , 1 .9 83 , 1 .9 90 , 1 .9 97 , 2 .0 05 , 2 .0 12 , 2 .0 20 ,
107 2 .0 27 , 2 .0 35 , 2 .0 42 , 2 .0 50 , 2 .0 58 , 2 .0 65 , 2 .0 73 , 2 .0 81 , 2 .0 89 , 2 .0 97 , 2 .1 0
5 , 2 .1 13 , 2 .1 21 , 2 .1 29 , 2 .1 37 , 2 .1 45 , 2 .1 54 , 2 .1 62 , 2 .1 71 , 2 .1 79 ,
108 2 .1 88 , 2 .1 96 , 2 .2 05 , 2 .2 14 , 2 .2 22 , 2 .2 31 , 2 .2 40 , 2 .2 49 , 2 .2 58 , 2 .2 68 , 2 .2 7
7 , 2 .2 86 , 2 .2 95 , 2 .3 05 , 2 .3 14 , 2 .3 24 , 2 .3 33 , 2 .3 43 , 2 .3 53 , 2 .3 63 ,
109 2 .3 73 , 2 .3 83 , 2 .3 93 , 2 .4 03 , 2 .4 13 , 2 .4 24 , 2 .4 34 , 2 .4 44 , 2 .4 55 , 2 .4 66 , 2 .4 7
6 , 2 .4 87 , 2 .4 98 , 2 .5 09 , 2 .5 20 , 2 .5 32 , 2 .5 43 , 2 .5 54 , 2 .5 66 , 2 .5 77 ,
60
110 2 .5 89 , 2 .6 01 , 2 .6 13 , 2 .6 25 , 2 .6 37 , 2 .6 49 , 2 .6 62 , 2 .6 74 , 2 .6 87 , 2 .6 99 , 2 .7 1
2 , 2 .7 25 , 2 .7 38 , 2 .7 51 , 2 .7 64 , 2 .7 78 , 2 .7 91 , 2 .8 05 , 2 .8 19 , 2 .8 33 ,
111 2 .8 47 , 2 .8 61 , 2 .8 75 , 2 .8 90 , 2 .9 04 , 2 .9 19 , 2 .9 34 , 2 .9 49 , 2 .9 64 , 2 .9 79 , 2 .9 9
5 , 3 .0 10 , 3 .0 26 , 3 .0 42 , 3 .0 58 , 3 .0 74 , 3 .0 91 , 3 .1 07 , 3 .1 24 , 3 .1 41 ,
112 3 .1 58 , 3 .1 75 , 3 .1 92 , 3 .2 09 , 3 .2 27 , 3 .2 45 , 3 .2 63 , 3 .2 81 , 3 .2 99 , 3 .3 18 , 3 .3 3
7 , 3 .3 55 , 3 .3 74 , 3 .3 94 , 3 .4 13 , 3 .4 33 , 3 .4 52 , 3 .4 72 , 3 .4 92 , 3 .5 13 ,
113 3 .5 33 , 3 .5 54 , 3 .5 75 , 3 .5 97 , 3 .6 18 , 3 .6 40 , 3 .6 62 , 3 .6 84 , 3 .7 07 , 3 .7 30 , 3 .7 5
3 , 3 .7 76 , 3 .8 00 , 3 .8 24 , 3 .8 49 , 3 .8 73 , 3 .8 98 , 3 .9 24 , 3 .9 50 , 3 .9 76 ,
114 4 .0 02 , 4 .0 29 , 4 .0 56 , 4 .0 84 , 4 .1 12 , 4 .1 40 , 4 .1 69 , 4 .1 98 , 4 .2 28 , 4 .2 58 , 4 .2 8
8 , 4 .3 19 , 4 .3 50 , 4 .3 82 , 4 .4 14 , 4 .4 47 , 4 .4 80 , 4 .5 14 , 4 .5 48 , 4 .5 83 ,
115 4 .6 18 , 4 .6 54 , 4 .6 90 , 4 .7 26 , 4 .7 64 , 4 .8 01 , 4 .8 40 , 4 .8 79 , 4 .9 18 , 4 .9 58 , 4 .9 9
9 , 5 .0 40 , 5 .0 82 , 5 .1 24 , 5 .1 67 , 5 .2 11 , 5 .2 55 , 5 .2 99 , 5 .3 45 , 5 .3 91 ,
116 5 .4 38 , 5 .4 85 , 5 .5 33 , 5 .5 82 , 5 .6 32 , 5 .6 83 , 5 .7 35 , 5 .7 88 , 5 .8 41 , 5 .8 96 , 5 .9
53 , 6 .0 10 , 6 .0 69 , 6 .1 29 , 6 .1 90 , 6 .2 53 , 6 .3 18 , 6 .3 84 , 6 .4 52 , 6 .5 21 ,
117 6 .5 92 , 6 .6 65 , 6 .7 40 , 6 .8 17 , 6 .8 96 , 6 .9 76 , 7 .0 59 , 7 .1 44 , 7 .2 31 , 7 .3 20 , 7 .4 1
2 , 7 .5 06 , 7 .6 02 , 7 .7 01 , 7 .8 03 , 7 .9 06 , 8 .0 13 , 8 .1 22 , 8 .2 34 , 8 .3 49 ,
118 8 .4 66 , 8 .5 87 , 8 .7 10 , 8 .8 37 , 8 .9 66 , 9 .0 99 , 9 .2 35 , 9 .3 74 , 9 .5 16 , 9 .6 62 , 9 .8 1
1 , 9 .9 63 , 10 .1 19
119 };
120
121 / / Oxygen Conversion Lookup T a b l e . (ADC 307 −854) .
122 c o n s t PROGMEM f l o a t Oxygen_Conversion [ 548 ] {
123 00 .0 0 , 00 .0 4 , 00 .0 8 , 00 .1 3 , 00 .1 7 , 00 .2 1 , 00 .2 5 , 00 .3 0 , 00 .3 4 , 00 .3 8 , 00 .4
2 , 00 .4 7 , 00 .5 1 , 00 .5 5 , 00 .5 9 , 00 .6 4 , 00 .6 8 , 00 .7 2 , 00 .7 6 , 00 .8 1 ,
124 00 .8 5 , 00 .8 9 , 00 .9 3 , 00 .9 8 , 01 .0 2 , 01 .0 6 , 01 .1 0 , 01 .1 5 , 01 .1 9 , 01 .2 3 , 01 .2
7 , 01 .3 1 , 01 .3 6 , 01 .4 0 , 01 .4 4 , 01 .4 8 , 01 .5 3 , 01 .5 7 , 01 .6 1 , 01 .6 5 ,
125 01 .7 0 , 01 .7 4 , 01 .7 8 , 01 .8 2 , 01 .8 6 , 01 .9 1 , 01 .9 5 , 01 .9 9 , 02 .0 3 , 02 .0 8 , 02 .1
2 , 02 .1 6 , 02 .2 0 , 02 .2 4 , 02 .2 9 , 02 .3 3 , 02 .3 7 , 02 .4 1 , 02 .4 5 , 02 .5 0 ,
126 02 .5 4 , 02 .5 8 , 02 .6 2 , 02 .6 6 , 02 .7 1 , 02 .7 5 , 02 .7 9 , 02 .8 3 , 02 .8 7 , 02 .9 2 , 02 .9
6 , 03 .0 0 , 03 .0 4 , 03 .0 8 , 03 .1 3 , 03 .1 7 , 03 .2 1 , 03 .2 5 , 03 .2 9 , 03 .3 3 ,
127 03 .3 8 , 03 .4 2 , 03 .4 6 , 03 .5 0 , 03 .5 4 , 03 .5 8 , 03 .6 3 , 03 .6 7 , 03 .7 1 , 03 .7 5 , 03 .7
9 , 03 .8 3 , 03 .8 8 , 03 .9 2 , 03 .9 6 , 04 .0 0 , 04 .0 4 , 04 .0 8 , 04 .1 2 , 04 .1 7 ,
128 04 .2 1 , 04 .2 5 , 04 .2 9 , 04 .3 3 , 04 .3 7 , 04 .4 1 , 04 .4 5 , 04 .5 0 , 04 .5 4 , 04 .5 8 , 04 .6
2 , 04 .6 6 , 04 .7 0 , 04 .7 4 , 04 .7 8 , 04 .8 2 , 04 .8 6 , 04 .9 1 , 04 .9 5 , 04 .9 9 ,
129 05 .0 3 , 05 .0 7 , 05 .1 1 , 05 .1 5 , 05 .1 9 , 05 .2 3 , 05 .2 7 , 05 .3 1 , 05 .3 5 , 05 .3 9 , 05 .4
4 , 05 .4 8 , 05 .5 2 , 05 .5 6 , 05 .6 0 , 05 .6 4 , 05 .6 8 , 05 .7 2 , 05 .7 6 , 05 .8 0 ,
130 05 .8 4 , 05 .8 8 , 05 .9 2 , 05 .9 6 , 06 .0 0 , 06 .0 4 , 06 .0 8 , 06 .1 2 , 06 .1 6 , 06 .2 0 , 06 .2
4 , 06 .2 8 , 06 .3 2 , 06 .3 6 , 06 .4 0 , 06 .4 4 , 06 .4 8 , 06 .5 2 , 06 .5 6 , 06 .6 0 ,
131 06 .6 4 , 06 .6 8 , 06 .7 2 , 06 .7 6 , 06 .8 0 , 06 .8 4 , 06 .8 8 , 06 .9 2 , 06 .9 6 , 07 .0 0 , 07 .0
3 , 07 .0 7 , 07 .1 1 , 07 .1 5 , 07 .1 9 , 07 .2 3 , 07 .2 7 , 07 .3 1 , 07 .3 5 , 07 .3 9 ,
132 07 .4 3 , 07 .4 7 , 07 .5 1 , 07 .5 5 , 07 .5 9 , 07 .6 2 , 07 .6 6 , 07 .7 0 , 07 .7 4 , 07 .7 8 , 07 .8
2 , 07 .8 6 , 07 .9 0 , 07 .9 4 , 07 .9 8 , 08 .0 2 , 08 .0 6 , 08 .0 9 , 08 .1 3 , 08 .1 7 ,
133 08 .2 1 , 08 .2 5 , 08 .2 9 , 08 .3 3 , 08 .3 7 , 08 .4 1 , 08 .4 5 , 08 .4 9 , 08 .5 2 , 08 .5 6 , 08 .6
0 , 08 .6 4 , 08 .6 8 , 08 .7 2 , 08 .7 6 , 08 .8 0 , 08 .8 4 , 08 .8 8 , 08 .9 1 , 08 .9 5 ,
134 08 .9 9 , 09 .0 3 , 09 .0 7 , 09 .1 1 , 09 .1 5 , 09 .1 9 , 09 .2 3 , 09 .2 6 , 09 .3 0 , 09 .3 4 , 09 .3
8 , 09 .4 2 , 09 .4 6 , 09 .5 0 , 09 .5 4 , 09 .5 7 , 09 .6 1 , 09 .6 5 , 09 .6 9 , 09 .7 3 ,
61
135 09 .7 7 , 09 .8 1 , 09 .8 5 , 09 .8 9 , 09 .9 2 , 09 .9 6 , 10 .0 0 , 10 .0 4 , 10 .0 8 , 10 .1 2 , 10 .1
6 , 10 .1 9 , 10 .2 3 , 10 .2 7 , 10 .3 1 , 10 .3 5 , 10 .3 9 , 10 .4 3 , 10 .4 7 , 10 .5 0 ,
136 10 .5 4 , 10 .5 8 , 10 .6 2 , 10 .6 6 , 10 .7 0 , 10 .7 3 , 10 .7 7 , 10 .8 1 , 10 .8 5 , 10 .8 9 , 10 .9
3 , 10 .9 7 , 11 .0 0 , 11 .0 4 , 11 .0 8 , 11 .1 2 , 11 .1 6 , 11 .2 0 , 11 .2 3 , 11 .2 7 ,
137 11 .3 1 , 11 .3 5 , 11 .3 9 , 11 .4 3 , 11 .4 6 , 11 .5 0 , 11 .5 4 , 11 .5 8 , 11 .6 2 , 11 .6 6 , 11 .6
9 , 11 .7 3 , 11 .7 7 , 11 .8 1 , 11 .8 5 , 11 .8 9 , 11 .9 2 , 11 .9 6 , 12 .0 0 , 12 .0 4 ,
138 12 .0 8 , 12 .1 1 , 12 .1 5 , 12 .1 9 , 12 .2 3 , 12 .2 7 , 12 .3 0 , 12 .3 4 , 12 .3 8 , 12 .4 2 , 12 .4
6 , 12 .4 9 , 12 .5 3 , 12 .5 7 , 12 .6 1 , 12 .6 5 , 12 .6 8 , 12 .7 2 , 12 .7 6 , 12 .8 0 ,
139 12 .8 4 , 12 .8 7 , 12 .9 1 , 12 .9 5 , 12 .9 9 , 13 .0 3 , 13 .0 6 , 13 .1 0 , 13 .1 4 , 13 .1 8 , 13 .2
1 , 13 .2 5 , 13 .2 9 , 13 .3 3 , 13 .3 6 , 13 .4 0 , 13 .4 4 , 13 .4 8 , 13 .5 1 , 13 .5 5 ,
140 13 .5 9 , 13 .6 3 , 13 .6 7 , 13 .7 0 , 13 .7 4 , 13 .7 8 , 13 .8 2 , 13 .8 5 , 13 .8 9 , 13 .9 3 , 13 .9
6 , 14 .0 0 , 14 .0 4 , 14 .0 8 , 14 .1 1 , 14 .1 5 , 14 .1 9 , 14 .2 3 , 14 .2 6 , 14 .3 0 ,
141 14 .3 4 , 14 .3 8 , 14 .4 1 , 14 .4 5 , 14 .4 9 , 14 .5 2 , 14 .5 6 , 14 .6 0 , 14 .6 4 , 14 .6 7 , 14 .7
1 , 14 .7 5 , 14 .7 8 , 14 .8 2 , 14 .8 6 , 14 .9 0 , 14 .9 3 , 14 .9 7 , 15 .0 1 , 15 .0 4 ,
142 15 .0 8 , 15 .1 2 , 15 .1 5 , 15 .1 9 , 15 .2 3 , 15 .2 6 , 15 .3 0 , 15 .3 4 , 15 .3 7 , 15 .4 1 , 15 .4
5 , 15 .4 8 , 15 .5 2 , 15 .5 6 , 15 .5 9 , 15 .6 3 , 15 .6 7 , 15 .7 0 , 15 .7 4 , 15 .7 8 ,
143 15 .8 1 , 15 .8 5 , 15 .8 9 , 15 .9 2 , 15 .9 6 , 16 .0 0 , 16 .0 3 , 16 .0 7 , 16 .1 1 , 16 .1 4 , 16 .1
8 , 16 .2 2 , 16 .2 5 , 16 .2 9 , 16 .3 2 , 16 .3 6 , 16 .4 0 , 16 .4 3 , 16 .4 7 , 16 .5 1 ,
144 16 .5 4 , 16 .5 8 , 16 .6 1 , 16 .6 5 , 16 .6 9 , 16 .7 2 , 16 .7 6 , 16 .7 9 , 16 .8 3 , 16 .8 7 , 16 .9
0 , 16 .9 4 , 16 .9 7 , 17 .0 1 , 17 .0 5 , 17 .0 8 , 17 .1 2 , 17 .1 5 , 17 .1 9 , 17 .2 2 ,
145 17 .2 6 , 17 .3 0 , 17 .3 3 , 17 .3 7 , 17 .4 0 , 17 .4 4 , 17 .4 7 , 17 .5 1 , 17 .5 5 , 17 .5 8 , 17 .6
2 , 17 .6 5 , 17 .6 9 , 17 .7 2 , 17 .7 6 , 17 .7 9 , 17 .8 3 , 17 .8 6 , 17 .9 0 , 17 .9 4 ,
146 17 .9 7 , 18 .0 1 , 18 .0 4 , 18 .0 8 , 18 .1 1 , 18 .1 5 , 18 .1 8 , 18 .2 2 , 18 .2 5 , 18 .2 9 , 18 .3
2 , 18 .3 6 , 18 .3 9 , 18 .4 3 , 18 .4 6 , 18 .5 0 , 18 .5 3 , 18 .5 7 , 18 .6 0 , 18 .6 4 ,
147 18 .6 7 , 18 .7 1 , 18 .7 4 , 18 .7 8 , 18 .8 1 , 18 .8 5 , 18 .8 8 , 18 .9 2 , 18 .9 5 , 18 .9 8 , 19 .0
2 , 19 .0 5 , 19 .0 9 , 19 .1 2 , 19 .1 6 , 19 .1 9 , 19 .2 3 , 19 .2 6 , 19 .3 0 , 19 .3 3 ,
148 19 .3 6 , 19 .4 0 , 19 .4 3 , 19 .4 7 , 19 .5 0 , 19 .5 4 , 19 .5 7 , 19 .6 0 , 19 .6 4 , 19 .6 7 , 19 .7
1 , 19 .7 4 , 19 .7 7 , 19 .8 1 , 19 .8 4 , 19 .8 8 , 19 .9 1 , 19 .9 4 , 19 .9 8 , 20 .0 1 ,
149 20 .0 5 , 20 .0 8 , 20 .1 1 , 20 .1 5 , 20 .1 8 , 20 .2 2 , 20 .2 5 , 20 .2 8 , 20 .3 2 , 20 .3 5 , 20 .3
8 , 20 .4 2 , 20 .4 5 , 20 .4 8 , 20 .5 2 , 20 .5 5 , 20 .5 8 , 20 .6 2 , 20 .6 5 , 20 .6 8 ,
150 20 .7 2 , 20 .7 5 , 20 .7 8 , 20 .8 2 , 20 .8 5 , 20 .8 8 , 20 .9 2 , 20 .9 5
151 };
152
153 / / ________________________N2_________________________
154 # d e f i n e PIN_OUTPUT 45
155 / / D e f i n e V a r i a b l e s we ’ l l be c o n n e c t i n g t o
156 double S e t p o i n t , I n p u t , Output , timer , i n i c i o ;
157 / / ________________________N2_________________________
158
159
160 / / Function f o r t r a n s f e r i n g SPI d a t a t o t h e CJ125 .
161 u i n t 16 _ t COM_SPI ( u i n t 16 _ t TX_data ) {
162
163 / / C o n f i g u r e SPI f o r CJ125 c o n t r o l l e r .
164 SPI . setDataMode ( SPI_MODE1 ) ;
165 SPI . s e t C l o c k D i v i d e r ( SPI_CLOCK_DIV128 ) ;
166
62
303
304 / / Error handling .
305 S e r i a l . p r i n t l n ( " E r r o r a c c e s s i n g SD−c a r d . " ) ;
306
307 }
308
309 }
310
311 / / Function t o s e t up d e v i c e f o r o p e r a t i o n .
312 v o i d s e t u p ( ) {
313
314 / / S e t up s e r i a l communication .
315 S e r i a l . b e g i n ( 9600 ) ;
316
317 / / ________________________N2_________________________
318 pinMode ( PIN_OUTPUT , OUTPUT) ;
319 / / i n i t i a l i z e t h e v a r i a b l e s we ’ r e l i n k e d t o
320 Setpoint = 5 ;
321 timer = m i l l i s ( ) ;
322 i n i c i o = timer ;
323 / / ________________________N2_________________________
324
325 / / S e t up SPI .
326 SPI . b e g i n ( ) ; / * Note , SPI w i l l d i s a b l e t h e b u l t i n LED . */
327 SPI . s e t B i t O r d e r ( MSBFIRST ) ;
328
329 pinMode ( 31 , OUTPUT) ;
330
331 / / S e t up d i g i t a l o u t p u t p i n s .
332 pinMode ( CJ125_NSS_PIN , OUTPUT) ;
333 pinMode (LED_STATUS_POWER, OUTPUT) ;
334 pinMode (LED_STATUS_HEATER , OUTPUT) ;
335 pinMode (HEATER_OUTPUT_PIN , OUTPUT) ;
336
337 // Set i n i t i a l values .
338 d i g i t a l W r i t e ( CJ125_NSS_PIN , HIGH) ;
339 d i g i t a l W r i t e (LED_STATUS_POWER, LOW) ;
340 d i g i t a l W r i t e (LED_STATUS_HEATER , LOW) ;
341 a n a l o g W r i t e (HEATER_OUTPUT_PIN , 0 ) ; / * PWM i s i n i t i a l l y o f f . */
342 a n a l o g W r i t e (ANALOG_OUTPUT_PIN, 0 ) ; / * PWM i s i n i t i a l l y o f f . */
343
344 / / S t a r t o f o p e r a t i o n . ( T e s t LED ’ s ) .
345 S e r i a l . p r i n t ( " Dev ice r e s e t . \ n \ r " ) ;
346 d i g i t a l W r i t e (LED_STATUS_POWER, HIGH) ;
347 d i g i t a l W r i t e (LED_STATUS_HEATER , HIGH) ;
348 d e l a y ( 200 ) ;
349 d i g i t a l W r i t e (LED_STATUS_POWER, LOW) ;
66
396
397 / / S e t CJ125 i n c a l i b r a t i o n mode .
398 COM_SPI ( CJ125_INIT_REG1_MODE_CALIBRATE) ;
399
400 / / Let values s e t t l e .
401 d e l a y ( 500 ) ;
402
403 / / S t o r e o p t i m a l v a l u e s b e f o r e l e a v i n g c a l i b r a t i o n mode .
404 adcValue_UA_Optimal = analogRead (UA_ANALOG_INPUT_PIN) ;
405 adcValue_UR_Optimal = analogRead (UR_ANALOG_INPUT_PIN) ;
406
407 / / Update a n a l o g output , d i s p l a y t h e o p t i m a l v a l u e .
408 adcValue_UA = adcValue_UA_Optimal ;
409 UpdateAnalogOutput ( ) ;
410
411 / / S e t CJ125 i n normal o p e r a t i o n mode .
412 / / COM_SPI ( CJ125_INIT_REG1_MODE_NORMAL_V8 ) ; / * V=0 * /
413 COM_SPI ( CJ125_INIT_REG1_MODE_NORMAL_V17 ) ; / * V=1 * /
414
415 // Present c a l i b r a t i o n data :
416 S e r i a l . p r i n t ( " UA_Optimal ( \ lambda = 1 . 0 0 ) : " ) ;
417 S e r i a l . p r i n t ( adcValue_UA_Optimal ) ;
418 S e r i a l . p r i n t ( " ( \ lambda =" ) ;
419 S e r i a l . p r i n t ( Lookup_Lambda ( adcValue_UA_Optimal ) , 2 ) ;
420 Serial . pri nt ( " ) \n\ r " ) ;
421 S e r i a l . p r i n t ( " UR_Optimal : " ) ;
422 S e r i a l . p r i n t ( adcValue_UR_Optimal ) ;
423 Serial . pri nt ( " \n\ r " ) ;
424
425 / * Heat up s e n s o r . T h i s i s d e s c r i b e d i n d e t a i l i n t h e d a t a s h e e t o f t h e LSU
4 . 9 s e n s o r with a
426 c o n d e n s a t i o n phase and a ramp up f a c e b e f o r e g o i n g i n t o PID c o n t r o l .
* /
427 S e r i a l . p r i n t ( " Heating s e n s o r . \ n \ r " ) ;
428
429 // Calculate supply v o l t a g e .
430 f l o a t S u p p l y V o l t a g e = ( ( ( f l o a t ) adcValue_UB / 1023 * 5 ) / 10000 ) * 110000 ;
431
432 / / Condensation phase , 2V f o r 5 s .
433 i n t CondensationPWM = ( 2 / S u p p l y V o l t a g e ) * 255 ;
434 a n a l o g W r i t e (HEATER_OUTPUT_PIN , CondensationPWM ) ;
435
436 int t = 0 ;
437 w h i l e ( t < 5 && analogRead (UB_ANALOG_INPUT_PIN) > UBAT_MIN) {
438
439 / / F l a s h Heater LED i n c o n d e n s a t i o n phase .
440 d i g i t a l W r i t e (LED_STATUS_HEATER , HIGH) ;
68
441 d e l a y ( 500 ) ;
442
443 d i g i t a l W r i t e (LED_STATUS_HEATER , LOW) ;
444 d e l a y ( 500 ) ;
445
446 t += 1 ;
447
448 }
449
450 / / Ramp up phase , +0.4V / s u n t i l 100% PWM from 8 . 5V .
451 f l o a t UHeater = 8 .5 ;
452 w h i l e ( UHeater < 13 .0 && analogRead (UB_ANALOG_INPUT_PIN) > UBAT_MIN) {
453
454 / / S e t h e a t e r o u t p u t d u r i n g ramp up .
455 CondensationPWM = ( UHeater / S u p p l y V o l t a g e ) * 255 ;
456
457 i f ( CondensationPWM > 255 ) CondensationPWM = 255 ; / * I f s u p p l y v o l t a g e i s
l e s s than 13V , maximum i s 100% PWM* /
458
459 a n a l o g W r i t e (HEATER_OUTPUT_PIN , CondensationPWM ) ;
460
461 / / F l a s h Heater LED i n c o n d e n s a t i o n phase .
462 d i g i t a l W r i t e (LED_STATUS_HEATER , HIGH) ;
463 d e l a y ( 500 ) ;
464
465 d i g i t a l W r i t e (LED_STATUS_HEATER , LOW) ;
466 d e l a y ( 500 ) ;
467
468 / / Increment V o l t a g e .
469 UHeater += 0 .4 ;
470
471 }
472
473 / / Heat u n t i l t e m p e r a t u r e optimum i s r e a c h e d or e xcee ded ( lower v a l u e i s
warmer ) .
474 w h i l e ( analogRead (UR_ANALOG_INPUT_PIN) > adcValue_UR_Optimal && analogRead
(UB_ANALOG_INPUT_PIN) > UBAT_MIN) {
475
476 / / F l a s h Heater LED i n c o n d e n s a t i o n phase .
477 d i g i t a l W r i t e (LED_STATUS_HEATER , HIGH) ;
478 d e l a y ( 500 ) ;
479
480 d i g i t a l W r i t e (LED_STATUS_HEATER , LOW) ;
481 d e l a y ( 500 ) ;
482
483 }
484
69
530 }
531
532 / / D i s p l a y on s e r i a l p o r t a t d e f i n e d r a t e . Comma s e p a r a t e v a l u e s , r e a d a b l e
by f r o n t e n d s .
533 i f ( ( 100 / SERIAL_RATE ) == s e r i a l _ c o u n t e r ) {
534
535 // Reset counter .
536 serial_counter = 0 ;
537
538 / / C a l c u l a t e Lambda Value .
539 f l o a t LAMBDA_VALUE = Lookup_Lambda ( adcValue_UA ) ;
540
541 / / C a l c u l a t e Oxygen Content .
542 f l o a t OXYGEN_CONTENT = Lookup_Oxygen ( adcValue_UA ) ;
543
544 / / Update a n a l o g o u t p u t .
545 UpdateAnalogOutput ( ) ;
546
547 / / D i s p l a y i n f o r m a t i o n i f no e r r o r s i s r e p o r t e d .
548 i f ( CJ125 _ S t a t u s == CJ125_DIAG_REG_STATUS_OK ) {
549
550 / / Assembled d a t a .
551 S t r i n g t x S t r i n g = " Measuring , CJ125 : 0 x " ;
552 t x S t r i n g += S t r i n g ( CJ125 _ S t a t u s , HEX) ;
553 t x S t r i n g += " , UA_ADC: " ;
554 t x S t r i n g += S t r i n g ( adcValue_UA , DEC) ;
555 t x S t r i n g += " , UR_ADC: " ;
556 t x S t r i n g += S t r i n g ( adcValue_UR , DEC) ;
557 t x S t r i n g += " , UB_ADC : " ;
558 t x S t r i n g += S t r i n g ( adcValue_UB , DEC) ;
559
560 / / D i s p l a y lambda v a l u e u n l e s s out o f range .
561 i f ( adcValue_UA >= 39 && adcValue_UA <= 791 ) {
562 t x S t r i n g += " , Lambda : " ;
563 t x S t r i n g += S t r i n g (LAMBDA_VALUE, 2 ) ;
564 } else {
565 t x S t r i n g += " , Lambda : −" ;
566 }
567
568 / / D i s p l a y oxygen u n l e s s out o f range .
569 i f ( adcValue_UA >= 307 ) {
570 t x S t r i n g += " , Oxygen : " ;
571 t x S t r i n g += S t r i n g (OXYGEN_CONTENT, 2 ) ;
572 t x S t r i n g += "%" ;
573 } else {
574 t x S t r i n g += " , Oxygen : −" ;
575 }
71
576
577 / / Output s t r i n g
578 // Serial . println ( txString ) ;
579
580 //
________________________N2__________________________________________________
581 OXYGEN_CONTENT;
582 // Serial . print (" ") ;
583 i f ( m i l l i s ( ) − t i m e r >= 500 )
584 {
585 S e r i a l . p r i n t l n (OXYGEN_CONTENT) ;
586 timer = m i l l i s ( ) ;
587 }
588
589 / / c o n t r o l e on− o f f
590 / / /*
591 i f (OXYGEN_CONTENT > S e t p o i n t && m i l l i s ( ) − i n i c i o >= 50000 )
592 {
593 d i g i t a l W r i t e ( PIN_OUTPUT , HIGH) ;
594 // Serial . print (" ") ;
595 / / S e r i a l . p r i n t l n ( " HIGH " ) ;
596 }
597 else
598 {
599 d i g i t a l W r i t e ( PIN_OUTPUT , LOW) ;
600 // Serial . print (" ") ;
601 / / S e r i a l . p r i n t l n ( "LOW" ) ;
602 }
603 / / */
604 //
________________________N2__________________________________________________
605
606
607 / / Log s t r i n g .
608 i f ( l o g E n a b l e d == t r u e ) l o g D a t a ( t x S t r i n g ) ;
609
610 } else {
611
612 / / Error handling .
613 s w i t c h ( CJ125 _ S t a t u s ) {
614
615 c a s e CJ125_DIAG_REG_STATUS_NOPOWER :
616 S e r i a l . p r i n t ( " Error , CJ125 : 0 x " ) ;
617 S e r i a l . p r i n t ( CJ125 _ S t a t u s , HEX) ;
618 S e r i a l . p r i n t ( " ( No Power ) \ n \ r " ) ;
72
619 break ;
620
621 c a s e CJ125_DIAG_REG_STATUS_NOSENSOR :
622 S e r i a l . p r i n t ( " Error , CJ125 : 0 x " ) ;
623 S e r i a l . p r i n t ( CJ125 _ S t a t u s , HEX) ;
624 S e r i a l . p r i n t ( " ( No S e n s o r ) \ n \ r " ) ;
625 break ;
626
627 default :
628 S e r i a l . p r i n t ( " Error , CJ125 : 0 x " ) ;
629 S e r i a l . p r i n t ( CJ125 _ S t a t u s , HEX) ;
630 Serial . pri nt ( " \n\ r " ) ;
631
632 }
633
634 }
635
636 }
637
638 / / Increment s e r i a l o u t p u t c o u n t e r and d e l a y f o r n e x t c y c l e . The PID
r e q u i r e s t o be r e s p o n s i v e but we don ’ t need t o f l o o d t h e s e r i a l p o r t .
639 s e r i a l _ c o u n t e r ++;
640 d e l a y ( 10 ) ;
641
642 }
17 S e r i a l . p r i n t l n ( " P r e s s i o n e − ou z p a r a d i m i n u i r o f a t o r de c a l i b r a c a o . " ) ;
18
19 s c a l e . b e g i n (DT, SCK ) ;
20 scale . set_scale () ;
21 s c a l e . t a r e ( ) ; / / R e s e t a a e s c a l a pa r a 0
22 }
23
24 void loop ( ) {
25
26 / / Usa e s t e f a t o r de c a l i b r a c a o p a ra a medicao
27
28 scale . set_scale ( fator_de_calibracao ) ;
29 S e r i a l . p r i n t ( " Massa : " ) ;
30
31 / / s c a l e . g e t _ u n i t s r e t o r n a a massa do o b j e t o .
32 / / Usa−s e 1 c a s a d e c i m a l .
33
34 Serial . print ( scale . get_units () , 1) ;
35 Serial . p r i n t l n ( " gramas . " ) ;
36 Serial . print ( " Fator_de_calibracao : " ) ;
37 Serial . print ( fator_de_calibracao ) ;
38 Serial . println () ;
39
40 i f ( Serial . available ( ) )
41 {
42 char temp = S e r i a l . r e a d ( ) ;
43 i f ( temp == ’+ ’ | | temp == ’ a ’ )
44 f a t o r _ d e _ c a l i b r a c a o += 1 ;
45 e l s e i f ( temp == ’− ’ | | temp == ’ z ’ )
46 f a t o r _ d e _ c a l i b r a c a o −= 1 ;
47 }
48
49 d e l a y ( 500 ) ;
50 }