Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

10
1 MEDIÇÃO DE DISTÂNCIA DOS OBSTÁCULOS UTILIZANDO SENSORES DE INFRAVERMELHO E PLATAFORMA ARDUINO CAROLINE A. ALCÂNTARA, FRANCISCO A. ALVES, LUCAS M. BATISTA, PATRICIA M. K. N. TEIXEIRA, VANESSA B. , WELLINGTON PASSOS Departamento de Engenharia Elétrica, Universidade Federal da Bahia Rua Prof. Aristides Novis, 2 - Federação- Salvador Bahia Brasil E-mails: [email protected], [email protected], [email protected], [email protected], [email protected], [email protected] Abstract - This article presents distance measurement by a infrared sensor model GP2Y0A21YK0F and one arduino kit AtMega2560. The measurement conversion of sensor and the stocked results are performed by the arduino platform. The principles of sensor calibration, the achievment of the funcion volts x distance and the programming were realized by studied concepts in the disciplines Microprocessed System and Statistic Methods. Keywords - Arduin, calibration, distance, sensor. Resumo - Este artigo apresenta um medidor de distância através do sensor por infravermelho modelo GP2Y0A21YK0F e um kit Arduino AtMega2560. A conversão da medição dos sensores e os resultados armazenados são realizados pela plataforma Arduíno. Os princípios de calibragem dos sensores, a caracterização da função voltagem x distância e a programação foram realizados utilizando conceitos abordados nas disciplinas Sistemas Microprocessados e Métodos Estatísticos. Palavras-chave - Arduino, calibração, distância, sensor. 1 Introdução O projeto de medição das distâncias do objeto aos obstáculos consiste em utilizar 10 sensores do tipo infravermelho que produzirão leituras em formato de tensão ao encontrarem objetos no seu campo de alcance. Essas leituras foram captadas pelo Arduino que efetuará a conversão das tensões em distâncias através de seu código de programação. As leituras referentes a cada sensor foram armazenadas pelo Arduino como um vetor de distâncias o qual podem ser acessados e enviados caso necessário via protocolo I2C. As etapas básicas do processo foram: Calibração do sensor, medindo a tensão que o sensor produz entre uma distância mínima de 10cm e máxima de 80cm. Caracterização da curva da função Tensão x Distância do sensor diante de obstáculos de cores escuras e claras. Conversão da leitura analógica do sensor para formato digital através do Arduino. Conversão do sinal digital para medidas em formato de tensão. (O sinal digital virá em uma faixa entre 0 e 1023, já que estamos utilizando uma resolução de 10 bits) Conversão desse valor de tensão para o valor referente à distância encontrado através da curva de caracterização calculada da função Tensão x Distância. Armazenamento dos valores da distância de cada sensor em um vetor. Transmissão serial dos valores da distância de cada sensor via I2C. 2 Desenvolvimento 2.1 Especificações do Projeto São exigências do projeto: Utilizar 10 sensores modelo GP2Y0A21YK0F para medir distâncias; Enviar os valores das distâncias medidas por cada sensor por um canal I2C;

Transcript of Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

Page 1: Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

1

MEDIÇÃO DE DISTÂNCIA DOS OBSTÁCULOS UTILIZANDO SENSORES

DE INFRAVERMELHO E PLATAFORMA ARDUINO

CAROLINE A. ALCÂNTARA, FRANCISCO A. ALVES, LUCAS M. BATISTA, PATRICIA M. K. N.

TEIXEIRA, VANESSA B. , WELLINGTON PASSOS Departamento de Engenharia Elétrica, Universidade Federal da Bahia

Rua Prof. Aristides Novis, 2 - Federação- Salvador – Bahia – Brasil E-mails: [email protected], [email protected],

[email protected], [email protected], [email protected], [email protected]

Abstract - This article presents distance measurement by a infrared sensor model GP2Y0A21YK0F and one arduino kit

AtMega2560. The measurement conversion of sensor and the stocked results are performed by the arduino platform. The principles of sensor calibration, the achievment of the funcion volts x distance and the programming were realized by studied concepts in the

