inseto robo

54
TRABALHO ATIVIDADES COMPLEMENTARES (FETEF) INSETO ROBÔ por EDY CARLOS DOS SANTOS JACKSON F. SOUZA MARINO D. RAMOS PAULO A. DOS REIS Acadêmicos do 8º Semestre do Curso de Engenharia de Controle e Automação FACULDADE DE CIÊNCIAS SOCIAIS APLICADAS DE EXTREMA

Upload: edycar5

Post on 19-Jan-2017

246 views

Category:

Education


8 download

TRANSCRIPT

Page 1: Inseto robo

TRABALHO ATIVIDADES COMPLEMENTARES (FETEF)

INSETO ROBÔ

por

EDY CARLOS DOS SANTOSJACKSON F. SOUZAMARINO D. RAMOSPAULO A. DOS REIS

Acadêmicos do 8º Semestre do Curso de Engenharia de Controle e Automação

Extrema - MG2014

FACULDADE DE CIÊNCIAS SOCIAIS APLICADAS DE EXTREMA

Page 2: Inseto robo

RESUMO

Este documento apresenta um projeto que aborda o estudo e o desenvolvimento de um dispositivo mini Robô, com o uso de um sensor infravermelho obtém a finalidade de desviar de obstáculos evitando a colisão, usando dois servos motores ele tem por finalidade movimentar-se, tem como controladora principal uma placa baseada em arduinos e uma outra placa expansão de hardware. O objetivo deste projeto constitui-se, principalmente na aplicação dos conceitos e dos conhecimentos já adquiridos em matérias já vistas e que ainda veremos ao longo do curso, a abordagem desses estudos nos possibilitou a construção de um artefato que possibilitasse a aprendizagem e aperfeiçoamento em programação, robótica, micro controladores, eletrônica digital e analógica, servos, etc.Palavras-chave: Inseto, Robô, Sensor Infravermelho.

ABSTRACT

This paper presents a project that deals with the study and development of mini robot device with the use of an infrared sensor in order to get around obstacles avoiding collision using two servo motors it is intended to move, is one main controller board based on Arduino and other hardware expansion card. The goal of this project is mainly in the application of the concepts and the knowledge acquired in subjects previously seen and the ones we will see throughout the course the approach of these studies allowed us to build a device that would enable learning and improvement in programming , robotics, micro controllers, digital and analog electronics, servos, etc.Keywords: Insect, Robot, Infrared Sensor.

Page 3: Inseto robo

LISTA DE FIGURASFig. 2.1 - Microcontroladores..........................................................................................3Fig. 2.2 - Uso de microcontroladores em automóveis.....................................................5Fig. 2.3 - Automação doméstica.....................................................................................5Fig. 2.4 - Ciclo de Máquina.............................................................................................7Fig. 3.1 - Detecção por Reflexão....................................................................................8Fig 3.2 - Detecção por interrupção..................................................................................9Fig 3.3 – Camera Escura.................................................................................................9Fig. 4.1 - O processo da compilação.............................................................................11Fig. 4.2 - Livros sobre diversas linguagens de programação.........................................14Fig. 5.1 - ATmega32U4..................................................................................................15Fig. 5.2 – Placa Controladora........................................................................................16Fig 5.3 – Sensor Infravermelho......................................................................................17Fig. 5.4 – Placa expansão..............................................................................................18Fig. 5.5 – Micro Servo....................................................................................................18Fig. 6.1 - Ambiente de programação..............................................................................19Fig. 6.2 - Entendendo o programa.................................................................................20Fig. 6.3 - Exemplo serial monitor...................................................................................21Fig. 6.4 - Saída no serial monitor...................................................................................22Fig 6.5 - Programação para Inseto Robô.......................................................................23Fig 7.1- Restantes das figuras são de montagem..........................................................24

Page 4: Inseto robo

SUMÁRIO

LISTA DE FIGURAS.................................................................................................. iii

1 INTRODUÇÃO..........................................................................................................11.1 OBJETO DO ESTUDO.......................................................................................11.2 OBJETIVOS DO TRABALHO.............................................................................11.3 VIABILIDADE E JUSTIFICATIVA.......................................................................21.4 DIFICULDADES ENCONTRADAS NO PROJETO.............................................2

2 MICROCONTROLADOR..........................................................................................32.1 MICROCONTROLADORES VERSUS MICROPROCESSADORES..................42.2 APLICABILIDADE...............................................................................................42.3 ESTRUTURA DO MICROCONTROLADOR.......................................................52.4 FUNCIONAMENTO............................................................................................7

3 SENSOR INFRAVERMELHO..................................................................................84 LINGUAGEM DE PROGRAMAÇÃO E COPILADORES.......................................10

4.1 INTERPRETAÇÃO E COMPILAÇÃO...............................................................114.2 CONCEITOS.....................................................................................................12

4.2.1 PROGRAMAÇÃO ESTRUTURADA...........................................................124.2.2 PROGRAMAÇÃO ORIENTADA A OBJETOS............................................134.2.3 PROGRAMAÇÃO LINEAR.........................................................................14

4.3 LISTA DE LINGUAGENS.................................................................................145 HARDWARE...........................................................................................................15

5.1 MICROCONTROLADOR ATMEL ATMEGA32U4............................................155.1.1 UM POUCO SOBRE A FAMÍLIA................................................................16

5.2 PLACA PRINCIPAL..........................................................................................165.2.1 PLACA CONTROLADORA........................................................................165.2.2 FUNÇÃO DOS COMPONENTES..............................................................17

5.3 SENSOR DE DISTÂNCIA SHARP GP2Y0A02YK............................................175.3.1 ESPECIFICAÇÕES....................................................................................17

5.4 PLACA EXPANSÃO DE HARDWARE..............................................................185.5 MICRO SERVO 9G SG90 TOWERPRO..........................................................18

5.5.1 ESPECIFICAÇÕES....................................................................................18- Voltagem de Operação: 3,0 - 7,2V - Ângulo de rotação: 180 graus - Velocidade: 0,12 seg/60Graus (4,8V) sem carga - Torque: 1,2 kg.cm (4,8V) e 1,6 kg.cm (6,0V) - Temperatura de Operação: -30C ~ +60C - Tipo de Engrenagem: Nylon - Tamanho cabo: 245mm - Dimensões: 32 x 30 x 12mm - Peso: 9g........................................18

6 SOFTWARE...........................................................................................................186.1 ESTRUTURA DO PROGRAMA........................................................................206.2 SERIAL MONITOR...........................................................................................216.3 OUTROS COMANDOS....................................................................................22

