Escolar Documentos
Profissional Documentos
Cultura Documentos
DESENVOLVIMENTO DE UM MECANISMO DE
CONTAGEM DE PLANTAS DE MILHO PARA
ESTIMATIVA DA DENSIDADE POPULACIONAL
SINOP
MATO GROSSO - BRASIL
2016
WAGNER ZAY FERRARI
SINOP
2016
A todos que de alguma forma me auxiliaram a
concluir este trabalho, aos amigos e familiares
que me apoiaram, me incentivaram e
acreditaram no meu potencial. Principalmente
aqueles que sempre estiveram ao meu lado
na busca pelos meus sonhos.
DEDICO
AGRADECIMENTOS
A Deus por me dar saúde e força para prosseguir em meu caminho e guiar em
minhas escolhas.
Aos meus pais, Selito Luís Ferrari e Ezonéia Zaions Ferrari, que não mediram
esforços para que eu chegasse a esta etapa de minha vida, pelo amor incondicional, por
todo apoio e por moldarem meu caráter. A vocês expresso o meu maior agradecimento.
Ao meu irmão Wellington Luís Ferrari pela confiança e fraternidade, sua existência
é um presente para mim.
A todos os familiares que mesmo distantes torceram por mim.
Ao meu orientador Professor Dr. Rodrigo Sinaidi Zandonadi, pela paciência na
orientação, pelo tempo dedicado, pela amizade, ensinamentos e pelas oportunidades
oferecidas durante essa etapa de minha formação.
A todos os professores do curso de Engenharia Agrícola e Ambiental que me
guiaram pela jornada do conhecimento durante todo o período de graduação mostrando o
caminho do saber e me fazendo crescer.
Aos amigos Angelo Joaquim Seolin da Silva e Bruno Lima da Mota, pela grande
amizade formada, pela troca de experiências, e dos muitos bons momentos partilhados
juntos.
A toda minha turma e colegas de graduação pela amizade construída dentro e fora
da sala de aula, aos que compartilharam da minha caminhada e tornaram as dificuldades
pequenas dividindo os bons momentos.
A FAPEMAT por contribuir com a realização deste trabalho
Ao meu grande amigo Carlos Mezzalira Júnior pelo companheirismo durante todo
esse tempo de graduação e os bons momentos que ficarão na memória desse período de
convívio.
1. INTRODUÇÃO 10
2. REVISÃO DE LITERATURA 12
3. MATERIAL E MÉTODOS 20
3.6.8. Pré-Testes...........................................................................................30
4. RESULTADOS E DISCUSSÃO 34
5. CONCLUSÕES 53
ANEXO A 58
ANEXO B 59
RESUMO
ABSTRACT
Despite the considerable amount of corn produced in Brazil, many problems lead to a
decrease the productive potential of the crop, such as plant population and plant distribution.
Tools capable of identifying the population density in this crop are important to observe the
spatial variability of production, the productive potential, evaluate the performance of
mechanical planters and assist in decision making in the field. Therefore, the objective of this
work was to develop a low cost mechanism for plant counting to obtain estimates of
population density in real time for corn. The prototype developed in this work had a
electromechanical system composed of a rod that activated a microswitch when it came in
contact with the plant while a encoder sensor was used to measure distance between plants.
The apparatus was subjected to evaluation using artificial obstacles, with controlled spacing
simulating the plant row. Both sensors were evaluated in different terrains to verify
measurement accuracy. . The results indicated an acceptable error when operated at
speeds below 3.2 Km.h-1. The prototype was able to count 100% of the obstacles in speed of
the 2.9 km.h-1. The developed system presented potential for use in experiments that need
exhaustive collection of distancing data between plants.
LISTA DE ILUSTRAÇÕES
Figura 30. Detalhe do acúmulo de terra no pneu que possivelmente causou aumento nos
valores das leituras de distancia entre obstáculos espaçados aleatoriamente. ....................50
Figura 31. Variação do erro das leituras de distância entre obstáculos espaçados igualmente
em 30 centímetros................................................................................................................51
Figura 32. Comparação dos tempos totais entre medição manual e com o uso do protótipo
na velocidade de 2,9 km.h-1 para uma distância de cinquenta metros. .................................52
10
1. INTRODUÇÃO
2. REVISÃO DE LITERATURA
plantas corresponde a um reflexo do que está se passando na cultura. Além disso, é uma
ferramenta indicadora de possíveis fatores de condições que atuam no desenvolvimento da
planta, como irrigação, drenagem, fertilidade e outras características que quando mal
manejadas causam estresse a planta afetando o estande populacional.
Diferentes problemas são apontados como responsáveis pela redução do número
de plantas de milho no campo no momento de semeadura e pós-semeadura, entre elas
podemos citar as doenças na semente (DA LUZ, 2003), regulagem da semeadora, uso
inadequado de discos dosadores (MAPA, 2002), a transposição da palha da cultura
antecedente (SATTLER et al., 1996), e também a velocidade de trabalho da semeadora,
que tem correlação negativa com as variáveis de resposta que indicam a qualidade do
processo de semeadura, já que a distribuição longitudinal de sementes fica comprometida
(KURACHI et al., 1989).
Um aspecto em determinar a informação da população de plantas de milho está
relacionado a áreas de pesquisa. As informações de densidade podem auxiliar a
pesquisadores a quantificar o impacto de diferentes manejos adotados para a cultura e o
efeito direto causado no número de plantas em grandes campos de experimentação. O
resultado possibilita maior controle de experimentos em relação a esta variável.
Outro benefício obtido com uma ferramenta capaz de estimar a densidade
populacional de plantas de milho, está relacionado a quantificação de taxas de germinação
e de sobrevivências de plantas até atingirem a fase adulta, uma vez que vários insetos
atacam as sementes, raízes e plântulas do milho após a semeadura, impossibilitando que a
planta se desenvolva até o estágio adulto. O tipo de ataque reduz o número de plantas na
área cultivada e o potencial produtivo da lavoura (EMBRAPA, 2010). As informações do
estande de milho em estágio de desenvolvimento mais avançado indicam as taxas de
sobrevivência da cultura, e o conhecimento desse parâmetro é importante para ter uma
estimativa de possíveis rendimentos (MAPA, 2002).
Dados de densidades populacionais podem indicar uma relação de população-
rendimento, obtendo valores ideais desta variável para determinada propriedade quando
sobrepostos com outras informações como as de produtividade, sendo possível realizar uma
análise de correlações entre os dois parâmetros criando um plano de gestão para a
propriedade (VIAN et al., 1996).
Mapas de produtividade são uteis para analisar o desempenho das culturas, isso se
deve ao fato de a área mapeada ser dividida em seções menores sendo que a produtividade
é media pontualmente dentro de cada secção (MOLIN, 2002). As dimensões de cada seção
são influenciadas devido a diversos fatores, como tamanho da plataforma de colheita e
capacidade do sistema de aquisição de dados. Contudo a produtividade é calculada de
acordo com a largura da plataforma independente de uma área menor estar sendo
15
desejada, isso faz com que a utilização desta ferramenta se torne pouco utilizada, sendo
recomendada sua aplicação em grandes áreas.
No entanto, apesar dos bons resultados encontrados nestes estudos, obtendo
informação de maneira remota, rápida e precisa, a maioria deles utiliza metodologias
complexas, as quais envolvem uma intensa utilização de cálculos e algoritmos matemáticos.
Tal complexidade dificulta a replicação destas metodologias por parte dos diferentes
usuários das ferramentas de geoprocessamento (QUIRÓS, 2015).
Outra limitação nesse método é a utilização de imagens capturadas quando o milho
se encontra em estágio avançado de desenvolvimento. Isso se deve pelo fato da
diferenciação de plantas individuais se tornar extremamente difícil em plantas adultas,
devido a densidade do dossel das plantas ser muito elevada sobrepondo em grande parte
umas nas plantas, impossibilitando o uso de modelos de contagem por esta metodologia.
Métodos de detecções terrestres têm sido utilizados para obtenção de informações
mais detalhadas sobre a cultura. Essa técnica pode ser efetuada simultaneamente junto
com operações de colheita e pulverização quando embarcados nas máquinas, ou mesmo
por sistemas independentes que são utilizados nas linhas de plantio individuais empurrados
manualmente. As abordagens baseadas em terra são classificadas pelos pesquisadores em
métodos de contato direto e métodos indiretos capazes de determinar o número de plantas
e o espaçamento entre elas (LI et al., 2007).
Os métodos diretos ou mecânicos consistem em medir a população de plantas por
meio de força de resistência dos colmos em que um sistema faz contado com a planta (SHI,
2013). Um dispositivo de deslocamento manual para contar talos de milho foi apresentado
em 1996 (Easton, 1996). O dispositivo identificava as plantas com uma pequena alavanca
de rotação sobressalente que era deslocada pelo contato com as plantas. Também foi
medida a distância dos sinais enviados por sensor que lia os dentes de um disco circular
acionado por uma roda de circunferência conhecida. Cada impulso enviado pelo
microcontrolador indicava a distância de aproximadamente 17 mm.
Hummel et al, (2001) desenvolveu um analisador de população de plantas que
consistia em um potenciômetro e uma haste onde o acionamento era feita de maneira
mecânica, ao passar pelas plantas, a haste tocava o talo alterando a corrente que passava
pelo potenciômetro.
Outros métodos utilizados para detectar as plantas de milho são por meios
indiretos. Os métodos indiretos são considerados os mais adequados para milho em estágio
inicial, pois não tem contato direto com a planta, evitando algum dano que possa prejudicá-
la. Eles se utilizam de equipamentos mais desenvolvidos e sistemas mais complexos para
efetuar sua função.
17
2.3.2. Erros
De acordo com o VIM de 2012, os erros observados em medições podem ser
classificados em diferentes tipos, e podem ser divididos nas diferentes denominações:
Erro Aleatório: É a diferença entre o resultado de uma medição e a média de um
determinado número de medições. Os erros aleatórios ocorrem devido a motivos
19
3. MATERIAL E MÉTODOS
(iv) Permitir o uso em cultura de milho para diferentes espaçamentos entre linhas
As dimensões do protótipo se fizeram respeitando a limite entre linhas usualmente
adotado na cultura do milho de 45 cm para o Mato Grosso, de modo que seu uso dentro do
campo ocorresse de maneira prática, sem que o seu deslocamento seja dificultado no
momento da avaliação dos parâmetros propostos devido a proximidade entre as linhas de
plantio.
Após o contato da haste com a planta, uma mola tinha a função de fazer com que a
haste retornasse para a posição inicial para que fosse efetuada a próxima contagem, para
isso foi utilizada uma mola de torção que se localizava no eixo onde a haste era
posicionada.
Um batente limitava o curso da haste atuando como um amortecedor de choque
mecânico para evitar que a chave fim de curso sofresse danos, também tinha finalidade de
manter a haste na posição de operação, de maneira que ficasse pronta para a contagem
subsequente (Figura 2).
Parâmetro Informações
Entradas/saídas digitais 54 pinos (15 PWM)
Entradas analógicas 16 pinos
Memória Flash 256 Kb (8 Kb para bootloader)
EEPROM 4 Kb
SRAM 8 Kb
Clock 16 MHz
Tensão de operação 5V
Tensão de entrada 7 a 12 V
CC no pino I/O 40 mA
CC no pino 3.3v 50 mA
A alimentação da placa de aquisição de dados foi feita com uma bateria de 12V
(Figura 7) ligada diretamente no terminal de alimentação com auxilio de um conector do tipo
Jack macho. A bateria foi posicionada ligeiramente sobre a roda da plataforma, ficando
presa com auxilio de abraçadeiras de nylon.
28
3.6. Interface
Para ser realizada leitura prévia em campo e serem salvas as informações obtidas,
foi desenvolvida uma interface gráfica que facilitasse a visualização das leituras efetuadas.
Com o auxilio de um tablet modelo Surface da Microsoft eram capturadas as informações
pela porta Serial via USB do Arduino. Um software desenvolvido em MATLAB
(MathWorks®) versão (R2016b) processava instantaneamente as informações e
apresentava ao usuário os dados referentes as leituras, das quais as informações
apresentadas eram: revoluções (Rev), distância total percorrida em metros (dis), rotações
por minuto da roda (rpm), velocidade do aparato em Km.h-1 (kph), e distância entre plantas
(DEP). Um botão tinha a função de salvar as informações do ensaio diretamente sob forma
de arquivo no armazenamento do tablet, para que posteriormente pudessem ser analisadas.
3.6.8. Pré-Testes
Antes de ser feito a avaliação de campo final, foi realizado testes de campo
preliminares apenas para investigar o comportamento dos mecanismos e possíveis fatores
que poderiam afetar a leitura das informações. Para isso o mecanismo de contagem foi
montado de modo improvisado em uma rodotrena para verificar o comportamento das
leituras em terreno irregular para avaliar o efeito da vibração sobre efeitos na leitura do
sensor fim de curso, também foi avaliado o mecanismo de distância, que foi montado
separadamente na plataforma de transporte, isolado do mecanismo de contagem, e também
31
Para isso, os pré-testes foram conduzidos com o protótipo percorrendo terreno não
pavimentado e pavimentado. Estruturas tubulares foram estaqueadas, posicionadas para
serem utilizadas como obstáculos.
O primeiro teste teve o objetivo de verificar a precisão do distanciamento indicado,
portanto, dois obstáculos foram dispostos a 6 metros de distância entre si e realizaram-se 15
repetições para aferir a precisão dos resultados.
Outra avaliação feita consistia em determinar a acurácia do mecanismo de
contagem, para isso, foram distribuídos 15 obstáculos de maneira ordenada ao longo de
uma trajetória retilínea em solo firme, representando as plantas de milho no campo. Uma
verificação simples do comportamento das leituras foi realizada com finalidade de averiguar
se o aparato contabilizava os obstáculos impostos.
entre os dois obstáculos de maneira que iniciasse a medição quando tocasse o primeiro
obstáculo e do mesmo modo terminasse quando tocasse o segundo, obtendo assim a
distância entre os dois pontos medida pelo protótipo. Uma análise de tendência foi realizada
para verificar o quanto as medidas variavam em torno do valor de referência com o uso da
Equação 1.
𝑇 = 𝑋̅ − 𝑉𝑅 (1)
Em que:
T = Tendência
𝑋̅ = Média dos valores obtidos nas leituras de distância;
𝑉𝑅 = Valor de referência da distância percorrida (100 metros).
𝑉𝑎𝑙𝑜𝑟 𝑒𝑠𝑡𝑖𝑚𝑎𝑑𝑜
𝐸% = × 100% (2)
𝑉𝑎𝑙𝑜𝑟 𝑟𝑒𝑎𝑙
Para as repetições onde não ocorreu erro na detecção dos obstáculos, foi realizada
uma analise de linha de tendência dos valores de distâncias entre obstáculos obtidos pelo
aparato e o valor de distância mensurados manualmente. Para isso foram utilizados os
dados que previamente foram salvos na memória do dispositivo de interface.
Outro ensaio foi realizado com o intuito de avaliar a confiabilidade das leituras
realizadas, este último se fez guiando a plataforma em velocidade superior a que o
mecanismo detectou todos os obstáculos. Essa avaliação consistiu em distribuir 30
33
4. RESULTADOS E DISCUSSÃO
4.2. Instrumentação
Observa-se na Figura 11 o esquema de instrumentação do protótipo desenvolvido
com os circuitos de como ficaram as ligações com os sensores. A alimentação do sistema
foi feita através de uma bateria selada, de 12V, sendo a placa de aquisição de dados
35
4.4. Interface
Uma interface foi desenvolvida para integrar o protótipo. Esta interface foi
desenvolvida em plataforma MATLAB (MathWorks®) versão (R2016b) de modo a
apresentar ao operador as informações decorrentes das leituras instantâneas que se
realizavam (Figura 15). Uma janela de comunicação (A) possuía um espaço que destinava-
se a preencher com a identificação da porta em que a placa microcontrolada estava
conectada ao dispositivo. Uma vez feito isso, e pressionado o botão “Abre” a comunicação
entre placa controladora e o software de interface era estabelecida, possibilitando a
visualização das leituras apresentadas no campo Dados (B). A caixa (C) apresentava os
valores não processados, ou seja, os dados brutos oriundos do microprocessador na
configuração de linha separada por ponto e vírgula. Pressionando o botão “Grava” as
informações da coleta eram salvas em arquivo extensão “.m” que então poderiam ser
analisadas posteriormente.
A vantagem da utilização dessa interface é que ela permitia o uso por diferentes
dispositivos computacionais que admitiam interação com o arduino via porta USB.
A
B
Figura 18. (a) primeira versão da plataforma de transporte; (b) modificações na plataforma
de transporte.
Figura 19. Modificações no mecanismo de contagem; (a) haste metálica; (b) haste de tecnil.
42
O ajuste fino da força exercida pela mola de torção permitia mudanças no tempo de
retorno da haste para sua posição normal. Este ajuste era realizado mudando-se a posição
em que a mola era travada na borda serrilhada do mecanismo (Figura 20).
40 35
35
30
Ocorrência (%)
25
25
20 15 15
15 10
10
5
0
14 15 16 17 18
Número de obstáculos mensurados
Figura 22. Ocorrência do número de contagens observadas durante o pré-ensaio.
44
4.6.3. Algoritmo
Um aumento no tempo do retardo no tempo foi necessário para corrigir o ruído
causado pelo repique da haste, responsável pela superestimação dos valores de
obstáculos. Apesar do uso de outra mola para diminuir o ruído causado pelo retorno da
haste, ainda era observada a ocorrência de oscilações no sinal. Deste modo com a
correção, mesmo que o sensor fim de curso apresentasse este problema, qualquer leitura
de sinal que fosse feitas pelo microcontrolador no intervalo de tempo estabelecido para o
ruído era ignorada. Este intervalo de tempo foi estipulado em 175 milissegundos e foi
baseado nas leituras feitas no osciloscópio.
100.8
100.4
100.2
100
99.8
99.6
99.4
99.2
Terreno Pavimentado Terreno não Pavimentado
Tabela 4. Resultado do teste de contagem dos obstáculos das vinte repetições (30
obstáculos) em cada velocidade.
Nº médio de
obstáculos Desvio Acertos
Terreno Velocidade contados Padrão *(%)
2,9 30,00 0 100
3,2 29,50 0,69 60
Pavimentado 3,8 26,65 1,04 0
4,5 21,60 1,47 0
2,9 30,00 0 100
3,2 29,35 0,81 50
Terra 3,8 26,35 1,84 0
4,5 20,70 1,13 0
* Repetições em que o aparato contabilizou todos os obstáculos
ruído do repique da haste, de maneira que sua função era de impedir que o acionamento do
sensor mecânico em intervalos curtos de tempo fosse detectada pelo microcontrolador.
Vale ressaltar que o modo com que o operador percorre a linha de obstáculos pode
influenciar nas contagens, devendo ser garantido que a haste toque as plantas durante o
percurso.
Outro fator que resultou em diferença no número de obstáculos detectado entre os
dois terrenos ensaiados, foi que em alguns espaçamentos ocorreu variação na distância
entre obstáculos, prejudicando na detecção dos mesmos (Figura 27).
35
30
Pavimentado
Distância entre obstáculos (cm)
25 Terra
20
15
10
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Número de espaçamentos
50
y = 1.0404x + 0.5549
45
35
30
25
20
15
15 17 19 21 23 25 27 29 31 33
Distância real (cm)
Figura 28. Distância real entre os obstáculos versus distância medida pelo protótipo em pavimento.
50
45 y = 0.8054x + 6.0997
Distância mensurada (cm)
R² = 0.7983
40
35
30
25
20
15
15 17 19 21 23 25 27 29 31 33
Distância real (cm)
Figura 29. Distância real entre os obstáculos versus distância medida pelo protótipo em terreno não
pavimentado.
60
50
40
30
20
Erro (%)
10
-10
-20
-30
-40
Figura 30. Variação do erro das leituras de distância entre obstáculos para a configuração de
obstáculos distanciados aleatoriamente.
Figura 31. Detalhe do acúmulo de terra no pneu que possivelmente causou aumento nos valores das
leituras de distancia entre obstáculos espaçados aleatoriamente.
60
40
20
Erro (%)
-20
-40
Figura 32. Variação do erro das leituras de distância entre obstáculos espaçados igualmente em 30
centímetros.
70
60
50
Tempo (minutos)
40
30
20
10
0
Coleta manual Uso do protótipo
Figura 33. Comparação dos tempos totais entre medição manual e com o uso do protótipo na
-1
velocidade de 2,9 km.h para uma distância de cinquenta metros.
53
5. CONCLUSÕES
7. REFERÊNCIAS BIBLIOGRÁFICAS
ALMEIDA, M. L.; MEROTTO JUNIOR, A.; SANGOI, L.; ENDER, M.; GUIGDOLIN, A. F.
Incremento na densidade de plantas: uma alternativa para aumentar o rendimento de grãos
de milho em regiões de curta estação estival de crescimento. Ciência Rural, Santa Maria, v.
30, n. 1. p. 23 - 29,jan./mar. 2000.
ARGENTA, Gilber; SILVA, Paulo Regis Ferreira da; SANGOI, Luís. Arranjo de plantas em
milho: análise do estado-da-arte. Ciência rural. Santa Maria. Vol. 31, n. 6 (nov./dez. 2001),
p. 1075-1084, 2001.
SILVA, Alexandre Ferreira da; NETO, Miguel Marques Gontijo; DESSAUNE, Flávio.
AVALIAÇÃO DE DESEMPENHO DE CULTIVARES DE MILHO SAFRINHA NO MUNICÍPIO
DE SINOP-MT. XII Seminário Nacianal de Milho Safrinha. Novembro 2013.
EASTON, D.T. and Easton, D. J. Device to measure and provide data for plant population
and spacing variability. U.S. Patent No. 5,568,405. 1996.
EMBRAPA. Cultivo do milho. 7ª edição. Embrapa Milho e Sorgo. Set. 2011. Disponível em:
<http://www.cnpms.embrapa.br/publicacoes/milho_7_ed/mercado.htm>. Acesso em 14 Maio
2016.
LI, H.; WORLEY, S. K.; WILKERSON, J. B. Design and optimization of a biomass proximity
sensor. Transactions of the ASABE, v. 52, n. 5, p. 1441-1452, 2009.
LUCK, Joe D.; PITLA, Santosh K.; SHEARER, Scott A. Sensor ranging technique for
determining corn plant population. In: 2008 Providence, Rhode Island, June 29–July 2,
2008. American Society of Agricultural and Biological Engineers, p. 1. 2008.
MEROTTO JUNIOR, Aldo; ALMEIDA, Milton Luiz de; FUCHS, Orlando. Aumento no
rendimento de grãos de milho através do aumento da população de plantas. Ciencia Rural.
Santa Maria. vol. 27, n. 4 (out./dez. 1997), p. 549-554, 1997.
SHI, Yeyin et al. Automatic corn plant location and spacing measurement using laser line-
scan technique. Precision Agriculture, v. 14, n. 5, p. 478-494, 2013.
SHRESTHA, Dev Sagar; Development of a machine vision system for corn plant population,
spacing and height measurement. 2004.
SHRESTHA, Dev Sagar; STEWARD, Brian L. Automatic corn plant population measurement
using machine vision. American Society of Agricultural Engineers, v. 46, n. 2, p. 559,
2003.
THORP, Kelly R. et al. Using aerial hyperspectral remote sensing imagery to estimate corn
plant stand density. Transactions of the ASABE, v. 51, n. 1, p. 311-320, 2007.
VIEIRA FILHO, José Eustáquio Ribeiro; VIEIRA, ACP. Panorama das inovações na
pesquisa agrícola no Brasil: o sistema de propriedade intelectual. Revista Radar n, v. 24.
n.1, 2012.
ANEXO A
ANEXO B
Algoritmo Desenvolvido
/*
Rodrigo S. Zandonadi
Wagner Z. Ferrari
int ct_it = 0;
int it_ma = 42;
long tem_i = 0;
long tem_f = 0;
float dis_i = 0;
float dis_f = 0;
long d_tem= 0;
float d_dis = 0;
float rev_i = 0;
float rev_f = 0;
float d_rev = 0;
float rpm = 0;
float kph = 0;
#define c_ChaveInterrupt 4
#define c_ChavePin 19
#define c_EncoderInterruptA 0
#define c_EncoderInterruptB 1
#define c_EncoderPinA 2
60
#define c_EncoderPinB 3
#define EncoderIsReversed
void setup()
{
pinMode(c_EncoderPinA, INPUT);
digitalWrite(c_EncoderPinA, LOW);
pinMode(c_EncoderPinB, INPUT);
digitalWrite(c_EncoderPinB, LOW);
pinMode(c_ChavePin, INPUT_PULLUP);
digitalWrite(c_ChavePin, HIGH);
// INICIAM AGORA AS INTERRUPÇÕES EXTERNAS
attachInterrupt(c_EncoderInterruptA, HandleInterruptA, CHANGE);
attachInterrupt(c_EncoderInterruptB, HandleInterruptB, CHANGE);
attachInterrupt(c_ChaveInterrupt, HandleInterruptChave, CHANGE);
Serial.begin(38400);
Serial.println("ready..");
Serial.println(versao);
Kdis = 2*3.1415*Rr;
Serial.println(Kdis);
delay(3000);
tem_i = millis();
dis_i = 0;
rev_i = 0;
}
void loop(){
l_rev = _EncoderTicks/4096;
if (_EncoderTicks > 0)
{
ct_it = ct_it+1;
}
tem_f = millis();
d_tem = tem_f - tem_i;
tem_i = tem_f;
dis_f = dis;
d_dis = dis_f - dis_i;
dis_i = dis_f;
rev_f = f_rev;
d_rev = rev_f-rev_i;
rev_i = rev_f;
rpm = (d_rev/float(d_tem))*60000;
kph = ((Kdis*rpm)/60)*3.6;
61
ct_it = 0;
}
d_tick = _EncoderTicks - l_rev*4096;
rev_par = d_tick*100/4096;
f_rev = float(l_rev)+float(rev_par)/100;
dis = f_rev*Kdis;
f_drev= f_rev-f_revi;
f_revi = f_rev;
tf = millis();
dt = tf-ti;
ti = tf;
if(contaflag == HIGH) {
if (controler_delay == HIGH) {
delay(15);
controler_delay = LOW;
}
chave_est = digitalReadFast(c_ChavePin);
if(chave_est == LOW) {
conta = conta + 1;
dpp = dis;
dep = dpp - dpi;
dpi = dpp;
delay(175);e
attachInterrupt(c_ChaveInterrupt, HandleInterruptChave, CHANGE);
attachInterrupt(c_ChaveInterrupt, HandleInterruptChave, CHANGE);
contaflag = LOW;
}
}
Serial.print("$;"); Serial.print(_EncoderTicks);Serial.print(";");Serial.print(f_rev);
Serial.print(dis); Serial.print(";"); Serial.print(dt); Serial.print(";"); Serial.print(f_drev);
Serial.print(rpm); Serial.print(";");Serial.print(kph); Serial.print(";"); Serial.print(conta); Serial.print(";");
Serial.print(dep); Serial.println(";");
if (stringComplete)
{
String pre = "";
for (int i = 0; i < 3; i++){
pre += inputString.charAt(i);
}
if (pre == "#,V")
{
String snum = "";
int numi = 0;
for (int i = 4; i<=6; i++) {
snum += inputString.charAt(i);
numi = inputString.charAt(i)- '0';
Serial.println(numi);
}
Char2Int(snum);
}
inputString = "";
stringComplete = false;
}
}
int Char2Int(String snum)
{
int le = snum.length();
int numi = 0;
float numdec = 0;
Serial.println(le);
62
}
}
//FUNCAO CAPTURA EVENTO NA PORTA SERIAL //
void serialEvent()
{
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n')
{
stringComplete = true;
}
}
}
// Interrupt service routines para chave de fim de curso
void HandleInterruptChave(){
detachInterrupt(4);
contaflag = HIGH;
controler_delay = HIGH;
}
// Interrupt service routines for the quadrature encoder
void HandleInterruptA(){
_EncoderBSet = digitalReadFast(c_EncoderPinB);
_EncoderASet = digitalReadFast(c_EncoderPinA);
_EncoderTicks+=ParseEncoder();
_EncoderAPrev = _EncoderASet;
_EncoderBPrev = _EncoderBSet;
}
// Interrupt service routines for the quadrature encoder
void HandleInterruptB(){
// Test transition;
_EncoderBSet = digitalReadFast(c_EncoderPinB);
_EncoderASet = digitalReadFast(c_EncoderPinA);
_EncoderTicks+=ParseEncoder();
_EncoderAPrev = _EncoderASet;
_EncoderBPrev = _EncoderBSet;
}
int ParseEncoder(){
if(_EncoderAPrev && _EncoderBPrev){
if(!_EncoderASet && _EncoderBSet) return 1;
if(_EncoderASet && !_EncoderBSet) return -1;
}else if(!_EncoderAPrev && _EncoderBPrev){
if(!_EncoderASet && !_EncoderBSet) return 1;
if(_EncoderASet && _EncoderBSet) return -1;
}else if(!_EncoderAPrev && !_EncoderBPrev){
if(_EncoderASet && !_EncoderBSet) return 1;
if(!_EncoderASet && _EncoderBSet) return -1;
}else if(_EncoderAPrev && !_EncoderBPrev){
if(_EncoderASet && _EncoderBSet) return 1;
if(!_EncoderASet && !_EncoderBSet) return -1;
}
}