disciplines Microprocessed System and Statistic Methods.

Keywords - Arduin, calibration, distance, sensor.

Resumo - Este artigo apresenta um medidor de distância através do sensor por infravermelho modelo GP2Y0A21YK0F e um kit

Arduino AtMega2560. A conversão da medição dos sensores e os resultados armazenados são realizados pela plataforma Arduíno.

Os princípios de calibragem dos sensores, a caracterização da função voltagem x distância e a programação foram realizados utilizando conceitos abordados nas disciplinas Sistemas Microprocessados e Métodos Estatísticos.

Palavras-chave - Arduino, calibração, distância, sensor.

1 Introdução

O projeto de medição das distâncias do objeto

aos obstáculos consiste em utilizar 10 sensores

do tipo infravermelho que produzirão leituras

em formato de tensão ao encontrarem objetos no

seu campo de alcance. Essas leituras foram

captadas pelo Arduino que efetuará a conversão

das tensões em distâncias através de seu código

de programação. As leituras referentes a cada

sensor foram armazenadas pelo Arduino como

um vetor de distâncias o qual podem ser

acessados e enviados caso necessário via

protocolo I2C. As etapas básicas do processo foram: Calibração do sensor, medindo a tensão que

o sensor produz entre uma distância mínima

de 10cm e máxima de 80cm.

Caracterização da curva da função Tensão x

Distância do sensor diante de obstáculos de

cores escuras e claras.

Conversão da leitura analógica do sensor

para formato digital através do Arduino.

Conversão do sinal digital para medidas em

formato de tensão. (O sinal digital virá em

uma faixa entre 0 e 1023, já que estamos

utilizando uma resolução de 10 bits)

Conversão desse valor de tensão para o

valor referente à distância encontrado

através da curva de caracterização calculada

da função Tensão x Distância.

Armazenamento dos valores da distância de

cada sensor em um vetor.

Transmissão serial dos valores da distância

de cada sensor via I2C.

2 Desenvolvimento

2.1 Especificações do Projeto São exigências do projeto: Utilizar 10 sensores modelo

GP2Y0A21YK0F para medir distâncias;

Enviar os valores das distâncias medidas

por cada sensor por um canal I2C;

Page 2: Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

2

2.2 Sensor de distância GP2Y0A21YK0F GP2Y0A21YK0F é um sensor infravermelho,

composto de uma combinação integrada entre

um PSD (position sensitive detector, detector de

posição), um IRED (infrared emitting diode,

diodo emissor de infravermelho) e um circuito

processador de sinal.

Figura 1 - Diagrama de blocos da organização interna do

sensor GP2Y0A21YK0F

Segundo o datasheet disponibilizado pelo

fabricante, são características relevantes do

dispositivo: Faixa de distâncias de medida: 10 a 80cm; Tipo de saída: tensão analógica entre 0 e

5V; Corrente média de consumo típica: 30mA; Faixa de tensões de alimentação: 4,5 a

5,5V.

O GP2Y0A21YK0F utiliza um método de

triangulação para calcular a distância de um

determinado objeto. Um pulso de luz

infravermelha é emitido pelo emissor e se

propaga até encontrar um objeto. Ao encontrar

um obstáculo, esta luz é refletida e forma-se um

triângulo entre o emissor, o ponto de reflexão e

o detector do sensor, conforme Figura 2.

Figura 2 – Triangulação do sensor GP2Y0A21YK0F

A luz refletida incide no receptor e é transmitida

a um pequeno dispositivo de carga acoplada

(CCD) localizado dentro do sensor, que tem

como função determinar o ângulo de reflexão.

Os ângulos formados no triângulo variam de

acordo com a distância que está o objeto.

Assim, o sensor calcula a distância a partir desse

ângulo de reflexão e emite uma tensão no seu

pino de saída correspondente à distância

detectada. Este método oferece grande imunidade contra a

interferência da luz ambiente e a variação de cor

do obstáculo. Porém, a relação entre a tensão de

saída e a distância torna-se não linear,

aparentando uma curva logarítmica, como

mostra a Figura 3 obtida do datasheet do

dispositivo. É possível observar também que

