Você está na página 1de 87

FACULDADE GOVERNADOR OZANAM COELHO CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO

CADEIRA DE RODAS INTELIGENTE:

O uso de técnicas de programação, automação e eletrônica para maior autonomia e qualidade de vida dos cidadãos de mobilidade reduzida

ALDEIR DE SOUZA MOREIRA

UBÁ MINAS GERAIS

2012

ALDEIR DE SOUZA MOREIRA

CADEIRA DE RODAS INTELIGENTE:

O uso de técnicas de programação, automação e eletrônica para maior autonomia e qualidade de vida aos cidadãos de mobilidade reduzida

Monografia apresentado como parte das exigências para a obtenção do título de Bacharel em Ciência da Computação da Faculdade Governador Ozanam Coelho, FAGOC.

Orientador:

Prof.

M.

Sc.

Waldir

Andrade

Trevizano.

UBÁ

MINAS GERAIS

2012

ALDEIR DE SOUZA MOREIRA

CADEIRA DE RODAS INTELIGENTE:

O uso de técnicas de programação, automação e eletrônica para maior autonomia e

qualidade de vida aos cidadãos de mobilidade reduzida

Monografia apresentada e aprovada em 17 de dezembro de 2012.

Prof. M. Sc. Joás Weslei Baia (Examinador)

Prof. M. Sc. Marcelo Santos Daibert (Examinador)

Prof. M. Sc. Waldir Andrade Trevizano

(Orientador)

i

AGRADECIMENTOS

Gostaria de agradecer, em primeiro lugar a Deus, por ter me auxiliado com sabedoria, saúde e força ao decorrer de todo curso. A minha família que sempre me incentivou para que eu chegasse até esta etapa de minha vida. Ao professor e orientador Waldir Andrade Trevizano e a todos os professores do Curso de Ciência da Computação da Faculdade Governador Ozanam Coelho, foi o conhecimento transmitido por vocês que me levaram a execução e conclusão desta monografia. Aos amigos, colegas e todas as pessoas que estiveram comigo durante esta caminhada. Obrigado pelo constante apoio e incentivo de vocês.

ii

RESUMO

Existe uma crescente necessidade do desenvolvimento de produtos que atendam as pessoas portadoras de deficiências, melhorando assim sua qualidade de vida e integração na sociedade. Tendo isso em mente, nada mais justo que usar os conhecimentos científicos para colaborar na melhoria da qualidade de vida desta parcela da sociedade, que muitas vezes é deixada em segundo plano. Neste trabalho são apresentados elementos e técnicas de computação, automação e eletrônica para o desenvolvimento de mecanismo (software, hardware) que possibilite a detecção de objetos por uma cadeira de rodas motorizada evitando a colisão com os mesmos. Inicialmente é feita uma introdução sobre o desenvolvimento da automação, em seguida se fala sobre a cadeira de rodas e a importância de se desenvolver um dispositivo de controle como este. Por fim é especificado a montagem de um protótipo utilizando a plataforma Arduino assim com detalhes de implementação e funcionalidades do software e os resultados dos testes realizados com um protótipo que simula uma cadeira de rodas motorizada.

Palavras-chave: software embarcado, Cadeira de rodas, automação, Arduino.

iii

SUMÁRIO

RESUMO

 

ii

LISTA

DE ABREVIATURAS E SIGLAS

v

LISTA

DE FIGURAS

vi

LISTA DE TABELAS

 

viii

LISTA

DE CÓDIGOS

FONTES

ix

1.

INTRODUÇÃO

1

1.1.

PROBLEMA E SUA IMPORTÂNCIA

2

1.2.

OBJETIVOS

4

1.2.1.

Objetivo Geral

4

1.2.2.

Objetivos Específicos

4

1.3.

MÉTODO DE DESENVOLVIMENTO

5

1.4.

ORGANIZAÇÃO DO TRABALHO

6

2.

AUTOMAÇÃO

8

2.1.

COMPONENTES DA AUTOMAÇÃO

8

2.2.

SENSORES

10

2.2.1.

Sensor de distância Ultrassônico

12

2.2.2.

Sensor de distância

14

2.3.

ATUADORES

16

2.3.1.

MOTORES ELETRICOS

16

2.3.1.1

Motores de Corrente Alternada

16

2.3.1.2

Motores de Corrente Continua

17

2.3.2.

LED

18

2.3.3.

BUZZER

19

2.4.

PONTE H

20

3.

O ARDUINO

23

3.1.

CARACTERISTICAS

24

3.2.

IDE DO ARDUINO

28

3.3.

LINGUAGEM DE PROGRAMAÇÃO DO ARDUINO

30

4.

TRABALHOS RELACIONADOS

34

5.

DESENVOLVIMENTO DO HARDWARE

36

5.1.

Arduino

37

iv

5.3.

Ponte H

42

5.4.

Motores

45

5.5.

Buzzer piezoelétrico

47

5.6.

LEDs

48

5.7.

Baterias

48

5.8.

Montagem da estrutura do protótipo

49

6.

DESENVOLVIMENTO DO SOFTWARE

51

7.

TESTES COM O PROTÓTIPO

63

8.

CONSIDERAÇÕES FINAIS

67

8.1.

TRABALHOS FUTUROS

68

REFERÊNCIAS BIBLIOGRÁFICAS

69

v

LISTA DE ABREVIATURAS E SIGLAS

AC/DC - Alternating Current/Direct Current AREF - Analog Reference

CA

- Corrente Alternada

CC

- Corrente Continua

CLP - Controlador Lógico Programável

E.V.A - Etil Vinil Acetato

E/S - Entrada/Saida

EEPROM - Erasable Programmable Read-Only Memory GND - GrouND

IBGE - Instituto Brasileiro de Geografia e Estatística

IDE - Integrated Development Enviroment

IR - Infra Red kB - Kilobyte

Kg - Quilograma

Khz - Kilohertz

Km/h - Quilômetro por hora

LED - Light Emitting Diode

m/s

- Metro por segundo

mA

- Miliampère

MHz - Megahertz

mm - Milímetro

PSD - Position Sensing Device

PWM - Pulse Width Modulation

RX

- Receiver Data

SPI

- Session Initiation Protocol

SRAM - Static Random Access Memory

TX - Transmit Data

USB - Universal Serial Bus

μF - Microfarad

vi

LISTA DE FIGURAS

Figura 1: CLP

1

Figura 2: Cadeira de rodas

3

Figura 3: Elementos da automação

9

Figura 4: Saída do tipo digital ou binária de um sensor

11

Figura 5: Saída do tipo analógica de um sensor

12

Figura 6: Funcionamento do sensor ultrassônico

13

Figura 7: Funcionamento sensor de distância infravermelho

14

Figura 8: Pinos do sensor de distância GP2Y0A21YK fabricado pele Sharp

15

Figura 9: Representação da estrutura de um motor de corrente continua

17

Figura10: LEDs de diferentes formatos

18

Figura 11: Buzzer

20

Figura 12: Esquema Ponte H

20

Figura 13: Fluxo da corrente elétrica na Ponte H

21

Figura 14: Ponte H constituída de componentes discretos

22

Figura 15: Circuito Integrado Ponte H

22

Figura 16: Diagrama de blocos

24

Figura 17: Arduino Uno componentes

26

Figura 18: Ambiente gráfico do Arduino

28

Figura 19: estrutura formada pelas funções setup() e loop()

30

Figura 20: Pinos e funções do Arduino

31

Figura 21: Editor de programação do Arduino com código exemplo

33

Figura 22: Protótipo finalizado

36

Figura 23: Diagrama de bloco

37

Figura 24: Arduino Uno usado no protótipo

38

Figura 25: Sensor ultrassônico HC-SR04 (vista frontal, traseira e lateral)

39

Figura 26: Ligação dos sensores ultrassônicos ao Arduino

39

Figura 27: sensor IR utilizado no protótipo

40

Figura 28: Controle Remoto

41

Figura 29: Ligação do sensor infravermelho ao Arduino

42

Figura 30: Diagrama elétrico Ponte H

43

vii

Figura 31: Ponte H utilizada no protótipo

44

Figura 32: Conexão da Ponte H com motores, Arduino e bateria

44

Figura 33: Adaptação de servo motor para giro contínuo

46

Figura 34: Adaptação motor na estrutura do protótipo

46

Figura 35: ligação elétrica do buzzer ao Arduino

47

Figura 36: ligação elétrica dos LEDs ao Arduino

48

Figura 37: ligação das baterias ao Arduino

49

Figura 38: Estrutura do protótipo

49

Figura 39: Disposição dos componentes eletrônicos no protótipo

50

Figura 40: Teste detecção de obstáculos na horizontal

63

Figura 41: Teste detecção de obstáculos na vertical

64

Figura 42: Teste para detecção de buracos

65

Figura 43: Teste com pequenos desníveis

65

viii

LISTA DE TABELAS

Tabela 1: Características técnicas Arduino UNO

25

Tabela 2: Comandos da Toolbar Arduino e suas funções

29

Tabela 3: Interação software usuário

51

ix

LISTA DE CÓDIGOS FONTES

Código 1: Bibliotecas

52

Código 2: Função Setup()

53

Código 3: Função Loop()

54

Código 4: Função Detecta()

56

Código 5: Função CalibraDistVer()

59

Código 6: Funções para movimentação e parada do protótipo

60

Código 7: Função Bip()

62

1

1.

INTRODUÇÃO

A automação teve início na indústria, particularmente na criação das linhas de montagens automobilísticas com Henry Ford, na década de 20. Desde então o crescimento tecnológico nas mais diversas áreas da automação tem sido cada vez maior. O avanço da automação está ligado, em grande parte, ao avanço da microeletrônica e da informática, mais diretamente ao surgimento dos CLPs (Controlador Lógico Programável) na década de 60 que veio substituir os reles, dispositivos mecânicos utilizados na época (SOUZA; OLIVEIRA, 2004). A Figura 1 mostra uma placa CLP (Controlador Lógico Programável) disponível no mercado.

(Controlador Lógico Programável) disponível no mercado. Figura 1: CLP Pic40. Fonte: VW SOLUÇÕES, 2012 Os CLPs

Figura 1: CLP Pic40. Fonte: VW SOLUÇÕES, 2012

Os CLPs são dispositivos digitais que permitem controlar equipamentos e maquinas através de comandos que são armazenados em sua memória programável. Desde que foi introduzindo na indústria o CLP vem evoluindo e

2

adquirindo novas funções, como execução, sequenciamento, temporização, contagem e manipulação de dados, e outras mais. Eles também possuem uma linguagem própria de programação, podendo ser programados através de computadores, característica que colaborou muito com sua popularização (GOEKING, 2010). O cenário atual da automação mostra que, em busca do aperfeiçoamento industrial, foram criadas novas técnicas de implementação de funcionalidades, dispositivos de processamento com maior capacidade computacional, desenvolvimento de sistemas embarcados e implementação de hardware, além da construção em larga escala de dispositivos simples e baratos, que proporcionaram o surgimento de uma grande variedade de alternativas para a implementação de soluções eficientes na resolução de problemas, criando assim um leque infinito de possibilidades de utilização desses circuitos nas mais diversas áreas (NEVES. et al,

2007).

1.1.

PROBLEMA E SUA IMPORTÂNCIA

Uma característica comum aos países em desenvolvimento, como o Brasil, é a precariedade na atenção dispensada as pessoas com deficiência física, seja esta deficiência por motivos traumatológicos, enfermidades ou vitimas de problemas congênitos (HAMANAKA, 2002). Segundo o último senso realizado pelo Instituto Brasileiro de Geografia e Estatística - IBGE (2010), o Brasil possui um contingente de aproximadamente 13 milhões de pessoas com deficiência motora, ou seja, as pessoas com dificuldade de se movimentar representavam cerca de 7% da população brasileira. A cadeira de rodas é um equipamento que foi desenvolvido com o intuito de auxiliar o deslocamento, e está entre as tecnologias utilizadas por pessoas que apresentam a impossibilidade, temporária ou definitiva, de deslocar-se utilizando os membros inferiores (MEDINA AG, COELHO DB; 2007). Segundo Albrey (2007 citado por Madeira, 2008) seu surgimento esta ligado a utilização da roda como forma de facilitar o transporte de objetos em (4000 A.C.) e em carruagens em (1300 A.C.). Já em 1595 um modelo sofisticado foi construído para o Rei Filipe II da Espanha. Tal cadeira possuía rodas e ajustes de altura, sendo carregada pelos seus servos, e era utilizada para realizar caminhos domésticos e percorrer os jardins do palácio.

3

Desde as primeiras décadas do século XX, devido ao progresso industrial com surgimento de matéria-prima mais leve e moldável, as cadeiras de rodas vêm evoluindo de maneira crescente. É possível se encontrar diversos modelos de cadeira de rodas, desde as manuais, passando pelas adaptadas à prática de esportes, circulação em terrenos diversos até as motorizadas (Figura 2) sendo que essas últimas aos poucos vão tomando conta do mercado(SILVA; DEL`ACQUA,

2012).

vão tomando conta do mercado(SILVA; DEL`ACQUA, 2012). Figura 2: Cadeira de rodas motorizada. Fonte: LOCMED, 2012

Figura 2: Cadeira de rodas motorizada. Fonte: LOCMED, 2012

Cadeiras de rodas motorizadas são geralmente prescritas a usuários que não possuem força ou coordenação motora suficiente para acionar manualmente uma cadeira de rodas convencional. A escolha desta modalidade de cadeira deve levar em conta tanto as habilidades motoras e sensoriais do usuário quanto o seu desejo de se locomover de forma independente. Desta forma, não basta apenas o usuário de uma cadeira de rodas manifestar a vontade de usar um modelo motorizado, antes deve ser avaliada suas condições motora e cognitiva para controlar este equipamento. Vale ressaltar que o peso de uma cadeira de rodas motorizada somado ao peso do usuário pode chegar a mais de 120 kg e atingir velocidades máximas de 10 a 15 Km/h. É notório que se uma cadeira de rodas nestas condições se desgovernar poderá causar danos tanto para seu usuário quanto para as pessoas ao seu redor (BECKER, 2000).

4

Ainda segundo Becker (2000) há uma crescente necessidade do desenvolvimento de produtos que atendam as pessoas portadoras de deficiências, melhorando assim sua qualidade de vida e integração na sociedade. E esta necessidade não se restringe apenas a países desenvolvidos, mas esta cada vez mais presente nos países em desenvolvimento como o Brasil. Dentre as causas de uma maior demanda desses produtos estão, o aumento na expectativa de vida da população e das exigências de qualidade de vida, até a conscientização de que uma pessoa com deficiência é um cidadão comum com direitos e deveres e deve ser tratado como tal. Tendo isso em mente nada mais justo que usar os conhecimentos científicos para colaborar na melhoria da qualidade de vida desta parcela da sociedade que muitas vezes é deixada em segundo plano.

1.2.

OBJETIVOS

1.2.1.

Objetivo Geral

Desenvolver um mecanismo (software, hardware) que detecte e alerte sobre a presença de obstáculos que impeçam ou comprometam a circulação de uma cadeira de rodas motorizada, evitando uma possível colisão.

1.2.2. Objetivos Específicos

Desenvolver um software que gerencie o controle de uma cadeira de rodas motorizada com base nos sinais de entrada enviados por sensores

Propor um hardware que seja compatível com os requisitos do projeto.

Propor

a

ambiente.

configuração

dos

sensores

para

uma

melhor

percepção

do

Montar um protótipo semelhante a uma cadeira de rodas motorizada para que se possa testar as funcionalidades do software.

