Escolar Documentos
Profissional Documentos
Cultura Documentos
NITERÓI
2021
VICTOR VIGARIO BALLARINI
Orientador:
Prof. Dr. Ivanovich Lache Salcedo
Coorientadora:
Profa Dra Roberta Jimenez de Almeida Rigueira
Niterói
2021
VICTOR VIGARIO BALLARINI
BANCA EXAMINADORA
___________________________________________________________________
Prof. Ivanovich Lache Salcedo, Orientador, D.Sc. – UFF.
___________________________________________________________________
Profa Roberta Jimenez de Almeida Rigueira , DSc – UFF.
___________________________________________________________________
Prof. Flávio de Castro Silva, DSc – UFF.
___________________________________________________________________
Prof. Leonardo da Silva Hamacher, DSc – UFF.
DEDICATÓRIA
Dedico este trabalho á meus avós maternos, Joaquim e Milva, “In Memorian”.
AGRADECIMENTOS
A minha mãe, Marcelli Vigário, por me dar suporte durante todo o processo de
minha graduação.
Aos meus orientadores, Roberta Rigueira e Ivanovich Lache, pois sem eles
esse trabalho não aconteceria.
Com uma importância econômica cada vez maior, o setor agropecuário brasileiro
desempenha uma função importante e com crescimento na exportação e produção
de grãos, como a soja e milho, é necessária uma maior atenção ao armazenamento
desses produtos. Em consequência disso o presente trabalho, expõe a proposição
de um sistema de automação de baixo custo para silos, utilizando a placa
microcontrolador Arduino Uno e os Sensores BME280. Para esse projeto foi
construído um protótipo com uso, além da placa e 8 sensores, o multiplexador
TCA9548A, para a comunicação em tempo real, e um DataLogger com o relógio
digital ds1307 e um módulo de cartão SD, juntamente com isso foi desenvolvido um
algoritmo o qual capta todos os dados pertinentes e o armazena no cartão SD. O
Hardware e o Software captaram dados durante um período de 3 dias e tais
informações compiladas em gráficos apresentaram comportamento similar aos
fornecidos pelo INMET. Conclui-se que o sistema é viável para coleta dessas
informações, com devida calibração, embora se recomende o uso da placa
microcontrolador Arduino Mega 2560, a fim de uma redução de possíveis erros.
1. INTRODUÇÃO .................................................................................................... 13
2. OBJETIVOS ........................................................................................................ 17
3. FUNDAMENTAÇÃO TEÓRICA E REVISÃO DA LITERATURA ......................... 18
3.1. Produção e armazenamento de grãos ............................................................ 18
3.2. Sistemas automatizados no armazenamento de grãos .................................. 23
3.3. Utilização do Arduino e sistemas de automação de baixo custo ..................... 25
3.4. Influência da temperatura e umidade relativa do ar no armazenamento de
grãos ...................................................................................................................... 27
4. MATERIAL E MÉTODOS ................................................................................... 28
4.1. Caracterização do Sistema de automação – Arduino .................................. 28
4.1.1. Funções gerais dos pinos ...................................................................... 29
4.1.3. Fluxograma contendo os principais pontos do programa ......................... 32
4.1.4. Apresentação dos sensores / Atuadores utilizados .................................. 33
4.1.5. Apresentação dos módulos utilizados para o DataLogger ........................ 35
4.1.6. Descrição do Multiplexador TCA9548A.................................................... 36
5. RESULTADOS E DISCUSSÃO .......................................................................... 40
6. CONCLUSÕES ................................................................................................... 49
7. TRABALHOS FUTUROS .................................................................................... 50
REFERÊNCIAS BIBLIOGRÁFICAS .......................................................................... 52
ANEXO I – ALGORITMO ELABORADO ................................................................... 55
13
1. INTRODUÇÃO
Ano após ano o Brasil atinge recordes de produção agrícola e os grãos, como
a soja e o milho, destacam-se em relação às demais. Em 2019, o valor de culturas
chegou a 361 bilhões de reais com um crescimento de 5,1 % em comparação a
2018, um recorde para a produção nacional. A soja e o café neste ano obtiveram
colheitas de 114,3 e 3,0 milhões de toneladas, respectivamente. O algodão e o milho
14
obtiveram recorde de produção com uma marca de 6,9 e 101,3 milhões de toneladas
com crescimento de 39,0% e 22,8%, respectivamente. O café não apresentou
crescimento, inclusive, teve redução de 22,0%, com sua produção total atingindo o
valor de 17,6 bilhões de reais (IBGE, 2019).
O armazenamento brasileiro de grãos é composto, em sua maioria, por
unidades específicas para armazenagem a granel (silos), e em minoria por
armazéns convencionais, os quais fazem o uso de sacas e fardos para o
armazenamento. D’Arce (2008) afirmou que enquanto países como a França,
Argentina e Estados Unidos, a armazenagem em nível de fazenda representa cerca
de 30 a 60% da safra, no Brasil, este percentual ainda é pouco expressivo.
Entre os anos de 2000 e 2019 houve uma evolução na capacidade estática do
Brasil, atingindo aproximadamente 180 milhões de toneladas (CONAB, 2019),
embora não seja suficiente considerando safras acima de 250 milhões de toneladas.
Segundo a Companhia Nacional de Abastecimento (CONAB, 2019) a
capacidade bruta de estocagem agrícola no país é de aproximadamente 169,8
milhões de toneladas de grãos e cerca de 39,2 milhões de toneladas não são
aproveitadas. Esses dados demonstram um grande desafio econômico e técnico,
tendo em vista o grande volume de perdas externas e internas oriundos desse setor
agrícola.
O controle das perdas em sistemas de armazenagem é realizado, em sua
maioria, por gestores de unidades armazenadoras.
Em relação às perdas quantitativas podem-se considerar pragas, presença de
insetos, apodrecimento da massa de grãos, infecção fúngica, derramamento de
grãos nos pátios de manobras, túneis, pés de elevadores e interiores de secadores;
descartes de grãos inteiros, ou de suas partes durante a secagem, e limpeza da
massa de grãos; consumo por roedores e pássaros; super secagem durante a
realização do processo de aeração, misturas indevidas de produto; combustão de
grãos em incêndios em secadores; e, respiração da massa de grãos. Segundo a
EMBRAPA (2015), aproximadamente, 15% do total produzido.
Ademais as perdas chamadas de qualitativas, também, são de suma
importância para, pois influenciam diretamente na segurança alimentar e no valor de
venda dos grãos.
As perdas de grãos no Brasil ocorrem em sua maioria devido a carência de
sistemas de armazenamento e má gestão dos armazéns.
15
De acordo com Lorini (2015), “uma vez que comprometem o uso de todos
os grãos produzidos ou os classificam para outro uso de menor valor
agregado. No caso de trigo, o produto é desclassificado para
comercialização se for encontrado um inseto vivo no lote. Moinhos não
aceitam lotes de trigo com insetos, pois isso fatalmente comprometeria a
qualidade da farinha, já que esta terá fragmentos indesejáveis de insetos na
indústria de panificação e em outros subprodutos de trigo.”
2. OBJETIVOS
40.000,0
35.000,0
30.000,0
25.000,0
ALGODÃO
ARROZ
20.000,0
FEIJÃO TOTAL
15.000,0 MILHO TOTAL
SOJA
10.000,0 TRIGO
5.000,0
-
1976/77
1978/79
1980/81
1982/83
1984/85
1986/87
1990/91
1992/93
1994/95
1996/97
2000/01
2002/03
2004/05
2006/07
2010/11
2012/13
2014/15
2016/17
2018/19
1988/89
1998/99
2008/09
Figura 3 – Produção dos principais grãos no Brasil por área (Em anos x mil
hectares). Fonte: Elaborado pelo autor utilizando CONAB (2021).
22
140.000,0
120.000,0
100.000,0
ALGODÃO - CAROÇO
80.000,0
ARROZ
FEIJÃO TOTAL
60.000,0
MILHO TOTAL
SOJA
40.000,0
TRIGO
20.000,0
Figura 4 – Série Histórica de produção (em Mil Toneladas x Ano). Fonte: Elaborado
pelo autor utilizando CONAB (2021).
Capacidade Estática
200.000,0
Milhões de Toneladas 180.000,0
160.000,0
140.000,0
120.000,0
100.000,0
80.000,0
60.000,0
40.000,0
20.000,0
-
1992
2002
1980
1982
1984
1986
1988
1990
1994
1996
1998
2000
2004
2006
2008
2010
2012
2014
2016
2018
2020
Anos
para as quais foi programado. Os CLPs têm a grande vantagem de que o mesmo
controlador básico pode ser usado com uma ampla variedade de sistemas de
controle. Para modificar um sistema de controle e as regras a serem usadas, tudo o
que é necessário é que um operador digite um conjunto diferente de instruções. Não
há necessidade de religar. O resultado é um sistema flexível e econômico que pode
ser usado com sistemas de controle, que variam amplamente em sua natureza e
complexidade.
Os PLCs são semelhantes aos computadores, mas enquanto os
computadores são otimizados para tarefas de cálculo e exibição, os PLCs são
otimizados para tarefas de controle e ambiente industrial. Assim, PLCs:
• São robustos e projetados para suportar vibrações, temperatura, umidade e
ruído; e,
• Ter interface para entradas e saídas já dentro do controlador.
Arduino ao longo dos anos está se tornando uma ferramenta bem robusta
para milhares de projetos, com uma gama extremamente variada, incluindo de
26
4. MATERIAL E MÉTODOS
A partir da descrição das funções gerais dos pinos foram adotados os critérios
para acionamento do sistema Arduino. Portanto, foram descritos a seguir.
LED: Há um LED embutido acionado pelo pino digital 13. Quando o pino está com
valor alto, o LED está ligado, quando o pino está baixo, ele está desligado.
30
VIN: A tensão de entrada para a placa Arduino quando ela está usando uma fonte
de alimentação externa (em oposição a 5 volts da conexão USB ou outra fonte de
alimentação regulada).
5V: Este pino emite 5 V regulado do regulador na placa. A placa pode ser fornecida
com energia tanto do conector de alimentação DC (7 - 20 V), do conector USB (5 V)
ou do pino VIN da placa (7-20 V). O fornecimento de tensão por meio dos pinos de 5
V ou 3,3 V desvia o regulador e pode danificar a placa.
3V3: Uma alimentação de 3,3 volts gerada pelo regulador de bordo. O consumo
máximo de corrente é 50 mA.
IOREF: Este pino na placa Arduino fornece a referência de tensão com a qual o
microcontrolador opera. Uma blindagem configurada corretamente pode ler a tensão
do pino IOREF e selecionar a fonte de alimentação apropriada ou permitir que os
conversores de tensão nas saídas funcionem com 5V ou 3,3V.
Reset: Normalmente usados para adicionar um botão de reinicialização aos escudos
que bloqueiam o botão da placa.
Serial/UART: pinos 0 (RX) e 1 (TX). Usado para receber (RX) e transmitir (TX)
dados seriais TTL. Esses pinos são conectados aos pinos correspondentes do chip
serial ATmega8U2 USB-para-TTL.
TWI (interface de dois fios) / I²C: pino SDA (A4) e pino SCL (A5). Suporte a
comunicação TWI usando a biblioteca Wire.
4.1.2. Comunicação
automaticamente para meses com menos de 31 dias, incluindo correções para ano
bissexto. O relógio opera no formato de 24 ou 12 horas com indicador AM / PM. O
DS1307 possui um circuito de detecção de energia embutido que detecta falhas de
energia e muda automaticamente para a fonte de reserva (Figura 11). A operação de
cronometragem continua enquanto a peça opera a partir da fonte de backup.
(MAXIM INTEGRATED, 2015)
com RTC_DS1307 rtc; File myfile; , const int chipSelect = 4; (para seus respectivos
sensores) e unsigned long delayTime; além disso há a função de inicialização do
multiplexador, com void TCA9548A(uint8_t bus), a qual é fundamental para a
comunicação entre os 8 sensores e o Arduino. Para mais é iniciada a função
responsável pela ativação de todo o sistema, com o RTC e módulo do Cartão SD a
priori, podendo assim inicializar os sensores e seus respectivos canais de
comunicação referentes ao multiplexador, ressalta-se a inclusão de mecanismos e
funções para identificação de possíveis erros no hardware, as quais funcionam em
conjunção com todas funções, esse grande fragmento de código é iniciado pela linha
void setup().
A partir do início de todos os argumentos o microcontrolador esteve disponível
a realizar sua função principal, foi ativado pelo void loop() a qual utiliza a aplicação
loggingTime(), onde foi responsável pelo fornecimento da data e hora ao sistema,
após serem incluídas as funções de leitura e apoio. A fim de conseguir usar todos os
sensores conectados, dentro dela foram inclusos a comunicação referente a cada
sensor individualmente com TCA9548A(0); para o sensor 1, TCA9548A(1); para o
sensor 2, até TCA9548A(7); para o sensor 8, e entre cada referência foi inserida
outro mecanismo para a leitura a função printValues(), onde captou e armazenou os
dados de Temperatura, Umidade e Pressão, referente a cada sensor.
A função printValues () forneceu a possibilidade de realizar a leitura do sensor
e documentar a data em arquivo de texto, gravado no cartão SD. O formato file.print
() indicou ao modulo SD quais dados deveriam ser armazenados, bem como
fornecendo a possibilidade de incluir texto adicionais. A função Serial.print() teve o
mesmo funcionamento, contudo o fez para o monitor serial do software IDE Arduino,
o qual é importante para verificar de forma mais rápida o funcionamento do sensor e
suas leituras. Além deles o comando String transformou uma variável qualquer em
somente uma linha de texto, com isso foi possível realizar a gravação de todos os
dados com String Texto=S_Temperatura + "," + S_Pressao + "," + S_Altura + "," +
S_Umidade, onde agrupou as leituras respectivas e myfile.print(Texto) salvou no
arquivo de texto
Posteriormente a descrição da rotina foi realizada uma interação pelo
software compilador do Arduino, o qual valida e verifica erros e incongruências na
linguagem e com isso garantir a validade do Algoritmo desenvolvido.
39
5. RESULTADOS E DISCUSSÃO
Sensor 2
30
Sensor 3
28
Sensor 4
26 Sensor 5
24 Sensor 6
22 Sensor 7
20 Sensor 8
Sensor 2
960
Sensor 3
940
Sensor 4
920
Sensor 5
900
Sensor 6
880
Sensor 7
860
Sensor 8
65 Sensor 2
60 Sensor 3
55 Sensor 4
50 Sensor 5
45 Sensor 6
40
Sensor 7
35
Sensor 8
27
25
23 Temp. Min. (C)
21 Temp. Ins. (C)
19 Temp. Max. (C)
17
15
9:00
0:00
3:00
6:00
9:00
0:00
3:00
6:00
9:00
12:00
15:00
18:00
21:00
12:00
15:00
18:00
21:00
12:00
15:00
18:00
Coleta de Dados (Hora)
1016
1014
Pressao Ins. (hPa)
1012
Pressao Max. (hPa)
1010
Pressao Min. (hPa)
1008
1006
9:00
1:00
5:00
9:00
1:00
5:00
9:00
13:00
17:00
21:00
13:00
17:00
21:00
13:00
17:00
75
65 Umi. Ins. (%)
55 Umi. Max. (%)
45 Umi. Min. (%)
35
9:00
1:00
5:00
9:00
1:00
5:00
9:00
13:00
17:00
21:00
13:00
17:00
21:00
13:00
17:00
Coleta de Dados (Hora)
Pressão em Detalhe
1024
1022
1020
1018
Pressão (hPa)
Sensor 6
1016
INMET
1014
1012
1010
1008
1006
Coleta de Dados ( Horas)
Sensor 4
20
Sensor 5
15
Sensor 6
10
Sensor 7
5 Sensor 8
0 INMET
Pressões Coletadas
1040
1020
1000
Sensor 1
980
Pressão (hPa)
Sensor 2
960 Sensor 3
940 Sensor 4
920 Sensor 5
900 Sensor 6
Sensor 7
880
Sensor 8
860
INMET
Umidade Coletada
100
90
80
Sensor 1
70
Umidade (%)
Sensor 2
60
Sensor 3
50
Sensor 4
40
Sensor 5
30
Sensor 6
20
Sensor 7
10
Sensor 8
0
INMET
6. CONCLUSÕES
7. TRABALHOS FUTUROS
REFERÊNCIAS BIBLIOGRÁFICAS
CONAB. Companhia Nacional de Abastecimento. Série histórica das safras. [S. l.], 1
mar. 2021. Disponível em: https://www.conab.gov.br/info-agro/safras/serie-historica-
das-safras. Acesso em: 5 mar. 2021.
FILIPEFLOP. Real Time Clock RTC DS1307. [S. l.], 2020b. Disponível em:
https://www.filipeflop.com/produto/real-time-clock-rtc-ds1307/. Acesso em: 8 out.
2020.
INMET. Estação: NITEROI (A627). [S. l.], 17 abr. 2021. Disponível em:
https://tempo.inmet.gov.br/TabelaEstacoes/A627#. Acesso em: 22 abr. 2021.
INSTRUMENTS, Texas. Pca9548a low-voltage 8-channel i2c switch with reset. von
Texas Instruments. 2015.
SUN, Da-Wen; WOODS, J. L. Simulation of the heat and moisture transfer process
during drying in deep grain beds. Drying Technology, v. 15, n. 10, p. 2479-2492,
1997.
55
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <RTClib.h>
Adafruit_BME280 bme;
void setup() {
Serial.println(F("rtc1"));
Serial.println(F("SD1"));
Serial.print(F("Initializing SD card..."));
if (!SD.begin(chipSelect)) {
Serial.println(F("initialization failed!"));
return;
}
57
Serial.println(F("initialization done."));
//open file
myFile = SD.open("DATA.txt", FILE_WRITE);
Serial.println(F("SD2"));
// Initialize BME280;
unsigned status;
TCA9548A(0);
// default settings
status = bme.begin(0x76);
Serial.println(F("A0"));
// You can also pass in a Wire library object like &Wire2
// status = bme.begin(0x76, &Wire2)
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring, address,
sensor ID!");
Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(), 16);
58
}
delay(200);
Serial.println(F("BME280 Channel 1"));
// initialize BME1
TCA9548A(1);
// default settings
status = bme.begin(0x76);
Serial.println(F("A1"));
// You can also pass in a Wire library object like &Wire2
// status = bme.begin(0x76, &Wire2)
if (!status) {
delay(200);
Serial.println();
59
delay(200);
Serial.println();
TCA9548A(3);
// default settings
60
status = bme.begin(0x76);
Serial.println(F("A3"));
// You can also pass in a Wire library object like &Wire2
// status = bme.begin(0x76, &Wire2)
if (!status) {
Serial.println(F("Could not find a valid BME280 sensor, check wiring, address,
sensor ID!"));
Serial.print(F("SensorID was: 0x")); Serial.println(bme.sensorID(), 16);
Serial.print(F(" ID of 0xFF probably means a bad address, a BMP 180 or BMP
085\n"));
delay(200);
}
delay(200);
TCA9548A(5);
// default settings
status = bme.begin(0x76);
Serial.println(F("A5"));
// You can also pass in a Wire library object like &Wire2
// status = bme.begin(0x76, &Wire2)
if (!status) {
Serial.println(F("Could not find a valid BME280 sensor, check wiring, address,
sensor ID!"));
Serial.print(F("SensorID was: 0x")); Serial.println(bme.sensorID(), 16);
Serial.print(F(" ID of 0xFF probably means a bad address, a BMP 180 or BMP
085\n"));
Serial.print(F(" ID of 0x56-0x58 represents a BMP 280,\n"));
Serial.print(F(" ID of 0x60 represents a BME 280.\n"));
}
delay(200);
62
}
delay(200);
Serial.println(F("A7"));
// You can also pass in a Wire library object like &Wire2
63
if (!status) {
Serial.println(F("Could not find a valid BME280 sensor, check wiring, address,
sensor ID!"));
Serial.print(F("SensorID was: 0x")); Serial.println(bme.sensorID(), 16);
}
delay(200);
Serial.println();
}
void loop() {
// Delay para estabilizar os sensores
delay(2000);
loggingTime();
Serial.println();
64
printValues();
Serial.println();
printValues();
TCA9548A(2);
Serial.println(F("BME2"));
Serial.println();
printValues();
TCA9548A(3);
Serial.println(F("BME3"));
Serial.println();
printValues();
TCA9548A(4);
Serial.println(F("BME4"));
65
Serial.println();
printValues();
TCA9548A(5);
Serial.println(F("BME5"));
Serial.println();
printValues();
TCA9548A(6);
Serial.println(F("BME6"));
Serial.println();
printValues();
TCA9548A(7);
Serial.println(F("BME7"));
Serial.println();
printValues();
66
delay(7200000);
/*
void loggingTime() {
DateTime now = rtc.now();
myFile = SD.open("DATA.txt", FILE_WRITE);
if (myFile) {
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(',');
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.print(now.minute(), DEC);
myFile.print(':');
myFile.print(now.second(), DEC);
myFile.print(",");
}
Serial.print(now.year(), DEC);
Serial.print('/');
67
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.println(now.day(), DEC);
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
myFile.close();
delay(1000);
}
void printValues() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
String S_Temperatura = String(bme.readTemperature());
Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100.0F);
68
Serial.println(" hPa");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
myFile.close();
}