para distâncias fora da faixa de operação do

sensor, a saída torna-se não proporcional e deve

ser rejeitada.

Figura 3 – Curva característica do sensor

GP2Y0A21YK0F

2.3 Obtenção da curva característica do

sensor A curva característica do sensor, fornecida pelo

datasheet, foi ilustrada na Figura 3. Entretanto,

cada sensor possui um comportamento

específico, devido à sua estrutura interna. Por

isso, foi necessário realizar uma série de

medidas experimentais para verificar a curva

característica de um determinado sensor.

Page 3: Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

3

Para realizar essa medição, foi necessário

conectar os três terminais do sensor, respeitando

a indicação da Figura 4. A alimentação Vcc

utilizada foi de 5V, que está de acordo com a

condição de operação “Supply voltage”

recomendada pelo datasheet do produto, que

varia de 4,5 a 5,5V. A partir daí, foi possível ler

os resultados de tensão no terminal Vo do

sensor, através de um multímetro, na medida em

que variávamos a distância entre o mesmo e um

obstáculo. Devido à precisão do

GP2Y0A21YK0F, só foi possível medir a

voltagem referente ao intervalo de distância de

10 a 80cm.

Figura 4 – Pinagem referente ao sensor

GP2Y0A21YK0F As medidas foram realizadas com duas cores de

obstáculo diferente: uma folha de papel A4

branco de gramatura 75g/m² e um

paralelepípedo envolvido em couro preto. Os dados referentes ao obstáculo branco podem

ser observados na tabela a seguir:

Figura 5 – Dados da tensão e distância obtidos através de

um obstáculo de cor branca.

Figura 6 – Curva característica da função “Voltagem x Distância” para obstáculo branco.

Visualmente, percebe-se que a curva resultante,

apresentada no gráfico acima, é próxima à curva

fornecida pelo datasheet. Além disso, a partir

desses dados coletados, foi possível encontrar a

equação da curva que mais se aproxima do

comportamento “voltagem x distância” do

sensor. Para isso, foi utilizado o método de

regressão não linear (do tipo potência) no qual

ajustamos a curva da função através de uma

ferramenta no Excel chamada Linha de

Tendência obtendo o seguinte resultado:

Figura 7 – Ajuste da Linha de Tendência realizada no

Excel para amostras feitas com obstáculo branco. A própria ferramenta do Excel nos fornece a

equação da curva que é apresentada abaixo.

d15,5109 V -0,8778 (1)

Sendo: d = distância do sensor ao obstáculo de cor

branca. V = tensão escrita pelo sensor para representar

aquela distância ao obstáculo.

Page 4: Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

4

O R² indicado no gráfico é um parâmetro,

chamado de coeficiente de determinação, que

avalia a qualidade da regressão. Quanto mais

próximo de 1, melhor o ajuste entre a função e

os dados coletados. O R² varia de 0 a 1,

indicando em porcentagem o quanto o modelo

consegue explicar os valores observados. Nesse caso temos um R² = 0,9982 , o que

significa que 99,82% da variável dependente

consegue ser explicada pelos regressores

presentes no modelo. Quando utilizamos um obstáculo preto para

fazer as medidas da tensão em relação à

distância desse objeto até o sensor, encontramos

um resultado não satisfatório.

Figura 8 – Dados da tensão e distância obtidos através de

um obstáculo de cor preta.

Figura 9 – Curva característica da voltagem x distância.

Neste caso, percebe-se que a curva encontrada

possui distorções em relação à curva referente

ao obstáculo branco, e também em relação à

curva do datasheet. Este resultado pode ser

explicado devido a erros dos operadores da

medição, e pode ser constatado através da

equação encontrada para este conjunto de

medidas, utilizando o mesmo método de

regressão supracitado.

Figura 10 – Ajuste da Linha de Tendência realizada no

Excel para amostras feitas com obstáculo preto. A equação da curva feita pelo Excel é

apresentada abaixo.

d13,262 V -0,769 (2)

Sendo: d = distância do sensor ao obstáculo de cor

preta. V = tensão escrita pelo sensor para representar