5

1.3. MÉTODO DE DESENVOLVIMENTO

Para se chegar ao objetivo final deste trabalho, houve uma alternância constante entre montagem do hardware e desenvolvimento do software, uma vez que se trata de um software embarcado, comunicando-se diretamente com o hardware. O computador é apenas o ambiente para o desenvolvimento do software, não sendo possível através do mesmo verificar o correto funcionamento dos comandos programados, como nos softwares comuns desenvolvidos para computadores de um modo geral. Sendo assim, para se testar qualquer funcionalidade do software era necessário transferi-lo para o microcontrolador, via porta USB. Além disso, os diversos componentes que o software gerencia também deviam estar conectados ao micro controlador para que fosse possível a interação entre software e hardware. Por isso, a cada novo componente de hardware acrescentado no protótipo, como sensores, motores, LEDs, havia a necessidade do desenvolvimento de um módulo de software exclusivo para teste individual do componente. Todos os outros componentes eram removidos do microcontrolador e apenas o novo componente era conectado, sendo então, transferido o código produzido especificamente para o teste desse novo componente, evitando dessa forma qualquer dúvida causada por um possível mau funcionamento entre software e hardware. Após ter verificado o correto funcionamento tanto dos trechos de código fonte do software como dos componentes do hardware, foi feito um acoplamento entre eles ligando-se todos os componentes ao Arduino, e integrando os trechos de códigos a um programa principal.

O desenvolvimento do hardware fez-se necessário para o teste das

funcionalidades do software. Com este intuito, foi montado um protótipo que, por motivo de redução de custos, teve suas dimensões reduzidas, embora seus

componentes, resguardadas as devidas proporções, foram escolhidos para se assemelhar ao máximo com os componentes usados nas cadeiras de rodas

motorizadas convencionais. Desta forma, a interação software/hardware conseguida no protótipo foi praticamente a mesma que ocorreria em uma cadeira de rodas motorizada convencional.

Da mesma forma, o software foi desenvolvimento de acordo com o hardware,

baseado no seguinte propósito: funcionar embarcado em um microcontrolador para

6

gerenciar o funcionamento de uma cadeira de rodas motorizada de acordo com informações fornecidas por sensores nela instalados, de forma a monitorar o percurso feito pela cadeira, detectando a presença de obstáculos, alertando o usuário sobre a presença desses obstáculos através de sinais luminosos e sonoros, além de interferir no controle de deslocamento e velocidade da cadeira quando necessário, independente dos comandos exercidos pelo usuário. Dessa forma, pretende-se que mesmo pessoas de baixa capacidade cognitiva possam conduzir o veículo em segurança. Para um melhor entendimento dos detalhes do desenvolvimento, este foi dividido em duas partes distintas, desenvolvimento do hardware e desenvolvimento do software, tópicos estes a serem detalhados nos capítulos 5 e 6 deste trabalho.

1.4. ORGANIZAÇÃO DO TRABALHO

Para facilitar o entendimento, este trabalho foi dividido em oito capítulos que serão descritos a seguir:

Capítulo 1 - Introdução, neste capítulo é apresentada uma contextualização sobre o tema abordado, trazendo um breve histórico da automação. Também é relatada a importância de se desenvolver um dispositivo como o proposto neste trabalho, finalizando são apresentados o objetivo geral e os específicos. Capítulo 2 - Automação, é apresentada uma definição de automação e seu princípio de funcionamento. Também são apresentados alguns componentes utilizados em processos de automação como sensores e atuadores. Capítulo 3 - O Arduino, no capítulo 3 é feita a apresentação da plataforma Arduino utilizada no trabalho, sendo citadas as principais características técnicas do hardware e também as características de seu ambiente de desenvolvimento e sua linguagem de programação. Capítulo 4 - Trabalhos Relacionados, neste capítulo são apresentados trabalhos que tratam de assuntos que tem alguma relação e que tiveram alguma contribuição para o desenvolvimento deste trabalho. Capítulo 5 - Desenvolvimento do Hardware, neste capítulo foi feito uma especificação exclusiva da montagem do hardware. Cada componente utilizado no protótipo como o Arduino, motores, sensores, LEDs e outros foram especificados.

7

Capítulo 6 - Desenvolvimento do Software, neste capítulo é descrito como o software foi implementado, suas principais funções e os principais trechos de código fonte foram explicados. Capítulo 7 - Testes com o Protótipo. Foram realizados testes com o protótipo a fim de verificar na prática o funcionamento tanto do software como do hardware neste capítulo são vistos detalhes de como foram realizados estes testes bem como os seus resultados. Capítulo 8 - Considerações Finais. É feito uma abordagem sobre tudo o que foi abordado no trabalho, relacionando os resultados obtidos com as expectativas. Nele também se encontram as sugestões para trabalhos futuros.

8

2.

AUTOMAÇÃO

Segundo Aihara (2005) automação pode ser definida como um conjunto de tecnologias que constituem sistemas ativos, capazes de agir com eficiência no ambiente em que atuam, e com base em informações recebidas, na maioria das vezes de sensores, se autocorrigem sempre em busca de uma solução ótima. Ainda pode-se definir automação como sendo uma forma de aumentar a eficiência de processos em um determinado sistema. Usando como exemplo a automação industrial, tem-se que na maioria das vezes o processo ocorre desta forma: vários instrumentos de medida de uma fábrica enviam seus sinais coletados a um computador, que por sua vez compara estes sinais com valores ideais para o contexto em questão, e executa uma série de cálculos para gerar sinais de correção que são enviados aos dispositivos atuadores com o objetivo de se alcançar uma produção ótima.

2.1. COMPONENTES DA AUTOMAÇÃO

em

empresas como as indústrias automobilísticas, indústria petroquímica e nos supermercados, requerem muitos ciclos de realimentação e são complexos. Basicamente cada sistema de automação compõe-se de destes elementos:

Segundo

Abramam

(2012),

os

sistemas

de

automação

utilizados

Acionamento: provê o sistema de energia para atingir determinado objetivo. É o caso dos motores elétricos, pistões hidráulicos entre outros;

9

Sensoriamento: mede o desempenho do sistema de automação ou uma propriedade particular de algum de seus componentes. Exemplos: termopares para medição de temperatura e encoders para medição de velocidade;

Controle: baseado em informações dos sensores, regula o funcionamento dos atuadores. Como exemplo, pode ser citada uma sirene que é acionada quando um sensor detecta presença de um corpo estranho em um determinado ambiente;

Comparador ou elemento de decisão: compara os valores medidos com valores preestabelecidos e toma a decisão de quando atuar no sistema. Aqui se incluem os softwares de automação;

A Figura 3 mostra o fluxo dos componentes de um sistema de automação. O elemento comparador recebe um sinal proveniente de um elemento de sensoriamento e faz a comparação entre os valores do sinal recebido e os valores preestabelecidos em sua memória de acordo com a programação. Se for necessário acionar algum atuador o elemento comparador envia um sinal com instruções ao elemento de controle que por sua vez regula o funcionamento dos atuadores através do elemento de acionamento. O ciclo continua com o elemento de sensoriamento que faz a realimentação do circuito enviando novamente sinais com informações do ambiente monitorado para o elemento comparando.

informações do ambiente monitorado para o elemento comparando. Figura 3: Elementos da automação. Fonte ABRAMAM, 2012

Figura 3: Elementos da automação. Fonte ABRAMAM, 2012

10

Existem vários tipos de classificação para a automação, de acordo com suas áreas de aplicação. Por exemplo: automação bancária, comercial, industrial, agrícola, de comunicações, transportes. Cada tipo tem suas peculiaridades, mas todos estão relacionados ao mesmo conceito de fazer com que as aplicações funcionem com cada vez mais eficiência e sem a intervenção do homem.

2.2.

SENSORES

Segundo Wendling (2010) sensores são dispositivos sensíveis a algum tipo de energia do ambiente, podendo ser luminosa, térmica, cinética. Eles agem fazendo uma relação dessa sua sensibilidade com grandezas físicas que devem ser medidas como: posição, aceleração, corrente, temperatura, pressão, umidade, etc. Algumas vezes, é necessário um circuito de interface que faça a adaptação do sinal gerado pelo sensor, afim de que ele possa ser utilizado pelo controlador. Isso se dá por que nem sempre o sinal gerado pelos sensores tem as características elétricas adequadas à utilização em um sistema de controle. O sistema de interface faz a manipulação do sinal de saída dos sensores com o intuito de adequá-lo aos padrões de entrada do controlador. Por exemplo, quando um sensor é excitado por um fator externo qualquer e apresenta uma tensão muito baixa como sinal de saída, surge então a necessidade que o sistema de interface atue amplificando esta tensão para que a mesma possa ser interpretada pelo controlador. Quando o sensor faz parte de um dispositivo completo já com o sistema de interface ele será nomeado transdutor. Ainda segundo Wendling (2010) Os sensores são usados para obter valores das variáveis físicas do ambiente a ser monitorado, não importa o ramo da automação (industrial, comercial, automobilística, domestica, entre outras). É sempre necessário se fazer uso dos sensores para se determinar as condições ou variáveis do sistema. Basicamente, eles podem ser definidos como dispositivos que monitoram o ambiente e informam a um circuito eletrônico quando há alteração neste ambiente monitorado. A partir das informações obtidas pelos sensores, o dispositivo eletrônico executa ações predeterminadas para aquela situação. Há uma série de características fundamentais, que devem ser levadas em consideração na hora da escolha de um sensor para uma aplicação, e elas devem ser analisadas de

11

acordo com o foco do projeto. As principais características são: tipo de saída, linearidade, alcance e velocidade de resposta;

Tipo de saída:

Digital ou Binária: a saída do sensor assume apenas dois valores lógicos “1ou 0”, (ligado ou desligado). Desta forma este tipo de sensor apenas é capas de determinar se uma grandeza física atingiu ou não um valor determinado. A Figura 4 mostra a saída de um sensor digital conforme a variação na entrada ao longo do tempo.

digital conforme a variação na entrada ao longo do tempo. Figura 4: Saída do tipo digital

Figura 4: Saída do tipo digital ou binária de um sensor Fonte: WENDLING, 2010

Analógica: desde que esteja dentro de sua faixa de atuação este tipo de sensor pode assumir qualquer grandeza no seu sinal de saída ao longo do tempo. Essas grandezas são medidas por circuitos eletrônicos sensíveis não digitais. A Figura 5 mostra a tensão ou corrente de saída de um sensor analógico com relação a grandeza física em um determinado intervalo de tempo.

12

12 Figura 5: Saída do tipo analógica de um sensor Fonte: WENDLING, 2010  Linearidade O

Figura 5: Saída do tipo analógica de um sensor Fonte: WENDLING, 2010

Linearidade

O conceito de linearidade aplica-se apenas aos sensores analógicos. Está relacionado à curva de saída do sensor de acordo com a grandeza medida. Como alguns sensores não são lineares, nem sempre são conseguidas respostas proporcionais às entradas, que são desejáveis para facilitar os circuitos de interface;

Alcance

Esta característica representa toda a faixa de valores da entrada de um sensor quanto maior o alcance de um sensor mais precisa será sua saída;

Velocidade de Resposta

É o tempo que o sensor demora entre perceber uma variação no ambiente e sua

resposta de saída, o ideal e que um sensor tenha velocidade de resposta instantânea. Sensores com velocidade de resposta baixa podem prejudicar o sistema de controle;

2.2.1. Sensor de distância Ultrassônico Segundo Pinto (2006) e Wendling (2010) os sensores ultrassônicos são úteis para detecção de objetos a certa distância, desde que estes objetos tenham tamanho razoável e sejam capazes de refletir a radiação ultrassônica. Eles funcionam da seguinte maneira: um oscilador emite ondas ultrassônicas com uma

13

frequência em torno de 42 khz. Estas ondas se propagam pelo ambiente e quando se deparam com algum obstáculo são refletidas. As ondas refletidas são captadas pelo sensor, e com base no tempo de resposta desde o seu envio até o seu retorno, é possível se fazer um processamento e obter informações sobre a distância do objeto que refletiu o sinal. A figura 6 mostra o comportamento das ondas ultrassônicas ou se chocaram com um objeto em seu percurso.

ultrassônicas ou se chocaram com um objeto em seu percurso. Figura 6: Funcionamento do sensor ultrassônico

Figura 6: Funcionamento do sensor ultrassônico Fonte: SLAK NEWS CENTER, 2012

Em geral estes sensores são constituídos por duas partes: um gatilho (emissor) e o eco (receptor), funcionando basicamente como um sonar, um pulso ultrassônico é emitido e então se espera pelo retorno de um eco, quanto mais tempo demorar o eco, maior a distância, e quanto menor for o tempo que demorar o eco também menor será a distância. A partir deste princípio conseguimos medir a distância entre um objeto qualquer e o sensor. A velocidade do sinal ultrassônico é de aproximadamente 340 m/s, assim, se o sensor estiver a uma distância d do objeto, o sinal percorrerá uma distância equivalente a 2d para sair e retornar ao sensor. Dessa forma, o tempo que o sinal leva para sair e retornar ao sensor permite calcular a distância d pela equação:

velocidade = distância/tempo

=>

v = 2d/t

=>

d = v*t/2

=>

d = 120*t

14

Os sensores ultrassônicos podem ser usados em diversas áreas da automação, como ferramentas de detecção sem contato, pois possibilitam que objetos de várias formas, cores e texturas diferentes sejam percebidos em seu campo de atuação. As possibilidades de aplicação deste tipo de sensor são diversas como:

• Detecção de nível e altura.

• Medida de separação.

Medida de diâmetro em bobinas.

Detecção de objetos transparentes, sujos, em ambientes com vapor e ate

mesmo em estado liquido, sendo utilizados para medir nível em reservatórios (AUTOMATIZE, 2012).

2.2.2. Sensor de distância Infravermelho.

Este tipo de sensor baseasse no princípio da triangulação de raios infravermelhos para medir distancias. Um LED emite um feixe de luz infravermelha que quando refletido em um objeto esse feixe é capitado por um PSD (Position Sensing Device Dispositivo de Monitoramento de Posição). A incidência do feixe de luz refletido no PSD varia de acordo com a distância do objeto, permitindo assim que meça a distância do mesmo.

do objeto, permitindo assim que meça a distância do mesmo. Figura 7: Funcionamento sensor de distância

Figura 7: Funcionamento sensor de distância infravermelho Fonte: PATSKO, 2006

A Figura 7 mostra funcionamento do sensor de distância infravermelho baseado no princípio da triangulação, dependendo da distância que está o objeto do

15

sensor ele reflete o os raios infravermelhos emitidos pelo LED em uma posição diferente no PSD. O PSD é um elemento constituído de diversos componentes sensíveis a luz e é monitorado por um modulo de processamento que identifica com precisão o exato local em que a luz incidir sobre o PSD. Como essa posição em que o feixe de luz incidiu no PSD está relacionada à distância do objeto refletor, o módulo processa essa informação de forma a produzir em sua saída um sinal equivalente a essa distância. Quanto mais perto estiver o objeto maior será a intensidade do sinal na saída do sensor bem como quanto maior for a distância do objeto menor será a intensidade do sinal. Na Figura 8 é mostrado um sensor GP2Y0A21YK, fabricado pela Sharp, que utiliza a tecnologia infravermelha para medir distância. O pino V+ é utilizado para alimentação do sensor, que funciona com 5 volts; o pino 0 V (GND) deve ser ligado ao terra (negativo da fonte de energia); e o pino V0 é a saída do sensor, devendo ser conectado a uma porta adequada de um microprocessador para que as informação gerada, em forma de corrente elétrica, seja interpretadas pelo micro controlador, a fim de se conseguir a distância entre o sensor e o objeto refletor.