6.3.1 PROGRAMAÇÃO PARA INSETO ROBÔ..................................................236.3.2 ARDUBLOCK.............................................................................................23

7 MONTAGEM E RESULTADOS.............................................................................238 CONCLUSÕES.......................................................................................................309 REFERÊNCIAS......................................................................................................31

Page 5: Inseto robo

APÊNDICE A – Layout da placa...................................Erro! Indicador não definido.3APÊNDICE B – Codigo fonte do Firmware..........................................................324

Page 6: Inseto robo

1 INTRODUÇÃO

O mini Inseto Robô é um mini robô. Seu desenvolvimento foi pensando em

construir um robô que se movimentasse para frente e para os lados, com o objetivo

de desviar de obstáculos, deixando seu visual a de um inseto e sua estrutura (corpo)

o menor possível. Sua montagem emprega conhecimentos de robótica básica

eletrônica, todos os componentes trabalham em conjunto.

Tem um microcontrolador como cérebro, dois servos motores para os

movimentos, um sensor de IR (infravermelho) irá funcionar como olhos para detectar

obstáculos. Com uma programação baseada em controles de arduino, gera um

código onde o controla todos os seus hardwares.

1.1 OBJETO DO ESTUDO

O trabalho consiste preparação de um mini robô, para a detectar obstáculos,

auxiliando-o para não colidir. Buscando a implantação de componentes pequenos e

leves.

1.2 OBJETIVOS DO TRABALHO

Os objetivos do trabalho foram:

Aplicar os conhecimentos adquiridos nas diversas disciplinas do curso de

engenharia elétrica e eletrônica, explicitando as disciplinas dedicadas ao

estudo de eletrônica analógica e digital, microcontroladores, técnicas

computacionais e instrumentação, algoritmos, robótica, servos, etc;

Adquirir experiência no desenvolvimento de projetos, desde as etapas

iniciais de concepção até os testes e correções do protótipo final;

Adquirir conhecimentos sobre microcontroladores, transistores, resistores,

sensores, motores, programação, comunicação, ondas sonoras.

Para alcançar as metas foram previstas as seguintes etapas:

Definição das referências bibliográficas;

Escolha do material utilizado;

Especificação e compra dos componentes;

Montagem do circuito e testes;

Programação.

Page 7: Inseto robo

Correção de possíveis erros;

Montagem do protótipo;

Validação do projeto;

Preparação da monografia;

Apresentação final do trabalho.

1.3 VIABILIDADE E JUSTIFICATIVA

Ao decorrer do curso, fomos apresentados a eletrônica digital e aos

microcontroladores, por apresentarem redução de tamanho, e consumo de energia,

juntamente com o seu baixo custo, os microcontroladores são uma alternativa

eficiente para controlar muitos processos e aplicações.

Visando esses benefícios resolvemos sua implantação, buscando oferecer um

projeto de baixo custo.

O projeto consiste em uma placa de baixo custo de confecção, utilizando

componentes facilmente encontrados no comércio especializado. Também foram

utilizados compiladores obtidos na internet gratuitamente, buscando sempre o menor

custo de execução do projeto, para que uma futura reprodução deste módulo possa

ocorrer de maneira rápida e barata.

1.4 DIFICULDADES ENCONTRADAS NO PROJETO

Durante o desenvolvimento do projeto, muitas dificuldades foram

encontradas, onde podemos identificar algumas aqui.

A primeira delas foi a aquisição do material, os produtos utilizados apesar de

serem fácil de encontrar no comercio especializado acabou nos trazendo um

problema, pois na nossa região não há esse tipo de comercio. Toda vez que faltava

um produto tínhamos que parar o processo de montagem, e deslocar até São Paulo

para efetuar a compra, ou até mesmo fazer pedido por meio do comércio eletrônico,

onde demorava alguns dias para ser entregue.

Outro ponto a ser destacado foi a programação, apesar de termos passado

por dois semestres de linguagem de programação, tivemos alguma dificuldade na

elaboração do código, pois é nessa hora que percebemos que tem muita coisa ainda

para aprender. Decidimos a não procurar alguém para fazer o código ou até mesmo

nos ajudar nesse ponto, e sim procuramos tentar a entender e aprender mais sobre

Page 8: Inseto robo

programação, o que nos possibilitou a formular o código, que ainda pode ser

melhorado e até mesmo simplificado.

Por fim unindo informações desconexas, várias tentativas e muito esforço, as

dificuldades foram sendo vencidas e então deram lugar à satisfação de ver cada

etapa superada.

2 MICROCONTROLADOR

O microcontrolador é um componente eletrônico programável que configura-

se como um sistema computacional completo, onde se incluem uma CPU (Central

Processor Unit), memória de dados, memória de programa e EEPROM, pinos de

Entrada/Saída que podem ser analógicos ou digitais, temporizadores, comunicação

USB e serial, osciladores, conversores A/D, comparadores e geradores de pulso.

Utilizado em projetos de automação e na construção de aparelhos

eletrônicos, possuem tamanho reduzido e apresentam pequeno consumo de

energia, porém o mais relevante é seu baixo custo, o que torna popular a utilização

do microcontrolador em vários dispositivos comercializados, tornando-se uma

alternativa muito eficiente para controlar vários processos.

Diferente dos microprocessadores em

vários aspectos, pois não necessita do

acréscimo de componentes ao sistema, poupa

tempo e espaço na construção dos

dispositivos, uma vez que os periféricos

necessários já se encontram no

encapsulamento. A Fig.2.1 mostra alguns tipos

de microcontroladores.

2.1 MICROCONTROLADORES VERSUS MICROPROCESSADORES

Um microcontrolador difere de um microprocessador em vários aspectos.

Primeiro e o mais importante, é a sua funcionalidade. Para que um

microprocessador possa ser usado, outros componentes devem-lhe ser adicionados,

Fig. 2.1 - Microcontroladores

Page 9: Inseto robo

tais como memória e componentes para receber e enviar dados. Em resumo, isso

significa que o microprocessador é o verdadeiro coração do computador. Por outro

lado, o microcontrolador foi projetado para ter tudo num só. Nenhuns outros

componentes externos são necessários nas aplicações, uma vez que todos os

periféricos necessários já estão contidos nele. Assim, nós poupamos tempo e

espaço na construção dos dispositivos.

2.2 APLICABILIDADE

Para cada necessidade, deve-se avaliar cuidadosamente a escolha do

microcontrolador, a fim de evitar um aumento no custo do projeto final. Existem

