09 - Arduino Big Jack
09 - Arduino Big Jack
COM 1
V1.6 – Abril/2025
Olá, Maker!
Esta apostila foi desenvolvida especialmente para você, servindo como um guia teórico
e prático para o Kit Arduino Big Jack . O kit possui todos os componentes necessários
para os projetos propostos e, assim, permitirá que você tenha uma experiência
completa.
Se você ainda é novo no universo Arduino, não se preocupe! Vamos te guiar desde o
começo, com uma introdução à 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!
Mas as oportunidades não param por aí! Com o Kit Arduino Big Jack, as possibilidades
são infinitas. Você poderá criar inúmeros projetos utilizando sensores, motores, shields
e muito mais. Tudo o que você precisa para soltar sua criatividade e inovar está no
nosso Kit.
Então, se você ainda não garantiu o seu, não perca mais tempo! Acesse agora o nosso
site e garanta já o seu Kit Arduino Big Jack para desbloquear todo o seu potencial
criativo!
Prepare-se para uma aventura de aprendizado e criação. Estamos ansiosos para ver
tudo o que você vai criar.
WWW.ELETROGATE.COM 2
Sumário
WWW.ELETROGATE.COM 3
Exemplo 15 – Acionamento de cargas usando transistores .......................... 65
Exemplo 16 – Semáforo com Arduino .............................................................. 67
Exemplo 17- Acionando displays de 7 segmentos.......................................... 69
Exemplo 18 - Cronômetro Digital com Display LCD........................................ 73
Exemplo 19 - Trena Eletrônica com Sensor Ultrassônico .............................. 77
Exemplo 20 – Controlando um Motor de Passo com Potenciômetro ............ 80
Exemplo 21 – Comunicação sem Fio com Transmissor e Receptor RF ........ 87
Exemplo 22 – Alarme com Buzzer e Sensor de Presença .............................. 93
Exemplo 23 – Ponte H com Módulo Relé de 2 Canais..................................... 98
Exemplo 24 – Acendendo LED's com Controle Remoto Infravermelho....... 102
Exemplo 25 – Relógio Digital de Alta Precisão com Módulo RTC................ 108
Exemplo 26 – Utilizando o Teclado Matricial de 16 Teclas ........................... 112
Exemplo 27 - Medidor de Temperatura e Umidade com DHT11 ................... 116
Exemplo 28 – Utilizando o Módulo MPU-6050 - Acelerômetro e Giroscópio122
Exemplo 29 - Comunicação Bluetooth entre Arduino Mega e Smartphone 128
Parte V - Cálculo do resistor de base dos transistores........................................ 132
Parte VI – Principais comandos do Arduino ......................................................... 134
Considerações finais .......................................................................................... 136
WWW.ELETROGATE.COM 4
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
Big Jack para Arduino.
Todos os conteúdos da Parte I são focados na apostila Arduino Big Jack, 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.
WWW.ELETROGATE.COM 5
Revisão de circuitos elétricos
A apostila Big Jack, 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.
WWW.ELETROGATE.COM 6
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:
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
WWW.ELETROGATE.COM 7
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.
WWW.ELETROGATE.COM 8
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 Big Jack 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 Mega 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
não é necessário pois o Arduino entende 3.3V como nível lógico alto, isto é, equivalente
a 5V.
WWW.ELETROGATE.COM 9
Para fazer a conversão de níveis lógicos você tem duas opções:
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 Big Jack 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.
WWW.ELETROGATE.COM 10
Revisão de componentes eletrônicos
O Kit Big Jack 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
WWW.ELETROGATE.COM 11
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 Big Jack 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.
WWW.ELETROGATE.COM 12
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:
WWW.ELETROGATE.COM 13
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:
WWW.ELETROGATE.COM 14
Figura 4: Capacitores cerâmicos
Por fim, há também os capacitores de poliéster e de tântalo. No Kit Big Jack para
Arduino, você receberá apenas exemplares de capacitores eletrolíticos e 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.
WWW.ELETROGATE.COM 15
Na figura 4, você pode ver que o componente possui uma faixa indicadora no terminal
catodo, este é o polo negativo. O diodo do Kit Big Jack 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 Big Jack 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:
WWW.ELETROGATE.COM 16
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.
WWW.ELETROGATE.COM 17
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
WWW.ELETROGATE.COM 18
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.
WWW.ELETROGATE.COM 19
Protoboard
Note que, nessa orientação, temos colunas numeradas de 1 a 63, 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).
WWW.ELETROGATE.COM 20
Parte II – ARDUINO MEGA 2560 CH340
Após o Arduino ter sido lançado em 2005 e ter um grande sucesso no mundo inteiro, a equipe
do Arduino percebeu a necessidade de lançamento de outros modelos. O Arduino Mega foi
lançado em 2010. E em relação à todos os modelos de Arduino, o Mega é o segundo
mais famoso, após o Arduino Mega.
WWW.ELETROGATE.COM 21
• Regulador de 3,3V (LP2985 com apenas 150 mA),
• 4 portas seriais de hardware :
Serial 0 = TX0 (D1) e RX0 (D0)
Serial 1 = TX1 (D18) e RX1 (D19)
Serial 2 = TX2 (D16) e RX2 (D17)
Serial 3 = TX3 (D14) e RX3 (D15)
WWW.ELETROGATE.COM 22
WWW.ELETROGATE.COM 23
Instalando o driver da placa
O Arduino Mega R3, em seu projeto oficial, usa o Atmega16U2, que tem seus drivers
(driver é um pequeno programa instalado no seu sistema operacional para que ele saiba
como operar o dispositivo) instalados automaticamente quando você instala a sua
Arduino IDE. Logo, você não necessita instalar driver nenhum para fazer sua placa se
comunicar com o computador.
Já na versão CH340, por utilizar o chip de mesmo nome, é necessário instalar o driver
CH340G. Por sorte, é um processo bem simples, bastando baixar o driver e instalar no
seu computador como se faz com um programa comum.
Para instalá-lo, acesse o site oficial – clicando aqui e faça o download conforme seu
sistema operacional.
Em nosso caso, vamos fazer a instalação da versão para Windows, mas também é
possível instalá-lo no MacOS e no Linux. Clique no link referente ao seu sistema
operacional e aguarde o download ser concluído.
O arquivo baixado será em formato compactado (.zip). Abra-o e dê um duplo clique no
arquivo CH34x_Install_Windows_v3_4.EXE, para executar o instalador. Após, a janela
abaixo será exibida e você só precisa clicar em Install, para iniciar a instalação.
WWW.ELETROGATE.COM 24
Quando o processo de instalação terminar, a mensagem abaixo será exibida:
WWW.ELETROGATE.COM 25
Com o driver instalado, vamos apenas confirmar se a placa está sendo reconhecida
corretamente pelo computador. Para isso, abra o Gerenciador de Dispositivos do
Windows (basta abrir o menu iniciar e pesquisar por “gerenciador de dispositivos”).
Nele, procure o item “Portas COM e LPT” e veja se a placa está sendo exibida como na
imagem abaixo:
WWW.ELETROGATE.COM 26
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.
WWW.ELETROGATE.COM 27
Após esses passos, o download irá iniciar automaticamente. Quando terminar, execute
o arquivo baixado e clique em “Eu concordo” na janela exibida.
WWW.ELETROGATE.COM 28
Nas telas seguintes, basta clicar em “Próximo” e “Instalar”. Ao término, clique em
concluir para abrir a IDE.
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:
WWW.ELETROGATE.COM 29
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.
Abaixo, você encontra as principais funções da IDE que serão usados ao longo dessa
apostila:
WWW.ELETROGATE.COM 30
Se tudo foi instalado corretamente, você está pronto para iniciar a montagem e
programação dos exemplos!
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.
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:
WWW.ELETROGATE.COM 31
Nesse exemplo, vamos conectar a saída de um potenciômetro a uma entrada
analógica da Arduino Mega. Dessa forma, vamos ler o valor de tensão na saída do
potenciômetro e vê-la variando de 0 a 1023. Mas, como assim, 0 a 1023?
Tensão = Valor*(5/1024)
WWW.ELETROGATE.COM 32
Lista de materiais:
Arduino Mega;
Protoboard;
Potenciômetro 10K;
Jumpers.
Diagrama de circuito
WWW.ELETROGATE.COM 33
Carregue o código abaixo no Arduino e você verá as leituras no Monitor serial da IDE.
void setup(){
Serial.begin(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
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.
WWW.ELETROGATE.COM 34
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 Mega;
Protoboard;
Jumpers.
Diagrama de circuito:
Esse é um diagrama com dois divisores de tensão. O primeiro é composto por três
resistores, sendo cada um de 330R. Assim, o resistor Z1 é de 330R e o resistor Z2 é
formado pela associação em série dos outros dois, resultando numa resistência
equivalente de 660R.
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:
WWW.ELETROGATE.COM 35
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.
Carregue o código abaixo e observe os dois valores no Monitor Serial da IDE Arduino.
void setup()
{
Serial.begin(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
Serial.print("Tensão do divisor 1: "); // imprime no monitor serial
Serial.print(voltage1); // imprime a tensão 1
Serial.print(" Tensão do divisor 2: "); // imprime no monitor serial
Serial.println(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.
WWW.ELETROGATE.COM 36
Lista de materiais:
Resistor de 330Ω;
Resistor de 1KΩ;
LED vermelho (ou de outra cor de sua preferência);
Push-button (chave botão);
Arduino Mega;
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.
WWW.ELETROGATE.COM 37
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
Serial.begin(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
Serial.println("Acendendo LED"); // imprime no monitor serial
}
else // senão chave = nível baixo
{
digitalWrite(ledPin, LOW); // desliga LED com 0V
Serial.println("Desligando LED"); // imprime no monitor serial
}
delay(100); // atraso de 100 milissegundos
}
WWW.ELETROGATE.COM 38
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 Mega;
• Protoboard;
• Push Button;
• Jumpers.
Diagrama de circuito:
WWW.ELETROGATE.COM 39
Carregue o código abaixo em seu Arduino:
#define BUTTON 3
#define BUZZER 4
void setup(){
pinMode(BUTTON, INPUT_PULLUP);
pinMode(BUZZER, OUTPUT);
Serial.begin(9600);
delay(100);
}
void loop(){
if (digitalRead(BUTTON) == LOW){
digitalWrite(BUZZER, HIGH);
} else {
digitalWrite(BUZZER, LOW);
}
delay(100);
}
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.
WWW.ELETROGATE.COM 40
É 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
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 Mega;
Protoboard;
Jumpers.
WWW.ELETROGATE.COM 41
Diagrama de circuito:
WWW.ELETROGATE.COM 42
Carregue o código abaixo e varie a luminosidade sobre o LDR.
void setup()
{
pinMode(ledPin, OUTPUT); // configura D13 como saída digital
Serial.begin(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
Serial.print("Leitura sensor LDR = "); // imprime no monitor serial
Serial.println(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.
WWW.ELETROGATE.COM 43
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.
A figura abaixo mostra um típico servo motor analógico. Trata-se do Micro Servo Tower
Pro SG90 9G que acompanha o Kit Big Jack para Arduino.
WWW.ELETROGATE.COM 44
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:
WWW.ELETROGATE.COM 45
Diagrama de circuito
void setup()
{
myservo.attach(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)
myservo.write(val); // controle PWM do servo
delay(15); // atraso de 15 milissegundos
}
WWW.ELETROGATE.COM 46
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.
WWW.ELETROGATE.COM 47
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:
WWW.ELETROGATE.COM 48
Carregue o código abaixo e meça a temperatura com o NTC:
void setup(){
Serial.begin(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
Serial.print("Temperatura em Celsius: "); // imprime no monitor serial
Serial.print(TempCelsius); // imprime temperatura Celsius
Serial.print(" Temperatura em Kelvin: "); // imprime no monitor serial
Serial.println(TempKelvin); // imprime temperatura Kelvins
delay(500); // atraso de 500 milissegundos
}
O Módulo Relé nada mais é do que um ou mais relés acionados por sinais digitais de 5V.
Esse componente é indicado para acionar cargas que utilizam correntes maiores do que
a suportada pelo Arduino, ou então uma carga de um circuito de corrente alternada
(rede elétrica).
• ativação de eletroímãs,
WWW.ELETROGATE.COM 49
• ativação de motores CC,
• ativação de motores CA,
• ligar/desligar lâmpadas.
Uma das aplicações mais comuns dos módulos relés para Arduino
é no acendimento de lâmpadas em sistemas de automação
residencial. O módulo funciona exatamente da mesma forma que
uma chave ou interruptor. Ao lado temos a pinagem de um relé comum:
• C - Terminal Comum
• NA - Contato Normalmente Aberto
• NF - Contato Normalmente Fechado
WWW.ELETROGATE.COM 50
Repare que cada relé possui os três terminais que explicamos mais acima. Além deles,
há outros 6 pinos usados para interfacear o módulo com o Arduino. São eles:
GND,
IN1,
IN2,
IN3,
IN4,
VCC.
Cada pino INx serve para acionar um dos relés. VCC e GND são os pinos de alimentação
do Módulo do relé : VCC deve ser conectado no +5V e o GND no negativo, ambos da
fonte. O GND do Módulo Relé deve estar conectado também no GND do Arduino !
Lista de Materiais:
Para este exemplo você vai precisar:
Protoboard,
Arduino Mega,
Jumpers de ligação,
Módulo relé de 1 canal,
Uma chave táctil (push-button),
1 resistor de 10K.
Diagrama de circuito:
WWW.ELETROGATE.COM 51
Código para acionar o Relé com uma chave táctil:
void setup(){
void loop(){
}
WWW.ELETROGATE.COM 52
H com módulo relé 2 canais
O sensor ótico reflexivo TCRT5000 é um dos mais populares para utilização em projetos
com Arduino. Trata-se de um sensor reflexivo que possui um emissor infravermelho e
um fototransistor. O emissor é um led infravermelho que emite um sinal nessa faixa do
espectro. Já o fototransistor é o receptor que faz a leitura do sinal refletido.
Ou seja, o led emite um feixe infravermelho que pode ou não ser refletido por um
objeto. Caso o feixe seja refletido, o fototransistor identifica o sinal refletido e gera um
pulso em sua saída.
A distância máxima de detecção não é grande, ficando em torno de 25 mm (dois
centímetros e meio), o que pode limitar um pouco a sua aplicação. O fototransistor vem
com um filtro de luz ambiente, o que maximiza a identificação do feixe infravermelho
refletido.
Lista de materiais:
WWW.ELETROGATE.COM 53
Diagrama de Circuito:
O terminal Anodo (A) positivo do LED infravermelho está ligado por meio de um resistor
de 330R ao VCC (5V) e o seu terminal catodo (K) negativo está ligado em GND. O Coletor
(C) do fototransistor está ligado ao resistor de 10K (que está conectado no VCC) e
também na entrada digital D7 do Arduino. Essa entrada é que vamos usar para
identificar se o sensor percebeu algum objeto ou não. O Emissor (E) do fototransistor
está ligado ao GND.
O LED vermelho para indicação do Sensor, tem o terminal Anodo (A) positivo conectado
à um resistor de 330R que está conectado à porta digital D8 do Arduino. O terminal
catodo (K) negativo está ligado ao GND.
WWW.ELETROGATE.COM 54
Código:
void setup(){
void loop(){
leituraSensor = digitalRead(fotoTransistor); // leitura do sensor TCRT5000
}
else { // senão
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 esta sendo
refletida) . Se o pino estiver em nível alto, então não há objeto nenhum no raio de
medição do sensor.
Nesse exemplo, a presença do sensor é identificada pelo acionamento de um led, ou
seja, sempre que um objeto for identificado pelo sensor, o led ficará aceso.
WWW.ELETROGATE.COM 55
Exemplo 10 – Efeito fade
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 Mega + cabo;
• LED;
• Resistor de 330Ω;
• Protoboard;
• Jumpers.
Diagrama de circuito:
WWW.ELETROGATE.COM 56
// Exemplo 10 - Efeito fade
// Apostila Eletrogate - KIT BIG JACK
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().
Lista de materiais:
WWW.ELETROGATE.COM 57
• Potenciômetro 10KΩ;
• 1 LED;
• 1 Resistor de 330Ω
• Protoboard;
• Jumpers.
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
}
WWW.ELETROGATE.COM 58
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
WWW.ELETROGATE.COM 59
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é?
WWW.ELETROGATE.COM 60
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
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 Mega;
• Protoboard;
• Potenciômetro 10KΩ;
• 2 LEDs;
• 2 Resistores de 330Ω;
• Jumpers.
Diagrama de circuito
WWW.ELETROGATE.COM 61
contagem ocorre em milissegundos) e sabemos que não usaremos números negativos
— daí o uso do termo unsigned, que significa 'sem sinal'.
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);
//Se a diferença entre o valor atual de millis e o valor armazenado for menor que
o intervalo desejado:
if((millis() - millisPisca) < tempoLED_PISCA){
digitalWrite(LED_PISCA, HIGH); //Ligue o LED
} else {
digitalWrite(LED_PISCA, LOW); //Senão, desligue o LED
if ((millis() - millisPisca) >= 2 * tempoLED_PISCA) { // Se um ciclo foi
completo:
millisPisca = millis(); //atualiza millisPisca com o valor atual de millis()
}
}
}
WWW.ELETROGATE.COM 62
Exemplo 14 – 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 Mega;
• Protoboard;
• 2 LEDs;
• 2 Resistores de 330Ω;
• 2 resistores de 10KΩ;
• Transistor BC548;
• Transistor BC558;
• Jumpers.
Diagrama de circuito
WWW.ELETROGATE.COM 63
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, lá na
página 17.
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.
WWW.ELETROGATE.COM 64
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 Mega;
• Protoboard;
• 10 LEDs;
• 10 Resistores de 330Ω;
• 1 Resistor de 10KΩ;
• Transistor BC548;
• Jumpers.
WWW.ELETROGATE.COM 65
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:
WWW.ELETROGATE.COM 66
“Mas como chegaram a esses valores para o resistor de base nos exemplos 11 e 12?”
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.
Lista de materiais:
• Arduino Mega;
• Protoboard;
• 2 LEDs vermelhos;
• 2 LEDs verdes;
• 1 LED amarelo;
• 5 Resistores de 330Ω;
• Jumpers.
Diagrama de circuito
WWW.ELETROGATE.COM 67
O código deverá satisfazer as seguintes situações:
WWW.ELETROGATE.COM 68
//Exemplo 16 - Semáforo com Arduino
// Apostila Eletrogate - KIT BIG JACK
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
WWW.ELETROGATE.COM 69
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.
Diagrama de montagem
WWW.ELETROGATE.COM 70
Em nosso código, vamos explorar dois novos recursos da programação: arrays e
funções. Começando com os arrays, para ilustrar, imagine uma gaveta que guarda um
único parafuso – esta representa uma variável. Agora, pense em uma segunda gaveta
com divisórias, onde cada compartimento contém um parafuso de tamanho diferente.
Isso é o que chamamos de array.
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.
WWW.ELETROGATE.COM 71
Tendo isso em mente, carregue o código abaixo em seu Arduino:
//Exemplo 17 - Acionando displays de 7 segmentos
//Apostila Eletrogate - KIT BIG JACK
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
}
}
WWW.ELETROGATE.COM 72
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.
WWW.ELETROGATE.COM 73
Esses componentes mais antigos utilizavam vários leds (7,14 ou 16) dispostos em
segmentos, de forma que dependendo de qual conjunto de leds fosse aceso, um
determinado caractere seria mostrado.
O display que vamos trabalhar é de 16 colunas e 2 linhas (16×2), backlight (luz de fundo)
azul e caracteres brancos. A interface com Arduino é feita por meio de um barramento
de 16 pinos. Em geral apenas 12 são utilizados de fato. Os pinos do LCD são:
WWW.ELETROGATE.COM 74
LCD 16x2 pinagem – foto Gustavo Murta
Pino de register select (RS): Controle em que parte da memória (do LCD) o
usuário está escrevendo os dados. São duas opções, você pode escrever um
dado para ser mostrado no display, ou uma instrução no MCU do display;
Pino de Read/Write (R/W): Seleciona se está em modo de leitura ou de escrita;
Pino de Enable: Habilita a escrita de dados nos registradores;
8 pinos de dados (D0 -D7). Os estados de cada pino desses corresponde aos
bits que você está enviando para display ou os valores lidos, quando está no
modo de leitura.
Pinos de alimentação VCC e GND do LCD e do LED Backlight (A-anodo/K-
catodo);
Pino V0 de ajuste de contraste;
Lista de materiais:
1 Arduino Mega;
1 Protoboard;
Jumpers para ligação no protoboard;
Display LCD 16x2;
Potenciômetro 10K;
WWW.ELETROGATE.COM 75
Diagrama de circuito:
void setup(){
void loop(){
WWW.ELETROGATE.COM 76
No código, é mostrado na primeira linha (0) do display, a mensagem “Exemplo LCD !“.
Na segunda linha (1) será mostrado um contador que é incrementado de 1 em 1
segundo. Para usar o LCD é preciso incluir a biblioteca LiquidCrystal.h, que é nativa da
IDE arduino. Essa biblioteca possui as seguintes funções:
lcd.clear() - Limpa a tela do display
lcd.SetCursor(0,0) - Posiciona o cursor a partir de onde os caracteres serão
escritos
lcd.print() - Imprime caracteres no display
WWW.ELETROGATE.COM 77
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.
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:
WWW.ELETROGATE.COM 78
Copie e cole o código a seguir em sua IDE:
void setup(){
void loop(){
void DisparaPulsoUltrassonico(){
WWW.ELETROGATE.COM 79
Explicando, as variáveis declaradas são para determinar os pinos de trigger (pino 2) e de
leitura do sensor (pino 3). Temos três variáveis do tipo float utilizadas para medir o
tempo do pulso no output do sensor e calcular a distância. Na função void setup(),
inicializamos o pino 2 como saída e o 3 com entrada. Além disso, configuramos a
comunicação serial para 9600 bits/segundo.
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();
WWW.ELETROGATE.COM 80
das bobinas. A velocidade que o rotor gira é determinada pela frequência dos pulsos
do circuito de controle. Quanto maior a frequência, maior será o RPM.
Informações sobre o Motor de Passo 28BYJ-48:
Esse motor é Unipolar pois possui 4 enrolamentos que chamamos de fases. Em uma das
pontas das fases, todas estão conectadas juntas (fio comum). Portanto, esse
motor não pode ser usado em Drivers para motores Bipolares (com duas fases somente).
Interessante, que ele pode ser alimentado com 5V e consome baixa corrente, o que
facilita a montagem.
• Tensão de operação : 5V CC
• Número de fases : 4
• Razão da variação de velocidade : 1/64 (mecanismo de redução)
• Angulo do passo : 5,625 graus => 64 passos/volta (360/64=5,625)
• Resistência CC : 23 ohms
• Frequência : 100 Hz
• Torque de tração: > 34,3 mN.m
OBS: a resistência medida nas bobinas do motor foi de 23 ohms. Assim podemos
deduzir o consumo estático de corrente em cada bobina :
I = V / R -> 5V / 23 ohms -> 217 mA
Nesse tipo de motor, cada fase é energizada por um circuito driver num único sentido
de corrente. Isto é, uma extremidade do enrolamento será sempre positiva e a outra
sempre negativa. A desvantagem do motor unipolar é que tem menos torque do que o
bipolar similar, pois sempre terá no máximo, a metade das fases energizadas. Daí
pode-se concluir que tem 50% da eficiência em relação ao bipolar.
Esse motor tem uma caixa de engrenagens para redução da rotação do eixo, mas que
permite um aumento no torque. Veja abaixo a caixa de engrenagens desmontada. A
relação de redução é de 63,68:1 , isto é, para cada giro do eixo de saída, são
necessárias 63,68 voltas do eixo interno do motor. Como esse motor de passo precisa
WWW.ELETROGATE.COM 81
de 64 passos para dar uma volta, são necessários 64 x 63,68 = 4075 passos (pulsos)
aproximadamente para um giro do eixo de saída.
O pino mais à esquerda (-) no módulo é o terra (veja foto acima). Esse terra tem que ser
conectado ao terra da fonte e ao terra do Arduino. O pino (+) no caso do Motor 28BYJ-
48, tem que ser conectado ao positivo de uma fonte de 5V (preferencialmente de 1
Ampére). Não recomendo que conecte no 5V do Arduino, pois poderá sobrecarregar o
WWW.ELETROGATE.COM 82
regulador de tensão do mesmo. O jumper Power ON/OFF é usado para ligar ou desligar
o motor. Os quatro leds vermelhos (A,B,C e D) são usados para indicar o acionamento
de cada um dos drivers (fases do motor).
IMPORTANTE: Muita atenção ao conectar a alimentação nos pinos. Uma ligação
incorreta poderá danificar o driver ou o motor.
Modos de operação:
Para um motor de Passo Unipolar, temos alguns modos de operação. Temos o modo
Passo completo com alto torque (Full step), o modo Passo completo com baixo torque
( Wave Step), o modo Meio Passo (half step) e Micro-passo (Micro stepping).
No caso do Micro passo, a corrente nos enrolamentos deve ser alterada. Como o nosso
circuito não permite o controle da corrente, esse modo de operação não se aplica para
esse driver.
Passo completo com alto torque ( Full step): - Duas Fases são acionadas ao mesmo tempo,
nessa ordem:
Passo completo com baixo torque ( Wave Step): - Somente uma Fase acionada de cada vez,
nessa ordem:
Meio Passo (half step): - Na sequência de oito passos, em alguns passos temos somente uma
fase acionada e em outros passos, temos duas fases acionadas, nessa ordem:
WWW.ELETROGATE.COM 83
Lista de materiais:
Diagrama do circuito :
WWW.ELETROGATE.COM 84
Para esse projeto, nosso código fará uso de uma biblioteca chamada AccelStepper.
Diferente das outras que utilizamos ao longo dessa apostila, a AccelStepper não é uma
biblioteca nativa da Arduino IDE, portanto, precisamos instalá-la manualmente. Para
isso, siga os passos abaixo:
1º - Abra o Gerenciador de Bibliotecas da Arduino IDE clicando no botão mostrado
abaixo:
WWW.ELETROGATE.COM 85
3º - Vamos instalar a versão destacada acima, desenvolvida por Mike McCauley. Basta
clicar em “Instalar” e aguardar a mensagem abaixo:
Com a biblioteca instalada e o circuito montado, basta carregar o código abaixo em seu
Arduino e girar o potenciômetro para observar o funcionamento do motor:
void setup()
{
motorPasso.setMaxSpeed(500); // maxima velocidade = 500 pulsos/seg
}
void loop()
{
int analog_in = analogRead(ANALOG_PIN); // lendo a tensão do pino A0 do Arduino
motorPasso.moveTo(analog_in); // gira o eixo do motor X pulsos
motorPasso.setSpeed(100); // velocidade = 100 pulsos por segundo
motorPasso.runSpeedToPosition(); // gira o eixo para a posição definida
}
WWW.ELETROGATE.COM 86
Exemplo 21 – Comunicação sem Fio com Transmissor e Receptor RF
Referência : http://blog.eletrogate.com/wp-content/uploads/2018/09/ASKnFSK.pdf
Essas são algumas aplicações para esses módulos RF 433 MHz :
• transmissão de dados à curta distância,
• controle remoto,
• automação residencial,
• sistema de segurança - Alarme,
• Registro remoto de dados (Log).
WWW.ELETROGATE.COM 87
Módulo Receptor - pinagem :
1. VCC - pino de alimentação : 5V
2. Data - pino de recepção de dados
3. Data - idem - conectado ao pino 2
4. GND – terra
WWW.ELETROGATE.COM 88
Portanto solde fios rígidos de aproximadamente 17,3 cm nos locais indicados na foto
dos módulos. Uma antena para o transmissor e outra para o receptor, ambas com o
mesmo tamanho.
Para esse projeto, faremos uso de uma biblioteca chamada RadioHead, que será
responsável por simplificar o envio dos dados. Como ela não foi publicada na Arduino
IDE, precisamos fazer a instalação através de um arquivo compactado (.zip). Comece
baixando-a através do link abaixo:
http://blog.eletrogate.com/wp-content/uploads/2018/09/RadioHead-master.zip
Em seguida, na Arduino IDE, clique em Sketch > Incluir Biblioteca > Adicionar
biblioteca.zip e localize o arquivo RadioHead-master.zip que você acabou de baixar,
clicando em abrir na sequência.
Bem interessante essa biblioteca, e funcionou perfeitamente nos meus testes. Ela
poderá ser adaptada para a sua aplicação, enviando dados entre dois Arduinos.
Usando os módulos com antenas, o alcance poderá ser expressivo. Lembrando que
quanto maior a tensão de alimentação do módulo transmissor, maior será a potência
de RF a ser transmitida e portanto maior alcance (limite : 12V).
WWW.ELETROGATE.COM 89
Como visto nas especificações do módulo TX, a taxa de transmissão de dados é
relativamente baixa (< 4000 bps). Mas para aplicações como o envio de dados de um
sensor, por exemplo, essa biblioteca poderá ser usada.
Montagem do Módulo Transmissor RF 433 MHz:
WWW.ELETROGATE.COM 90
// Exemplo 21 – Módulos RF – Transmissor e Receptor – 433 MHz
// Apostila Eletrogate - KIT BIG JACK
// Arduino Transmissor
void setup()
{
Serial.begin(9600); // inicializa console serial 9600 bps
if (!gerente.init()) // se a inicialização do gerenciador falhar
Serial.println("Falha na inicializacao"); // print na console serial
}
void loop()
{
Serial.print("Transmitindo mensagem n. "); // print na console serial
Serial.println(count); // print do contador
if (!gerente.sendtoWait(data, sizeof(data), RX_ADDRESS)) // se gerenciador enviar mensagem
{
count++; // incrementa contador
}
delay(500); // atraso 0,5 segundos
}
WWW.ELETROGATE.COM 91
Esse é o Sketch para ser gravado no Arduino conectado ao Módulo Receptor. Uma
mensagem de teste será recebida à cada meio segundo.
Durante os testes iniciais, coloque o transmissor perto do Receptor. Depois faça o
teste distante um do outro. Obstáculos como paredes maciças, portões metálicos
poderão prejudicar a recepção. Uma transmissão ao ar livre poderá ter um alcance
bem maior.
http://blog.eletrogate.com/wp-content/uploads/2018/09/RF433askRX.ino.ino
Sketch do Modulo Receptor:
void setup()
{
Serial.begin(9600); // inicializa console serial 9600 bps
if (!gerente.init()) // se a inicialização do gerenciador falhar
Serial.println("Falha na inicializacao"); // print na console serial
}
void loop()
{
if (gerente.available()) // se gerenciador estiver ativo
{
tamanho = sizeof(buf); // determina o tamanho do buffer
if (gerente.recvfromAck(buf, &tamanho, &from)) // se o gerenciador receber mensagem
{
Serial.print("Recebido de: 0x"); // print na console serial
Serial.print(from, HEX); // print do endereço do transmissor em
Hexadecimal
Serial.print(": "); // print na console serial
Serial.println((char*)buf); // print da mensagem recebida
}
}
}
WWW.ELETROGATE.COM 92
Essa é a tela da Console Serial da IDE do Arduino Receptor (9600 bps), com as
mensagens recebidas:
https://en.wikipedia.org/wiki/Passive_infrared_sensor
Sob o sensor PIR existe uma lente de Fresnel que amplia a luz infravermelha recebida.
Quando o ser vivo monitorado está em movimento, algumas variações na intensidade
da luz são percebidas pelo circuito do módulo. Ao atingirem um determinado nível pré-
configurado, o circuito dispara o sensor.
https://pt.wikipedia.org/wiki/Lente_de_Fresnel
WWW.ELETROGATE.COM 93
Especificações do Módulo PIR DYP-ME003:
https://www.elecfreaks.com/wiki/index.php?title=PIR_Motion_Sensor_Module:DYP-
ME003
WWW.ELETROGATE.COM 94
Modulo PIR DYP-ME003
OBS: alguns fabricantes podem inverter os pinos VCC com GND. Veja a identificação na
placa.
WWW.ELETROGATE.COM 95
Montagem do Módulo PIR com Arduino:
WWW.ELETROGATE.COM 96
// Exemplo 13 – Modulo Sensor de Presença PIR
// Apostila Eletrogate - KIT BIG JACK
void setup()
{
pinMode(LED_BUILTIN, OUTPUT); // Define LED embutido D13 como saída
pinMode(sensorPIR, INPUT); // Define pino do sensor PIR D2 como entrada
pinMode(buzzer, OUTPUT); // define pino da sirene buzzer D8 como saída
delay(5000); // tempo necessário para o módulo PIR se inicializar 5 segundos
}
void loop()
{
disparo = digitalRead(sensorPIR); // Le o valor da saída do sensor PIR
if (disparo == LOW) // Se saída tem nível baixo
{
digitalWrite(LED_BUILTIN, LOW); // LED embutido permanece apagado
}
else // Se a saída tem nível alto
{
digitalWrite(LED_BUILTIN, HIGH); // LED embutido acende
tone(buzzer, frequencia, duracao); // Buzzer apita
}
}
WWW.ELETROGATE.COM 97
Exemplo 23 – Ponte H com Módulo Relé de 2 Canais
O Módulo Relé nada mais é do que um ou mais relés acionados por sinais digitais de 5V.
Esse componente é indicado para acionar cargas que utilizam correntes contínuas
maiores do que a suportada pelo Arduino, ou então uma carga de um circuito de
corrente alternada (rede elétrica).
O módulo de relé pode ser usado para vários tipos de aplicações:
• ativação de eletroímãs,
• ativação de motores CC,
• ativação de motores CA,
• ligar/desligar lâmpadas.
Existe um Led em série com cada entrada do acoplador ótico. Portanto quando a porta
é ativada, o Led acende. A alimentação do módulo tem que ser 5 V (pino +5V). Não use
uma tensão maior ou menor do que 5 V, pois poderá queimar o relé (tensão maior) ou
então o relé não poderá ser acionado (tensão menor). Se quiser usar relés com 12 V,
WWW.ELETROGATE.COM 98
procure um outro módulo de relé. Não se esqueça de conectar o pino terra (GND) do
módulo com o GND do Arduino. Mantenha o jumper entre os pinos JD-VCC e VCC. Dessa
forma, a alimentação dos relés será de 5 V através do pino +5V. A capacidade corrente
em cada contato é de 10 A. Não ultrapasse esse valor, para não danificar o seu relé. O
consumo de corrente da bobina de cada relé é de aproximadamente 70 mA, quando
energizada.
Na imagem abaixo temos o Módulo Relé 2 canais com a identificação das conexões:
Os pinos dos contatos dos Relés são NA (normalmente aberto), COM (comum) e NF
(normalmente fechado.). Isto é, enquanto o relé estiver desativado, a ponta comum
estará conectada no contato NF. Quando o relé for acionado, a ponta comum será
conectada no contato NA.
Cada pino INX serve para acionar um dos relés. VCC e GND são os pinos de alimentação
do Módulo do relé: VCC deve ser conectado no +5V e o GND no pino terra, ambos da
fonte. O pino terra (GND) do Módulo Relé deve estar conectado também no Terra
(GND) do Arduino!
WWW.ELETROGATE.COM 99
Por isso criei esse tutorial para montagem de uma Ponte H com relés. A ponte H desse
tutorial pode controlar motores CC com escova (Brushed) com corrente de até 10
amperes.
Uma limitação da Ponte H com relé, é que não suporta o controle de velocidade (PWM)
do motor. Não é possível ficar chaveando um relé com uma frequência de pulsos. Isso
danificaria os relés!
Para entender como uma ponte H funciona, recomendo a leitura do meu tutorial no
Blog da Eletrogate:
http://blog.eletrogate.com/arduino-ponte-h-com-rele/
Lista de Materiais:
Para este exemplo você vai precisar:
Protoboard,
Arduino MEGA,
Jumpers de ligação,
Módulo relé 2 canais,
Motor CC,
Fonte de alimentação.
O circuito abaixo é uma montagem de uma Ponte H básica com o Módulo 2 Relés. Veja
que nessa montagem estou alimentando o motor com uma fonte externa CC. Verifique
as especificações do seu motor, para saber qual é a tensão de alimentação e a corrente
necessárias para o mesmo. Importante: a corrente de operação da fonte de
alimentação precisa suportar a corrente do motor! Os relés suportam no máximo 10 A.
Para efeito didático, usaremos o Motor CC do Kit. Ele poderá ser alimentado com o
+5V do Arduino, pois o consumo de corrente dele é bem baixo – aproximadamente 10
mA.
Conecte o GND do conector ao GND do Arduino e o +VCC do conector ao +5V do
Arduino. Não use motores CC com correntes maiores do que 50 mA, para não queimar
o regulador 5V do Arduino.
WWW.ELETROGATE.COM 100
Diagrama do circuito:
WWW.ELETROGATE.COM 101
// Exemplo 23 - Ponte H com modulo 2 relés
// Apostila Eletrogate - KIT BIG JACK
// Gustavo Murta
void setup()
{
Serial.begin(9600); // console serial 9600 Bps
pinMode(IN1, OUTPUT); // definições das portas como portas de saidas
pinMode(IN2, OUTPUT);
digitalWrite(IN1, HIGH); // desativa porta IN1
digitalWrite(IN2, HIGH); // desativa porta IN2
}
void loop()
{
digitalWrite(IN2, HIGH); // desativa porta IN2
digitalWrite(IN1, LOW); // acionamento relé K1
Serial.println("Rele K1 acionado"); // print mensagem
delay (3000); // atraso de 3 segundos
digitalWrite(IN1, HIGH); // desativa porta IN1
digitalWrite(IN2, LOW); // acionamento relé K2
Serial.println("Rele K2 acionado"); // print mensagem
delay (3000); // atraso de 3 segundos
}
WWW.ELETROGATE.COM 102
Com esse tipo de modulação, impede-se que a luz externa interfira na transmissão dos
dados.
Hoje com a integração cada vez maior dos circuitos, existem receptores de controle
remoto IR que já contém o foto-sensor e todos os outros circuitos necessários para
demodular os pulsos de controle, como amplificadores de sinal, filtros, demodulador,
integrador e comparador.
O diagrama de blocos abaixo contém os vários circuitos que estão integrados no
pequeno receptor. Após a demodulação dos pulsos, esses são descodificados por um
outro Microcontrolador, para que o aparelho possa entender que tipo de operação
deverá ser realizada.
WWW.ELETROGATE.COM 103
Ele pode trabalhar com tensões de 2,1V a 5,5V. O consumo de energia é bem baixo,
com uma corrente de aproximadamente 1,5 mA. A frequência de modulação dos
pulsos de dados é de 38 KHz. E o comprimento de onda da luz infravermelha percebida
é de 940 nm. O ângulo de visão é de aproximadamente 90 graus. A vantagem do uso
desse foto-receptor IR é que ele já tem todo o circuito integrado necessário para
demodular os pulsos.
WWW.ELETROGATE.COM 104
Controle Remoto IR com Arduino:
Usando um circuito de Controle Remoto IR com o Arduino, poderá implementar
inúmeras aplicações bem interessantes como:
WWW.ELETROGATE.COM 105
Para que o código funcione, também precisaremos instalar uma biblioteca. Dessa vez,
faremos uso da biblioteca IRremote, desenvolvida por Shirriff, Z3t0 e ArminJo. Siga o
mesmo passo a passo demonstrado nos Exemplos 19 e 21 dessa apostila.
WWW.ELETROGATE.COM 106
Código Controle Remoto IR - LEDs coloridos:
void setup()
{
pinMode(7, OUTPUT); // LED vermelho no pino D07
pinMode(6, OUTPUT); // LED azul no pino D06
pinMode(5, OUTPUT); // LED verde no pino D05
irrecv.enableIRIn(); // Inicializa a recepção de
códigos
}
void loop()
{
results.value = 0; // zera os registradores
if (irrecv.decode(&results)) // se algum código for recebido
{
irrecv.resume(); // reinicializa o receptor
}
if (results.value == 0xFFB04F) // pressione tecla 3 para
controlar LED vermelho (D07)
{
LED7 = !LED7; // alterna o estado do LED D07
digitalWrite(7, LED7); // acende ou apaga LED vermelho
(D07)
delay(atraso); // atraso de 250 ms
}
WWW.ELETROGATE.COM 107
Exemplo 25 – Relógio Digital de Alta Precisão com Módulo RTC
Esse módulo serve como relógio para projetos com Arduino que precisam do controle
do tempo. Pode ser usado como alarme despertador, controle automatizado de
operações temporizadas, e claro como um relógio comum com horas e minutos. O
módulo tem o chip DS1307 que é o relógio, uma EEPROM 24C32, um cristal de 32,768
KHz e uma pilha CR2032.
O chip DS1307 RTC (Real-Time Clock) é um relógio / calendário de baixa potência com
codificação binária completa (BCD) mais 56 bytes de NV SRAM (memória estática RAM
não-volátil). Os endereços e os dados são transferidos em série por meio do
barramento bidirecional da interface I2C. O relógio / calendário fornece informações
sobre segundos, minutos, horas, dia, data, mês e ano. O relógio funciona no formato
de 24 ou 12 horas com o indicador AM / PM. O DS1307 possui um circuito de detecção
de falha de energia que alterna automaticamente a alimentação para a pilha CR2032
(3V), na ausência de energia da fonte. A contagem de tempo do relógio é baseada no
oscilador do cristal de 32,768 KHz.
A memória EEPROM 24C32 permite o armazenamento de até 4096 K Bytes e ela é não
volátil, isto é, mesmo sem energia ela armazena os dados gravados. Para a
comunicação com o microcontrolador ela também usa a interface I2C.
WWW.ELETROGATE.COM 108
Diagrama de montagem
WWW.ELETROGATE.COM 109
Em seguida, carregue o código abaixo em seu Arduino e abar o monitor serial:
WWW.ELETROGATE.COM 110
Código Arduino – Módulo RTC DS1307:
void setup ()
{
Serial.begin(9600); // monitor da console serial 9600 bps
if (! rtc.begin()) // se o RTC não foi inicializado
{
Serial.println("RTC nao pode ser encontrado!"); // imprime mensagem
while (1);
}
void loop ()
{
DateTime now = rtc.now(); // faz a leitura dos dados do RTC
Serial.print(now.day(), DEC); // imprime o dia do mês
Serial.print('/');
Serial.print(now.month(), DEC); // imprime o mês
Serial.print('/');
Serial.print(now.year(), DEC); // imprime o ano
Serial.print(" (");
Serial.print(diasDaSemana[now.dayOfTheWeek()]); // imprime o dia da semana
Serial.print(") ");
Serial.print(now.hour(), DEC); // imprime horas
Serial.print(':');
Serial.print(now.minute(), DEC); // imprime minutos
Serial.print(':');
Serial.print(now.second(), DEC); // imprime segundos
Serial.println(); // imprime uma linha
delay(2000); // atraso de 2 segundos
}
Esse programa foi traduzido e adaptado do exemplo DS1307 da biblioteca RTClib. Ele
acerta a data e as horas com o relógio do seu computador e atualiza a data e hora no
monitor serial a cada 2 segundos. Esse exemplo é para você entender basicamente como
o relógio RTC pode ser usado.
No monitor serial, a saída será semelhante a essa:
WWW.ELETROGATE.COM 111
Exemplo 26 – Utilizando o Teclado Matricial de 16 Teclas
WWW.ELETROGATE.COM 112
Montagem Arduino com o teclado de membrana:
Logo abaixo temos o diagrama da montagem. O keypad foi conectado nos pinos D4 até
D11, onde as colunas estão ligadas nos pinos D4, D5, D6 e D7, enquanto as linhas estão
ligadas nos pinos D8, D9, D10 e D11.
Lista de Materiais:
Para este exemplo você vai usar os seguintes componentes:
Arduino MEGA,
Protoboard,
Jumpers de ligação,
Teclado de membrana,
Resistor 330 ohms,
Display 7 segmentos – anodo comum.
Diagrama do teclado:
WWW.ELETROGATE.COM 113
Código Arduino - Teclado de membrana:
O primeiro passo para dar início à programação desse exemplo é instalar a biblioteca
Keypad. Para isso, siga os passos de instalação dos exemplos anteriores e pesquise
pela biblioteca “Keypad”. Vamos instalar a versão desenvolvida por Mark Stanley e
Alexander Breving, conforme mostrado na imagem abaixo:
WWW.ELETROGATE.COM 114
Código:
byte rowPins[ROWS] = {11, 10, 9, 8}; // portas D11 a D8 => linhas do Keypad
byte colPins[COLS] = {7, 6, 5, 4}; // portas D7 a D4 => colunas do Keypad
void setup() {
Serial.begin(9600); // console serial 9600 Bps
}
void loop() {
char customKey = customKeypad.getKey(); // leitura da tecla pressionada
int number = customKey - 48; // converte o caracter em um número
WWW.ELETROGATE.COM 115
Exemplo 27 - Medidor de Temperatura e Umidade com DHT11
• VCC = 3,5 a 5V
• DATA = comunicação de dados
• NC = sem conexão
• GND = terra
WWW.ELETROGATE.COM 116
Interface com o Sensor DHT11Após a alimentação de tensão do Sensor DHT11, aguarde cinco
segundos para o circuito se estabilizar. Um capacitor de 100 nF é recomendado entre o pino VCC
e o GND, se a fiação for longa. No pino de saída, deve ser usado também um resistor de pullup
-10 K ohms. Resistor Pullup é o resistor que fica conectado entre o pino de saída e o 5V.
A comunicação dos dados no barramento serial (único pino) ocorre nos dois sentidos, isto é, do
sensor para o Arduino e vice-versa.
Lista de materiais:
Arduino MEGA,
Protoboard,
Sensor DHT11,
Resistor de 10K,
Jumpers para ligação no protoboard.
Diagrama do Circuito:
WWW.ELETROGATE.COM 117
Para esse projeto, nosso código fará uso de uma biblioteca chamada DHT sensor
library. Diferente das outras que utilizamos ao longo dessa apostila, a biblioteca do
DHT 11 não é nativa da Arduino IDE, portanto, precisamos instalá-la manualmente.
Para isso, siga os passos abaixo:
1º - Abra o Gerenciador de Bibliotecas da Arduino IDE clicando no botão mostrado
abaixo:
WWW.ELETROGATE.COM 118
3º - Vamos instalar a versão destacada acima, desenvolvida pela Adafruit. Após clicar
em “Instalar”, no caso específico das bibliotecas da Adafruit, a seguinte mensagem será
exibida (caso seja a primeira vez que instala uma biblioteca da Adafruit):
WWW.ELETROGATE.COM 119
O programa também é bem simples. Ele faz com que o Arduino se comunique com o
Sensor DHT, para realizar as leituras de umidade e temperatura. Traduzimos o exemplo
da Biblioteca da Adafruit, para facilitar o entendimento.
WWW.ELETROGATE.COM 120
Código Arduino – Sensor DHT11 – Umidade e Temperatura:
void setup()
{
Serial.begin(9600); // monitor serial 9600 bps
dht.begin(); // inicializa a função
Serial.println("Usando o Sensor DHT");
sensor_t sensor;
}
void loop()
{
delay(delayMS); // atraso entre as medições
sensors_event_t event; // inicializa o evento da Temperatura
dht.temperature().getEvent(&event); // faz a leitura da Temperatura
if (isnan(event.temperature)) // se algum erro na leitura
{
Serial.println("Erro na leitura da Temperatura!");
}
else // senão
{
Serial.print("Temperatura: "); // imprime a Temperatura
Serial.print(event.temperature);
Serial.println(" *C");
}
dht.humidity().getEvent(&event); // faz a leitura de umidade
if (isnan(event.relative_humidity)) // se algum erro na leitura
{
Serial.println("Erro na leitura da Umidade!");
}
else // senão
{
Serial.print("Umidade: "); // imprime a Umidade
Serial.print(event.relative_humidity);
Serial.println("%");
}
}
WWW.ELETROGATE.COM 121
A saída esperada pode ser conferida na imagem abaixo:
WWW.ELETROGATE.COM 122
Créditos: https://en.wikipedia.org/wiki/Cartesian_coordinate_system#/media/File:Coord_system_CA_0.svg
WWW.ELETROGATE.COM 123
Sobre este módulo para Arduino, ele se chama GY-521. onde ele já vem com um
regulador de tensão, que permite o módulo ser usado de 3-5V e com a opção de soldar
pinos que se encaixam em protoboard. Os pinos presentes são
O sensor funcionará medindo os dados das acelerações linear e angular, irá utilizar o
seu conversor ADC interno para transformar este dado em um dado digital, e enviará
para o Arduino através da comunicação I2C.
Aqui neste projeto nós faremos uso de uma biblioteca, que facilitará a comunicação,
interpretação das informações, assim como a localização do sensor.
Lista de materiais:
WWW.ELETROGATE.COM 124
Diagrama do Circuito:
WWW.ELETROGATE.COM 125
Sketch Arduino – Acelerômetro MPU-6050
WWW.ELETROGATE.COM 126
// Exemplo 18 - Arduino - Sensor MPU-6050 - Acelerômetro e Giroscopio
// Apostila Eletrogate - KIT BIG JACK
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
void setup(void) {
Serial.begin(115200);
while (!Serial)
delay(10); // Fará uma pausa até que a comunicação serial se inicie corretamente.
Serial.println("MPU6050 teste!");
// Tentando inicializar
if (!mpu.begin()) { // Se caso o sensor não iniciar
Serial.println("A inicialização sensor MPU-6050 falhou");
while (1) {} // Se a inicialização falhar, o programa irá travar aqui
}
Serial.println("MPU6050 encontrado!");
void loop() {
Serial.print("Rotacao em X: ");
Serial.print(g.gyro.x);
Serial.print(", Y: ");
Serial.print(g.gyro.y);
Serial.print(", Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");
Serial.print("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" oC");
Serial.println("");
delay(500);
}
WWW.ELETROGATE.COM 127
Os dados podem ser visualizados no monitor serial.
Referências:
• https://playground.arduino.cc/Main/MPU-6050/
• https://www.instructables.com/id/MPU-6050-Tutorial-How-to-Program-MPU-
6050-With-Ard/
• http://www.ime.eb.br/~moniz/dinamica/desafio_01.pdf
WWW.ELETROGATE.COM 128
O protocolo é licenciado e para que um produto possa estampar o emblema da
comunicação bluetooth é preciso estar de acordo com todas as especificações do
protocolo. Para cada versão do Bluetooth existem testes de qualificação pelos quais
um produto deve passar para poder ser certificado como um equipamento que utiliza
comunicação Bluetooth.
O módulo HC-06 consegue operar como um dispositivo escravo, isto é, ele não
consegue se comunicar a outros dispositivos procurando a conexão, ele só é capaz de
receber a solicitação de comunicação e se comunicar.
WWW.ELETROGATE.COM 129
Pinout do módulo HC-06:
Vale ressaltar que para realizar a comunicação serial com o Arduino Mega deve ser
feita ligando o TXD (Bluetooth) ligando diretamente ao RX (Arduino) e RXD (Bluetooth)
passando por um divisor de tensão e ligando ao TX (Arduino).
Lista de Materiais:
WWW.ELETROGATE.COM 130
Instale o aplicativo abaixo, pareie o módulo Bluetooth ao seu celular.
Lendo as mensagens
void setup() {
Serial.begin(9600); // Inicia o monitor serial
Serial1.begin(9600); // inicia a porta serial 1, do Bluetooth
}
void loop() {
if(Serial1.available()){ // Lendo os caracteres enviados
Serial.print((char)Serial1.read());
}
}
WWW.ELETROGATE.COM 131
Parte V - 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:
𝛽𝛽
Com o valor de Ib em mãos, vamos utilizar a lei de Ohm para encontrar o valor da
resistência através da seguinte fórmula:
𝑉𝑉𝑉𝑉−𝑉𝑉𝑉𝑉𝑉𝑉
𝑅𝑅𝑅𝑅 = , onde:
𝐼𝐼𝐼𝐼
Rb representa o valor do resistor de base em ohms, Vb é valor da tensão aplicada na
base (no caso de uma aplicação com o Arduino, esse valor será de 5V) e Vbe é o valor
da tensão entre base e emissor do transistor quando este está ligado (considere como
sendo tipicamente 0,7V). Ib, como dito anteriormente, é o valor da corrente de base.
WWW.ELETROGATE.COM 132
Se utilizarmos qualquer valor de ganho dentro da faixa especificada, o transistor
funcionará na região ativa. Para que o transistor em opere em modo saturação, o
ganho utilizado no cálculo deve ser muito inferior ao ganho mínimo (nesse caso, a 200),
sendo comum utilizar apenas 10% desse valor.
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 Big Jack é de 1KΩ
WWW.ELETROGATE.COM 133
(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ê!
WWW.ELETROGATE.COM 134
• millis(): Retorna o número de milissegundos desde que o Arduino começou a
rodar o código.
• map(fonte, in_min, in_max, out_min, out_max): Converte um intervalo inicial
proveniente de uma (como uma entrada analógica) para outro, de maneira
proporcional.
• Serial.begin(velocidade): Inicializa a comunicação serial com uma velocidade
específica em bits por segundo.
• Serial.print() e Serial.println(): Imprimem dados no monitor serial. O segundo,
acrescido de uma quebra de linha.
• if (condição) / else: Laço condicional (Se condição, execute y, senão, execute z).
• for (inicialização; condição; incremento): Laço de repetição que itera sobre um
bloco de código um número definido de vezes (x recebe y, enquanto x for
menor que z, incremente x).
• switch (variável)/ case possível valor / break: estrutura usada para selecionar
um bloco de código a ser executado com base no valor da variável. As
possibilidades são listadas com o comando “case” e encerradas com o
comando “break”.
• 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.
• https://www.arduino.cc/reference/pt/
WWW.ELETROGATE.COM 135
Considerações finais
Essa apostila tem por objetivo apresentar alguns exemplos básicos sobre como utilizar
os componentes do Kit Big Jack 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: https://www.instructables.com/
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.
WWW.ELETROGATE.COM 136
Maker pro: https://maker.pro/projects/arduino
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 Big Jack.
Qualquer dúvida, sugestão, correção ou crítica a esse material, fique à vontade para
relatar em nosso blog oficial: http://blog.eletrogate.com/
Referências gerais
WWW.ELETROGATE.COM 137
WWW.ELETROGATE.COM 138