conseguir a distância entre o sensor e o objeto refletor. Figura 8: Pinos do sensor de

Figura 8: Pinos do sensor de distância GP2Y0A21YK fabricado pele Sharp Fonte: PATSKO, 2006

O sensor infravermelho tem como característica positiva seu tamanho compacto, além de uma fácil instalação e configuração, e como característica negativa o fato da luz do sol e lâmpadas incandescentes interferirem em seu funcionamento, assim como objetos transparentes ao infravermelho como vidros e superfícies lustrosas não serem corretamente identificado pelo sensor.

16

2.3.

ATUADORES

Segundo Wendling (2010), atuadores são dispositivos que interferem em um

ambiente,

recebem um sinal proveniente do controlador, geralmente depois que o controlador fez algum processamento de um sinal de entrada qualquer. A seguir alguns exemplos de atuadores:

ação acontece quando

modificando

uma

variável

controlada.

Sua

Motores

LEDs

Buzzers

2.3.1. MOTORES ELETRICOS

Segundo Gioppo, (2009) motores elétricos convertem energia elétrica em energia mecânica e podem utilizar corrente continua (CC) ou alternada (CA), mas a escolha do tipo de motor para uma determinada aplicação deve estar relacionada a suas características.

2.3.1.1 Motores de Corrente Alternada

Segundo Spamer (2009) motores de corrente alternada geralmente são utilizados por maquinas de grande porte e são alimentados diretamente da rede de distribuição de energia. Os principais tipos de motores de corrente alternada são:

Motores síncronos: possuem esse nome porque seu eixo gira com a mesma frequência da rede de energia elétrica, ou seja, com velocidade fixa. Sua utilização é mais viável em potencias acima de 15 CV devido ao alto custo em potencia mais baixar.

Motores assíncronos ou de indução: São os mais utilizados na indústria, cerca de 90% dos motores são de indução. Suas principais vantagens são baixo custo, elevada confiabilidade, baixa manutenção e como desvantagem possui baixo rendimentos fora de sua condição plena de carga e uma elevada corrente de partida.

17

2.3.1.2 Motores de Corrente Continua

Motores de corrente continua tem seu uso voltado a aplicações moveis ou de menor porte, pelo fato de sua alimentação ser proveniente de pilhas, baterias ou uma fonte de alimentação que converte a corrente alternada da rede elétrica para corrente continua. Os motores de corrente continua comuns possuem dois terminais que quando energizados fazem o motor girar em um determinado sentido, sendo que quando se inverte a polaridade da fonte elétrica nestes terminais o motor gira em sentido contrário (GIOPPO, 2009).

terminais o motor gira em sentido contrário (GIOPPO, 2009). Figura 9: Representação da estrutura de um

Figura 9: Representação da estrutura de um motor de corrente continua Fonte: GIOPPO, 2009

Na Figura 9 vemos a representação da estrutura interna simplificada de um motor de corrente contínua com imãs fixos. Ao se aplicar uma corrente (i) sobre um condutor (Armadura) é gerado um campo magnético que pode ser repelido ou atraído pelos imãs permanentes (N e S) dependendo do sentido da corrente que chega ao comutador através da escova. Duas vezes por ciclo o os comutadores mudam de contato invertendo o sentido da corrente na armadura esta mudança faz com que a armadura gire sempre no mesmo sentido produzindo uma rotação continua enquanto se tem uma carga aplicada as escovas. Estes motores têm como característica uma alta velocidade de giro e um pequeno torque.

18

Existem alguns tipos de motores CC que possuem mais de dois terminais, como é o caso dos motores de passo. Nestes dispositivos, a energia é distribuída de forma organizada em suas bobinas internas, proporcionando um controle do ciclo interno do motor. Isso trás como vantagem um controle preciso da posição do motor a cada instante, e um maior controle da velocidade de rotação. Estes motores são usados em aplicações que exigem maior precisão (GIOPPO, 2009).

2.3.2. LED

Segundo Utiluz (2012), o LED (Light emitter diode) ou diodo emissor de luz é um dispositivo eletrônico semicondutor que tem a capacidade de transformar energia elétrica em luz. A Figura 10 mostra alguns LEDS de diferentes formatos.

luz. A Figura 10 mostra alguns LEDS de diferentes formatos. Figura10: LEDs de diferentes formatos É

Figura10: LEDs de diferentes formatos

É um componente bipolar, ou seja, possui dois polos um chamado anodo e o outro catodo. De acordo com a polarização de seus terminais ele permite ou não a passagem de corrente elétrica gerando ou não luminosidade. Diferentemente das lâmpadas convencionais, o LED não utiliza filamentos metálicos ou descarga de gases para geração de luz, sendo, portanto mais eficiente em determinadas aplicações. Alguns dos principais benefícios do uso do LED são:

Menor custo de manutenção: apresentam uma longa vida útil (por volta de 50,000 horas) não sendo necessárias manutenções periódicas.

19

Maior resistência a impactos e vibrações: utiliza uma tecnologia de estado solido, ou seja, não utiliza filamentos vidros ou similares, possui uma maior robustez.

Ecologicamente correto: não utiliza metais pesados como o mercúrio ou outros elementos que agridam a natureza.

Baixa voltagem de operação: funcionam com voltagens que não apresentam risco ao usuário. De acordo com Morais (2005) existem outros tipos de LEDs específicos para determinadas aplicações como o LED emissor infravermelho, que ao invés de luz visível, emite raios infravermelhos quando aplicada uma tensão em seus terminais. Esses raios podem ser captados por sensores nessa faixa de frequência, lembrando que a luz infravermelha esta em um espectro de frequência que não pode ser percebida pelo olho humano. O uso mais comum desses dispositivos é em controles remotos de aparelhos eletrônicos domésticos, como TVs, DVDs e aparelhos de som.

2.3.3. BUZZER

O Buzzer visto na Figura 11 é um pequeno dispositivo eletrônico que tem a finalidade única de emitir sinais sonoros de alerta (bips). É diferente de um autofalante comum, pois se baseia no efeito piezoelétrico de alguns cristais, ou seja, quando recebe um sinal elétrico em sua entrada produz uma expansão ou compressão, sendo assim se este sinal for variante de tempo ele é capaz de vibrar de acordo com a frequência do sinal, produzindo um som. Sua vantagem em relação ao altofalante é o seu tamanho reduzido e a capacidade de produzir um maior volume sonoro a partir de um sinal de mesma intensidade. Os buzzers são muito utilizados na placa mãe de computadores, produzindo sinais sonoros de indicação do funcionamento correto ou adverso da mesma (ANDRADE, 2010).

20

20 Figura 11: Buzzer 2.4. PONTE H A Ponte H é um circuito importante na elaboração

Figura 11: Buzzer

2.4. PONTE H

A Ponte H é um circuito importante na elaboração de sistemas automatizados. Tem a característica de controlar um motor de corrente continua utilizando sinais gerados por um micro controlador. Esse controle se dá pela disposição de seus componentes tornando extremamente fácil controlar a polaridade da tensão nos terminais de entrada do motor alternando assim o sentido de rotação e também a velocidade que o mesmo gira com o uso de modulação PWM. Uma Ponte H básica e composta por 4 chaves mecânicas ou eletrônicas posicionadas formando a letra H, sendo que cada uma localiza-se num extremo e o motor é posicionado no meio como pode ser visto na Figura 12 (PATSKO, 2012).

posicionado no meio como pode ser visto na Figura 12 (PATSKO, 2012). Figura 12: Esquema Ponte

Figura 12: Esquema Ponte H Adaptado de: PATSKO, 2012

21

Para que o motor funcione devem ser acionadas duas chaves em diagonal fazendo com que a corrente flua pelo motor fazendo o girar em um determinado sentido. Para que o motor gire no sentido contrário basta desligar as chaves que estão ligadas e ligar as outras duas. Esse funcionamento pode ser mais bem entendido observando a Figura 12 (PATSKO, 2012)

ser mais bem entendido observando a Figura 12 (PATSKO, 2012) Figura 13: Fluxo da corrente elétrica

Figura 13: Fluxo da corrente elétrica na Ponte H Adaptado de: PATSKO, 2012

Caso se queira parar o motor, existem duas maneiras de se fazer isso usando a Ponte H. A primeira seria desligando todas as chaves, o motor para suavemente, devido à força do atrito, uma vez que não se tem nenhuma corrente aplicada no dispositivo. A outra forma é se acionar as duas chaves superiores ligadas ao positivo da fonte de energia ou as duas chaves inferiores ligadas ao negativo da fonte de energia. Dessa forma se tem uma parada instantânea (freio eletrônico), porque o acionamento destas chaves faz com que a corrente elétrica flua de tal maneira nas bobinas que promova a parada do motor e não o seu giro. Entretanto, deve-se tomar cuidado para não fechar as quatro chaves, ou duas de um mesmo lado, ao mesmo tempo, pois isso gerar um curto-circuito na fonte de energia provocando danos na mesma e nas chaves da Ponte H. Podemos encontrar Pontes H de duas formas diferentes, mas que tem o mesmo princípio de funcionamento, construídas a partir de componentes discretos, transistores, diodos, resistores entre outros como visto na Figura 14.

22

22 Figura 14: Ponte H constituída de componentes discretos Existe ainda um circuito integrado que tem

Figura 14: Ponte H constituída de componentes discretos

Existe ainda um circuito integrado que tem todos estes componentes alocados no interior de um chip como o CI L298N visto na Figura 15 .O uso de um modelo ou de outro vai depender da aplicação em que os mesmos serão usadas. Normalmente o Circuito integrado é usado em aplicações onde não se trabalha com correntes elevadas e se tem um espaço reduzido para adaptar o componente (PATSKO, 2012).

espaço reduzido para adaptar o componente (PATSKO, 2012). Figura 15: Circuito Integrado Ponte H Fonte: Mercado

Figura 15: Circuito Integrado Ponte H Fonte: Mercado Livre 2012

23

3.

O ARDUINO

Segundo Fonseca, Beppu (2010) a plataforma Arduino surgiu na Itália em

2005.

Seu objetivo era criar um dispositivo para controlar projetos de uma forma

menos custosa e mais eficiente do que os outros dispositivos existentes no mercado

até então. Este projeto é livre para o uso de todos gratuitamente, pois faz parte do conceito de hardware e software livres, ou seja, os usuários de todo mundo podem ter acesso a todas as suas especificações e colaborar para o seu aperfeiçoamento.

O Arduino basicamente é uma placa de entra e saída que foi desenvolvida

sobre uma biblioteca que simplifica a linguagem de programação C/C++. É uma plataforma de computação física, ou seja, o software interage diretamente com o

hardware, possibilitando assim uma fácil integração com uma grande gama de dispositivos eletrônicos como sensores e atuadores. Ele também permite que os projetos desenvolvidos possam tanto funcionar de forma livre, ou seja, independendo de um computador, ou conectados ao PC através de diversas estratégias de comunicação.

O Arduino usa um microprocessador embarcado (com processador, memória

e controladores de entrada e saída no mesmo chip), que pode controlar suas ações ou funções. Ele pode ser programado para funções especificas, diferentemente dos microprocessadores utilizados nos PCs que englobam um propósito Ele também pode ser visto como um conjunto de desenvolvimento capaz de interpretar variações no ambiente, transformadas em sinais elétricos por sensores conectados em suas entradas, e acionar dispositivos atuadores em suas saídas como lâmpadas ou motores. Ou seja, pode ser visto como um dispositivo de controle de entrada e saída de dados, com um tratamento desses dados entre a entrada e a saída. Por exemplo, um sensor de temperatura pode ser conectado em um de seus terminais de entrada, e os dados coletados por este sensor serão transformados em

24

sinais elétricos e processados pelo micro controlador e em seguida, de acordo com os valores coletados e o tratamento feito no processamento, pode ser acionada uma sirene conectada um de seus terminais de saída, para alertar sobre possíveis excessos de temperatura (FONSECA; BEPPU, 2010). A Figura 16 mostra o diagrama de bloco para que se possa identificar melhor os elementos principais do sistema.

possa identificar melhor os elementos principais do sistema. Figura 16: Diagrama de blocos Fonte: FONSECA, BEPPU,

Figura 16: Diagrama de blocos Fonte: FONSECA, BEPPU, 2010

O processamento do Arduino é realizado pelo micro controlador (Atmega) através da linguagem de programação C/C++.Desta forma, as ações do hardware são controladas de acordo com o software, tornando-o maleável para uma infinidade de projetos diferentes. ,Junta-se a isso com o fato do Arduino ser uma ferramenta open-source, ou seja, aberta para que todos com conhecimento em programação possam utilizá-la, modificá-la e ampliá-la de acordo com as necessidades, sempre com o intuito da melhoria de suas aplicações(FONSECA; BEPPU, 2010).

3.1. CARACTERISTICAS Desde que surgiu, em 2005, foram criadas varias versões do Arduino. Entre elas podem ser citadas o Arduino Nano, Arduino Diecimila, Arduino Duemilanove, Arduino Mega, Arduino UNO (versão atual) e diversas outras versões (ARDUINO, 2012). Na tabela 1 podem ser observadas as características técnicas de uma placa Arduino UNO.

25

25 Tabela 1: Características técnicas Arduino UNO Fonte: FONSECA, BEPPU, 2010 De acordo com Arduino (2012)

Tabela 1: Características técnicas Arduino UNO Fonte: FONSECA, BEPPU, 2010

De acordo com Arduino (2012) a placa Arduino UNO pode ser alimentada tanto de uma fonte externa quando da energia fornecida pela conexão USB, sendo a fonte de energia selecionada automaticamente. Caso seja usada uma fonte de alimentação externa, ela pode ser fornecida por um adaptador AC/DC ou de uma bateria. O adaptador pode ser conectado através de um plug de 2,1 milímetros de centro positivo, no conector de energia da placa. Já a alimentação por bateria pode ser feita conectando os pinos GND e V IN do conector de alimentação. Mesmo podendo ser alimentado dentro de uma faixa de tensão que vai de 6 a 20 volts, recomenda-se que a tensão de alimentação fique entre 7 a 12 volts, caso ela seja menor que 7 volts pode causar instabilidades na placa pois o pino que fornece 5 volts passa a fornecer um tensão menor, já se for usado mais do que 12 volts de tensão na entrada o regulador de tensão pode superaquecer e danificar a placa. O Arduino UNO possui 14 pinos digitais que operam com 5 volts e podem ser usados tanto como entrada ou como saída, de acordo com os comandos efetuados na programação do micro controlador. Cada pino pode fornecer ou receber um máximo de 40 mA. Além disso, alguns pinos têm funções específicas como receber e transmitir dados via

26

comunicação serial, comunicação SPI, proporcionar saída PWM e uma particularidade o pino 13 possui um LED conectado ao mesmo que é usado além de outras coisas para teste do funcionamento da placa (ARDUINO, 2012). Ainda de acordo com Arduino (2012) além dos 14 pinos digitais, a placa possui ainda 6 entradas analógicas, rotulados A0 a A5, cada qual com 10 bits de resolução e também os pinos AREF usado como entrada para a tensão de referência e o pino Reset para reiniciar o micro controlador. Na Figura 17 é detalha a posição dos componentes na placa.

Figura 17 é detalha a posição dos componentes na placa. Figura 17: Arduino Uno componentes Fonte:

Figura 17: Arduino Uno componentes Fonte: ADUINO, 2012

Os pinos de alimentação da placa Arduino são os seguintes:

VIN: A entrada de tensão da placa Arduino, quando ela está usando uma fonte externa de energia (ao contrário de 5 volts a partir da conexão USB ou fonte de alimentação regulada externa). Se o fornecimento de tensão for realizado através do conector de alimentação, é possível utilizar este pino para retirar energia para alimentar algum outro dispositivo;

27

5V: A fonte de alimentação regulada usada para alimentar o micro controlador e outros componentes na placa. Este pode vir do pino VIN através de um regulador na placa, ou ser fornecido pelo USB ou outra fonte de regulada de 5V;

3V3: Uma fonte de 3,3 volts gerado pelo regulador da placa. A corrente máxima é 50 mA;

GND: Pinos terra.

O

processador ATmega328 utilizado no Arduino possui 32 KB de memória

flash para armazenar código de programação dos quais 0,5 KB é utilizado para o gerenciador de boot. Além 2 KB de SRAM e 1 KB de EEPROM que podem ser usadas para leitura e escrita (ARDUINO, 2011). Em termos de comunicação, o Arduino pode se comunicar com um computador, com outros Arduinos e também com outros micro controladores. O chip ATmega328 possui uma interface de comunicação serial UART TTL (5V), a qual esta disponível nos pinos digitais, pino 0 (RX) e 1 (TX).O Arduino possui um chip exclusivo para converter os dados para o padrão USB, permitindo e facilitando sua comunicação com computadores, não sendo necessários drivers adicionais

O software Arduino acompanha um monitor da porta serial, que permite a

visualização dos dados recebidos pelo computador, bem como enviar dados para o

hardware Arduino com o intuito de facilitar sua utilização. Os LEDs RX e TX na placa piscam quando os dados trafegarem por suas linhas de dados USB-para-Serial e USB-Computador, mas isso não ocorrerá para comunicações seriais nos pinos 0 e 1 (ARDUINO, 2012).

A largura e o comprimento máximos da placa do Arduino Uno são 68,58 e

53,34mm respectivamente (2,7" x 2,1"), com os conectores USB e de alimentação estendendo-se além destas dimensões. Quatro furos para parafusos permitem que a placa seja fixada a uma superfície ou encapsulamento.

28

3.2. IDE DO ARDUINO

O Ambiente de Desenvolvimento Integrado ou IDE (Integrated Development Enviroment) do Arduino é muito semelhante ao do processing 1 e pode ser baixada gratuitamente da WEB. A Figura 12 mostra a aparência da interface gráfica, constituída pela Toolbar e os Menus File, Edit, Sketch, Tools e Help (IKWARE,

2012).

os Menus File, Edit, Sketch, Tools e Help (IKWARE, 2012 ) . Figura 18: Ambiente gráfico

Figura 18: Ambiente gráfico do Arduino

Na

Toolbar

estão

diversos

botões

com

funções

distintas.

A

Tabela

2

apresenta uma descrição básica da função dos principais botões.

1 http://processing.org

29

29 Tabela 2: Comandos da Toolbar Arduino e suas funções Adaptado de: IKWARE, 2012 Segundo IKWARE,

Tabela 2: Comandos da Toolbar Arduino e suas funções Adaptado de: IKWARE, 2012

Segundo IKWARE, 2012 os menus File, Edit e Help apresentam as mesmas características que outros programas já o menu Sketch possui os seguintes comandos:

Verify/Compile: Verifica se o código tem erros;

Import Library: Adiciona livrarias ao código, o que lhe confere novas

possibilidades;

Show Sketch Folder: Abre a pasta do arquivo no Ambiente de Trabalho;

Add File: Adiciona outro arquivo ao arquivo inicial. Esse arquivo aparece

numa nova tab.

O menu Tools é composto das seguintes funções:

Auto Format: Formata o código para uma melhor leitura, alinhando as

chaves eindentando o seu conteúdo;

Copy for Discourse: Copia o código para o clipboard, de forma que seja

possível colocá-lo num fórum e manter a distinção da sintaxe por cores;

Board: Seleciona a placa que estamos a usar, o que controla a forma

como o código é compilado e o modo como é feito o upload, assim como o

comportamento dos itens do menu Burn Bootloader;

Serial Port: Contém todas as portas série que o computador possui,

permitindo escolher a que está a ser usada. Para usar portas USB é

necessário instalar um driver específico.

30

Burn Bootloader: Os itens deste menu permitem gravar um bootloader na placa Arduino com variados programas, mas não é necessário para uso normal do Arduino.

3.3. LINGUAGEM DE PROGRAMAÇÃO DO ARDUINO

Os programas implementados para Arduino tem como base a linguagem de programação C++. Sua sintaxe clássica é mantida na declaração de variáveis, operadores, ponteiros, vetores (FONSECA, BEPPU, 2010). De uma forma geral, a estrutura básica da linguagem de programação do Arduino é simples, sendo dividida em dois blocos de funções que carregam outros blocos em seu interior. A função setup() é a primeira a ser chamada, e a função loop() a seguinte. Ambas podem conter internamente outras funções. Na Figura 19 pode se ver uma representação da estrutura formada pelas funções setup() e loop(), e um esclarecimento sobre a importância e o papel das mesmas no código, bem como uma definição de função e declaração de função em linguagens de programação (SILVEIRA, 2012).

de função em linguagens de programação (SILVEIRA, 2012). Figura 19: estrutura formada pelas funções setup() e

Figura 19: estrutura formada pelas funções setup() e loop() Fonte: SILVEIRA, 2012

31

Ainda segundo Silveira (2012), é possível encontrar na linguagem de programação do Arduino algumas funções especifica para cada tipo de pino da sua placa, assim como para porta USB. Na Figura 20 temos a indicação da posição dos pinos e as principais funções.

da posição dos pinos e as principais funções. Figura 20: Pinos e funções do Arduino Fonte:

Figura 20: Pinos e funções do Arduino Fonte: SILVEIRA, 2012

Principais funções dos pinos digitais:

pinMod():Tem a função de controlar o fluxo de informação nos pinos digitais do arduino. Dois parâmetros devem ser usados, pinMod(pino, modo), no primeiro deve-se indicar qual dos quatorze pinos digitais serão usados e o segundo se este pino vai ser de entrada ou de saída de dados. Esta função é sempre escrita dentro da função setup().

digitalRead():Tem a função de ler uma informação de um determinado pino que tenha sido configurado como entrada pela função pinMode(). Deve ser passado como parâmetro o pino em que se deseja ler a informação digitalRead(pino).

digitalWrite(): Tem a função de configurar determinado pino digital do Arduino com um valor lógico. Dois parâmetros são necessários

32

digitalWrite(pino, valor), o número do pino que se deseja configurar e o valor lógico que deve ser atribuído a ele (HIGH/LOW). analogWrite():Tem a função de gerar uma tensão analógica em um pino digital utilizando se do PWM (pulse width modulation). O Arduino possui 6 pinos que suportam essa função, que requer dois parâmetros analogWrite(pino, valor), o número do pino em que essa tensão deve ser gerado e no segundo parâmetro a amplitude desta tensão que pode variar de 0 que corresponde a 0 volts até 255 que corresponde a 5 volts no Arduino.

Principais funções dos pinos analógicos:

analogRead(): É utilizada para ler um nível análogo presente no pino que for indicado no parâmetro, analogRead(pino), e guardar esse valor em uma variável criada pelo programador.

Principais funções da porta USB:

begin(): Esta função é usada para habilitar a porta serial, deve ser passado com parâmetro a taxa de transmissão e recepção em bits por segundo emtre o computador e o Arduino, begin(taxa).

end(): Desabilita o uso da porta serial. Esta função deve ser escrita dentro da função setup().

available(): Com esta função é possível obter o número de bits disponível para leitura no buffer da porta serial

read(): Com esta função pode-se ler o primeiro byte que estaá no buffer da porta serial

print(): Com esta função é possível enviar para porta serial caracteres ASCII que podem ser capturadas por um terminal de comunicação. Podem ser usado dois parâmetros nesta função, print(valor, formato), o valor é o caractere a ser transmitido, já o formato é opcional e é usado quando se deseja especificar com quantas casas decimais ou em que base numérica um número deve ser transmitido.

33

println(): Tem a mesma funcionalidade da função print() e como diferencial acrescenta ao final da transmissão um caractere que indica o retorno para o inicio da linha e um outro que indica mudança para próxima linha.