várias empresas fabricantes de integrados que possuem muitas linhas de

microcontroladores, diferenciadas pela capacidade de processamento ou

armazenamento e periféricos integrados ao sistema de maneira que o projetista

possa escolher adequadamente o modelo mais indicado para o seu projeto, evitando

agregar gastos desnecessários ao produto final.

Os microcontroladores se fazem presentes em diversos segmentos, dos quais

podemos citar a automação industrial, automação comercial, automação predial,

área automobilística, área agrícola, produtos manufaturados, eletrodomésticos,

telecomunicações, entre outros.

A maioria dos eletrônicos e eletrodomésticos são controlados por

microcontroladores, que podem ser encontrados em todos os lugares, como:

televisores, refrigeradores, celulares, instrumentos musicais eletrônicos, forno de

microondas e em outros diversos produtos que são frequentemente usados todos os

dias por todas as pessoas.

Com uma produção

estimada em 63 milhões de

carros no mundo a cada ano,

um carro possui

aproximadamente 30

microcontrolador nos modelos

mais simples e cerca de 70

microcontroladores nos

Fig. 2.2 - Uso de microcontroladores em automóveis

Page 10: Inseto robo

modelos mais completos, o que agrega segurança, conforto e eficiência ao veículo

figura 2.2. Fonte: Microchip Technology Inc. (www.microchip.com)

Em residências figura 2.3, são

utilizados na automação de portões,

alarmes, sensores de luminosidade,

cortinas motorizadas, climatização,

centrais telefônicas, irrigação de

jardins, e várias outras aplicações. Fonte:

2.3 ESTRUTURA DO MICROCONTROLADOR

O microcontrolador é composto por:

CPU - conecta todos os blocos do microcontrolador e executa o

programa;

Memória de programa – armazena o programa que a CPU

executará, pode ser regravada inúmeras vezes sem danificar o

microcontrolador para modelos com memória tipo Flash.

Memória EEPROM – usada para guardar dados importantes que não

podem ser perdidos após o desligamento da alimentação.

Memória RAM – memória utilizada pelo programa durante sua execução

que armazena os resultados intermediários ou temporários.

Barramentos – existem dois tipos de barramentos, que são os caminhos

de comunicação entre os componentes do microcontrolador. O

barramento de endereço serve para endereçar posições de memória para

a CPU, e o barramento de dados interliga os componentes internos do

microcontrolador.

Entrada / Saída – dispositivos que interligam o microcontrolador com

sistemas externos, comunicam-se com os outros componentes do

microcontrolador através do barramento de dados.

Contador e temporizador – usados em rotinas que precisam de noções

de tempo ou contadores temporais, utiliza um registrador de 8 bits

independente do programa. O contador incrementa até atingir o valor

máximo de 255 e recomeça a contagem a partir de zero. O tempo entre

Fig. 2.3 - Automação doméstica

Page 11: Inseto robo

dois incrementos sucessivos do temporizador, pode ser utilizado para

medir intervalos de tempo.

Watchdog – Uma outra coisa que nos vai interessar é a fluência da

execução do programa pelo microcontrolador durante a sua utilização.

Suponha que como resultado de qualquer interferência (que ocorre

frequentemente num ambiente industrial), o nosso microcontrolador pára

de executar o programa ou, ainda pior, desata a trabalhar incorretamente.

Claro que, quando isto acontece com um computador, nós simplesmente

carregamos no botão de reset e continuamos a trabalhar. Contudo, no

caso do microcontrolador nós não podemos resolver o nosso problema

deste modo, porque não temos botão. Para ultrapassar este obstáculo,

precisamos de introduzir no nosso modelo um novo bloco chamado

watchdog (cão de guarda). Este bloco é de facto outro contador que está

continuamente a contar e que o nosso programa põe a zero sempre que é

executado corretamente. No caso de o programa "encravar", o zero não

vai ser escrito e o contador, por si só, encarregar-se-á de fazer o reset do

microcontrolador quando alcançar o seu valor máximo. Isto vai fazer com

que o programa corra de novo e desta vez corretamente. Este é um

elemento importante para que qualquer programa se execute fiavelmente,

sem precisar da intervenção do ser humano.

Conversor Analógico/Digital (A/D) – Como os sinais dos periféricos são

substancialmente diferentes daqueles que o microcontrolador pode

entender (zero e um), eles devem ser convertidos num formato que possa

ser compreendido pelo microcontrolador. Esta tarefa é executada por

intermédio de um bloco destinado à conversão analógica-digital ou com

um conversor A/D. Este bloco vai ser responsável pela conversão de uma

informação de valor analógico para um número binário e pelo seu trajeto

através do bloco do CPU, de modo a que este o possa processar de

imediato.

2.4 FUNCIONAMENTO

Ciclos de máquina: Nos microcontroladores PIC, um ciclo de máquina

possui internamente uma divisão em quatro partes iguais, assim, para um sinal de

Page 12: Inseto robo

clock externo de 4 MHz, temos um clock interno de 1 MHz, consequentemente

teremos um ciclo de máquina igual a 1 μs. A Figura 2.4 representa a divisão do ciclo

de máquina.

Fig. 2.4 - Ciclo de Máquina

Da divisão do clock, formam quatro fases Q1, Q2, Q3 e Q4. O contador de

programa é incrementado automaticamente na fase Q1 do ciclo de máquina e a

próxima instrução é resgatada da memória de programa e guardada no registrador

de instruções no ciclo Q4.

A instrução é decodificada e executada no ciclo de máquina seguinte, entre o

intervalo de Q1 e Q4. Essa característica de buscar uma informação para executá-la

no próximo ciclo ao mesmo tempo em que outra instrução é carregada, denomina-se

pipeline (sobreposição).

O pipeline permite que quase todas as instruções executem em apenas um

ciclo, otimizando o sistema.

Existem instruções que fogem a esta regra, que são as instruções que geram

“saltos” no contador do programa, como chamadas de funções em outros locais da

memória de programa ou em retornos dessas funções.

Page 13: Inseto robo

3 SENSOR INFRAVERMELHOSensores são elementos importantes porque servem na maioria das vezes

como olhos para alarmes e robôs. Um sensor infravermelho que pode ser feito sem

nenhum problema e que utiliza apenas um comparador de tensão para filtragem de

ruídos externos.

Mas antes de falar sobre o circuito vamos entender um pouco como podemos

utilizar um sensor IR.

Este circuito pode ser utilizado

principalmente de duas maneiras:

detecção pode reflexão e detecção

por interrupção de feixe.