aquela distância ao obstáculo. Nesse caso temos um R² = 0,9545 , o que

significa que 95,45% da variável dependente

consegue ser explicada pelos regressores

presentes no modelo. Observamos que o nível de confiança é maior se

trabalharmos com obstáculos de cor branca, já

que a curva das amostras de distância por tensão

que coletamos está mais próxima da equação de

regressão que calculamos. Com um coeficiente

de determinação de 99,82%, referente à análise

de dados do obstáculo branco, temos uma

segurança maior para aplicarmos o método

utilizado para representar a curva característica

do sensor.

2.4 Condicionamento do sinal do sensor O condicionamento de sinais é necessário para

converter os sinais oriundos dos sensores e

então “interfaciar” de forma adequada com o

controlador. Mesmo em aplicações envolvendo

processamento digital, algum tipo de

Page 5: Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

5

processamento analógico é requerido antes que

a conversão analógico-digital seja feita,

limitando a largura de banda do sinal à no

máximo metade da taxa de amostragem,

“casando” sua amplitude com a faixa de entrada

do conversor e eliminando ruídos no sinal que

venha do sensor. O sensor GP2YOA21YKOF é pouco

susceptível à variação de reflexão sobre o

objeto, a temperatura ambiente e o tempo de

operação do sensor. O datasheet menciona que

para reduzir o ruído, precisa-se colocar um

capacitor de 10 uF entre o terra e a entrada de

voltagem. Mesmo assim, tem uma presença de

ruído. Para eliminar esse ruído, adiciona-se na

saída do sensor um filtro ativo de primeira

ordem.

Figura 11 – Mapeamento do circuito utilizando o

software Protheus Isis 7. Sensor associado a um filtro

passa-baixa.

O ATMEGA2560 contem um único conversor

analógico-digital de 10 bits com uma frequência

de amostragem igual à 15 kHz. Conforme o

teorema de Nyquist, a frequência máxima do

sinal de entrada do conversor deve ser igual ou

menor que 7.5 kHz, desta forma eliminamos o

efeito chamado aliasing ou foldover em que a

alta frequência é medida erroneamente como

sendo de frequência mais baixa. Os valores dos

componentes são escolhidos tal que R1 = R2 =

10kΩ (já que o ganho do filtro passa-baixa

obedece a equação K = -R2/R1 = -1) e C1 =

4,7nF de maneira a ter uma frequência de corte

Fc = 1/(2π.R2.C1) = 3.4 kHz.

2.5 Controlador Arduino Os 10 sensores infravermelhos

GP2Y0A21YK0F são utilizados no projeto na

intenção de medir distância e para isso

utilizamos o microcontrolador Atmega2560 da

plataforma Arduino Mega2560.

O Arduino foi escolhido devido a facilidade de

programação, de obtenção do kit para testes e

pela quantidade de portas analógicas presentes

para conversão Análogico/Digital da tensão dos

10 sensores. São as principais características do Arduino

Mega2560: Tensão de operação: 5V, proveniente de

fonte externa ou da porta USB de um

computador;

54 pinos de entrada e saída digital, sendo 15

portas com capacidade para PWM;

16 pinos de entrada analógica;

Corrente máxima por pino digital de 40mA;

Memória de programa flash de 256KB,

incluindo bootloader;

Memória RAM de 8KB;

Memória EEPROM de 4KB;

Clock de 16MHz.

Suas especificações são visualizadas de forma

clara na Figura 12.

Figura 12 –Plataforma detalhada do Arduino Mega2560

O Arduino é um projeto de circuito baseado em

microprocessador de código aberto, da indústria

Atmel. É uma placa física com circuitos de

entrada/saída simples, microcontrolada e

desenvolvida sobre uma biblioteca que

simplifica a escrita da linguagem de

programação em C/C++. Sua linguagem de

programação é baseado na linguagem Wiring

(prototipagem eletrônica de hardware livre

Page 6: Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

6

composta por uma linguagem de programação,

um ambiente de desenvolvimento integrado e

um microcontrolador de placa única) e seu

ambiente de desenvolvimento é baseado no

