protótipo cadeira de rodas inteligente.pdf

38
Protótipo Cadeira de Rodas Inteligente

Upload: jose-pereira-lima

Post on 16-Dec-2015

45 views

Category:

Documents


17 download

TRANSCRIPT

  • Prottipo Cadeira de Rodas Inteligente

  • Prottipo de uma cadeira de rodas eltrica de baixo custo, automatizada com Arduino e programada para detectar, alertar e impedir uma possvel coliso da cadeira com

    obstculos em seu caminho. Todos os componentes utilizados neste projeto, com exceo do Arduino e dos sensores ultrassnicos foram reaproveitados de sucata de

    eletrnicos. Alm do lado acadmico este trabalho tambm teve um lado humanista voltando o uso de tecnologias de diversas reas para o desenvolvimento de tcnicas

    para facilitar a vida de pessoas que por algum motivo tiveram sua capacidade de locomoo parcialmente reduzida ou completamente comprometida e, alm disso, ainda

    tem alguma deficincia visual, motora ou cognitiva que os impossibilitem de controlar uma cadeira de rodas motorizada. O prottipo produzido e apresentado neste trabalho

    apenas uma amostra que se pode conseguir grande sucesso nesta rea, atravs do uso de micro controladores com maior poder computacional e sensores com maior

    preciso.

    1

    DESENVOLVIMENTO DO HARDWARE

    O termo hardware aqui mencionado diz respeito a todo componente fsico utilizado no desenvolvimento do prottipo da cadeira de rodas motorizada, os principais so

    os componentes eletrnicos como o Arduino, sensores, Ponte H, motores, LEDs, buzzer e baterias que tero seu funcionamento diretamente influenciado pelo software.

    Tambm faz parte do hardware a estrutura em que estes componentes foram montados como o chassi e as rodas do prottipo. Na figura A possvel ver o prottipo pronto

    com todos os componentes conectados.

    Para facilitar o entendimento de como os componentes eletrnicos esto conectados entre se, foi feito um diagrama que pode ser visto na Figura B. Explicaes sobre

    cada um dos itens presentes no diagrama, assim como a justificativa de sua escolha e sua importncia dentro do trabalho podem ser vistas nos tpicos seguintes.

  • A

    B

    2

  • Arduino

    O primeiro item a se definir para o incio do trabalho foi o micro controlador, pea de primordial importncia, pois ele quem hospeda o software que foi implementado e de acordo

    com suas caractersticas que os demais componentes de hardware foram escolhidos, assim como a linguagem de programao utilizada.

    Tendo isso em mente e depois de analisar algumas caractersticas dos micro controladores disponveis no mercado conclui-se que o Arduino Uno (verso mais recente da plataforma Arduino)

    seria ideal para o projeto, pois seu hardware e software so 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, preo baixo e por ser facilmente encontrado no mercado. Alm disso, o Arduino, devido a

    sua grande popularidade, dispe de uma imensa gama de dispositivos, sensores e atuadores, compatveis com seus padres que tambm so facilmente encontrados no mercado.

    A funo 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 so especificados nos prximos tpicos, quando se discorrer especificamente

    sobre cada um deles.

    Na Figura A possvel observar a placa Arduino usada neste trabalho.

  • A

    3

    Sensor Ultrassnico e Infravermelho

  • Os sensores utilizados foram trs, sendo dois deles ultrassnicos representados no diagrama de blocos da Figura B do Passo 1 como Sensor Ultra1 e Sensor Ultra2, e o terceiro sendo um

    sensor infravermelho, representado como Sensor IR no mesmo diagrama.

    Os sensores ultrassnicos tem um papel de fundamental importncia na percepo do ambiente, pois so eles que verificam a existncia de algum obstculo no percurso da cadeira. Existem

    outros tipos de sensores que poderiam desempenhar este papel, como o sensor de distncia infravermelho, mas neste trabalho, em particular, foi mais apropriado o uso do sensor ultrassnico

    por sua maior abrangncia em relao a objetos detectados. O sensor ultrassnico consegue perceber objetos de vrias formas, cores e texturas diferentes que estejam em seu campo de atuao,

    diferente do sensor infravermelho, que apresenta dificuldade de perceber objetos translcidos ou em ambientes onde exista a incidncia de luz solar.

    De uma forma geral todos os objetos que apresentarem as caractersticas que permitam refletir a radiao ultrassnica sero percebidos pelo sensor, englobando assim grande parte dos

    obstculos que possam se interpor no caminho percorrido por uma cadeira de rodas. O modelo de sensor ultrassnico utilizado foi o HC-SR04 2 que pode ser visto na Figura A.

    J na Figura B possvel observar como os sensores foram ligados ao Arduino para receber corrente eltrica e transmitir informaes. Nesta mesma Figura tambm possvel observar

    quais portas digitais foram utilizadas para comunicao entre Arduino e sensores.

    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, ligaes estas que permitem a alimentao do sensor pelo prprio

    Arduino. Para transferncia de informaes, 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 ultrassnicos tem a finalidade de se monitorar o que estiver a frente e abaixo do prottipo. O sensor1 foi fixado na horizontal de modo que monitora tudo que estiver a

    frente da cadeira e a uma distncia de at sete metros. O sensor2 foi fixado na posio vertical e a frente das rodas dianteiras do prottipo ficando a 10 centmetros do solo e tem a funo de

    detectar buracos ou protuberncias no piso.

    O sensor infravermelho, ou sensor IR (Infra Red) como est representado no diagrama de blocos na Figura B do Passo 1, foi utilizado para desempenhar funo diferente dos sensores

    ultrassnicos, sendo usado para receber instrues que permitam controlar o prottipo a distncia, atravs de um controle remoto convencional. Na Figura C possvel ver em diversos ngulos

    o sensor infravermelho utilizado para captar os sinais enviados pelo controle remoto.

    Nas cadeiras de rodas motorizadas comuns estes comandos so realizados atravs de um Joystick fixado em um dos braos da cadeira e o usurio tem o controle da direo e velocidade

    do veculo atravs dele. Como o prottipo desenvolvido tem suas dimenses reduzidas, ele no tem capacidade para transportar o indivduo que ir controla-lo, ento, optou-se por utilizar um

    controle remoto para realizar tal tarefa.

    Os controles remotos mais utilizados no dia a dia para controlar equipamentos eletrnicos como TVS, DVDs, aparelhos de som entre outros, so controles que usam a tecnologia

    Infravermelha para transmisso de dados e justamente por este motivo, aliado ao baixo custo e relativa simplicidade de uso que esta tecnologia foi utilizada no prottipo. A Figura D mostra o

    Controle remoto modelo PCR-96 produzido pela Philco utilizado no trabalho.

    Este controle remoto originalmente utilizado em aparelhos de som da Philco sendo que neste trabalho apenas alguns botes sero utilizados, para determinadas tarefas, desta forma, os

    demais botes no possuem funo no controle do prottipo. Os botes utilizados assim como a funo que ele desempenha no controle do prottipo so:

    Seta para cima: Prottipo movimenta se para frente.

    Seta para baixo: Prottipo movimenta se para trs.

    Seta para direita: Prottipo movimenta se para direita.

    Seta para esquerda: Prottipo movimenta se para esquerda.

    CD: Calibra o sensor vertical.

    TAPE: Calibra o sensor horizontal.

    POWER: Ativa/desativa os sensores.

  • MUTE: Controla a velocidade.

    Neste controle remoto para cada boto existem dois cdigos que so emitidos alternadamente quando se pressiona o boto. Desta forma ao se pressionar um boto pela primeira vez o

    controle envia um cdigo ao receptor ou se pressionar este mesmo boto uma segunda vez o controle envia um segundo cdigo alternando entre estes dois cdigos toda vez que boto for

    pressionado. Os cdigos emitidos por cada boto pressionado no controle sero vistos quando se tratar do desenvolvimento do software no prximo captulo.

    A Figura E mostra como o sensor IR foi ligado porta 13 do Arduino e tambm ao pino GND e ao pino 5v, que fornecem alimentao ao sensor.

    Um resistor de 220 ohms foi ligado em srie 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 alimentao para filtrar possveis interferncias, que prejudicariam o correto funcionamento do sensor.

    A

  • B

  • C

  • D

  • E

  • 4

    Ponte H

    A Ponte H o circuito eletrnico utilizado em automao para controlar o sentido de rotao e/ou a velocidade de giro dos motores de corrente continua. Como o prottipo da cadeira de

    rodas deve conseguir se deslocar tanto para trs como para frente e ter sua velocidade de deslocamento controlada, o uso da Ponte H se fez necessrio.

    Basicamente, a Ponte H controla o sentido e a quantidade de corrente eltrica da bateria a ser repassada aos motores do prottipo, de acordo com os sinais enviados pelo Arduino. Ou seja,

    a Ponte H um item intermedirio entre o Arduino e os motores, funcionando tambm como um circuito de proteo para o Arduino uma vez que os motores no podem ser ligados

    diretamente ao Micro controlador, sobre o risco de danific-lo, pois os motores consomem uma correte eltrica muito acima daquela que as portas do Arduino podem oferecer.

    No prottipo 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 so

    facilmente encontrados em placas de equipamentos eletrnicos que esto em desuso, podendo assim ser reaproveitados para a montagem da mesma. Na Figura A apresentado o diagrama do

    circuito eltrico usado na montagem da Ponte H.

    Os transistores Q1 e Q3, modelo BC558 e Q2 e Q4 modelo BC548 funcionam como chaves e so ativados ou desativados de acordo com os sinais enviados pelo Arduino, atravs de suas

    portas digitais, que chegam Ponte H pelas entradas 1 e 2. Os diodos modelo IN4004 ligados em paralelo aos transistores, tem a funo de proteg-los de uma possvel 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 mximo 40 miliamperes, sendo que valores acima deste, podem danificar o micro controlador. Na Figura B possvel ver a Ponte H em vrios

    ngulos depois de pronta.

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

    Figura 32.

    As portas utilizadas foram 5, 6, 9 e 10 do Arduino, escolhidas por forneceram sinal PWM, importante para o controle da velocidade do prottipo. possvel observar que existe uma fonte

    exclusiva de energia para ponte H e consequentemente para os motores, pois eles esto conectados a ponte H e consomem bem mais corrente do que o micro controlador, tornando invivel o

    fornecimento de corrente eltrica atravs do Arduino sobe o risco de danifica-lo.

    A ponte H que controla o motor direito teve suas conexo ligadas s portas 5 e 6 do Arduino, j A ponte H que controla o motor esquerdo teve suas conexes ligadas s portas 9 e 10.

  • A

  • B

  • C

    5

    Motores

    Para a locomoo do prottipo, a inteno inicial era utilizar dois motores de corrente contnua, um para cada roda traseira. Entretanto, uma das caractersticas dos motores de corrente

    continua apresentar uma alta velocidade de giro e um pequeno torque, o que o tornaria invivel para o uso no prottipo, 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 diferenas de giro e torque, o motor deve estar acoplado a uma caixa de reduo de giro, que faz a inverso destes valores, reduzindo a velocidade de giro

    e aumentando o seu torque atravs de engrenagens. No mercado podem ser encontrados alguns motores que j vem com esta caixa de reduo acoplada, mas para se obter o efeito pretendido,

    neste trabalho foram usados dois servos motores utilizados em antenas receptoras de TV via satlite.

    Os servos motores possuem uma limitao de giro do seu eixo, sendo que na maioria das vezes s pode girar 180. Para serem usados no prottipo, eles passaram por uma adaptao, onde

    foi retirada uma trava presente em uma das engrenagens de reduo de giro (vista na Figura A-A), o interior de um potencimetro (visto na Figura A - B), assim como sua placa de controle

    (visto na Figura A - C).

    Aps estas adaptaes, o servo motor se transformou em um motor de corrente contnua, com uma caixa de reduo acoplada, exatamente o que era necessrio para o prottipo. A Figura

    B mostra como os motores foram adaptados na estrutura do prottipo e como as rodas foram encaixadas diretamente no eixo de sada da caixa de reduo do motor.

    Os motores foram ligados ponte H e esta por sua vez, foi ligada ao Arduino e as baterias. O esquema desta ligao pode ser conferido na Figura 32 do tpico anterior.

  • A

  • B

    6

    Buzzer piezoeltrico

    No prottipo, o buzzer foi usado com a finalidade de emitir sinais sonoros de alerta (bips). A opo de utilizar o buzzer piezoeltrico e no um alto-falante comum por exemplo, foi devido

    a seu tamanho mais compacto, maior robustez e uma maior eficincia na reproduo de sons na faixa de frequncia que esto os sinais de alerta. Sendo que o buzzer em relao 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 durao destes sinais depender da programao feita no micro controlador.

  • Na Figura A visto a ligao do buzzer a porta 13 do Arduino, em srie com uma juno de dois resistores de 100 ohms cada, ligados em paralelo, gerando assim uma resistncia de 50

    ohms. Esta juno dos resistores foi usada porque no foi encontrado um nico resistor com resistncia prxima a este valor. Esta resistncia importante para limitar a corrente consumida

    pelo buzzer e no danificar a porta do Arduino.

    A

    7

    LEDs

  • No prottipo, 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

    obstculo detectado pelos sensores do prottipo. J o que emite luz na cor verde foi utilizado para sinalizar a recepo 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 cilndrico, foram ligados ao Arduino em paralelo a um resistor de 330 ohms para limitar a corrente que circula entre seus polos evitando

    possveis 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 A.

    A

    8

    Baterias

  • Para a alimentao do prottipo, 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 eltrica o

    deixaria limitado a conexes com o cabo de energia. Para alimentar o Arduino foi utilizada uma bateria de 9 volts comum e para alimentao da ponte H e motores foram utilizadas trs pilhas

    pequenas em srie totalizando 4,5 volts.

    A Figura A mostra como as baterias foram adaptadas ao interior do prottipo e ligadas a uma chave, que tem a funo de ligar e desligar a alimentao do prottipo.

    A

    9

    Montagem da estrutura do prottipo

  • O chassi do prottipo foi feito a partir de uma estrutura plstica onde foram adaptados os motores com as rodas traseiras, as rodas dianteiras e uma armao feita com fios de cobre de 6

    mm, moldados e soldados em formato de uma cadeira, como pode ser visto na Figura A.

    Em seguida, foi acoplada a esta estrutura uma haste para a sustentao dos sensores ultrassnicos. Nesta haste foram presos conectores, permitindo que os sensores possam ser facilmente

    encaixados e desencaixados.

    A armao de fios de cobre em forma de cadeira e a estrutura plstica 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 B.

    O Arduino foi adaptado na parte de trs do encosto da cadeira. J as pontes H, uma para cada motor, foram adaptadas na sobre os prprios motores. O LED vermelho que sinaliza a deteco de

    obstculos pelos sensores foi adaptado no brao direito da cadeira, e o LED verde que sinaliza a recepo 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 tambm apresentou problemas, pois captava muita interferncia junto ao sinal fornecido pelo controle remoto, a soluo foi o uso de um capacitor cermico em paralelo com

    seus terminais de alimentao. Este capacitor ajudou a filtrar estas interferncias, resolvendo o problema.

    De uma forma geral o processo de montagem do hardware foi tranquilo com todos os componentes funcionando dentro do esperando.

  • A

  • B

    10

    DESENVOLVIMENTO DO SOFTWARE

    O software foi desenvolvido na IDE verso 1.0 do Arduino, utilizando a linguagem de programao C/C++. Trata-se de um software embarcado, ou seja, feito

    especificamente para funcionar em dispositivos com recursos de processamento e memria escassos, se comparados aos computadores convencionais. O uso do

    computador se fez necessrio para o desenvolvimento e a compilao do cdigo pois uma vez tendo sido gerado o executvel binrio proveniente da compilao, ele

    transferido e instalado via conexo USB no Arduino, no sendo mais necessrio o uso do computador. O objetivo bsico e principal do software controlar e integrar o

    funcionamento dos diversos componentes de hardware interferindo nos comandos do usurio a fim de alertar e proporcionar segurana no controle de uma cadeira de rodas

    motorizada.

  • A interao do usurio com o software ocorre atravs do controle remoto. A Tabela na Figura A mostra as aes realizadas pelo software quando pressionado cada boto no controle

    remoto e o cdigo corresponde a este boto.

    Alm das interaes bsicas de movimentao do prottipo, foi implementado no software outras quatro. Ao pressionar o boto Power o usurio pode habilitar ou desabilitar os sensores que

    detectam obstculos. Esta funo importante se o usurio desejar utilizar apenas as funcionalidades de movimentao. J ao pressionar o boto MUTE o software comanda um aumento ou

    reduo da velocidade de deslocamento do prottipo. Existem duas velocidades pr-programadas o usurio pode apenas escolher qual ele quer usar.

    Os botes CD E TAPE tem funcionalidade parecida e importante. Ao ser pressionado o boto CD, o software captura a distncia em que o sensor instalado na posio vertical est do solo

    naquele momento. Com referencia nesta distncia o software calcula se existe algum buraco ou elevao no trajeto do prottipo. O boto TAPE ao ser pressionado faz com que o software

    capture a distncia entre o sensor instalado na posio horizontal e o obstculo mais prximo naquele momento. exatamente a esta distncia que o software ir parar o prottipo e ligar os

    sinais de alerta quando o sensor detectar algum obstculo e ao dobro desta distncia, o prottipo reduz sua velocidade e tambm emite sinais de alerta.

    Para controlar os dois sensores Ultrassnicos e o sensor IR foram utilizadas bibliotecas que simplificaram em muito a programao, no Cdigo 1 a seguir, pode ser visto o uso das bibliotecas e

    a declarao de variveis globais que tem papel fundamental no controle do prottipo.

    Cdigo 1: Bibliotecas

    1 #include "Ultrasonic.h"

    2 #include

    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;

  • Na primeira linha do cdigo esta o include da biblioteca Ultrasonic.h[1] responsvel por facilitar a programao dos sensores ultrassnicos. Esta biblioteca no vem nativamente na IDE

    do Arduino, mas livre para o uso e modificao 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 ultrassnico que foi usado no prottipo na posio horizontal ultraHorizontal e o outro ao sensor que foi instalado no prottipo na posio vertical,

    ultraVertical. Os parmetros se referem as portas do Arduino em que os terminais dos sensores foram conectados. Na linha 2 est o include da biblioteca IRremote.h[2] responsvel por

    decodificar os sinais que o sensor IR recebe do controle remoto.

    Esta biblioteca tambm no nativa da IDE do Arduino, mas tambm facilmente encontrada na internet e adicionada s bibliotecas do Arduino. Mas a diante na linha 6, cria-se o objeto

    receptor do tipoIRrecv, para recepo dos sinais infravermelhos. O parmetro exigido corresponde ao nmero da porta em que o pino de sada 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 decodificao do sinal recebido. Da linha 9 at a linha 15 so declaradas variveis globais

    fundamentais para que haja uma interao entre os comandos do controle remoto, as informaes dos sensores e o controle de direo e velocidade do prottipo, assim como o acionamento ou

    no dos dispositivos de alerta.

    No Codigo 2 mostrado em seguida, pode-se ver a funo setup().

    Cdigo 2: Funo 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 }

    [1] http://tetrasys-design.net/download/HCSR04Ultrasonic/HCSR04Ultrasonic-1.1.2.tar.gz

    [2] http://www.pjrc.com/teensy/arduino_libraries/IRremote.zip

  • Como visto no captulo 3 deste trabalho, a funo setup() a primeira a ser chamada quando se inicia o dispositivo e uma funo de preparao para os pinos do Arduino. Neste caso o

    comando pinMode() dita o comportamento dos pinos, se eles sero entradas de dados ou sadas. Na linha 19 o pino 3 do Arduino esta sendo configurado como sada, este pino esta conectado a

    um LED vermelho que no prottipo tem a funo de emitir sinais de alerta. Detalhes relacionados ao que est conectado a cada pino do Arduino foi descrito no captulo 6.

    Neste software, todos os pinos foram configurados como sada. Vale ressaltar que os pinos utilizados pelos sensores ultrassnicos e IR no esto especificados na funo setup() pois

    devido ao uso das bibliotecas para controlar estes dispositivos esta configurao no foi necessria, mas caso no se faa o uso das bibliotecas estes pinos devem ser configurados na funo

    setup(). Tambm nesta funo, na linha 28 temos a inicialio do receptor de sinais infravermelhos.

    A segunda funo a ser chamada pelo Arduino a funo loop() vista no Cdigo 3 a seguir.

    Cdigo 3: Funo 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();

    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 }

    A funo Loop a principal do cdigo fonte e executada repetidamente bem como todas as demais funes nela embarcadas. As condicionais que tornam possvel o controle do prottipo

    atravs do controle remoto esto na funo loop().

    Na linha 33 temos um comando while cuja condio de permanncia no loop o sensor IR est recebendo algum sinal, caso positivo a porta 11 do Arduino configurada para fornecer sinal

    lgico em nvel alto, ascendendo o LED verde indicando a recepo de sinal pelo sensor IR, este cdigo de acionamento da porta 11 pode ser visto na linha 34, j na linha 35 a porta 3

    configurada para fornecer sinal de nvel lgico baixo, isso faz com que o LED vermelho fique apagado pois a funo que verifica se existe algum obstculo detectado pelos sensores ainda no

    foi chamada e somente neste caso que ele deve permanecer aceso.

    Na linha 36 temos uma condicional que verifica se o usurio configurou o prottipo para se locomover em uma velocidade lenta ou rpida. Caso tenha sido em velocidade rpida, a funo

    VelocMaxima(), que impem aos motores a maior velocidade possvel acionada. Caso contrrio, a velocidade continua sem alterao, isto importante, pois dependendo da distncia que o

    sensor estiver de um determinado obstculo, a velocidade de deslocamento do prottipo ser reduzida automaticamente independente das configuraes do usurio. O teste da linha 36 permite

    que a velocidade volte para a configurao do usurio, caso o obstculo esteja mais no campo de viso do sensor.

  • As condicionais que permitem executar determinadas aes no prottipo de acordo com o boto pressionado no controle remoto comeam na linha 39 onde o atributo value do objeto resultado,

    que contem o cdigo correspondente ao boto pressionado no controle remoto comparado aos cdigos previamente conferidos, que correspondem a um determinado boto no controle

    remoto, no primeiro if na linha 39 pode ser visto o cdigo 3344 e 1296 que correspondem ao boto seta para cima.

    So dois cdigos porque especificamente neste modelo de controle remoto da Philco utilizado no trabalho emitido um cdigo quando se pressiona o boto uma vez e outro ao pressionar o

    boto novamente. No caso do cdigo presente na decodificao do sinal recebido pelo sensor IR coincidir com 3344 ou 1296 quer dizer que o boto seta para cima no controle remoto foi

    pressionado, ento chamada a funo Detecta() que ser vista mais a diante. Nas linhas seguintes o mesmo processo se repete para que de acordo com o boto pressionado as funes Re(),

    Direita(), Esquerda(), CalibraDistVer(), CalibraDistHor(), LigaDesligaSensores() e ControlVeloc() sejam executadas, as principais destas funes tambm sero detalhadas a seguir e o cdigo

    completo pode ser visto no Apndice I deste trabalho.

    Na linha 63 j no final da funo loop(), mas ainda dentro do while o receptor preparado para receber um novo valor de decodificao do sinal recebido pelo sensor IR e logo abaixo na linha

    64 uma varivel inteira, usada como contador, iniciada com o valor 0, toda vez que a execuo do programa sair do while o contador incrementa mais um e aguarda por dez milissegundos

    usando a funo 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 prottipo sero desativas

    com o acionamento da funo Parar() e a configurao das portas 3 e 11 do Arduino com sinal de nvel lgico baixo. Esta estratgia de esperar quinze vezes antes de se desabilitar as atividades

    no prottipo importante para que no haja intermitncia no funcionamento do prottipo devido a interferncias na recepo do sinal do controle remoto.

    O prximo trecho de cdigo fonte a ser analisado e a funo Detecta(), Cdigo 4, criada para detectar a presena de obstculos atravs dos sensores ultrassnicos, disparar ou no os

    sinais de alerta, diminuir a velocidade e parar o prottipo no caso de haver risco de coliso ou queda em algum buraco ou desnvel no piso.

    Cdigo 4: Funo 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;

    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)){

    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 funo acionada sempre que for pressionado o boto Seta para cima no controle remoto. O primeiro teste executado na funo a verificao se o usurio ativou ou no os sensores

    atravs de uma condicional na linha 77, caso verdadeiro as variveis distVertical e distHorizontal recebem os valores de distncia em centmetros fornecidos pelos sensores Ultrassnicos

    atravs de clculos do tempo de emisso de ondas sonoras e o retorno do eco realizados pela biblioteca Ultrasonic.h. Estes valores sero testados mais adiante com distancias configuradas pelo

    usurio como limite mnimo em que o prottipo pode se aproximar de um objeto. Caso o usurio tenha optado por no ativar os sensores, as variveis simplesmente recebem os mesmos

    valores sempre, no havendo assim a deteco de obstculos.

    Na linha 75 onde os valores de distncia fornecidos pelos sensores ultrassnicos so comparados s distancias limite, nas variveis calibraVertical para o sensor que detecta buracos ou

    protuberncias e calibraHorizontal para o sensor que detecta obstculos frente do prottipo. A distncia vertical testada a fim de comparar se ela menor que a distncia que o sensor esta

    do solo menos um centmetro, caso seja, isso quer dizer que existe algum obstculo a frente do prottipo e este obstculo maior que dois centmetros. Da mesma forma tambm testado se a

    distncia vertical maior que a distncia que o sensor esta do solo mais um centmetro, neste caso se positivo, quer dizer que existe um buraco ou desnvel a frente do prottipo.

    O ltimo teste desta condicional referente a distncia horizontal, neste caso testado se ela menor que a distncia mnima possvel configurada pelo usurio para que o prottipo se

    aproxime de algum obstculo. Se algum destes casos se confirmarem como positivo o algoritmo faz uma chamada a funo Parar() na linha 86 imobilizando o prottipo logo em seguida na

  • linha 87 ascende o LED vermelho conectado ao pino 3 do Arduino e chama por trs vezes nas linhas 88, 89 e 90 a funo Bip() e para cada chamada fornecido parmetros diferentes que

    tambm fazem produzir variaes 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 funo Bip() sero

    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 obstculo que esteja ao dobro da

    distncia configurada pelo usurio com a mnima possvel para o prottipo se aproximar.

    Caso o prottipo entre nesta regio que fica compreendida entre a distncia mnima de segurana onde o prottipo parado automaticamente e o dobro desta distncia o algoritmo faz uma

    chamada a funo VelocMedia() na linha 93. Esta funo faz com que o prottipo diminua sua velocidade caso ele esteja em sua velocidade mxima. Em seguida feita uma chamada a funo

    Frente() para que o prottipo continue em frente, na linha 95 o LED vermelho aceso, j na 96 chamada a funo Bip(), com parmetros para se produzir um bip curto em seguida o LED

    vermelho apagado. Isto faz com que toda vez que o prottipo se aproxime de um obstculo detectado pelo sensor que est na posio horizontal a uma distncia suficiente para satisfizer o

    teste condicional da linha 92 o prottipo diminuir a velocidade e piscara o LED vermelho emitindo bips curtos de alerta pelo Buzzer para que o usurio possa ver que esta se aproximando de

    um obstculo e corrigir seu percurso antes que o prottipo pare.

    Caso no haja nenhum obstculo detectado pelos sensores, o algoritmo apenas verifica na linha 100 se a velocidade esta compatvel com a escolha do usurio, mas adiante chama a funo

    Frente() para que o prottipo se locomova para frente pois no a nada o obstruindo e mantem o LED vermelho apagado.

    No Cdigo 5 a seguir analisado as funes CalibraDistVer() e CalibraDistHor().

    Cdigo 5: Funo 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 funes foram criadas para que o usurio possa escolher a menor distncia que o prottipo da cadeira de rodas pode se aproximar de um objeto antes de parar automaticamente. Isto para

    os objetos detectados pelo sensor que esta na posio horizontal. J para o sensor que esta na posio vertical a distncia que ele fica do solo fixa e deve se mantida, mas devido a atritos o

    valor desta distncia pode variar interferindo na correta eficincia do software, por isso importante calibrar esta distncia antes de usar o prottipo.

    O algoritmo funciona da seguinte maneira: para calibrar o sensor vertical necessrio pressionar o boto CD no controle remoto isto faz com que a funo CalibraDistVer() seja chamada e

    nela, a varivel global calibraVertical recebe e armazena o valor da distncia lida pelo sensor naquele momento e esta distancia que sera usada como parmetro pelo software, isto ocorre na

    linha 110 do trecho de cdigo fonte analisado.

    Para confirmar que a calibrao 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 calibrao horizontal, porm, neste caso deve ser pressionado no controle remoto o boto TAPE. Toda vez que for feito um teste de comparao entre distancias ser

    usado este valor ate que o usurio calibre novamente.

    Para que o prottipo possa se locomover para frente, para os lados, para trs e tambm parar, foram implementadas diversas funes que podem ser vistas no Cdigo 5 a seguir:

    Cdigo 6: Funes para movimentao e parada do prottipo

    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 prottipo se movimente preciso acionar os motores. E quem faz o acionamento dos motores a ponte H, ento na verdade o que o software esta controlando neste trecho so as

    tenses enviadas a pontes H, no prottipo foram utilizadas duas, uma para cada motor e cada ponte H necessita de duas portas do Arduino.

    Na funo Parar() temos o comando analogWrite(9, LOW), na linha 36, este comando faz com que o pino 9 do Arduino fornea 0 volts (nvel lgico baixo) a entrada da ponte H. possvel

    notar que este mesmo valor fornecido a todas as entradas da ponte H e como visto no captulo 2 deste trabalho, esta configurao proporciona a parada do motor.

    Sempre que necessrio que o prottipo se locomova pra frente feito uma chamada a funo Frente() na linha 142. Esta funo aciona os dois motores no mesmo sentido e ao mesmo tempo.

    O uso das variveis velocidadeM1 e velocidadeM2 para que se possa controlar a velocidade em que o prottipo se desloca. Isto possvel porque a principal caracterstica do comando

  • analogWrite(pino, valor) como visto no captulo 3 deste trabalho gerar uma tenso analgica em um pino digital utilizando o sinal PWM (pulse width modulation), para isso so requeridos

    dois parmetros, o nmero do pino em que essa tenso deve ser gerada e a amplitude desta tenso que pode variar de 0 correspondendo a 0 volts at 255 que corresponde a 5 volts no Arduino.

    Se nas variveis velocidadeM1 e velocidadeM2 estiver o valor 0 (zero) o prottipo permanecer parado, a proporo em que este valor for aumentando tambm aumentara a velocidade de

    deslocamento do prottipo at o mximo de 255 que correspondera a mxima velocidade do prottipo.

    A funo Re() na linha 150 funciona exatamente como a funo frente, porm os valores nas portas do Arduino foram invertidos, isso faz com que o prottipo se locomova para trs. J na

    linha 159 temos a funo Direita() que como o prprio nome sugere faz com que o prottipo vire a direita. Ela tem o mesmo princpio de funcionamento da funo Frente() porm para que o

    prottipo se locomova para frente preciso que as duas variveis velocidadeM1 e velocidadeM2 tenham o mesmo valor. j para que ele vire a direita o motor da esquerda deve girar mais

    rpido do que o da direita isto conseguido fixando um valor baixo no comando da linha 163, analogWrite(5, 80), com isto quando esta funo for chamada o motor da esquerda sempre girara

    mais rpido virando o prottipo para a direita.

    Para girar prottipo para a esquerda a funo Esquerda() da linha 168 usa exatamente o mesmo princpio porm agora o motor da direita e que gira mais devagar. O comando delay(100) no

    final de cada funo tem o objetivo de fazer com que a execuo do programa espere por 100 milissegundos antes de encerar, isto evita o surgimento de intermitncia devido a alguma

    dificuldade de recepo dos sinais do controle remoto.

    O ltimo trecho de cdigo fonte analisado ser o da funo Bip() vista no

    Cdigo 6, esta funo que permite ao Buzzer emitir sinais de alerta.

    Cdigo 7: Funo 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 funo exclusiva para produzir notas musicais, porm com o uso da biblioteca IRremote.h ouve um conflito que no possibilitou o uso da funo tone() j presente no

    Arduino e ento a funo Bip() foi implementada para resolver o problema. Para fazer o Buzzer vibrar, escrevemos no pino do Arduino em que ele est ligado uma sequncia de valores HIGH

    (valor lgico alto) e LOW (valor lgico baixo), tantas vezes por segundo quanto for a frequncia da nota. Para isto foi usado o comando for da linha 126. O parmetro tom diz respeito a

  • frequncia do som, quanto mais baixo for o valor da varivel tom, mais agudo ser o som emitido. J o parmetro durao esta relacionado durao do som e quanto maior o seu valor maior

    ser o tempo de durao do som emitido.som, quanto mais baixo for o valor da varivel tom, mais agudo ser o som emitido. J o parmetro durao esta relacionado durao do som e

    quanto maior o seu valor maior ser o tempo de durao do som emitido.

    A

    11

    CONSIDERAES FINAIS

    De uma forma geral, conseguiu-se chegar ao objetivo principal do Projeoto, produzindo um software estvel, embarcado num micro processador e controlando um prottipo semelhante a uma

    cadeira de rodas motorizada, que possibilitou uma boa interao entre software e hardware. A principal funo do software tambm correspondeu s expectativas cumprindo seu papel de

    auxiliar o usurio no controle do prottipo. Os conhecimentos adquiridos nas pesquisas bibliogrficas foram de fundamental importncia para a concluso bem sucedida do trabalho e

    acrescentaram de maneira significativa aos conhecimentos j adquiridos.

  • Este trabalho buscou unir a crescente utilizao de sistemas embarcados em uma grande parcela de dispositivos eletrnicos encontrados em nosso dia-a-dia a uma crescente necessidade de se

    desenvolver produtos que atendam os anseios de pessoas com algum tipo de deficincia fsica, tanto para proporcionar maior conforto e segurana, quanto para propiciar uma melhor

    integrao 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 ateno voltada a pessoas com necessidades especiais por parte daqueles que detm conhecimentos para desenvolver novas tcnicas ou aprimorar as j existentes nesta rea que

    muitas vezes negligenciada por parte dos pesquisadores.

    Alm do lado acadmico este trabalho tambm teve um lado humanista voltando o uso de tecnologias de diversas reas para o desenvolvimento de tcnicas para facilitar a vida de pessoas que

    por algum motivo tiveram sua capacidade de locomoo parcialmente reduzida ou completamente comprometida e, alm disso, ainda tem alguma deficincia visual, motora ou cognitiva que

    os impossibilitem de controlar uma cadeira de rodas motorizada. O prottipo produzido e apresentado neste trabalho apenas uma amostra que se pode conseguir grande sucesso nesta rea,

    atravs do uso de micro controladores com maior poder computacional assim como o uso de um maior nmero de sensores e atuadores de diversos tipos.