3.1 Detecção por ReflexãoNeste tipo de aplicação, um

feixe é projetado por LED emissor de

luz infravermelha que, ao ser refletido por algum obstáculo, é detectado por um foto-

transistor. Quanto mais próximo o

obstáculo estiver do conjunto emissor-receptor, maior será a intensidade do sinal

recebido. A figura 3.1 abaixo mostra um exemplo de detecção por reflexão.

2) Detecção por InterrupçãoNeste tipo de aplicação, o emissor e receptor são instalados um em frente ao

outro. Para este caso, o receptor fica constantemente recebendo o feixe de

infravermelho. A figura 3.2 mostra um exemplo de detecção por interrupção.

Porém, neste circuito o ajuste torna-se crítico em virtude de interferências

externas geradas pela luz infravermelha do sol e

de lâmpadas em ambientes fechados.

Por isso esta montagem somente é

indicada em situações onde é possível a proteção

do receptor, ou seja instalação de uma câmera

escura.

Fig. 3.5 - Detecção por Reflexão

Fig 3.6 - Detecção por interrupção

Page 14: Inseto robo

Um exemplo bem simples de confecção de uma câmera escura, é utilizando

um tubo com a mesmo diâmetro do receptor, preferencialmente, conforme mostrado

fig 3.3.

OBS: Mas se isso não for suficiente

para seu projeto, então será

necessário realizar a modulação do

sinal. Pois adetecção através de um

sinal infravermelho modulado

apresenta grande imunidade a ruído,

permitindo a detecção em distâncias maiores.

Neste circuito utilizamos um comparador de tensão ( LM339 ) que possui

quatro comparadores internos, sendo que a principal função deste componente é

reduzir a interferência externa. Pois a montagem do receptor IR em serie com um

resistor de 47 K ohms em ambiente escuro fornece uma variação de 0 a 5v, porem

em um ambiente iluminado esta variação é bem menor. Por isso a necessidade do

comparador que usa como referência a tensão proveniente do potenciômetro, assim

teremos a mesma variação de 0 a 5v.

 Com esta montagem e possível detectar uma objeto a uma distância de 15

cm dependendo do ambiente, porem se necessitar de uma distância maior basta

substituir resistor de 330 ohms por outro de menor valor, levando em consideração a

corrente máxima suportada pelo emissor IR.

4 LINGUAGEM DE PROGRAMAÇÃO E COPILADORES

Uma linguagem de programação é um método padronizado para

comunicar instruções para um computador. É um conjunto de regras sintáticas e

semânticas usadas para definir um programa de computador. Permite que um

programador especifique precisamente sobre quais dados um computador vai atuar,

como estes dados serão armazenados ou transmitidos e quais ações devem ser

Fig 3.7 – Camera Escura

Page 15: Inseto robo

tomadas sob várias circunstâncias. Linguagens de programação podem ser usadas

para expressar algoritmos com precisão.

Uma das principais metas das linguagens de programação é permitir que

programadores tenham uma maior produtividade, permitindo expressar suas

intenções mais facilmente do que quando comparado com a linguagem que um

computador entende nativamente (código de máquina). Assim, linguagens de

programação são projetadas para adotar uma sintaxe de nível mais alto, que pode

ser mais facilmente entendida por programadores humanos. Linguagens de

programação são ferramentas importantes para que programadores e engenheiros

de software possam escrever programas mais organizados e com maior rapidez.

Um compilador é um programa de computador (ou um grupo de programas) que,

a partir de um código fonte escrito em uma linguagem compilada, cria um programa

semanticamente equivalente, porém escrito em outra linguagem, código objeto. Ele

é chamado compilador por razões históricas; nos primeiros anos da programação

automática, existiam programas que percorriam bibliotecas de subrotinas e as reunia

juntas, ou compilava, as subrotinas necessárias para executar uma determinada

tarefa.

O nome "compilador" é usado principalmente para os programas que traduzem o

código fonte de uma linguagem de programação de alto nível para uma linguagem

de programação de baixo nível (por exemplo, Assembly ou código de máquina).

Contudo alguns autores citam exemplos de compiladores que traduzem para

linguagens de alto nível como C. Para alguns autores um programa que faz uma

tradução entre linguagens de alto nível é normalmente chamado um tradutor,

filtro ou conversor de linguagem. Um programa que traduz uma linguagem de

programação de baixo nível para uma linguagem de programação de alto nível é

um descompilador. Um programa que faz uma tradução entre uma linguagem de

montagem e o código de máquina é denominado montador (assembler). Um

programa que faz uma tradução entre o código de máquina e uma linguagem de

montagem é denominado desmontador (disassembler). Se o programa compilado

pode ser executado em um computador cuja CPU ou sistema operacional é diferente

daquele em que o compilador é executado, o compilador é conhecido como

um compilador cruzado.

Page 16: Inseto robo

4.1 INTERPRETAÇÃO E COMPILAÇÃO

Uma linguagem de programação pode ser

convertida, ou traduzida, em código de máquina

por compilação ou interpretada por um processo

denominado interpretação. Em ambas ocorre

a tradução do código fonte para código de máquina.

Se o método utilizado traduz todo o texto do

programa (também chamado de código), para só

depois executar o programa, então diz-se que o

programa foi compilado e que o mecanismo utilizado

para a tradução é um compilador (que por sua vez

nada mais é do que um programa), figura 4.1. A versão

compilada do programa tipicamente é armazenada, de

forma que o programa pode ser executado um número

indefinido de vezes sem que seja necessária nova

compilação, o que compensa o tempo gasto na compilação. Isso acontece com

linguagens como Pascal e C.

Se o texto do programa é executado à medida que vai sendo traduzido, como

em JavaScript, BASIC, Python ou Perl, num processo de tradução de trechos

seguidos de sua execução imediata, então diz-se que o programa foi interpretado e

que o mecanismo utilizado para a tradução é um interpretador. Programas

interpretados são geralmente mais lentos do que os compilados, mas são também

geralmente mais flexíveis, já que podem interagir com o ambiente mais facilmente.

Embora haja essa distinção entre linguagens interpretadas e compiladas, as

coisas nem sempre são tão simples. Há linguagens compiladas para um código de

máquina de uma máquina virtual (sendo esta máquina virtual apenas mais um

software, que emula a máquina virtual sendo executado em uma máquina real),

como Java (compila para a plataforma Java ) e C♯ (compila para a plataforma CLI ).

E também há outras formas de interpretar em que os códigos fontes, ao invés de

serem interpretados linha-a-linha, têm blocos "compilados" para a memória, de