Processing. O Arduino tem a funcionalidade de interpretar

as variáveis do ambiente e transformá-las em

sinal elétrico, através de sensores ligados aos

terminais de entrada, controlando ou acionando

algum outro elemento eletro-eletrônico

conectado ao terminal de saída.

Resumidamente, o Arduino é uma ferramenta de

entrada e saída de dados que pode ser acionada

por um sensor, e depois processada para poder

acionar um atuador. Esse funcionamento é

simplificado no esquema abaixo.

Figura 13 –Diagrama simplificado de funcionamento do

Arduíno. Com o Arduino pode-se desenvolver objetos

interativos, permitindo a entrada de sensores ou

chaves, controlando uma variedade de luzes,

motores ou saídas físicas. Com ele pode-se

manipular o hardware (sensores, portas,

alarmes) através do software. Algumas de suas grandes vantagens de

utilização são: Preço: Relacionando com as outras

plataformas de microcontroladores, o

Arduino possui um preço relativamente

baixo.

Multi-plataforma: O seu software roda no

Windows, Linux e Macintosh OSX.

Utilização simples e clara: O seu ambiente

de programação é de fácil uso e seu código

fonte é aberto e pode ser aperfeiçoado por

programadores mais experientes.

2.6 Lógica de programação, Fluxograma e

código Para conversão de valores de tensão para

valores de distância foi necessário fazer uma

calibragem no sensor infravermelho que

consiste em obter os valores experimentais de

tensão para cada distância. Após várias

medições é possível gerar uma função

matemática para realização dos cálculos no

microcontrolador. É importante salientar que neste relatório

informamos somente a calibragem de um

sensor, por conta da acessibilidade aos materiais

do projeto. No entanto, durante a programação

deixamos uma parte do código reservado para

incluir as outras funções características advindas

das calibrações dos outros 9 sensores. Quando há mudança de cor do objeto de branco

(clara) para preto (escura) ou vice-versa foi

possível perceber que a tensão no sensor muda

mantendo a mesma distância. Isso ocorre, pois a

reflexão do infravermelho será menor quando a

cor do objeto for preta. Nesse projeto iremos

considerar que os objetos encontrados serão da

cor branca. Com as amostras de tensão para cada distância

que obtivemos, encontramos a relação Distância

x Tensão pelo método dos mínimos quadrados.

Essa relação, que será usada durante a

programação, é escrita como:

V26,1049 d -1,13718 (3)

Sendo: d = distância do sensor ao obstáculo de cor

branca V = tensão escrita pelo sensor para representar a

distância ao obstáculo A curva para calibragem foi apresentado no

gráfico abaixo.

Figura 14 - Curva de calibragem construída

utilizando uma folha de papel A4 da Chamex modelo

multi, gramatura 75g/m2, como obstáculo. Com a função da distância bem definida,

iniciamos a escrita do código de programação

do Arduino. Todo código necessita da inclusão de

bibliotecas. Como o nosso código irá conter

Page 7: Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

7

funções matemáticas, incluímos em nossa

programação a biblioteca math.h. Além disso, nosso projeto deverá conter uma

comunicação serial via I2C que servirá para

enviar os dados dos valores da distância quando

solicitados. Portanto, será necessário incluir a

biblioteca Wire.h. Iniciamos nosso código também com o pré-

processador #define que exige que compilador

ao longo do programa faça a substituição da

constante definida pelo pré-processador por um

valor também pré definido. No nosso caso fizemos #define canaisAD 10

que substitui tudo que estiver escrito como

canaisAD por 10. Esses canais AD são todos os

canais analógicos-digitais que temos para

converter os sinais analógicos advindos dos

sensores. Como possuímos 10 sensores, logo

necessitamos de 10 conversores ADs, então

definimos canaisAD como 10. Declaramos o inteiro i que servirá como valor

que varia entre 0 e 9 para ajudar na função dos

vetores que criamos para armazenar dados. Foi necessário declarar também as constantes

das funções característica de cada sensor, bem

como os expoentes dessas funções. Para tal

criamos dois vetores a[canaisAD] e

