08.11.2017 Views

arduino_básico_Michael_McRoberts

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Capítulo 10 ■ Motores de passo e robôs<br />

251<br />

}<br />

// envia os valores de velocidade para os motores<br />

analogWrite(speed1,left);<br />

analogWrite(speed2,right);<br />

Elabore um percurso para seu robô em uma superfície plana. No meu caso, utilizei o<br />

linóleo do chão de minha cozinha e criei um percurso utilizando fita isolante preta.<br />

Ligue o robô, certificando-se de que ele esteja posicionado sobre uma área vazia do<br />

piso, próxima, mas não sobre a linha preta. A rotina de calibração será executada,<br />

fazendo com que os LEDs pisquem dez vezes em rápida sucessão. Assim que isso<br />

terminar, você terá três segundos para pegar o robô e colocá-lo sobre a linha. Se tudo<br />

der certo, seu robô acompanhará o trajeto. Ao criar o percurso, não faça curvas muito<br />

fechadas, uma vez que essa rápida transição não será detectada com apenas três LDRs.<br />

Veja a figura 10.12, para um exemplo de um percurso desenhado com fita isolante preta.<br />

Projeto 30 – Robô que acompanha uma linha – Análise do código<br />

Primeiramente, você define o pino para as luzes, e declara três inteiros para armazenar<br />

os valores lidos dos três resistores dependentes de luz:<br />

#define lights 9<br />

int LDR1, LDR2, LDR3; // valores dos sensores<br />

Depois, outros três inteiros são declarados para armazenar os valores de deslocamento<br />

(offset) dos três sensores, calculados na rotina de calibração (isso será explicado mais<br />

adiante):<br />

int leftOffset = 0, rightOffset = 0, centre = 0;<br />

Na sequência, você define os pinos que controlarão a velocidade e a direção dos dois<br />

motores:<br />

int speed1 = 3, speed2 = 11, direction1 = 12, direction2 = 13;<br />

Então, dois inteiros são criados para armazenar a velocidade inicial dos motores e a<br />

diferença de velocidade para cada roda, que você adicionará ou subtrairá para que<br />

o robô rotacione:<br />

int startSpeed = 70, rotate = 30;<br />

A velocidade padrão é definida como 70, praticamente 27% do ciclo de trabalho.<br />

Pode ser necessário ajustar esse valor de acordo com seu próprio robô. Um valor alto<br />

demais fará com que o robô ultrapasse a linha, enquanto um baixo demais impedirá<br />

que os motores girem rápido o bastante para movimentar as rodas e superar a fricção.<br />

O valor de rotate indica quanto você acelerará ou desacelerará as rodas, para fazer<br />

com que o robô vire. Em meu caso, o valor necessário é 30. Assim, quando o robô

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!