acordo com as necessidades, o que aumenta a performance dos programas quando

os mesmos módulos são chamados várias vezes, técnica está conhecida como JIT.

Fig. 4.8 - O processo da compilação

Page 17: Inseto robo

Como exemplo, podemos citar a linguagem Java. Nela, um compilador traduz o

código java para o código intermediário (e portável) da JVM. As JVMs originais

interpretavam esse código, de acordo com o código de máquina do computador

hospedeiro, porém atualmente elas compilam, segundo a técnica JIT o código JVM

para código hospedeiro.

A tradução é tipicamente feita em várias fases, sendo as mais comuns a análise

léxica, a análise sintática (ou parsing), a geração de código e a otimização. Em

compiladores também é comum a geração de código intermediário.

4.2 CONCEITOS

4.2.1 PROGRAMAÇÃO ESTRUTURADA

Programação estruturada é uma forma de programação de computadores que

preconiza que todos os programas possíveis podem ser reduzidos a apenas três

estruturas: sequência, decisão e repetição. Um dos primeiros a preconizar a

programação estruturada foi Haskell B. Curry. Tendo, na prática, sido transformada

na Programação modular, a Programação estruturada orienta os programadores

para a criação de estruturas simples em seus programas, usando as sub-rotinas e

as funções. Foi a forma dominante na criação de software entre a programação

linear e a programação orientada por objetos. Apesar de ter sido sucedida pela

programação orientada por objetos, pode-se dizer que a programação estruturada

ainda é marcantemente influente, uma vez que grande parte das pessoas ainda

aprendem programação através dela. Porém, a orientação a objetos superou o uso

das linguagens estruturadas no mercado.

4.2.2 PROGRAMAÇÃO ORIENTADA A OBJETOS

Orientação a objetos, também conhecida como Programação Orientada a

Objetos (POO) ou ainda em inglês Object-Oriented Programming (OOP) é um

paradigma de análise, projeto e programação de sistemas de software baseado na

composição e interação entre diversas unidades de software chamadas de objetos.

O extensivo uso de objetos, particularmente em conjunção com o mecanismo de

herança, caracteriza o estilo de programação orientada a objetos. Em alguns

contextos, prefere-se usar modelagem orientada ao objeto, em vez de programação.

De fato, o paradigma "orientação a objetos" tem bases conceituais e origem no

Page 18: Inseto robo

campo de estudo da cognição, que influenciou a área de inteligência artificial e da

linguística no campo da abstração de conceitos do mundo real.

Na qualidade de método de modelagem, é tida como a melhor estratégia, e mais

natural, para se eliminar o "gap semântico", dificuldade recorrente no processo de

modelar o mundo real, no domínio do problema, em um conjunto de componentes

de software que seja o mais fiel na sua representação deste domínio. Facilitaria a

comunicação do profissional modelador e do usuário da área alvo, na medida em

que a correlação da simbologia e conceitos abstratos do mundo real e da ferramenta

de modelagem (conceitos, terminologia, símbolos, grafismo e estratégias) fosse a

mais óbvia, natural e exata possível. A análise e projeto orientados a objetos tem

como meta identificar o melhor conjunto de objetos para descrever um sistema de

software.

O funcionamento deste sistema se dá através do relacionamento e troca de

mensagens entre estes objetos. Na programação orientada a objetos, implementa-

se um conjunto de classes que definem os objetos presentes no sistema de

software. Cada classe determina o comportamento (definido nos métodos) e estados

possíveis (atributos) de seus objetos, assim como o relacionamento com outros

objetos.

4.2.3 PROGRAMAÇÃO LINEAR

Em matemática, problemas de Programação Linear são problemas de otimização

nos quais a função objetivo e as restrições são todas lineares. Programação Linear é

uma importante área da otimização por várias razões. Muitos problemas práticos em

pesquisa operacional podem ser expressos como problemas de programação linear.

Certos casos especiais de programação linear, tais como problemas de network

flow e problemas de multicommodity flow são considerados importantes o suficiente

para que se tenha gerado muita pesquisa em algoritmos especializados para suas

soluções. Vários algoritmos para outros tipos de problemas de otimização funcionam

resolvendo problemas de PL como sub-problemas. Historicamente, idéias da

programação linear inspiraram muitos dos conceitos centrais de teoria da

otimização, tais como dualidade, decomposição, e a importância da convexidade e

suas generalizações.

Page 19: Inseto robo

4.3 LISTA DE LINGUAGENS

Existem várias linguagens de programação; de acordo com o Índice Tiobe, as 20

mais populares são:

1. C

2. Java

3. Objective-C

4. C++

5. PHP

6. C♯

7. Visual Basic

8. Python

9. Perl

10.JavaScript

11.Ruby

12.Visual Basic .NET

13.Transact-SQL

14.Lisp

15.Pascal

16.Bash

17.PL/SQL

18.Delphi / Object Pascal

19.Ada

20.MATLAB

5 HARDWARE

O hardware pode ser compreendido como a parte física do projeto, composta

pelos componentes eletrônicos, pelos sensores, vibradores, cabos, conectores e

pela placa em si. O hardware é basicamente utilizado por computadores e

eletrônicos, qualquer equipamento como chaves, fechaduras, correntes e peças do

próprio computador, são chamados de hardwares. Os hardwares não se limitam

Fig. 4.9 - Livros sobre diversas linguagens de programação

Page 20: Inseto robo

apenas a computadores pessoas, também estão disponíveis em automóveis,

aparelhos de celular e etc.

Para o bom funcionamento do hardware, é também necessário o software,

que é a parte lógica da informática.

A seguir mostraremos alguns hardwares e componentes utilizados nesse

projeto.

5.1 MICROCONTROLADOR ATMEL ATMEGA32U4 A Figura 5.1 mostra-nos o microcontrolador

ATmega32U4 da Atmel é utilizado nos Arduinos mais

recentes. É um microcontrolador de 8 bits, com arquitetura

Harvard modificada. Neste post e nos próximos veremos

algumas de suas características.

5.1.1 UM POUCO SOBRE A FAMÍLIA

O megaAVR é ideal para aplicações que utilizam grandes quantidades de

código e memória de dados oferece programa eo desempenho até 20 MIPS. A

tecnologia inovadora picoPower minimiza o consumo de energia. Todos os

megaAVR oferecem sintonizador automático para rápido, seguro, custo atualizações

eficientes e econômicos. Você pode até mesmo atualizar a memória flash durante a

execução do aplicativo. A família de MegaAVR baseia-se numa tecnologia

