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 9 ■ Servomecanismos<br />

219<br />

Projeto 25 – Controle de um servo – Análise do código<br />

Primeiramente, incluímos a biblioteca Servo.h:<br />

#include <br />

Depois, um objeto Servo, servo1, é declarado:<br />

Servo servo1; // Cria um objeto servo<br />

No loop de inicialização, você anexa o servo que acabou de criar ao pino 5:<br />

servo1.attach(5); // Anexa o servo (físico), no pino 5, ao objeto servo (lógico)<br />

O comando attach anexa um objeto servo, criado via programação, a um pino designado.<br />

O comando attach pode receber um único parâmetro, como no caso presente,<br />

ou três parâmetros. Se três parâmetros forem utilizados, o primeiro será o pino, o<br />

segundo será o ângulo mínimo (0 grau), medido em largura de pulso, em microssegundos<br />

(544, por padrão), e o terceiro parâmetro será o ângulo de grau máximo (180<br />

graus), medido em largura de pulso, também em microssegundos (2400, por padrão).<br />

Isso será explicado na análise do hardware. Para a maioria dos projetos, você pode<br />

simplesmente definir o pino, e ignorar o segundo e o terceiro parâmetros opcionais.<br />

Você pode conectar até 12 servos a um Arduino Duemilanove (ou equivalente), e até<br />

48 no Arduino Mega — o que é perfeito para aplicações de controle robótico.<br />

Note que o uso dessa biblioteca desabilita a função analogWrite() (PWM) nos pinos 9<br />

e 0. No Mega, você pode ter até 12 motores sem interferir com as funções PWM. O<br />

uso de 12 a 23 motores desabilitará a funcionalidade PWM nos pinos 11 e 12.<br />

No loop principal, lemos o valor analógico do potenciômetro conectado ao pino<br />

analógico 0:<br />

int angle = analogRead(0);<br />

// Lê o valor do potenciômetro<br />

Depois, esse valor é mapeado de modo que o intervalo, agora, esteja entre 0 e 180, o<br />

que corresponderá ao ângulo de grau do braço do servo:<br />

angle=map(angle, 0, 1023, 0, 180);<br />

// Mapeia os valores de 0 a 180 graus<br />

Então, você pega o objeto servo e envia a ele o ângulo apropriado, em graus:<br />

servo1.write(angle);<br />

// Escreve o ângulo para o servo<br />

Por fim, uma espera de 15ms é programada, para dar tempo ao servo, até que alcance<br />

a posição desejada:<br />

delay(15);<br />

// Espera de 15ms, para permitir que o servo atinja a posição<br />

Você também pode utilizar o comando detach() para desanexar o servo de um pino,<br />

o que desabilitará o servo, permitindo que o pino seja utilizado para algo diferente.

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

Saved successfully!

Ooh no, something went wrong!