Robô seguidor de linha

31,960 views
31,517 views

Published on

#Objetivo Geral
O robô deve seguir um algoritmo que harmonize todos os sensores, o robô e estruturado da seguinte forma em cima temos um micro controlador da atmel ao lado de um motor servo que orienta um sensor ultra-sônico no meio temos um drive que controla os motores em baixo temos um motor ao ladeado por dois sensores de luz, o carro vai identificar a intensidade luminosa que esta em baixo dele a partir desses dados é feito um calculo para determinar as propriedades da superfície que ele se encontra, a cor, textura, ate mesmo a altura que ele se encontra, a partir destes princípios o carro pode seguir uma linha preta no chão desde que o chão seja totalmente branco, ou pode seguir uma linha branca desde que o chão seja totalmente preto, o carro possui um sensor que é capaz de detectar objetos de ate 6 metros de distancia.
#Objetivo Especifico
O robô deve de forma totalmente autônoma seguir uma linha preta em uma pista especifica para esse tipo de projeto, nessa pista vai existir um obstáculo que deve ser detectado e desviado depois disso o robô vai tentar localizar a linha para completar o percurso, para execução dessas tarefas os sensores serão “orientados” pelo uso de um micro controlador que fará os cálculos e fornecer pulsos para dar inicio aos atuadores, o micro controlador é programável em linguagem C/C++, a técnica de programação tem embasamento em inteligência artificial.

Published in: Self Improvement
6 Comments
22 Likes
Statistics
Notes
No Downloads
Views
Total views
31,960
On SlideShare
0
From Embeds
0
Number of Embeds
2,671
Actions
Shares
0
Downloads
509
Comments
6
Likes
22
Embeds 0
No embeds

No notes for slide