comprovada e líder do mercado e oferece a mais ampla seleção de dispositivos em

termos de memória, o número de pinos e periféricos. Escolha a partir de dispositivos

de uso geral para modelos com periféricos especializados, tais como USB,

controladores de LCD e amplificadores, controladores CAN e LIN. É fácil encontrar a

combinação perfeita para o seu projeto megaAVR família de produtos.

5.2 PLACA PRINCIPAL

Foi feita a montagem de um circuito essencial para o funcionamento do

microcontrolador, com base o funcionamento de um arduino só que em tamanho

Fig. 5.10 - ATmega32U4

Page 21: Inseto robo

reduzido, para caber dentro do cano da bengala. Utilizamos o Beetle e gravamos o

programa usando o Arduino.

5.2.1 PLACA CONTROLADORA

A figura 5.2 mosra a nova geração do

controlador deriva sua noção central do

minimalismo sem comprometer a

funcionalidade. Ele vem com Atmel

AtMega32u4 ( folha de dados ) @ 16MHz

hora do relógio e se expandiu quantidades

de interfaces: 10 pinos digitais, 5 pinos

analógicos e 4 pinos pwn. Para tornar ainda

mais que amigável, ele é compatível com Micro USB para que a programação

direta e teste não é mais uma dor de cabeça.

5.2.2 FUNÇÃO DOS COMPONENTES

Cristal, e Capacitores : Gerar o sinal de clock para o microcontrolador.

Resistor: Evitar que ruído eletromagnético baixe a tensão do pino de reset

causando o reset do microcontrolador. Pode ser removido, mas não é

indicado em lugares com campo magnético forte (perto de geradores,

motores e etc.).

Botão: Baixa a tensão do pino reset pra 0V causando um reset proposital.

Capapacitor: Ajuda a estabilizar a tensão vindo da fonte. Vital quando usado

com fontes de tomada, pois ameniza picos e quedas de luz. Usando com

baterias não se faz muito necessário e pode ser dispensado.

LED: é um componente eletrônico semicondutor, ou seja, um diodo emissor

de luz.

5.3 SENSOR DE DISTÂNCIA SHARP GP2Y0A02YK

Fig 5.3 - Os sensores de distância da Sharp

são uma escolha comum para muitos projetos que

necessitam deste tipo de medidas. Este sensor de

IR (infravermelho) é mais econômico do que os

sonares e fornecem melhores resultados que

Fig. 5.11 – Placa Controladora

Fig 5.12 – Sensor Infravermelho

Page 22: Inseto robo

outras alternativas baseadas em IR. A conexão com microcontroladores é bastante

simples: a saída analógica pode ser conectada para um conversor de análogo para

digital (ADC) para tomadas de medidas de distância, ou a saída pode ser conectada

a um comparador para detecção de limites. A faixa de detecção deste sensor é de

20 a 150cm..

5.3.1 ESPECIFICAÇÕES

