Light Tracker Robô Apontador de Fonte Luminosa

Propaganda
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
DEPARTAMENTO ACADÊMICO DE INFORMÁTICA
CURSO DE ENGENHARIA DE COMPUTAÇÃO
Juan Pietro Cucolo Marçula
Laudelino Adão Junior
Sergio Augusto Massami Nakanishi
Vinicius Silva Mazzola
Light Tracker
Robô Apontador de Fonte Luminosa
CURITIBA
2012
2
Juan Pietro Cucolo Marçula
Laudelino Adão Junior
Sergio Augusto Massami Nakanishi
Vinicius Silva Mazzola
Light Tracker
Robô Apontador de Fonte Luminosa
Monografia apresentada à Disciplina Oficina de
Integração II, do Curso Superior de Engenharia de
Computação da Universidade Tecnológica Federal do
Paraná.
Orientador: Juliano Mourão Vieira
CURITIBA
2012
3
LICENCIAMENTO
Este trabalho está licenciado por Juan Pietro Cuculo Marçula, Laudelino
Adão Junior, Sergio Augusto Massami Nakanishi e Vinicius Silva Mazzola uma
Licença Creative Commons Atribuição – Obras Derivadas Proibidas 3.0 Brasil.
Para
ver
uma
cópia
desta
licença,
visite
http://creativecommons.org/licenses/by-nc-sa/3.0/br/ ou envie uma carta para
Creative Commons, 171 Second Street, Suite 300, San Francisco, California.
4
RESUMO
O rápido crescimento da população mundial, resultando em um maior consumo
de energia, aliado ao fato da natureza limitada dos combustíveis fósseis e à
poluição que a queima desses combustíveis geram, questiona o atual modelo
energético. A conseqüência disso é o aumento da procura por fontes limpas de
energia, e uma boa alternativa para o futuro é a energia solar. O projeto
vislumbra a construção de um dispositivo de baixo custo que possui a função
de fazer com que haja uma maior captação de luz solar para que haja uma
maior geração de energia elétrica.
O projeto consiste no acoplamento de sensores de luz (LRD) (que estão
ligados ao Arduino) na placa solar, que têm seus valores de resistência lidos
pelo Arduino, que transfere essa informação ao software. Ele possui a função
de receber esses valores e fazer o cálculo adequado para o controle do servo
motor. Ou seja, o software fará os cálculos a partir dos valores lidos pelo
Arduino e a partir deles, irá determinar a direção que o servo motor girará para
a obtenção de uma maior captação de luz. A placa solar está dentro de um
sistema físico composto pela estrutura que é tida como suporte e pelo servo
motor.
.
Palavras Chave: Light Tracker, Arduino, LDR,Servomotor, Robô,
Apontador de foco luminoso, Robótica;
5
ABSTRACT
The
fast growth
of
world
population, resulting
in higher
power
consumption, coupled with the fact of the limited nature of fossil fuels and the
pollution that burning these fuels generate, questions the current energy
model. The consequence is an increased demand for clean sources of energy,
and a good alternative for the future is the solar energy. The project envisages
the construction
of an inexpensive
device that
has the
function of
getting a greater capture of sunlight, so there is a higher power generation.
The
project consists
in coupling light
sensors (LRD)
(which are
connected to Arduino) in the solar panel, that have their resistance values read
by Arduino,
which
transfers this
information to
the
software. It
has the
function of receiving these values, making the appropriate calculation to control
the servo motor. That is, the software will do the calculations from the values
read
by
the Arduino and
from
them, it
will
determine which
direction
the servo motor must rotates to obtain a greater light gathering. The solar
panel is within a physical system composed of the structure that is seen
as support and the servo motor.
Key Words: Light Tracker, Arduino, LDR, Robots, Servomotor.
6
LISTA DE FIGURAS
1
Arduino
15
2
O LDR
16
3
Constituição do LDR
16
4
Servomotor Hextronik HXT900
17
5
Circuito divisor de tensão
18
6
Diagrama de blocos
21
7
Possíveis posições do servomotor
24
8
Posições dos LDR’s
25
9
Circuito divisor de tensão para o sistema de sensoriamento
26
10
Ambiente de desenvolvimento Arduino
27
11
Modelo 3D em visão geral
29
12
Haste em destaque no modelo 3D(a) e em acrílico(b)
30
13
Base em destaque no modelo 3D(a) e em acrílico(b)
31
14
Esferas em destaque no modelo 3D
32
15
Arduino e LDRs em destaque no modelo 3D
32
16
Servomotores em destaque no modelo 3D
33
17
Espelho de mesa
34
18
Chapas de plástico
34
19
Chapas de foam
35
7
LISTA DE TABELAS
1
Classificação de robôs segundo a JIRA
12
2
Classificação robôs por coordenadas
14
3
Componentes, quantidade e preço
36
4
Peças do esqueleto
36
8
Sumário 1. INTRODUÇÃO ............................................................................................. 9 1.1. Objetivos .............................................................................................. 10 1.2. Metodologia ......................................................................................... 11 2. FUNDAMENTAÇÃO TEÓRICA ................................................................. 12 2.1. Robôs e Robótica ................................................................................ 12 2.1.1. Vantagens e desvantagens do uso de robôs ................................... 13 2.1.2. Componentes de Robôs .................................................................. 13 2.1.3. Orientação e movimentação de um Robô ....................................... 14 2.1.4. Características de Robôs ................................................................. 14 2.2. Arduino................................................................................................. 15 2.3. LDR ...................................................................................................... 16 2.4. Servomotor .......................................................................................... 17 2.4.1. Arduino e Servomotor.................................................................... 18 2.5. Divisor de Tensão ................................................................................ 18 3. DESENVOLVIMENTO DO PROJETO ....................................................... 21 3.1. Sistema proposto ................................................................................. 22 3.2. Hardware ............................................................................................... 22 3.2.1. Processador/Controlador ................................................................ 23 3.2.2. Atuadores ......................................................................................... 23 3.2.3. End Effector ..................................................................................... 24 3.2.4. Sensores .......................................................................................... 24 3.3. Software ................................................................................................. 26 3.4. Esqueleto ............................................................................................... 29 3.4.1. Materiais........................................................................................... 34 3.5. Custos .................................................................................................... 35 3.6 Problemas, erros e possíveis soluções .................................................. 37 3.6.1 Limitação de movimentação ............................................................. 37 3.6.2 Detecção da não necessidade de movimento em condições de
baixíssima luminosidade ............................................................................ 37 5. CONCLUSÕES .......................................................................................... 38 6. REFERÊNCIAS............................................................................................. 40 APÊNDICE A – Diagrama de classes do software ....................................... 41 APÊNDICE B – Software desenvolvido ......................................................... 42 APÊNDICE C – Diagrama de Gantt ................................................................ 49 9
1.
INTRODUÇÃO
A decisão em desenvolver esse trabalho levou em consideração a atual
situação energética do planeta. Nos dias de hoje, há uma busca intensa por
fontes renováveis de energia, já que ultimamente as fontes não-renováveis têm
poluído demasiadamente o meio ambiente. Portanto, a construção do projeto
visa desenvolver, em menores proporções, um possível meio de otimizar a
captação de energia solar, que seria de grande utilidade para a questão
energética planetária, tendo em vista também o crescimento desenfreado do
número de habitantes do planeta, resultando em um aumento de consumo
energético.
O trabalho que será realizado constitui em desenvolver um dispositivo
que serve para a otimização da captação da luz solar de maneira automática.
Para isso, serão utilizados os conhecimentos em várias áreas diferentes, como
a eletrônica e a programação, que deverão ser integrados para o
desenvolvimento do projeto.
O dispositivo poderá ser tido como uma boa alternativa para o futuro,
tendo em vista a questão energética já citada, o fato de ser uma boa forma de
geração de energia limpa, e pelo fato dele ser de baixo custo.
O sensor de luminosidade será conectado ao computador, que irá
executar um software, e que por sua vez, fará os cálculos necessários para
indicar qual a direção que a placa solar precisará girar.
10
1.1. Objetivos O objetivo principal do projeto é a construção de um dispositivo
mecânico capaz de se direcionar a fonte luminosa de maior intensidade no
ambiente em que está situado. Além disso, o desenvolvimento do dispositivo
visa o aperfeiçoamento das habilidades dos membros da equipe em relação ao
conhecimento teórico, pois será necessária a busca e integração desses
conhecimentos no decorrer do desenvolvimento do dispositivo, ou em relação
às habilidades que não estão associadas ao conhecimento teórico, como por
exemplo, o trabalho em equipe, que será muito exercitado durante a
construção do projeto.
11
1.2. Metodologia Para a concepção e desenvolvimento do solar tracker foi aplicada uma
metodologia de desenvolvimento direta, onde as tarefas são analisadas,
executadas e testadas/verificadas. As tarefas foram divididas em diferentes
grupos.
Primeiramente, foi realizada uma análise dos requisitos do projeto,
como, por exemplo, os requisitos de hardware a serem utilizados, materiais
para a construção da base do robô, entre outros. Foram também
analisados os conteúdos envolvidos no desenvolvimento do projeto e o
tempo necessário para estudá-los e condensá-los na produção do robô.
Seguinte a essa etapa e possuindo uma noção geral do projeto, foi
produzido um cronograma de atividades a serem realizadas, tanto
individualmente como coletivamente.
Foi necessária a pesquisa e encomenda dos equipamentos de hardware
e dos materiais para construção do robô.
O projeto foi desenvolvido em cerca de 10 semanas, desde a ideia até a
implementação, com um tempo total de cerca de duzentas e cinquenta
horas gastas entre reuniões semanais, modelagem de protótipo, construção
do robô físico, desenvolvimento de código, entre outros.
12
2.
FUNDAMENTAÇÃO TEÓRICA
2.1. Robôs e Robótica Robôs diferenciam-se de outros equipamentos industriais devido ao fato de
não serem controlados e operados por um humano, pois o controle é feito por
um programa contido em um computador ou dispositivo similar. Assim, se o
programa é mudado, as ações do robô também mudam, tornando possível ter
um dispositivo capaz de realizar diferentes tarefas. Isto abre uma gama de
possiblidades que pode-se fazer com o dispositivo sem necessidade de refazelo.
Existem várias classificações de robôs para diferentes instituições em
países distintos. De acordo com a Associação Japonesa de Robôs Industriais
(JIRA, em sua sigla original em inglês) existem seis classes de robôs.
Classe
Classe 1
Classe 2
Classe 3
Classe 4
Classe 5
Classe 6
Nome
Dispositivo de
tratamento manual
Robô de sequencia fixa
Definição
Diversos níveis de liberdade, controlado
por um operador
Realiza sucessivos estágios de uma
tarefa de acordo com um
predeterminado método e é difícil de
modificar
Robô de sequencia
Semelhante a Classe 2, porem fácil de
variável
ser modificado
Robô de reprodução
Um operador executa a tarefa
manualmente conduzindo o robô, que
grava os movimentos e os repete.
Robô de controle
O operador fornece ao robô com um
numérico
programa de movimentação
Robô inteligente
Entende o ambiente e tem a habilidade
de completar uma tarefa com sucesso
apesar de ocorrerem mudanças nas
condições a sua volta.
Tabela 1 – Classificação de robôs segundo a JIRA
O instituto de robótica da América (RIA) considera apenas as classes de
3 a 6 como robôs. (NIKU, 2010)
13
2.1.1. Vantagens e desvantagens do uso de robôs O uso dos robôs pode, em muitas situações, aumentar a produtividade,
segurança, eficiência, qualidade e consistência dos produtos. Em ambientes
perigosos, onde a presença humana pode ser danosa aos mesmos, possuir um
robô para executar a tarefa é extremamente vantajoso. Pois, diferente de
humanos, robôs não precisam de conforto, não sofrem de fadiga ou tédio, não
têm necessidade de seguro médico ou férias.
A precisão de repetição de um movimento é muito maior em um robô,
podendo executar o mesmo movimento várias vezes.
Porém, o uso de robôs causa problemas econômicos e sociais, como a
substituição de trabalhadores humanos por robôs, aumentando o desemprego.
Outras desvantagens são que, o robô não consegue antever situações de risco
para as quais não foi programado, podendo causar danos, mas possuem alto
custo, tanto de produção quanto de manutenção. (NIKU, 2010)
2.1.2. Componentes de Robôs Manipulador é o corpo principal do robô, constituído por ligações e
junções.
Atuadores funcionam como os “músculos” do manipulado, exemplos
mais usuais são: servomotores, motores de passo, cilindros pneumáticos e
cilindros hidráulicos.
Os sensores são usados para coletar informações sobre o estado
interno do robô ou do ambiente à sua volta, permitindo que o robô se
comunique com o ambiente à sua volta. Exemplos comuns são: sensores de
luz, sonares, sensores de toque, entre outros.
O controlador funciona de forma semelhante ao cerebelo, controlando os
movimentos dos atuadores e coordenando o movimento com a resposta do
sensoriamento. Geralmente junto ao controlador está o processador, que
funciona como o cérebro do robô, ele calcula o movimento das junções,
determinando quanto e quão rápido cada uma irá se mover, gerenciando e
supervisionando as ações coordenadas do controlador e sensores.
14
Por fim, está o “End Effort”, ele é conectado à última junção do robô e
funciona de forma semelhante a uma mão. É quem realiza as tarefas e
conecta-se a outras máquinas. Geralmente o “End Effort” não é produzido junto
com o robô, ficando a cargo do dono providenciá-lo. O robô possui, assim,
apenas a conexão para o “End Effort”. (NIKU, 2010)
2.1.3. Orientação e movimentação de um Robô A movimentação de um robô geralmente segue uma configuração de
coordenadas pré-definidas. Junções do tipo prismática são denotadas pela
letra P e junções de revolução são denotadas pela letra R. A configuração do
robô é especificada por uma sucessão de R’s ou P’s. As mais comuns
configurações estão listadas na tabela a seguir.
Nome
Sigla
Cartesiana/Retangular 3P
Descrição
Possui três junções lineares que posicionam o
“End Effector”(sistema XYZ)
Cilíndrica
R2P
Possui duas junções lineares e uma junção de
revolução(sistema ΡϴZ)
Esférica
2RP
Possui uma junção linear e duas junções de
revolução para posicionar o “End Effector”
(Sistema ΡϴΦ)
Articulada/Antro
3R
Possui três junções de revolução,
mórfica
assemelhando-se ao braço humano
Tabela 2 – Classificação de robôs por coordenadas (NIKU, 2010)
2.1.4. Características de Robôs Payload – é o peso que o robô pode carregar sem sair de outras
especificações, como velocidade, precisão, entre outras.
Alcance – distância máxima que um robô pode alcançar dentro da
execução de suas tarefas
Precisão – é definida na forma de quão preciso um ponto especificado
pode ser atingido.
Repetitividade – Quão precisamente um robô pode atingir uma mesma
posição se o movimento é executado repetidas vezes. (NIKU, 2010)
15
2.2. Arduino O Arduino é uma placa que contém um microcontrolador de código
aberto para o desenvolvimento fácil da comunicação usuário-hardware. Ao
utilizar o Arduino para a construção de projetos, tem-se em vista a criação de
ferramentas que são acessíveis, de baixo custo e fácil usabilidade até mesmo
para iniciantes.
Ele possui diversos pinos digitais de entrada/saída e alguns pinos
analógicos de entrada, que permite a interação do Arduino com outros
sensores. Com as informações recebidas desses sensores, ele pode interagir
também com o ambiente, fazendo o controle de luzes e motores, por exemplo.
O software Arduino, que foi escrito em Java, pode ser utilizado para a
própria programação do Arduino com a utilização da linguagem de
programação que também se denomina Arduino. (ARDUINO, 2012)
Uma grande vantagem desse dispositivo é que ele pode ser utilizado em
diversos sistemas operacionais (como Windows, GNU/Linux e MacOs).
Existem vários modelos de Arduino e o que será utilizado no nosso projeto será
o Arduino Uno. (ARDUINO, 2012)
O Arduino Uno contém o microcontrolador ATmega328. Ele possui 14
pinos digitais de entrada/saída (seis deles podem ser utilizados como saída
analógica PWM), seis entradas analógicas, um cristal oscilador de 16 MHz,
uma entrada para alimentação, um botão de reset e uma porta Universal Serial
Bus (USB). (ARDUINO, 2012)
Figura 1: Arduino Uno
Fonte: http://arduino.cc/en/Main/arduinoBoardUno
16
2.3. LDR O LDR é um dispositivo eletrônico semicondutor que possui dois
terminais. Sua resistência varia de maneira linear conforme a intensidade de
luz incidente nele, obedecendo à equação R = C.L.a, em que L é a
luminosidade em Lux, C e a são constantes que dependem do processo de
fabricação e material utilizado. (UFRJ, 2012)
Figura 2: O LDR
Fonte: http://www.doctronics.co.uk/images/sens01.gif
Um dos materiais que compõem o LDR é o sulfeto de cádmio(CdS) ou o
sulfeto de chumbo (PbS). O processo de construção de um LDR consiste na
conexão do material fotossensível com os terminais, sendo que uma fina
camada é simplesmente exposta à incidência luminosa externa. (UFRJ, 2012)
ELETRODOS METÁLICOS EM CADA LADO
Figura 3: Constituição do LDR
Fonte: http://www.gta.ufrj.br/grad/01_1/contador555/ldr_constituicao.gif
17
Quando o LDR é iluminado sua resistência é diminuída. Conforme a
intensidade de luz incidente nele aumenta, um número maior de elétrons na
estrutura tem também seu nível de energia aumentado, devido à aquisição da
energia entregue pelos fótons. O resultado é o aumento de elétrons livres e
elétrons fracamente presos ao núcleo. (ADÃO, 2011)
2.4. Servomotor O servomotor é uma máquina de movimento controlado. Ao contrário de
outros motores que se movem livremente em giros, um motor deste tipo possui
liberdade de aproximadamente 180º, mas sua precisão é muito melhor que a
de um motor comum. Em geral, um servomotor possui conexões de
fornecimento de energia, saída para o terra(GND) e outra de envio de pulsos
para o movimento ser realizado.
Figura 4: Servomotor Hextronik HXT900
Fonte: http://www.msseletronica.com/loja/imagens/HXT900_2.bmp
O servo Hextronik HXT900 (Figura 4), encaixa-se no objetivo desse
projeto por ser versátil, de fácil controle e baixo consumo. Quando alimentado
com 4,8V, esse modelo possui torque de 1,6 Kg-cm e velocidade de 0,12
sec/60º. Outra vantagem é o seu peso, pesando apenas nove gramas.
Considerações sobre os sinais de pulso devem ser levadas em conta, para
18
este modelo tem-se um ciclo de pulso de 20ms e um comprimento de pulso de
450µs a 2450µs.(SERVO, 2012)
Para seu funcionamento é necessário um sensor para a identificação da
posição atual em que o motor está parado, isso é medido conforme a
resistência de um potenciômetro embutido no eixo. É também necessário um
circuito de controle e obviamente um motor.
O circuito de controle recebe a posição e o sinal de controle (que define
o movimento) e realiza a mudança de ângulo no motor. Todo o movimento é
decidido em relação ao tempo do pulso enviado ao controle.
2.4.1. Arduino e Servomotor O Arduino possui uma classe já em sua biblioteca que é utilizada com
Servomotores, ela possui comandos de attach() e detach(), para inclusão e
exclusão de um Servomotor do circuito do arduino. No comando attach() já
podem ser incluídos como parâmetro o tempo máximo e mínimo de pulso a ser
recebido. (ARDUINO, 2012)
A classe possui também comandos como write(), writeMicroseconds(),
read() e readMicroseconds(). Os comandos write() e read() enviam e recebem
o ângulo do motor, os comandos writeMicrosends() e readMicroseconds()
recebem e enviam o tempo do pulso utilizado em microssegundos. (ARDUINO,
2012)
2.5. Divisor de Tensão Para o auxílio da resolução de um circuito elétrico, a técnica denominada
divisor de tensão pode ser aplicada. Em circuitos em série, a tensão que passa
através dos componentes resistivos será dividida entre eles conforme a
magnitude de suas resistências elétricas. Como a tensão em cada resistor
pode ser calculada pela formula V = R.I, onde R é a resistência e I é o valor da
corrente elétrica que passa sobre o componente (que terá o mesmo valor para
todos os resistores, já que eles estão em série), seria necessário apenas o
cálculo da corrente elétrica para descobrir todas as tensões sobre todos os
resistores. Entretanto, com a aplicação do método divisor de tensão, o cálculo
19
da corrente elétrica não é necessário para a obtenção das tensões sobre cada
resistor. A regra do divisor de tensão pode ser derivada analisando a Figura 5.
Figura 5: Circuito divisor de tensão
Fonte: Introductory Circuit Analysis (10th Edition), Robert L. Boylestad, p. 139
𝑅𝑡 = 𝑅1 + 𝑅2 e
𝐼=
𝐸
𝑅𝑡
Aplicando a lei de Ohm:
𝑉1 = 𝐼 ∗ 1 = 𝐸
𝑅1
∗ 𝑅1 = ∗ 𝐸 𝑅𝑡
𝑅𝑡
𝑉2 = 𝐼 ∗ 𝑅2 = 𝐸
𝑅2
∗ 𝑅2 = ∗ 𝐸 𝑅𝑡
𝑅𝑡
Com
Note que o padrão para V1 e V2 é:
𝑉𝑥 = 𝑅𝑥 ∗ 𝐸
𝑅𝑡
(Regra do divisor de tensão)
Onde Vx é a tensão sobre Rx, E é a tensão gerada pela fonte e RT é a
resistência equivalente do circuito.
20
Em palavras, a regra do divisor de tensão diz:
A tensão sobre um resistor em um circuito em série é igual ao valor da
resistência elétrica do resistor vezes a tensão total imposta ao circuito em série
dividido pelo valor da resistência equivalente do circuito em série.
(BOYLESTAD, 2002)
21
3.
DESENVOLVIMENTO DO PROJETO
Inicialmente foi proposta a construção de um solar tracker, que levaria
em conta a movimentação do sol para expor uma placa solar a maior
intensidade luminosa possível, porem, durante o processo de criação foi notado
o fato que em outros experimentos pode ser necessário ou interessante possuir
uma forma automatizada de certa carga fique direcionada a uma fonte
luminosa seja ela o sol ou uma fonte artificial de luz. Foi então introduzida a
ideia de construir um robô direcionador de carga à uma fonte luminosa,
generalizando
a
ideia
do
solar
tracker
para
uma
fonte
qualquer.
(INSTRUCTABLES, 2012)
Ainda seguindo a ideia de um solar tracker e sabendo que o novo
sistema o abrangia, foi utilizada como End Effort uma placa solar para gerar um
robô autossustentável.
Motor Φ
Suporte
para End
Effort
Sensor
LDR(4)
Arduino
Fonte de
Energia
Motor ϴ
Figura 6: Diagrama de blocos
Fonte: Autoria Própria.
22
3.1. Sistema proposto O sistema proposto visa, através de sensores e atuadores, manter sua
área de carga (onde, para propósitos deste, estará o componente receptor da
luz) direcionada à maior incidência luminosa possível. Para isso é preciso
medir a incidência luminosa utilizando sensores conectados ao “Arduino”, que
por sua vez, irá analisar os dados recebidos e irá controlar o movimento do
aparato através dos atuadores.
Pode-se separar a análise do conjunto nas seguintes partes: Atuadores,
Sensores, Controladores, Processador, Software e “End Effector”.
Nas seções seguintes ocorrerá a descrição das partes do projeto,
divididas em hardware, software e esqueleto.
3.2. Hardware O hardware abrange os circuitos de sensoriamento, atuação, a placa
solar para captação de energia luminosa, o sistema de fornecimento de
energia, e a central de processamento, o Arduino.
Os componentes utilizados nesse projeto foram:
- 1 Arduino UNO
- 4 Sensores LDR de 5mm
- 4 resistores de 10 kΩ
- 1 Placa solar de 2000mAh com dimensões: 10.6 cm x 4.4 cm x 1.5 cm
- 2 Servos motores HTX900 9g
- Fios de conexão.
A descrição do hardware do artefato foi dividida nas áreas apresentadas
na seção 2.1.2.
23
3.2.1. Processador/Controlador A central de processamento de dados do robô esta localizado no
Arduino. No Arduino estão localizadas a maior parte das atividades do sistema.
O Arduino fornece energia para os outros componentes do sistema,
assim como é o neutro para os mesmos.
Para receber os dados de sensoriamento, o Arduino utiliza quatro portas
analógicas, uma para cada circuito sensor LDR. Os dados são recebidos na
forma de um numero de dez bits, essa informação é passada para o software,
que será tratado na seção seguinte.
O Arduino controla também os servomotores, o software envia a
informação para o hardware, que controla os servomotores usando suas portas
digitais do tipo PWM.
3.2.2. Atuadores Os atuadores aparecem na forma de dois servomotores, que funcionam
como os músculos do robô, movendo o esqueleto de acordo com os sinais
recebidos. O circuito dos atuadores não possuem elementos especiais, sendo
os atuadores diretamente conectados ao Arduino, em suas portas digitais
PWM.
O robô segue um sistema de coordenadas esféricas, possuindo duas
junções de revolução. Porem não existe variação no raio, que permanece
inalterado, dando sendo assim uma configuração do tipo 2R (duas junções de
revolução). O robô possui então liberdade de movimento em duas dimensões.
Cada atuador se move para um determinado ângulo variando de 0o a
180º. Essa liberdade de 180º não permite que o suporte do End Effector fique
completamente direcionado para a base do robô, como mostra a Figura 7.
24
Figura 7: Possíveis posições do servomotor
Fonte: Autoria Própria.
3.2.3. End Effector O End Effector fica a critério do utilizador do robô resultado desse
projeto. Como suporte para o End Effector foi utilizada uma caixa plástica com
comprimento de 140mm , largura de 63mm e profundidade de 32mm (143mm
X 63mm X 32mm). Esse suporte estará sempre direcionado à maior
intensidade luminosa.
Como exemplo de uso, usa-se como End Effector uma placa solar de
dimensões concordantes com o suporte, essa placa solar será, pelo robô,
sempre direcionada a maior intensidade luminosa, fato que permitirá uma
captação máxima de energia solar.
3.2.4. Sensores Como o objetivo do robô resultado é manter seu suporte de carga
direcionada a maior intensidade luminosa, foram utilizados sensores LDR
externos, que, como explicado detalhadamente em seções anteriores, tem sua
25
resistência mínima com a intensidade luminosa máxima e sua resistência
máxima com a intensidade luminosa mínima.
O LDR é um sensor analógico, já que medimos a tensão sobre ele em
função da luminosidade. A tensão sobre o LDR é medida a cada intervalo de
tempo, gerando assim dados digitais a partir da leitura analógica.
Para o sistema de sensoriamento são utilizados quatro sensores LDR,
com suas localizações descritas como na Figura 8.
Figura 8: Posições dos LDR’s
Fonte: Autoria Própria.
A disposição dos sensores desta maneira permite uma rápida e eficiente
análise da necessidade do movimento e para onde ele deve ser feito. O modo
como é feita essa análise será descrita em seções posteriores.
Utilizando uma porta analógica do Arduino é possível medir a tensão em
um ponto em referencia ao ponto neutro (GND). Porem um circuito de
sensoriamento contendo apenas um sensor LDR seria inviável, já que existem
muitas variáveis desconhecidas (A corrente e resistência do LDR), portanto
utiliza-se em serie um resistor de valor conhecido e monta-se o circuito da
Figura 9.
26
Figura 9: Circuito divisor de tensão para o sistema de sensoriamento
Fonte: Autoria Própria.
Como pode ser visto na Figura 9, a tensão medida pela porta analógica
do Arduino é a tensão sobre o resistor, e não sobre o sensor LDR. Tendo a
tensão sobre o resistor e conhecendo sua resistência é possível determinar a
corrente através do circuito, que é a mesma corrente no Arduino. Como se
sabe a corrente no sensor LDR e a sua tensão é dada pela diferença entre a
tensão fornecida ao circuito e a tensão lida na porta analógica, a resistência do
sensor LDR é dada pela lei de Ohm.
3.3. Software O software foi desenvolvido utilizando a linguagem de programação
“Arduino”, linguagem essa, utilizada na placa de microcontrolador de mesmo
nome. O ambiente de desenvolvimento utilizado foi o “Arduino software”,
compilador e transmissor do código para o microcontrolador.
27
Figura 10: Ambiente de desenvolvimento Arduino
Fonte: Autoria Própria.
O software gerencia o sensoriamento e atuação do robô. Um diagrama
de classes completo do software assim como o código desenvolvido esta na
seção de apêndices.
O código é divido em três partes, controle, sensoriamento e atuação. O
controle integra as outras partes, primeiramente busca-se o sensoriamento e
dependendo da sua resposta, é efetuada a atuação.
O sensoriamento requisita os valores nas portas analógicas usadas,
converte o número de dez bits recebido em um valor real de tensão, pela
equação abaixo:
28
𝑉!"#$ = 𝑉!"#$ ×
5
1024
Tendo a tensão sobre o resistor, é efetuado o cálculo para determinar a
resistência do LDR pela equação a seguir:
𝑅!"# = 𝑉!"#$ ×𝑅!
𝑉!! − 𝑉!"#$
Onde R1 é uma resistência fixa.
Como descrito na seção do sensoriamento, foi definido um sistema de
sensoriamento baseado em quatro sensores LDR. O procedimento acima
descrito é realizado para cada um dos sensores LDR. É possível, então,
analisar a incidência luminosa em cada ponto.
Caso o modulo das diferenças entre resistências seja menor do que um
fator de erro, não é necessário movimentos
Porem, quando o modulo da diferença entre as resistências for maior
que o fator de erro, é necessário um movimento. O movimento é direcionado
para a direção da menor resistência, em consequência maior intensidade
luminosa.
São calculadas duas diferenças entre as resistências, como mostra a
inequação seguinte:
𝑅! − 𝑅! > 𝑒𝑟𝑟
𝑅! − 𝑅! > 𝑒𝑟𝑟
Onde RT é a resistência do LDR superior, RB é a resistência do LDR
inferior, RL é a resistência do LDR esquerdo e RR é a resistência do LDR
direito.
Caso uma ou ambas inequações for verdadeira, é verificado qual o menor
valor entre as resistências de cada equação, definindo-se assim a direção do
movimento.
29
A atuação é realizada utilizando-se a biblioteca Servo que está inclusa no
pacote de desenvolvimento Arduino. A biblioteca fornece métodos que
permitem ligar virtualmente o Arduino ao servomotor e determinar o ângulo do
servomotor em graus. A atuação então recebe por parâmetro o motor que deve
rotacionar. A rotação é feita somando-se ou subtraindo um fator em graus a
posição atual. Deve-se levar em conta que o valor resultado dessa adição ou
subtração não deve ultrapassar os limites de 0o e 180o, já que estes valores
excedem os limites físicos do servomotor.
3.4. Esqueleto O projeto foi modelado em 3 dimensões no programa Google Sketchup
com as medidas exatas de cada parte. Com o modelo pronto pudemos pegar
cada peça separadamente (base e haste) colocar em um PDF e anotar as
medidas no arquivo, este foi enviado para a empresa DynamicLaser que
realizou os cortes em peças de acrílico e MDF.
Figura 11: Modelo 3D em visão geral
Fonte: Autoria Própria.
A haste no início possuía tamanhos iguais em cada lado, mas
verificamos que esta não era a melhor forma, pois tínhamos 3cm de motor a
ser colocado nela. Decidimos então colocar o Servo em um dos lados e
30
compensar em altura no outro igualando assim o eixo central de rotação do
suporte.
Figura 12: Haste em destaque no modelo 3D(a) e em acrílico(b)
Fonte: Autoria Própria.
A base foi feita em formato circular, pois ela é o centro de rotação. Nela
são colocados a haste e o Arduino em cima, e abaixo é acoplado o servo. Pela
figura podemos ver também um furo de 3mm de raio que foi feito para a
passagem dos fios dos LDRs e dos Servomotores.
31
Figura 13: Base em destaque no modelo 3D(a) e em acrílico(b)
Fonte: Autoria Própria.
Para melhor execução do giro da base utilizaremos 3 esferas de
desodorante do tipo roll-on abaixo da base circular do projeto, isso faz o apoio
e a diminuição da força que o motor necessitará para iniciar e manter o giro.
32
Figura 14: Esferas em destaque no modelo 3D
Fonte: Autoria Própria.
O Arduino será posicionado à frente na base, próximo ao orifício
representado na Figura 13. Nesta posição ele acompanha a rotação e as peças
podem girar livremente sem nenhum fio segurando-as. Os 4 LDRs serão
colocados no suporte, um em cada centro de cada lado dele, como é mostrado
na figura.
Figura 15: Arduino e LDRs em destaque no modelo 3D
Fonte: Autoria Própria.
33
Dois Servomotores são utilizados no projeto, um para a rotação de toda
a base e outro para a rotação do suporte com os LDRs. Ambos rotacionam
conforme os pulsos enviados via Arduino. Com estes dois motores
conseguimos todo o movimento necessário para ajuste do suporte em direção
a uma fonte de luz.
Figura 16: Servomotores em destaque no modelo 3D
Fonte: Autoria Própria.
As vantagens de se fazer um modelo 3D são que, além de podermos
visualizar melhor os componentes para obter novas ideias e discutir o projeto,
podemos enviar para a empresa de corte de peças os modelos com as
medidas, assim realizando fisicamente o projeto pensado. A escolha de
posição dos motores foi pensada como um espelho de mesa com uma
liberdade a mais, a rotação da base.
34
Figura 17: Espelho de mesa
Fonte: http://www.mancave.co.nz
3.4.1. Materiais No projeto foram utilizados dois materiais: MDF e acrílico; foram
escolhidos esses devido à resistência e a possibilidade de cortar-se a laser,
também foi cogitada a utilização de plástico e foam.
Com relação ao primeiro material, foi discutido e observado que, como o
nosso projeto deve ficar exposto ao sol ou a alguma fonte de luz infravermelha
é inviável sua utilização, pois alguns tipos de plástico derretem com a
exposição contínua (excessiva) a essas fontes.
Figura 18: Chapas de plástico
Fonte: http://www.actos.com.br/imagens/dados/p2334.jpg
35
Já o segundo, a princípio, foi considerado pela equipe como primeira
opção e, após ter sido analisado mais cuidadosamente, verificou-se que,
embora o material fosse muito leve e fácil de cortar, ele não seria resistente o
suficiente para aguentar a estrutura na posição vertical.
Figura 19: Chapas de foam
Fonte: http://www.hspnet.com.br/site/products_pictures/ID_8520_dayfoam.jpg
Logo quando fomos procurar a empresa que fizesse corte a laser, nos
foram oferecidas duas possibilidades de materiais que são resistentes e que
possuem rigidez, além disso, ainda podiam ser cortados a laser, eles são: o
MDF e o acrílico.
3.5. Custos Para o projeto foram comprados 4 (quatro) LDR’s para a análise de
ângulo de incidência dos raios, 2 (dois) Servomotores para a movimentação de
todo o sistema em todas as posições necessárias e um Arduino para controle
de todos os componentes. Levando em consideração os seguintes preços:
LDR R$2,50 cada (~U$D1.32 each), Servo motor R$14,00 (~U$D7.42) e
Arduino ~R$39,59 (U$D21.00). Para visualização do projeto segue abaixo uma
tabela.
36
Componente
Quantidade
Preço (un.) U$D
Total
Placa Solar
1
14,60
14,60
LDR
6
1,32
5,28
Servomotor
2
7,42
14,84
Arduino
1
21,00
21,00
Total (U$D)
58,36
Tabela 3 – Componentes, quantidade e preço*
*Cotação do dólar da época utilizada 1 dólar = 1,885298 reais
As peças foram enviadas para corte na empresa DynamicLaser, os
custos já incluem o material e corte segundo tabela abaixo.
Componente
Haste
Base
Base com furo
Preço em MDF (R$ / U$D) Preço em Acrílico (R$ / U$D)
10,00 / ~4.85
15,00 / ~7.28
9,00 / ~4.37
15,00 / ~7.28
Total (U$D)
23.78
Tabela 4 – Peças do esqueleto*
*Cotação do dólar da época utilizada 1 dólar = 2,06050041 reais
A placa solar colocada na primeira tabela de cotações foi colocada como
exemplo de utilização do nosso projeto, uma melhoria de captação dos raios
solares para gerar energia. Considerando os gastos dos componentes iniciais
(Placa solar, LDRs, Servomotores e Arduino [U$D58.36]) e dos cortes (Haste,
Base e Base com furo [U$D23.78]) o investimento total para a realização do
mesmo foi de U$D82.14, considerando as diferentes taxas cambiais em cada
tabela.
37
3.6 Problemas, erros e possíveis soluções Nessa seção serão listados os problemas e erros que o dispositivo
produzido como resultado dessa monografia tem, e algumas possíveis
soluções para futuras implementações.
3.6.1 Limitação de movimentação O dispositivo produzido possui movimentação limitada devido ao fato de
ter sido construído usando servomotores com um alcance de 0° a 180°, isso
restringe a movimentação seriamente, impossibilitando que a placa seja
direcionada para uma direção.
Para resolver tal problema seria necessária a implementação de outro
tipo de motor, por exemplo um motor de passo. Além disso, seria necessário
alterar a classe referente ao atuador para suportar esse outro tipo de motor.
Outro problema referente a movimentação deve-se a localização da
fiação. Devido ao grande número de fios provindos da alimentação,
aterramento e sinais do circuito e do pequeno tamanho do artefato, interfere na
movimentação das junções que não possuem força necessária para rotacionar
o artefato. Para solucionar esse problema, seria necessário produzir uma haste
de maior altura para, assim, ter uma folga para o posicionamento do fio.
3.6.2 Detecção da não necessidade de movimento em condições de baixíssima luminosidade Foi notado no decorrer do projeto que, em condições de baixíssima
luminosidade, as resistências dos LDRs assumiam valores muito altos, por
volta de dezenas de mega ohms, além de que a taxa de erro adotada durante o
38
projeto deixava de ser suficiente para essas condições, causando o efeito de o
dispositivo não permanecer em repouso nessas condições.
A resolução de tal problema pode ser realizada via software, uma das
possíveis soluções seria criar um limite inferior de luminosidade para o
funcionamento (limite superior de resistência) podendo esse limite variar de
acordo com a aplicação desejada.
Outra possível solução via software seria a implementação de uma taxa
de erro maior, porém essa taxa maior poderia atrapalhar a análise de
movimentos para valores maiores de resistência. Para evitar isso poderia ser
adotada essa nova margem de erro apenas para valores de luminosidade
abaixo de um limite desejado.
No dispositivo desse projeto a tensão utilizada para alimentar todos os
circuitos foi a tensão do próprio arduino, que é tabelada como sendo cinco
volts, mas a tensão fornecida pelo arduino não é sempre igual a cinco volts,
esse valor geralmente acaba sendo menor. Utilizar uma fonte externa a do
arduino para alimentar os outros circuito deve trazer uma maior precisão ao
sensoriamento.
5.
CONCLUSÕES
Ao inicio desse projeto, pretendia-se construir um solar tracker,
dispositivo que tem função única direcionar ao sol sua área de carga. Porém,
durante as analises teóricas e produção deste, percebeu-se a possibilidade de
expandir o projeto de uma forma simples. Além de direcionar ao sol, direcionase a qualquer fonte luminosa sem grandes alterações no projeto.
A decisão da mudança ocorreu após o pedido de importação da placa
solar, que seria utilizada anteriormente. Usando os estudos na área de robótica
foi possível definir um uso para a placa solar, sendo a mesma utilizada como
“End Effort”. Nesse caso o dispositivo funciona como no anteriormente
proposto solar tracker. Sendo esse, por sua vez, autossustentável, ou seja,
consome a energia que gera.
39
Conforme citado anteriormente, o objetivo do projeto foi alterado durante
a execução do mesmo. Não foram realizadas implementações para melhor
posicionar o dispositivo em relação ao sol, como previsto anteriormente,
utilizando as movimentações do astro em relação a Terra.
A grande vantagem da construção do robô é uma fácil mudança de
função do mesmo, sendo este versátil. Podendo tanto seguir qualquer fonte
luminosa, como também utilizar diferentes tipos de “End Effort” , um deles já
demonstrado como sendo a placa solar, e outras utilizações descritas na seção
de aplicações e trabalhos futuros.
Na construção do protótipo foram encontradas dificuldades com a
escolha do material usado no esqueleto, dúvidas surgiram devido à
possibilidade do dispositivo ficar durante um longo período de tempo exposto à
luz solar, podendo assim causar aquecimento do esqueleto e dos
componentes. Ainda em relação ao aquecimento do dispositivo, o uso da placa
solar pode causar desgastes, pela mesma aquecer muito quando exposta ao
sol. Outra consideração foi em relação ao peso do esqueleto e à capacidade
dos motores se manterem eficientes. Por fim decidiu-se fazer dois esqueletos,
um primeiro, mais leve, com material do tipo MDF, um segundo, mais pesado,
porem mais resistente, feito em acrílico.
No âmbito pessoal, pode-se perceber que o tempo analisando um
problema e estruturando sua solução é indispensável no função de um
engenheiro.
Uma
análise
bem
feita
pode
economizar
tempo
de
desenvolvimento e dinheiro. É plausível, então, afirmar que a produção deste
trabalho influencia positivamente na formação de um Engenheiro de
Computação qualificado.
Ainda no âmbito pessoal, percebeu-se a falta de experiência da equipe e
necessidade de melhora no controle e projeção de tarefas. Assim como na
análise de mercado para investimentos na compra de equipamentos e
materiais, dificuldades essas que atrasaram o cronograma previsto.
40
6. REFERÊNCIAS
ADÃO, Laudelino Jr.; ANTUNES, Alexandre R.; KAMADA, Naomi C.;
NAKANISHI, Sergio A. Massami; Sensor de Intensidade Luminosa Baseado
em Arduino. 2011. Universidade Tecnológica Federal do Paraná
ARDUINO. Arduino. Disponível em: http://arduino.cc/ , acessado em Abril,
2012.
BOYLESTAD, Robert L.; Introductory Circuit Analysis 10th Edition, 2002.
INSTRUCTABLES.
Arduino
2-Axis
Solar
tracker.
Disponível
em:
http://www.instructables.com/id/Arduino-2-axis-servo-solar-tracker/ , acessado
em Abril, 2012.
NIKU, Saeed B. Introduction to Robotics: Analysis, Systems, Applications.
Prentice Hall, 2010.
41
SERVO.
Hextronik
HXT900
Microservo.
Disponível
em:
http://www.servodatabase.com/servo/hextronik/hxt900 , acessado em Maio,
2012.
UFRJ,
LDR.
Disponível
em:
http://www.gta.ufrj.br/grad/01_1/contador555/ldr.htm , acessado em Maio, 2012.
APÊNDICE A – Diagrama de classes do software
42
APÊNDICE B – Software desenvolvido
#include <Servo.h>
//-----------------------------------------------------------------------------------//------------------------------Classe LDR-------------------------------------------//Descricao: Cada objeto dessa classe representa um LDR. A classe tem funcao de
//
salvar a pino de leitura do LDR e realizar a leitura
//Autor: Laudelino Adao Junior, Vinicius Silva Mazzola, Juan Pietro e Sergio Augusto.
//-----------------------------------------------------------------------------------class LDR
{
private:
int sensorPin;
double rvalue;
double resistencia;
double Vldr;
public:
void init(int sp)
{
sensorPin = sp;
}
//Faz uma media de 3 leituras em um intervalo de 30ms e retorna a resistencia
double readLDR()
{
Vldr = 0;
for(int i =0; i<3; i++)
43
{
delay(10);
rvalue = analogRead(sensorPin);
Vldr += rvalue*5/1024;
}
Vldr = Vldr/3;
resistencia = (Vldr*10000)/(5-Vldr);
return resistencia;
}
};
//-----------------------------------------------------------------------------------//------------------------------Classe Sensing---------------------------------------//Descricao: é composta pelos LDR, ela tem funcao de pedir a leitura de cada LDR e
//
analisar a necessidade de movimento.
//Autor: Laudelino Adao Junior, Vinicius Silva Mazzola, Juan Pietro e Sergio Augusto.
//-----------------------------------------------------------------------------------class Sensing
{
private:
LDR top, bottom, left, right;
int pos;
double err;
String girar;
public:
void init()
{
err = 0;
top.init(2);//Top
bottom.init(1);//Botton
left.init(3);//Left
right.init(0);//Right
pos = -1;//Botton = 1; Top = 2; Left = 3; Right = 4;
}
int compare()
{
double media = 0, rTop = top.readLDR(), rBottom = bottom.readLDR(), rLeft =
left.readLDR(), rRight = right.readLDR();
pos = 0;
girar = "";
err = 0.20; //O resistor tem uma margem de erro de 5%, ja o LDR eh responsavel
pelos outros 13%
//O erro é multiplicado pela media entre o sendo verificado e o oposto dele.
if(rTop < rBottom && rTop < rLeft && rTop < rRight)//Verifica se o menor eh o do
topo
{
pos = 2;
44
girar = "Top";
media = (rTop/2 + rBottom/2); // Calcula a media com o oposto
err*= media;
}
else if(rBottom < rLeft && rBottom < rRight)
{
pos = 1;
girar = "Bottom";
media = (rTop/2 + rBottom/2); // Calcula a media com o oposto
err*= media;
}
else if(rLeft<rRight)
{
pos = 3;
girar = "Left";
media = (rLeft/2 + rRight/2);// Calcula a media com o oposto
err*= media;
}
else
{
pos = 4;
girar = "Right";
media = (rLeft/2 + rRight/2); // Calcula a media com o oposto
err*= media;
}
/* Serial.println("");
Serial.println(pos);
Serial.print("ERRO: ");
Serial.println(err);
Serial.print("Girar para: ");
Serial.println(girar);
Serial.println("TODOS:");
Serial.print("Bottom = ");
Serial.println(rBottom);
Serial.print("Top = ");
Serial.println(rTop);
Serial.print("Right = ");
Serial.println(rRight);
Serial.print("Left = ");
Serial.println(rLeft);
Serial.println("");*/
//verifica se o modulo da diferenca com o oposto eh maior que o erro, se for, retorna
para onde deve girar, senao retorna 0
switch(pos)
{
case 1:
{
if(abs(rTop-rBottom) > err)
return pos;
else
return 0;
}
45
case 2:
{
if(abs(rTop-rBottom) > err)
return pos;
else
return 0;
}
case 3:
{
if(abs(rLeft-rRight) > err)
return pos;
else
return 0;
}
case 4:
{
if(abs(rLeft-rRight) > err)
return pos;
else
return 0;
}
default: return 0;
}
}
};
//-----------------------------------------------------------------------------------//------------------------------Classe Actuator--------------------------------------//Descricao: Conecta e desconecta os servos motores em um pino, define a posicao
//
inicial e gira conforme a necessidade
//Autor: Laudelino Adao Junior, Vinicius Silva Mazzola, Juan Pietro e Sergio Augusto.
//-----------------------------------------------------------------------------------class Actuator
{
private:
Servo xServo, yServo;
int xTheta, yTheta, xRot, yRot, xPin, yPin;
public:
void init()
{
yPin = 9;
xPin = 10;
xTheta = 90;
yTheta = 90;
xRot = 5;//Valor de rotacao no eixo X
yRot = 5;//Valor de rotacao no eixo X
//Inicializa ambos os servos em 90 graus
yServo.attach(yPin);
yServo.write(yTheta);
delay(120);
yServo.detach();
xServo.attach(xPin);
46
xServo.write(xTheta);
delay(120);
xServo.detach();
}
void rotateTop()
{
yTheta = yServo.read();
if((yTheta + yRot) > 180)
{
//nao pode mais girar para baixo
Serial.println("No rotation possible");
delay(5);
}
else
{
yTheta += yRot;//Gira para direcao indicada
yServo.attach(yPin);
yServo.write(yTheta);
delay(120);
yServo.detach();
}
}
void rotateBottom()
{
yTheta = yServo.read();
if((yTheta - yRot) < 0)
{
//nao pode mais girar para baixo
Serial.println("No rotation possible");
delay(5);
}
else
{
yTheta -= yRot;//Gira para direcao indicada
yServo.attach(yPin);
yServo.write(yTheta);
delay(120);
yServo.detach();
}
}
void rotateLeft()
{
xTheta = xServo.read();
if((xTheta + xRot) > 180)
{
//nao pode mais girar para baixo
Serial.println("No rotation possible");
delay(5);
}
else
{
xTheta += xRot;//Gira para direcao indicada
xServo.attach(xPin);
xServo.write(xTheta);
47
delay(120);
xServo.detach();
}
}
void rotateRight()
{
xTheta = xServo.read();
if((xTheta - xRot) < 0)
{
//nao pode mais girar para baixo
Serial.println("No rotation possible");
delay(5);
}
else
{
xTheta -= xRot;//Gira para direcao indicada
xServo.attach(xPin);
xServo.write(xTheta-xRot);
delay(120);
xServo.detach();
}
}
};
//-----------------------------------------------------------------------------------//------------------------------Classe Control---------------------------------------//Descricao: Une as classes sensing e control, pede a posicao para qual girar para a
//
sensing e manda girar o necessario na control
//Autor: Laudelino Adao Junior, Vinicius Silva Mazzola, Juan Pietro e Sergio Augusto.
//-----------------------------------------------------------------------------------class Control
{
private:
Sensing s;
Actuator a;
int pos;
public:
void init()
{
s.init();
a.init();
pos = 0;
}
//Busca se e para onde deve mover, e chama o metodo correspondente para ocorrer
esse movimento.
void move()
{
pos = s.compare();
switch(pos)
{
case 0: Serial.println("No move neded"); break;
case 1: a.rotateBottom(); Serial.println("Moving down"); break;
case 2: a.rotateTop(); Serial.println("Moving up"); break;
48
case 3: a.rotateLeft(); Serial.println("Moving left"); break;
case 4: a.rotateRight(); Serial.println("Moving right"); break;
default: return;
}
}
};
Control c;
void setup()
{
Serial.begin(9600);
c.init();
}
void loop()
{
c.move();
delay(100);
}
49
APÊNDICE C – Diagrama de Gantt
Download