Buscar

Manual de Contrução - Robô OBR - 2015

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 63 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Olimpíada Brasileira de Robótica  
SESI SP 2015 
 
 
 
 
 
 
Por:
Moisés Aparecido da Silva
Alexandre Bueno de Oliveira
Alessandro Florentino
Introdução 
A cada ano o SESI SP impacta e cresce enquanto competidor com seus times de robótica 
em suas diversas modalidades. Para este ano o material oficial de treinamento traz consigo uma 
carga  de  informações  mais  elaboradas  sobre  alimentação  de  circuitos  e  alguns  exemplos 
práticos de acionamentos de sensores e atuadores, além do conteúdo já trabalhado nos anos 
anteriores. Esperamos assim que o técnico e o time estejam mais amparados para realizarem 
suas atividades de treinamento. 
Este material foi produzido com foco no trabalho dos técnicos de equipes de OBR do SESI SP. O 
conteúdo técnico é abordado de forma a abranger técnicos iniciantes e experientes. 
1. Fonte de alimentação. 
Existem várias concepções de robôs, muitas delas amplamente aceitas, para a realidade da 
OBR podemos definir um robô como sendo uma máquina autônoma capaz de transformar o 
ambiente com o qual interage. 
Os  robôs de OBR possuem os processos de um  computador  comum, ele  recebe dados, 
processa  e  envia  dados,  ou  seja,  possui  entrada,  processamento  e  saída  de  informações. 
Podemos  chamar estas entradas e  saídas de  IOs  (Input e Output). As  Inputs  são  ligadas aos 
sensores  para  entrada  de  informações  do  ambiente.  As Outputs  são  ligadas  aos  atuadores 
(motores, LED's, servos, etc) para que atuem modificando o ambiente. 
Para  que  haja  entradas,  processamento  e  saída  de  dados  é  necessário  que  exista  a 
alimentação  elétrica  de  todos  os  dispositivos,  assim,  existem  duas  formas  de  trabalho  com 
corrente elétrica no robô – fonte de alimentação e comunicação através de sinais elétricos, a 
saber: 
 A fonte de alimentação é a responsável por manter todos os dispositivos energizados, 
ou  seja,  trata‐se  de  corrente  elétrica  e  tensão  estáveis  e  definidas.  Todos  os 
componentes elétricos do robô devem ser alimentados por uma fonte para que sejam 
capazes de  realizar  as  funções para  as quais  foram  construídos. Este  conteúdo  será 
abordado de forma mais detalhada na próxima sessão. 
 
 Os  sinais elétricos  são correntes elétricas que, uma vez alimentados os dispositivos, 
possuem a funções de estabelecer comunicação entre os dispositivos do robô, assim, 
elas  não  são  constantes,  eles  podem  variar  em  função  do  comportamento  dos 
dispositivos e ambiente e, justamente este comportamento variante nos proporciona a 
comunicação.  Este  conteúdo  será  abordado  de  forma mais  detalhada  nas  próximas 
sessões. 
O primeiro passo para  idealização de um  robô é saber quanto ele consumirá de energia 
elétrica ou  carga, para  isto  é  preciso  estipular  quais  tipos de  sensores  e  atuadores  estarão 
presentes em sua estrutura. Trata‐se de calcular quanto de corrente cada dispositivo demanda, 
uma vez que as ligações propõem uma divisão da corrente elétrica da fonte de alimentação por 
cada dispositivo, é possível determinar quando de corrente a fonte deve fornecer. Isto é dado 
em Ampère hora ou mAh para correntes baixas. 
1.1. Tensão e corrente 
Para entendermos de forma rápida e fácil imagine uma caixa de água no alto de uma casa, 
ela possui um cano ligada a ela que conduz a água até uma torneira perto do chão. Já é possível 
entender que existe uma energia potencial na água em função da altura que ela se encontra, 
caso abra a torneia, esta água descerá com determinada potência até a torneira. Agora imagine 
se esta caixa de água estiver no chão, a água chegará à torneira com a mesma força? 
Se substituirmos a água por corrente elétrica poderemos ter uma analogia do que acontece 
com o movimento dos elétrons no  circuito em que ele percorre. Nesta analogia, a  corrente 
elétrica está para a água assim como a tensão está para a força ou pressão da água na torneira, 
ou seja, a tensão é a força que faz a corrente elétrica se movimentar (pesquise sobre DDP caso 
queira saber sobre o assunto) e este movimento da corrente faz com que os dispositivos sejam 
acionados. 
Pensando nos  robôs para OBR,  trabalharemos  com  correntes  contínuas  (DC)  tanto para 
alimentação  quanto  para  os  sinais  elétricos.  Para  alimentação  dos  dispositivos,  nós 
trabalharemos com a tensão de até 5V (justamente a tensão oferecida pelas portas do Arduino) 
e até 12V para alimentar o Arduino. Os motores de tração serão abordados separadamente. 
1.2. Sentido da corrente 
Considerando‐se que existe o movimento da corrente elétrica e  isto realiza  trabalho nos 
dispositivos do robô, podemos afirmar que existe o sentido do movimento desta corrente. A 
partir  disto,  as  fontes  de  alimentação  contínuas  possuem  polos  que  definem  o  sentido  da 
corrente. Caso queira saber mais sobre sentido de corrente pesquise sobre sentidos natural e 
sentido convencional de correntes elétricas. 
1.3. Polos positivos e polos negativos 
Ao  trabalhar com uma bateria de corrente contínua haverá apenas dois  terminais, estes 
terminais,  por  padrão,  são  vermelhos  e  preto. O  vermelho  sempre  será  o  polo  positivo  da 
bateria, por onde, convencionalmente, a corrente “saí” da bateria para o circuito. O terminal 
preto será o negativo, por onde a corrente “retorna” à bateria. 
O movimento da corrente elétrica está diretamente ligado à Diferença De Potencial – DDP. 
A corrente elétrica se movimenta da região com maior DDP para a região com menor DDP. Isto 
explica as quedas dos raios do céu para a Terra. Caso queira saber mais sobre mais sobre este 
assunto, pesquise sobre DDP. 
 
 
 
 
 
 
 
Convencionalmente,  existem  uma  série  de  nomenclaturas  dadas  aos  polos  positivos  e 
negativos. Abaixo uma tabela mostra as mais conhecidas. 
Polo positivo e suas nomenclaturas mais 
comuns 
Polo negativo e suas nomenclaturas 
mais comuns 
Positivo  Negativo
VCC  Ground
VC  GND
Valor da tensão e a unidade, exemplo: 5V Terra
Vss  Comum
+  ‐
Uma boa prática de montagem de robô é manter o padrão de vermelho e preto para todos 
os cabos de alimentação e as demais cores para sinais elétricos. 
Regra básica de eletrônica: todo circuito elétrico deve ter apenas um polo negativo, ou seja, 
todos os sensores e atuadores podem ter seus terminais positivos ligados a diferentes fontes de 
alimentação, porém todos os terminais negativos devem ser ligados em um único polo negativo. 
Resumindo, é possível ter várias baterias no seu circuito, mas todos os GNDs devem ser comuns! 
Enfim,  sabemos  então  que  toda  alimentação  do  robô  deve  ser  feita  por  uma  fonte  de 
alimentação contínua ou bateria de corrente contínua, onde sempre o terminal vermelho será 
o positivo e o preto, o negativo. 
1.4. Capacidade de carga estável de uma bateria 
Ao idealizarmos o robô e seus dispositivos (sensores e atuadores), podemos analisar a carga 
que este robô consumirá por hora, ou seja, o mAh do robô. 
Sabemos que a corrente elétrica é medida em Ampère e pode ser dada em Ah  (Ampère 
hora), que é a quantidade de carga elétrica transferida por uma corrente estável de 01 ampère 
durante  01  hora.  Para  os  robôs  de  OBR  trabalhamos  sempre  com  a  subunidade: mAh  ou 
miliampères/hora. Vejamos algumas definições: 
 Carga Elétrica – É a quantidade de carga (corrente) constante que pode ser fornecida 
por uma bateria totalmente carregada até a sua completa descarga em 1h. Por exemplo: 
Uma bateria de 1200mAh pode fornecer 1200mA (1,2A) por 1h. 
 Taxa de Descarga – É a capacidade de fornecimento de corrente pela bateria. É possível 
afirmar que a taxa de descarga de 1C (Coulomb) equivale a liberar uma corrente igual a 
sua Carga Elétrica, porém, este fato causará sua descarga em 1h. Por outro lado, uma 
Bateria de 2C pode fornecer o dobro de corrente e durará apenas metade do tempo, ou 
seja, 30minutos. Por exemplo: 
Umabateria de 1.200mAh e taxa de descarga 1C pode fornecer 1.200mA (1,2A) por 1h. 
Uma bateria de 1.200mAh e taxa de descarga 2C pode fornecer 2.400mA (2,4A) por 30m. 
É preciso considerar que uma taxa de descarga elevada aumenta a temperatura da bateria, 
o que pode acarretar um incêndio. Portanto, a taxa de descarga máxima não deve ser utilizada 
com frequência, e quando usada nunca deve permanecer nesse estado por muito tempo. 
 Tensão – É o valor da diferença de potencial elétrico (DDP) entre os polos. A tensão é 
responsável por gerar o movimento dos elétrons (corrente elétrica). A tensão de uma 
Célula de bateria LiPO pode chegar no máximo a 4,235V. 
 Células – As células são as unidades da fonte de alimentação. Um controle remoto de 
TV, por exemplo, possui 2 pilhas e cada pilha pode ser comparada a uma célula de uma 
bateria LiPO. 
 Pack – Um Pack é um grupo de células de LiPO unidas em Série ou Paralelo. 
1.5. Dimensionamento da corrente elétrica 
Para estipular qual a capacidade da bateria que alimentará o robô é preciso saber qual a 
demanda  de  corrente  presente  no  robô.  Vejamos  um  exemplo:  o  sensor  óptico  Sharp 
GP2Y0A21YK0F, de acordo com o data sheet do fabricante, tem as seguintes características: 
 Capacidade de medir distâncias entre 10 cm e 80 cm; 
 Tensão de entrada Vin (Volts Input): ‐0,3 a 7,0 Vcc; 
 Corrente média de alimentação: 30 a 40 mA. 
Fonte: http://www.sharpsma.com/webfm_send/1489 
Obs.:  Data  sheet  é  um  diagrama  fornecido  pelo  fabricante  do  dispositivo  com  as 
especificações técnicas do mesmo. Confira no link acima o data sheet do sensor citado. 
Ao  listar estas mesmas  informações de  todos os sensores e atuadores presentes no  robô 
podemos dimensionar a carga mínima que a bateria deve supri simplesmente somando‐se o 
valor de corrente que cada dispositivo demanda. 
Podemos  afirmar  que  os  sensores  e  atuadores  estão  ligados  em  paralelo  em  relação  à 
corrente e tensão, assim, a tensão será a mesma sobre qualquer dispositivo, porém a corrente 
será dividida entre eles. Neste ponto é interessante realizar uma pesquisa sobre associação de 
circuitos em paralelo e em série. Será muito útil ao time para entender a alimentação do robô. 
Poderíamos realizar todos estes cálculos, mas fica como desafio para o time. Entretanto, por 
experiência  de  trabalho,  se  idealizarmos  um  robô  com  total  de  dez  dispositivos  sendo 
alimentados pelas portas  IO de uma placa Arduino,  cujo  fornecimento de  corrente é de 40 
miliampères, teremos um total de 400 miliampères de demanda para serem supridos pela fonte 
de alimentação. Ao adicionarmos os motores de tração que demandam uma corrente maior, 
este valor não ultrapassará 2.000 miliampères.  
Com isto podemos afirmar que uma fonte de energia acima de 2.000 mAh é suficiente para 
alimentar todos os dispositivos do robô por uma hora, mas obviamente, uma rotina de recarga 
de baterias deve ser estabelecida em função do cronograma de treinamentos.  
 
 
 
 
1.6. Associação de Baterias 
Uma alternativa para se chegar à tensão ou correntes desejadas na fonte de alimentação é 
a associação de baterias, vejamos: 
 Em Paralelo: os positivos são ligados em comum e os negativos são ligados em comum 
entre si também. Isto aumenta a corrente e mantem a tensão a mesma. 
 Em Série: o positivo de uma bateria é ligado no negativo de outra, assim a corrente 
permanece a mesma e a tensão é aumentada. 
1.7. Alimentação de motores de tração 
Para finalizar a sessão de alimentação de robôs é preciso entender como deve ser feita a 
alimentação dos motores de tração. 
Os motores de tração demandam uma corrente maior que os demais dispositivos no robô 
devido ao peso (força) que precisam deslocar, inclusive na subida da rampa, portanto, a corrente 
que os alimenta deve ser maior. Partindo deste pressuposto e sabendo‐se que o Arduino fornece 
correntes muito baixas para alimentação de seus dispositivos, não devemos  ligar os motores 
diretamente  nas  portas  do  Arduino.  Em  hipótese  alguma  o  Arduino  deve  ser  a  fonte  de 
alimentação dos motores.  
Isto deve se ao fato de que os motores demandam uma corrente maior do que o Arduino 
pode suprir. Quando isto ocorre temos fenômeno físico conhecido como corrente reversa. Os 
motores utilizados para os  robôs de OBR  são  também geradores de energia, assim,  se uma 
corrente não é suficiente para acioná‐los, os motores criam uma corrente alta que é enviada 
para a fonte de energia, se esta fonte for uma das portas do Arduino, ela será danificada. Fica 
aqui a sugestão para pesquisa deste fenômeno – corrente reversa.  
Para solucionar este problema, os motores devem ser alimentados diretamente da bateria 
do robô ou via drivers de controle. Este assunto será abordado de forma mais detalhada nas 
próximas sessões. 
2. Comunicação de Dados, Sinais Elétricos e Tempo de 
Processamento 
Um dos principais pontos a serem compreendidos na construção de um robô de OBR é como 
lidar  com  as  leituras  dos  sensores.  Uma  lógica  de  programação  que  utiliza‐se  de  leituras 
inconsistentes  não  terá  êxito!  Saber  interpretar  o  que  um  sensor  fornece  de  informação  é 
indispensável  para  qualquer  que  seja  a  lógica  de  programação.  Nos  próximos  passos 
entenderemos duas formas de leituras de sensores – leituras analógicas e digitais.  
Assim, até o momento temos um robô alimentado eletricamente, mas ainda não há leituras 
de sensores e execução de ações. Não há comunicação de dados entre o controlador Arduino e 
seus sensores e atuadores. 
2.1. Input, Output, analógico e digital 
Entendemos que a palavra  Input  refere‐se à uma entrada de  informações e que Output 
refere‐se à saída ou envio de informações. Estas informações podem ser analógicas ou digitais. 
Tudo o que existe é mensurado em valores analógicos, não há medidas digitais por natureza. O 
que ocorre nos computadores e controladores é a conversão de valores analógicos em valores 
digitais para que haja processamento de dados.  
Devemos  entender  valores  analógicos  como  sendo  as  mensurações  naturais  – 
temperatura, distância, intensidade de luz, velocidade, etc. Por exemplo, quando utilizamos um 
sensor  de  temperatura  ligado  ao  Arduino,  ele  fará  leituras  em  função  da  variação  de 
temperatura, porém esta variação será convertida em uma escala de 0 a 1023 para que ele 
“entenda” a variação que ocorre no ambiente. 
2.2. Comunicação de dados 
Para que haja comunicação entre um elemento emissor e um elemento receptor é preciso 
que haja uma  linguagem a  ser  interpretada com base em  regras pré‐estabelecidas. No  robô 
controlado  por  uma  placa  Arduino  não  é  diferente,  a  comunicação  é  feita  através  da 
interpretação de valores gerados em um sensor pela placa Arduino. Assim é possível definir uma 
ação a ser tomada para que os atuadores sejam comunicados e executem tal ação. 
Toda  a  comunicação  de dados no  robô  é  realizada  através das  portas do Arduino,  elas 
podem ser definidas como Input ou Output. Estas portas devem ser definidas via programação 
em uma das duas formas, elas não são capazes de assumir as duas formas ao mesmo tempo, 
mas podem ser alteradas sempre que for necessário. 
As  portas  do  Arduino  recebem  valores  analógicos  ou  digitais  dos  sensores  para  serem 
processados. Para os  robôs da OBR, estes valores podem  fazer  referência a duas  formas de 
leituras – variações de tensão nos sinais elétricos e tempo de retorno/leitura. 
2.3. Sinais elétricos 
Já sabemos que todo dispositivo que fará parte do robô deve ser alimentado por uma tensão 
e corrente elétrica. Quando falamos sobre realizar uma leitura em um sensor estamos falando 
sobre ler a variação de tensão que foi causada por uma interação com ambiente. Esta variação 
de tensão é convertida pelo Arduino em valores digitais. 
Esta conversão é uma transformação de informaçõesnão digitais em digitais. Para isto existe 
uma  técnica  chamada  Conversão  Analógica/Digital.  Com  isto,  é  possível  transformar  uma 
grandeza analógica (temperatura, pressão, velocidade, etc.), em uma grandeza digital. 
O  Arduino  possui  em  sua  estrutura  um  componente  chamado  Conversor  A/D.  Ele  é 
responsável por fazer a conversão de um nível de tensão (um valor analógico), para um valor 
digital com resolução de 10bits. 
A  quantidade  de  bits  é  a  resolução  da  precisão  da  leitura  do  sensor. Quanto maior  a 
resolução, mais preciso é o valor comparado. O Arduino possui uma resolução de 10 bits, logo 
os valores analógicos lidos (0 a 5V) são convertidos em valores digitais de 0 a 1023 (2*10‐1).  
Veja no exemplo: 
 0 V corresponde a 0 (digital); 
 5 V corresponde a 1023 (digital); 
 2,5 V corresponde a 511 (digital); 
 1,25 V corresponde a 255 (digital). 
Assim podemos ter subdivisões para trabalharmos grandezas analógicas como grandezas 
digitais. Depois que o valor é lido e convertido, o conteúdo desta leitura é armazenado em algum 
registrador  do  Arduino  e  pode  ser  recuperado  mais  tarde.  Em  micro  controladores  mais 
robustos, para uso em equipamentos médicos, por exemplo, a resolução dos Conversores A/D 
é bastante alta, entre 16 e 18 bits. 
Em resumo, os valores de tensão que variam em função do ambiente são convertidos em 
bits para serem processados pelo Arduino. Assim, independente do sensor analógico que estiver 
usando, sua variação de tensão será convertida nesta escala de 0 a 1023 bits. 
2.4. Tempo de leitura 
Alguns  sensores digitais podem proporcionar uma  leitura numérica.  É o  caso do  sensor 
Breakout ‐ QRE1113 Digital da SparkFun, por exemplo. 
Fabricante: https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf 
Este sensor é utilizado para diferenciar intensidades de cores. Ele será abordado com mais 
detalhes nas próximas sessões. Neste momento é interessante saber que este sensor, apesar de 
ser chamado de digital, não executará leituras com valores de 0 e 1 (supostamente digitais). Ele 
é chamado de sensor digital pela forma de acionamento dos pinos, mas a leitura será dada pelo 
tempo de execução entre o emissor e o receptor de luz.  
Este sensor, ao ser acionado, emite luz através do LED emissor. Esta luz, quando refletida, é 
recebida pelo sensor foto transistor. Diferente dos sensores analógicos que são interpretados 
em função da variação de tensão, este tipo de sensor é interpretado pelo tempo de execução 
da emissão de luz e recepção da mesma.  
 
Vejamos o código abaixo: 
pinMode( 2, OUTPUT ); //Define como saída 
digitalWrite( 2, HIGH ); //coloca o pino em alto, o sensor emite luz 
delayMicroseconds(10); // aguarda 10 microssegundos 
pinMode( 2, INPUT ); //Define como entrada 
long time = micros(); // uma variável recebe o valor do cronômetro micros 
// Na próxima linha, há uma comparação do tempo em que a entrada do pino 2 fica em nível 
// lógico alto (HIGH), e é finalizada caso não receba retorno da luz após 3 segundos. 
 while (digitalRead(2) == HIGH && micros() - time < 3000); 
// A veriável diff recebe o valor do tempo atual subtraído da leitura do tempo anterior. 
int diff = micros() - time; 
 
 
 
 
Em resumo, é feita uma  leitura do tempo de retorno da  luz, está  leitura tem variações de 
tempo em função da cor da superfície na qual  incide e distância do emissor até a superfície, 
portanto, é necessário que este tipo de sensor seja sempre calibrado em relação à distância do 
emissor à superfície e em relação às cores da superfície. Caso o valor de retorno seja maior que 
3 segundos, o programa acima considerará como perda de leitura. 
Retomando a comparação com os sensores analógicos, este não mensura variação de tensão, 
mas sim de tempo.  
Qualquer  sensor  que  realize  leituras  fixas  de  0  ou  1023  bits,  exatamente  estes  valores, 
provavelmente está com algum defeito, pois não existe para Arduino sensores tão precisos. 
3. Na prática ‐ Utilização de sensores, atuadores e driver motores 
Nesta sessão serão abordados alguns dos sensores, atuadores e motor drivers mais utilizado 
pelos times de OBR. 
3.1. Sensores de distância 
Sensor HC‐SR04 
Este módulo de sensor ultrassônico HC‐SR04 detecta objetos entre distâncias mínimas de 2 
centímetros e máximas de até 5 metros. Sua precisão de sensoriamento gira em  torno de 3 
milímetros.  Seu  funcionamento  é  baseado  na  emissão  de  um  ultrassom  e  possibilidade  de 
“escutar” o retorno caso encontre algum objeto. 
 
Para isto, é preciso alimentar o módulo com 5 Volts de tensão DC e colocar o pino Trigger 
em nível lógico alto (HIGH) por 10 microssegundos, no mínimo.  
O sensor emitirá uma onda sonora que, ao encontrar um obstáculo, sofrerá o efeito reverso 
e voltará ao módulo. Após os 10 microssegundos citados o pino Echo deve ser estar em nível 
lógico alto e o pino Trigger deve estar então em nível lógico baixo (LOW). 
Com isto, é possível realizar o cálculo da distância em que o objeto se encontra com base 
no tempo em que o pino Echo permaneceu em nível alto após o pino Trigger ter sido colocado 
em nível alto. A equação ficará assim: 
Distância = (Tempo de Echo em HIGH * Velocidade do Som) / 2 
Sabe‐se  que  a  velocidade  do  som  é  idealmente  considerada  340m/s,  desta  forma,  o 
resultado é obtido em metros se considerado o tempo em segundos. A divisão por 2 é devido 
ao fato de que a onda é enviada e retorna ao sensor, assim, percorre 2 vezes o trajeto calculado. 
 
Especificações 
 Alimentação: 5V DC; 
 Corrente de Operação: 2mA 
 Ângulo de efeito: 15° ‐ Um ângulo maior que 15° causará a perde de sinal ou uma leitura 
inconsistente. 
 Alcance: 2cm a 4m e precisão de 3mm. 
Esquema 
 
Código disponível no arquivo: HC_SR04_‐_Sem_Lib 
Dica:  Sempre  que  for  necessário  realizar  pesquisas  sobre  sensores  e  atuadores,  procure 
primeiro no site do fabricante, os Data Sheets sempre trazem as principais informações.   
Sharp GPY2Y0A21YK0F IR e sua curva característica 
Como  vimos  anteriormente, o  ambiente  interage  com os  sensores  e podemos mensurar 
algumas  grandezas,  porém,  para  trabalhar  com  Arduino  devemos  convertê‐las  em  valores 
digitais. Uma vez que este processo é realizado o Arduino pode processar as informações. 
No momento de devolver uma informação ao mundo analógico o Arduino apresentará tais 
valores em uma escala de 0 a 1023 bits,  independente da origem da grandeza  (velocidade, 
tensão, pressão, temperatura, etc.). 
Para que possamos realizar uma leitura em nas grandezas que conhecemos podemos aplicar 
a  técnica da  curva  característica do  sensor. Ela pressupõe que  sejam  feitas amostragem de 
valores  entre  os  pontos  extremos  da  capacidade  de  leitura  do  sensor.  Assim  teremos 
informações para gerar uma curva e inserir em uma planilha digital capaz de fornecer a equação 
que dará os valores em grandezas conhecidas para qualquer valor digital fornecido pelo Arduino. 
Vejamos na prática utilizando um sensor Sharp GPY2Y0A21YK0F IR. 
 
 
Sharp GPY2Y0A21YK0F IR – Sensor de Infra vermelho 
Este módulo de sensor é usado para mensurar distâncias através da emissão e reflexão infra 
vermelho. As informações técnicas deste módulo e de outros modelos podem ser acessadas em: 
http://www.sharpsma.com/webfm_send/1489 
http://category.alldatasheet.com/index.jsp?sSearchword=DISTANCE+0A41SK+&sPage=1 
Seu funcionamento se baseia na emissão de raios infra vermelhos em direção à um objeto. 
Dependendo da distância que o objeto estiver do sensor, parte dos raios emitidos são absorvidos 
e/ou refratados e outra parte retorna ao sensor, podendo ser medidos e convertidos em sinal 
analógico.  
Quanto maior o valor analógico emitido pelo sensor, menor será sua distância até o objeto, 
pois a parcela de luz desviada também é menor.  
Os usados no Arduino possuem faixas de trabalho, ou seja,suas leituras são precisas apenas 
dentro dos seus limites. 
No caso deste sensor Sharp, seu range de trabalho teórico é de 3 à 40 cm. Geralmente os 
sensores possuem em seu Data Sheets informações sobre suas limitações de trabalho, tal como 
a figura abaixo para este sensor Sharp. 
Faixa de trabalho do sensor Sharp GPY2Y0A21YK0F IR 
 
 
Para valores menores que 3 cm, a curva é indefinida e imprecisa, e para valores maiores que 
40 cm, o gráfico tende a formar uma linha horizontal, resultando em pouca variação de tensão 
analógica quando variamos a distância. Portando, sua faixa de trabalho é de 3 à 40 cm. 
Esquema 
 
Curva teórica e curva prática 
Dado  o  fato  de  o  valor  analógico  gerado  pelo  sensor  ser  inversamente  proporcional  à 
distância até o objeto, é comum acontecer confusão quanto ao seu funcionamento. A curva é 
necessária  para  convertermos  um  valor  analógico  para  um  valor  com  unidade  de medida 
conhecida. 
Quando  um  fabricante  constrói  um  sensor  ele  faz  ensaios  práticos  para  saber  o 
comportamento característico do sensor que construiu. No caso dos modelos Sharp, o objetivo 
desses ensaios é saber o valor da tensão gerada pelo sensor versus a distância do objeto. A figura 
anterior apresentou uma curva  teórica. É necessário então repetirmos o procedimento  feito 
pelo fabricante para obtermos dados mais assertivos.  
Para realização da curva prática serão necessários os seguintes materiais: 
 Placa Arduino; 
 Sensor Sharp; 
 Computador com software do Arduino e planilha digital (ok para MS Excel); 
 Régua de 30 ou 40 cm; 
 Fita adesiva; 
 Objeto com superfície plana e de superfície clara (ex.: caixa de papelão branca); 
 Programação  no  Arduino  capaz  de  realizar  uma  leitura  analógica  e  exibir  no  Serial 
Monitor – Disponível no arquivo: Curvas_Sensores; 
 
 
 
Método 
Serão 20 passos, o resultado melhora a compreensão do trabalho com este tipo de sensor, 
então vale a pena gastar uma hora do seu treinamento para realizar este experimento. 
1. Posicione o sensor conforme figura a seguir (90 graus em relação à superfície). 
 
2. Posicione a régua de forma alinhada ao sensor e fixar sua posição; 
3. Posicione  o  objeto  sobre  a  régua  em  sua maior  distância, mantendo  o  alinhamento  em 
relação ao sensor e à régua; 
4. Compile e transfira o programa “Curvas_Sensores.ino” fornecido com este material. Ele fará 
a leitura dos valores analógicos e os exibirá no Serial Monitor em linhas separadas. 
5. Execute o Serial Monitor por pelo menos 5 segundos (verifique se a opção 9600 baud está 
selecionada), este valor de taxa de comunicação serial deve corresponder ao parâmetro da 
função Serial.begin(parâmetro). 
6. Desabilite a opção “Autoscroll” e seleciona uma série de pelo menos 50 valores. Não há uma 
quantidade exata, mas quanto mais leituras forem selecionadas, melhor será o resultado. 
 
 
7. Copie a série e cole em uma planilha do MS Excel ou qualquer editor de planilhas que estiver 
usando em seu computador. Quando copiados os valores, faça os seguintes passos: 
a. Coloque cada leitura em uma linha diferente; 
b. Anote o valor da média aritmética da seleção em uma célula separada; 
c. Em seguida, anote o valor da distância em centímetros que o objeto se encontra na coluna 
ao lado. 
8. Feche o Serial Monitor. 
 
 
9. Mova o objeto precisamente 1 cm mais próximo do sensor sem perder o alinhamento. Repita 
os passos de 5 à 8 até que a distância mínima de trabalho do sensor seja atingida (neste caso, 
3 cm); 
 
10. Após concluir a tabela das médias dos valores analógicos com seus respectivos valores em 
centímetros,  selecione  o  intervalo  destes  valores  e  inserira  o  Gráfico  de  Dispersão  dos 
pontos. Ele se encontra em: Menu Inserir > Inserir Gráfico de Dispersão (X,Y). 
 
11. Clique com o botão direito sobre o gráfico e selecionar a opção Selecionar Dados. 
 
 
 
 
12. Clique em Adicionar. Após clique no botão para adicionar Valores X da série, limpe qualquer 
conteúdo existente e selecione a coluna contendo todas as Médias dos Valores Analógicos 
do Sensor. Pressione Enter para confirmar. Repita o mesmo procedimento para Valores Y da 
série, selecionando a coluna com todas as distâncias em centímetros do sensor. 
 
 
13. Neste passo, seu gráfico deve se parecer com o gráfico abaixo.  
 
Linha de gráfico sem tendência  
 
 
 
14. Clique  com  o botão direito  sobre qualquer  um dos pontos  exibidos  e  depois,  clique  em 
Adicionar Linha de Tendência. Em seguida, clique nas opções Potência e Exibir Equação no 
gráfico,  e  em  Exibir  o  valor  de  R‐quadrado  no  gráfico. Atenção,  um  equívoco  comum  é 
inverter  os  Valores  das  séries  X  e  Y  do  gráfico,  colocando  as  distâncias  em  X  e  valores 
analógicos em Y. 
 
Linha de gráfico com tendência  
15. Obs.: Mesmo que o seu gráfico contenha um número diferente de pontos do gráfico acima 
ele  tem  um  formato  parecido  com  a  curva  teórica,  aquela  que  o  fabricante  do  sensor 
disponibiliza. 
16. Obs.  2: O  valor de R‐quadrado  representa  a  qualidade da  aproximação  feita  pela  curva. 
Quanto mais próximo de 1, melhor a curva selecionada representa o fenômeno presente nos 
pontos obtidos. Como curiosidade, experimente mudar o tipo de linha de tendência para as 
outras opções e veja o que acontece com o seu valor. 
17. Agora obtemos a equação característica do sensor de distância. Esta equação converte o 
valor analógico lido pelo sensor de distância em uma unidade de medida conhecida (neste 
caso, em centímetros). Para testar o resultado, experimente calcular o valor y (distância) para 
um  determinado  x  (valor  analógico)  e  veja  se  corresponde  aos  valores  obtidos  no 
procedimento. 
18. Para implementar a equação mostrada na acima, escreva em uma célula qualquer: 
=2411*x^0,991  
ou   
=2411*x^0.991 
Onde x é o valor analógico. O resultado será a distância em centímetros. 
19. Para finalizar,  implemente esta equação no código  logo após realizar a  leitura do sensor e 
utilize o valor resultante em cm. 
20. Vale  ressaltar  que  este  tipo  de  procedimento  empírico  é  amplamente  utilizado  em 
engenharia nas mais diversas aplicações. 
 
 
3.2. Sensores de refletância 
QTR‐8RC Reflectance Sensor 
A  Matriz  QTR‐8RC  Infra  Red  Reflectance  Sensor  possui  oito  pares  de  IR  (InfraRed  ‐ 
Fototransistor e LED) o que proporciona muita precisão e recursos para um robô seguidor de 
linha. Os pares de LED’s são dispostos em série para reduzir pela metade o consumo de corrente 
e cada sensor fornece saídas digitais separadas. 
 
A matriz QTR‐8RC é concebida como um sensor de linha. O módulo é construído sobre uma 
placa de 9,525 milímetros. Cada foto transistor utiliza um circuito de descarga de capacitor, o 
Arduino utiliza o tempo de descargas destes capacitores através das portas I/O e quanto menor 
este tempo de descarga, mais reflexão o sensor está detectando. 
Especificações (fabricante em inglês): 
Neste link é possível encontrar exemplos práticos de códigos e data sheets. O material está 
em inglês mas pode ser facilmente entendido. 
https://www.pololu.com/docs/0j19/all 
e 
https://www.pololu.com/docs/pdf/0j12/qtr‐8x.pdf 
Bibliotecas 
Este  tipo  de  sensor  deve  ser  usado  com  sua  biblioteca  de  códigos.  São  arquivos  que  o 
fabricante disponibiliza para aceso ao sensor de forma mais eficaz. 
Link para download: 
https://github.com/pololu/qtr‐sensors‐arduino 
e 
https://github.com/nakkaya/corba 
Talvez seja preciso criar os arquivos com bloco de notas do Windows e salvar nas extensões 
“.h” e “.cpp” copiando e colando os comando dentro dos arquivos. 
Exemplo de robôs seguidor de linha com QTR 8 RC 
Este exemplo mostra (em português) um passo a passo de um robô seguidor de linha com 
os sensores em barramento. 
http://www.instructables.com/id/Line‐following‐Robot‐with‐Arduino/?lang=pt&ALLSTEPSExemplo  de  codificação  disponível  no  arquivo:  Refletancia_Analogica_QTR_8_RC_‐
_Barra 
Sensor de refletância QRE1113  
O sensor QRE1113 é um sensor de reflexão usados frequentemente para robôs seguidores 
de  linha. O sensor funciona através da emissão de  luz através de um LED. Esta  luz é refletida 
para o sensor foto transistor. 
Existem  os modelos  analógicos  e  digitais  para  sensores  da  Pololu  e  SparkFun. A  versão 
analógica  é muito  simples,  ela  gera  uma  tensão  analógica  no  pino  do  sinal  em  relação  à 
quantidade de luz que foi refletida. A versão digital, ao contrário do que sugere, não faz leituras 
de valores alto e baixo (HIGH e LOW), mas sim da variação de tempo de resposta entre emissão 
de luz e receptor. Veremos ambos os sensores. 
Sensor de refletância QRE1113 ‐  Analógico 
Data Sheet 
https://www.sparkfun.com/datasheets/Robotics/QR_QRE1113.GR.pdf 
Esquema  
Apenas três ligações, VCC, GND e sinal analógico. 
 
Exemplo de Codificação disponível no arquivo: Refletancia_Analogico_QRE1113 
Sensor de refletância QRE1113 ‐  Digital 
A  versão digital  é projetada para uso  em  entradas digitais do Arduino, mas  ainda  assim 
necessita de uma leitura analógica da quantidade de luz refletida. Isto lhe permite carregar um 
capacitor na placa e cronometrar quanto tempo leva para descarrega‐lo. Quanto mais luz que é 
refletida, menos tempo que leva para descarregar o capacitor. Desta forma temos uma variação 
entre superfícies brancas e escuras. O tempo varia entre 10 microssegundos e 2,5 milissegundos, 
ou seja, tudo isso é feito de forma muito rápida não impactando em atraso na leitura do sensor. 
 
 
 
 
Esquema 
Apenas ligação de três conectores, VCC, GND e Sinal 
 
Exemplo de codificação disponível no arquivo: Refletancia_Digital_QRE1113 
 
3.3. Criando sensores de refletância 
Modelo 01 
Aqui apresentaremos uma alternativa na falta de um sensor de refletância. Um sensor de 
refletância pode ser construindo com poucos componentes, vejamos: 
 01 – LED 5mm; 
 01 – LDR 5mm; 
 01 – Resistor de 330 ohms a 1k; 
 01 – Resistor de 10k; 
 Jumpers; 
 Tubo termo retrátil 
 
 
 
 
 
 
 
 
 
 
Esquema 
Solde os componentes de acordo com a imagem abaixo, o cabo amarelo será ligado à uma 
porta analógica do Arduino e os outros dois serão a alimentação.  
 
Na prática 
O primeiro passo é criar uma proteção ao redor do LDR, somente a luz oriunda do LED é 
interessante neste momento, recomenda‐se utilizar LED’s de alto brilho. 
         
O material pode ser uma capa de plástico com cola quente atrás ou uma fita isolante, desde 
que fique isolada da iluminação externa, ok! 
 
 
 
 
Separe e solde o resistor de 330 ohms no terminal positivo do LED conforme imagem abaixo. 
 
No outro terminal (negativo), solde um jumper. 
 
No LDR, em qualquer um dos terminais, solde o resistor de 10k.  
 
O LDR deve ficar como na figura abaixo e  
 
 
 
 
Aplique o termo retrátil como na imagem abaixo. 
 
Solde o terminal positivo do LED  (lado com o resistor) no terminal sem Resistor do LDR e 
aplique o termo retrátil. 
 
No detalhe o resistor isolado pelo termo retrátil. A montagem quase finalizada deve começar 
a ter este formato com a aplicação de termo retrátil para isolamento das soldas.   
 
 
 
 
 
 
 
Para finalizar, uma o LED ao LDR com fita isolante de modo a ter o formato como na figura 
abaixo. 
 
Exemplo de codificação disponível no arquivo:  Refletancia_Analogico_Manual 
Modelo 02 
Materiais 
01 placa Ilhada 5 X 10 
 
04 Sensores Reflexivos Infravermelhos 
 
 
 
 
 
 
 
 
Cabos Jumper 
 
04 resistores de 330 ohms 
 
04 resistores de 10k 
 
Funcionamento do sensor 
Primeiro passo é colocarmos os sensores: 
 
Espaço entre os furos 
Gire a placa e siga as imagens: 
 
 
 
 
 
LED (Emissor) 
Foto transistor 
(Receptor) 
5V 
GND 
 
 
 
Pinos Arduino 
Dobre os pinos GND LED, neste sentido, até tocar 
os GND do Foto transistor. 
 
 
 
 
Solde os pinos Arduino do Foto transistor. 
Solde os Pinos GND do LED. 
 
 
 
 
Solde os Pinos GND do Foto transistor junto com 
a parte dobrada do GND do LED.
Corte as sobras do GND do Foto transistor. 
 
 
 
 
Vamos ligar todos os GND em uma trilha: 
 
 
 
 
 
 
Agora vamos colocar os resistores do LED: Use resistor 330 
ohms nesta posição nos quatro sensores:
Agora solde o resistor e junte com o 5V do LED. Repita o 
processo nos quatro resistores
 
 
 
 
 
 
 
 
 
 
 
 
 
Ficando assim: 
Observação: As soldas necessitam ficar isoladas! Os círculos 
vermelhos são 5V e as setas pretas são GND!
Agora vamos colocar os resistores do Foto transistor: Use 
resistor 10K nesta posição nos quatro sensores: 
 
 
 
 
Solde os resistores do Foto transistor junto com o Pino do 
Arduino conforme as setas:
Observação: As soldas necessitam ficar isoladas! Os círculos vermelhos 
são 5V do LED com seus respectivos resistores, e as setas pretas são 
GND! E os círculos cinza são os pinos do arduino! 
 
 
 
 
 
 
Agora dobre os pinos debaixo do resistor do LED e junte com os pinos 
do resistor do Foto transistor conforme as setas! 
Solde os pontos indicados 
Solde os cabos! 
 
 
 
3.4. Sensores de cor 
Sensor de Cor Para MCU Arduino 3V ‐ 5V TCS230 TCS3200 
O módulo de detecção de cores utiliza o sensor TCS230, ele é composto por 64 fotodiodos. 
Entre os 64 fotodiodos, o sensor possui 16 deles com filtros para a cor vermelha, 16 para a cor 
verde, 16 para a cor azul e 16 não tem filtro algum. É possível observar que são distribuídos de 
forma uniforme sobre a placa do sensor. 
 
Sensor de Refletância Infravermelho Pronto! 
OBS: é só cortar a área não utilizada da placa para diminuir o 
tamanho. Cuidado para não cortar os fios ou danificar a solda! 
Funcionamento 
Este  tipo  de  sensor  capta  a  luminosidade,  filtra  a  cor  e  gera  na  saída  um  sinal  com  as 
informações sobre a  intensidade das cores vermelho, verde e Azul. Possui ainda quatro LED’s 
brancos para iluminação e oito pinos para conexão.  
A alimentação pode ser feita de 3 a 5 volts. O Arduino utiliza 5 pinos para comunicação, são 
eles: S0, S1, S2, S3, e o pino OUT, que é o responsável pelo envio das informações. O pino OE 
(Output Enable) será ligado ao GND. No programa que acionará o sensor, os pinos S0 e S1 são 
colocados em nível alto para então os pinos S2 e S3 serem alternados de estados, isto determina 
qual fotodiodo será ativado. 
Abaixo  uma  relação  de  combinações  que  determinam  o  tipo  de  frequência  de  saída  e 
também o padrão de ativação dos fotodiodos: 
Pino  Frequência de saída
S0  S1   
LOW  LOW  Desligado 
LOW  HIGH 2% 
HIGH  LOW  20% 
HIGH  HIGH 100% 
Pino  Foto diodo 
S2  S3   
LOW  LOW  Vermelho / Red 
LOW  HIGH Azul / Blue 
HIGH  LOW  Sem Filtro 
HIGH  HIGH Verde / Green 
 
Para determinação destes resultados é utilizado o modelo de tabela verdade entre os pinos 
de S0 a S3. 
Esquema 
Abaixo o esquema de ligação dos oito pinos do sensor. A codificação acompanha o material 
e está disponível no arquivo: TCS230_‐_TCS3200_‐_Cores. 
 
3.5. Fabricação de sensores de cor 
Modelo 01 
Uma  alternativa  para  detecção  de  cores  é  a  fabricação  de  um  sensor  de  cor  como  no 
esquema abaixo. 
 
Este esquema é o mesmo utilizado na construção do sensor de luz, porém, para utilização 
com detecção de cores a diferença será feita na interpretação dos valores de saída. Para tanto 
utilizaremos um exemplo de código diferente.  O código acompanha o material e está 
disponível no arquivo: Refletancia_CORES_Sem_Lib_Manual.  
3.6. Fabricando sensor de mercúrio 
Um sensor de mercúrio tem a função de acionar ou desligar um circuito por meio do 
contato do mercúrio com dois polos. 
Esquema: 
 
Materiais 
Barra de pino macho 
 
Placa padrão ilhada 5x10 
 
Módulo de mércurio 
 
Resistor de 10k 
 
Placade acrílico ou plástico transparente (opcional para acabamento) 
 
Na prática 
 
 
 
Encaixar o sensor de mercúrio na 
placa ilhada na seguinte posição: 
OBS.: Debaixo para cima no furo 
5 e da direita para esquerda no 
furo 2 e 4. 
Encaixar o resistor de 10K: 
OBS.: Debaixo para cima no furo 
2 e 5 e da direita para esquerda 
no furo 5. 
Virar  a  placa  ilhada  e  soldar  o 
resistor e o  sensor de mercúrio. 
Após a solda cortar a sobra do fio 
metálico. 
 
 
 
Encaixar os pinos nestas posições: 
OBS.:  Nos  furos  2,  4  e  5  da 
esquerda para direita  e pinos 1 
debaixo para cima. 
 
Gire  a  placa  e  solde  os 
conectores: 
 
 
Preencher  a  trilha  de  solda  do 
Sinal: 
Preencher  a  trilha  de  solda  do 
Negativo: 
 
 
 
   
Juntar as soldas para dar contato 
nas duas trilhas: 
Vista  da  parte  de  trás  do 
Sensor Mercúrio: 
Sensor Mercúrio
Vista  da  parte  da  frente  do 
Sensor Mercúrio:
 
 
Corte  o  acrílico  ou  plástico  no 
tamanho que proteja o sensor de 
mercúrio: 
 
 
 
 
Após  realizar  o  download  da  programação  para  o  Arduino  podemos  visualizar  o 
funcionamento de duas formas: 
 Verificar o Pin 13 Led do Arduino; 
 Abrir o serial monitor do programa do Arduino. 
Quando inclinamos o sensor para trás, o contato é estabelecido através do mercúrio e o Pin 
13 LED acende ou no caso do serial monitor ele acusará 0. 
3.7. Atuadores 
Servo Motores 
Os servos motores são, via de regra, são pequenos, rápido e possuem muita força, a maioria 
tem capacidade para  levantar até 1 kg de carga. Os servos motores podem ser utilizados em 
projetos vários tipos de projetos e automações. Podem, ser rádio controlados (carros, aviões, 
helicópteros, lanchas, etc.).  
Sua alimentação pode ser ligada diretamente nas portas do Arduino, pois, trabalham com 
baixas correntes. A Arduino é compatível com a maioria dos modelos de servo motor, entre eles: 
Hitec, Futaba GWZ, JR e etc. Para comunicação e alimentação, ele possui uma interface padrão 
de três conectores – Sinal PWM, VCC e GND – geralmente o fabricante disponibiliza 3 tipos de 
braços + parafusos de fixação. 
 
Coloque  cola  quente  e  fixe  o 
acrílico ou plástico para proteção. 
Agora  basta  ligar  o  positivo,  o 
negativo e o  sinal na porta 2 do 
Arduino e realizar o teste. 
Segue a figura abaixo: 
 
Os servos motores são capazes de efetuar giros na angulação desejada em função de um 
mecanismo  chamado  Encoder  que  estão  acoplados  ao  motor.  Eles  são  responsáveis  por 
mensurar a quantidade de graus que o eixo do motor realiza. Dica de estudo: Enconder! 
Importante, um servo motor não pode ser utilizado para tração do robô, apenas para garras 
e demais funções. Inclusive os modelos mais comuns proporcionam 180 ou 360 graus de giro. 
Exemplo de codificação disponível no arquivo: Sweep 
Bibliotecas 
Os servos possuem uma biblioteca de códigos nativa do Arduino, esta biblioteca precisa de 
um objeto de classe para ser acessado, neste caso o objeto de classe é a palavra myservo no 
código acima. 
Através da criação de um objeto, a classe Servo pode ser acessada. Isto acontece na maioria 
das bibliotecas onde são criadas demandando o acesso por objetos. O assunto sobre classes e 
objetos e programação orientada a objeto é muito importante e o time de OBR deve estuda‐lo, 
então ele fica como dica de estudo. 
Informações Técnicas 
Alguns fabricantes e seus data sheets: 
http://www.electronicoscaldas.com/datasheet/MG90S_Tower‐Pro.pdf 
http://datasheet.sparkgo.com.br/SG90Servo.pdf 
http://www.rctoys.com/pdf/hitec‐servos/HIT‐HS55.pdf 
Motores de Tração 
Motores de tração são conhecidos como motores DC – de corrente contínua. Geralmente 
estes motores  demandam  uma  corrente mais  alta  que  os  demais  componentes  do  robô,  e 
portanto,  necessita,  de  uma  alimentação  externa  ao  Arduino.  Eles  podem  ser  alimentados 
diretamente pela bateria. 
 
 
 
 
 
Exemplos de motores DC 
Os motores DC são utilizados para tracionarem o robô, segue imagens de alguns modelos 
mais usados. 
 
Os  motores  da  Lego  são  considerados  servo  motores,  porém,  diferente  dos  servos 
apresentados  anteriormente  eles  são mais  dimensionados  para  executar  tarefas  pesadas  e 
justamente por  isso demandam mais  força, ou mais  corrente. Para  tracionarem o  robô eles 
podem ser utilizados se ligados no modo DC, apenas com os cabos branco e preto (padrão dos 
cabos lego). Veremos mais sobre isso na sessão sobre montagens de robô. 
Importante saber que os motores DC não possuem terminais positivos e negativos definidos, 
eles aceitam quaisquer destas entradas, quando definimos um terminal como VCC e ou como 
GND estamos definindo o  sentido do giro deste motor DC. Se houver uma  inversão a única 
consequência  será  a  inversão  do  sentido  do  giro.  Justamente  este  tipo  de  controle  será 
abordado na próxima sessão, com os drivers de motores e ponte H. 
Motor com redução 
Os motores possuem uma  capacidade de  força e  velocidades definidas,  chamamos esta 
força de torque (fica mais uma dica de pesquisa: torque). Por agora podemos dizer que o torque 
é a força que o motor pode realizar. Quando um motor não possui torque suficiente para mover 
uma carga  (ou o peso do robô), podemos utilizar o recurso das reduções de velocidade, são 
conjuntos de engrenagens que reduzem a velocidade de um motor e lhe confere mais torque. 
 
 
 
 
Controle de Tração 
Os motores DC deve ser controlado para que o robô possa navegar de forma autônoma e 
programada. Os motores DC não podem ser controlados diretamente pelos pinos do Arduino, 
os motores demandam correntes mais altas que o Arduino pode fornecer, este fato pode causar 
Redução de 
Velocidade 
Motor DC 
o fenômeno físico chamado corrente reversa e danificar a placa Arduino. Para controlar motores 
DC são utilizados dispositivos chamados Motor Driver ou Ponte H. 
Driver Motores 
   
     
Acima alguns dos Drivers mais comuns, exemplificaremos o modelo Motor Shield L293D 
Driver Ponte H para Arduino, da DK Eletrônics. 
 
 
 
Este drive de motor, assim como a maioria, possui em seu circuito um CI regulador de tensão 
(neste caso, o CI do meio, na foto), e um CI para controle de dois motores (neste caso, possui 
dois CI’s e controla até quatro motores). O regulador de tensão tem a função de controlar a 
Alimentação VCC e GND 
Entrada dos terminais 
de dois Motores
CI L293D para controle de 
dois motores – Ponte H 
CI Regulador de te’nsão. 
CI L293D para controle de 
dois motores – Ponte H 
Entrada dos terminais 
de dois Motores 
tensão que irá para os motores para que não o Arduino não seja danificado. Este Drive faz uso 
de uma biblioteca chamada AFMotor e pode ser baixada em:   
http://yourduino.com/s/AFmotor.zip e http://yourduino.com/s/AccelStepper.zip 
Data Sheet: 
http://yourduino.com/docs/Multi‐MotorShieldSchematic.jpg 
Os  demais  links  são  exemplos  de  modelos  e  programação  que  serão  úteis  para  o 
desenvolvimento de projetos com este driver. 
http://playground.arduino.cc/Main/AdafruitMotorShield 
https://learn.adafruit.com/adafruit‐motor‐shield 
A Codificação disponível no arquivo: Driver_Motor_L293D_Com_Lib_‐_Elaborado 
Para este exemplo é preciso incluir a biblioteca do motor na pasta padrão do Arduino, ela 
deve ser baixada no link acima e, caso o sistema operacional for Windows XP ou superior, ela 
deve  ser  colocada  no  diretório  C:\Program  Files  (x86)\Arduino\libraries  e  então  reinicie  o 
Sketch do Arduino.  
Este drive possui uma peculiaridade que  gera  algum  trabalho  a mais para  ser utilizado, 
porém confere um ótimo desempenho. Este  trabalho a mais trata‐se do  fato de o Driver ser 
plugado em todos os pinos do Arduino e não possuir uma extensão para que os pinos que não 
estão sendo utilizados por ele sejam utilizados para outras funções. Para resolveresta situação 
é possível soldar uma barra de conectores fêmea ou macho no local indicado na imagem abaixo. 
 
A solda é feita no lado inferior do drive. 
Para  mais  informações,  acesse:  https://filipeflop.wordpress.com/category/motores‐e‐
servos/ 
 
 
3.8. Construção de um driver para 2 motores 
CI L293D 
Nesta sessão abordaremos uma alternativa para controle dos motores caso não haja um 
drive de motor. O CI apresentado no driver acima (L293D) pode ser utilizado programando‐se 
diretamente em seus pinos. Vejamos como: 
Este CI (conhecido também como ponte H), pode ser adquirido em lojas de eletrônica e 
seu custo é bem baixo em relação ao drive de motor. 
 
Note  que  ele  possui  uma marcação  em  um  dos  lados,  este  detalhe  indica  o  início  da 
numeração dos pinos. A seguir o esquema do CI. 
Data Sheet 
O data sheet pode ser acessado em: 
http://www.arduino.cc/documents/datasheets/L293D.pdf 
Resumindo as ligações: 
 
 
 
 
Pinos  Ligações 
Pino 01 – 5V  Ligar  no  pino  9  e  no  pino  16  e  em  uma 
alimentação de 5 VCC. 
Pino 02 – INPUT 1  Ligar em uma PWM do Arduino 
Pino 03 – OUTPUT 1  Ligar em um dos terminais do motor 01 
Pino 04 – GND  Ligar no GND do Arduino 
Pino 05 – GND  Ligar no GND do Arduino 
Pino 06 – OUTPUT 2  Ligar no outro terminal do motor 01 
Pino 07 – INPUT 2  Ligar em uma PWM do Arduino 
Pino 08 – VS  Ligar no positivo da bateria 
Pino 09 – 5V  Ligar em uma alimentação de 5 volts  (pode 
ser a mesma do pino 01) 
Pino 10 – INPUT 3  Ligar em uma PWM do Arduino 
Pino 11 – OUTPUT  Ligar em um dos terminais do motor 02 
Pino 12 – GND  Ligar no GND do Arduino 
Pino 13 – GND  Ligar no GND do Arduino 
Pino 14 – OUTPUT  Ligar no outro terminal do motor 02 
Pino 15 – INPUT  Ligar em uma PWM do Arduino 
Pino 16 – 5V  Ligar em uma alimentação de 5 volts  (pode 
ser a mesma do pino 01) 
 
Exemplo de Codificação disponível no arquivo: Driver_com_CI_L293D. 
Ilustrações de um driver construído com CI L293D 
  
 
4. Estruturas – Construção de modelos de exemplo para 
competições OBR 
Veremos nesta sessão a construção de alguns modelos de robôs de OBR, eles podem ser 
alterados, o objetivo desta sessão é apenas propor sugestões de trabalho aos times.  
Zumo – Motores DC, bateria LiPO e controladoro Garagino. 
O Zumo é uma base de robô com esteira, nela é possível montar todo o aparato de um robô 
de OBR. O  Garagino  é  um modelo  proprietário  de  Arduino.  Ele  se mostra  como  uma  boa 
alternativa para controle de robô pelo seu desempenho e pouco espaço físico que ocupa devido 
ao seu tamanho menor em relação aos modelos originais.  
Fabricante: 
O fabricante é a empresa Laboratório de Garagem: 
http://www.labdegaragem.org/loja/garagino‐4.html 
Materiais e Características 
 1x Dual Motor Garagino 
 1x Kit Garagino Rev 1 Básico 
 1x Zumo Chassis Kit 
 2x Micro motor com caixa de redução de metal 75:1 ou 2x Micro motor com caixa 
de redução de metal 100:1 
 2x  Sensor  de  Refletância QTR‐1RC  (Digital)  ou  1x  Breakout  de  Sensor  de  Linha 
QRE1113 – Digital 
 1x Sensor de distância por ultrassom ‐ Maxbotix LV‐EZ1 ou 1x Sensor de distância 
por ultrassom ‐ LV‐EZ3 
 1x Servo ‐ Motor Pequeno 
 2x Fita Hellermann (Enforca Gato) 
 1x Fita Dupla Face Esponjosa 
 Alguns Jumpers F/F 
 Alguns Pedaços de Madeira   
 
Dual Motor Garagino 
 
 
O Dual Motor Garagino é um Shield para Garagino muito prático, com ele é possível utilizar 
a mesma biblioteca desenvolvida pela empresa  Laboratório de Garagem para o Dual Motor 
Shield  (DualMotor.h). O Dual Motor Garagino possui 6 pinos destinados à conexão de até 6 
sensores (A0 a A6) e 2 pinos destinado a servo motores (D4 e D9). 
Os  8  pinos  disponíveis  podem  ser  utilizados  para  qualquer  outra  finalidade,  eles  são 
extensões dos pinos do Garagino para facilitar a conexão de sensores ou servo‐motores. 
Características: 
 Jumper de alimentação para o Garagino: 5V; 
 Tensão máxima (Motor): 30V; 
 Corrente máxima (Motor): 600mA; 
 Shields compatíveis: Mini Ethernet Shield e Mini RF Shields (Transmitter e Receiver). 
Biblioteca: 
O download da biblioteca DualMotor.h pode ser efetuado clicando o nome da biblioteca. 
Funcionamento 
Para esclarecer nomenclaturas, Headers são equivalentes aos pinos. 
 
1. Faça a montagem da madeira e do servo utilizando fita dupla face e fita hellermann, 
conforme a imagem abaixo: 
 
2. Prenda  ou  Cole  o  pedaço  que  foi montado  abaixo  da Dual Motor Garagino,  faça  o 
mesmo do outro lado para que não haja diferença de altura entre os lados. 
 
3. Cole também do outro lado dos pedaços de madeira, mais fita dupla face para que seja 
possível colar o Dual Motor Garagino à plataforma, conforme as imagens abaixo: 
 
 
 
 
 
 
 
 
 
4. Posicione os sensores de refletância, certifique‐se que a distância entre eles seja pouco 
maior que a linha a qual o carrinho irá seguir, no nosso caso uma fita isolante, e também 
posicione o sensor de ultrassom a frente da plataforma (este modelo pode ser alterado 
para o modelo HC SR04 abordado no material), conforme a imagem abaixo: 
 
 
5. Faça as ligações dos sensores, motores e do servo‐motor conforme a figura abaixo: 
 
 
6. Faça as ligações dos motores e do case de bateria do Zumo ao Dual Motor Garagino. 
 
7. Por fim, a imagem abaixo mostra a montagem completa. 
 
O  código  de  programação  acompanha  o material  de  estudo  está  disponível  no  arquivo: 
Zumo. 
LegoÍno – Motores e bateria NXTg e placa Revolution 
Este modelo é um híbrido de Lego e Arduino, ele utiliza uma estrutura construída com peças 
Lego e a alimentação, o sensoriamento e controle são feitos com materiais alternativos a placa 
Arduino. 
Materiais: 
Estrutura Lego – Verificar manual de montagem HTML disponibilizado juntamente com este 
material; 
01 Placa Arduino ‐ Neste exemplo utilizaremos o modelo Revolution (da empresa Empretec), 
porém outros modelos podem ser utilizados, tais como Uno e Moge 2560; 
 
 
01 Driver Motor – Neste exemplo utilizaremos o driver da empresa Empretec – porém ele 
pode ser substituído pelo L298N Dual H; 
     
01 ensor Ultrassônico Modelo HC‐SR04 ou Sharp 10 à 80 cm; 
 
01 – Suporte para 6 Pilhas AA; 
 
 
 
 
 
 
 
 
01 Barra de sensores de refletância Analógico (abaixo possíveis modelos); 
 
 
Cola Quente, parafusos para fixação do Arduino e Driver, cabos Jumper; 
 
 
01 Chave de contato liga/desliga. 
       
01 Cabo de comunicação Lego; 
 
Na Prática 
Vamos iniciar a montagem do robô com base de Lego e controlado por Arduino. 
1. O primeiro passo será montar o robô do manual disponibilizado com este material. 
 
2. Em seguida, corte o cabo LEGO e separe os fios branco e preto. O fio branco será ligado 
no polo positivo e o preto no polo negativo. 
 
3. Fixe o driver motor com parafusos. 
 
a. Conecte o cabo branco do motor da direta na A+; 
b. Conecte o cabo preto do motor da direita no A‐; 
c. Conecte o cabo branco do motor da esquerda na B+; 
d. Conecte o cabo preto do motor da esquerda no B‐ 
e. A seta vermelha acima indica a ligação da energia para o Drive (VCC e GND). 
 
No caso do driver motor L298N Dual H a única diferença está nos nomes das portas de 
conexão dos motores. No driver da empresa Empretec (modelo verde acima) serão: A+, A‐, B+ 
e B‐. Caso o drive seja o L298N, as conexões de motores serão out 1, out 2, out 3 e out4. 
4. Alimentação do Driver 
 
a. O cabo vermelho será a conexão do polo positivo da bateria 
b. O cabo preto será a conexão do polo negativo da bateria; 
c. A chave geral do circuito deve ficar entre a conexão do driver e o polo negativo, 
ou seja, corte o cabo preto e coloque neste ponto a chave geral 
5. Note que há três conexões – VCC, GND e 5V: 
a. VCC – entrada de energia da bateria para alimentar o Driver de motor; 
b. GND – Retorno, comum a todos os GND do robô; 
c. 5V – Saída de energia do driver do motor, corrente baixa, podeser utilizada para 
alimentar o Arduino se for interessante. 
As conexões VCC e o 5V não devem ser confundidas, pois uma alimenta o Driver de 
Motor e a outra é a saída do Driver de Motor para alimentar algum circuito (geralmente para 
alimentar o Arduino). Ou  seja,  se a  conexão VCC não estiver alimentada, a  conexão 5V não 
funcionará. 
 
 
 
 
 
6. Cole o botão liga / desliga com cola quente! 
 
7. Cole o sensor ultrassônico no local indicado com cola quente, com os pinos de conexão 
para cima. 
 
 
 
 
 
 
 
 
 
8. Solde os cabos nos pinos do sensor de refletância analógico conforme a figura abaixo. O 
modelo na figura é fabricado pela empresa Empretec e possui seis sensores óptícos mas 
utilizaremos apenas quatro. Note que há dois pinos sem cabos soldados. 
 
Da esquerda para direita, o modelo é consfigurado da seguinte forma: 
o O cabo Vermelho alimenta o sensor com VCC vindo do Arduino; 
o O cabo Preto faz o retorno para o GND; 
o O cabo laranja se comunica com uma porta analógica do Arduino; 
o O cabo azul se comunica com uma porta analógica do Arduino; 
o O cabo verde se comunica com uma porta analógica do Arduino; 
o O cabo amarelo se comunica com uma porta analógica do Arduino; 
A sequência será: 
a. Sensor 1 (Cabo Laranja) Porta Analógica 3 (A3); 
b. Sensor 2 (Cabo Azul) Porta Analógica 0 (A0); 
c. Sensor 5 (Cabo Verde) Porta Analógica 2 (A2); 
d. Sensor 6 (Cabo Amarelo) Porta Analógica 1 (A1); 
 
No caso do sensor Pololu, modelo QTR‐8RC, temos que ligar os seguintes pinos: 
 
 
Pinos: 
e. Alimentação: Positivo VCC; 
f. Retorno: Negativo GND; 
g. Sensor 6: porta A0 Arduino ‐ Representado pelo cabo azul; 
h. Sensor 7: porta A3 Arduino ‐ Representado pelo cabo laranja; 
i. Sensor 3: porta A2 Arduino ‐ Representado pelo cabo verde; 
j. Sensor 2: porta A1 Arduino ‐ Representado pelo cabo amarelo. 
Então as ligações no Arduino devem ficar como na imagem abaixo: 
 
9. Ligando as portas do Driver Motor que controlam os motores: 
 
 
 
 
 
 
 
 
 
 
 
 
10. Vamos seguir a sequência acima: 
a. Porta driver motor IN1 (cabo azul) Ligar na porta digital PWM Arduino 10 
b. Porta driver motor IN2 (cabo verde) Ligar na porta digital PWM Arduino 11 
c. Porta driver motor IN31 (cabo amarelo) Ligar na porta digital PWM Arduino 9 
d. Porta driver motor IN4 (cabo laranja) Ligar na porta digital PWM Arduino 3 
 
 
11. Ligando o sensor ultrassônico: 
 
Como referência utilizaremos o seguinte esquema de cores: 
a. VCC (cabo Preto) 
b. Trigg (cabo Branco) Porta Digital 7 do Arduino 
c. Echo (cabo Roxo) Porta Digital 6 do Arduino 
d. GND (cabo Cinza) 
 
 
 
Em caso de utilização do Sharp, basta utilizar uma porta analógica para ele funcionar, no 
caso a porta A4. 
 
a. Cabo amarelo – conexão com porta analógica A4; 
b. Cabo vermelho – conexão com VCC; 
c. Cabo Preto – conexão com GND; 
 
12. Alimentação do Arduino para o Drive de Motor 
 
a. Na conexão +5 ligue o cabo do 5V vindo do Arduino; 
b. Na conexão GND ligue o retorno ao GND;   
 
13. Enfim, basta conectar o cabo laranja na entrada 5V do Arduino e o fio Branco no GND 
que fica ao lado das portas analógicas. 
A codificação está disponível juntamente com este material em três exemplos: 
1. LegoIno; 
2. Seguidor_de_Linha_1; 
3. Seguidor_de_Linha_versao_3_Sharp