voltagem operacional: 4,5 a 5,5V consumo médio de corrente: 33mA (típico) faixa de distância operacional: 20 a 150 cm (8" a 60") tipo de saída: voltagem analógica tempo de resposta: 38 ± 10 ms tamanho da peça: 29.5x13.0x21.5 mm (1.16x0.5x0.85") peso: 4.8g

5.4 PLACA EXPANSÃO DE HARDWARE

A figura 5.4 mostra a placa de expansão que

é projetado para conectar um controlador, servos e

sensores. Funciona em 3V a 5V, tem seis pinos D9,

D10, D11 e A0, A1, A2, assim os dois pinos de

alimentação + e - além de entrada USB.

5.5 MICRO SERVO 9G SG90 TOWERPRO

A Figura 5.5 mostra-nos servos motores

Pode ser ligado diretamente ao microcontrolador,

ou por exemplo no Arduino. A comunicação é

unidirecional, ou seja, apenas o transmissor envia os

dados para o receptor.

5.5.1 ESPECIFICAÇÕES

.- Voltagem de Operação: 3,0 - 7,2V- Ângulo de rotação: 180 graus- Velocidade: 0,12 seg/60Graus (4,8V) sem carga- Torque: 1,2 kg.cm (4,8V) e 1,6 kg.cm (6,0V)- Temperatura de Operação: -30C ~ +60C

Fig. 5.14 – Micro Servo

Fig. 5.13 – Placa expansão

Page 23: Inseto robo

- Tipo de Engrenagem: Nylon- Tamanho cabo: 245mm- Dimensões: 32 x 30 x 12mm- Peso: 9g

6 SOFTWAREQuando tratamos de software na plataforma do Arduino, podemos referir-nos: ao

ambiente de desenvolvimento integrado do Arduino e ao software desenvolvido por

nós para enviar para a nossa placa. O ambiente de desenvolvimento do Arduino

figura 6.1 é um compilador gcc (C e C++) que usa uma interface gráfica construída

em Java. Basicamente se resume a um programa IDE muito simples de se utilizar e

de estender com bibliotecas que podem ser facilmente encontradas. As funções da

IDE do Arduino são basicamente duas: Permitir o desenvolvimento de um software e

enviá-lo à placa para que possa ser executado.

Obviamente, por ser open source, é gratuito. Depois de baixado não

necessita de nenhuma instalação, é só abrir o IDE e começar a utilizar. Para

começar a utilizar, devemos escolher qual placa estamos utilizando, assim vamos

em Tools > Board e à escolhemos. O IDE possui também uma quantidade imensa

Fig. 6.15 - Ambiente de programação

Page 24: Inseto robo

de exemplos. Para utilizá-los basta ir a File > Examples e escolher qual deles você

quer testar, de acordo com sua necessidade.

6.1 ESTRUTURA DO PROGRAMA

O programa para o Arduino é dividido em duas partes principais: Setup e

Loop, mostradas na figura 6.2.

A função setup serve para inicialização da placa e do programa. Esta sessão

é executada uma vez quando a placa é ligada ou resetada através do botão. Aqui,

informamos para o hardware da placa o que vamos utilizar dele. No exemplo, vamos

informar para a placa que o pino 13 será uma saída digital onde está conectado um

LED (no Arduino UNO o pino 13 possui um led integrado).

Fig. 6.16 - Entendendo o programa

Page 25: Inseto robo

A função loop é como se fosse a main () da placa. O programa escrito dentro

da função loop é executado indefinidamente, ou seja, ao terminar a execução da

última linha desta função, o programa inicia novamente a partir da primeira linha da

função loop e continua a executar até que a placa seja desligada ou o botão de

reset seja pressionado.

Analisando o resto do programa, o comando digitalWrite escreve na saída do

pino 13 o nível de tensão HIGH (5v), acendendo o Led. O comando delay é apenas

para o programa aguardar 1000 milésimos. Em seguida, o nível de tensão é alterado

para LOW (0v) e o Led apaga. E assim é repetido infinitamente, até ser desligado.

Com o programa feito, compilamos o mesmo para verificarmos se não existe

nem um erro. Caso não contenha erro, agora temos que enviá-lo para placa através

do botão de upload (os botões estão especificados na figura 4). Após o envio os

Led’s RX e TX deverão piscar, informando que o código está sendo carregado. Logo

após o arduíno começará a executar o programa que lhe foi enviado.

6.2 SERIAL MONITOR

A figura 6.3 mostra o

monitor que é usado para

que possamos comunicar

nossa placa com o

computador, mas também é

muito útil para a depuração

do programa. Basicamente

conectamos a placa no

computador e através desta

tela podemos ver as informações enviadas pela placa.

No exemplo, o comando Serial.begin(9600) inicializa a comunicação com

uma taxa de 9600 baunds (taxa de bits). O comando Serial.println (‘argumento’) envia a mensagem para o computador.

Fig. 6.17 - Exemplo serial monitor

Page 26: Inseto robo

Após compilar e enviar o programa para

placa, abrimos o serial monitor. As

informações enviadas pela nossa placa

Arduino aparecem no console figura 6.4.

6.3 OUTROS COMANDOS

Como já foi informado, e vocês já devem ter observado, a linguagem base

para a programar um Arduino é C. Logo, suas estruturas de controle (if, else, while,

for...), seus elementos de sintaxe ( #define, #include, {}...), operadores aritméticos (+,

-, *, ^ ...), operadores de comparação (==, !=, <, > ...), enfim, todos são utilizados

aqui no IDE. Portanto, saber C é primordial para programar o Arduino em alto nível.

Abaixo segue as principais funções para controlar o arduíno (algumas já

foram especificados acima):

pinMode (pin, mode): Configura o pino especificado para que se

comporte como entrada ou saída, sendo Pin = número do pino e mode =

INPUT ou OUTPUT

digitalWrite (pin,value): escreve um valor HIGH ou LOW em um pino

digital. Se o pino foi configurado como saída sua voltagem será

determinada ao valor correspondente: 5V para HIGH e 0V para LOW. Se

o pino estiver configurado como entrada escrever um HIGH levantará o

resistor interno de 20kΩ. Escrever um LOW rebaixará o resistor.

Obviamente pin = numero do pino e valor = HIGH ou LOW.

int digitalRead (pin): Lê o valor de um pino digital especificado, HIGH ou

LOW. Pin = numero do pino. Retorna HIGH ou LOW.

Int analogRead (pin): Lê o valor de um pino analógico especificado. Pode

mapear voltagens entre 0 a 5v, sendo 4,9mV por unidade.

analogWrite (pin, value): Escreve um valor analógico (onda PWM,

explicaremos mais abaixo). Pode ser utilizada para acender um LED

variando o brilho ou girar um motor a velocidade variável. Após realizar

essa função o pino vai gerar uma onda quadrada estável com ciclo de

Fig. 6.18 - Saída no serial monitor

Page 27: Inseto robo

rendimento especificado até que o próximo analogWrite() seja realizado

(ou que seja realizado um digitalRead() ou digitalWrite() no mesmo pino).

6.3.1 PROGRAMAÇÃO PARA INSETO ROBÔ

É fornecido a plataforma

arduino três linguagens de

programação

como Ardublock, Mente

+ e IDE. Podendo ser

programada simplesmente

arrastando e soltando blocos pré-

concebidos vistos softwares de

programação visual Ardublock e

Mente +. Para programadores

avançados, também é possível

modificar Arduino IDE.

6.3.2 ARDUBLOCKO software Ardublock é um plug-in que é adicionado ao IDE do arduino e que

permite ao usuário programar em blocos de funções, um pouco como scracth4arduino, ou para AppInventor para androide. O bom ponto de ardublock é que gera as linhas de códigos. Além de blocos que são traduções literais das funções na biblioteca Arduino, ele também fornece alguns blocos pré-definidos para trabalhar com uma variedade de componentes eletrônicos apoiados por colher, Adafruit, DFrobot. TINKERKIT do Arduino e suporte parcial para o Grove.

7 MONTAGEM E RESULTADOS

A seguir como é construir o Inseto Robô com 2x 9g micro servo, 1x Cheapduino V2 witht eh Atmega 32U4 e entrada USB para fácil programação. O Cheapduino está soldado no servo / sensor escudo para swervos conexão fácil e de sensores de curso. O pequeno bicho corre com um pequeno 3.7 / 180mAh LiPo

Fig 6.19 - Programação para Inseto Robô

Page 28: Inseto robo

bateria que vem com um carregador USB e está à procura de obstáculos com um sensor IR da Sharp.Escritos suficientes, aí vem as figuras de montagem:

Fig 7.20- Restantes das figuras são de montagem

Basta usar fita dupla face de espuma e zip laços para manter o robô em conjunto.

Cole os dois servos com a fita juntos.

Em seguida, prenda-os com uma fita relemame (enforca gato).

Page 29: Inseto robo

Fixar a bateria sobre o bordo

Deve ficar assim a união dos dois componentes.

Dobrar o fio para moldar as pernas. Ambas as extremidades devem ser do mesmo comprimento. Passar o fio de aço 0,8 milímetros (Utilizamos um fio 304 de aço inoxidável, uma vez que ainda é forte o suficiente para manter a forma depois de flexão, mas macio o suficiente para cortar com um cortador de arame).

Prenda-o com o parafuso que vem com os servos.

Page 30: Inseto robo

Eu usei folha de ABS para cortar um suporte de sensor. 

Use o parafuso que vem com o seu servo para prender o suporte do sensor.

Page 31: Inseto robo

O sensor será realizado por pequenos laços zip que se parece muito com antenas ou antenas de um inseto:-)

Vista frontal.

A cabeça ...

Um outro pedaço de fita adesiva do outro lado da bateria ...

Page 32: Inseto robo

... Realizará a bordo, inclusive, a blindagem na parte de trás do robô.

Page 33: Inseto robo

Conecte os servos e o sensor com os pinos certos e você está quase pronto.

Conecte a bateria e ligar o bicho pequeno diante. Ele deve andar para a frente até detectar um obstáculo e desviar em uma curva e depois de um tempo, voltar a andar novamente.