b[canaisAD] que armazena as 10 constantes e

os 10 expoentes da função de cada sensor

respectivamente. O esboço de nossa programação inicializa com a

função void setup() no qual se usa para

inicializar variáveis, seleção de pinagens, etc.

Dentro dessa função, é necessário inicializar a

comunicação serial, informando a taxa de dados

em bits por segundo para transmissão de dados

serial. Cada serial possui um nível diferente de

taxa de dados de transmissão que variam entre

300 à 115200 bits por segundo. Como estamos

conectando o computador via serial, este exige

somente uma taxa de 9600 bits por segundo. Nessa função será necessário, também,

inicializar a comunicação via I2C, através da

função Wire.begin(). Depois de criar uma função setup(), que

inicializa e define os valores iniciais, a função

void loop() faz exatamente o que seu nome

sugere, laços consecutivos, permitindo que o

programa continue em seu processo de leitura,

manipulação de dados e escrita. Nas definições de variáveis temos:

float sensor = é o dado enviado pelo sensor ao

encontrar o obstáculo. Esse dado virá na faixa

de 0 a 1023 que é a faixa considerada para a

resolução de 10 bits que estamos utilizando. Como os dados do sensor será um sinal

analógico, é necessário pedir que o compilador

leia esse sinal. Por isso usamos a chamada

analogRead() que permite a leitura do pino que

recebe o sinal analógico. Considerando o canal

de conversão analógico-digital de 10 bits que

estamos utilizando, o Arduino irá mapear

tensões de entrada entre 0 e 5V em valores

inteiros entre 0 e 1023. O que produz uma

resolução de leitura de 5 volts por 1024

unidades. A chamada analogRead() vem especificando

entre os parênteses o pino que recebe o sinal

analógico. Como usamos a porta A0, A1, A2,

A3, A4, A5, A6, A7, A8, A9 como pinos de

entrada dos sinais analógicos (10 portas, pois

usamos 10 sensores), especificamos no

analogRead() o pino (i + 14), sendo i um

número inteiro que varia entre 0 e 9, e 14 o

valor conhecido pelo compilador como porta A0

(15 é a porta A1, 16 é a porta A2, 17 é a porta

A3 e assim sucessivamente). float volt = é a tensão que iremos calcular

através do dado recebido pelo float sensor.

Como o dado do sensor virá numa faixa entre 0

e 1023, para transformar esse número num valor

em Volts usamos a fórmula abaixo:

0.1023

5 sensorvolt

(4)

Sendo: 5 = a tensão máxima em volt (tensão de

alimentação) sensor = o valor recebido do sensor (que varia

de 0 a 1023) 1023 = o máximo valor da faixa recebida do

sensor float dist = é o valor da distância do sensor ao

obstáculo. Esse valor é calculado pela fórmula

(3) já mencionada. Como queremos armazenar

os valores da distância de cada sensor aos

obstáculos, fizemos a variável dist como vetor,

escrevendo como dist [canaisAD - 1]. Como o

vetor distância armazena dados de cada canal

analógico-digital, definimos que este vetor

possui o tamanho igual à dos canaisAD, ou seja,

é um vetor que armazena 10 valores de distância

(que varia de 0 à 9). Ao aplicar a fórmula (3)

para calcular a distância, usamos o vetor dist

como sendo dist [i], com i variando entre 0 e 9.

A fórmula fica:

Page 8: Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

