Apostila Arduino
Apostila Arduino
COM 1
V1.9 – Abril/2026
Olá, Maker!
Parabéns pelo primeiro passo rumo a uma jornada incrível no mundo da tecnologia e
da criatividade!
Esta apostila foi preparada especialmente para você e servirá como um guia completo,
unindo teoria e prática, para aproveitar ao máximo o seu Kit Arduino Robótica. Com
todos os componentes essenciais inclusos, o kit garante que você coloque cada projeto
em prática e viva uma jornada de aprendizado completa.
Se você ainda é novo no universo Arduino, não se preocupe! Vamos te guiar desde os
primeiros passos: Apresentação da plataforma, instalação, configuração e o passo a
passo para você dominar todos os recursos da sua placa Arduino. E o melhor: com
projetos práticos que vão te levar da programação à montagem, até ver o seu projeto
ganhar vida!
Com o Kit Arduino Robótica, as possibilidades são infinitas. Você poderá criar inúmeros
projetos utilizando sensores, módulos, e muito mais. Isso e muito mais você
encontrará no site da Eletrogate.
Então, se você ainda não garantiu o seu, não perca mais tempo! Acesse agora mesmo
o nosso site e garanta já o seu Kit Arduino Robótica para desbloquear todo o seu
potencial criativo! Tudo o que você precisa para soltar sua criatividade, aprender e se
divertir você encontrará neste Kit.
[Link] 2
[Link] 3
Sumário
Sumário ......................................................................................................................................... 4
Parte I – Conceitos elétricos, introdução aos componentes e instalação da IDE ....................... 6
Introdução ................................................................................................................................ 6
Revisão de circuitos elétricos ................................................................................................... 7
Carga e corrente elétrica ...................................................................................................... 8
Tensão elétrica...................................................................................................................... 9
Potência e energia ................................................................................................................ 9
Conversão de níveis lógicos e alimentação correta de circuitos ...................................... 10
Revisão de componentes eletrônicos .................................................................................... 12
Resistores elétricos ............................................................................................................. 12
Capacitores ......................................................................................................................... 14
Diodos e LEDs ...................................................................................................................... 16
Transistores......................................................................................................................... 18
Protoboard .......................................................................................................................... 20
Parte II - Instalando e conhecendo a Arduino IDE ..................................................................... 22
Parte III - Seção de Exemplos Práticos ....................................................................................... 27
Exemplo 1 - Leitura de Sinais Analógicos com Potenciômetro ......................................... 28
Exemplo 2 - Divisores de Tensão com Resistores .............................................................. 31
Exemplo 3 - Controle de LEDs com Botões ........................................................................ 33
Exemplo 4 - Acionamento de buzzer com um botão......................................................... 35
Exemplo 5 - Acionamento de LED conforme do Luz Ambiente......................................... 38
Exemplo 6 - Controle de Servo Motor com Potenciômetro .............................................. 41
Exemplo 7 - Medindo a Temperatura do Ambiente .......................................................... 44
Exemplo 8 - Acendendo um LED com Módulo Seguidor de Linha .................................... 46
Exemplo 9 – Efeito fade ...................................................................................................... 48
Exemplo 10 - Controlando o brilho do LED com potenciômetro ...................................... 49
Exemplo 11 – Explorando o efeito de persistência da visão (POV) com LED ................... 51
Exemplo 12 - Controlando LEDs com funções diferentes sem usar delay() ..................... 52
Exemplo 13 – Diferença entre transistores NPN e PNP na prática ................................... 55
Exemplo 14 – Acionamento de cargas usando transistores.............................................. 57
Exemplo 15 – Semáforo com Arduino ............................................................................... 59
Exemplo 16 - Acionando displays de 7 segmentos ............................................................ 61
Exemplo 17 - Trena Eletrônica com Sensor Ultrassônico .................................................. 64
[Link] 4
Exemplo 18 – Carro Automático com Ponte H e Arduino ................................................. 68
Exemplo 19 – Robô Seguidor de Linha ............................................................................... 79
Exemplo 20 – Braço Robótico Controlado por Potenciômetros ....................................... 82
Parte IV - Cálculo do resistor de base dos transistores ............................................................. 86
Parte V – Principais comandos do Arduino ............................................................................... 88
Considerações finais ............................................................................................................... 90
[Link] 5
Parte I – Conceitos elétricos, introdução aos
componentes e instalação da IDE
Introdução
A primeira parte da apostila faz uma revisão sobre circuitos elétricos, com destaque para
questões práticas de montagem e segurança que surgem no dia a dia do usuário do Kit
Robótica para Arduino.
Todos os conteúdos da Parte I são focados na apostila Arduino Robótica, tendo em vista
a utilização adequada dos componentes e da realização prática de montagens pelos
usuários. No entanto, recomenda-se a leitura das referências indicadas ao final de cada
seção para maior aprofundamento.
[Link] 6
Revisão de circuitos elétricos
A apostila Robótica, bem como todas as outras apostilas que tratam de Arduino e
eletrônica em geral, tem como conhecimento de base as teorias de circuitos elétricos e
de eletrônica analógica e digital.
Em todo circuito você vai ouvir falar das grandezas elétricas principais, assim, vamos
aprender o que é cada uma delas.
[Link] 7
Carga e corrente elétrica
A grandeza mais básica nos circuitos elétricos é a carga elétrica. Carga é a propriedade
elétrica das partículas atômicas que compõem a matéria (prótons, nêutrons e elétrons),
e é medida em Coulombs.
Do conceito de carga elétrica obtemos o conceito de corrente elétrica, que nada mais
é do que a taxa de variação da carga ao longo do tempo, ou seja, quando você tem um
fluxo de carga em um condutor, a quantidade de carga (Coulomb) que atravessa esse
condutor por unidade de tempo, é chamada de corrente elétrica. A medida utilizada
para corrente é o Ampére(A).
Aqui temos que fazer uma distinção importante. Existem corrente elétrica contínua e
alternada:
Com o Arduino UNO e na maioria dos componentes eletrônicos, lidamos com a corrente
elétrica contínua. É diferente da corrente e tensão elétrica da tomada de sua casa, que
são alternadas.
Na realidade, os elétrons, que possuem carga negativa, se movem do polo negativo para
o polo positivo. Isso ocorre porque, em um circuito, o excesso de elétrons em um lado
(polo negativo) cria uma região negativa em relação ao lado com menos elétrons (por
conter menos elétrons, dizemos que essa região está positiva). Essa diferença de
potencial cria uma força que faz com que os elétrons se movam em direção ao lado
positivo.
Quando conectamos os dois polos por meio de uma carga (como um LED, resistor,
motor, por exemplo), a corrente elétrica é gerada e flui devido a essa diferença de
[Link] 8
potencial (conceito que será explicado mais adiante). A corrente é a forma como a
energia é transportada e utilizada pelos componentes do circuito.
Tensão elétrica
O mais comum é você ver apenas “tensão” nos artigos e exemplos com Arduino.
Assim, definindo formalmente o conceito: Tensão elétrica é a energia necessária para
mover uma unidade de carga através de um condutor, e é medida em Volts (V).
Potência e energia
A tensão e a corrente elétrica são duas grandezas básicas, e juntamente com a potência
e energia, são as grandezas que descrevem qualquer circuito elétrico ou eletrônico. A
potência é definida como a variação de energia (que pode estar sendo liberada ou
consumida) em função do tempo, e é medida em Watts (W). A potência está associada
ao calor que um componente está dissipando e a energia que ele consume.
Nós sabemos da vida prática que uma lâmpada de 100W consome mais energia do que
uma de 60 W. Ou seja, se ambas estiverem ligadas por 1 hora por exemplo, a lâmpada
de 100W vai implicar numa conta de energia mais cara.
A potência se relaciona com a tensão e corrente pela seguinte fórmula:
P=VxI
Essa é a chamada potência instantânea. Com essa fórmula, para saber qual a potência
dissipada em um resistor, por exemplo, basta informar a tensão aplicada nos terminais
do resistor e a corrente que passa por ele. O conceito de potência é importante pois
muitos hobbistas acabam não tendo noção de quais valores de resistência usar, ou
mesmo saber especificar componentes de forma adequada.
[Link] 9
Um resistor de 33 ohms de potência igual a 1/4W, por exemplo, não pode ser ligado
diretamente em circuito de 5V, pois nesse caso a potência dissipada nele seria maior
que a que ele pode suportar.
Vamos voltar a esse assunto em breve, por ora, tenha em mente que é importante ter
uma noção da potência dissipada ou consumida pelos elementos do circuito que você
irá montar.
Por fim, a energia elétrica é o somatório da potência elétrica durante todo o tempo em
que o circuito esteve em funcionamento. A energia é dada em Joules (J) ou Wh (watt-
hora). A unidade Wh é interessante pois mostra que a energia é calculada multiplicando-
se a potência pelo tempo (apenas para os casos em que a potência é constante).
Essa primeira parte é um pouco conceitual, mas é importante saber de onde vieram
todas as siglas que você irá encontrar nos manuais e artigos na internet. Na próxima
seção, vamos discutir os componentes básicos que compõem o Kit Robótica para
Arduino.
É muito comum que hobbistas e projetistas em geral acabem cometendo alguns erros
de vez em quando. Na verdade, mesmo alguns artigos na internet e montagens
amplamente usadas muitas vezes acabam por não utilizar as melhores práticas de forma
rigorosa. Isso acontece frequentemente com situações em que os níveis lógicos dos
sinais usados para integrar o Arduino com outros circuitos não são compatíveis entre si.
Isso significa que quando você quiser usar o seu Arduino UNO com um sensor ou CI que
trabalhe com 3.3V, é preciso fazer a adequação dos níveis de tensão, pois se você enviar
um sinal de 5V (saída do Arduino) em um circuito de 3.3V (CI ou sensor), você poderá
queimar o pino daquele componente.
Em geral, sempre que dois circuitos que trabalhem com níveis de tensão diferentes
forem conectados, é preciso fazer a conversão dos níveis lógicos. O mais comum é ter
que abaixar saídas de 5V para 3.3V. Subir os sinais de 3.3V para 5V na maioria das vezes
[Link] 10
não é necessário pois o Arduino entende 3.3V como nível lógico alto, isto é, equivalente
a 5V.
O divisor de tensão é a solução mais simples, mas usar um CI conversor é mais elegante
e é o ideal. O divisor de tensão consiste em dois resistores ligados em série (Z1 e Z2), em
que o sinal de 5V é aplicado em um dos terminais de Z1. O segundo terminal de Z2 é
ligado ao GND, e o ponto de conexão entre os dois resistores é a saída do divisor, cuja
tensão é dada pela seguinte relação:
Um divisor de tensão muito comum é fazer Z1 igual 1KΩ e Z2 igual 2KΩ. Dessa forma a
saída Vout fica sendo 3.33V. Como o Kit Robótica para Arduino não contém resistores
de 2K, você pode associar dois resistores de 1K ligados em série para formar o resistor
Z2. Fazendo isso, teremos Z1 = 1KΩ e Z2 = (1KΩ + 1KΩ), resultando numa saída de 3.33V
segundo a fórmula mostrada (Vout = (1KΩ + 1KΩ)/(1KΩ+(1KΩ + 1KΩ)) x 5).
Vamos exemplificar como fazer um divisor de tensão como esse na seção de exemplos
da parte II da apostila.
[Link] 11
Revisão de componentes eletrônicos
O Kit Robótica para Arduino possui os seguintes componentes básicos para montagens
de circuitos:
Resistores elétricos
Os resistores mais comuns do mercado são construídos com fio de carbono e são
vendidos em várias especificações. Os resistores do Kit são os tradicionais de 1/4W e 5%
de tolerância. Isso significa que eles podem dissipar no máximo 1/4W (0,25 watts) e seu
valor de resistência pode variar em até 5% para mais ou para menos, ou seja, o resistor
de 1KΩ pode então ter um valor mínimo de 950Ω e um valor máximo de 1050Ω para ser
considerado em condições de uso.
Em algumas aplicações você pode precisar de resistores com precisão maior, como 1%.
Também há casos em que a precisão não é tão importante, podendo ser utilizados
resistores com tolerância de 10%. Em alguns casos, pode ser necessário usar resistores
[Link] 12
com maior potência, como 1W, enquanto em outros a potência pode ser menor, como
1/8W. Essas variações dependem da natureza específica de cada circuito."
Em geral, para as aplicações típicas e montagens de prototipagem que podem ser feitos
com o Kit Robótica para Arduino, os resistores tradicionais de 1/4W e 5% de tolerância
são mais que suficientes.
V=RxI
Ou seja, se você sabe o valor de um resistor e a tensão aplicada em seus terminais, você
pode calcular a corrente elétrica que fluirá por ele. Juntamente com a equação para
calcular potência elétrica, a lei de Ohm é importante para saber se os valores de corrente
e potência que os resistores de seu circuito estão operando estão adequados.
Para fechar, você deve estar se perguntando, como saber o valor de resistência de um
resistor? Você tem duas alternativas: Medir a resistência usando um multímetro ou
determinar o valor por meio do código de cores do resistor.
Se você pegar um dos resistores do seu kit, verá que ele possui algumas faixas coloridas
em seu corpo. Essas faixas são o código de cores do resistor. As duas primeiras faixas
dizem os dois primeiros algarismos decimais. A terceira faixa colorida indica o
multiplicador que devemos usar. A última faixa, que fica um pouco mais afastada, indica
a tolerância.
[Link] 13
Na figura 2 apresentamos o código de cores para resistores. Cada cor está associada a
um algarismo, um multiplicador e uma tolerância, conforme a tabela. Com a tabela você
pode determinar a resistência de um resistor sem ter que usar o multímetro.
Capacitores
Os capacitores são os elementos mais comuns nos circuitos eletrônicos depois dos
resistores. São elementos que armazenam energia na forma de campos elétricos. Um
capacitor é constituído de dois terminais condutores e um elemento dielétrico entre
esses dois terminais, de forma que quando submetido a uma diferença de potencial, um
campo elétrico surge entre esses terminais, causando o acúmulo de cargas positivas no
terminal negativo e cargas negativas no terminal positivo.
O importante que você deve saber para utilizar o Kit é que os capacitores podem ser de
quatro tipos:
[Link] 14
⚫ Eletrolíticos;
⚫ Cerâmicos;
⚫ Poliéster;
⚫ Tântalo.
Capacitor eletrolítico
Capacitores cerâmicos
Capacitores cerâmicos não possuem polaridade, e são caracterizados por seu tamanho
reduzido e por sua cor característica, um marrom claro um tanto fosco. Possuem
capacitância da ordem de pico Farad. Veja nas imagens abaixo um típico capacitor
cerâmico e sua identificação:
[Link] 15
Figura 4: Capacitores cerâmicos
Diodos e LEDs
Diodos e LEDs são tratados ao mesmo tempo pois são, na verdade, o mesmo
componente. Diodos são elementos semicondutores que só permitem a passagem de
corrente elétrica em uma direção.
São constituídos de dois terminais, o Anodo(+) e o catodo(-), sendo que para que possa
conduzir corrente elétrica, é preciso conectar o Anodo na parte positiva do circuito, e o
Catodo na parte negativa. Do contrário, o diodo se comporta como um circuito aberto,
bloqueando a passagem dos elétrons.
[Link] 16
Na figura 4, você pode ver que o componente possui uma faixa indicadora no terminal
catodo, este é o polo negativo. O diodo do Kit Robótica para Arduino é um modelo
tradicional e que está no mercado há muitos anos, o 1N4007.
O LED é um tipo específico de diodo - Light Emitter Diode, ou seja, um diodo que emite
luz. Trata-se de um diodo que quando polarizado corretamente, emite luz para o
ambiente externo. O Kit Robótica para Arduino vem acompanhado de LEDs nas cores
vermelha, verde e amarela, as mais tradicionais.
Nesse ponto, é importante você saber que sempre deve ligar um led junto de um
resistor, para que a corrente elétrica que flua pelo led não seja excessiva e acabe por
queimá-lo. Além disso, lembre-se que por ser um diodo, o led só funciona se o Anodo
estiver conectado ao polo positivo do sinal de tensão.
Para identificar o Anodo do Led, basta identificar o terminal mais longo do componente,
como na imagem abaixo:
[Link] 17
Transistores
▪ NPN: No transistor NPN, a corrente principal entra pelo coletor e sai pelo
emissor (considerando o sentido convencional da corrente). Para que o
transistor NPN conduza, é necessário aplicar um sinal positivo na base.
Esse sinal permite que a corrente flua do coletor para o emissor, habilitando a
condução do transistor.
[Link] 18
▪ PNP: O funcionamento do transistor PNP é oposto ao NPN. Nele, a corrente
principal entra pelo emissor e sai pelo coletor. Entrando em condução ao
aplicarmos um sinal negativo na base. Esse sinal negativo na base permite que
a corrente flua do emissor para o coletor, habilitando a condução do transistor.
Modos de operação
[Link] 19
Para facilitar a compreensão do funcionamento do transistor, vamos associar o tipo
NPN a uma torneira. Nesta analogia, o coletor representa a entrada de água na
torneira, o emissor representa a saída de água e, a base, equivale ao registro. Para o
PNP, a analogia é a mesma, diferenciando-se apenas na função do coletor e do
emissor.
Modo Ativo: Chamamos de região ativa porque o transistor está funcionando como
um amplificador. Neste estado, a corrente de base controla a corrente de coletor, mas
o transistor não está completamente saturado. A corrente de coletor é proporcional à
corrente de base, multiplicada pelo ganho do transistor. Isso faz com que a tensão
entre o coletor e o emissor seja alta o suficiente para permitir essa amplificação.
Associando à torneira, você abre o registro parcialmente, permitindo um fluxo
controlado e proporcional da água. Da mesma forma, no transistor, a corrente de base
controla a quantidade de corrente que flui do coletor (entrada da água) para o emissor
(saída da água).
Embora o ganho (β) do transistor ainda esteja presente, sua influência é menor neste
modo já que existe um excesso de elétrons na base. A corrente de coletor passa a ser
mais influenciada pela configuração do circuito do que pela corrente de base. Na
torneira, é como se o registro estivesse completamente aberto, permitindo o fluxo
máximo de água.
[Link] 20
A protoboard é uma ferramenta essencial no desenvolvimento de circuitos eletrônicos,
especialmente em projetos experimentais e de prototipagem. Sua principal vantagem
é a facilidade de montagem e modificação de circuitos sem a necessidade de solda,
permitindo testar e ajustar componentes rapidamente. Na imagem abaixo, mostramos
as ligações internas da protoboard para que você entenda como os pinos são
organizados e onde permitem contato:
Note que, nessa orientação, temos colunas numeradas de 1 a 30, enquanto as linhas
são nomeadas de A a E no segmento inferior e de F a J no segmento superior. A ligação
entre os pinos é bem simples de entender: em cada coluna numérica, as 5 linhas
correspondentes estão interligadas entre si (linhas verdes), mas não há conexão com
as colunas vizinhas (números), nem entre os segmentos superior e inferior (grupos A-E
e F-J).
[Link] 21
circuito prático para montagem onde será apresentado o funcionamento de cada um
deles, assim como será feito para os sensores de luz (LDR) e temperatura (NTC). O Micro
Servo 9g SG90 TowerPro também terá uma seção de exemplo dedicada a cada ele.
A tela seguinte nos propõe fazer uma contribuição para a plataforma, pode clicar em
“Just Download” – Aqui é de suma importância que seu navegador não traduza a
página, pois essa opção não é exibida quando traduzida.
[Link] 22
Na tela seguinte, clique novamente em “Just Download”.
Após esses passos, o download irá iniciar automaticamente. Quando terminar, execute
o arquivo baixado e clique em “Eu concordo” na janela exibida.
[Link] 23
Nas telas seguintes, basta clicar em “Próximo” e “Instalar”. Ao término, clique em
concluir para abrir a IDE.
[Link] 24
Com a IDE instalada e aberta, vamos conhecer os recursos que serão úteis nessa
apostila. Primeiramente, vamos fazer uma pequena configuração, que será útil
futuramente. Clique em “Arquivo”, na parte superior e vá em “Preferências”. A tela
abaixo será exibida:
Nela, marque as caixinhas “compilar” e “enviar”. Elas são responsáveis por exibir logs e
possíveis erros quando começarmos a programar o Arduino. Você também pode alterar
o idioma, ativar o modo escuro e alterar a fonte, conforme sua preferência. Clique em
“OK” para salvar as alterações.
Agora, vamos fazer um simples teste para verificar o funcionamento da placa. Primeiro,
precisamos conectar o pino RESET do Arduino ao GND e conectar os pinos 0 (RX) e 1 (TX)
entre si, usando jumpers. Isso nos permite realizar um teste chamado loopback, que
nada mais é do que um teste de comunicação entre o Arduino e o computador, onde
enviamos uma mensagem e a placa nos retorna exatamente o que foi enviado se tudo
estiver funcionando corretamente. Abaixo, o diagrama de conexão:
[Link] 25
Com a conexão feita, vamos conectar a placa ao computador e preparar a Arduino IDE.
Nela, precisaremos apenas selecionar o modelo de placa e a porta COM em que seu
Arduino está conectado e abrir um recurso chamado Monitor Serial. Veja abaixo onde
encontrá-lo:
[Link] 26
Especificamente nesse teste, não precisaremos carregar nenhum código, basta
selecionar corretamente a placa e abrir o monitor serial. A seguinte aba será aberta na
parte inferior da IDE:
Nela, podemos usar o campo de texto para enviar comandos/mensagens para o Arduino
e configurar a velocidade de comunicação. Para os exemplos dessa apostila, podemos
manter em 9600 bauds mesmo.
Para fazer o teste de loopback, você só precisa digitar uma mensagem e apertar a tecla
Enter, para enviá-la. O Arduino deverá retorná-la na sequência, como mostrado abaixo:
Agora vamos entrar nas seções de exemplos em si. Os conceitos da Parte I são
importantes caso você esteja começando a trabalhar com eletrônica. No entanto,
devido ao aspecto prático da montagem, não necessariamente você precisa de ler toda
a parte introdutória para montar os circuitos abaixo, mas recomendamos que estude os
componentes e suas particularidades para complementar seu conhecimento.
[Link] 27
Em cada exemplo vamos apresentar os materiais utilizados, o diagrama, o código e mais:
em um exemplo específico, deixamos um desafio para que você complete o
funcionamento do projeto com base nos conhecimentos adquiridos.
Vamos começar!
O potenciômetro nada mais do que um resistor cujo valor de resistência pode ser
ajustado de forma manual. Existem potenciômetros slides e giratórios. Na figura abaixo
mostramos um potenciômetro giratório dos mais comumente encontrados no mercado.
Em ambos, ao variar a posição da chave manual, seja ela giratória ou slide, o valor da
resistência entre o terminal de saída e um dos outros terminais se altera. O símbolo do
potenciômetro é o mostrado na imagem a seguir:
[Link] 28
trabalha com 10 bits. Em sistemas digitais, a base é 2 porque os dados são representados
em binário, com dois estados possíveis: 0 e 1. Com 10 bits, o ADC pode representar 1024
níveis diferentes. Assim, o intervalo vai de 0 a 1023, totalizando 1024 possíveis valores.
Esse total de 1024 resulta da potência 210 , onde 2 é a base do sistema binário e 10 é o
número de bits de resolução do ADC.
Tensão = Valor*(5/1024)
Lista de materiais:
⚫ Arduino UNO;
⚫ Protoboard;
⚫ Potenciômetro 10K;
⚫ Jumpers.
Diagrama de circuito
[Link] 29
O Potenciômetro possui 3 terminais, sendo que o do meio é o que possui resistência
variável. A ligação consiste em ligar os dois terminais fixos a uma tensão de 5V. Assim, o
terminal intermediário do potenciômetro terá um valor que varia de 0 a 5V à medida
que você gira seu knob.
Carregue o código abaixo no Arduino e você verá as leituras no Monitor serial da IDE.
void setup(){
[Link](9600); // monitor serial - velocidade 9600 Bps
delay(100); // atraso de 100 milissegundos
}
void loop(){
sensorValue = analogRead(sensorPin); // leitura da entrada analógica A0
voltage = sensorValue * (5.0 / 1024); // cálculo da tensão
[Link] 30
No código, nós declaramos a variável sensorValue para armazenar as leituras da entrada
analógica A0 e a variável Voltage para armazenar o valor lido convertido para tensão.
Declaramos como sendo do tipo float pois precisamos trabalhar com casas decimais, o
que não é permitido no tipo int.
Na função void setup(), nós inicializamos o terminal serial com uma taxa de transmissão
de 9600 bits por segundo. Na função void loop(), primeiro faz-se a leitura da entrada
analógica A0 com a função analogRead(SensorPin) e armazenamos a mesma na variável
sensorValue. Em seguida, aplicamos a fórmula para converter a leitura (que é um
número entre 0 e 1023) para o valor de tensão correspondente. O resultado é
armazenado na variável Voltage e em seguido mostrado na interface serial da IDE
Arduino.
Esse exemplo é para ilustrar como usar um divisor de tensão. Sempre que você precisar
abaixar um sinal lógico de 5V para 3.3V você pode usar esse circuito. Explicamos o divisor
de tensão na seção de introdução, mais especificamente, quando conversamos sobre
conversão de níveis lógicos.
Esse circuito será útil sempre que você tiver que abaixar as saídas do Arduino de 5V para
3.3V.
Lista de materiais:
⚫ 5 resistores de 1KΩ;
⚫ 1 Arduino UNO;
⚫ Protoboard;
⚫ Jumpers.
[Link] 31
Diagrama de circuito:
Esse é um diagrama com dois divisores de tensão. O primeiro é composto por três
resistores, sendo cada um de 1K. Assim, o resistor R1 é de 1K e o resistor R2 é formado
pela associação em série dos outros dois, resultando numa resistência equivalente de
2K.
𝑹𝟏
∗ 𝑻𝒆𝒏𝒔ã𝒐
𝑹𝟏 + 𝑹𝟐
O segundo divisor é formado por dois resistores de 1K, dessa forma, a tensão de saída
é a tensão de entrada dividida pela metade:
O código para o exemplo 2 é uma extensão do código usada na seção anterior para ler
valores de tensão do potenciômetro. Nesse caso, nós fazemos a leitura de dois canais
analógicos (A0 e A1), fazemos as conversões para as tensões e mostramos os resultados
de cada divisor na interface serial.
[Link] 32
Carregue o código abaixo e observe os dois valores no Monitor Serial da IDE Arduino.
void setup()
{
[Link](9600); // monitor serial - velocidade 9600 Bps
delay(100); // atraso de 100 milissegundos
}
void loop()
{
sensorValue1 = analogRead(sensorPin1); // leitura da entrada analógica A0
sensorValue2 = analogRead(sensorPin2); // leitura da entrada analógica A1
voltage1 = sensorValue1 * (5.0 / 1024); // cálculo da tensão 1
voltage2 = sensorValue2 * (5.0 / 1024); // cálculo da tensão 2
[Link]("Tensão do divisor 1: "); // imprime no monitor serial
[Link](voltage1); // imprime a tensão 1
[Link](" Tensão do divisor 2: "); // imprime no monitor serial
[Link](voltage2); // imprime a tensão 2
delay(500); // atraso de 500 milissegundos
}
Esses dois componentes são trabalhados por meio das entradas e saídas digitais do
Arduino. Neste exemplo vamos fazer uma aplicação básica que você provavelmente vai
repetir muitas vezes. Vamos ler o estado de um push-button e usá-la para acender ou
apagar um LED.
Lista de materiais:
[Link] 33
⚫ Resistor de 330Ω;
⚫ Resistor de 1KΩ;
⚫ LED vermelho (ou de outra cor de sua preferência);
⚫ Push-button (chave botão);
⚫ Arduino UNO;
⚫ Protoboard;
⚫ Jumpers.
Diagrama de circuito:
Esse pequeno código abaixo mostra como ler entradas digitais e como acionar as
saídas digitais. Na função void setup(), é preciso configurar qual pino será usado como
saída e qual será usado como entrada.
Na função void loop(), fizemos um if no qual a função digitalRead é usada para saber se
o push-button está acionado ou não. Caso ele esteja acionado, nós acendemos o LED,
caso ele esteja desligado, nós desligamos o LED.
[Link] 34
Carregue o código abaixo e pressione o botão para acender o LED.
void setup()
{
pinMode(PinButton, INPUT); // configura D8 como entrada digital
pinMode(ledPin, OUTPUT); // configura D7 como saída digital
[Link](9600); // monitor serial - velocidade 9600 Bps
delay(100); // atraso de 100 milissegundos
}
void loop()
{
if (digitalRead(PinButton) == HIGH) // se chave = nível alto
{
digitalWrite(ledPin, HIGH); // liga LED com 5V
[Link]("Acendendo LED"); // imprime no monitor serial
}
else // senão chave = nível baixo
{
digitalWrite(ledPin, LOW); // desliga LED com 0V
[Link]("Desligando LED"); // imprime no monitor serial
}
delay(100); // atraso de 100 milissegundos
}
[Link] 35
Buzzer passivo e buzzer ativo, respectivamente
Repare que o circuito do buzzer ativo não é acessível, estando coberto com resina. Já o
buzzer passivo você pode visualizar uma pequena placa de circuito interna, onde os
terminais estão conectados.
Nosso kit traz o buzzer ativo de 5V, que é mais fácil de acionar e desenvolver projetos,
já que, para emitir som, precisa apenas ser energizado. No projeto a seguir, vamos
utilizar o Arduino e um botão para fazer o acionamento desse buzzer.
Lista de materiais:
• Arduino Uno;
• Protoboard;
• Push Button;
• Jumpers.
Diagrama de circuito:
[Link] 36
Carregue o código abaixo em seu Arduino:
#define BUTTON 3
#define BUZZER 4
void setup(){
pinMode(BUTTON, INPUT_PULLUP);
pinMode(BUZZER, OUTPUT);
[Link](9600);
delay(100);
}
void loop(){
if (digitalRead(BUTTON) == LOW){
digitalWrite(BUZZER, HIGH);
} else {
digitalWrite(BUZZER, LOW);
}
delay(100);
}
[Link] 37
Exemplo 5 - Acionamento de LED conforme do Luz Ambiente
O sensor LDR é um sensor de luminosidade. LDR é a sigla para Light Dependent Resistor,
ou seja, um resistor cuja resistência varia com a quantidade de luz que incide sobre ele.
Esse é seu princípio de funcionamento.
É importante considerar a potência máxima do sensor, que é de 100 mW. Ou seja, com
uma tensão de operação de 5V, a corrente máxima que pode passar por ele é de 20 mA.
Felizmente, com 8KΩ (que medimos experimentalmente com o ambiente bem
iluminado), que é a resistência mínima, a corrente ainda está longe disso, sendo
0,625mA. Dessa forma, podemos conectar o sensor diretamente ao Arduino.
*Nota: Em suas medições, pode ser que encontre um valor de resistência mínimo
diferente, pois depende da iluminação local e da própria fabricação do componente em
si.
Este sensor de luminosidade pode ser utilizado em projetos com o Arduino e outros
microcontroladores para diversas aplicações, como alarmes, automação residencial,
sensores de presença e vários outros.
Nesse exemplo, vamos usar uma entrada analógica do Arduino para ler a variação de
tensão no LDR e, consequentemente, saber como a luminosidade ambiente está se
[Link] 38
comportando. Veja na especificação que, com muita luz, a resistência fica em torno de
10-20KΩ, enquanto no escuro pode chegar a 1MΩ.
Lista de materiais:
⚫ LDR;
⚫ Resistor de 10KΩ;
⚫ 1 Arduino UNO;
⚫ Protoboard;
⚫ Jumpers.
Diagrama de circuito:
[Link] 39
Quanto maior a intensidade de luz, menor a resistência do sensor e, consequentemente,
menor a tensão de saída.
Carregue o código abaixo e varie a luminosidade sobre o LDR.
void setup()
{
pinMode(ledPin, OUTPUT); // configura D13 como saída digital
[Link](9600); // monitor serial - velocidade 9600 Bps
delay(100); // atraso de 100 milissegundos
}
void loop()
{
Leitura = analogRead(AnalogLDR); // leitura da tensão no pino analógico
A0
VoltageLDR = Leitura * (5.0/1024); // cálculo da tensão no LDR
[Link]("Leitura sensor LDR = "); // imprime no monitor serial
[Link](VoltageLDR); // imprime a tensão do LDR
Nesse caso, definimos uma tensão de limiar, a partir da qual desligamos ou ligamos um
LED para indicar que a intensidade da luz ultrapassou determinado valor. Esse limiar
pode ser ajustado por você para desligar o led em intensidades diferentes de luz
ambiente.
[Link] 40
Exemplo 6 - Controle de Servo Motor com Potenciômetro
Ou seja, o servo motor é um atuador rotativo para controle de posição, que atua com
precisão e velocidade controlada em malha fechada. De acordo com a largura do pulso
aplicado no pino de controle PWM, a posição do rotor é definida (0 a 180 graus) . Os
pulsos devem variar entre 0,5 ms. e 2,5 ms.
No caso dos servomotores digitais, mais caros e mais precisos, o controle da posição do
rotor utiliza um encoder digital.
[Link] 41
A figura abaixo mostra um típico servo motor analógico. Trata-se do Micro Servo Tower
Pro SG90 9G que acompanha o Kit Robótica para Arduino.
Os Servos são acionados por meio de três fios, dois para alimentação e um
correspondente ao sinal de controle para determinar a posição. Em geral, os três fios
são:
• Marrom ou preto: GND;
• Vermelho: Alimentação positiva;
• Laranja ou branco: Sinal de controle PWM.
Lista de materiais:
[Link] 42
Diagrama de circuito
void setup()
{
[Link](6); // configura pino D6 - controle do Servo
}
void loop()
{
val = analogRead(potpin); // leitura da tensão no pino A0
val = map(val, 0, 1023, 0, 179); // converte a leitura em números (0-179)
[Link](val); // controle PWM do servo
delay(15); // atraso de 15 milissegundos
}
[Link] 43
O aspecto mais importante desse software é a utilização da biblioteca servo.h.
Bibliotecas nada mais são que conjuntos de código prontos para facilitar a
programação, e essa possui as funções necessárias para posicionar a servo para a
posição desejada. Na função Void Setup() nós associamos o objeto servomotor, do
tipo Servo, a um pino do Arduino. Na mesma função, nós inicializamos o servo na
posição 0º, utilizando o método write do objeto que acabamos de criar.
Para atualizar a posição do servo a cada contagem do loop, nós chamamos o método
write() do objeto servomotor, passando como parâmetro o valor lido do potenciômetro
traduzido para a escala de 0-179. Assim, sempre que mexermos no potenciômetro, o
servo motor irá atuar e atualizar a sua posição.
Assim, o princípio para medir o sinal de um termistor é o mesmo que usamos para medir
o sinal do LDR. Vamos medir na verdade, a queda de tensão provocada na resistência
do sensor.
[Link] 44
O termistor que acompanha o kit é do tipo NTC, como o próprio nome diz. Esse é o tipo
mais comum do mercado.
O grande problema dos termistores é que é necessária fazer uma função de calibração,
pois a relação entre temperatura e resistência elétrica não é linear. Existe uma equação,
chamada equação de Stein Hart-Hart que é usada para descrever essa relação (vide
referências).
O código que vamos usar nesse exemplo utiliza a equação de Stein-Hart conforme a
referência 1.
Lista de materiais:
Diagrama de circuito:
[Link] 45
Carregue o código abaixo e meça a temperatura com o NTC:
void setup(){
[Link](9600); // monitor serial - velocidade 9600 Bps
beta = (log(RT1 / RT2)) / ((1 / T1) - (1 / T2)); // cálculo de beta
Rinf = R0 * exp(-beta / T0); // cálculo de Rinf
delay(100); // atraso de 100 milissegundos
}
void loop(){
Vout = Vin * ((float)(analogRead(0)) / 1024.0); // cálculo de V0 e leitura de A0
Rout = (Rt * Vout / (Vin - Vout)); // cálculo de Rout
TempKelvin = (beta / log(Rout / Rinf)); // cálculo da temp. em Kelvins
TempCelsius = TempKelvin - 273.15; // cálculo da temp. em Celsius
[Link]("Temperatura em Celsius: "); // imprime no monitor serial
[Link](TempCelsius); // imprime temperatura Celsius
[Link](" Temperatura em Kelvin: "); // imprime no monitor serial
[Link](TempKelvin); // imprime temperatura Kelvins
delay(500); // atraso de 500 milissegundos
}
[Link] 46
⚫ Led vermelho 5mm;
⚫ Resistor de 330;
⚫ Jumpers para ligação no protoboard;
Diagrama de Circuito:
Código:
// Exemplo 8 - Acendendo um LED com Módulo Seguidor de Linha
// Apostila Eletrogate - KIT ROBOTICA
void setup() {
pinMode(led, OUTPUT); // pino do led indicador = saida
pinMode(fotoTransistor, INPUT); // pino do coletor do fototransistor = entrada
}
void loop() {
leituraSensor = digitalRead(fotoTransistor); // leitura do módulo
if (leituraSensor == 0 ) // se sensor detectar a luz
digitalWrite(led, HIGH); // acende LED indicador
else // senão
digitalWrite(led, LOW); // apaga LED indicador
delay(500); // atraso de 0,5 segundos
}
[Link] 47
O código para utilização do sensor TCRT5000 é bem simples. Com o circuito montado,
basta monitorar o estado do pino no qual a saída do sensor (coletor do fototransistor)
está ligada. Se esse pino estiver em nível baixo, é porque algum objeto está presente
dentro do raio de medição do sensor (a luz infra-vermelha do LED está sendo refletida).
Se o pino estiver em nível alto, então não há objeto nenhum dentro do alcance do
sensor.
Nesse exemplo, a detecção feita pelo sensor é visualizada pelo acionamento de um led,
ou seja, sempre que um objeto for identificado pelo sensor, o LED ficará aceso.
Este projeto demonstra como criar um efeito de fade no LED, onde seu brilho aumenta
e diminui gradativamente e de forma automática.
Lista de materiais:
• Arduino Uno + cabo;
• LED;
• Resistor de 330Ω;
• Protoboard;
• Jumpers.
Diagrama de circuito:
[Link] 48
Carregue o código a seguir:
void setup(){
pinMode(LED, OUTPUT); //seta o pino 3 como saída
}
void loop(){
for(int i=0; i<255; i++){ //incrementa os valores de 0 até 255
analogWrite(LED, i); //liga o LED proporcionalmente a i
delay(10); //aguarda 10 milissegundos
}
for(int i=255; i>0; i--){ //decrementa os valores de 255 até 0
analogWrite(LED, i); //liga o LED proporcionalmente a i
delay(10); //aguarda 10 milissegundos
}
}
Nesse exemplo, usamos o laço for() para iniciar uma iteração. O laço inicia a variável ‘i’
em zero e incrementa seu valor de 1 em 1 até que a condição “i < 255” seja falsa. A
cada iteração, o brilho do LED é ajustado conforme o valor de ‘i’ e o programa aguarda
10 milissegundos antes de fazer o próximo incremento. Esse processo aumenta o
brilho do LED de forma gradativa no primeiro for() e diminui, também gradativamente,
no segundo for().
[Link] 49
Lista de materiais:
Diagrama de circuito
void setup(){
pinMode(LED, OUTPUT); //configura o pino do led como saída
}
void loop(){
int brilho = map(analogRead(POT), 0, 1023, 0, 255); //conversão de valores
analogWrite(LED, brilho); //varia o brilho do LED
}
[Link] 50
Faça o upload do código após as conexões e gire o eixo do potenciômetro para variar o
brilho do LED.
Nesse exemplo, vamos explorar o efeito POV, sigla em inglês para Persistência da
Visão. Esse efeito se resume a uma ilusão de óptica, na qual nosso olho continua a ver
uma imagem mesmo após a fonte de luz cessar.
Lista de materiais:
Diagrama de circuito
[Link] 51
Carregue o código abaixo em seu Arduino:
void setup() {
pinMode(ledPin, OUTPUT); // Configura o pino do LED como saída
}
void loop() {
int leituraPotenciometro = analogRead(A0); // Lê o valor do potenciômetro
Repare que, conforme você gira o potenciômetro, a frequência em que o LED pisca
aumenta ou diminui. Configuramos para que consiga variar de 1Hz (1x por segundo)
até 100Hz (100x por segundo), de modo que, quanto mais próximo de 100Hz menos
percepção do LED piscando você irá ter, graças ao efeito de persistência da visão.
Legal, né?
Para isso, utilizaremos a função millis(), que atua como um contador interno do
Arduino e começa a ser incrementado a partir do momento em que o
[Link] 52
microcontrolador é energizado ou resetado, funcionando independentemente do
código em execução.
Essa função nos permite medir o tempo decorrido e gerenciar essas ações de forma
eficiente, sem interromper o fluxo do programa.
Lista de materiais:
• Arduino Uno;
• Protoboard;
• Potenciômetro 10KΩ;
• 2 LEDs;
• 2 Resistores de 330Ω;
• Jumpers.
Diagrama de circuito
[Link] 53
No loop, fazemos duas verificações para saber quanto tempo passou. Primeiro,
verificamos se a diferença entre o valor atual de millis() e o valor armazenado em
millisPisca é menor que o intervalo definido para o LED piscar. Se essa condição for
verdadeira, o LED é ligado. Se for falsa, o LED será desligado e o valor de millisPisca é
atualizado, recebendo a contagem atual de millis(), reiniciando o ciclo.
void setup(){
//Definindo ambos os pinos dos LEDs como saída
pinMode(LED_BRILHO, OUTPUT);
pinMode(LED_PISCA, OUTPUT);
[Link] 54
Exemplo 13 – Diferença entre transistores NPN e PNP na prática
Como vimos anteriormente, existem dois tipos de transistores, os NPN e os PNP. Nesse
exemplo, vamos mostrar na prática as diferenças na conexão com a carga (em nosso
caso, um LED) e as mudanças no código para o acionamento de cada um.
Lista de materiais:
• Arduino Uno;
• Protoboard;
• 2 LEDs;
• 2 Resistores de 330Ω;
• 2 resistores de 10KΩ;
• Transistor BC548;
• Transistor BC558;
• Jumpers.
Diagrama de circuito
[Link] 55
tenham a mesma disposição de terminais (Coletor – Base – Emissor), a forma como a
corrente flui através deles é diferente - reveja o esquemático dos transistores.
Uma forma bem simples de entender como a corrente flui pelo transistor é observar a
setinha presente no emissor, na simbologia do componente. Note que, no transistor
NPN, essa seta está saindo do transistor, indicando que a corrente entra no transistor
pelo coletor e sai pelo emissor.
[Link] 56
Com esses conceitos em mente, carregue o código no Arduino e veja o funcionamento
do circuito:
void setup() {
//Configura os pinos como saída
pinMode(NPN, OUTPUT);
pinMode(PNP, OUTPUT);
}
void loop() {
//Envia um sinal de nível lógico alto aos transistores
digitalWrite(NPN, HIGH);
digitalWrite(PNP, HIGH);
Lista de materiais:
• Arduino Uno;
• Protoboard;
• 10 LEDs;
• 10 Resistores de 330Ω;
• 1 Resistor de 10KΩ;
• Transistor BC548;
• Jumpers.
[Link] 57
Diagrama de circuito:
void setup() {
//Configura os pinos como saída
pinMode(NPN, OUTPUT);
}
void loop() {
//Envia um sinal de nível lógico alto aos transistores
digitalWrite(NPN, HIGH);
delay(1000); // Aguarda 1 segundo
// Envia um sinal de nível lógico baixo aos transistores
digitalWrite(NPN, LOW);
delay(1000); //Aguarda 1 segundo
}
Por ser uma pessoa interessada em aprender, você pode estar se perguntando:
“Mas como chegaram a esses valores para o resistor de base nos exemplos 11 e 12?”
[Link] 58
Ao final da apostila, deixamos uma explicação completa de como calcular esse resistor,
juntamente com exemplos de cálculo para que você aprenda a dimensioná-lo
corretamente.
Exemplo 15 – Semáforo com Arduino
Nesse projeto, vamos definir as regras que queremos que nosso código siga. Dessa
forma, você pode associar o que a descrição da regra pede que seja feito com os
comandos, ajudando na compreensão do funcionamento do código. Acompanhe:
Lista de materiais:
• Arduino Uno;
• Protoboard;
• 2 LEDs vermelhos;
• 2 LEDs verdes;
• 1 LED amarelo;
• 5 Resistores de 330Ω;
• Jumpers.
Diagrama de circuito
[Link] 59
1- O semáforo de veículos deve permanecer verde por 8s, desligando em seguida;
2- O LED amarelo acende por 3s, apaga e depois o LED vermelho dos veículos e o
LED verde dos pedestres acendem;
3- O semáforo de pedestres fica aberto por 7s;
4- Após 4s, o LED vermelho pisca e permanece aceso enquanto o semáforo de
veículos está verde.
void setup() {
pinMode(VERDE_PED, OUTPUT);
pinMode(VERMELHO_PED, OUTPUT);
pinMode(VERDE_VEI, OUTPUT);
pinMode(AMARELO_VEI, OUTPUT);
pinMode(VERMELHO_VEI, OUTPUT);
}
void loop() {
digitalWrite(VERMELHO_VEI, LOW); //Desliga o LED vermelho dos veículos
digitalWrite(VERDE_VEI, HIGH); //Liga o LED verde dos veículos
digitalWrite(VERMELHO_PED, HIGH); //Liga o LED vermelho dos pedestres
delay(8000);
digitalWrite(VERDE_VEI, LOW); //Desliga o LED verde dos veículos
digitalWrite(AMARELO_VEI, HIGH); //Liga o LED amarelo do veículos
delay(3000);
digitalWrite(AMARELO_VEI, LOW); //Desliga o LED amarelo dos veículos
digitalWrite(VERMELHO_PED, LOW); //Desliga o LED vermelho dos pedestres
digitalWrite(VERMELHO_VEI, HIGH); //Liga o LED vermelho dos veículos
digitalWrite(VERDE_PED, HIGH); //Liga o LED verde dos pedestres
delay(5000);
digitalWrite(VERDE_PED, LOW); //Desliga o LED verde dos pedestres
[Link] 60
Exemplo 16 - Acionando displays de 7 segmentos
Os displays de 7 segmentos surgiram a partir da evolução dos LEDs. Um LED é um diodo
semicondutor que emite luz quando uma corrente elétrica o atravessa. Para evitar que
ele queime, é essencial limitar a corrente, por isso um resistor em série deve ser utilizado
ao energizá-lo.
Cada segmento do display é, na verdade, um LED individual. Ao acionar os segmentos,
podemos formar números e letras (com algumas limitações). Os segmentos são
identificados por letras de A a G, além do ponto decimal, rotulado como DP.
Existem dois tipos de displays: catodo comum e anodo comum. No display de catodo
comum, os negativos de todos os segmentos estão conectados a um único pino. No
display de anodo comum, os positivos são os pinos interligados entre si, resultando em
um acionamento invertido em relação ao catodo comum.
Neste projeto, utilizamos um display de 7 segmentos de catodo comum. Os pinos
marcados com bolinhas pretas representam os pinos comuns dos catodos. Utilize
apenas um desses pinos, pois ambos estão interligados internamente. Os demais devem
ser conectados ao Arduino através de um resistor para limitar a corrente.
Lista de componentes
• Arduino;
• Protoboard;
• 8 resistores de 330Ω;
• Display de 7 segmentos;
• Jumpers.
[Link] 61
Diagrama de montagem
Quanto às funções, elas nos permitem nomear um conjunto de instruções que podem
ser reutilizadas em outras partes do código. Por exemplo, ao fazer um LED piscar com
o Arduino, em vez de repetir os comandos de ligar, aguardar e desligar, você pode criar
uma função chamada piscaLED(). Dentro dessa função, reunimos todos os comandos
necessários para realizar a tarefa de piscar o LED. Assim, sempre que precisar que o
LED pisque, em vez de repetir os quatro comandos, você simplesmente chama
piscaLED(), trazendo organização, praticidade e legibilidade ao seu código, facilitando
seu entendimento e manutenção.
[Link] 62
Tendo isso em mente, carregue o código abaixo em seu Arduino:
//Exemplo 16 - Acionando displays de 7 segmentos
//Apostila Eletrogate - KIT ROBÓTICA
void reset7Seg() {
for (int i = 0; i < 8; i++) {
digitalWrite(pinos[i], HIGH);
}
}
void setup() {
for (int i = 0; i < 8; i++) {
pinMode(pinos[i], OUTPUT);
}
}
void loop() {
for (int i = 0; i < 3; i++) { // Mude o limite para o número total de caracteres
configurados no switch + 1
exibir(i);
delay(1000); // Esperar 1 segundo entre os caracteres
}
}
[Link] 63
Seu funcionamento é bem simples: criamos um array com 8 posições para armazenar
os pinos do Arduino onde os LEDs do display estão conectados. Também criamos
arrays de mesmo tamanho contendo os pinos que devem estar ligados ou desligados
para formar cada caractere. No setup, configuramos os pinos utilizando um laço for e o
comando pinMode(i, OUTPUT), que interpreta o valor em cada índice do array como
sendo o número do pino e o configura como saída.
Fazendo isso, você colocará à prova todo o seu aprendizado até aqui ao mesmo tempo
que o coloca em prática, desenvolvendo habilidades essenciais para a programação do
Arduino.
“Sinais Ultrassônicos são ondas mecânicas (ondas de som) com frequência acima de
40 KHz, imperceptíveis ao ouvido humano.“
[Link] 64
Como ouvido humano só consegue identificar ondas mecânicas até a frequência de
20KHz, os sinais emitidos pelo sensor Ultrassônico não podem ser escutados por nós.
Por meio desse pulso de saída cujo tempo é igual a duração entre emissão e recepção,
nós calculamos a distância entre o sensor e o objeto/obstáculo, por meio da seguinte
equação:
(𝑇𝑒𝑚𝑝𝑜_𝑑𝑒_𝑑𝑢𝑟𝑎çã𝑜_𝑑𝑜_𝑠𝑖𝑛𝑎𝑙_𝑑𝑒_𝑠𝑎í𝑑𝑎 ∗ 𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒_𝑑𝑜_𝑠𝑜𝑚)
𝐷𝑖𝑠𝑡𝑎𝑛𝑐𝑖𝑎 =
2
Nela, o tempo de duração do sinal de saída é o tempo no qual o sinal de output
permanece em nível alto e a velocidade do som = 340 m/s;
Repare que as unidades devem estar coerentes para o resultado da conta ser correto.
Assim, se a velocidade do som é dada em metros/segundo, o tempo de duração do sinal
de saída deve estar em segundos para que possamos encontrar a distância em metros.
[Link] 65
Lista de Materiais:
Para este exemplo você vai usar os seguintes componentes:
⚫ Protoboard;
⚫ Jumpers de ligação;
⚫ Sensor ultrassônico HCSR-04.
Diagrama de circuito:
[Link] 66
Copie e cole o código a seguir em sua IDE:
void setup(){
void loop(){
void DisparaPulsoUltrassonico(){
[Link] 67
Na função void loop(), onde o programa será executado continuamente, executa-se três
passos básicos:
1. Enviar pulso de 10us (microssegundos) para o pino de trigger do sensor. Isto é
feito com a função DisparaPulsoUltrassonico();
O chassi presente neste kit tem uma série de furos onde pode ser encaixado sensores,
atuadores, e que te permite incluir diversos sensores presente no kit Arduino Robótica
para realizar as mais variadas tarefas.
Lista de Materiais
• Módulo Ponte H Dupla L298N
• Chassi 2WD em acrílico
• 2 Motores DC 3V – 6V com caixa de redução
• 2 rodas 68mm de borracha
• Roda boba (universal)
• Suporte para 4 pilhas AA
[Link] 68
• Jogo de parafusos e acessórios
• Jumpers macho-fêmea
• Jumpers macho-macho
• Adaptador de bateria 9V
• Chave Gangorra On/Off
• 4 Pilhas Alcalinas AA
• Bateria Alcalina 9V
• Protoboard
• Arduino e cabo de conectar no computador
Montagem do Robô
Passo 1: posicione os 4 pilares de suporte para a roda boba conforme a imagem
abaixo:
[Link] 69
Passo 3: Solde ou amarre os fios nos motores, conforme a imagem abaixo:
[Link] 70
Passo 5: O próximo passo é fixar o suporte de pilhas e o interruptor no chassi. Veja a
disposição dos mesmos a seguir:
[Link] 71
Passo 7: Terminado isso, a parte física do seu chassi estará montada, restando agora
posicionar os demais componentes eletrônicos ao longo do chassi. Nossa disposição
ficou da seguinte forma:
[Link] 72
E assim, está concluído a montagem do esqueleto básico do carrinho. Vamos agora
montar a parte para controlar ele.
Para fazer o acionamento dos motores, precisaremos de algo que consiga fornecer
energia o suficiente para isso, e que possa ser controlado. Para isso iremos usar um
driver ponte H L298N. A vantagem de usar este driver é permitir a rotação nos dois
sentidos, e também permitir que uma corrente bem maior que a do que o Arduino
suporta passe pelo motor.
Então, por meio de comutação de chaves, a ponte H consegue fazer com que um motor
gire nos dois sentidos. Como no módulo Ponte H L298N essa comutação não é feita de
forma física, existe um chip (L298N) embarcado na placa que faz essa comutação de
chaves de forma eletrônica, que é mais eficiente do que uma comutação mecânica.
[Link] 73
Como funciona a Ponte H L298N :
Abaixo será explicado com maiores detalhes como funciona a placa e como usar:
Vcc:
Este borne é responsável pela alimentação dos motores, com isso a tensão colocada
neste borne de Vcc será copiada para os motores. Por isso, muita atenção: Se você
possui um motor que opera somente até 12V, por exemplo, não alimente Vcc com mais
de 12V, pois danificará o motor.
• Observação: Esta placa possui um regulador de tensão do modelo 7805, e a
tensão máxima dele é 35V, mas a margem segura para uso é abaixo de 20V,
sendo o recomendado 12V. Por isso, se for usar tensão de alimentação Vcc
acima de 12V, não use a porta VLogic para alimentar outros circuitos, e para
tensões acima de 20V, desative o regulador de tensão (como será demonstrado
mais abaixo) e faça a alimentação Vlogic através do borne, observando sua
limitação de tensão.
GND:
É o GND da placa, que deverá ser o mesmo GND do Arduino ou de outro
microcontrolador. Por isso, é importante interligar os GNDs sempre com fios. Serão
demonstrados na seção de exemplos.
Vlogic:
Este borne é responsável pela alimentação lógica da ponte H. O chip L298N presente na
placa recebe comandos do Arduino, e para ele conseguir operar os comandos e atuar na
saída ele precisa de operar como um componente lógico (como o Arduino), e para isso
precisa atuar em uma faixa bem restrita de tensão, que no caso é 4.5V a 7V. Como foi
[Link] 74
dito a placa possui um regulador de tensão de 5V, que a função dele é justamente fazer
a regulação de Vcc para a alimentação lógica do chip em 5V. Por isso, se o regulador
estiver ativo, este pino Vlogic terá a tensão de 5V, pois, é a tensão presente na saída do
regulador.
É possível desativar o regulador de tensão e fazer a alimentação lógica do chip por conta
própria, através do borne Vlogic. Em algumas situações é necessário desativar o
regulador de tensão e fazer a alimentação lógica através de Vlogic, essas situações serão
abordadas e explicadas na seção de exemplos de uso da placa.
• Importante: Como dito, quando o regulador de tensão está ativo, a tensão
VLogic está sendo regulada em 5V automaticamente, logo, este borne terá 5V.
Essa tensão é para uso interno do chip e pode ser aproveitada para alimentar
algum circuito ou microcontrolador que use até 5V, com a limitação de corrente
de aproximadamente 200mA. Porém, se o regulador de tensão estiver
acionado, JAMAIS alimente este pino, pois causará danos a placa.
Regulador Vlogic:
Este jumper é responsável por ativar ou desativar o regulador de tensão da alimentação
de Vlogic. Quando o jumper está encaixado entre os terminais, o regulador de tensão
está ativado e a Vlogic como a ser regulado em 5V a partir da tensão de Vcc. Por isso, é
muito importante saber manusear esse jumper do regulador. Caso ficou dúvidas sobre
o funcionamento do regulador, releia a parte Vlogic.
Atv_A:
Este jumper é responsável por desativar ou ativar o motor A para ser controlado pelo
Arduino ou outra placa.
Este jumper funciona da seguinte forma: um dos terminais possui 5V (ou a tensão de
alimentação VLogic), e o outro terminal é o que vai para o chip L298N. A placa possui
um resistor de pull-down no outro resistor, o que significa que quando o jumper é solto,
o terminal ficará com nível lógico baixo, e o chip entenderá que é necessário desabilitar
o motor A. Mas quando o jumper é colocado entre os terminais, o 5V é ligado ao
terminal de sinal pelo jumper. Com isso, o sinal de nível alto é enviado ao chip L298n e
ele entende que os motores devem estar habilitados para os acionamentos.
Atv_B:
Este jumper é responsável por desativar ou ativar o motor B para ser controlado.
O funcionamento é exatamente idêntico ao jumper Atv_A.
Entradas:
As entradas de controle da placa possuem os pinos IN1, IN2, IN3 e IN4, sendo que a
entrada IN1 e IN2 são as entradas que controlam os bornes do motor A, e as entradas
[Link] 75
IN3 e IN4 controlam os bornes do Motor B. Para controlar os motores com o Arduino,
siga essa descrição:
IN1 – Pino de direção do motor A. Se receber HIGH, o motor irá girar em um sentido,
caso receba LOW, girará no sentido inverso.
IN2 – Pino de velocidade do motor A. Aqui, se você enviar os comando HIGH ou LOW,
irá acionar o motor em sua velocidade máxima ou desligá-lo, mas você consegue
também controlar a velocidade, utilizando o comando analogWrite() do Arduino. Nele
você pode informar um valor que vai de 0 a 255, sendo 0 para desligar, 255 para ligar
na velocidade máxima e os valores intermediários para trabalhar com velocidades
intermediárias. Por exemplo, se fornecermos o valor 128, o motor irá girar em 50% da
velocidade. 192 será equivalente a 75% da velocidade e assim por diante.
IN3 – Pino de direção do motor B. Se receber HIGH, o motor irá girar em um sentido,
caso receba LOW, girará no sentido inverso.
Motor A e Motor B:
Estes bornes são de fato onde os motores DC são conectados. A posição dos fios do
motor na conexão com o borne altera o sentido de rotação do motor. Se for invertido
os fios no borne, o sentido de rotação também é invertido no acionamento. Essa é uma
boa dica para alterar a rotação dos motores sem mexer no código, caso estejam girando
em um sentido não desejado.
Para esse exemplo, as conexões da ponte H com o Arduino deverão ser feitas da
seguinte forma:
[Link] 76
Observações:
- É extremamente importante que o negativo da bateria esteja ligado ao GND do
Arduino. Faremos isso colocando um jumper no borne de GND da ponte H (que
está recebendo o negativo da bateria e conectando a outra ponta do jumper em
um dos pinos de GND do Arduino.
- Remova a alimentação da bateria de 9V ao colocar o cabo USB.
- É indispensável o uso de solda na conexão dos motores e no interruptor.
[Link] 77
Código para teste do robô:
// Exemplo 18 – Chassi 2 rodas
// Apostila Eletrogate - KIT Robotica
// Classe para facilitar o uso da ponte H L298N na manipulação dos motores na função Setup e Loop.
class DCMotor {
int spd = 255, pin1, pin2;
public:
void Pinout(int in1, int in2){ // Pinout é o método para a declaração dos pinos que vão controlar
// o objeto motor
pin1 = in1;
pin2 = in2;
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
}
void Speed(int in1){ // Speed é o método que irá ser responsável por regular a velocidade
spd = in1;
}
void Forward(){ // Forward é o método para fazer o motor girar para frente
analogWrite(pin1, spd);
digitalWrite(pin2, LOW);
}
void Backward(){ // Backward é o método para fazer o motor girar para trás
digitalWrite(pin1, LOW);
analogWrite(pin2, spd);
}
void Stop(){ // Stop é o metodo para fazer o motor ficar parado.
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
}
};
DCMotor Motor1, Motor2; // Criação de dois objetos motores, já que usaremos dois motores, e eles já
// estão prontos para receber os comandos já configurados acima.
void setup() {
[Link](5,6); // Seleção dos pinos que cada motor usará, como descrito na classe.
[Link](10,11);
}
void loop() {
[Link](200); // A velocidade do motor pode variar de 0 a 255, onde 255 é a velocidade máxima.
[Link](200);
E com isso o robô deve ir para frente, para trás girar e parar, e repetir este ciclo. Altere
o código para gerar mais funções.
[Link] 78
Exemplo 19 – Robô Seguidor de Linha
Robôs seguidores de linha são máquinas capazes de percorrer um determinado trajeto
através de marcações no chão. Isso é possível graças à presença de sensores que
identificam as diferenças de cor ao longo do percurso e informam ao microcontrolador
esses dados recolhidos, permitindo que, em conjunto com a lógica de programação ali
presente, o robô tome decisões e tenha “conhecimento” do caminho que deve seguir.
Aqui, vamos aproveitar a montagem feita no exemplo anterior e adicionar os sensores
reflexivos, fixando-os na parte frontal do chassi, como nas imagens que seguem.
[Link] 79
Passo 9: Por fim, conecte os componentes como no diagrama abaixo.
[Link] 80
Código: LINHA_BRANCA // Descomente esta linha para seguir linhas brancas ou deixe comentado
//#define
para seguir linhas pretas
int velocidade = 150; // O valor pode ir de 0 até 255, ajuste conforme a pista (pistas menores ou
curvas mais fechadas requerem velocidades menores).
void setup() {
// Configuração dos pinos
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(dir1, OUTPUT);
pinMode(dir2, OUTPUT);
pinMode(pin_S1, INPUT);
pinMode(pin_S2, INPUT);
digitalWrite(dir1, LOW);
digitalWrite(dir2, LOW);
}
void loop() {
// Leitura dos sensores
Sensor1 = digitalRead(pin_S1);
Sensor2 = digitalRead(pin_S2);
#ifdef LINHA_BRANCA
// Lógica para seguir linha branca
if (Sensor1 == 1 && Sensor2 == 1) { // Ambos sensores na linha (seguir em frente)
analogWrite(M1, velocidade);
analogWrite(M2, velocidade);
} else if (Sensor1 == 0 && Sensor2 == 1) { // Sensor1 na linha, Sensor2 fora (virar para um
lado)
analogWrite(M1, 0);
analogWrite(M2, velocidade);
} else if (Sensor1 == 1 && Sensor2 == 0) { // Sensor2 na linha, Sensor1 fora (virar para o
outro lado)
analogWrite(M1, velocidade);
analogWrite(M2, 0);
} else {
analogWrite(M1, 0);
analogWrite(M2, 0);
}
#else
// Lógica para seguir linha preta
if (Sensor1 == 0 && Sensor2 == 0) { // Ambos sensores na linha (seguir em frente)
analogWrite(M1, velocidade);
analogWrite(M2, velocidade);
} else if (Sensor1 == 1 && Sensor2 == 0) { // Sensor1 na linha, Sensor2 fora (virar para um
lado)
analogWrite(M1, velocidade);
analogWrite(M2, 0);
} else if (Sensor1 == 0 && Sensor2 == 1) { // Sensor2 na linha, Sensor1 fora (virar para o
outro lado)
analogWrite(M1, 0);
analogWrite(M2, velocidade);
} else {
analogWrite(M1, 0);
analogWrite(M2, 0);
}
#endif
}
[Link] 81
Basta carregar o programa na Uno, posicionar seu carrinho no início da pista, conectar
a bateria e fechar a chave das pilhas.
IMPORTANTE: Esse robô pode seguir linhas brancas ou pretas, conforme a pista que
você montar. Pensando nisso, desenvolvemos o código para atender às duas
possibilidades: Caso monte a pista com a linha preta e o fundo branco, basta apenas
carregar o código no Arduino, sem alterar nada. Caso monte a pista com a linha branca
e o fundo preto, você precisa apenas descomentar (remover as duas barras) na frente
da primeira linha (#define LINHA_BRANCA), habilitando-a.
[Link] 82
Tome bastante cuidado ao montar e sempre deixe as articulações não muito apertadas
e nem muito frouxas, sempre com uma folga o suficiente para o braço deslizar da forma
correta.
Lista de Materiais:
Para este exemplo você vai usar os seguintes componentes:
⚫ Protoboard;
⚫ Jumpers de ligação;
⚫ 4 micro servos 9G
⚫ 4 potenciômetros
⚫ 1 Arduino Uno
Recomendamos, para este projeto, que os servos sejam alimentados com uma fonte de
5 V capaz de fornecer, no mínimo, 1 A.
Diagrama de circuito:
Depois que o braço robótico estiver montado, faça essa montagem com os servos e os
potenciômetros.
Importante: Como dito acima, é necessária uma fonte externa de 5V para energizar o
circuito. Sendo assim, o kit acompanha um adaptador micro USB para DIP, na qual
[Link] 83
você pode utilizar um cabo micro USB e um carregador de celular para essa finalidade.
Você só precisa soldar a barra de pinos no módulo como mostrado abaixo:
Com a barra de pinos soldada, faça as conexões com a protoboard. Serão utilizados
somente dois pinos do adaptador, sendo eles o GND, que vai conectado ao GND da
protoboard e o VBUS, que vai conectado ao positivo da protoboard, conforme a
imagem abaixo:
[Link] 84
Código:
Para entender o código, basta notar que primeiro definimos as portas analógicas em
que são ligados os potenciômetros, que nesse exemplo é A0, A1, A2 e A3.
Após isso são criados os objetos servos, para controlar cada parte do braço robótico, e
uma variável auxiliar para receber o valor dos pinos analógicos.
No loop, a gente lê o valor dos pinos analógicos e já converte esse valor para um ângulo
de 0 até 179°, e escreve esse valor no objeto servo, que irá mover o servo. E faz isso para
cada servo motor. Assim quando cada potenciômetro for girado, as articulações do
braço robótico irão mexer.
#define potpin1 0
#define potpin2 1
#define potpin3 2
#define potpin4 3
#include <Servo.h>
void setup() {
[Link](5); //Associa cada objeto a um pino pwm
[Link](6);
[Link](9);
[Link](10);
}
void loop() {
val = map(analogRead(potpin1), 0, 1023, 0, 179);
[Link](val);
val = map(analogRead(potpin2), 0, 1023, 0, 179);
[Link](val);
val = map(analogRead(potpin3), 0, 1023, 0, 179);
[Link](val);
val = map(analogRead(potpin4), 0, 1023, 0, 179);
[Link](val);
}
[Link] 85
Parte IV - Cálculo do resistor de base dos
transistores
Vamos abordar aqui como o cálculo do resistor de base deve ser feito. É de suma
importância dimensioná-lo corretamente pois, como visto anteriormente, esse resistor
é o responsável por controlar a corrente que fluirá pelo transistor.
O primeiro passo é calcular a corrente de base usando a fórmula
𝐼𝑐
𝐼𝑏 = , onde:
𝛽
[Link] 86
Dito isso, vamos considerar o exemplo 12 da apostila como modelo de cálculo. Nele,
nós temos que:
• O transistor opera como chave (em modo saturação - lembre-se, utilize 10% do
ganho mínimo especificado nessa situação);
• A corrente de coletor é 75mA (equivalente a 0,075A - para converter mA em A,
basta dividir por 1000);
• A tensão de base é 5V;
• O modelo do transistor é o BC548B.
Com esses dados em mãos, vamos aos cálculos. Primeiramente, encontramos o valor
da corrente de base:
𝐼𝑐 0,075
𝐼𝑏 = → 𝐼𝑏 = → 𝐼𝑏 = 0,00375
𝛽 20
Com o valor de Ib encontrado, vamos para a segunda fórmula. Nela, temos que:
• Vb equivale a 5V;
• Vbe equivale a 0,7V;
• Ib equivale a 0,00375A
Substituindo:
𝑉𝑏−𝑉𝑏𝑒 5−0,7 4,3
𝑅𝑏 = → 𝑅𝑏 = → 𝑅𝑏 = → 𝑅𝑏 = 1.146,66
𝐼𝑏 0,00375 0,00375
Veja que o valor encontrado para Rb é de 1.146Ω, porém não encontramos esse
resistor comercialmente. O valor mais próximo disponível no Kit Robótica é de 1KΩ
(1000Ω), portanto esse deve ser o resistor utilizado na base do transistor no exemplo
12.
E aí, já consegue confirmar o valor dos resistores de base para o exemplo 11?
Deixaremos essa tarefa como exercício para você!
[Link] 87
Parte V – Principais comandos do Arduino
Nesta seção, trazemos um resumo de alguns dos principais comandos da Arduino IDE
utilizados ao longo dos exemplos. Essas referências são ferramentas valiosas para
esclarecer suas dúvidas sobre a sintaxe (a estrutura dos comandos) e, mais importante,
para desvendar o funcionamento de cada um deles. Aproveite esta oportunidade para
aprofundar seu conhecimento e dominar a programação no Arduino!
[Link] 88
• int: Usado para iniciar uma variável ou array do tipo inteiro, que trabalha
somente com números inteiros (sem casas decimais).
• float: Usada para criar variáveis e arrays que precisam receber números com
ponto flutuante (números com casas decimais).
• unsigned long: Usado para criar variáveis que precisam armazenar grandes
números positivos, como os fornecidos pela função millis().
• void: Usado para criar funções que não retornam nenhum tipo de valor.
• Servo / attach / write: comandos dedicados da biblioteca Servo.h, usados para
criar o objeto que receberá as funções da biblioteca, configurar o pino em que
o servo está conectado e enviar os pulsos de forma correta.
• [Link]
[Link] 89
Considerações finais
Essa apostila tem por objetivo apresentar alguns exemplos básicos sobre como utilizar
os componentes do Kit Robótica para Arduino, a partir dos quais você pode combinar e
fazer projetos mais elaborados por sua própria conta.
Nas referências finais, também tentamos indicar boas fontes de conteúdo objetivo e
com projetos interessantes. Sobre esse ponto, que consideramos fundamental,
gostaríamos de destacar algumas fontes de conhecimento que se destacam por sua
qualidade.
O fórum oficial Arduino possui muitas discussões e exemplos muito bons. A comunidade
de desenvolvedores é bastante ativa e certamente pode te ajudar em seus projetos. No
Project Hub poderá encontrar milhares de projetos com Arduino.
⚫ Instructables: [Link]
O Maker Pro é outro site referência no mundo em relação aos projetos com Arduino. Há
uma infinidade de projetos, todos bem explicados e com bom conteúdo.
No mais, esperamos que essa apostila seja apenas o início de vários outros projetos e,
quem sabe, a adoção de Kits mais avançados, como os de Robótica e Arduino Advanced.
Qualquer dúvida, sugestão, correção ou crítica a esse material, fique à vontade para
relatar em nosso blog oficial: [Link]
[Link] 90
Referências gerais
[Link] 91
[Link] 92