8 CONCLUSÕES

O objetivo de movimentar desviando de obstáculos foi atingido, a montagem

do protótipo ficou dentro das expectativas. Além dos conhecimentos de eletrônica

adquiridos, o projeto permitiu a integração entre várias disciplinas ministradas no

curso, desenvolvimento do dispositivo também foi bastante satisfatório, pois foi

possível trabalhar com a robótica, eletrônica digital e analógica, e com a linguagem

de programação.

Page 34: Inseto robo

9 REFERÊNCIAS

CAVALCANTE, Alyson . Apostilha Microcontroladores. Artigo: Microcontroladores.

Disponível em: <http://www.slideshare.net/AlysonCavalcante/10-apostila-

microcontroladores> Acessado em 03/10/2013

WIKIPÉDIA, A ENCICLOPÉDIA LIVRE. Artigo: Compilador. Disponível em:

<http://pt.wikipedia.org/wiki/Compilador>. Acessado em 03/10/2013.

WIKIPÉDIA, A ENCICLOPÉDIA LIVRE. Artigo: Linguagem de Programação.

Disponível em: <http://pt.wikipedia.org/wiki/Linguagem_de_programa

%C3%A7%C3%A3o> Acessado em 03/10/2013

SIGNIFICADOS. Artigo: Significado de Hardware. Disponível em:

<http://www.significados.com.br/hardware/> Acessado em 03/10/2013

FILIPEFLOP. Artigo: Servo Motor. Disponível em: <http://www.filipeflop.com/pd-

71590-micro-servo-9g-sg90-towerpro.html> Acessado em 12/11/2014

ERUS, Equipe De Robótica Da Ufes. Departamento de Informática do Centro

Tecnológico da Universidade Federal do Espírito Santo. Artigo: Minicurso Arduino.

Page 35: Inseto robo

Disponível em: <http://www.inf.ufes.br/~erus/arquivos/ERUS_minicurso

%20arduino.pdf> Acessado em 03/10/2013

APÊNDICE A – Layout da placa.

Page 36: Inseto robo

APÊNDICE B – Código fonte

/*Desenvolvido por ÉDY CARLOS DOS SANTOS, 28/10/2014 */

// Servo Library

#include <Servo.h>

// Servo name

Servo frontServo;

Servo rearServo;

// time delay between steps

int walkSpeed = 500;

// center servos

int centerPos = 90;

// servo angles for walking pattern

int frontRightUp = 70;

int frontLeftUp = 110;

int backRightForward = 70;

int backLeftForward = 110;

// another center position

int centerTurnPos = 81;

// servo angles for walking pattern

int frontTurnRightUp = 70;

int frontTurnLeftUp = 110;

int backTurnRightForward = 70;

int backTurnLeftForward = 110;

// variable for distance value

int distance = 0;

// average distance value

int distanceCheck = 0;

// Array for distance values

int collectDistance[5];

// Variables for counters

Page 37: Inseto robo

int i;

int f;

int r;

// assign analog pin A1

int sensorPin = A1;

// distance value for danger close. Bigger values are greater distance and smaller

values are lower distance

int dangerDistance = 350;

/* Setup function */

void setup()

{

// attach servos

frontServo.attach(9);

rearServo.attach(10);

// assign sensor

pinMode(sensorPin, INPUT);

// center servos

frontServo.write(centerPos);

rearServo.write(centerPos);

// wait 3 seconds for start walking

delay(3000);

//Serial.begin(9600); // serial data setup

}

/* distance check function */

void scan()

{

// read 5 distance values

for (i = 0; i < 5; i = i + 1) {

distanceCheck = analogRead(sensorPin);

collectDistance[i] = distanceCheck;

// serial output for testing

//Serial.print (i);

//Serial.print(" = ");

Page 38: Inseto robo

//Serial.println(collectDistance[i]);

}

// checksum of the 5 distance values for getting an average value. This will

prevent the robot to change behavior by reading one wrong value

distance =

(collectDistance[0]+collectDistance[1]+collectDistance[2]+collectDistance[3]+collectD

istance[4])/5;

delay(20);

}

// walk forward

void moveForward()

{

// loop for the servo angels to smoothen the steps

for (f = 0; f < 39; f++){

frontRightUp++;

backLeftForward--;

frontServo.write(frontRightUp);

rearServo.write(backLeftForward);

delay(10);

}

// loop for the servo angels to smoothen the steps

for (r = 0; r < 39; r++){

frontRightUp--;

backLeftForward++;

frontServo.write(frontRightUp);

rearServo.write(backLeftForward);

delay(10);

}

}

// walk backwards to the left

void moveBackRight()

{

frontServo.write(frontRightUp);

Page 39: Inseto robo

rearServo.write(backRightForward-6);

delay(110);

frontServo.write(centerPos);

rearServo.write(centerPos-6);

delay(80);

frontServo.write(frontLeftUp+9);

rearServo.write(backLeftForward-6);

delay(110);

frontServo.write(centerPos);

rearServo.write(centerPos);

delay(80);

}

// walk forward to the left

void moveTurnLeft()

{

frontServo.write(frontTurnRightUp);

rearServo.write(backTurnLeftForward);

delay(110);

frontServo.write(centerTurnPos);

rearServo.write(centerTurnPos);

delay(80);

frontServo.write(frontTurnLeftUp);

rearServo.write(backTurnRightForward);

delay(110);

frontServo.write(centerTurnPos);

rearServo.write(centerTurnPos);

delay(80);

}

// blink LED. This function can be called in any situation you want. Just add led(); in

the code where you want to blink the LED.

void led(){

// loop for the LED to blink it 5 times for 0.05 sec on and 0.1 sec off

for(int l=0; l<=5; l++) {

Page 40: Inseto robo

digitalWrite(13, HIGH);

delay(50);

digitalWrite(13, LOW);

delay(100);

}

}

// that's the loop. This is repeatedly called as long as the robot is powered on

void loop()

{

// call function for checking the distance

scan();

//Serial.println(distance);

if (distance > 1){ // filters out the zero readings

// an obstacle is being detected

if (distance > dangerDistance) {

// LED at Pin 13 (standard) blinks 5x

led();

// 4 steps backward left

for(int i=0; i<=3; i++) {

moveBackRight();

delay(walkSpeed);

}

// 4 steps forward left

for(int i=0; i<=3; i++) {

moveTurnLeft();

delay(walkSpeed);

}

} else {

// all clear, no obstacle detected. Just walk forward

moveForward();

delay(walkSpeed/100);

}

}

Page 41: Inseto robo

}