8

][][][ ibvoltiaidist (5)

A cada valor de i variando de 0 a 9, possuímos

novos valores de tensão calculados para cada

dado recebido pelo sensor. Desta forma, temos

os diferentes valores das distâncias armazenados

no vetor que varia de dist [0] à dist [9]. Observe

também que a[i] é o vetor que armazena as

constantes e b[i] o vetor que armazena os

expoentes da função característica de cada

sensor, definida após calibragem. Para que cada valor do vetor distância seja

escrito no monitor do computador, indicamos a

função Serial.println(dist[i]). Além disso, será

necessário uma interrupção do programa à cada

escrita dos valores das distâncias obtidas. Essa

interrupção é importante para que possamos ver

com clareza os valores no monitor do

computador. Para isso, é necessário utilizar a

função delay(300), no qual colocamos uma

parada de 300 milisegundos (0,3 segundos) de

uma escrita para outra. Para o envio do vetor distância (dist[i]) via I2C,

quando solicitado, implementamos no código a

função Wire.write(int (dist[i])). O valor de i é incrementado (somado 1) cada

vez que um valor de distância for armazenado

no vetor. Quando o valor de i chegar à 10 (valor de

canaisAD) o compilador zera i (coloca i = 0) e

retorna ao início do loop, onde recomeçará a

leitura das distâncias do obstáculo à cada

sensor. Segue adiante o fluxograma que simplifica

todas essas etapas da programação.

Figura 15 - Fluxo de execução do código feito para

Arduino.

O código do programa é indicado abaixo: #include <Wire.h> // Biblioteca I2C #include <math.h> // Biblioteca matemática #define canaisAD 10 // números de canais AD // dos sensores (temos 10

// canais)

int i = 0; //declaração das constantes de calibração de

//cada sensor, usados para calcular distância,

// os valores para outros sensores devem ser

//obtidos como segue no artigo:

const float a[canaisAD] = {26.1049,

constante2,constante3,...,constante10};

const float b[canaisAD] = {-1.13718,

expoente2,expoente3,...,expoente10}; void setup( ) { // Inicializa comunicação serial em 9600

//bits por segundo: Serial.begin(9600);

// Inicia o I2C: Wire.begin( ); } // A rotina roda num loop roda para sempre: void loop( ) {

float sensor = analogRead(i+14);

// porta A0 é chamada de 14 pelo programa, A1

// é 15 e assim sucessivamente

float volt; float dist [canaisAD];

// Imprime o dado para leitura

// cálculo para achar o valor em volts no sensor: volt = 5*sensor/(1023.0);

// cria um vetor que contém canaisAD valores

//de distâncias que serão lidas pelo sensor: dist[i] = a[i]*pow(volt,b[i]);

if( (dist[i] > 70.0) || (dist[i] < 15.0)) {

Serial.print(“Sensor ”);

Serial.print(i);

Serial.println(“ excedeu a faixa”);

}

Page 9: Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

9

// Imprime no Serial Monitor o valor: Serial.println(dist[i]);

// Envia via I2C os valores das distâncias.

//Envia em formato inteiro, pois não funciona

//com ponto flutuante:

Wire.write(int (dist[i])); delay(300); // Espera 0,3 s i++; if (i = = canaisAD) {

// Se chegar igual a canaisAD volta a 0 e mede o

//valor da primeira porta novamente.

i=0;

} }

3 Resultados práticos

Para implementação e teste do código de

programação do projeto, foi utilizado somente 1

sensor ligado ao Arduino Nano (placa pequena

baseada no ATmega326) no qual possui as

seguintes características: Tensão de operação: 5V, proveniente de

fonte externa ou da porta USB de um

computador;

14 pinos de entrada e saída digital, sendo 6

portas com capacidade para PWM;

8 pinos de entrada analógica;

Corrente máxima por pino digital de 40mA;

Memória de programa flash de 32KB,

incluindo bootloader;

Memória RAM de 2KB;

Memória EEPROM de 1KB;

Clock de 16MHz.

O que diferencia de fato esse Arduino Nano ao

Arduino Mega2560 são as quantidades de pinos

de entrada analógica, pinos de entrada e saída

digital e capacidade de memórias flash, RAM e

EEPROM. No entanto, para efeito de teste da

programação, essa diferença não afetaria nosso

projeto, já que testaremos a programação

utilizando somente 1 sensor. Com o teste

validando a qualidade do nosso programa,

bastou somente alterar o código do programa

para mais 9 sensores, implementando um loop e

criando vetor de dados.

Segue o circuito modelo utilizado para leitura de

dados do sensor e retorno de valores de

distância entre sensor e obstáculo:

Figura 16: Circuito usado para teste de código.

Arduino utilizado para teste, Arduino Nano. Para ligação do sensor à placa do Arduino

utilizamos a referência da pinagem do sensor

