Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
1
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO
SUL
FACULDADE DE ENGENHARIA
PROJETO DE UM SISTEMA DE REFRIGERAÇÃO DE
AMBIENTES UTILIZANDO PASTILHAS PELTIER
Porto Alegre, data por extenso de 2017.
Autor: José Antonio Maciel Vasconcelos
Pontifícia Universidade Católica do Rio Grande do Sul
Curso de Engenharia Elétrica
Av. Ipiranga 6681, - Prédio 30 - CEP: 90619-900 - Porto Alegre - RS - Brasil
E-mail: [email protected]
Orientador: Júlio César Marques de Lima, Me. Eng
Pontifícia Universidade Católica do Rio Grande do Sul
Av. Ipiranga 6681, – Prédio 30 - Sala 312 CEP: 90619-900 – Porto Alegre – RS–
Brasil
E-mail: [email protected]
RESUMO Este trabalho objetiva descrever o desenvolvimento de um sistema de refrigeração de ambientes (CONDICIONADOR DE AR) portátil utilizando pastilhas Peltier como elementos refrigerantes. Ele descreve a elaboração de um protótipo tanto em aspectos construtivos, como disposição dos dissipadores de calor, do controle da potência através de um sinal PWM proveniente de um sistema microcontrolado, como também a programação do microcontrolador escolhido em linguagem C, que permitirá a construção de uma interface que permita ao usuário ajustar as condições de uso do equipamento, como a temperatura desejada e o período de funcionamento. O controle será feito através de um painel localizado na parte frontal do equipamento. Também será empregado no projeto um umidificador de ar utilizando pastilha piezoeléctrica como gerador de ultrassom, a qual permite obter uma nevoa de água resfriada pelo sistema, o que aumentará o conforto térmico do usuário através do resfriamento evaporativo.
Palavras-chave: Efeito Peltier, modulação PWM, Piezo eletricidade,
programação em linguagem C, microcontroladores.
2
ABSTRACT
PROJECT OF A SYSTEM OF REFRIGERATION OF ENVIRONMENTS USING
PELTIER MODULES
This work aims to describe the development of a room cooling system (AIR
CONDITIONER) using Peltier pellets as refrigerants. It describes the elaboration of a
prototype in both constructive aspects, the arrangement of heat sinks and the
realization of the control of the power through a PWM signal coming from a
microcontrolled system, as well as the programming of the microcontroller chosen in
language C, that will allow the construction of an interface that allows the user to adjust
the conditions of use of the equipment, such as the desired temperature and the period
of operation. The control will be done through a panel located on the front of the
equipment. An air humidifier will also be used in the design using a piezoelectric tablet
as an ultrasonic generator, which allows a mist of water cooled by the system, which
will increase the user's thermal comfort through evaporative cooling.
Key-words: Peltier effect, PWM modulation, Piezo electricity, C
programming, microcontrollers
1 INTRODUÇÃO
O presente artigo foi dividido em quatro partes principais: No item Introdução
será descrito o problema escolhido para ser estudado, o teor da proposta, as principais
contribuições do presente trabalho. Em referencial teórico será dada uma breve descrição
do fenômeno físico da termoeletricidade, do controle de potência através da modulação
por largura de pulso (PWM) e da piezeletricidade. Em Metodologia e Dimensionamento
do Protótipo, descreve-se a metodologia utilizada na realização do presente trabalho e as
ferramentas de desenvolvimento utilizadas na sua elaboração. Um diagrama em blocos
ilustra as partes do protótipo proposto e seu dimensionamento é descrito. No item
Aplicação da Metodologia Proposta apresenta-se o protótipo construído e os resultados
experimentais obtidos em bancada. Ao final deste artigo serão apresentadas uma
conclusão e uma referência bibliográfica detalhada.
3
1.1 Tema de Pesquisa
A proposta desse trabalho é desenvolver um protótipo de condicionador de ar que
utilize pastilhas de efeito Peltier para promover a troca de calor entre ambientes, não
necessitando de gases refrigerantes, que são agravadores do efeito estufa na atmosfera,
bem como o uso de qualquer equipamento pesado e barulhento, como o compressor
utilizado nos equipamentos de ar condicionado tradicionais. Com isso o aparelho ficará
mais leve e com dimensões reduzidas, facilitando seu transporte. Também será mais
silencioso, já que não será utilizado um compressor que é grande fonte de ruído, além de
ser ecologicamente mais adequado. O projeto também contempla um umidificador de ar
integrado que irá gerar uma nevoa com água resfriada para aumentar a sensação de perda
de calor no corpo através do resfriamento evaporativo, melhorando a eficiência do
equipamento, e também melhorando a umidade relativa do ar, que junto com altas
temperaturas é um problema comum em certar regiões, como o centro oeste brasileiro.
Além disto, é sabido que equipamentos de ar condicionado do tipo Split diminuem a
umidade do ar, o que pode ser uma vantagem desta proposta de equipamento para
melhoria do conforto ambiental. A figura 1 apresenta um diagrama em blocos do sistema
de ar condicionado proposto neste trabalho, onde estão indicados os diversos elementos
que compõem o mesmo.
1.2 Justificativa do Tema
Cada vez mais se investe no conforto das residências, principalmente em aspectos
como ergonomia, iluminação, ventilação e climatização de ambientes. Este tem sido um
dos principais alvos da indústria de demótica. Nos últimos anos surgiram no mercado
equipamentos de condicionamento de ar com a proposta de serem portáteis e dispensarem
investimentos com obras de instalação. Estes equipamentos são instalados em aberturas,
como janelas, através de dutos de ar flexíveis que são facilmente colocados nestas
aberturas. Esses equipamentos empregam conceitos já bastante conhecidos e empregados
em aparelhos convencionais, ou seja, a tecnologia de retirar o calor do ambiente através
do uso de compressores, serpentina e gases refrigerantes. Estes gases, na fase de
expansão, absorvem o calor, e na fase de compressão, que os faz voltar ao volume
original, devolvem o calor absorvido para o ambiente exterior. Como todo o equipamento
fica dentro de um gabinete, tanto o condensador que contém o barulhento compressor de
gás quanto o evaporador responsável pela troca de calor com o ambiente, estes
4
equipamentos geram considerável ruído e consequente desconforto sonoro durante sua
utilização. A adoção, há alguns anos, da tecnologia Split em condicionadores de ar, foi
justamente pensada de modo a colocar o estágio mais barulhento do aparelho em um
ambiente diferente daquele em que as pessoas se encontram, melhorando assim os níveis
de ruído para o usuário. Com a utilização de aparelhos portáteis, optou-se por menor
conforto sonoro, em troca da sua portabilidade. Embora vendidos como equipamentos
portáteis, uma análise mais cuidadosa sobre os mesmos irá sinalizar que estes não são tão
portáteis quanto se propõem a ser. São pesados, tendo cerca de 30 kg e bastante
volumosos, com cerca de 80 centímetros de altura por 50 centímetros em largura e
profundidade. Assim não podem ser transportados facilmente em viagens, por exemplo.
Módulos peltier são utilizados há muito tempo em equipamentos comerciais de
refrigeração de bebidas, mas não são amplamente utilizados nas residências. Nos campos
da industria e militar, a refrigeração por termoeletricidade, vem ganhando cada vez mais
espaço, devido ao seu baixo custo de manutenção, pois depende de poucas partes moveis
e resistência a vibração e choques. A empresa estadunidense TECA (ThermoElectric
Cooling America Corporation), sediada em Chicago, especializou-se no desenvolvimento
de soluções de refrigeração industrial e militar com módulos termoelétricos. Podemos
citar o dispositivo AHP-1801X , fabricada por esta empresa, como um bom exemplo da
versatilidade e eficiência destes módulos. A figura 1 mostra o equipamento.
Figura 1 – Foto do dispositivo AHP-1801X
Fonte:https://www.thermoelectric.com/category/applications/app-001/app-
003/communications/
Na figura 2 a seguir é demostrado a instalação do equipamento em um gabinete
de telecomunicação em área descoberta. Onde o equipamento refrigera continuamente
um equipamento que gera uma grande quantidade de calor.
5
Figura 2 - Gabinetes de telecomunicações desabrigados
Fonte:https://www.thermoelectric.com/category/applications/app-001/app-
003/communications/
No campo militar, o equipamento vem sendo utilizado em estações moveis de
comunicação, onde sua reduzida massa e robustez a choques tem agregado grande valor
ao equipamento, como visto na figura 3.
6
Figura 3 - Aplicação em telecomunicações militares
Fonte:https://www.thermoelectric.com/category/applications/app-001/app-
003/communications/
Desta forma, pensou-se numa forma de utilizar o efeito Peltier, para desenvolver
um condicionador de ar doméstico, que fosse leve e silencioso. Aliado a isso um
umidificador por ultrassom, que trabalhando de forma conjugada as pastilhas Peltier,
pudesse melhorar a umidade relativa do ar, além de reduzir a temperatura.
1.3 Objetivo do Trabalho
Como principais objetivos deste trabalho pode-se citar:
a) Verificar a viabilidade da utilização das pastilhas Peltier na refrigeração de ambientes.
b) Demonstrar uma aplicação prática da termoeletricidade.
c) Desenvolver um sistema de controle para o equipamento proposto.
d) Fazer um comparativo entre o protótipo e os equipamentos de mesma finalidade
existentes no mercado.
7
1.4 Delimitações do Trabalho
O objetivo deste trabalho é demonstrar a aplicação da termoeletricidade e avaliar
sua viabilidade na climatização de ambientes. Não é o objetivo fazer uma análise
profunda do fenômeno ou dos materiais utilizados para esse fim. Embora uma breve
análise e descrição do fenômenos físicos envolvidos seja feito.
2 REFERENCIAL TEÓRICO
Neste referencial teórico serão apresentados de forma sucinta, tópicos
relacionados com o efeito Peltier, controle de potência por modulação de pulso (PWM) e
o fenômeno da piezeletricidade. Estes tópicos foram retirados de livros, artigos
acadêmicos, application notes ou encontrados em sites da internet, sendo considerados
os mais importantes para a fundamentação teórica deste artigo.
2.1 Efeito Peltier
O efeito Peltier, descrito por Jean Charles Athanase Peltier em 1834, é a absorção
de calor por uma junção de termopar enquanto a outra junção libera o calor absorvido,
quando uma corrente elétrica flui entre elas. É um fenômeno de mesma natureza do efeito
Seebeck (1821) [Drebushchak 2008]. Desta forma as deduções feitas para este fenômeno,
como o coeficiente Seebeck (α) podem ser usadas para determinar a eficiência de uma
pastilha Peltier, pois este coeficiente relaciona a temperatura dos termopares com a
diferença do potencial elétrico entre eles. Já o coeficiente Peltier “Π” relaciona o calor
transferido pelo sistema com a corrente elétrica que flui entre os termopares. A figura 4
mostra a construção básica de um termopar e a “eq 1” o calor associado ao sistema:
8
Figura 4 Esquema termopar
Fonte: Autoria própria
Qp=Π×I (1)
Onde:
Qp é o calor associado ao sistema [Watts W].
Π é o coeficiente de Peltier.[W/A]
I é a corrente elétrica no sistema. [Ampère A]
A relação entre o efeito Peltier e o coeficiente Seebeck aparece nas “eq 2” :
Equação 2 Coeficiente Peltier
Π=α×T (2)
Com isso conclui-se que o calor associado ao sistema também pode ser calculada em
relação ao efeito Seebeck. Como pode ser visto na “eq 3”.
Qp= α×I×T (3)
Onde:
α é o coeficiente Seebeck[V/K°]
T e a temperatura absoluta do sistema. [Graus Kelvin ° K]
Da figura 4 vê-se a junção A e B formada entre metais ou ligas metálicas
diferentes que se encontram e a temperatura T1 e T2. E considerando T1>T2, surgirá
9
uma tensão U nos terminais (circuito aberto), que é calculada em função da diferença de
temperatura e do coeficiente SeedBeck α, conforme descreve a “Eq 4”:
U=α×(T1-T2) (4)
Sendo U a diferença de potencial (Volts) entre os terminais e T1 e T2 a temperatura nas
junções dos termopares (°K). O coeficiente Seebeck pode ser calculado com a “equ 5”:
α=U/((∆T)) (5)
Esse fenômeno se explica pelo balanço energético que tende a se manter no
sistema. Quando aquecemos um metal ou semicondutor os átomos transmitem essa
energia para os elétrons da camada de valência. Esses elétrons livres são portadores de
energia e tendem a migrar para áreas de menor energia. Estando a extremidade fria (com
menos energia calorífica), estes elétrons livres migram para a parte mais fria. Com isso,
a parte quente ficará com falta de eletros, portanto carregada positivamente. A
extremidade fria ficará com excesso de elétrons, ou seja, carregada negativamente. Cada
material tem uma capacidade especifica de absorver calor e conduzir essa energia
calorifica. Então, dois metais diferentes, estando na mesma temperatura, terão adquirido
quantidades de energia diferentes. Logo haverá um fluxo de elétrons entre o elemento
com mais portadores de carga negativa para o que tem menos portadores. Essa
transferência ocorre nas junções dos termopares. O fluxo de elétrons entre a parte quente
e a parte fria permanecerá até que os elétrons livres não tenham mais força para vencer a
diferença de potencial formada, ou até que o equilíbrio de temperatura seja atingido.
No efeito Peltier, provoca-se artificialmente uma corrente elétrica entre a junção
de dois materiais com características elétricas diferentes. Buscando o equilíbrio
eletrônico, os elétrons saltam a junção do material com excesso de elétrons para o com
falta destes. Mas apenas os elétrons, na camada de valência com energia suficiente parta
fazer este salto, do material N para P, o fazem. Dessa forma a energia necessária para
realizar o salto é obtida do ambiente, através da absorção do calor. Já na outra junção, P
para N, esta energia extra, não é necessária, sendo liberada para o ambiente na forma de
calor [Drebushchak 2008], [Nolas , Goldsmid, 2001]. A figura 5 mostra a absorção de
calor na junção A e a liberação deste na junção B:
10
Figura 5 – Esquema do efeito Peltier em um Termopar
Fonte: Autoria própria
Os materiais tem propriedades elétricas e térmicas diferentes. Dessa forma tem
capacidades diferentes de conduzir calor através de uma corrente elétrica. Para ser
considerado adequado para esse fim, o material terá que ter um elevado coeficiente
Seebeck, baixa capacidade de condução térmica e baixa resistividade elétrica. Há certa
dificuldade em encontrar materiais com tais características, pois os metais, originalmente
usados nos experimentos, embora tenham baixa resistividade elétrica, são considerados
bons condutores de calor e tem baixo coeficiente de Seebeck. Por outro lado, materiais
isolantes térmicos, tem elevado coeficiente Seebeck, mas tem elevada resistividade
elétrica. Dessa forma, os melhores resultados, são atingidos com metaloides e
semicondutores, que podem ser dopados para terem características elétricas e térmicas
desejáveis, os quais também possuem coeficientes Seebeck melhores que os metais. Para
determinar a eficiência de sistemas termoelétricos, foi definida a figura de mérito destes
sistemas. Esse parâmetro relaciona as três variáveis para poder comparar a eficiência na
geração de energia, ou transporte de calor, pelos materiais, a uma determinada
temperatura. Quanto maior o valor da figura de mérito, melhor será o material para fins
termoelétricos. A “eq 6” mostra como calcular a figura de mérito dos materiais:
(6)
Sendo:
Z é a figura de mérito medido em ( (inverso da condutividade térmica)
α a constante de Seebeck [V/°K]
k é a condutividade térmica do material [W/K].
ρ resistividade elétrica do material [Ω].
11
A “Eq 6” pode ser reescrita levando-se em consideração a condutividade elétrica, como
mostra a equação 7.
(7)
Sendo:
σ a condutividade elétrica do material [Siemens metro]
Usualmente usa-se uma figura de mérito ZT (adimensional) para uma determinada
temperatura. Essa figura de mérito, para determinada temperatura é calculada com a “Eq
8”:
(8)
Sendo:
T a temperatura absoluta em [°K].
A temperatura absoluta pode ser calculada pela “eq9”. E representa o balanço
energético entre o extremo quente e frio.
T=(Th-Tc)/2
(9)
Sendo:
T a temperatura absoluta em [°K].
Th a temperatura face quente.
TC a temperatura da face fria.
A eficiência das máquinas térmicas, por exemplo uma máquina a vapor, relaciona
a quantidade de calor empregado para obter uma determinada quantidade de energia
aplicada sobre uma carga. A “eq 10” dá essa relação entre o calor empregado e a energia
gerada para a carga:
12
η
(10)
Onde:
η é a eficiência de um gerador elétrico por efeito térmico, dado em porcentual.
W é a potência entregue a uma carga [w].
QH é o fluxo de calor fluindo da fonte de calor para a terminal frio [W]
A relação entre eficiência das máquinas térmicas e o fator de mérito pode ser verificado
na “eq 11”:
η ℎ − ℎ
(1 + )
− 1
(1 − ) + (/ℎ)
(11)
Onde: Th é a temperatura da face quente.[K°] Tc é a temperatura da face fria[K°] Z é o fator de mérito [k^(-1)] T é a temperatura absoluta[°K]
No entanto, eficiência refere-se a relação entre entrada e saída de energia. Em um
módulo Peltier toda a energia térmica que entra no sistema, pela face fria, sai pela face
quente. Sendo adicionado mais a energia da fonte de corrente, usada para conduzir o calor.
Mas o que é importante saber é quanto de energia dever-se-á empregar para transferir
uma determinada quantidade de calor. Neste caso, a que é absorvida pela face fria. Então
o coeficiente de desempenho, COP, utilizado pela indústria de refrigeração, deve ser
levado em consideração na utilização das pastilhas Peltier, pois relaciona o calor
transferido por unidade de potência elétrica fornecida [MARCHI 2007]. O COP é
adimensional e é calculado pela “eq 12”:
COP
(12)
Sendo:
Q" o calor absorvido pela face fria em Watts [W]
W$ é a potência da fonte de alimentação [W]
13
A figura de mérito não é constante com a variação de temperatura, sendo
considerada linear apenas para pequenos intervalos de temperaturas. No anexo A é
apresentado um gráfico com a figura de mérito de alguns materiais.
Como é visto na figura em anexo a liga de bismuto (Bi) e Telúrio (Te) é uma liga
que tem a melhor das figuras de mérito apresentada no gráfico, para a temperatura
ambiente. O bismuto é amplamente utilizado para a fabricação de termopares do tipo N e
P. Ele é relativamente fácil de encontrar na crosta terrestre e é considerado de baixa
toxicidade. Já o telúrio é considerado mais raro e caro, o que torna sua utilização mais
restrita. As pastilhas utilizadas neste projeto empregam uma liga de bismuto e Estanho
(Sn) para produzir os elementos tipo N e P.
Atualmente a indústria constrói células (pastilhas) combinando elementos com
dopagem tipo N e P, unindo-as com um material bom condutor de corrente elétrica,
formando um circuito em série eletricamente e paralelo termicamente. Com isto
consegue-se associar os efeitos de várias junções. Este arranjo de elementos é observado
na figura 6.
Figura 6 - A construção de uma pastilha peltier
Fonte: https://pt.wikipedia.org/wiki/Efeito_Peltier
Para conseguir o efeito desejado, deve-se associar um grande número de
elementos a fim de conseguir uma transferência de calor significativa. A figura 7 mostra
uma pastilha aberta, afim de dar noção do número de elementos associados em cada
pastilha.
14
Figura 7 - Pastilha Peltier aberta
Fonte: http://www.peltier-info.com/photos.html
Neste trabalho serão utilizadas duas pastilhas Peltier para promover a troca de calor
entre o ambiente interno e externo de um cômodo, além de resfriar a água presente no
reservatório do umidificador. Conforme pode ser visto na folha de dados no anexo B. O
modelo TEC1-12712s, usado neste trabalho, tem capacidade máxima de condução de
calor de 115,2 W, quando a temperatura da face fria é mantida a 0°C. Condição muito
difícil de manter. Mas para fins de cálculos a adotaremos. E a fonte de alimentação
fornece 12 V e 12 A. Que resulta em 144 W de potência fornecida pela fonte. Aplicando
a “eq 12” um valor de COP de 0,78 é calculado. Que é um valor muito ruim. Ainda mais
se levando em consideração que a face quente da pastilha não será mantida a 0°C, esse
valor cairá drasticamente. Conforme pode ser verificado no gráfico de performance
presente no anexo B. Neste projeto usou-se 2 pastilhas. Que em condições ideais seria
capaz de retirar 231 W de calor pela face quente. Que durante uma hora nos propiciaria
231W/h de calor retirado do ambiente. Que equivale a 67,68 BTUs. Já que cada BTU
equivale a 0,2930 W/h.
2.2 Modulação PWM
A Modulação PWM (Pulse Width Modulation), é um método eficiente de se
controlar dispositivos analógicos através de um sinal digital [SILVEIRA 2017].
Dispositivos analógicos, como motores CCs e LEDs (Light Emitting Diode,) por
exemplo, tem sua corrente ajustada conforme o valor da tensão de alimentação aplicada
a estas cargas. Se for necessário diminuir analogicamente a rotação do motor ou o brilho
do LED, por exemplo, deve-se reduzir o valor da tensão da fonte que alimenta estas
cargas. Por ser um valor analógico, há infinitas variações na tensão que se pode aplicar à
carga e portanto infinitas variações de rotação e brilho possíveis de serem obtidas.
Embora seja possível controlar analogicamente estas cargas, circuitos para esse fim são
mais dispendiosos e complexos, principalmente na medida em que a potência destas
cargas aumenta.
15
É possível obter o mesmo efeito do controle analógico, na alimentação destas
cargas, aplicando um sinal digital, que controla o tempo em que a alimentação é ligada e
desligada, para uma determinada frequência. A relação entre o tempo ligado e o período
do sinal (tempo ligado + tempo desligado) permite ajustar a tensão eficaz,
conseguintemente corrente entregue a carga [AHAMED, 2000]. Isto é facilmente obtido
com a utilização deste sinal digital no controle de uma chave qualquer (transistor bipolar,
mosfets, relé, contactora, etc). A relação entre a duração total do ciclo e o tempo em que
o sinal permanece em nível lógico alto é chamado de razão cíclica ou duty cycle. Esse
valor é expresso em porcentagem, sinalizando quanto maior for este valor, maior será a
corrente entregue a carga. A figura 8 mostra exemplos de duty cycle de três valores
diferentes do PWM:
Figura 8- Exemplos de sinal PWM
Fonte: https://www.citisystems.com.br/pwm/[6]
Mas não basta apenas controlar a duração do nível alto em relação a duração total do
ciclo. A frequência do sinal deve ser tal que seu período seja muito menor que o tempo
de resposta da carga analógica controlada. Por exemplo: Se for aplicado um sinal PWM
a um LED e o tempo que alimentação permanece desligada for maior que o tempo que o
dispositivo precisa para apagar, percebe-se que o LED irá piscar, mesmo que o duty cycle
seja próximo a 100%. A frequência usual para modulação PWM varia entre 1KHz a
200KHz. Deve ser estudado as características da carga para que seja possível definir a
frequência de operação mais adequada. Atualmente, praticamente todos os
microcontroladores possuem um Hardware dedicado para gerar este tipo de sinal de
controle. Isso devido a sua eficiência e facilidade de ser gerado por sistemas digitais.
16
Neste projeto o sinal PWM será usado para controlar a transferência de calor pelas
pastilhas Peltier.
2.3 Piezeletricidade e cerâmicas piezoeléctricas
O fenômeno da piezeletricidade foi observado pelos irmãos Curie em 1880, mas só
foi utilizado para uma atividade prática na primeira guerra mundial, por Paul Langevin
no desenvolvimento de sonares. Esse fenômeno se explica, observando que algumas
molécula de estruturas cristalinas não possui uma simetria elétrica, ou seja, as ligações
eletrônicas entre os átomos que compõem estas molécula resultam em centro de cargas
positivas e negativas não coincidentes. Isso provoca uma simetria tetragonal [Pereira
A.H.A, 2010], dando origem a um dipolo elétrico.
Inicialmente se utilizou cristais naturais, como o quartzo para fins piezoeléctricos,
mas atualmente cerâmicas tem ganhado destaque no desenvolvimento de dispositivos nas
mais diversas áreas, como eletrônica, medicina e aplicações de uso militar [CHÍNCARO
1996]. Particularmente cerâmicas tipo PZT (Titano-zirconato de chumbo) tem uma ampla
utilização em transdutores. Essas cerâmicas são compostas por pequenos cristais, que
individualmente possuem a propriedade da simetria tetragonal. Porém apenas esses
cristais não são suficientes para dar ao corpo cerâmico características piezoeléctricas, pois
os inúmeros dipolos elétricos que formam o corpo, estão desorganizados, tendo influência
apenas nas proximidades da molécula cristalina. Para dar características piezoeléctricas
macroscópicas a cerâmica, esses dipolos elétricos devem ser alinhados em um único
sentido. Para isso no processo de fabricação, um forte campo elétrico é aplicado ao pó
cerâmico de forma a alinhar os dipolos de forma conveniente. Após isto, o pó cerâmico é
prensado e aquecido, num processo conhecido como sinterização. O corpo cerâmico ao
sofrer pressão suficiente para deforma-lo, irá gerar uma diferença de potencial elétrico,
devido ao deslocamento dos centros de carga provocados por esta deformação, o que
caracteriza o fenômeno da piezo eletricidade. Neste trabalho, é explorado o efeito piezo
elétrico inverso, ou seja, ao aplicar uma diferença de potencial elétrico em uma pastilha
cerâmica, com formato de um diafragma, está se deformará, produzindo agitação no
líquido em que está imersa. Ao excitar a cerâmica na frequência de 1,7Mhz será
provocado a formação de uma nevoa, num processo conhecido como atomização [D.
Briceño-Gutierrez e outros, 2014]. Este trabalho não discute o projeto de um transdutor
piezo elétrico mas apenas o sua utilização, visto que foi utilizado um dispositivo
17
comercial, disponível no mercado. Para tanto, bastando projetar um circuito oscilador que
trabalhe na frequência de ressonância da pastilha cerâmica. Trabalhar na frequência de
ressonância é importante para obtermos a máxima eficiência do transdutor escolhido
(máxima transferência de energia). Desta forma é necessário o levantamento da curva de
resposta em frequência do transdutor, para sabermos a frequência de ressonância deste
dispositivo.
3 METODOLOGIA
Neste item será descrita a metodologia utilizada na realização deste trabalho.
Simulações e desenhos feitos em microcomputadores, permitirão explicar o
funcionamento do circuito e ilustrar as formas de onda envolvidas. Os componentes
utilizados na construção do protótipo serão dimensionados e os métodos de cálculo serão
apresentados. A figura 9 mostra a sequência de passos para a realização do trabalho.
Figura 9 - Diagrama em blocos descrevendo a metodologia utilizada
Fonte: Autoria própria
3.1 Definição do trabalho
Os passos dados para a definição do trabalho, foram explicadas na justificativa do
tema.
Definição do trabalho
Referencial Teórico
Desenvolvimento do Hardware
Montagem
Testes Avaliação dos
resultados
18
3.2 Referencial teórico
Para referencial teórico do trabalho, buscou-se materiais que tratassem dos
principais princípios físicos e técnicas usadas para a realização deste trabalho. Desta
forma, uma breve explicação do princípio da termoeletricidade, do fenômeno da piezo
eletricidade e do controle PWM foram feitas, utilizando artigos e trabalhos, devidamente
identificados, coletados de repositórios de artigos acadêmicos da internet, de onde
fórmulas e definições foram retirados. Também foi utilizado um livro de eletrônica de
potência, no qual a teoria do controle de potência por largura de pulso (PWM) foi baseado.
3.3 Desenvolvimento do Hardware
O primeiro passo para o desenvolvimento do hardware, foi esquematizar os
estágios que o dispositivo teria e conceber uma forma de controla-los. Assim chegou-se
a definição do esquema exibido pela figura10.
Figura10 Ilustração do protótipo proposto
Fonte: Autoria própria
19
A pastilhas Peltier do trabalho, demandam de uma grande quantidade de corrente
elétrica para funcionar, de forma a escolha se limitou a o limite de corrente que se possa
fornecer através de uma fonte de alimentação disponível. Já que optou-se por utilizar uma
fonte disponível no mercado. A escolha foi utilizar duas pastilhas do modelo TEC1-127-
12S, cuja as características estão descritas na tabela presente no anexo B
Na sequência da escolha das pastilhas, desenvolveu-se um circuito, que fosse
capaz de fazer a interface entre o microcontrolador, que proverá o sinal PWM e as
pastilhas. Para isto foi desenvolvido um circuito baseado no transistor mosfet IRF530.
Este transistor é capaz de fornecer até 14 A de forma continua. Sendo mais que suficiente
para prover os 12 A necessários para alimentar as pastilhas Peltier. O mencionado
transistor não requer um elevado valor de corrente para conduzir um elevado valor de
corrente entre os terminais DRAIN e SURCE, mas para ter sua total capacidade de
condução de corrente, necessita uma diferença de potencial entre os terminais GATE e
SURCE superior a 10 V. Muito superior os 3,3 V providos pelos pinos de saída do
microcontrolador. Desta forma o pino Gate do transistor será excitado por um opto
acoplador ligado ao microcontrolador. Para confecção do PCI (placa de circuito
impresso), foi utilizado o software AUTODESK EAGLE 8.2.1 para gerar o layout, e
posteriormente, utilizara-se o processo térmico e corrosão para a confecção da placa.
De forma a privilegiar ao máximo a capacidade de condução de corrente das
trilhas, nos pontos críticos, fez-se o roteamento das mesmas com trilhas o mais largas o
passível. A figura 11 mostra a simulação do circuito proposto para o controle das
pastilhas Peltier a um duty cycle de 80%.
Figura11 simulação do chaveamento PWM
Fonte: Autoria própria
20
Já para o estágio do umidificador, desenvolveu-se um oscilador capaz de aplicar
um sinal adequado a excitação da pastilha piezoeléctrica, usada como transdutor para
gerar a nevoa de água. Para descobrir qual a frequência de ressonância da pastilha, ligou-
se a mesma a um gerador de funções com 22 Vpp e aplicou-se de forma crescente uma
série de valores de frequências, com uma década de diferença. Observando-se a amplitude
do sinal sobre a pastilha com um osciloscópio obteve-se a resposta em frequência da
pastilha. Na figura 12, a seguir, consta um gráfico gerado com a planilha eletrônica Excel
onde é visualizado os resultados do experimento.
Figura 12 – Resposta em frequência da pastilha piezoelétrica
Fonte: Autoria própria
Com base nos dados experimentais e consultando páginas de internet de
fabricantes e distribuidores de pastilhas piezoeléctricas, para descobrir a capacitância
própria desta pastilha, já que essas pastilhas carecem de folhas de dados e documentação
oficial. Foi utilizada a equação 13 para calcular a indutância característica do dispositivo.
Equação 13 Frequência de ressonância
%&'( 1
2 * √, -
(13)
sendo:
fres a frequência de ressonância dada em H[Herts]
L a indutância dado em H[Henry]
C a capacitância dada em F[Farads]
A capacitância é fornecida pelo fabricante do transdutor, sendo para este de
1,7nF e o experimento, cujo o resultado é mostrado na figura 12, mostra claramente que
21
a frequência de ressonância do transdutor é de 1,7MHz. Assim isolando-se o valor da
indutância associada, chega-se ao valor de 5,16 µH.
Por fim para descobrir o valor da resistência do dispositivo em ressonância, utilizou-se a
“eq 14”.
+ 50
0123045
(14)
Sendo:
Z a impedância da pastilha piezoeléctrica na ressonância em Ω[Ohms].
O valor 50 a impedância interna do gerador de funções em Ohms
Vout o valor da tensão sobre a pastilha piezoeléctrica em volts.
Vin o valor do sinal aplicado pelo gerar de funções ao circuito em volts
Na ressonância os valores reativos anulam-se mutuamente, sendo a impedância
neste caso composta somente pelo valor real da impedância. Desta forma, isolando-se a
variável impedância da “eq 14” e considerando Vin igual a 22V e Vout igual a 9V temos
o valor da resistência da pastilha. Assim Z é igual a 33Ω. Com base nos dados calculados
foi feita uma simulação no simulador de circuitos MultiSim 14.0 para confirmar os
resultados. Na figura 13 é exibido o esquemático do circuito simulado no software.
Figura 13 – Esquemático do circuito simulado
Fonte: Autoria própria
22
O resultado da simulação pode ser visto na figura 14. Onde vemos o gráfico de
resposta em frequência, em escala logarítmica. Vê-se o ponto de ressonância destacado
pelo cursor.
Figura 14 – Resultado da simulação
Fonte: Autoria própria
O resultado da simulação coincide claramente com os valores coletados
experimentalmente. De forma a podermos projetar um circuito que trabalhe na frequência
de ressonância do transdutor piezoeléctrico.
Esse circuito faz a realimentação de um amplificador, composto por um transistor
BU406 compondo assim o oscilador. No anexo C encontramos o esquema elétrico do
circuito do oscilador simulado. A frequência de ressonância, é determinada pelo valor da
indutância interna da pastilha piezoeléctrica, determinada pela “eq 13”, A polarização da
base do transistor é feita através de um divisor de tensão formado por um resistor de 2,2
kΩ, um resistor de 4,7 kΩ e um resistor variável, capaz de fazer o ajuste fino da corrente
de base do transistor. Que determina o ganho e a amplitude do sinal de saída. O indutor
L4 é extremamente crítico para a polarização do transistor. Pois deve apresentar uma
elevada impedância a corrente CA, e uma extremamente baixa para corrente continua.
Isso leva a necessidade de bobinar este indutor em um núcleo de ferrite com um fio
esmaltado de pelo menos 25 AWG.
23
O microcontrolador utilizado foi escolhido com base nos recursos de hardware e
disponibilidade. Foi utilizado o kit de desenvolvimento STM32 Nucleo-64 que conta com
o microcontrolador STM32F072RB. Este kit, conta com gravador embarcado e conta com
todos os recursos requeridos para este projeto. Na figura 15 vemos o mencionado kit.
Figura 15– STM32 Nucleo-64
Fonte: FENG PUCRS
O sensor de temperatura e umidade utilizado foi o SHT15 da Sensirion. Também
escolhido pela disponibilidade.
3.4 Desenvolvimento do Firmware
O software embarcado no microcontrolador, deste trabalho foi desenvolvido em
linguagem de programação C, utilizando a IDE (Integrated Development Environment)
de desenvolvimento µVision Keil. O software tem por finalidade ler o sensor de
temperatura e humidade e fazer o devido ajuste na largura de pulso do sinal PWM. A
largura de pulso será ajustada de acordo com a diferença de temperatura entre a
temperatura ajustada pelo usuário e a temperatura ambiente. A tabela 1 mostra o
porcentual do duty cycle ajustado conforme a diferença de temperatura.
24
Tabela 1 –Ajuste de Duty Cycle.
Δ temperatura °C Duty Cycle %
>15 99
<15 ,>=13 90
<13, >=11 80
<11, >=9 70
<9, >=7 60
<7, >=5 50
<5, >=3 40
<3, >=1 30
<1 20
O software também e responsável por ler o sensor de temperatura SHT15 e exibir
a temperatura e a umidade ambiente. O fluxograma do software é exibido na figura 16.
Figura 16- Fluxograma do software
Fonte: Autoria própria
Liga/Desliga
Há novos
ajustes
Ler
novos
ajustes
Ler
sensores
Ajustar
PWM e
umidificado
r
Exibir
informações
no display
S N
25
3.5 Montagem
A montagem do protótipo será feita em um gabinete feito em MDF (Medium
Density Fiberboard), cortado a laser e desenhado com o software AutoCad. A disposição
dos componentes do dispositivo, será feita de modo a facilitar o acesso as partes que
necessitem manipulação do usuário, como o reservatório de água, e a ventilação das partes
que requerem refrigeração. As placas de circuito impresso, serão confeccionadas pelo
método da corrosão em percloreto de ferro e os componentes serão soldados
manualmente.
3.6 Testes
O teste do protótipo será feito após ele ser devidamente montado, mas com a tampa
removida, de modo a facilitar o acesso ao circuito de acionamento das pastilhas Peltier.
Fara-se a leitura do sinal de tensão aplicado sobre as pastilhas com um osciloscópio se
verificará se a largura de pulso dado ao acionamento correspondem ao comportamento
programado no microcontrolador. A temperatura ambiente e umidade relativa do ar será
devidamente registrado. Após algum tempo em funcionamento, quando julgar-se que a
temperatura se estabilizou, será feita nova leitura dos dados ambientais e comparara-se
com os dados anteriormente registrados.
3.7 Avaliação dos resultados
Será feito uma comparação entre os dados fornecidos pele folha de dados da pastilha
e os dados fornecidos por um fabricante de condicionadores de ar portátil, Com o intuito
de avaliar se é vantajoso a utilização de pastilhas Peltier para climatização. Também será
feito um teste de funcionamento do hardware, para avaliar o comportamento em
funcionamento.
4 APLICAÇÃO DA METODOLOGIA PROPOSTA
Neste item descreve-se as etapas realizadas para a concepção do projeto.
4.1 Definição do trabalho
A definição do trabalho foi feita no respectivo item.
26
4.2 Referencial teórico
O referencial teórico foi feito descrito no respectivo item.
4.3 Desenvolvimento do hardware
Seguindo os requisitos descritos na metodologia, desenvolveu-se circuitos com
o software AUTODESK EAGLE 8.2.1. No anexo D é apresentado o esquema elétrico e
a foto da placa responsável por aplicar tesão modulada por sinal PWM as pastilhas Peltier.
Previu-se a necessidade adicionar-se capacitores em paralelo as pastilhas de forma a
reduzir a necessidade de trabalhar-se com alta frequência. A necessidade da adição destes
capacitores, será avaliada nos testes.
O oscilador ultrassónico foi desenvolvido com base nos cálculos e simulações
apresentadas na metodologia. O esquemático e a foto do circuito oscilador é apresentado
no anexo E.
A ventoinhas, o circuito do umidificador e o motor da bomba de água será
controlado através de uma placa denominada atuador. Esta placa receberá o sinal de
controle do microcontrolador e atuará sobre estes dispositivos. No Anexo F vemos o
esquema elétrico e a foto da placa montada.
No anexo G temos tabela mostrando lista de peças e componentes utilizados no
protótipo.
4.4 Desenvolvimento do firmware
O firmware, embarcado no microcontrolador, responsável pelo controle do
protótipo, tem a principal função de gerar um sinal PWM com largura de pulso
proporcional a diferença de temperatura ambiente e a temperatura ajustada. O código
fonte em linguagem C se encontra no anexo H.
4.5 Montagem
A montagem foi feita em chapas de MDF cortas conforme os desenhos presentes
no anexo I. A foto do protótipo montado é exibido na figura 17.
27
Figura 17- Protótipo
Fonte: Autoria própria
4.6 Testes
Após montado, conectou-se um osciloscópio no pino Gate do transistor IRF530 e
sobre as pastilhas Peltier. Verificou-se que o circuito, não foi capaz de fazer o
chaveamento de forma adequada. Apresenta um sinal totalmente distorcido. Não há
qualquer menção de restrições a forma de controle de potência na folha de dados da
pastilha usada. Apenas alteração da tensão e por consequência da corrente fornecida ao
dispositivo. Também não percebeu-se alteração da temperatura do ar que saia pelas
aberturas frontais, mesmo depois de algum tempo em funcionamento. Mas percebeu-se
aquecimento nos dissipadores ligados a face quente. Na figura 18 é mostra o foto da tela
do osciloscópio com um duty cycle de 10%.
Figura 18 - Sinal PWM aplicado as pastilhas peltier.
Fonte: Autoria Propria
28
5 CONCLUSÃO
Observando-se a forma de onda aplicada sobre as pastilhas, conclui-se que o simples
chaveamento das mesmas pelos transistores MOSFET não são capazes de controlar de
forma satisfatória este tipo de carga. Consultando a folha de dados, não encontra-se
qualquer proposta de controle de potência, além da variação da tensão aplicada. . Chega-
se à conclusão que para fazer o controle adequado da potência, é necessário projetar um
conversor DC/DC rebaixador, de forma a aplicar uma tensão constante, mas de valor
reduzido e devidamente filtrado. Como não observou-se qualquer resfriamento nas aletas
dos dissipadores ligados a face fria das pastilhas Peltier, podemos concluir que os
dissipadores de calor e ventilação usadas, não são suficientes para dissipar o calor gerado
na face quente. Que é de fundamental importância para o bom funcionamento da pastilha.
Isso para que o calor gerado não retorne por condução a face fria. Então para perceber-se
resfriamento dissipadores maiores e melhor ventilação devem ser usadas para o correto
funcionamento deste projeto. O que coloca a portabilidade do equipamento em risco. Pois
o tamanho e massa do equipamento torna-se inviável para um equipamento que tem o
intuito de ser portátil. Também chegasse a conclusão pelos cálculos teóricos que a
eficiência energética de um dispositivo que utilize pastilhas Peltier é muito ruim. Se
compararmos com os dados técnicos do condicionador de ar portátil MPN-12CRV1 da
fabricante Springer Carrier, disponíveis no anexo J. Que consome 1450 W/h de energia e
retira 3517 W/h de calor, portanto com um COP de 2,14. Um coeficiente de eficiência
muito melhor que os 0,74 das pastilhas, calculadas no referencial teórico e encontrado na
folha de dados para condições ideais no anexo B.
Portanto no atual estado de desenvolvimento as pastilhas Peltier, não tem condições
de concorrer em termos de eficiência energética com refrigeradores baseados em
compressores de gases refrigerantes. Portanto, conclui-se que o projeto é inviável no atual
estágio de desenvolvimento
29
Agradecimentos
Gostaria de agradecer a todos os professores que tive em minha vida. Tanto os que
me deram boa nota e os que me deram más notas. Estes me ensinaram a importância da
perseverança. Em especial ao meu professor orientador neste trabalho, Júlio Marque de
Lima, que sem a dedicação e imensa paciência não seria possível. Mas em especial
Gostaria de agradecer a minha amorosa e dedicada mãe. Que mesmo sem grandes estudos,
sempre valorizou a educação e sempre me incentivou e apoiou nas etapas que tive em
minha formação.
30
6 REFERÊNCIAS
ANDO. Oswal Hideo Jinior, UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL Protótipo de um microgerador termoelétrico para captação de energias residuais baseado no efeito Seebeck com sistemas de transferência de calor intercambiável, 2014. 166p, Tese (mestrado Eng). CHÍNCARO. M.A, MENDES. A.A Filho, MOREIRA. R.L, GASTELOIS. P.L, CARVALHO. E.G, PINTO. L.C.B. De Miranda, ARAÚJO. F.G.S, OLIVEIRA.G, DREBUSHCHAK. V. A, THE PELTIER EFFECT, Journal of Thermal Analysis and Calorimetry, 2008,Vol. 91, p. 311–315. FUNDAÇÃO CENTRO TECNOLÓGICO DE MINAS GERAIS, Caracterização Do Titanato De Bário Por impedanciometria, 1996.
GUTIERREZ. D. Briceño; BARRERA. V.Salinas; HERNÁNDEZ. Y. Vargas; GARRETÓN. L. Gaete; IGLESIAS. C. Zanelli. On the ultrasonic atomization of liquids. 43rd. Annual Symposium of the Ultrasonic Industry Association, UIA Symposium, 2014.
MARCHI. Ismael Neto; UNIVERSIDADE ESTADUAL PAULISTA, Faculdade de engenharia. Levantamento de Coeficientes de Desempenho de Refrigeradores Domésticos Associados a Armazenador Térmico, 2007. 158p, Tese ( mestrado . eng). Nolas. J.S, Sharp. J, Goldsmid. H.J, Thermoelectrics : basic principles and new materials developments, Springer - Veriag Berlin Heidelberg, 2001, 295 p. PELTIER-INFO.COM, Peltier device information directory. Disponivel em: <http://www.peltier-nfo.com/info.html> acesso em 01 set. 2017. Pereira A.H.A, Application note RT‐ATCP‐01 Cerâmicas piezoeléctricas: Funcionamento e propriedades, ATCP Engenharia Física, 2010. 7p. SPECIFICATION OF THERMOELECTRIC MODULE TEC1-12712S. Disponivel em < http://www.thermonamic.com/pro_view.asp?id=806> acesso em 10 ago.2017. SILVEIRA. Cristiano Bertulucci, O que é PWM e Para que Serve?, Disponível em: <https://www.citisystems.com.br/pwm/> acesso em 12 de set. 2017.
31
Anexo A
Gráfico da figura de mérito para diversos materiais
32
Anexo B
33
34
35
36
Anexo C
Circuito do oscilador
Fonte: Autoria própria
37
Anexo D
Esquemático PWM
38
Vista superior da placa do atuador
Vista inferior da placa do atuador
39
Anexo E
40
Anexo F
Placa atuador
41
Anexo G
Lista de Material
Atuador
Item Quantidade
Resistor 470 Ohm 1
Optoacoplador 4N25 1
Tripot 1k Ohm 1
CI ULN2001 1
Relé 12V 1
Transistor TIP131 1
Barra de pinos 15
Conector KRE 2 polos 1
Placa de fenolite 1
Umidificador
Resistor 2,2k Ohm 1
Resistor 4,7k Ohm 1
Resistor 10 Ohm 1
Resistor 3,9 Ohm 1
Trimpot 10k Ohm 1
Capacitor 10nF 1
Capacitor 100pF 1
Capacitor 1,5nF 1
Capacitor 47nF 2
Indutor de 25uH 1
Indutor de 100nH 1
Indutor de 100uH 1
Transistor TIP31 1
Pastilha Pezoelétrica 1
Conector KRE 2 polos 2
Mangueira cristal 2m
Bomba de água 12V 1
Tampa de ispeção de PVC 1
Cap de PVC 75mm 3
Redução de tubo de PVC 100 para 75mm 1
Water Block de 40mm 1
Controle PWM
Conector KRE 2 polos 4
Barra de pinos 3
Optoacoplador 4N25 1
Transistor IRF530 2
Resistor 270 Ohm 1
Resistor1k Ohm 1
Gabinete
Chapa de MDF 3mm *
Chapa de MDF mm *
Fonte chaveada 12V 30ª 1
42
Lista de material
Dissipadores de alumínio de 200mm 2
Teclado membrana 1
Display LCD 16x2 1
Ventoinhas de 120mm 2
Ventoinhas de 80mm 2
Sensor SHT15 1
43
Anexo H
/** *************************************************** *************************** * File Name : main.c * Description : Main program body *************************************************** *************************** ** This notice applies to any and all portions of this file * that are not between comment pairs USER CODE BE GIN and * USER CODE END. Other portions of this file, whe ther * inserted by the user or by software development tools * are owned by their respective copyright owners. * * COPYRIGHT(c) 2017 STMicroelectronics * * Redistribution and use in source and binary for ms, with or without modification, * are permitted provided that the following condi tions are met: * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reprod uce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the d istribution. * 3. Neither the name of STMicroelectronics nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLD ERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDIN G, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNE SS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOL DER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCURE MENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUS INESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARI SING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIB ILITY OF SUCH DAMAGE. * *************************************************** *************************** */ /* Includes --------------------------------------- ---------------------------*/ #include "main.h" #include "stm32f0xx_hal.h" #include "rtc.h" #include "tim.h" #include "usart.h" #include "gpio.h" /* USER CODE BEGIN Includes */ #include "SHT15.h" #include <string.h> /* USER CODE END Includes */ /* Private variables ------------------------------ ---------------------------*/ /* USER CODE BEGIN PV */ uint16_t humi_val, temp_val; uint8_t err = 0, checksum = 0; float humi_val_real = 0.0; float temp_val_real = 0.0; long atual=0;//Valor para comparação long anterior=0;//Armazena o momento da ultima leit ura do sensor DHT22. Para ler só 2s depois. float temperatura_ajustada=0; int flag_sleep=0; long sleep_inicio=0, sleep_fim=0; //NEC* handle; /* Private variables ------------------------------ ---------------------------*/ // Definições dos pinos do uC #define pino_rs_0 GPIOA->BSRR = 1<<(16+9) #define pino_rs_1 GPIOA->BSRR = 1<<9 #define pino_e_0 GPIOC->BSRR = 1<<(16+7) #define pino_e_1 GPIOC->BSRR = 1<<7
45
#define UMIDIFICADOR_ON GPIOA->BSRR = 1<<15 #define UMIDIFICADOR_OFF GPIOA->BSRR = 1<<(16+15) #define cursor_on 0x0e #define cursor_off 0x0c #define cursor_blink 0x0f #define black_light_ON GPIOB->BSRR=(1<<3) #define black_light_OFF GPIOB->BSRR=(1<<(3+16)) #define BUZZER_ON GPIOA->BSRR=(1<<10) #define BUZZER_OFF GPIOA->BSRR=(1<<(10+16)) #define LED_ON GPIOB->BSRR=(1<<(9)) #define LED_OFF GPIOB->BSRR=(1<<(9+16)) #define FANS_ON GPIOB->BSRR=(1<<2) #define FANS_OFF GPIOB->BSRR=(1<<(2+16)) #define MOTOR_ON GPIOC->BSRR=(1<<2)//MOTOR DA BOMBA DE ÁGUA #define MOTOR_OFF GPIOC->BSRR=(1<<(2+16)) /* Chave da boia ligada GND e no PC3 Com água a chave esta aberta e nivel lógico do pino é 1 (PULL_UP) Sem água a chave a chave esta fechada e o pino é le vado a nivel lógico 0 */ #define boia_on ((GPIOC->IDR & (1<<3))!=0)// Boia l igada ao PC_3 nivel alto #define boia_off ((GPIOC->IDR & (1<<3))==0)// Boia ligada ao PC_3 nivel baixo #define sensor_0 GPIOC->BSRR=1<<(16+8) #define sensor_1 GPIOC->BSRR=1<<(8) #define tempo 100000 /* USER CODE END PV */ /* Private function prototypes -------------------- ---------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP */ /* Private function prototypes -------------------- ---------------------------*/ void uDelay(void); void Delayus(int Tempo); void lcd_send4bits(unsigned char dat); void lcd_wrcom4(unsigned char com); void lcd_wrcom(unsigned char com); void lcd_wrchar(unsigned char ch); void lcd_init(unsigned char estado_cursor); void lcd_goto(unsigned char x, unsigned char y);
46
int le_teclado(void); int aguarda_tecla(void); int start_sensor(void); void le_sensor(void); void menu(void); void acerta_relogio(void); void ajusta_temperatura(void); //RTC_TimeTypeDef sleep(void); void liga_UMIDIFICADOR(void); void LE_DHT22(void); int start_bit (void); int le_bit(void); void exibe_relogio(int, int, int); void ajusta_PWM(void); void sleep(void); void desliga(void); void liga(void); // Implementação da função printf int fputc(int ch, FILE *f) lcd_wrchar(ch); return ch; /* USER CODE END PFP */ /* USER CODE BEGIN 0 */ uint16_t humi_val, temp_val; uint8_t err , checksum ; float humi_val_real;// = 0.0; float temp_val_real;// = 0.0; /* USER CODE END 0 */ int main(void) /* USER CODE BEGIN 1 */ int TECLA; RTC_TimeTypeDef relogio;//declaração da estrutura relógio RTC_DateTypeDef calendario; int h=0, m=0, s=0; int ON_OFF=0; long p=0;//Variavel para comparação do sleep. Sign ifica posição do dia //int temperatura=0; //int umidade=0; /* USER CODE END 1 */ /* MCU Configuration----------------------------- -----------------------------*/
47
/* Reset of all peripherals, Initializes the Flas h interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART4_UART_Init(); MX_RTC_Init(); MX_TIM2_Init(); MX_TIM3_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); //trata PWM //inicializa as variaveis de manupulação do RTC HAL_RTC_Init(&hrtc); relogio.Hours = h; relogio.Minutes = m; relogio.Seconds = s; HAL_RTC_SetTime(&hrtc, &relogio, RTC_FORMAT_BIN); calendario.Date = 01; calendario.Month = 11; calendario.Year = 17; //Seta RTC //HAL_RTC_SetDate(&hrtc, &calendario, RTC_FORMAT_B IN); //HAL_RTC_SetTime(&hrtc, &relogio, RTC_FORMAT_BIN) ; temperatura_ajustada=18; lcd_init(cursor_off); //while(1)DHT0;DHT1; //printf("Tecla"); HAL_TIM_Base_Start_IT(&htim2); //HAL_ADC_Start(&hadc);
48
/* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ /* USER CODE BEGIN 3 */ while (1) if(ON_OFF==1) //Le RTC e armazena valores nas estruturas calendario e relógio HAL_RTC_GetTime(&hrtc, &relogio, RTC_FORMAT_BIN); HAL_RTC_GetDate(&hrtc, &calendario, RTC_FORMAT_BIN); h=relogio.Hours; m=relogio.Minutes; s=relogio.Seconds; //black_light_ON; //liga(); err += SHT15_Measure(&humi_val, &checksum, HUMI); // checksum SHT15_Calculate(temp_val, humi_val, &temp_val_real, &humi_val_real); // calcula tempera tura e umidade lcd_goto(0,0); printf("%.1f%c",humi_val_real,37); lcd_goto(6,0); printf ("UR"); err += SHT15_Measure(&temp_val, &checksum, TEMP); // checksum SHT15_Calculate(temp_val, humi_val, &temp_val_real, &humi_val_real); // calcula tempera tura e umidade lcd_goto(10,0); printf("%.1f%cC ",temp_val_real,0xdf); anterior=atual; exibe_relogio(h,m,s); ajusta_PWM(); //HAL_Delay(500); TECLA = le_teclado(); if(TECLA == 1) // Tecla Auto
49
temperatura_ajustada=18; UMIDIFICADOR_OFF; lcd_goto(0,0); printf(" AJUSTE "); lcd_goto(0,1); printf(" AUTOMATICO 22"); HAL_Delay(500); lcd_goto(0,0); printf(" "); lcd_goto(0,0); printf(" "); BUZZER_ON; Delayus(tempo); BUZZER_OFF; TECLA=0; if(TECLA == 2)//Tecla MENU pressionada lcd_goto(0,0); menu();//Chama MENU TECLA=0;//Atendeu a função volta ao laço if(boia_off & ((GPIOA->IDR & (1<<15))!=0)) UMIDIFICADOR_OFF; MOTOR_OFF; lcd_goto(0,0); printf("RESERVATORIO"); lcd_goto(0,1); printf("sem agua"); //############################ Verificação do sleep ############ if(flag_sleep==1) p=(3600*relogio.Hours+60*relogio.Minutes+relogio.S econds); if(p==sleep_fim) lcd_goto(0,0); printf(" "); lcd_goto(0,1); printf(" "); desliga(); ON_OFF=0;
50
//############################ fim Verificação do sleep ######## if(TECLA == 6)// tecla ON/OFF //black_light_OFF; //UMIDIFICADOR_OFF; desliga(); TIM2->CCR1 = 0;//PWM 0% TECLA=0; lcd_goto(0,0); printf(" "); lcd_goto(0,1); printf(" "); black_light_OFF; ON_OFF=0;// coloca a variavel ON_OFF em 0 para manter desligado e desvia r para o else Delayus(tempo); if(ON_OFF==0)//entra se a variavel ON_OFF for 0 if(le_teclado()==6)//lê constantemente a tecla ON_OFF ON_OFF=1;//se a tecla for pressionada muda a variavel ON_OFF para 1 liga(); Delayus(tempo); TECLA =0; elsedesliga(); /* USER CODE END 3 */ /* USER CODE END WHILE */ /** System Clock Configuration */ void SystemClock_Config(void) RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit; /**Configure LSE Drive Capability */ __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_HIGH);
51
/**Initializes the CPU, AHB and APB busses cloc ks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSE; RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_H SI; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12; RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV2; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_ OK) _Error_Handler(__FILE__, __LINE__); /**Initializes the CPU, AHB and APB busses cloc ks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE _PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1 ; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH _LATENCY_1) != HAL_OK) _Error_Handler(__FILE__, __LINE__); PeriphClkInit.PeriphClockSelection = RCC_PERIPHCL K_RTC; PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURC E_LSE; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) _Error_Handler(__FILE__, __LINE__); /**Configure the Systick interrupt time */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); /**Configure the Systick */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCL K); /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); /* USER CODE BEGIN 4 */ /*################################## inicio exibe _relogio ####################*/ void exibe_relogio(int h, int m, int s )
52
lcd_goto(0,1); printf("%02d:%02d:%02d ",h, m, s); return; /*################################# fim exibe re logio ###################*/ /* ######################## inicio função desl iga ################# */ void desliga(void) black_light_OFF; UMIDIFICADOR_OFF; LED_OFF; FANS_OFF; /* ################################### fim da fu nção desliga ################### */ /* #################################### inicio fun ção LIGA #################### */ void liga(void) black_light_ON; //UMIDIFICADOR_ON; LED_ON; FANS_ON; /* ####################### fim da função LIGA ############################### */ //#################### ajusta temperatura ################################ void ajusta_temperatura() int ok=0; lcd_goto(0,0); printf("AJUSTE TEMPATURA"); lcd_goto(0,1); printf(" ");
53
int tecla=0; while(ok==0) tecla=le_teclado(); if(tecla==3)//tecla menos - tecla=0; temperatura_ajustada--; if(temperatura_ajustada<18) temperatura_ajustada=28; lcd_goto(0,1); printf("%.1f C",temperatura_ajustada); Delayus(tempo); if(tecla==4)//tecla mais + tecla=0; temperatura_ajustada++; if(temperatura_ajustada>28) temperatura_ajustada=18; lcd_goto(0,1); printf("%.1f C",temperatura_ajustada); Delayus(tempo); if(tecla==5)//tecla OK tecla=0; lcd_goto(0,0); printf(" "); lcd_goto(0,1); printf(" "); ok=1; //############################# fim ajusta temp eratura ########################### /* ############################ FUNÇÃO MEN U ############################ */ void menu(void) int i=0; int item=0; int tecla=0; lcd_goto(0,0); printf("MENU"); lcd_goto(0,1); printf(" ");
54
while(i==0) tecla=le_teclado(); Delayus(tempo); if(tecla==3)//tecla menos - item--; if(item<0) item=4;//atingiu o valor minimo tecla=0; if(tecla==4)//tecla mais + item ++; if(item>4) item=0;//atingiu o valor máximo tecla=0; if(tecla==5)//tecla SELECT/OK i=1;//Foi escolhido o item e sai do wile da escolha tecla=0; switch(item) case 0: lcd_goto(0,0); printf("MENU "); break; case 1: lcd_goto(0,0); printf("HORA "); break; case 2: lcd_goto(0,0); printf("TEMPERATURA "); break; case 3: lcd_goto(0,0); printf("SLEEP "); break; case 4: lcd_goto(0,0); printf("UMIDIFICADOR "); break;
55
while(i==1) switch(item) case 0: lcd_goto(0,0); return; // caso for selecionado o MENU retorma para while(1) d a main() case 1: lcd_goto(0,0); printf("HORA "); lcd_goto(0,1); acerta_relogio(); i=0; break; case 2: lcd_goto(0,0); printf("TEMPERATURA "); lcd_goto(0,1); ajusta_temperatura(); i=0; break; case 3: lcd_goto(0,0); printf("SLEEP "); sleep(); i=0; break; case 4: lcd_goto(0,0); printf("UMIDIFICADOR "); lcd_goto(0,1); liga_UMIDIFICADOR(); i=0; break;
56
/* ############################ LIGA UMIDIFICADOR ############################## */ void liga_UMIDIFICADOR() lcd_goto(0,0); printf(" "); lcd_goto(0,1); printf(" "); if((GPIOA->IDR & (1<<5))!=0)// UMIDIFICADOR ligado printf("OFF"); UMIDIFICADOR_OFF; MOTOR_OFF; Delayus(2000); else// UMIDIFICADOR desligado if(boia_off) lcd_goto(0,0); printf(" RESERVATORIO "); lcd_goto(0,1); printf(" SEM AGUA "); UMIDIFICADOR_OFF; MOTOR_OFF; HAL_Delay(1000); return; printf("ON "); UMIDIFICADOR_ON; MOTOR_ON; HAL_Delay(1000); /* ####################### FIM DA FUNÇÃO LIGA UMIDIFICADOR ##################### */ /* ######################## FUNÇÃO DE AJUSTE DO RTC ############################# */ void acerta_relogio(void)
57
//Variaveis e estruturas locais int H, M, S; int campo=0, tecla=0; RTC_TimeTypeDef relogio;//declaração da estrutura relógio HAL_RTC_GetTime(&hrtc, &relogio, RTC_FORMAT_BIN);//Função de leitura do RTC H=relogio.Hours;//Salva os dados da hora nas var iaveis da estrutura local M=relogio.Minutes; S=relogio.Seconds; lcd_goto(0,0); printf("AJUSTE O RELOGIO"); lcd_goto(0,1); printf("%02d:%02d:%02d", H, M, S); HAL_Delay(1000); /* Campo 0 é horas Campo 1 é minutos campo 2 é segundos Campo 3 envia os dados para o RTC e sai da função */ while(campo==0)//Laço das hora tecla = le_teclado(); Delayus(tempo); if(tecla==3)//tecla menos - H--; if(H<0) H=24; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==4)//tecla + H++; if(H>24) H=0; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==5)//tecla OK campo++;//campo passa a ser 1 tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); Delayus(tempo);
58
while(campo==1)//Laço dos minutos tecla=le_teclado(); Delayus(tempo); if(tecla==3)//tecla menos - M--; if(M<0) M=60; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==4)//tecla mais + M++; if(M>60) M=0; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==5)//tecla OK campo++;//campo passa a ser 2 tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); Delayus(tempo); while(campo==2)//Laço dos segundos tecla=le_teclado(); Delayus(tempo); if(tecla==3)//tecla menos - S--; if(S<0) S=60; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==4)//tecla mais + S++; if(S>60) S=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==5)//tecla OK campo++; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S);
59
if(campo==3)//ajusta o relogio e retorna da funçã o relogio.Hours=H; relogio.Minutes=M; relogio.Seconds=S; HAL_RTC_SetTime(&hrtc, &relogio, RTC_FORMAT_BIN);//Envia para o RTC a hora certa. // Limpeza de display lcd_goto(0,0); printf(" "); lcd_goto(0,1); printf(" "); return; /* ##################### FIM DA FUNÇÃO DE AJUSTE DO RTC ############################## */ //########################### Função sleep ########################################## void sleep(void) //Variaveis e estruturas locais int H, M, S; int campo=0, tecla=0; RTC_TimeTypeDef hora_atual;//declaração da estrut ura local do relógio HAL_RTC_GetTime(&hrtc, &hora_atual, RTC_FORMAT_BIN);//Função de leitura do RTC H=hora_atual.Hours;//Salva os dados da hora nas variaveis da estrutura local M=hora_atual.Minutes; S=hora_atual.Seconds; lcd_goto(0,0); printf(" DESLIGAR AS "); lcd_goto(0,1); printf("%02d:%02d:%02d", H, M, S); HAL_Delay(1000); /* Campo 0 é horas Campo 1 é minutos campo 2 é segundos Campo 3 envia os dados para o RTC e sai da função */ while(campo==0)//Laço das hora tecla = le_teclado(); Delayus(tempo);
60
if(tecla==3)//tecla menos - H--; if(H<0) H=24; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==4)//tecla + H++; if(H>24) H=0; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==5)//tecla OK campo++;//campo passa a ser 1 tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); Delayus(tempo); while(campo==1)//Laço dos minutos tecla=le_teclado(); Delayus(tempo); if(tecla==3)//tecla menos - M--; if(M<0) M=60; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==4)//tecla mais + M++; if(M>60) M=0; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==5)//tecla OK campo++;//campo passa a ser 2 tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); Delayus(tempo); while(campo==2)//Laço dos segundos
61
tecla=le_teclado(); Delayus(tempo); if(tecla==3)//tecla menos - S--; if(S<0) S=60; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==4)//tecla mais + S++; if(S>60) S=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(tecla==5)//tecla OK campo++; tecla=0; lcd_goto(0,1); printf("%02d:%02d:%02d",H,M,S); if(campo==3)//ajusta o relogio e retorna da funçã o // Limpeza de display lcd_goto(0,0); printf(" "); lcd_goto(0,1); printf(" "); sleep_inicio=(3600*hora_atual.Hours+60*hora_atual. Minutes+hora_atual.Seconds)+3;//Armazena na variavel global a posiçao da linha do dia do instante atual sleep_fim=(3600*H+60*M+S);//Armazena na variavel global a posiçao da linha do dia que deve desligar flag_sleep=1; //######################### fim da função sleep #################################### /* ########################## FUNÇÃO DE LEITURA DE TECLADO ############################## */ int le_teclado()
62
int tecla = 0; if((GPIOA->IDR & (1<<0))!=0) tecla=1;//AUTO if((GPIOA->IDR & (1<<1))!=0) tecla=2;//MENU if((GPIOA->IDR & (1<<4))!=0) tecla=3;//LEFT if((GPIOB->IDR & (1<<0))!=0) tecla=4;//RIGHT if((GPIOC->IDR & (1<<1))!=0) tecla=5;//SELECT if((GPIOC->IDR & (1<<0))!=0) tecla=6; //ON/OFF return tecla; /* ############################ FIM DA FUNÇÃO DE LEITURA DE TECLADO ############################# ####### */ //############################## ajuste d o PWM ############################################### void ajusta_PWM() int delta; int PWM=0; // Temperatura ´é uma variavel global delta = temp_val_real - temperatura_ajustada; if(delta>=15) PWM=99; if((delta<15)&(delta>=13)) PWM=90; if((delta<13)&(delta>=11)) PWM=80; if((delta<11)&(delta>=9)) PWM=70; if((delta<9)&(delta>=7)) PWM=60; if((delta<7)&(delta>=5)) PWM=50; if((delta<5)&(delta>=3)) PWM=40; if((delta<3)&(delta>=1))
63
PWM=30; if(delta<=1) PWM=20; //__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, PW M); //(&htim2, TIM_CHANNEL_3, PWM); //update pwm value TIM2->CCR1 = PWM; ////######################## fim ajuste PWM ################################## int aguarda_tecla(void) int tecla = 0; while(tecla == 0) tecla = le_teclado(); while(le_teclado() != 0); return tecla; void uDelay(void) int x=4; while(x) x--; // Gasta Tempo us quando fcpu = 48MHz void Delayus(int Tempo) while(Tempo--) uDelay(); // somente PA3..PA0 configurados como saída // dat -> 0x00 ... 0x0f void lcd_send4bits(unsigned char dat) if((dat & 8) !=0) GPIOA->BSRR = 1<<8; else GPIOA- >BSRR = 1<<24; if((dat & 4) !=0) GPIOB->BSRR = 1<<10; else GPIOB- >BSRR = 1<<26; if((dat & 2) !=0) GPIOB->BSRR = 1<<4; else GPIOB-> BSRR = 1<<20; if((dat & 1) !=0) GPIOB->BSRR = 1<<5; else GPIOB-> BSRR = 1<<21; void lcd_wrcom4(unsigned char com)
64
lcd_send4bits(com); pino_rs_0; pino_e_1; Delayus(5); pino_e_0; HAL_Delay(5); void lcd_wrcom(unsigned char com) lcd_send4bits(com/0x10); // b7..b4 pino_rs_0; pino_e_1; Delayus(5); pino_e_0; Delayus(5); lcd_send4bits(com%0x10); // b3..b0 pino_e_1; Delayus(5); pino_e_0; HAL_Delay(5); void lcd_wrchar(unsigned char ch) lcd_send4bits(ch/0x10); // b7..b4 pino_rs_1; pino_e_1; Delayus(5); pino_e_0; Delayus(5); lcd_send4bits(ch%0x10); // b3..b0 pino_e_1; Delayus(5); pino_e_0; HAL_Delay(5); // SEQUENCIA DE INICIALIZAÇÃO COM INTERFACE DE 4 BI TS // // COMANDOS DE 4 BITS: 3 // 3 // 3 // 2 // COMANDOS DE 8 BITS: 0x28 (interface 4 b its) // Estado Cursor (0x0c/0x0e/0x0 f) (on/off/blink) // 0x06 (shift ->) // 0x01 (clear) void lcd_init(unsigned char estado_cursor) //Liga o backlight
65
GPIOB->BSRR = 1 << 6; lcd_wrcom4(3); lcd_wrcom4(3); lcd_wrcom4(3); lcd_wrcom4(2); lcd_wrcom(0x28); lcd_wrcom(estado_cursor); lcd_wrcom(0x06); lcd_wrcom(0x01); // 0 1 .... 15 // +------+------+--....--+------+ // 0| 0x80 | 0x81 | | 0x8f | <--+-- Comandos para trocar // +------+------+--....--+------+ | a posiçã o do cursor // 1| 0xc0 | 0xc1 | | 0xcf | <--+ // +------+------+--....--+------+ | // 2| 0x90 | 0xc1 | | 0x9f | <--+ // +------+------+--....--+------+ | // 3| 0xd0 | 0xc1 | | 0xdf | <--+ // +------+------+--....--+------+ void lcd_goto(unsigned char x, unsigned char y) if(x<16) if(y==0) lcd_wrcom(0x80+x); if(y==1) lcd_wrcom(0xc0+x); if(y==2) lcd_wrcom(0x90+x); if(y==3) lcd_wrcom(0xd0+x); /* USER CODE END 4 */ /** * @brief This function is executed in case of er ror occurrence. * @param None * @retval None */ void _Error_Handler(char * file, int line) /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ while(1) /* USER CODE END Error_Handler_Debug */
66
#ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source nu mber * @retval None */ void assert_failed(uint8_t* file, uint32_t line) /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END 6 */ #endif /** * @ */ /** * @ */ /************************ (C) COPYRIGHT STMicroelec tronics *****END OF FILE****/
67
Anexo I
68
Anexo J