Robô seguidor de linha

  1. 1. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.comRobô seguidor de linhaSumárioINTRODUÇÃO ........................................................................................................................................ 2OBEJETIVO GERAL .................................................................................................................................. 3OBJETIVOS ESPECÍFICO .......................................................................................................................... 4APRESENTAÇÃO DO MATERIAL .............................................................................................................. 5 ARDUINO ............................................................................................................................................. 5 SENSOR SHIELD .................................................................................................................................... 7 SENSOR UTRASÔNICO .......................................................................................................................... 8 SENSOR DE LUZ .................................................................................................................................. 10 DRIVE MOTOR .................................................................................................................................... 11 MOTOR SERVO ................................................................................................................................... 15 ALIMENTAÇÃO ................................................................................................................................... 16MONTAGEM DO ROBÔ ........................................................................................................................ 17PROGRAMAÇÃO – ESTRUTURA LÓGICA .............................................................................................. 21PROGRAMAÇÃO TEORIA ..................................................................................................................... 21PROGRAMAÇÃO DO CARRO ................................................................................................................ 26Conclusão.......................................................................................................................... 31Bibliografia ........................................................................................................................ 32 1
  2. 2. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com IntroduçãoCom a revolução industrial e com o surgimento de um mercado competitivo a vida daspessoas começou a ser facilitado por diversos utensílios que são produzidos o tempotodo, com passar do tempo a demanda foi aumentando esse fato começou a estimularos detentores do capital a investir em tecnologia, agora as indústrias eram equipadascom robô que poderiam ser controlados pelo homem, hoje em dia existe algo muitomais avançado, a inteligência artificial, método utilizado para que um dispositivo tenhaações com embasamento no seu ambiente, um robô interage com ambiente atravésde atuadores que no caso seria uma garra, por exemplo, ele consegue detectar oambiente atrás de sensores, por exemplo, um LDR 1, esse trabalho vai demonstrarteoricamente a montagem de um carro capaz de seguir uma linha e de detectar umobjeto de dimensões específicas para depois desviar, o carro será montado comdiversos sensores e apenas um tipo de atuador, o conhecimento para montagem dessecarro foi obtido de forma fragmentada ao longo de um ano e meio, muitas técnicasforam desenvolvidas pelo autor desse trabalho bibliográfico, outras foram conseguidasao longo do ano no laboratório de robótica da escola ferreira Viana 2 junto aoorientador Cesar Bastos e colegas de equipe.1 Light Dependent Resistor, Resistor que varia sua resistência na presença da luz, sua composiçãoquímica permite ter uma capacidade de diminuir sua resistência na presença da luz2 O laboratório de robótica da escola ferreira Viana tem suas atividades as quintas feiras das 18h30minate 20h30min terça no mesmo horário para desenvolvimento de projetos dos veteranos 2
  3. 3. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Objetivo geralO robô deve seguir um algoritmo que harmonize todos os sensores, o robô eestruturado da seguinte forma em cima temos um micro controlador da atmel ao ladode um motor servo que orienta um sensor ultra-sônico no meio temos um drive quecontrola os motores em baixo temos um motor ao ladeado por dois sensores de luz, ocarro vai identificar a intensidade luminosa que esta em baixo dele a partir dessesdados é feito um calculo para determinar as propriedades da superfície que ele seencontra, a cor, textura, ate mesmo a altura que ele se encontra, a partir destesprincípios o carro pode seguir uma linha preta no chão desde que o chão sejatotalmente branco, ou pode seguir uma linha branca desde que o chão seja totalmentepreto, o carro possui um sensor que é capaz de detectar objetos de ate 6 metros dedistancia. 3
  4. 4. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Objetivo específicoO robô deve de forma totalmente autônoma seguir uma linha preta em uma pistaespecifica para esse tipo de projeto, nessa pista vai existir um obstáculo que deve serdetectado e desviado depois disso o robô vai tentar localizar a linha para completar opercurso, para execução dessas tarefas os sensores serão “orientados” pelo uso de ummicro controlador que fará os cálculos e fornecer pulsos para dar inicio aos atuadores,o micro controlador é programável em linguagem C/C++, a técnica de programaçãotem embasamento em inteligência artificial. 4
  5. 5. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Apresentação do material Arduíno 3 Apresentação do Arduíno: È uma placa micro-controladora baseada no micro-controlador ATmega 328. Ela tem 14 Pinos Input/output digitais, 6 entradas analógicas,um botão de reset. Ele contém tudo que é necessário para o suporte do Micro-controlador, Ligando-a simplesmente a um computador através de um cabo USB, oualimentando-o com um Adaptador AC/AD (ou baterias 9V) para dar a partida. Especificações do hardwareMicro-controlador ATmega328Tensão de funcionamento 5VTensão de entrada (recomendado) 7-12VTensão de entrada (limites) 6-20VPinos E/S Digitais 14 (dos quais 6 são saídas PWM)Pinos de Entrada Analógicos 6Corrente DC por pino E/S 40 mACorrente DC por pino 3.3V 50 mAMemória Flash 32KBSRAM 2KbEEPROM 1KB O Arduíno vem com um bootloader que permite enviar novos programas sem o usode um programador de hardware externo. Ele se comunica utilizando o protocolooriginal STK500 (referência, C Header file). Também poder-se-á programar oATmega328 através do ICSP (in-Circuit Serial Programming) header;4 Memória O ATmega tem 32KB de memória flash para armazenar o código ( dos quais 2KB sãoutilizados pelo bootloader), além de 2 KB de SRAM e 1 KB de EEPROM (electrically-erasable programmable Read-Only memory), quepode ser lida e escrita através dabiblioteca EEPROM. Comunicação Com o Arduíno, a comunicação com um computador, com outro Arduíno ou comoutros micro-controladores é muito simplificada. O ATmega328 permite comunicaçãosérie no padrão UART TTL (5V), que está disponível nos pinos digitais 0 (RX) e 1 (TX).3 Texto extraído da revista ‘Saber eletrônica’; Ano 47; nº454-2011; Editora Saber LTDA páginas 12 a 15.Autor Filipe pereira4 Embasamento retirado da apostila da PET auto net autor: Micael bronzatti 5
  6. 6. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.comUm chip FTDI FT232RL na placa encaminha esta comunicação série através do USB e osdrives FTDI (incluído no software do Arduíno) fornecem uma porta COM virtual para osoftware no computador. O software Arduíno inclui um monitor série que permite quedados simples de texto sejam enviados à placa Arduíno. Veja a aparência física do Arduíno. Programação A programação é em C/C++ e estruturada em condicionais (if,else,for,while,dowhile,swith) o Arduíno já vem com uma biblioteca com funções como DigitalWriteDigitalRead (escrever e ler sinais digitais), A programação será mais detalhada notópico “programação Estrutura lógica” 6
  7. 7. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Sensor ShieldCom a fama do Arduíno começou a produção de placas que mais tarde foramchamadas de Shield, tais placas são encaixadas perfeitamente no Arduíno paraaumentar a capacidade e a funcionalidade o mesmo, o sensor facilita o acesso asportas e fornece um pino de VCC (5v) e pino GND (terra) para as portas digitais, paraas portas analógicas temos uma entrada especifica para sensores (três pinos )Sinal,vcc,gnd agora essa placa fornece terra e vcc para suprir grandes projetos comoesse que usa diversos sensores. 7
  8. 8. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Sensor Ultrassônico O ultra-som é um som, uma onda de pressão com uma freqüência maior do que olimite superior audição humana, não Há muitos sons na faixa Ultra podemosaproveitar uma propriedade da onde muito interessante. Quando emitimos uma ondapara um local caso haja um obstáculo ela pode sofrer uma reflexão e voltar, veja afigura5 Então para simular calcular a distancia em que uma parede esta de você, é preciso saber a “velocidade do som” tempo da emissão e o momento da captação a partir de um calculo pode-se determinar a distancia de um objeto, para simular esse evento com ultra-som usamos um emissor sônico junto com um receptorAgora a parte que de fato interessa, ou você monta um circuito para amplificar ossinais e toda “parafernália” que esse circuito vai precisar ou simplesmente compra5 Esse artigo foi retirado do site http://robotizando.com/blog/ultrasonic-sensor-sensor-de-distancia/artigo que foi escrito pelo autor deste trabalho bibliográfico 8
  9. 9. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.comUm módulo (quem souber eletrônica a fundo tentemontar). Ultrassônico no Arduíno ou ultra sônico tanto faz, com o Arduíno o ultra some muito fácil de usar, O sensor ultra-sônico e muito usado na robóticaVeja o modulo do sensor ultrassônico Vcc: tensão 5V TRIG: comunicação ECHO: comunicação GND : Terra As especificações mais precisas do funcionamento serão explicadas em outro tópicoque fala sobre a programação. 9
  10. 10. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Sensor de linhaEsse sensor tem um emissor infravermelho e um receptor quando é emitido um fechede luz (infravermelho) o receptor recebe a luz que volta por reflexão dependendo dacor da superfície o receptor varia sua resistência, então para nosso entendimentovamos teorizar vamos dividir a variação em 1024 valores diferentes, para preto vamossupor que seja 0 e para branco 1024, esse sensor faz exatamente isso ele possui umregulador um” potenciômetro” que regula a precisão do sensor e um CI que moduloas variações de forma a transforma essa variação toda em um sinal digital 0 ou 1 logoesse sensor só detecta preto ou branco, Isso e bem vantajoso pois ler um sinal digital emais rápido do que ler um sinal tão variável como o analógico, quanto mais rápido afreqüência de leitura do sinal digital mais rápido será a resposta do controlador, oArduíno demora cerca de 10 Microssegundos para ler uma porta. 10
  11. 11. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Drive MotorE bem difícil imaginar um robô que não tenha motor ou alguma forma de selocomover, nesse projeto utilizamos 4 motores normais que funcionam um umatensão de 3V seu torque aumenta de acordo com a corrente ate certos limitesdesconhecidos nesse projeto, nesse projeto e muito interessante o controle do motortanto para um sentido quanto para outro, esse problema pode ser controladoutilizando um método de chaveamento de transistores, esse método e conhecidocomo Ponte H 6Esse simples circuito resolve nosso problema porem apenas para um motor, existemoutros fatores que complicam que incentiva a procura por uma nova saída de fatoexiste duas alternativas uma e totalmente inviável seria a utilização de relés a outraseria usar um CI para essa funcionalidade, hoje em dia existem muitos, vamos usarnesse projeto L298N esse CI nos permite controlar dois motores, ou seja, cada Ci temduas pontes H internas, veja os pinos6 Ponte H pois sua forma esquemática lembra a letra H 11
  12. 12. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Vamos a uma breve explicação dos pinos OUTPUT: são saídas que vão alimentar os motores INPUT: São entradas que recebem sinais lógicos (5V) que alternam o sentido da corrente das saídas output LOGIC SUPPLY VSS: 5V (sinal para alimentar o CI ) SUPPLY VSS: tensão para alimentar os motores 12
  13. 13. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Para um melhor funcionamento desse ci se deve fazer essa ligaçãoPronto agora sim temos um drive que controle nossos motores, porem para o melhordesempenho vamos usar um modulo que contem tudo Isso em SMD resistores de 1%de precisão fusível e reguladores também contem um Dissipador de calor . Veja aimagem 13
  14. 14. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com 14
  15. 15. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Motor Servo Para mover o robô usamos um motor comum, porem para controlar o movimento do sensor ultrassônico precisamos de um motor que mapeie o movimento seumovimento, infelizmente o moto servo não faz isso porem ele possibilita o movimento em graus em certos limites (180º) assim temos podemos mover o motor para ambosos lados sem muito problema tanto para um sentido quanto para outro, o motor servo contem uma ponte H interna, também existe um jogo de engrenagem denominadaCaixa de redução que fornece uma vantagem mecânica ao movimento final do motor,ou seja, temos um motor com mais torque (força) veja um motor servo internamenteExiste um protocolo de comunicação que desconheço para esse tipo de motor, porem existe uma biblioteca que facilita essa comunicação o motor servo utilizado é esse 15
  16. 16. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com AlimentaçãoO Arduíno precisa de uma alimentação própria, o drive motor também assim comotodos os sensores e como qual quer componente eletrônico nesse projeto vamos ter 2alimentações e talvez uma terceira em caso de necessidade de potenciaSuporte para bateria (alimentação do Arduíno) Suporte para pilhas (alimentação do Motor drive) 16
  17. 17. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com 7 Montagem do robôAlimentação:Pino Vin. alimentação do Arduíno 9V (bateria)Drive motor 9V (6 pilhas)Sensor de Cor A 5V (pino sensor shield)Sensor de Cor B 5V (pino sensor shield)Ultrassônico 5V (pino sensor shield)Ligações digitais Ligação Pino correspondente Arduíno~~ sem ligação ~~ 13~~ sem ligação ~~ 12~~ sem ligação ~~ 11Controle do motor para frente “A” 10Controle do motor para trás “A” 9Controle do Motor Servo 8TRIG Pino do sonar 7Controle do motor para frente “B” 6Controle do motor para trás “B” 5ECHO pino do sonar 4Sensor óptico da Esquerda 3~~ sem ligação ~~ 2~~ sem ligação ~~ 1Terra do drive motor GND (terra)Suplemento de energia lógica (5v) 5V (alimentação)Bateria 9V Vin (voltagem de entrada )~~ sem ligação ~~ Todas as portas AnalógicasMotor 1 E 2 São ligados em paraleloMotor 3 E 4 São ligados em paraleloObservações:7 Essa imagem foi retirada do site dealextreme, um site de venda de equipamentos importados, foinesse site que fiz a compra de todos os equipamentos para esse projeto 17
  18. 18. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Todas as ligações foram feitas utilizando cabos Jump, o cabo tem uma entrada que entra perfeitamente nos sensores no drive e no Arduíno, ou seja, esse cabo é padrãoEstrutura:O robô tem dois andares são conectados por parafusos (espaçadores) cerca de 5 cm dedistancia entre um e outro no meio fica o drive do motor os mores são presos por umsuporte de alumínio que e preso por dois parafuso com porcas, são 4 motores. 18
  19. 19. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com 19
  20. 20. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.comVeja a imagem ilustrando os 4 motores o primeiro e o segundo andar com o drivemotor no meio, o robô precisa se mover então faz se necessário rodas.Observação: as rodas são emborrachadas o material gera um atrito muito grande ateem superfícies totalmente lisas, isso gera um problema na locomoção do carro entãopara driblar esse problema a borracha da roda foi retirada, com o diminuição do atritoo robô passou a fazer curvas mais perfeitas e a sua precisão aumentou muito.Montagem do sonar com servo:O sonar esta ligado ao servo por um suporte improvisado colado a um conjunto decabos com cola quente com objetivo de mover o sonar para melhor utilizá-lo. 20
  21. 21. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Programação estrutura lógica TeoriaIntrodução: Cada movimento do robô será orientado por um algoritmo escrito em uma linguagemde programação a usada nesse projeto foi C/C++, esse tópico vai detalhar comofunciona a linguagem, sua estrutura lógica e alguns exemplos aplicados ao projeto, nãovou poder prolongar muito o funcionamento, pois não e o foco principal.Plataforma IDE:O Arduíno possui um programa8 para desenvolvimento do programa que vai dar “vida”ao robô, o programa tem um Debug9 a fim de detectar erros e possui uma ferramentapara visualizar os dados da porta serial, veja a aparência do programa.8 Esse programa pode ser adquirido no site www.arduino.cc9 Debug e um Script que fica na IDE para detectar erros na programação 21
  22. 22. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.comFuncionamento da IDECada parte da ide tem uma função veja a ilustração abaixo Estrutura da linguagemVariável:Antes de falar de variáveis é costume meu antes de explicar uma linguagem deprogramação por trabalho escrito é dar um “HELLO WORD” bom como o Arduíno nãotem propriamente um lugar para Exibir essa mensagem temos que usar um artifícioentão vamos ficar com ‘Serial.print(“HELLO WORD”);’Variáveis são como gavetas que tem a função de guardar dados, as variáveis guardamdados na memória do micro-processador, para declarar uma variável você precisadizer o tipo dela se e um numero ou caráter ou um dado booleano depois dar umnome a ela desde que o primeiro caráter seja uma letra e não tenha espaços, depois 22
  23. 23. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.comatribuir um valor da seguinte formaEstruturas de controleEstrutura de controle e responsável por “guiar” o código para com alguma orientaçãoIF () { }If é uma condicional dentro dos () fica um teste lógico feito a partir de operadores éum assunto que não vou poder detalhar nesse trabalho. Veja a imagem 23
  24. 24. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.como if faz uma pergunta a condição se ela for verdadeira executa o que esta dentro daschaves caso não for essa estrutura e “pulada” If (condição) { corpo }Para complementar essa condição existe ELSE que executa caso a condição não sejaverdadeira If (condição) { executa aqui se a condição for verdadeira } ELSE { executa aqui caso a condição for falsa }Estrutura de repetição:o for e uma estrutura com que gera uma repetição controlada veja a sintaxe For (iniciação;Condição;incremento) { comandos a serem repetidos }Incremento é a técnica de adicionar +1 a uma variável a sintaxe e (variavel++)Funções NativasNão vai da para detalhar todas as estruturas de programação por isso só descrevi asmais básicas. O Arduíno possui funções nativas, ou seja, funções que tem uma atuaçãoque esta difícil para descrever veja na lista a baixo algumas funções do que vem com oArduíno. 24
  25. 25. Autor: Isvaldo Fernandes de Souza Delay(tempo); // pausa o programa por um tempo XSite: www.robotizando.comEmail: Miojex360@hotmail.com comando obrigatório para informa tipo de porta pinMode(pino,tipo); // digitalWrite(pino,estado); // envia um estado para uma porta digitalRead(pino); // faz a leitura de uma entrada analogWrite(pino,força); escreve de 0 a 5 V no pino sendo dividido em 0 a 255 valores que representam 0-5vBibliotecas:Biblioteca no mundo da programação representa uma Class, e class é uma estruturaque agrupa funções nesse trabalho usamos a biblioteca para controlar o Sonar e omoto servo, o Arduíno possui milhares de class preparadas para da suporte a todo tipode equipamento, alem de facilitar o uso de class também simplifica o código, hoje emdia o uso de class e tão importante que recebeu ate um nome, Programação orientadaa objeto, esse nome é bem impactante no mercado, muita gente fica boba quandoouve falar de POO.Conexão:É muito importante mencionar que o Arduíno pode fazer uma comunicação serial ocódigo para fazer essa tarefa e através de uma biblioteca chamada Serial com esserecurso se torna possível analisar os dados que são obtidos pelo dispositivo pelocomputador, dessa forma facilitando a analise o projeto fica mais fácil de serconstruído e elaborado.Interação ambiente X programação:Essa interação se baseia na seguinte teoria, através de sensores no ambiente o robôtoma executa ações através de atuadores, esse é o principio da inteligência artificialnosso robô usa a programação para comparar situações e tomar uma atitude, porexemplo, “caso houver um obstáculo desvie se não tiver seguir reto” a partir dediversas deduções lógicas o algoritmo chega a possuiu uma espécie de inteligênciaartificial, inteligência artificial é algo muito mais complicado do que parece, eu já fizalguns projetos voltados à inteligência artificial porem não tive muito sucesso, esseprojeto, por exemplo, é seqüencial, pois segue uma regra e caso essa regra não existaele se desorienta e não procura resolver o problema, um exemplo, um robô seguidorde linha segue uma linha preta e o chão e branco, se eu pudesse inverter isso o chãopreto e a linha branca, o robô se perderia na mesma hora entre tanto um robô cominteligência artificial poderia bolar um meio através de seu próprio algoritmo paratentar entender a situação e talvez compreender que pode inverta a ordem seguir alinha branca ao invés da preta. 25
  26. 26. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Programação do carroPara compor o algoritmo do robô desenvolvi funções para facilitar a visualização efuturas modificações no programa, para entender a programação vou dividir ela em 6partes.1)Declaração de variáveis e objetosNessa parte declaro todo tipo de variável, referencia ou objeto, variável como jáexplicado e um endereço de memória que pode ser escrita ou lida a qual quermomento, Referencia é uma técnica para evitar usar um nome ou numero muitasvezes ou mesmo para organizar usamos uma referencia que na hora de Copilar “passarpara placa” a referencia é alterada pelo valor, dessa forma facilitando, e evitando ouso de espaço na memória. #include "Ultrasonic.h" // incluir o arquivo da lib #include "Servo.h" // incluir arquivo da lib #define TRIG_PIN 7 #define ECHO_PIN 4 #define SEE 3 #define SED 0 #define DMF 10 #define DMT 9 #define EMF 5 #define EMT 6 Servo motor; // Lib Servor Ultrasonic OurModule(TRIG_PIN, ECHO_PIN); // Lib Ultrasonic int vel=255; // velocidade curva int tempo1=350; // tempo de curvaA variável vel e responsável pelo controle da velocidade com que o carro faz uma curvae tempo1 é o intervalo de tempo em mile segundos que ele vai fazer a curva navelocidade “vel”, Servo motor e utrasonic são bibliotecas usadas no programa. 26
  27. 27. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com2)Função Moveo robô se locomove através de 4 motores que são ligados em em pares (em paralelo)para que funcione bolei o seguinte função move(); essa função tem 4 argumentos quesimbolizam o chaveamento do drive por exemplo Move(255,0,255,0); moveria o meumotor a velocidade máxima para frente, veja dessa maneira Move(velocidade A parafrente, Velocidade A para trás,Velocidade B para frente,velocidade B para trás); essafunção foi montada com a estrutura abaixo. void move(int DmF, int DmT, int EmF, int EmT) { analogWrite(DMF, DmF); analogWrite(DMT, DmT); analogWrite(EMF, EmF); analogWrite(EMT, EmT); }3) Função Seguir linhaEssa função é bem mais complexa do que a anterior, então vamos detalhar bem ela,primeiro é importante explicar que essa função usa a função anterior para mover orobô, primeiramente vamos jogar no “ar” o objetivo da função, Seguir linha paraconseguir essa façanha bolei uma técnica a partir de um método cientifico vou colocaruma verdade absoluta e a partir dela fazer deduções, essa verdade será “o robô vai serligado De baixo de uma linha” isso não precisa ser verdade porem a partir dessepostulado posso fazer com que ele não saia de baixo dela, colocando os sensores nafrente afastado por certa distancia para depois fazer uma leitura digital, retorna 1 paraperto e 0 , o algoritmo funcionara da seguinte forma caso o sensor da esquerda verpreto (a linha é preta) o carro vira um pouco para direita caso o sensor da direita verpreto o carro vai um pouco para esquerda,logo o carro vai fazer o movimento inversodo sensor que responder com 1 (preto), para melhor analise na hora da construção dorobô usei a comunicação serial para ver no display o estado no qual o robô estava,existe um pequeno tempo nomeado tempo1 que é o tempo de curva já explicada naprimeira divisão da programação. 27
  28. 28. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Script da função void linha () { if (digitalRead(SED)==1){ //esquerda move(vel,0,0,vel); delay(tempo1); Serial.print("esquerda"); Serial.println("n"); Serial.println(digitalRead(SED)); } else if (digitalRead(SEE)==1){ //direita move(0,vel,vel,0); delay(tempo1); Serial.print("direita"); Serial.println("n"); Serial.println(digitalRead(SEE)); } Serial.print("seguindo para frente"); Serial.println("n"); move(150,0,150,0); delay(10); }4) Detector de Obstáculos Além de seguir linha nosso robô e será capaz de detectar um obstáculo e desviar paraisso ele usei um motor servo para mover o sonar que faz a leitura em centímetros dosobjetos ao redor, existe uma rotina chamada “loop” que vamos detalhar em outrotópico que faz a verificação constante da possibilidade de existir um obstáculo, afunção que detecta obstáculo tem o nome de pedra, depois que o algoritmo já estivercerto que há um obstáculo a função pedra vai virar o servo para esquerda e paradireita para verificar qual lado e disponível para passar depois disso ele escolhe o ladoque estiver livre, caso os dois estejam livre ele vai para direita por padrão, para ofuncionamento adequado do sensor existe um tempo de espera para executar omovimento do motor, o motor servo gira em graus, 90 -> mirado para frente, 0,esquerda ,180 Direita , veja o script na próxima pagina. 28
  29. 29. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com Script para desviar de obstáculo void pedra () { int Sensor_teste = 0; motor.write(90); delay(500); motor.write(0); // realocar para esquerda delay(500); if (OurModule.Ranging(CM) > 10) { motor.write(90); delay(500); Sensor_teste = 1; } motor.write(180); // realocar para direita delay(500); if (OurModule.Ranging(CM) > 10) { motor.write(90); delay(500); Sensor_teste = 2; } // parte responsavel pelo movimento do carro apos detectar os objetos if (Sensor_teste==2) { // se encontrar uma pedra na direita virar para esquerda move(vel,0,0,vel); delay(tempo1); }if else (Sensor_teste==1) { // se encontra uma pedra na esquerda vira para direita move(0,vel,vel,0); delay(tempo1); else { // caso não houver nenhuma pedra virar para direita por padrão move(0,vel,vel,0); delay(tempo1); } } }5)preparaçãoAntes de fato de executar o script é preciso fazer uma preparação, para por exemploposicionar o sonar declarar entradas e algumas portas void setup () { pinMode(SED,INPUT); pinMode(SEE,INPUT); Serial.begin(9600); motor.attach(8); motor.write(90); delay(500); 29 }
  30. 30. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com6)rotina de repetiçãoFinalmente a parte final, ate então só declarei e preparei o programa de fato, agora oprograma vai entra em uma rotina infinita, nessa parte o programa vai organizar acadeia de eventos void loop () { linha(); if (OurModule.Ranging(CM) < 15) { delay(200); if (OurModule.Ranging(CM) < 15) { pedra(); } } }Nessa ultima parte há um teste para ver se existe obstáculo, para ter certeza que nãohaja uma interferência momentânea (caso o sonar detectar um obstáculo sem de fatoexistir) o algoritmo fará um segundo teste e só assim executara a função pedra. 30
  31. 31. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com ConclusãoEsse trabalho possibilitou a analise de dados de diversas áreas que a robótica atua.Eletrônica:Houve diversos problemas com uso de baterias o Arduíno consome muito em poucosminutos uma bateria normal de 9V não consegue mais da suporte ao robô, isso sedeve pelo fato de ter N sensores drives entre outras coisas alimentadas pelo Arduíno.Física:As rodas de borracha causam muito atrito com o chão, isso se torna um problema nahora de fazer curvas, outra analise interessante é com os sensores, a distancia dossensores com o chão e determinante para a precisão do sensor.Programação:É preciso muita organização no código, pois o código e constantemente alterado porisso e importante desenvolver funções em forma de diagrama, pois caso uma partenão funcionar, assim podemos ir direto ao erro e conserta sem a necessidade deanalisar todo o código, estruturar com base em objetos e referencias aumentoubastante a velocidade de processamento do programa. 31
  32. 32. Autor: Isvaldo Fernandes de SouzaSite: www.robotizando.comEmail: Miojex360@hotmail.com BibliografiaBronzatti,AutoNet,Aprendendo a programar em Arduíno,realização PETMarshall Brain. "HowStuffWorks - Como funciona a programação em C". Publicadoem 01 de abril de 2000 (atualizado em 14 de maio de 2008)http://informatica.hsw.uol.com.br/programacao-em-c.htm (26 de julho de 2012)SOAREZ, R. Curso de robots m´oviles. Universidad Carlos III de Madrid, Nov. 1999.WALLNER, F., AND DILLMANN, R. Real-time map refinement by use of sonar andactive stereo-vision. Robotics and Autonomous Systems, 16 (1995), 47–56. 32

×