encontrada em seu datasheed. Conectamos as 2

entradas do sensor (GND e Vcc) e a saída do

sensor (Vo) às portas do Arduino. Observa-se na imagem que a saída Vo do sensor

está ligado à porta A0 da placa. Esse sinal Vo é

o sinal referente às distâncias do sensor ao

obstáculo, e esse sinal que será aplicado no

nosso programa para definirmos os valores das

distâncias através da equação (5). A porta 5V da placa é conectada ao pino de

entrada Vcc do sensor. Essa porta 5V serve de

alimentação ao sensor e é a tensão proveniente

da alimentação entregue pelo computador ao

Arduino (via USB). A porta GND da placa é conectada ao pino de

entrada GND do sensor para finalizar as

ligações suficiente para a interação entre

microprocessador e sensor.

4 Conclusão

O projeto em questão analisou o comportamento

do sensor infravermelho em diferentes tipos de

obstáculos e permitiu a caracterização da função

Distância por Voltagem através de calibração e

regressão não linear dos valores das amostras.

Foi feita a escolha em trabalhar com a melhor

curva que caracteriza-se nosso sistema, por isso

Page 10: Medição de distância dos obstáculos utilizando sensores de infravermelho e plataforma arduino

10

foi feita a análise do coeficiente de

determinação de cada tipo de obstáculo (o da

cor branca e o da cor preta) ficando clara a

maior confiabilidade diante da equação

característica ao se utilizar obstáculo de cor

branca. Diante do objetivo em desenvolver um

programa que informasse ao usuário a distância

dos sensores aos obstáculos, foi possível

perceber a facilidade de manuseio e o bom

desempenho ao se utilizar do microprocessador

Arduino que consegue atender de forma prática

e simples aos objetivos finais no trabalho. De forma geral, os resultados obtidos foram

satisfatórios e fiéis ao esperado teoricamente. O

projeto permitiu o aprofundamento do

conhecimento de microcontroladores e da

facilidade de manipulação de dados que estes

podem nos fornecer. Além disso, o projeto

permitiu enxergar a importância das análises

estatísticas referente às amostras durante

calibração de componentes. A participação no trabalho, nos permitiu

identificar possíveis aplicações do projeto em

trabalhos como sensoriamento de posição de um

robô através destes sensores conectados à

diversas partes da sua estrutura, permitindo até

um estudo da presença do robô no espaço

inserido, informado a sua localização ou mesmo

onde existem obstáculos e como ele deverá agir

diante dessas barreiras físicas. São sugestões para o melhoramento do projeto,

estudar como tornar o sistema de medição de

distância imune a variação de cores, ou até

mesmo permitir que através dos dados enviados

pelos sensores o programa possa identificar e

informar as cores captadas pelos sensores,

ajudando a reconstruir a imagem do ambiente.

5 Agradecimentos

Os autores deste artigo agradecem ao professor

Jés Cerqueira pela colaboração e orientação ao

longo do desenvolvimento do projeto.

6 Referências Bibliográficas

Taylor, C. W. (1994). Power System Voltage

Stability. Ed McGraw-Hill , Inc..

OGATA, Katsuhiko, 2003, Engenharia de

controle moderno. 4. ed. São Paulo: Prentice-

Hall do Brasil

Zuben , Fernando J. V., 2013, Notas de aula do

curso EA616 , DCA/FEEC/UNICAMP

Ibrahim, Dogan, 2006, Microcontroller Based

Applied

DigitalControl John Wiley & Sons, Ltd.

Seguine, Dennis, July 15, 2011, Associated

Application Notes: AN2095, AN2219,Cypress

MCU Application Design Team, Choi, June,

1D/A Converter by Using PWM, 8-bit

Microcontroller Application Note

http://www.mantech.co.za/datasheets/products/

A000047.pdf

http://www.cefetsp.br/edu/sertaozinho/professor

es/Fernando_Fortuna/material_341_3ano.pdf

http://www.acroname.com/robotics/info/articles

/sharp/sharp.html

http://arduino.cc/en/Reference/HomePage

http://www.arduino.cc/