A figura 21 mostra o editor de programação do Arduino. Destaque para as funções setup e loop. Este código faz com que um LED ligado a porta 13 do Arduino fique piscando repetidamente em intervalos de um segundo. As barras seguidas (//) são usadas para inserir um comentário dentro do código fonte.

usadas para inserir um comentário dentro do código fonte. Figura 21: Editor de programação do Arduino

Figura 21: Editor de programação do Arduino com código exemplo

34

4. TRABALHOS RELACIONADOS

Aplicação de tecnologias assistivas e técnicas de Controle em Cadeiras de Rodas Inteligentes Becker (2000). Esta é uma tese de doutorado em que são propostas técnicas assistivas para cadeira de rodas inteligentes. O autor faz no início um balanço da situação dos usuários de cadeira de rodas no Brasil mostrando o tipo de deficiência apresentado, quem são e onde vivem, após essa abordagem são mostrado fatores ergonômicos desejáveis em um cadeira de rodas como tipo de estofado, tamanhos mais adequados e dimensões mas apropriadas ao perfil do usuário, mas adiante Becker (2000) fala de interfaces de controle de cadeiras de rodas motorizadas com joystick e apresenta técnicas de navegação e sensoriamento por lógica fuzzy para cadeiras de rodas. Estas técnicas permitem fazer um mapeamento de paredes e objetos gerando mapas para o reconhecimento de ambientes permitindo assim, desviar de obstáculos evitando colisões. Além disso, ele sugere também implementações que tratem dinamicamente obstáculos que surjam repentinamente em sua rota como pessoas. Aplicação do Estudo da Interface Homem Máquina em Cadeiras de Rodas Motorizadas (MADEIRA, 2008). Esta é uma dissertação de mestrado com foco no desenvolvimento de interface e sistema de navegação para cadeira de rodas. Alguns usuários possuem necessidades especiais que os impossibilitam de usar cadeira de rodas convencionais, este trabalho teve por finalidade prover soluções para inclusão desses grupos através do uso das mais diversas interfaces de comunicação homem maquina. Mas a diante Madeira (2008) detalho o uso de dispositivos de entrada e saída, dispositivos de saída de dados, utilização de sensores de movimento e piezoeléctrico, interface remota com computador embarcado além de sistemas de navegação e sensoriamento abordando roteamento do caminho, sensoriamento, controle de movimento e orientação. A dissertação também aborda algoritmos de assistência à navegação e navegação em locais muito populosos, detecção de objetos e planejamento de rotas de desvio.

35

Projeto e desenvolvimento de circuito de controle para cadeira de rodas(HAMANAKA, 2002). Esta dissertação de mestrado aborda técnicas para construção de um circuito que controle os motores de uma cadeira de rodas, o objetivo de Hamanaka (2002) era produzir um circuito simples de baixo custo e reprodutível, o autor começa esclarecendo os princípios de funcionamento da cadeira de rodas elétrica, logo em seguida faz um detalhamento sobre o controle do motor, circuito de geração do sinal PWM, modulador, joystick, dispositivo de comutação, comparador e por fim apresenta o esquema elétrico do controle da cadeira de rodas e os resultados dos experimentos. Desktop Inteligente (MARIN, WERGRZN, 2012). Esta monografia tem como objetivo a construção de um dispositivo que promova uma melhor interação entre o usuário e um computador desktop. O intuito é tentar corrigir os erros mais comuns que usuários de computador de desktop cometem e que resultam em possíveis danos ao próprio usuário como posições incômodas e danosas à coluna vertebral e utilização do computador em condições adversas de iluminação. Para isso foram utilizados sensores de presença, distância e luminosidade além do dispositivo Arduino. O autor detalha o hardware e o software utilizado e conclui falando dos resultados positivos obtidos com o protótipo construído.

36

5. DESENVOLVIMENTO DO HARDWARE

O termo hardware aqui mencionado diz respeito a todo componente físico utilizado no desenvolvimento do protótipo da cadeira de rodas motorizada, os principais são os componentes eletrônicos como o Arduino, sensores, Ponte H, motores, LEDs, buzzer e baterias que terão seu funcionamento diretamente influenciado pelo software. Também faz parte do hardware a estrutura em que estes componentes foram montados como o chassi e as rodas do protótipo. Na figura 22 é possível ver o protótipo pronto com todos os componentes conectados.

Na figura 22 é possível ver o protótipo pronto com todos os componentes conectados. Figura 22:

Figura 22: Protótipo finalizado

37

Para facilitar o entendimento de como os componentes eletrônicos estão conectados entre se, foi feito um diagrama que pode ser visto na Figura 23. Explicações sobre cada um dos itens presentes no diagrama, assim como a justificativa de sua escolha e sua importância dentro do trabalho podem ser vistas nos tópicos seguintes.

dentro do trabalho podem ser vistas nos tópicos seguintes. Figura 23: Diagrama de bloco 5.1. Arduino

Figura 23: Diagrama de bloco

5.1.

Arduino

O primeiro item a se definir para o início do trabalho foi o micro controlador, peça de primordial importância, pois é ele quem hospeda o software que foi implementado e é de acordo com suas características que os demais componentes de hardware foram escolhidos, assim como a linguagem de programação utilizada. Tendo isso em mente e depois de analisar algumas características dos micro controladores disponíveis no mercado conclui-se que o Arduino Uno (versão mais recente da plataforma Arduino) seria ideal para o projeto, pois seu hardware e software são abertos, ou seja, livre para que qualquer pessoa que tenha interesse, possa utilizar e modificar sua estrutura sem se preocupar com direitos ou patentes. Outros pontos que favoreceram a escolha do Arduino foi sua facilidade de uso,

38

preço baixo e por ser facilmente encontrado no mercado. Além disso, o Arduino, devido a sua grande popularidade, dispõe de uma imensa gama de dispositivos, sensores e atuadores, compatíveis com seus padrões que também são facilmente encontrados no mercado. A função do Arduino neste projeto é captar os sinais gerados pelos sensores, analisa-los e de acordo com o que foi programado em seu microprocessador, ativar, desativar ou regular o funcionamento dos atuadores nele conectados. Detalhes de como cada sensor e atuador é controlado pelo Arduino são especificados nos próximos tópicos, quando se discorrer especificamente sobre cada um deles. Na Figura 24 é possível observar a placa Arduino usada neste trabalho.

é possível observar a placa Arduino usada neste trabalho. Figura 24: Arduino Uno usado no protótipo

Figura 24: Arduino Uno usado no protótipo

5.2. Sensor Ultrassônico e Infravermelho.

Os sensores utilizados foram três, sendo dois deles ultrassônicos representados no diagrama de blocos da Figura 22 como Sensor Ultra1 e Sensor Ultra2, e o terceiro sendo um sensor infravermelho, representado como Sensor IR no mesmo diagrama. Os sensores ultrassônicos tem um papel de fundamental importância na percepção do ambiente, pois são eles que verificam a existência de algum obstáculo no percurso da cadeira. Existem outros tipos de sensores que poderiam desempenhar este papel, como o sensor de distância infravermelho, mas neste trabalho, em particular, foi mais apropriado o uso do sensor ultrassônico por sua maior abrangência em relação a objetos detectados. O sensor ultrassônico

39

consegue perceber objetos de várias formas, cores e texturas diferentes que estejam em seu campo de atuação, diferente do sensor infravermelho, que apresenta dificuldade de perceber objetos translúcidos ou em ambientes onde exista a incidência de luz solar. De uma forma geral todos os objetos que apresentarem as características que permitam refletir a radiação ultrassônica serão percebidos pelo sensor, englobando assim grande parte dos obstáculos que possam se interpor no caminho percorrido por uma cadeira de rodas. O modelo de sensor ultrassônico utilizado foi o HC-SR04 2 que pode ser visto na Figura 25.

foi o HC-SR04 2 que pode ser visto na Figura 25. Figura 25: Sensor ultrassônico HC-SR04

Figura 25: Sensor ultrassônico HC-SR04 (vista frontal, traseira e lateral)

Já na Figura 26 é possível observar como os sensores foram ligados ao Arduino para receber corrente elétrica e transmitir informações. Nesta mesma Figura também é possível observar quais portas digitais foram utilizadas para comunicação entre Arduino e sensores.

utilizadas para comunicação entre Arduino e sensores. Figura 26: Ligação dos sensores ultrassônicos ao Arduino

Figura 26: Ligação dos sensores ultrassônicos ao Arduino

2 http://jaktek.com/wp-content/uploads/2011/12/HC-SR04.pdf

40

O pino VCC do sensor foi ligado ao pino 5 volt do Arduino e o pino GND do

sensor foi ligado ao pino terra do Arduino, ligações estas que permitem a

alimentação do sensor pelo próprio Arduino. Para transferência de informações, o pino Trig dos sensores foram ligados as portas 4 e 8 do Arduino e o pino Echo às portas 2 e 7.

O uso dos dois sensores ultrassônicos tem a finalidade de se monitorar o que

estiver a frente e abaixo do protótipo. O sensor1 foi fixado na horizontal de modo que monitora tudo que estiver a frente da cadeira e a uma distância de até sete

metros. O sensor2 foi fixado na posição vertical e a frente das rodas dianteiras do protótipo ficando a 10 centímetros do solo e tem a função de detectar buracos ou protuberâncias no piso.

O sensor infravermelho, ou sensor IR (Infra Red) como está representado no

diagrama de blocos na Figura 23, foi utilizado para desempenhar função diferente dos sensores ultrassônicos, sendo usado para receber instruções que permitam controlar o protótipo a distância, através de um controle remoto convencional. Na Figura 27 é possível ver em diversos ângulos o sensor infravermelho utilizado para captar os sinais enviados pelo controle remoto.

para captar os sinais enviados pelo controle remoto. Figura 27: sensor IR utilizado no protótipo Nas

Figura 27: sensor IR utilizado no protótipo

Nas cadeiras de rodas motorizadas comuns estes comandos são realizados através de um Joystick fixado em um dos braços da cadeira e o usuário tem o controle da direção e velocidade do veículo através dele. Como o protótipo desenvolvido tem suas dimensões reduzidas, ele não tem capacidade para transportar o indivíduo que irá controla-lo, então, optou-se por utilizar um controle remoto para realizar tal tarefa.

41

Os controles remotos mais utilizados no dia a dia para controlar equipamentos eletrônicos como TVS, DVDs, aparelhos de som entre outros, são controles que usam a tecnologia Infravermelha para transmissão de dados e é justamente por este motivo, aliado ao baixo custo e relativa simplicidade de uso que esta tecnologia foi utilizada no protótipo. A Figura 28 mostra o Controle remoto modelo PCR-96 produzido pela Philco utilizado no trabalho.

modelo PCR-96 produzido pela Philco utilizado no trabalho. Figura 28: Controle Remoto Este controle remoto

Figura 28: Controle Remoto

Este controle remoto originalmente é utilizado em aparelhos de som da Philco sendo que neste trabalho apenas alguns botões serão utilizados, para determinadas tarefas, desta forma, os demais botões não possuem função no controle do protótipo. Os botões utilizados assim como a função que ele desempenha no controle do protótipo são:

Seta para cima: Protótipo movimenta se para frente.

Seta para baixo: Protótipo movimenta se para trás.

Seta para direita: Protótipo movimenta se para direita.

Seta para esquerda: Protótipo movimenta se para esquerda.

CD: Calibra o sensor vertical.

TAPE: Calibra o sensor horizontal.

POWER: Ativa/desativa os sensores.

MUTE: Controla a velocidade.

42

Neste controle remoto para cada botão existem dois códigos que são emitidos alternadamente quando se pressiona o botão. Desta forma ao se pressionar um

botão pela primeira vez o controle envia um código ao receptor ou se pressionar este mesmo botão uma segunda vez o controle envia um segundo código alternando entre estes dois códigos toda vez que botão for pressionado. Os códigos emitidos por cada botão pressionado no controle serão vistos quando se tratar do desenvolvimento do software no próximo capítulo.

A Figura 29 mostra como o sensor IR foi ligado à porta 13 do Arduino e

também ao pino GND e ao pino 5v, que fornecem alimentação ao sensor.

pino GND e ao pino 5v, que fornecem alimentação ao sensor. Figura 29: Ligação do sensor

Figura 29: Ligação do sensor infravermelho ao Arduino

Um resistor de 220 ohms foi ligado em série com a entrada positiva de energia do sensor, para restringir o fluxo de corrente, evitando sobrecargas. Já um capacitor de 0,1 μF foi ligado em paralelo à entrada de alimentação para filtrar possíveis interferências, que prejudicariam o correto funcionamento do sensor.

5.3. Ponte H

A Ponte H é o circuito eletrônico utilizado em automação para controlar o

sentido de rotação e/ou a velocidade de giro dos motores de corrente continua (mais

informações a respeito da Ponte H podem ser encontradas no capítulo 2). Como o

43

protótipo da cadeira de rodas deve conseguir se deslocar tanto para trás como para frente e ter sua velocidade de deslocamento controlada, o uso da Ponte H se fez necessário. Basicamente, a Ponte H controla o sentido e a quantidade de corrente elétrica da bateria a ser repassada aos motores do protótipo, de acordo com os sinais enviados pelo Arduino. Ou seja, a Ponte H é um item intermediário entre o Arduino e os motores, funcionando também como um circuito de proteção para o Arduino uma vez que os motores não podem ser ligados diretamente ao Micro controlador, sobre o risco de danificá-lo, pois os motores consomem uma correte elétrica muito acima daquela que as portas do Arduino podem oferecer. No protótipo foram utilizadas duas Pontes H, uma para cada motor e optou-se por montá-las a partir de componentes discretos: transistores, diodos e resistores já que estes componentes são facilmente encontrados em placas de equipamentos eletrônicos que estão em desuso, podendo assim ser reaproveitados para a montagem da mesma. Na Figura 30 é apresentado o diagrama do circuito elétrico usado na montagem da Ponte H.

diagrama do circuito elétrico usado na montagem da Ponte H. Figura 30: Diagrama elétrico Ponte H

Figura 30: Diagrama elétrico Ponte H Adaptado de: PATSKO, 2012

Os transistores Q1 e Q3, modelo BC558 e Q2 e Q4 modelo BC548 funcionam como chaves e são ativados ou desativados de acordo com os sinais enviados pelo Arduino, através de suas portas digitais, que chegam à Ponte H pelas entradas 1 e 2. Os diodos modelo IN4004 ligados em paralelo aos transistores, tem a função de

44

protegê-los de uma possível corrente reversa gerada pelas bobinas do motor. Já os quatro resistores de 220 ohms foram utilizados para se reduzir a corrente na base dos transistores, para limitar a quantidade de corrente demandada das portas digitais do Arduino, que só podem fornecer no máximo 40 miliamperes, sendo que valores acima deste, podem danificar o micro controlador. Na Figura 31 é possível ver a Ponte H em vários ângulos depois de pronta.

ver a Ponte H em vários ângulos depois de pronta. Figura 31: Ponte H utilizada no

Figura 31: Ponte H utilizada no protótipo

Já na Figura 32 é visto como os diversos componentes da ponte H foram interligados entre si e entre os demais componentes do hardware.

entre si e entre os demais componentes do hardware. Figura 32: Conexão da Ponte H com

Figura 32: Conexão da Ponte H com motores, Arduino e bateria

45

As portas utilizadas foram 5, 6, 9 e 10 do Arduino, escolhidas por forneceram sinal PWM, importante para o controle da velocidade do protótipo. É possível observar que existe uma fonte exclusiva de energia para ponte H e consequentemente para os motores, pois eles estão conectados a ponte H e consomem bem mais corrente do que o micro controlador, tornando inviável o fornecimento de corrente elétrica através do Arduino sobe o risco de danifica-lo. A ponte H que controla o motor direito teve suas conexão ligadas às portas 5

e 6 do Arduino, já A ponte H que controla o motor esquerdo teve suas conexões ligadas às portas 9 e 10.

5.4.

Motores

Para a locomoção do protótipo, a intenção inicial era utilizar dois motores de corrente contínua, um para cada roda traseira. Entretanto, como visto no capítulo 2, uma das características dos motores de corrente continua é apresentar uma alta velocidade de giro e um pequeno torque, o que o tornaria inviável para o uso no protótipo, que deve se deslocar em baixa velocidade, uma vez que simula o funcionamento de uma cadeira de rodas motorizada normal, que se desloca devagar

e possui um alto torque. Para resolver este problema nas diferenças de giro e torque, o motor deve estar acoplado a uma caixa de redução de giro, que faz a inversão destes valores, reduzindo a velocidade de giro e aumentando o seu torque através de engrenagens. No mercado podem ser encontrados alguns motores que já vem com esta caixa de redução acoplada, mas para se obter o efeito pretendido, neste trabalho foram usados dois servos motores utilizados em antenas receptoras de TV via satélite. Os servos motores possuem uma limitação de giro do seu eixo, sendo que na maioria das vezes só pode girar 180º. Para serem usados no protótipo, eles passaram por uma adaptação, onde foi retirada uma trava presente em uma das engrenagens de redução de giro (vista na Figura 33 A), o interior de um potenciômetro (visto na Figura 33 B), assim como sua placa de controle (visto na Figura33 C).

46

46 Figura 33: Adaptação de servo motor para giro contínuo Adaptado de: PATSKO, 2012 Após estas

Figura 33: Adaptação de servo motor para giro contínuo Adaptado de: PATSKO, 2012

Após estas adaptações, o servo motor se transformou em um motor de corrente contínua, com uma caixa de redução acoplada, exatamente o que era necessário para o protótipo. A Figura 34 mostra como os motores foram adaptados na estrutura do protótipo e como as rodas foram encaixadas diretamente no eixo de saída da caixa de redução do motor.

no eixo de saída da caixa de redução do motor. Figura 34: Adaptação motor na estrutura

Figura 34: Adaptação motor na estrutura do protótipo

Os motores foram ligados à ponte H e esta por sua vez, foi ligada ao Arduino e as baterias. O esquema desta ligação pode ser conferido na Figura 32 do tópico anterior.

47

5.5. Buzzer piezoelétrico

No protótipo, o buzzer foi usado com a finalidade de emitir sinais sonoros de alerta (bips). Detalhes sobre o buzzer piezoelétrico podem ser vistos no capítulo 2 deste trabalho. A opção de utilizar o buzzer piezoelétrico e não um alto-falante comum por exemplo, foi devido a seu tamanho mais compacto, maior robustez e uma maior eficiência na reprodução de sons na faixa de frequência que estão os sinais de alerta. Sendo que o buzzer em relação a um altofalante consegue produzir um efeito sonoro mais elevado desses sinais de alerta a partir de uma entrada de mesma intensidade. O sinal variante que fará o buzzer produzir som será gerado pelo Arduino, sendo que o tom e a duração destes sinais dependerá da programação feita no micro controlador. Na Figura 35 é visto a ligação do buzzer a porta 13 do Arduino, em série com uma junção de dois resistores de 100 ohms cada, ligados em paralelo, gerando assim uma resistência de 50 ohms. Esta junção dos resistores foi usada porque não foi encontrado um único resistor com resistência próxima a este valor. Esta resistência é importante para limitar a corrente consumida pelo buzzer e não danificar a porta do Arduino.

a corrente consumida pelo buzzer e não danificar a porta do Arduino. Figura 35: ligação elétrica

Figura 35: ligação elétrica do buzzer ao Arduino

48

5.6. LEDs

No protótipo, foram utilizados dois LEDs de cores diferentes, um que emite luz na cor vermelha e outro na cor verde. O vermelho é acionado como forma de alerta quando algum obstáculo é detectado pelos sensores do protótipo. Já o que emite luz na cor verde foi utilizado para sinalizar a recepção de sinal pelo sensor infravermelho, isto é importante para que se possa constatar o correto funcionamento do controle remoto. Os LEDs utilizados medem 5mm e tem formato cilíndrico, foram ligados ao Arduino em paralelo a um resistor de 330 ohms para limitar a corrente que circula entre seus polos evitando possíveis danos aos mesmos por sobrecarga. O LED de cor vermelha foi ligado a porta 2 do Arduino e o de cor verde a porta 11 conforme visto na Figura 36.

e o de cor verde a porta 11 conforme visto na Figura 36. Figura 36: ligação

Figura 36: ligação elétrica dos LEDs ao Arduino

5.7. Baterias

Para a alimentação do protótipo, optou-se pelo uso de baterias, uma vez que o mesmo deveria se movimentar livremente, e o uso de uma fonte de energia proveniente da rede elétrica o deixaria limitado a conexões com o cabo de energia. Para alimentar o Arduino foi utilizada uma bateria de 9 volts comum e para

49

alimentação da ponte H e motores foram utilizadas três pilhas pequenas em série totalizando 4,5 volts.

A Figura 37 mostra como as baterias foram adaptadas ao interior do protótipo

e ligadas a uma chave, que tem a função de ligar e desligar a alimentação do

protótipo.

função de ligar e desligar a alimentação do protótipo. Figura 37: ligação das baterias ao Arduino

Figura 37: ligação das baterias ao Arduino

5.8. Montagem da estrutura do protótipo

O chassi do protótipo foi feito a partir de uma estrutura plástica onde foram

adaptados os motores com as rodas traseiras, as rodas dianteiras e uma armação feita com fios de cobre de 6 mm, moldados e soldados em formato de uma cadeira, como pode ser visto na Figura 38.

em formato de uma cadeira, como pode ser visto na Figura 38. Figura 38: Estrutura do

Figura 38: Estrutura do protótipo

Em seguida, foi acoplada a esta estrutura uma haste para a sustentação dos sensores ultrassônicos. Nesta haste foram presos conectores, permitindo que os sensores possam ser facilmente encaixados e desencaixados.

50

A armação de fios de cobre em forma de cadeira e a estrutura plástica foram

revestidas com um material emborrachado (E.V.A), e o Arduino, ponte H, LEDs,

buzzer, sensor IR assim como os fios foram devidamente alocados e conectados como pode ser visto na Figura 39.

alocados e conectados como pode ser visto na Figura 39. Figura 39: Disposição dos componentes eletrônicos

Figura 39: Disposição dos componentes eletrônicos no protótipo

O Arduino foi adaptado na parte de trás do encosto da cadeira. Já as pontes

H, uma para cada motor, foram adaptadas na sobre os próprios motores. O LED vermelho que sinaliza a detecção de obstáculos pelos sensores foi adaptado no braço direito da cadeira, e o LED verde que sinaliza a recepção de dados pelo

sensor IR foi adaptado na parte superior esquerda da cadeira. O buzzer e o sensor IR ficaram juntos as portas 13 e 12 do Arduino onde foram conectados. Durante a montagem do hardware, algumas dificuldades foram encontradas como o superaquecimento nos transistores das pontes H, este problema foi resolvido com o uso de resistores que limitaram o fluxo de corrente nestes componentes reduzindo seu aquecimento. Outro problema encontrado foi a sobrecarga que o buzzer provocava na parta do Arduino em que se encontrava ligado e mais uma vez este problema foi resolvido com o uso de resistores para o controle da corrente.

O Sensor IR também apresentou problemas, pois captava muita interferência

junto ao sinal fornecido pelo controle remoto, a solução foi o uso de um capacitor cerâmico em paralelo com seus terminais de alimentação. Este capacitor ajudou a filtrar estas interferências, resolvendo o problema. De uma forma geral o processo de montagem do hardware foi tranquilo com todos os componentes funcionando dentro do esperando.

51

6. DESENVOLVIMENTO DO SOFTWARE

O software foi desenvolvido na IDE versão 1.0 do Arduino, utilizando a linguagem de programação C/C++. Trata-se de um software embarcado, ou seja, feito especificamente para funcionar em dispositivos com recursos de processamento e memória escassos, se comparados aos computadores convencionais. O uso do computador se fez necessário para o desenvolvimento e a compilação do código pois uma vez tendo sido gerado o executável binário proveniente da compilação, ele é transferido e instalado via conexão USB no Arduino, não sendo mais necessário o uso do computador. O objetivo básico e principal do software é controlar e integrar o funcionamento dos diversos componentes de hardware interferindo nos comandos do usuário a fim de alertar e proporcionar segurança no controle de uma cadeira de rodas motorizada. A interação do usuário com o software ocorre através do controle remoto. A Tabela 3 mostra as ações realizadas pelo software quando é pressionado cada botão no controle remoto e o código corresponde a este botão.

Botão Pressionado

Código do botão

 

Ação realizada pelo software no protótipo

Seta para cima

3344

ou 1296

O

protótipo se movimenta para frente

Seta para baixo

3345

ou 1297

O

protótipo se movimenta para trás

Seta para direita

1312

ou 3360

O

protótipo faz uma curva para direita

Seta para esquerda

3361

ou 1313

O

protótipo faz uma curva para esquerda

Power

1292

ou 3340

Ativa/desativa a detecção de objetos pelos sensores

Mute

3341

ou 1293

Aumenta/reduz a velocidade do protótipo

CD

1337

ou 3385

Ajusta a distância de detecção do sensor vertical

Tape

1335

ou 3383

Ajusta a distância de detecção do sensor horizontal

Tabela 3: Interação software usuário

52

Além das interações básicas de movimentação do protótipo, foi implementado no software outras quatro. Ao pressionar o botão Power o usuário pode habilitar ou desabilitar os sensores que detectam obstáculos. Esta função é importante se o usuário desejar utilizar apenas as funcionalidades de movimentação. Já ao pressionar o botão MUTE o software comanda um aumento ou redução da velocidade de deslocamento do protótipo. Existem duas velocidades pré- programadas o usuário pode apenas escolher qual ele quer usar. Os botões CD E TAPE tem funcionalidade parecida e importante. Ao ser pressionado o botão CD, o software captura a distância em que o sensor instalado na posição vertical está do solo naquele momento. Com referencia nesta distância o software calcula se existe algum buraco ou elevação no trajeto do protótipo. O botão TAPE ao ser pressionado faz com que o software capture a distância entre o sensor instalado na posição horizontal e o obstáculo mais próximo naquele momento. É exatamente a esta distância que o software irá parar o protótipo e ligar os sinais de alerta quando o sensor detectar algum obstáculo e ao dobro desta distância, o protótipo reduz sua velocidade e também emite sinais de alerta. Para controlar os dois sensores Ultrassónicos e o sensor IR foram utilizadas bibliotecas que simplificaram em muito a programação, no Código 1 a seguir, pode ser visto o uso das bibliotecas e a declaração de variáveis globais que tem papel fundamental no controle do protótipo.

Código 1: Bibliotecas

1

#include "Ultrasonic.h"

2

#include <IRremote.h>

3

4

Ultrasonic ultraHorizontal(4,2);

5

Ultrasonic ultraVertical(8,7);

6

IRrecv receptor(12);

7

decode_results resultado;

8

9

int distHorizontal=20, calibraHorizontal=20;

10

int distVertical=7, calibraVertical=7;

11

int velocidadeM1=255;

12

int velocidadeM2=255;

13

int cont=0;

14

boolean ATIVA = true;

15

boolean VELOC = true;

53

Na primeira linha do código esta o include da biblioteca Ultrasonic.h 3 responsável por facilitar a programação dos sensores ultrassônicos. Esta biblioteca não vem nativamente na IDE do Arduino, mas é livre para o uso e modificação podendo ser facilmente encontrada na Internet e adicionada as bibliotecas já existentes no Arduino. Já nas linhas 4 e 5 cria-se objetos do tipo Ultrasonic, um corresponde ao sensor ultrassônico que foi usado no protótipo na posição horizontal ultraHorizontal e o outro ao sensor que foi instalado no protótipo na posição vertical, ultraVertical. Os parâmetros se referem as portas do Arduino em que os terminais dos sensores foram conectados. Na linha 2 está o include da biblioteca IRremote.h 4 responsável por decodificar os sinais que o sensor IR recebe do controle remoto. Esta biblioteca também não é nativa da IDE do Arduino, mas também é facilmente encontrada na internet e adicionada às bibliotecas do Arduino. Mas a diante na linha 6, cria-se o objeto receptor do tipoIRrecv, para recepção dos sinais infravermelhos. O parâmetro exigido corresponde ao número da porta em que o pino de saída de dados do sensor IR foi conectado ao Arduino. Já na linha 7 é criado o objeto resultado do tipo decode_results para armazenar o resultado da decodificação do sinal recebido. Da linha 9 até a linha 15 são declaradas variáveis globais fundamentais para que haja uma interação entre os comandos do controle remoto, as informações dos sensores e o controle de direção e velocidade do protótipo, assim como o acionamento ou não dos dispositivos de alerta. No Codigo 2 mostrado em seguida, pode-se ver a função setup().

Código 2: Função Setup()

17

void setup()

18

{

19

pinMode(3, OUTPUT); // LED vermelho

20

pinMode(11, OUTPUT); // LED verde

21

pinMode(13, OUTPUT); // Buzzer

22

23

pinMode(5, OUTPUT); // Saida PWM pra Ponte H

24

pinMode(6, OUTPUT); // Saida PWM pra Ponte H

25

pinMode(9, OUTPUT); // Saida PWM pra Ponte H

26

pinMode(10, OUTPUT); // Saida PWM pra Ponte H

27

28

receptor.enableIRIn();

29

}

3 http://tetrasys-design.net/download/HCSR04Ultrasonic/HCSR04Ultrasonic-1.1.2.tar.gz

4 http://www.pjrc.com/teensy/arduino_libraries/IRremote.zip

54

Como visto no capítulo 3 deste trabalho, a função setup() é a primeira a ser chamada quando se inicia o dispositivo e é uma função de preparação para os pinos do Arduino. Neste caso o comando pinMode() dita o comportamento dos pinos, se eles serão entradas de dados ou saídas. Na linha 19 o pino 3 do Arduino esta sendo configurado como saída, este pino esta conectado a um LED vermelho que no protótipo tem a função de emitir sinais de alerta. Detalhes relacionados ao que está conectado a cada pino do Arduino foi descrito no capítulo 6. Neste software, todos os pinos foram configurados como saída. Vale ressaltar que os pinos utilizados pelos sensores ultrassónicos e IR não estão especificados na função setup() pois devido ao uso das bibliotecas para controlar estes dispositivos esta configuração não foi necessária, mas caso não se faça o uso das bibliotecas estes pinos devem ser configurados na função setup(). Também nesta função, na linha 28 temos a inicialição do receptor de sinais infravermelhos. A segunda função a ser chamada pelo Arduino é a função loop() vista no Código 3 a seguir.

Código 3: Função Loop()

31 void loop()

32 {

33 while(receptor.decode(&resultado)) {

34 digitalWrite(11, HIGH);

35 digitalWrite(3, LOW);

36 if(VELOC == true){

37 VelocMaxima();

38 }

39 if((resultado.value == 3344)||(resultado.value ==1296)){

40 Detecta();

41 }

42 else if((resultado.value == 3345)||(resultado.value==1297)){

43 Re();

44 }

45 else if((resultado.value == 1312)||(resultado.value==3360)){

46 Direita();

47 }

48 else if((resultado.value == 3361)||(resultado.value==1313)){

49 Esquerda();

50 }

51 else if((resultado.value == 1337)||(resultado.value==3385)){

52 CalibraDistVer();

53 }

54 else if((resultado.value == 1335)||(resultado.value== 3383)){

55 CalibraDistHor();

56 }

57 else if((resultado.value == 1292)||(resultado.value== 3340)) {

58 LigaDesligaSensores();

59 }

60 else if((resultado.value == 3341)||(resultado.value== 1293)){

61 ControlVeloc();

55

63

receptor.resume();

64

cont = 0;

65

}

66

cont ++;

67

delay(10);

68

if(cont == 15){

69

Parar();

70

digitalWrite(3, LOW);

71

digitalWrite(11, LOW);

72

}

73 }

A função Loop é a principal do código fonte e é executada repetidamente bem como todas as demais funções nela embarcadas. As condicionais que tornam possível o controle do protótipo através do controle remoto estão na função loop(). Na linha 33 temos um comando while cuja condição de permanência no loop é o sensor IR está recebendo algum sinal, caso positivo a porta 11 do Arduino é configurada para fornecer sinal lógico em nível alto, ascendendo o LED verde indicando a recepção de sinal pelo sensor IR, este código de acionamento da porta 11 pode ser visto na linha 34, já na linha 35 a porta 3 é configurada para fornecer sinal de nível lógico baixo, isso faz com que o LED vermelho fique apagado pois a função que verifica se existe algum obstáculo detectado pelos sensores ainda não foi chamada e somente neste caso que ele deve permanecer aceso. Na linha 36 temos uma condicional que verifica se o usuário configurou o protótipo para se locomover em uma velocidade lenta ou rápida. Caso tenha sido em velocidade rápida, a função VelocMaxima(), que impõem aos motores a maior velocidade possível é acionada. Caso contrário, a velocidade continua sem alteração, isto é importante, pois dependendo da distância que o sensor estiver de um determinado obstáculo, a velocidade de deslocamento do protótipo será reduzida automaticamente independente das configurações do usuário. O teste da linha 36 permite que a velocidade volte para a configuração do usuário, caso o obstáculo esteja mais no campo de visão do sensor. As condicionais que permitem executar determinadas ações no protótipo de acordo com o botão pressionado no controle remoto começam na linha 39 onde o atributo value do objeto resultado, que contem o código correspondente ao botão pressionado no controle remoto é comparado aos códigos previamente conferidos, que correspondem a um determinado botão no controle remoto, no primeiro if na linha 39 pode ser visto o código 3344 e 1296 que correspondem ao botão seta para cima.

56

São dois códigos porque especificamente neste modelo de controle remoto da Philco utilizado no trabalho é emitido um código quando se pressiona o botão uma vez e outro ao pressionar o botão novamente. No caso do código presente na decodificação do sinal recebido pelo sensor IR coincidir com 3344 ou 1296 quer dizer que o botão seta para cima no controle remoto foi pressionado, então é chamada a função Detecta() que será vista mais a diante. Nas linhas seguintes o mesmo processo se repete para que de acordo com o botão pressionado as funções Re(), Direita(), Esquerda(), CalibraDistVer(), CalibraDistHor(), LigaDesligaSensores()

e ControlVeloc() sejam executadas, as principais destas funções também serão

detalhadas a seguir e o código completo pode ser visto no Apêndice I deste trabalho.

Na linha 63 já no final da função loop(), mas ainda dentro do while o receptor

é preparado para receber um novo valor de decodificação do sinal recebido pelo

sensor IR e logo abaixo na linha 64 uma variável inteira, usada como contador, é iniciada com o valor 0, toda vez que a execução do programa sair do while o contador incrementa mais um e aguarda por dez milissegundos usando a função delay() da linha 67, apenas quando for atingindo um total de quinze ciclos do loop fora do while é que as atividades que estavam sendo realizadas no protótipo serão desativas com o acionamento da função Parar() e a configuração das portas 3 e 11 do Arduino com sinal de nível lógico baixo. Esta estratégia de esperar quinze vezes antes de se desabilitar as atividades no protótipo é importante para que não haja intermitência no funcionamento do protótipo devido a interferências na recepção do sinal do controle remoto. O próximo trecho de código fonte a ser analisado e a função Detecta(), Código 4, criada para detectar a presença de obstáculos através dos sensores ultrassônicos, disparar ou não os sinais de alerta, diminuir a velocidade e parar o protótipo no caso de haver risco de colisão ou queda em algum buraco ou desnível no piso.

Código 4: Função Detecta()

75 void Detecta()

76 {

77 if(ATIVA == true){

78 distVertical = (ultraVertical.Ranging(CM));

79 distHorizontal = (ultraHorizontal.Ranging(CM));

80 }

81 else{

82 distHorizontal = calibraHorizontal*2;

83 distVertical = calibraVertical;

57

85

if((distVertical < calibraVertical -1)||(distVertical > calibraVertical+1)||(distHorizontal < calibraHorizontal)){

86

Parar();

87

digitalWrite(3, HIGH);

88

Bip(80, 300);

89

Bip(100, 300);

90

Bip(120, 300);

91

}

92

else if((distHorizontal<calibraHorizontal*2)& (distHorizontal>=calibraHorizontal)){

93

VelocMedia();

94

Frente();

95

digitalWrite(3, HIGH);

96

Bip(100, 80);

97

digitalWrite(3, LOW);

98

}

99

else{

100

if(VELOC == true){

101

VelocMaxima();

102

}

103

Frente();

104

digitalWrite(3, LOW);

105

}

106 }

Esta função é acionada sempre que for pressionado o botão Seta para cima no controle remoto. O primeiro teste executado na função é a verificação se o usuário ativou ou não os sensores através de uma condicional na linha 77, caso verdadeiro as variáveis distVertical e distHorizontal recebem os valores de distância em centímetros fornecidos pelos sensores Ultrassônicos através de cálculos do tempo de emissão de ondas sonoras e o retorno do eco realizados pela biblioteca Ultrasonic.h. Estes valores serão testados mais adiante com distancias configuradas pelo usuário como limite mínimo em que o protótipo pode se aproximar de um objeto. Caso o usuário tenha optado por não ativar os sensores, as variáveis simplesmente recebem os mesmos valores sempre, não havendo assim a detecção de obstáculos. Na linha 75 é onde os valores de distância fornecidos pelos sensores ultrassônicos são comparados às distancias limite, nas variáveis calibraVertical para o sensor que detecta buracos ou protuberâncias e calibraHorizontal para o sensor que detecta obstáculos à frente do protótipo. A distância vertical é testada a fim de comparar se ela é menor que a distância que o sensor esta do solo menos um centímetro, caso seja, isso quer dizer que existe algum obstáculo a frente do protótipo e este obstáculo é maior que dois centímetros. Da mesma forma também é testado se a distância vertical é maior que a distância que o sensor esta do solo

58

mais um centímetro, neste caso se positivo, quer dizer que existe um buraco ou desnível a frente do protótipo. O último teste desta condicional é referente a distância horizontal, neste caso

é testado se ela é menor que a distância mínima possível configurada pelo usuário

para que o protótipo se aproxime de algum obstáculo. Se algum destes casos se confirmarem como positivo o algoritmo faz uma chamada a função Parar() na linha 86 imobilizando o protótipo logo em seguida na linha 87 ascende o LED vermelho conectado ao pino 3 do Arduino e chama por três vezes nas linhas 88, 89 e 90 a função Bip() e para cada chamada é fornecido parâmetros diferentes que também fazem produzir variações de sinais diferentes na porta 13 do Arduino onde esta ligado o Buzzer fazendo-o emitir bips de alerta de diferentes tons, mas detalhes da função Bip() serão vistos adiante. Caso nenhum dos testes acima for positivo ainda existe outro teste que esta na linha 92 e tem a finalidade de detectar a proximidade de um obstáculo que esteja ao dobro da distância configurada pelo usuário com a

mínima possível para o protótipo se aproximar. Caso o protótipo entre nesta região que fica compreendida entre a distância mínima de segurança onde o protótipo é parado automaticamente e o dobro desta distância o algoritmo faz uma chamada a função VelocMedia() na linha 93. Esta função faz com que o protótipo diminua sua velocidade caso ele esteja em sua velocidade máxima. Em seguida é feita uma chamada a função Frente() para que o protótipo continue em frente, na linha 95 o LED vermelho é aceso, já na 96 é

chamada a função Bip(), com parâmetros para se produzir um bip curto em seguida

o LED vermelho é apagado. Isto faz com que toda vez que o protótipo se aproxime

de um obstáculo detectado pelo sensor que está na posição horizontal a uma distância suficiente para satisfizer o teste condicional da linha 92 o protótipo diminuirá a velocidade e piscara o LED vermelho emitindo bips curtos de alerta pelo Buzzer para que o usuário possa ver que esta se aproximando de um obstáculo e

corrigir seu percurso antes que o protótipo pare. Caso não haja nenhum obstáculo detectado pelos sensores, o algoritmo apenas verifica na linha 100 se a velocidade esta compatível com a escolha do usuário, mas adiante é chama a função Frente() para que o protótipo se locomova para frente pois não a nada o obstruindo e mantem o LED vermelho apagado. No Código 5 a seguir é analisado as funções CalibraDistVer() e CalibraDistHor().

59

Código 5: Função CalibraDistVer()

108

void CalibraDistVer()

109

{

110

calibraVertical = (ultraVertical.Ranging(CM));

111

digitalWrite(3, HIGH);

112

Bip(100, 300);

113

digitalWrite(3, LOW);

114

}

115

116

void CalibraDistHor()

117

{

118

calibraHorizontal = (ultraHorizontal.Ranging(CM));

119

digitalWrite(3, HIGH);

120

Bip(100, 300);

121

digitalWrite(3, LOW);

122

}

Estas funções foram criadas para que o usuário possa escolher a menor distância que o protótipo da cadeira de rodas pode se aproximar de um objeto antes de parar automaticamente. Isto para os objetos detectados pelo sensor que esta na posição horizontal. Já para o sensor que esta na posição vertical a distância que ele fica do solo é fixa e deve se mantida, mas devido a atritos o valor desta distância pode variar interferindo na correta eficiência do software, por isso é importante calibrar esta distância antes de usar o protótipo. O algoritmo funciona da seguinte maneira: para calibrar o sensor vertical é necessário pressionar o botão CD no controle remoto isto faz com que a função CalibraDistVer() seja chamada e nela, a variável global calibraVertical recebe e armazena o valor da distância lida pelo sensor naquele momento e é esta distancia que sera usada como parâmetro pelo software, isto ocorre na linha 110 do trecho de código fonte analisado. Para confirmar que a calibração foi realizada o LED vermelho é aceso (linha 111) em seguida é emitido um bip pelo Buzzer (linha 112) e o LED vermelho é apagado (linha 113). O processo é exatamente o mesmo para calibração horizontal, porém, neste caso deve ser pressionado no controle remoto o botão TAPE. Toda vez que for feito um teste de comparação entre distancias será usado este valor ate que o usuário calibre novamente. Para que o protótipo possa se locomover para frente, para os lados, para trás e também parar, foram implementadas diversas funções que podem ser vistas no Código 5 a seguir:

60

Código 6: Funções para movimentação e parada do protótipo

134

void Parar()

135

{

136

analogWrite(9, LOW);

137

analogWrite(10, LOW);

138

analogWrite(5, LOW);

139

analogWrite(6, LOW);

140

}

141

142

void Frente()

143

{

144

analogWrite(9, velocidadeM1);

145

analogWrite(10, LOW);

146

analogWrite(5, velocidadeM2);

147

analogWrite(6, LOW);

148

}

149

150

void Re()

151

{

152

analogWrite(9, LOW);

153

analogWrite(10, velocidadeM1);

154

analogWrite(5, LOW);

155

analogWrite(6, velocidadeM2);

156

delay(100);

157

}

158

159

void Direita()

160

{

161

analogWrite(9, velocidadeM1);

162

analogWrite(10, LOW);

163

analogWrite(5, 80);

164

analogWrite(6, LOW);

165

delay(100);

166

}

167

168

void Esquerda()

169

{

170

analogWrite(9, 80);

171

analogWrite(10, LOW);

172

analogWrite(5, velocidadeM2);

173

analogWrite(6, LOW);

174

delay(100);

175

}

Para que o protótipo se movimente é preciso acionar os motores. E quem faz o acionamento dos motores é a ponte H, então na verdade o que o software esta controlando neste trecho são as tensões enviadas a pontes H, no protótipo foram utilizadas duas, uma para cada motor e cada ponte H necessita de duas portas do Arduino. Na função Parar() temos o comando analogWrite(9, LOW), na linha 36, este comando faz com que o pino 9 do Arduino forneça 0 volts (nível lógico baixo) a entrada da ponte H. É possível notar que este mesmo valor é fornecido a todas as

61

entradas da ponte H e como visto no capítulo 2 deste trabalho, esta configuração proporciona a parada do motor. Sempre que é necessário que o protótipo se locomova pra frente é feito uma chamada a função Frente() na linha 142. Esta função aciona os dois motores no mesmo sentido e ao mesmo tempo. O uso das variáveis velocidadeM1 e velocidadeM2 é para que se possa controlar a velocidade em que o protótipo se desloca. Isto é possível porque a principal característica do comando analogWrite(pino, valor) como visto no capítulo 3 deste trabalho é gerar uma tensão analógica em um pino digital utilizando o sinal PWM (pulse width modulation), para isso são requeridos dois parâmetros, o número do pino em que essa tensão deve ser gerada e a amplitude desta tensão que pode variar de 0 correspondendo a 0 volts até 255 que corresponde a 5 volts no Arduino. Se nas variáveis velocidadeM1 e velocidadeM2 estiver o valor 0 (zero) o protótipo permanecerá parado, a proporção em que este valor for aumentando também aumentara a velocidade de deslocamento do protótipo até o máximo de 255 que correspondera a máxima velocidade do protótipo. A função Re() na linha 150 funciona exatamente como a função frente, porém os valores nas portas do Arduino foram invertidos, isso faz com que o protótipo se locomova para trás. Já na linha 159 temos a função Direita() que como o próprio nome sugere faz com que o protótipo vire a direita. Ela tem o mesmo princípio de funcionamento da função Frente() porém para que o protótipo se locomova para frente é preciso que as duas variáveis velocidadeM1 e velocidadeM2 tenham o mesmo valor. já para que ele vire a direita o motor da esquerda deve girar mais rápido do que o da direita isto é conseguido fixando um valor baixo no comando da linha 163, analogWrite(5, 80), com isto quando esta função for chamada o motor da esquerda sempre girara mais rápido virando o protótipo para a direita. Para girar protótipo para a esquerda a função Esquerda() da linha 168 usa exatamente o mesmo princípio porém agora o motor da direita e que gira mais devagar. O comando delay(100) no final de cada função tem o objetivo de fazer com que a execução do programa espere por 100 milissegundos antes de encerar, isto evita o surgimento de intermitência devido a alguma dificuldade de recepção dos sinais do controle remoto. O último trecho de código fonte analisado será o da função Bip() vista no Código 6, é esta função que permite ao Buzzer emitir sinais de alerta.

62

Código 7: Função Bip()

124 void Bip(int tom, int duracao)

125 {

126 for (long i = 0; i < duracao * 1000L; i += tom* 2) {

127 digitalWrite(13, HIGH);

128 delayMicroseconds(tom);

129 digitalWrite(13, LOW);

130 delayMicroseconds(tom);

131 }

132 }

O Arduino possui uma função exclusiva para produzir notas musicais, porém com o uso da biblioteca IRremote.h ouve um conflito que não possibilitou o uso da função tone() já presente no Arduino e então a função Bip() foi implementada para resolver o problema. Para fazer o Buzzer vibrar, escrevemos no pino do Arduino em que ele está ligado uma sequência de valores HIGH (valor lógico alto) e LOW (valor lógico baixo), tantas vezes por segundo quanto for a frequência da nota. Para isto foi usado o comando for da linha 126. O parâmetro tom diz respeito a frequência do som, quanto mais baixo for o valor da variável tom, mais agudo será o som emitido. Já o parâmetro duração esta relacionado à duração do som e quanto maior o seu valor maior será o tempo de duração do som emitido.

63

7. TESTES COM O PROTÓTIPO

Ao término da montagem do protótipo e implementação do software, alguns testes foram realizados a fim de conferir na prática como seria a atuação do software sobre hardware. As principais funções do software foram testadas, desde as mais simples como mover o protótipo para frete e para trás até as complexas, como detectar um objeto a uma determinada distância, detectar buracos ou elevações no solo, diminuir a velocidade automaticamente, acionar os sinais de alerta entre outros. O primeiro teste realizado foi o de locomoção. Neste teste se avaliou a capacidade do protótipo em se deslocar para frente e para trás, além de fazer curvas. O protótipo foi colocado em um ambiente onde pode circular livremente sem a presença de obstáculos e irregularidades no piso. Os resultados obtidos foram muito satisfatórios e se constatou uma grande eficiência na dirigibilidade do protótipo. O segundo teste realizado foi o da capacidade do protótipo em detectar obstáculos com o sensor posicionado na horizontal e impedir uma possível colisão independente dos comandos do usuário, conforme pode ser visto na Figura 40.

dos comandos do usuário, conforme pode ser visto na Figura 40. Figura 40: Teste detecção de

Figura 40: Teste detecção de obstáculos na horizontal

64

Neste caso foi colocado um objeto diante do protótipo simulando a presença de uma parede, murro, pessoa ou qualquer outro obstáculo que poderia obstruir sua passagem. No quadro A da Figura 40 o protótipo estava a uma distância de 30 centímetros já no quadro B ele atingiu uma distância limite de 15 centímetros.

O protótipo estava configurado para diminuir a velocidade e apenas alertar

sobre a presença dos obstáculos quando estivesse a uma distância de 30 centímetros e parar a uma distância de 15 centímetros do obstáculo. Em todos os casos foi obtido sucesso na identificação, sinalização e intervenção do software no

controle do protótipo. Ao entrar na área compreendida entre 30 e 15 centímetros de um determinado objeto o comportamento do protótipo foi exatamente o esperado. Ele reduziu sua velocidade para cerca de 60% da velocidade máxima como havia sido pré-programado e também ativou o LED vermelho e o buzzer alertando sobre a possibilidade de uma possível colisão, neste caso o LED se mantem piscando e o buzzer emitindo bips curtos e repetitivos.

No teste o comando para que o protótipo fosse de encontro ao obstáculo foi mantido. Ao chegar à distância limite de 15 centímetros o protótipo foi impedido pelo software de seguir em frente independente dos comandos do usuário, que foi alertado desta vez com a permanência do LED vermelho aceso e um sequencia de bips longos emitidos pelo buzzer.

O último teste realizado foi o de detecção de irregularidades no piso que

dificultem a circulação do protótipo como buracos, pequenos objetos e elevações no

piso. A Figura 41 mostra como os testes foram realizados com diferentes objetos.

como os testes foram realizados com diferentes objetos. Figura 41: Teste detecção de obstáculos na vertical

Figura 41: Teste detecção de obstáculos na vertical

O software foi configurado para interferir nos comandos do usuário parando o

protótipo sempre que for detectado um obstáculo com medida igual ou superior a

65

dois centímetros, tanto acima quanto abaixo do solo. Para se testar a detecção de obstáculos acima do piso pequenos objetos, foram colocados no percurso do protótipo todos os objetos apresentavam altura superior a dois centímetros. Quando os objetos entravam no campo de visão dos sensores, imediatamente o protótipo era impedido de seguir em frente e os sinais de alerta eram emitidos. Para testar a detecção de obstáculos abaixo do nível do piso como buracos por exemplo. Em um dos testes o protótipo foi colocado em uma mesa e comandado para seguir em direção a uma das extremidades assim que o sensor detectou o final da mesa imediatamente impediu que o protótipo seguisse em frente parando o mesmo, evitando a queda e alertado o usuário. Este teste pode ser visto na Figura

42.

alertado o usuário. Este teste pode ser visto na Figura 42. Figura 42: Teste para detecção

Figura 42: Teste para detecção de buracos

Em outro teste o protótipo foi posicionado em cima de livros cuja espessura não ultrapassava dois centímetros, então ele prosseguiu normalmente exatamente como era esperado. Este teste pode ser visto na Figura 43.

normalmente exatamente como era esperado. Este teste pode ser visto na Figura 43. Figura 43: Teste

Figura 43: Teste com pequenos desníveis

66

Este teste foi importante para mostrar que pequenos desníveis não teriam interferência no funcionamento do protótipo. A realização dos testes em geral foi importante para se constatar os resultados práticos das técnicas de programação, automação e eletrônica, empregadas neste trabalho. Os resultados dos testes foram satisfatórios em todos os casos confirmando o bom funcionamento tanto do software quanto do hardware.

67

8. CONSIDERAÇÕES FINAIS

De uma forma geral, conseguiu-se chegar ao objetivo principal do trabalho, produzindo um software estável, embarcado num micro processador e controlando um protótipo semelhante a uma cadeira de rodas motorizada, que possibilitou uma boa interação entre software e hardware. A principal função do software também

correspondeu às expectativas cumprindo seu papel de auxiliar o usuário no controle

do protótipo. Os conhecimentos adquiridos nas pesquisas bibliográficas foram de

fundamental importância para a conclusão bem sucedida do trabalho e acrescentaram de maneira significativa aos conhecimentos já adquiridos. Este trabalho buscou unir a crescente utilização de sistemas embarcados em uma grande parcela de dispositivos eletrônicos encontrados em nosso dia-a-dia a uma crescente necessidade de se desenvolver produtos que atendam os anseios de

pessoas com algum tipo de deficiência física, tanto para proporcionar maior conforto

e segurança, quanto para propiciar uma melhor integração à sociedade,

promovendo assim, uma melhora significativa em sua qualidade de vida. O uso da tecnologia tem um papel fundamental nesse processo, desta forma, é bem vinda toda e qualquer atenção voltada a pessoas com necessidades especiais por parte daqueles que detém conhecimentos para desenvolver novas técnicas ou aprimorar

as já existentes nesta área que muitas vezes é negligenciada por parte dos

pesquisadores. Além do lado acadêmico este trabalho também teve um lado humanista voltando o uso de tecnologias de diversas áreas para o desenvolvimento de técnicas para facilitar a vida de pessoas que por algum motivo tiveram sua capacidade de locomoção parcialmente reduzida ou completamente comprometida e, além disso, ainda tem alguma deficiência visual, motora ou cognitiva que os impossibilitem de controlar uma cadeira de rodas motorizada. O protótipo produzido e apresentado neste trabalho é apenas uma amostra que se pode conseguir grande sucesso nesta

68

área, através do uso de micro controladores com maior poder computacional assim como o uso de um maior número de sensores e atuadores de diversos tipos.

8.1. TRABALHOS FUTUROS

Como trabalho futuro é proposto que seja acrescentada novas funcionalidades ao software embarcado no Arduino como, por exemplo, o desvio automático de obstáculos. Seria interessante que o software calculasse através das informações fornecidas pelos sensores qual a melhor forma de desvio para um determinado obstáculo e executar este desvio automaticamente. Outra funcionalidade que também poderia ser acrescentada é o reconhecimento de rampas. No software atual elas são reconhecidas como obstáculos. Seria desejável que fosse acrescentado ao software uma funcionalidade que permitisse a identificação das rampas, desta forma a cadeira de rodas poderia circular por elas com os sensores ligados. Também seria uma possibilidade para trabalhos futuros o uso da plataforma Arduino em outros projetos como monitoramento da temperatura no interior de datacenters. Através de sensores de temperatura e de uma placa para permitir o acesso a internet poderia ser desenvolvido um sistema que alertasse em tempo real caso a temperatura em um datacenter, por exemplo, estiver acima da considerada segura. A plataforma Arduino também poderia ser utilizada para evitar o desperdício de água nos bebedouros da faculdade. Com o auxilio das informações de sensores de distância, a agua nos bebedouros poderia apenas ser liberada caso a pessoa estivesse com a cabeça reclinada sobre os bicos do bebedouro, evitando que o fluxo de agua seja acionado enquanto os usuários estejam conversando ou fazendo qualquer outra coisa que não seja tomar agua, evitando assim o desperdício.

69

REFERÊNCIAS BIBLIOGRÁFICAS

ABRAMAM, 2012.

<http://www.abraman.org.br/index.php?option=com_content&view=article&catid=144

:apostilas-inspecao-eletrica&id=349:sistemas-de-automacao-e-controle> Acessado em maio de 2012.

em:

Introdução

a

automação.

Disponível

AIHARA, Cintia Kimie, Uma abordagem interativa para o problema da capacitação de pesquisa em automação, UNICAMP Universidade Estadual de Campinas, 2005, Tese (Doutorado).

ALIEVI, César Adriano. Automação residencial com utilização de controlador lógico programável. Centro Universitário FEEVALE, Novo Hamburgo, dezembro de 2008. Trabalho de Conclusão de Curso.

AUTOMATIZE SOLUÇÕES EM SENSORES. Sensores ultrassônicos Siemens. Disponível em: <http://www.automatizesensores.com.br/ultrasonicos.html> Acessado em maio de 2012.

ANDRADE, M. A. O. Confecção de Kits de Treinamento Montados a Partir de Equipamentos Obsoletos ou Defeituosos Descartados. Escola Politécnica de Pernambuco Universidade de Pernambuco. Recife, junho de 2010. (Trabalho de Conclusão de Curso).

ARDUINO.

em:<http://www.arduino.cc/ > Acesso em set. 2012.

Arduino:

Homepage.

Arduino.

2012.

Disponível

BECKER, Marcelo, Estudo sobre robôs de locomoção: formas construtivas, dirigibilidade e controle, UNICAMP Universidade Estadual de Campinas, 1997, Tese (Mestrado).

BECKER, Marcelo. Aplicação de tecnologias assistivas e técnicas de Controle em Cadeiras de Rodas Inteligentes, UNICAMP Universidade Estadual de Campinas, 2000, Tese (Doutorado).

FONSECA, Erika Guimarães Pereira; BEPPU, Mathyan Motta. Apostila Arduino. Universidade Federal Fluminense. Rio de Janeiro. Dez. 2010. Disponível em:

<http://www.sr.ifes.edu.br/~eduardomax/arquivos/Tut_Arduino.pdf> Acessado em maio de 2012.

70

GIOPPO, L. Lucas. et al.Robô seguidor de linha. Universidade Tecnológica Federal Do Paraná, 2009. Monografia.

GOEKING, Weruska. Da máquina a vapor aos softwares de automação Edição

52,

Disponível

em:<http://www.osetoreletrico.com.br/web/component/content/article/57-artigos-e-

materias/343-xxxx.html>. Acesso em abr. de 2012.

Maio

de

2010.

HAMANAKA, Marcos Henrique Mamoru O. Projeto e desenvolvimento de circuito de controle para cadeira de rodas. UNICAMP Universidade Estadual de Campinas, 2002, Dissertação (Mestrado).

IKWARE. Software e linguagem de programação Arduino. Disponível em:

<www.ikware.com/seeuinmytee/pdf/arduino.pdf> Acessado em maio de 2012.

ISERHARDT, M. R. Desenvolvimento de um Gerenciador de Temperatura para Datacenter Utilizando Arduino. Universidade da Região da Campanha- URCAMP.Bagé, 2010. Monografia.

em:

<http://loc.med.br/principais-ofertas/cadeira-de-rodas-motorizada-sx.html> Acessado em maio de 2012.

LOC

MED.

Cadeira

de

rodas

motorizada.

Disponível

MADEIRA, Paulo Henrique de Araújo. Aplicação do estudo da interface homem máquina em cadeiras de rodas motorizadas. UNICAMP Universidade Estadual de Campinas, 2008, Dissertação (Mestrado).

MARIN, ALEXANDRE JACQUES; WERGRZN, YURI ANTIN. Desktop inteligente. Universidade Tecnológica do Paraná, 2008, (Monografia).

MEDINA AG, COELHO DB. Aspectos biomecânicos e funcionais na prescrição de cadeira de rodas. Disponível em:< http://www2. rc. unesp. br/eventos/edu- cacao_fisica/biomecanica2007/upload/157-2-A-AtigoCBB2007. pdf>. Acesso em abr. de 2012.

MERCADO LIVRE. L298 Ci P/motor De Passo Ideal P/ Microcontrolador Pic Atmel. Disponível em: <http://produto.mercadolivre.com.br/MLB-434539108-l298-ci- pmotor-de-passo-ideal-p-microcontrolador-pic-atmel =MLB444132603> Acessado em out. de 2012.

MORAIS R. C. et al. Sistema monitorador de circuito de autorama. Fundação Escola Técnica Liberato Salzano Vieira da Cunha. Novo Hamburgo, 2005(trabalho trimestral de física).

NEVES, Cleonor. et al. Os dez maiores desafios da automação industrial: As perspectivas para o futuro. João Pessoa, PB ,2007. Disponível em: < http://www.ebah.com.br/content/ABAAAAGpwAD/desafios-automacao-industrial#> Acessado em abril de 2012.

71

PATSKO, L. F. Tutorial Adaptação de Servo-motores. 2006. Disponível em:

<http://www.maxwellbohr.com.br/downloads/robotica/mec1000_kdr5000/tutorial_mec

anica_-_adaptacao_de_servo-motores.pdf> Acessado em set. de 2012.

PATSKO, L. F. Tutorial Montagem da Ponte H. 2006.Disponível em: < http://www.maxwellbohr.com.br/downloads/Tutorial Eletronica - Montagem de uma Ponte H.pdf> Acessado em set. de 2012.

SANTOS, André. Servomotores. Porto Alegre, Rio Grande do Sul. Agosto de 2007. Disponível em: <http://www.sumoderobos.org> Acessado em maio de 2012.

SILVA, Otto Marques da. ;DEL`ACQUA, Ricardo José. Cadeira de rodas e sua

em:

evolução

<http://www.crfaster.com.br/Cadeira%20Rodas.htm> Acessado em abr. de 2012.

na

historia.

Disponível

SILVEIRA, J. A. Arduino: Cartilha de Programação em C. Disponível em:

http://www.ordemnatural.com.br/Cartilhas%20do%20ARDUINO/CartilhadoArduino_e

d10.pdf> Acessado em set. de 2012.

SLAK

NEWS

CENTER.

Word

of

the

week:

ping.

Jul,2011.Disponível

em:

<https://news.slac.stanford.edu/features/word-week-ping>

Acessado

em

maio

de

2012.

SOUZA, A. J.; OLIVEIRA, L. C: DCA Redes Industriais. Maio. 2003. Disponível em: <http://dc127.4shared.com/doc/jLFDjmM1/preview.html> Acessado em abr. de

2012.

SPAMER, F. R. Técnicas Preditivas de Manutenção de Maquinas Rotativas. Universidade Federal do Rio de Janeiro, 2009. Trabalho de Conclusão de Curso. Utiluz. Entenda o Poder do LED. Disponível em: < http://www.utiluz.com/entenda_o_led.php> Acessado em set. de 2012.

WENDLING, Marcelo.

Sensores.

2010.

Disponível

em:

<

http://www2.feg.unesp.br/Home/PaginasPessoais/ProfMarceloWendling/4---

sensores-v2.0.pdf> Acessado em set. de 2012.

 

WV Soluções.

CLP

Pic

40.

Disponível

em:

<www.vwsolucoes.com/produtos_completa.php?idprod=1> Acessado em maio de

2012.

72

APÊNDICE I

Código fonte completo, desenvolvido para o trabalho.

1

#include "Ultrasonic.h"

2

#include <IRremote.h>

3

4

Ultrasonic ultraHorizontal(4,2);

5

Ultrasonic ultraVertical(8,7);

6

IRrecv receptor(12);

7

decode_results resultado;

8

9

int distHorizontal=20, calibraHorizontal=20;

10

int distVertical=7, calibraVertical=7;

11

int velocidadeM1=255;

12

int velocidadeM2=255;

13

int cont=0;

14

boolean ATIVA = true;

15

boolean VELOC = true;

16

17

void setup()

18

{

19

pinMode(3, OUTPUT); // LED vermelho

20

pinMode(11, OUTPUT); // LED verde

21

pinMode(13, OUTPUT); // Buzzer

22

23

pinMode(5, OUTPUT); // Saida PWM pra Ponte H

24

pinMode(6, OUTPUT); // Saida PWM pra Ponte H

25

pinMode(9, OUTPUT); // Saida PWM pra Ponte H

26

pinMode(10, OUTPUT); // Saida PWM pra Ponte H

27

28

receptor.enableIRIn();

29

}

30

31

void loop()

32

{

33

while(receptor.decode(&resultado)) {

34

digitalWrite(11, HIGH);

35

digitalWrite(3, LOW);

36

if(VELOC == true){

37

VelocMaxima();

38

}

39

if((resultado.value == 3344)||(resultado.value ==1296)){

40

Detecta();

41

}

42

else if((resultado.value == 3345)||(resultado.value==1297)){

43

Re();

44

}

45

else if((resultado.value == 1312)||(resultado.value==3360)){

46

Direita();

73

48

else if((resultado.value == 3361)||(resultado.value==1313)){

49

Esquerda();

50

}

51

else if((resultado.value == 1337)||(resultado.value==3385)){

52

CalibraDistVer();

53

}

54

else if((resultado.value == 1335)||(resultado.value== 3383)){

55

CalibraDistHor();

56

}

57

else if((resultado.value == 1292)||(resultado.value== 3340)) {

58

LigaDesligaSensores();

59

}

60

else if((resultado.value == 3341)||(resultado.value== 1293)){

61

ControlVeloc();

62

}

63

receptor.resume();

64

cont = 0;

65

}

66

cont ++;

 

67

delay(10);

68

if(cont == 15){

69

Parar();

70

digitalWrite(3, LOW);

71

digitalWrite(11, LOW);

72

}

73

}

74

75

void Detecta()

 

76

{

77

if(ATIVA == true){

78

distVertical = (ultraVertical.Ranging(CM));

79

distHorizontal = (ultraHorizontal.Ranging(CM));

80

}

81

else{

 

82

distHorizontal = calibraHorizontal*2;

83

distVertical = calibraVertical;

84

}

85

if((distVertical < calibraVertical -1)||(distVertical > calibraVertical+1)||(distHorizontal < calibraHorizontal)){

86

Parar();

87

digitalWrite(3, HIGH);

88

Bip(80, 300);

89

Bip(100, 300);

90

Bip(120, 300);

91

}

92

else if((distHorizontal<calibraHorizontal*2)& (distHorizontal>=calibraHorizontal)){

93

VelocMedia();

94

Frente();

95

digitalWrite(3, HIGH);

96

Bip(100, 80);

97

digitalWrite(3, LOW);

98

}

99

else{

100

if(VELOC == true){

101

VelocMaxima();

102

}

103

Frente();

104

digitalWrite(3, LOW);

105

}

106

}

74

107

108

void CalibraDistVer()

109

{

110

calibraVertical = (ultraVertical.Ranging(CM));

111

digitalWrite(3, HIGH);

112

Bip(100, 300);

113

digitalWrite(3, LOW);

114

}

115

116

void CalibraDistHor()

117

{

118

calibraHorizontal = (ultraHorizontal.Ranging(CM));

119

digitalWrite(3, HIGH);

120

Bip(100, 300);

121

digitalWrite(3, LOW);

122

}

123

124

void Bip(int tom, int duracao)

125

{

126

for (long i = 0; i < duracao * 1000L; i += tom* 2) {

127

digitalWrite(13, HIGH);

128

delayMicroseconds(tom);

129

digitalWrite(13, LOW);

130

delayMicroseconds(tom);

131

}

132

}

133

134

void Parar()

135

{

136

analogWrite(9, LOW);

137

analogWrite(10, LOW);

138

analogWrite(5, LOW);

139

analogWrite(6, LOW);

140

}

141

142

void Frente()

143

{

144

analogWrite(9, velocidadeM1);

145

analogWrite(10, LOW);

146

analogWrite(5, velocidadeM2);

147

analogWrite(6, LOW);

148

}

149

150

void Re()

151

{

152

analogWrite(9, LOW);

153

analogWrite(10, velocidadeM1);

154

analogWrite(5, LOW);

155

analogWrite(6, velocidadeM2);

156

delay(100);

157

}

158

159

void Direita()

160

{

161

analogWrite(9, velocidadeM1);

162

analogWrite(10, LOW);

163

analogWrite(5, 80);

164

analogWrite(6, LOW);

165

delay(100);

166

}

167

75

168

void Esquerda()

169

{

170

analogWrite(9, 80);

171

analogWrite(10, LOW);

172

analogWrite(5, velocidadeM2);

173

analogWrite(6, LOW);

174

delay(100);

175

}

176

178

void ControlVeloc()

179

{

180

if((VELOC == true)){

190

VELOC = false;

200

VelocMedia();

201

Bip(100, 200);

202

}

203

else{

204

VELOC = true;

205

VelocMaxima();

206

Bip(100, 100);

207

delay(100);

208

Bip(100, 80);

209

}

210

delay(1000);

211

}

212

void LigaDesligaSensores()

213

{

214

if (ATIVA == true){

215

ATIVA = false;

216

Bip(100, 100);

217

delay(100);

218

Bip(100, 80);

219

}

220

else{

221

ATIVA = true;

222

Bip(100, 200);

223

}

224

delay(1000);

225

}

226

227

void VelocMaxima()

228

{

229

velocidadeM1 = 255;

230

velocidadeM2 = 255;

231

}

232

233

void VelocMedia()

234

{

235

velocidadeM1 = 160;

236

velocidadeM2 = 160;

237

}