SlideShare uma empresa Scribd logo
1 de 139
Baixar para ler offline
PROGRAMAÇÃO PARA SISTEMAS EMBARCADOS (ARDUINO)
SUMÁRIO
FUNDAMENTOS DE ELETROELETRÔNICA
INTRODUÇÃO À FUNDAMENTOS DE ELETROELETRÔNICA 3
TEMA 1: PRINCÍPIOS DE ELETRICIDADE E ELETRÔNICA 4
TEMA 2: COMPONENTES ELETRÔNICOS 11
TEMA 3: INTRODUÇÃO AOS MICROCONTROLADORES 25
TEMA 4: ARDUINO - HARDWARE 30
TEMA 5: O IDE DO ARDUINO 40
PROGRAMAÇÃO DE MICROCONTROLADORES
INTRODUÇÃO - PROGRAMAÇÃO DE MICROCONTROLADORES 51
TEMA 1: INTRODUÇÃO À LINGUAGEM DO ARDUINO 52
TEMA 2: VARIÁVEIS 59
TEMA 3: CONDICIONAIS 69
TEMA 4: LAÇOS DE REPETIÇÃO 77
TEMA 5: FUNÇÕES 85
TEMA 6: BIBLIOTECAS 95
TEMA 7: PROJETO COM SINCRONIZAÇÃO DE LEDS 102
TEMA 8: PROJETO SINCRONIZAÇÃO DE LEDS POR BOTÕES 110
TEMA 9: PROJETO COM LCD 120
TEMA 10: PROJETO COM SENSOR DE TEMPERATURA 128
REFERÊNCIAS BIBLIOGRÁFICAS 139
2
INTRODUÇÃO À FUNDAMENTOS DE ELETROELETRÔNICA
A eletricidade e a eletrônica revolucionaram o mundo moderno, sem elas
não seria possível termos: os computadores, celulares, televisores e dentre outros
dispositivos eletrônicos do nosso dia a dia.
Portanto, é muito importante o aprendizado de conceitos básicos de
eletroeletrônica antes de aprender a programar para sistemas embarcados.
Nos temas a seguir vocês aprenderão sobre os princípios básicos de
eletricidade e eletrônica, e irão conhecer os principais componentes eletrônicos
como: resistores, capacitores, leds, transformadores, relés e dentre outros.
3
TEMA 1: PRINCÍPIOS DE ELETRICIDADE E ELETRÔNICA
Muitos já fizeram a experiência de atritar uma caneta esferográfica com o
cabelo, e após esse ato, perceberam que a caneta passou a atrair papéis
pequenos.
Para explicar esse fenômeno, precisamos entender que todas as coisas são
feitas de átomos, os nossos corpos são feitos de átomos, a caneta é feita de
átomos e assim por diante.
O átomo é a unidade básica da matéria, é constituído de um núcleo, dentro
do núcleo teremos os prótons e os nêutrons. Na eletrosfera teremos os elétrons,
veja mais detalhes na figura a seguir. Ao atritarmos um material com outro material
diferente, por exemplo, o cabelo com a caneta, um material irá ganhar elétrons e
outro irá receber elétrons.
Antes de mais nada, é importante entender que os elétrons possuem carga
negativa, os prótons possuem carga positiva e os nêutrons não possuem carga.
Sempre um material irá perder ou ganhar elétrons, nunca perderá nêutrons ou
4
prótons (somente em reações nucleares). Então, no caso, o cabelo perderá
elétrons e a caneta irá receber elétrons, portanto a caneta ficará com excesso de
elétrons e passará a atrair os papéis pequenos. Por conta da caneta estar com
excesso de elétrons nós falamos que ela está eletrizada negativamente, já o
cabelo, como perdeu elétrons ele ficará eletrizado positivamente, e os papéis
picados possuem carga neutra. Para entender melhor qual material irá receber ou
ganhar elétrons, pesquisem sobre a Série Triboelétrica.
Tensão Elétrica
A tensão elétrica, também conhecida como diferença de potencial (ddp),
ocorre quando temos um ambiente com muitos elétrons e outro com poucos
elétrons, ou seja, temos uma diferença de potencial. A tensão elétrica é medida em
Volts (V), em homenagem ao físico Alessandro Volta (1745-1827). Basicamente
quanto maior for a diferença de potencial, maior será a tensão.
5
Corrente elétrica
O fluxo ordenado de elétrons de um ponto para outro é denominado de
corrente elétrica. O sentido real da corrente elétrica é do negativo para o
positivo, ou seja, da área onde há excesso de elétrons para a área onde há
menos elétrons. Porém, na eletrônica o sentido utilizado é o sentido convencional,
que é do positivo para o negativo.
Abaixo temos um exemplo de um circuito eletrônico, o sentido da corrente
(convencional) é ilustrado através da seta vermelha, ou seja do positivo da fonte de
energia para o negativo, note que no circuito temos dois componentes eletrônicos
um resistor de 360Ω (ohms) e um led, o resistor é um componente que limita o
fluxo de corrente, como o led necessita de uma tensão elétrica menor
(aproximadamente 2 V), então o resistor baixa a tensão para que o led não
queime, mais adiante veremos em detalhes o funcionamento desses componentes.
Sobre corrente elétrica, podemos ressaltar dois tipos. A corrente contínua
que é a corrente que é a mostrada na figura acima, onde a corrente parte do polo
positivo para o polo negativo, e também temos a corrente alternada que é utilizada
na maioria das vezes para transmissão de energia em longas distâncias, por isso
nas tomadas a corrente é alternada. A corrente alternada diferente da contínua,
não possui uma polarização definida, pois a corrente alterna numa frequência que
varia de 50hz (Hertz) a 60hz(Hertz) por segundo. No Brasil a frequência adotada é
de 60hz.
A unidade de medida de corrente elétrica é o Ampère (A), em homenagem
ao físico francês André-Marie Ampère.
6
Resistência elétrica
Por mais lisa que seja uma superfície, sempre haverá algum tipo de atrito. O
mesmo ocorre com a corrente elétrica, por melhor que seja o condutor, sempre
haverá uma pequena resistência elétrica.
Os circuitos eletrônicos utilizam resistores, que são componentes cuja a
função é de limitar a passagem de corrente elétrica, com o objetivo de proteger
algum componente eletrônico que trabalha com uma tensão e corrente elétrica
menor do que a tensão de entrada. Abaixo, temos uma imagem de um resistor.
Adiante veremos mais detalhes sobre esse componente.
A unidade de medida da resistência elétrica é o Ohm(Ω), em homenagem ao
físico e matemático Georg Simon Ohm. A resistência elétrica é representada pela
letra R.
A Primeira Lei de Ohm
A Primeira Lei de Ohm é a relação entre as três grandezas, Tensão,
Corrente e Resistência. A tensão é representada pela letra U, a corrente pela
letra I (intensidade da corrente) e a resistência é representada pela letra R.
● Para encontrarmos a tensão, utilizamos a fórmula: U=R.I
● Para encontrarmos a corrente, utilizamos a fórmula: I=U/R
● Para encontrarmos a resistência, utilizamos a fórmula: R=U/I
7
Exemplo:
Um resistor de 100 Ω é percorrido por uma corrente elétrica de 20 mA. A ddp
entre os terminais do resistor, em volts, é igual a quanto?
Utilizaremos a fórmula: U=R.I
A primeira coisa a fazer é converter a corrente que está em miliampères para
ampère, ou seja precisamos dividir 20 por 1000, que dará 0,02. Depois basta
substituir os valores na fórmula:
U=100.0,02
U= 2V
Resumo
Através dos elétrons que existe a eletricidade, e sem a eletricidade não
existiria a eletrônica. Vimos que a tensão elétrica ocorre através de uma diferença
de potencial (ddp), a corrente elétrica é o fluxo ordenado de elétrons e a resistência
elétrica é a capacidade de resistir ao fluxo de passagem de corrente elétrica. A lei
de Ohm nada mais é do que a relação entre essas três grandezas: tensão,
corrente e resistência.
8
Questões
1- Do que é feito um átomo?
a) Prótons e elétrons.
b) Somente de elétrons.
c) Prótons e nêutrons.
d) Prótons, nêutrons e elétrons.
2- O que ocorre quando atritamos dois materiais diferentes?
a) Um material irá ganhar nêutrons e outro irá perder nêutrons.
b) Um material irá ganhar elétrons e outro irá perder elétrons.
c) Um material irá ganhar prótons e outro irá perder prótons.
d) Nenhuma das anteriores.
3- Qual é a carga de um elétron?
a) Neutra.
b) Negativa.
c) Positiva.
d) Nenhuma das anteriores.
4- Qual é a unidade de medida de tensão elétrica?
a) Volts.
b) Ampère.
c) Ohms.
d) Nenhuma das anteriores.
5- Qual é a unidade de medida de corrente elétrica?
a) Ohms.
b) Volts.
c) Ampère.
d) Nenhuma das anteriores.
6- Qual é a unidade de medida de resistência elétrica?
a) Ohms.
b) Ampère.
c) Volts.
d) Nenhuma das anteriores.
9
7- A corrente elétrica das tomadas é:
a) Contínua.
b) Alternada.
c) Pulsante.
d) Nenhuma das anteriores.
8- O sentido convencional da corrente é:
a) Do negativo para o positivo.
b) Não há um sentido definido.
c) Do positivo para o negativo.
d) Nenhuma das anteriores.
9- Conforme a Primeira Lei de Ohm, qual é a fórmula para calcular a resistência
elétrica?
a) R=U.I
b) R=I²
c) R=U²
d) R=U/I
10- Sabendo que ao aplicar a tensão de 50V sobre um determinado resistor a
corrente elétrica é de 5A, qual é o valor do resistor?
a) 5Ω
b) 7Ω
c) 20Ω
d) 10Ω
10
TEMA 2: COMPONENTES ELETRÔNICOS
Todo circuito eletrônico terá um ou mais componentes eletrônicos, sendo que
cada componente eletrônico pode ser utilizado para diversas finalidades. Numa
placa mãe de um computador, por exemplo, teremos uma grande quantidade
desses componentes.
Neste capítulo serão mostrados os principais componentes eletrônicos que
vocês utilizarão nas aulas, tais como: protoboards, resistores, leds, capacitores,
relés, botões e dentre outros.
11
Resistores
Os resistores são componentes cuja função é limitar o fluxo de corrente
numa determinada parte de um circuito eletrônico. Normalmente são feitos de
materiais como carbono ou silício. Costumam esquentar por conta da dificuldade
que eles aplicam à passagem de corrente elétrica, nesse processo, parte parte da
energia elétrica é dissipada em forma de calor, também conhecida como efeito
Joule.
A unidade de medida dos resistores é em Ohms (Ω), os resistores podem
ser classificados como de valor fixo ou variáveis.
Abaixo temos um exemplo de um resistor de valor fixo de 100Ω , note que
ele possui faixas coloridas, elas servem para mostrar o valor do resistor.
Segue abaixo a tabela de código de cores para resistores de 4 faixas :
12
A primeira faixa é a faixa mais próxima do terminal, ou seja, neste caso é a
faixa marrom, após identificar a primeira faixa, consulte na tabela o número
correspondente a cor da faixa, no caso a cor marrom possui o número 1, depois
consulte o número da segunda faixa, no caso a cor preta é o número 0, e por
último a terceira faixa será a quantidade de zeros, ou seja, a cor marrom é o
número 1, então no lugar da terceira faixa colocamos apenas um zero. Portanto o
valor do resistor abaixo é de 100 Ω, com tolerância de 5%, lembrando que a faixa
de tolerância é a quarta faixa e como no caso ela é dourada, ao consultar na tabela
a cor dourada na faixa de tolerância corresponde a 5%.
Segue abaixo a simbologia de um resistor de valor fixo:
13
Resistores variáveis
Potenciômetro
Um potenciômetro nada mais é do que um resistor variável, sendo utilizado
para possibilitar o ajuste manual do valor de sua resistência elétrica.
Segue abaixo a imagem de um potenciômetro e respectivamente a sua
simbologia:
Trimpot
Os trimpots, assim como os potenciômetros, também são resistores
variáveis, porém são feitos para ser ajustados somente por técnicos, por isso ele é
menor, ele não possui um pino grande para ajuste como ocorre com o
potenciômetro. O ajuste de um trimpot normalmente é feito com uma chave de
fenda pequena.
Segue abaixo a imagem de um trimpot e respectivamente a sua simbologia:
14
LED
Um led , é uma sigla de Light Emitting Diode, ou Diodo Emissor de Luz, nada
mais é do que um componente eletrônico que emite luz, ele é muito utilizado, por
exemplo, para sinalizar se um equipamento está ligado ou não, porém pode ser
utilizado para diversos fins.
Os leds possuem polarização, ou seja, um terminal será o positivo e o outro
será negativo, o terminal positivo é o maior, conforme figura abaixo:
Os leds trabalham com uma determinada tensão, dependendo da cor.
Precisamos sempre nos atentar a tensão de trabalho do led para não corrermos o
risco de queimá-lo. Se um determinado led trabalha com a tensão de 2V, ao
aplicarmos uma tensão de, por exemplo 5V, o led irá queimar, portanto é uma boa
prática sempre utilizar um resistor para ligar um led, assim será difícil queimá-lo por
uma sobrecarga de tensão.
15
Segue abaixo uma tabela com as tensões dos leds:
Para dimensionar o valor do resistor para ligar um led, é muito simples,
segue um exemplo. Suponha que temos uma alimentação de entrada de 5V, então
utilizaremos a fórmula abaixo:
16
Capacitores
Um capacitor é um componente eletrônico que possui a capacidade de
armazenar cargas elétricas por um período de tempo. É bastante utilizado para
corrigir oscilações de tensão num circuito. A capacidade de armazenar cargas
elétricas é denominada de capacitância, e a unidade de medida é em Farads (F).
Os principais tipos de capacitores são: eletrolítico, poliéster e cerâmico.
Capacitor Eletrolítico
O capacitor eletrolítico é polarizado, ou seja, possui um terminal positivo e
outro negativo. O terminal negativo é sinalizado com uma faixa. É necessário muita
atenção para não inverter a polarização desse capacitor para evitar danificá-lo, em
casos mais graves o capacitor poderá explodir. Este tipo de capacitor possui a
maior capacitância, na casa dos microfarads (uF).
Segue abaixo a imagem de um capacitor eletrolítico e respectivamente a sua
simbologia:
Capacitor de Poliéster
São capacitores que normalmente possuem menor capacitância que os
eletrolíticos, estando na casa do nanofarads (nF). Os capacitores de poliéster não
possuem polarização.
Segue abaixo a imagem de um capacitor de poliéster e respectivamente a
sua simbologia:
17
Capacitor Cerâmico
Esse tipo de capacitor é muito utilizado em circuitos com necessidades de
oscilações e de rádio frequência. É o que possui menor capacitância e não possui
polarização, estando na casa do picofarads (pF).
Segue abaixo uma imagem de um capacitor cerâmico e respectivamente a
sua simbologia:
Botões - Push Button Arduino
Os botões do tipo Push Button para Arduino são chaves cuja a função é de
fechar ou abrir o circuito, ou seja, deixa passar corrente elétrica ou não após ser
pressionado. Temos dois tipos de push button, o normalmente aberto (NA) e o
normalmente fechado (NF), a diferença é que o normalmente aberto o circuito está
aberto ou seja, não está passando corrente elétrica no circuito, após ser
pressionado ele fecha o circuito e assim passará corrente elétrica no circuito, o
push button do tipo normalmente fechado possui o funcionamento contrário ao do
normalmente aberto.
18
Segue abaixo uma tabela ilustrando o funcionamento dos botões push button
Arduino, dos tipos normalmente aberto (NA) e normalmente fechado (NF):
Protoboard
A protoboard é uma placa de ensaio feita para fins didáticos, pois ela facilita
a criação de circuitos eletrônicos, bastando apenas conectar os terminais dos
componentes eletrônicos nos furos respeitando os barramentos da placa. Existem
protoboards de diversos tamanhos, desde as menores de 170 furos até as maiores
3220 furos.O tamanho ideal de uma protoboard para projetos, é a protoboard de
830 furos.
Vamos agora entender os barramentos, note que algumas protoboards terão
uma indicação com sinais de ( - ) e ( + ) para indicar que naquele local deverá ser
energizado com a fonte de energia, bateria ou outros.É importante seguir o padrão,
19
ou seja conectar o negativo da bateria em algum furo do barramento que possui a
indicação com o sinal de ( - ) e seguindo a mesma lógica para o positivo.
Note que na protoboard há colunas, na protoboard abaixo temos 30 colunas,
cada coluna tem 5 furos, as colunas são independentes umas das outras, ou seja,
ao energizar uma determinada somente ela estará energizada. Existe uma divisão
no meio das protoboards, essa divisão divide as colunas. Por exemplo, a coluna 30
é dividida entre as linhas abcde e linhas fghij.
20
Abaixo temos um exemplo de um circuito eletrônico, nele temos uma bateria
de 9V, um resistor de 360Ω e um led.
Segue um exemplo de como esse circuito pode ser montado numa
protoboard, esse circuito foi montado através do site Tinkercad
(https://www.tinkercad.com).
21
Resumo
Cada componente eletrônico possui uma determinada função e pode ser
utilizado para diversas finalidades dependendo do circuito eletrônico. Os resistores
criam uma resistência a passagem de corrente elétrica, os potenciômetros e os
trimpots são resistores variáveis, os capacitores armazenam cargas elétricas por
um período de tempo, os leds servem muitas vezes para sinalizar alguma coisa e
as protoboards facilitam a criação de circuitos eletrônicos. Neste capítulo foram
mencionados os principais componentes eletrônicos que vocês utilizarão no curso.
Questões
1- Qual é a principal função de um resistor?
a) Amplificar o fluxo de corrente elétrica do circuito eletrônico.
b) Criar uma limitação para a passagem de corrente elétrica.
c) Armazenar cargas elétricas por um período de tempo.
d) Nenhuma das anteriores.
2- Qual é o valor da resistência do resistor abaixo?
a) 360Ω
b) 510Ω
c) 100Ω
d) 20Ω
3- Qual é o valor da resistência do resistor abaixo?
a) 510Ω
b) 10Ω
c) 150Ω
d) 15Ω
22
4- Sobre o potenciômetro, podemos dizer que:
a) Trata-se de um resistor variável, cujo valor da resistência pode ser ajustado
manualmente. Deve ser usado somente por técnicos.
b) Trata-se de um resistor variável, cujo valor da resistência pode ser ajustado
manualmente.
c) Sua resistência não varia.
d) Nenhuma das anteriores.
5- O que diferencia um potenciômetro de um trimpot?
a) Os dois não possuem nenhuma diferença.
b) O trimpot não possui uma interface para o usuário comum, ou seja, sendo
assim, é ajustado normalmente por técnicos.
c) O potenciômetro é mais frágil.
d) Nenhuma das anteriores.
6- Qual é a tensão de trabalho de um led vermelho?
a) Entre 3V a 5V
b) Entre 1,8 a 2V
c) Entre 1V a 1,8V
d) Nenhuma das anteriores.
7- Sobre o capacitor eletrolítico podemos dizer que:
a) Não é polarizado.
b) É polarizado.
c) É polarizado, porém não tem problema se inverter a polarização.
d) Nenhuma das anteriores.
8- Sobre os botões push button Arduino do tipo NA, podemos dizer que:
a) São normalmente abertos.
b) São normalmente fechados.
c) Deixam passar corrente sem serem pressionados.
d) Nenhuma das anteriores.
9- Sobre os botões push button Arduino do tipo NF, podemos dizer que:
a) São normalmente abertos.
b) São normalmente fechados.
c) Deixam passar corrente sem serem pressionados.
d) Nenhuma das anteriores.
23
10- Conforme o circuito abaixo, por quê o LED não acende?
a) Está invertida a polarização dos jumpers de alimentação do circuito.
b) Não há nenhum problema com o circuito.
c) Faltou colocar um jumper entre as colunas 28 e coluna 27, pois o circuito
está aberto.
d) Nenhuma das anteriores.
24
TEMA 3: INTRODUÇÃO AOS MICROCONTROLADORES
Os microcontroladores facilitaram a montagem e atualização de circuitos
eletrônicos. Antes deles, era necessário montar um circuito específico com
resistores, capacitores, indutores, transistores, chaves mecânicas e dentre outros.
O problema é que o circuito eletrônico era montado somente com uma finalidade, e
caso fosse necessário atualizar ou aplicar alguma melhoria, seria necessário retirar
componentes que estivessem soldados nas placas de circuito impresso. Já com a
utilização dos microcontroladores, o processo de melhoria, correção ou atualização
é muito mais fácil, basta apenas alterar o código fonte que será executado pelos
microcontroladores.
Dentro dos microcontroladores haverá no mínimo: uma CPU, memória e
circuitos de entrada e saída. Também podem ser conhecidos como controladores
embarcados, pois eles são embutidos dentro dos circuitos eletrônicos de aparelhos
que eles controlam. Os microcontroladores normalmente são programados com a
linguagem Assembly, porém muitos já podem ser programados através da
linguagem C, C++, BASIC e PASCAL.
Os principais fabricantes de microcontroladores são: Atmel, Microchip, Intel,
Frescale e dentre outras.
25
A CPU (Unidade Central de Processamento) dos microcontroladores pode
variar de 8,16 ou 32 bits, dependendo do modelo e fabricante. A CPU é
responsável pelas operações matemáticas e lógicas (AND, OR e NOT).
Dentro dos microcontroladores temos dois tipos de memória, a memória de
programa e a memória de dados. A memória de programa armazena o código
fonte escrito pelo programador, já a memória de dados armazena as informações
temporárias que são trocadas entre a CPU e os contadores e/ou registradores.
A tensão de trabalho dos microcontroladores normalmente é de 5 volts, mas
há microcontroladores que podem trabalhar com tensões de 2 volts até 6 volts.
Boa parte dos pinos de um microcontrolador são usados para a entrada e
saída de dados, também conhecidos como (Ports), sendo que um microcontrolador
pode ter de 8 até 100 pinos.
O microcontrolador ATmega328
O microcontrolador ATmega328 é um microcontrolador da Atmel
Corporation, trata-se de um microcontrolador do tipo AVR, a sigla AVR significa
Advanced Virtual RISC, RISC significa Reduced Instruction Set Computer, ou seja,
um computador com um conjunto reduzido de instruções. Contém 28 pinos, sendo
que 23 pinos são para entrada e saída de dados. Possui uma CPU de 8 bits do tipo
AVR e memória flash de 32kB. Alguns modelos de Arduino utilizam esse
microcontrolador, como por exemplo o Arduino Uno.
26
Abaixo temos uma imagem de uma placa do Arduino Uno R3, em destaque
o microcontrolador ATmega328.
Resumo
Os microcontroladores são os cérebros dos equipamentos que eles
controlam, eles recebem um software que pode ser atualizado em caso de
necessidade. Sem o software o microcontrolador não terá nenhuma função.
Existem vários tipos de microcontroladores, o Arduino Uno R3 utiliza o
microcontrolador ATmega328.
Questões
1- Um microcontrolador em sua arquitetura terá no mínimo:
a) Uma CPU.
b) Uma CPU e memória.
c) Uma CPU, memória e circuitos de entrada e saída.
d) Nenhuma das anteriores.
27
2- Os pinos de entradas e saídas de um microcontrolador também são conhecidos
como:
a) Torks.
b) Ports.
c) Forks.
d) Nenhum das anteriores.
3- No microcontrolador existe uma memória que armazena o programa escrito pelo
programador, o nome dessa memória é:
a) Memória de dados.
b) Memória de programa.
c) Memória volátil.
d) Nenhuma das anteriores.
4- No microcontrolador existe uma memória que armazena as informações
temporárias que são trocadas entre a CPU e os contadores e/ou registradores, o
nome dessa memória é:
a) Memória de dados.
b) Memória de programa.
c) Memória volátil.
d) Nenhuma das anteriores.
5- Normalmente qual é a tensão de trabalho dos microcontroladores?
a) 1V
b) 7V
c) 5V
d) 16V
6- Sobre o microcontrolador ATmega328, podemos dizer que:
a) É do tipo PCR.
b) É do tipo AVY.
c) É do tipo AVR.
d) Nenhuma das anteriores.
7- Sobre o microcontrolador ATmega328, podemos dizer que:
a) Possui CPU de 4 bits.
b) Possui CPU de 2 bits.
c) Possui CPU de 128 bits.
d) Possui CPU de 8 bits.
28
8- Selecione a alternativa cuja a linguagem não é uma linguagem de programação
para microcontroladores.
a) C++
b) C
c) HTML
d) Assembly
9- A memória flash do microcontrolador ATmega328 é de:
a) 64kB
b) 16kB
c) 8kB
d) 32kB
10- Empresa responsável pela fabricação dos microcontroladores da família
ATMega:
a) Microchip.
b) Intel.
c) Frescale.
d) Nenhuma das anteriores.
29
TEMA 4: ARDUINO - HARDWARE
O Arduino é uma placa de prototipagem eletrônica de hardware livre,
lançado em 2005, na cidade de Ivrea, Itália. Seus idealizadores o criaram com o
intuito de criar uma placa de prototipagem eletrônica que fosse de baixo custo e de
fácil utilização. Desde então ele é a porta de entrada de muitos estudantes para o
mundo da eletrônica, robótica e programação.
Atualmente o Arduino possui diversas placas como: Arduino Uno, Arduino
Mega 2560, Arduino Leonardo, Arduino Due, Arduino Mega ADK, Arduino Nano,
Arduino Pro Mini e o Arduino Esplora. O Arduino também pode ter a sua
capacidade expandida através das Shields, que são placas de expansão como
módulo bluetooth, LCD Shield com Teclado, Protoshield, Base Shield Groove,
Motor Shield L293D e dentre outros. Esses módulos são encaixados no Arduino.
A seguir veremos mais detalhes sobre as placas do Arduino.
30
Placas do Arduino
Arduino Mega 2560
É um Arduino que utiliza o microcontrolador ATMega2560, possui 54 portas
digitais, sendo que 15 delas podem ser usadas como PWM, e possui 15 portas
analógicas.
Arduino Leonardo
É muito parecido com o Arduino Uno, porém utiliza o microcontrolador
ATMega32u4. Ele possui 20 portas digitais, sendo que 7 delas podem ser
utilizadas como PWM, e possui 12 portas analógicas.
31
Arduino Due
Placa com maior capacidade de processamento, utiliza o microcontrolador
ARM de 32 bits e 512kB de memória. Possui 54 portas digitais, das quais 12
podem ser usadas como PWM, além disso possui 12 portas analógicas.
Arduino Mega ADK
Utiliza o microcontrolador ATMega2560, possui um conector USB específico
para a conexão com celulares que utilizam o sistema operacional Android. Possui
54 portas digitais, sendo que 15 delas podem ser usadas como PWM, e também
possui 16 portas analógicas.
32
Arduino Nano
É uma versão menor, utiliza o microcontrolador ATMega328. Não possui um
conector de alimentação externa como as outras placas, sendo alimentada
diretamente através da porta USB. É recomendado para projetos compactos.
Possui 32kB de memória.
Arduino PRO Mini
O Arduino PRO Mini é uma placa compacta, recomendada para projetos que
não irão necessitar de atualizações constantes. Possui 14 portas digitais, sendo
que 6 delas podem ser utilizadas como PWM. Além disso possui 8 portas
analógicas.
33
Arduino Esplora
Possui diversos sensores em sua construção, tais como: buzzer,
potenciômetro deslizante, microfone, joystick analógico e dentre outros.
Arduino Uno
Trata-se da placa mais popular do Arduino, pois é indicada para iniciantes.
Os exemplos e projetos que serão dados na apostila terão como base o Arduino
Uno.
34
A placa Arduino Uno possui 14 portas digitais, sendo que 6 delas podem ser
utilizadas como PWM. Ela ainda conta com 6 portas analógicas. A placa do
Arduino Uno pode ser alimentada através de uma fonte de alimentação externa
que deverá ter entre 7V a 12V ou poderá ser alimentada através da porta USB.
Para projetos simples não há problema em utilizar a porta USB como alimentação
do Arduino, porém para projetos que necessitem uma corrente elétrica maior como
por exemplo que envolvam motores, é recomendado que a alimentação seja feita
através de uma fonte de alimentação externa.
O Microcontrolador ATmega328 é nele onde todo o processamento de dados
é feito. Ele possui basicamente uma CPU com clock de 20 MHz, 8 bits e 32 kB de
memória flash.
Sensores e Atuadores
Sensores
Sensores são componentes eletrônicos que possuem a capacidade de
perceber variações no ambiente (luz, presença, chamas e etc) e por conta disso
geram sinais elétricos com o objetivo de alertar ou sinalizar alguma ocorrência. Por
exemplo, um sensor de presença poderá gerar um sinal elétrico para algum circuito
que fará com que uma lâmpada se acenda. Existem vários tipos de sensores, cada
um para uma finalidade, por exemplo: senso de presença, sensor de temperatura,
sensor de gases, sensor de corrente elétrica, LDR (luminosidade) e dentre outros.
Boa parte dos sensores do Arduino estão em forma de módulos, ou seja,
para utilizá-los basta conectá-los ao Arduino.
Sensor de Presença PIR - HC-SR501
35
Atuadores
Os atuadores, ao contrário dos sensores, recebem um sinal elétrico,
hidráulico ou pneumático e convertem em energia mecânica. Um bom exemplo,
são os motores que convertem energia elétrica em energia mecânica.
Motor de passo DC
Módulos de expansão (Shields)
Os módulos de expansão do Arduino, também conhecidos como Shields,
são placas que irão aumentar a capacidade do Arduino, e cada placa possui uma
finalidade. Elas são projetadas para ser encaixadas diretamente no pinos da placa
do Arduino. Seguem abaixo alguns módulos do Arduino.
Módulo RFID
Através do módulo RFID, é possível o desenvolvimento de um projeto para
controle de acesso de pessoas.
36
Módulo Ultrassom
O módulo ultrassom, é adequado para projetos onde é necessário medir a
distância do equipamento com algum outro objeto, assim dependendo da distância
ocorre alguma ação, por exemplo o carrinho para de andar, ou campainha emite
algum som e assim por diante.
Módulo Giroscópio (MPU)
O objetivo dele é de detectar um movimento do Arduino, por exemplo,
imagine um robô, este módulo indicará a posição dele, para saber se ele tombou
ou não.
Módulo Relé
Relés são chaves eletromecânicas, após receberem um sinal elétrico ele irá
fechar ou abrir um circuito externo, por exemplo, poderá acender uma lâmpada.
37
Resumo
Verificamos que existem diversas placas do Arduino, as placas variam das
simples com poucas portas digitais, PWM e analógicas até mesmo as com maiores
capacidades de processamento e com um número alto de portas. O Arduino Uno é
o mais popular dentre todas as placas de Arduino, pois ele é feito para iniciantes.
Esta será a placa que usaremos nos exemplos da apostila. Os sensores e
atuadores prestam um papel fundamental para a criação de projetos de
automação. Muitos sensores são embutidos em módulos, assim facilitando a
utilização deles. Os módulos são placas de expansão que aumentam a capacidade
do Arduino, cada módulo possui uma finalidade diferente.
Questões
1- O Arduino Uno pode ser alimentado através:
a) Do conector jack fêmea e/ou porta USB.
b) Somente através do conector jack fêmea.
c) Somente pela porta USB.
d) Nenhuma das anteriores.
2- A tensão de alimentação externa do Arduino feita através de uma fonte, não
deve ultrapassar:
a) 5V
b) 7V
c) 12V
d) 9V
3- O Arduino Due, possui quantas portas digitais?
a) 20.
b) 15
c) 14
d) 54
4- São os elementos finais de um de controle, atuando sobre uma variação do
processo em resposta ao comando recebido, estamos falando de:
a) Sensores
b) Atuadores
c) Controladores
d) Processadores
38
5- O módulo RFID para Arduino permite:
a) A verificação se a placa do Arduino foi movimentada.
b) A medição da distância do Arduino com algum outro objeto.
c) A medição da temperatura.
d) Nenhuma das anteriores.
6- O módulo Relé para Arduino permite:
a) A verificação se a placa do Arduino foi movimentada.
b) A medição da distância do Arduino com algum outro objeto.
c) O acionamento de um circuito externo.
d) Nenhuma das anteriores.
7- O módulo Giroscópio para Arduino permite:
a) A verificação se a placa do Arduino foi movimentada.
b) A medição da distância do Arduino com algum outro objeto.
c) O acionamento de um circuito externo.
d) Nenhuma das anteriores.
8- Um motor é um:
a) Sensor.
b) Atuador.
c) Controlador.
d) Processador.
9- O Arduino Nano é indicado para:
a) Projetos compactos.
b) Qualquer projeto.
c) Para um projeto que necessita de uma grande quantidade de portas digitais.
d) Nenhuma das anteriores.
10- Quantas portas digitais possui o Arduino Uno?
a) 10
b) 9
c) 15
d) 14
39
TEMA 5: O IDE DO ARDUINO
O IDE (Integrated Development Environment), trata-se de um ambiente de
desenvolvimento integrado, é um software que os desenvolvedores utilizam para
criar programas. Um IDE possui diversas ferramentas que auxiliam os
programadores, como por exemplo, um editor de texto que realça a sintaxe das
linguagens de programação com cores diferentes e um debugger onde o
desenvolvedor pode executar o seu código e caso haja algum problema o IDE irá
mostrar em qual linha está o bug do código.
O Arduino IDE é o ambiente de desenvolvimento do Arduino, através dele é
possível criar programas e gravá-los na placa do Arduino. Os programas feitos na
IDE do Arduino são gravados diretamente nos microcontroladores das placas do
Arduino. O IDE do Arduino pode ser baixado através do site oficial, ou pode ser
utilizado na versão online disponibilizada também no site.
40
Instalação do IDE Arduino
1- Acesse o site oficial do Arduino:
https://www.arduino.cc/
2- No menu principal clique em “Software”.
3- Faça o download do instalador conforme o sistema operacional do seu
computador.
41
4- Nesta parte basta clicar em “Just download”, que significa “apenas faça o
download."
5- Após abrir o arquivo do instalador do IDE do Arduino, clique em “I Agree”.
42
6- Nesta tela basta clicar em “Next”.
7- Nesta tela clique em “Install”.
43
8- Após a conclusão clique em “Close”.
Configuração
1- Após a instalação, abra o Arduino clicando no ícone do programa que
encontra-se na área de trabalho do seu computador. Aparecerá a tela abaixo:
44
As linhas de código que aparecem, já vem por padrão, e serão utilizadas em
nossos programas. Na próxima disciplina, Programação para Sistemas
Embarcados, vocês aprenderão em detalhes o que significam essas linhas de
código.
2- Conecte a placa do Arduino Uno ao seu computador através da porta USB,
utilizando o cabo USB que veio junto com a placa do Arduino.
3- Clique em Ferramentas => Placa: => Arduino Uno, poderia ser outra placa,
mas no nosso caso será a placa Arduino Uno, que é a placa que usaremos nesta
apostila.
45
4- Clique em Ferramentas => Porta: “COM (Arduino Uno)” => COM (Arduino
Uno), a numeração da porta COM onde está configurada a placa do Arduino irá
variar de computador para computador.
5- Agora vamos fazer um testar se o IDE e a placa do Arduino estão funcionando
normalmente, basta clicar em: Arquivo => Exemplos => 01. Basics => Blink.
46
6- Clique no botão carregar para que o IDE envie e faça a gravação do código
fonte (sketch) do programa de exemplo na placa (microcontrolador) do Arduino.
7- Verifique se o pequeno led da própria placa do Arduino está piscando, se sim, o
teste foi executado com sucesso.
Abaixo segue mais detalhes das principais ferramentas do IDE Arduino:
47
Resumo
O IDE é um ambiente de desenvolvimento integrado, que possui diversas
ferramentas para auxiliar o programador. No Arduino IDE é possível criarmos os
programas que serão gravados na placa do Arduino. O download do instalador do
Arduino IDE deve sempre ser feito através do site oficial do Arduino, sendo que o
processo de instalação e configuração é simples e intuitivo.
Questões
1- O que é um IDE?
a) É um microcontrolador.
b) É uma linguagem de programação.
c) É um ambiente de desenvolvimento integrado.
d) Nenhuma das anteriores.
2- Podemos baixar o IDE do Arduino de outros sites que não seja o oficial do
Arduino?
a) Sim, pois o importante é ter o instalador, não importa de qual site.
b) Sim, não tem problema algum.
c) Não, por segurança todo software deve ser baixado do site oficial.
d) Nenhuma das anteriores.
3- Existe uma versão online do IDE Arduino?
a) Sim, no próprio site oficial tem uma versão online do IDE do Arduino.
b) Não, no site oficial só há a opção para fazer o download do instalador do IDE
do Arduino.
c) Não, a versão online ainda não está disponível para o público.
d) Nenhuma das anteriores.
4- Podemos dizer que o IDE do Arduino é multiplataforma?
a) Não, só existe versão para Windows.
b) Não, só existe versão para Mac OS.
c) Sim, existem versões para Windows, Mac Os e Linux.
d) Nenhuma das anteriores.
48
5- Após a instalação do IDE do Arduino, não é necessário fazer nenhuma
configuração, basta começar a programar. Podemos dizer que essa afirmação
está:
a) Correta, após a instalação ,o IDE já estará configurado corretamente.
b) Errada, pois após a instalação devemos configurar a placa do Arduino que
iremos utilizar.
c) Errada, pois após a instalação devemos configurar a porta de comunicação
que será usada pela Arduino.
d) Errada, pois após a instalação devemos configurar a placa do Arduino que
iremos usar e também a porta de comunicação que será utilizada pelo
Arduino.
6- Para configurar o IDE Arduino para a placa do Arduino que iremos utilizar,em
qual opção do menu está disponível essa opção?
a) Arquivo
b) Editar
c) Sketch
d) Ferramentas
7- Para configurar a porta de comunicação do Arduino que iremos utilizar, em qual
opção do menu está disponível essa opção?
a) Arquivo
b) Ajuda
c) Editar
d) Nenhuma das anteriores
8- Sabemos que o IDE Arduino já vem com vários códigos de programas como
exemplo, em qual opção do menu está disponível essa opção?
a) Arquivo
b) Editar
c) Sketch
d) Ferramentas
49
9- A ferramenta da imagem abaixo possui qual função?
a) Carregar o sketch na placa do Arduino.
b) Criar um novo sketch.
c) Salvar o sketch.
d) Compilar o sketch em busca de erros no código.
10- A ferramenta da imagem abaixo possui qual função?
a) Carregar o sketch na placa do Arduino.
b) Criar um novo sketch.
c) Salvar o sketch.
d) Compilar o sketch em busca de erros no código.
50
INTRODUÇÃO - PROGRAMAÇÃO DE MICROCONTROLADORES
A programação de sistemas embarcados tem crescido muito nos últimos
anos, trata-se de um mercado muito promissor. Os sistemas embarcados estão em
muitas coisas do nosso cotidiano, como por exemplo: em aviões, carros,
elevadores, equipamentos médicos e etc.
O Arduino é uma plataforma de prototipagem eletrônica, utilizada para fins
didáticos com o intuito de ser a porta de entrada dos estudantes para a área de
programação, eletrônica e robótica.
Nesta disciplina vocês aprenderão a desenvolver programas para
microcontroladores, especificamente para microcontroladores do Arduino. Para
isso, vocês aprenderão sobre: variáveis, laços de repetição, condicionais, funções,
bibliotecas e dentre outras.
51
TEMA 1: INTRODUÇÃO À LINGUAGEM DO ARDUINO
A linguagem utilizada para criar projetos para o Arduino, é a linguagem
baseada em C++. Ela foi adaptada pelos seus idealizadores para facilitar o
entendimento daqueles que não conhecem programação.
Algoritmo
Um algoritmo é um conjunto de instruções de um programa, sendo que todo
programa possui um algoritmo. Podemos fazer uma analogia com uma receita de
bolo, onde o cozinheiro deverá seguir à risca as instruções da receita, então a
receita de bolo também pode ser vista como um algoritmo.
52
O IDE do Arduino
Toda vez que um projeto é criado no IDE do Arduino, uma estrutura de
código padrão é adicionada automaticamente no Editor, além de criar um nome
para o seu projeto, o nome automático que é gerado recebe a palavra sketch_
+mês e dia da criação, o nome poderá ser alterado caso seja necessário. Atenção
as linhas que fazem parte da estrutura básica do projeto, não podem ser
apagadas, ou seja, as funções setup() e loop() são indispensáveis para o
funcionamento do programa.
Segue abaixo uma tela de exemplo do Editor do IDE do Arduino:
53
A palavra void escrita antes das funções, significa que essas funções não
retornam nenhum valor. Os parênteses vazios nas duas funções significa que elas
não possuem nenhum parâmetro.
Importante ressaltar que as linhas de código que ficam dentro da função
setup() serão executadas uma única vez. Já as linhas de código que ficam dentro
da função loop() serão executadas indefinidamente até que a placa seja desligada
ou outro comando interrompa a execução.
Exemplo:
Neste exemplo utilizaremos saída de dados através do monitor serial. Para
utilizarmos monitor serial é necessário que a placa do Arduino esteja conectada ao
computador via cabo USB.
Para mostrarmos alguma coisa em tela via monitor serial, podemos utilizar
as funções Serial.print() ou Serial.println(), a única diferença entre elas é que a
função Serial.println() pula uma linha. Porém, para utilizá-las, devemos primeiro
carregar a função Serial.begin() dentro da função setup(). O valor de 9600 é
referente à taxa de transmissão de dados pela porta USB do computador.
Faça a compilação do código acima e depois faça o upload do código para a
placa do Arduino. Após fazer isso, vá até Ferramentas => Monitor Serial.
54
Conforme a tela abaixo, note que a frase “Olá mundo!”, foi executada apenas
uma única vez:
Agora vamos testar o código abaixo, note que mantivemos o carregamento da
função Serial.begin() dentro da função setup(), a diferença é que a função
Serial.println() foi colocada na dentro da função loop().
Após compilar o código, carregue o código na placa do Arduino, vá
novamente até o monitor serial.Como a função Serial.println() foi colocada dentro
da função loop(), note que a mensagem “Olá mundo!” está sendo exibida num
looping infinito (sem fim).
55
Comentários
Note que na linha 1 do nosso código há um comentário, as linguagens de
programação possuem os comentários, que servem unicamente para explicar ou
documentar o código para os programadores entenderem com mais facilidade o
que o código faz. Trata-se de uma boa prática comentar o seu código,
independente da linguagem de programação ou complexidade do programa. Na
linguagem do Arduino os comentários são feitos através dos caracteres // para
comentar somente uma linha ou /* para comentar mais de uma linha, exemplo:
/*Aqui dentro ficará o comentário */.
Resumo
A linguagem do Arduino é baseada na linguagem C++ com algumas
adaptações para facilitar o aprendizado daqueles que são leigos em
programação.O código da Arduino possui uma estrutura básica composta pelas
funções setup() e loop(), ambas são indispensáveis para o funcionamento do
programa. As linhas de código que ficam dentro da função setup() serão
executadas somente uma única vez. Já as linhas que ficam dentro da função loop()
serão executadas indefinidamente até que a placa do Arduino seja desligada,
então a função loop serve como um laço de repetição. A função Serial.println() é
uma função de saída de dados, os mesmos poderão ser visualizados no monitor
serial.
56
Questões
1- Toda linha de código do programa do Arduino deve ser finalizado com:
a) ;
b) .
c) :
d) !
2- Todo programa feito para Arduino possui uma estrutura básica formada pelas
funções:
a) setup() e Serial.println()
b) loop() e Serial.println()
c) setup() e Serial.begin()
d) setup() e loop()
3- Sobre a função setup() podemos dizer que:
a) O código que está dentro dele será executado indefinidamente.
b) O código que está dentro dele será executado uma única vez.
c) É uma função totalmente dispensável.
d) Nenhuma das anteriores.
4- Sobre a função loop() podemos dizer que:
a) O código que está dentro dele será executado indefinidamente.
b) O código que está dentro dele será executado uma única vez.
c) É uma função totalmente dispensável.
d) Nenhuma das anteriores.
5- A função Serial.begin() serve para:
a) Utilizarmos as funções de tempo.
b) Utilizarmos as funções matemáticas.
c) Utilizarmos as funções Serial.println() ou Serial.print()
d) Nenhuma das anteriores.
6- Para utilizar o monitor serial precisamos:
a) Conectar a placa do Arduino ao computador através da porta USB.
b) Basta abrir o monitor serial disponível no IDE do Arduino, não há
necessidade da placa do Arduino estar conectada ao computador.
c) Tanto faz conectar ou não a placa do Arduino ao computador, o monitor
serial irá funcionar de qualquer forma.
d) Nenhuma das anteriores.
57
7- Selecione a alternativa cujo o comentário foi criado corretamente:
a) ///Primeiro programa.
b) /Primeiro programa.
c) //Primeiro programa.
d) Nenhuma das anteriores.
8- Qual valor devemos colocar dentro dos parênteses da função Serial.begin() ?
a) 5000
b) 4200
c) 9000
d) 9600
9- Sobre os comentários nos programas, podemos dizer que:
a) Não obrigatórios e são dispensáveis para programadores experientes.
b) Não são obrigatórios e são dispensáveis para qualquer tipo de programador.
c) Não são obrigatórios, mas é uma boa prática, é recomendável mesmo que o
programador seja experiente.
d) Nenhuma das anteriores.
10- O comentário feito com // é utilizado para comentar:
a) Apenas uma linha.
b) Apenas duas linhas.
c) Apenas três linhas.
d) Nenhuma das anteriores.
58
TEMA 2: VARIÁVEIS
As variáveis posições na memória do computador para armazenar valores,
que podem ser: números inteiros, números reais, caracteres, booleanos e dentre
outros. No Arduino as variáveis são armazenadas na memória que fica dentro do
microcontrolador.Esses valores são armazenados durante a execução do
programa e são descartados após o desligamento da placa.
Variáveis globais e locais
Globais
As variáveis globais são variáveis que podem ser utilizadas por todo o
algoritmo.
59
Locais
Já as variáveis locais, são variáveis utilizadas somente numa parte do
algoritmo, por exemplo, dentro de funções. Sendo assim, a sua utilização é mais
limitada, porém muito útil para evitar confusões.
Tipos de variáveis
Inteiros
A variável do tipo inteiro irá armazenar números que não possuem casa
decimal.
Exemplo:
Números reais
As variáveis desse tipo esperam armazenar números que possuem casas
decimais após a vírgula (ou ponto).
Exemplo:
60
Caractere
As variáveis do tipo caracter, deverão armazenar somente letras e/ou
palavras. Números também podem ser armazenados, porém serão interpretados
como palavras e não como números.
Exemplo 1: Criando uma variável do tipo inteiro (int)
Para criarmos uma variável do tipo inteiro primeiro escrevemos int e depois
o nome da variável, veja as linhas 2,3 e 4 do código abaixo, nela declaramos três
variáveis a,b e soma:
No código, a atribuição de valores para as variáveis a,b e soma, são feitas
nas linhas 9,10 e 11. Note que a atribuição de um valor para uma variável é feita
através do sinal de = (igual).
61
Segue abaixo o restante do programa:
Segue abaixo o resultado final no monitor serial:
62
Operadores aritméticos
Segue abaixo os operadores aritméticos que podem ser utilizados para
cálculos matemáticos envolvendo as variáveis.
Exemplo 2: Criando uma variável do tipo real (float)
Para criarmos uma variável do tipo real (float) primeiro escrevemos float e
depois o nome da variável, veja as linhas 2,3 e 4 do código abaixo, nela
declaramos três variáveis a,b e soma:
63
Segue abaixo o restante do programa, note que os números reais são atribuídos
nas linhas 9,10 e 11.
Segue abaixo o resultado final no monitor serial:
64
Exemplo 3: Criando uma variável do tipo caractere
Para criarmos uma variável do tipo caractere (char) primeiro escrevemos
char e depois o nome da variável, veja a 2 do código abaixo, nela declaramos a
variável chamada letra. Na linha 7 é atribuída a letra “a” para a variável “letra”.
Segue abaixo o resultado final no monitor serial:
65
Alguns exemplos de nomes inválidos para variáveis:
● while - Não use palavras reservadas da linguagem
● 2x - Não inicie o nome de uma variável com um número;
● acende led - não use espaços em branco entre duas palavras ou deixe
todas as palavras juntas ou utilize o underscore _, exemplo: acendeLed ou
acende_led;
● você - não utilize caracteres especiais como acentos em nomes de
variáveis.
Resumo
As variáveis são espaços reservados na memória, cujo objetivo é de
armazenar algum valor. O tipo da variável irá variar do que ela irá armazenar, por
exemplo uma variável que irá armazenar um número inteiro deverá ser declarada
com o tipo inteiro. Os valores armazenados nas variáveis serão excluídos após o
desligamento da placa do Arduino.
Questões
1- Qual alternativa declarou corretamente uma variável do tipo inteiro?
a) inteiro temperatura;
b) int temperatura;
c) float temperatura;
d) char temperatura;
2- Qual alternativa declarou corretamente uma variável do tipo real?
a) real distancia;
b) float distancia;
c) int distancia;
d) char distancia;
3- Qual alternativa declarou corretamente uma variável do tipo caractere?
a) caractere letra;
b) carac letra;
c) char letra;
d) character letra;
66
4- Qual é o problema do código abaixo?
a) Não há nenhum problema.
b) Todas as variáveis deveriam ser do tipo float, pois armazenam números
reais.
c) Apenas a variável soma deveria ser do tipo float.
d) Nenhuma das anteriores.
5- Qual é o operador aritmético de multiplicação?
a) x
b) X
c) %
d) *
6- Qual é o operador aritmético que retorna o resto de uma divisão?
a) /
b) //
c) /*
d) %
67
7- Qual variável foi criada corretamente?
a) int botao = 0;
b) int botão = 0;
c) int botão ligado = 0;
d) int 1botão = 0;
8- É possível realizar operações entre variáveis que possuem números inteiros e
números reais, porém se o resultado for um número real, a variável que receberá o
resultado precisa ser do tipo real. Esta afirmação é:
a) Verdadeira
b) Falsa
9- É possível declarar uma variável e ao mesmo tempo atribuir um valor para ela?
a) Sim.
b) Não.
10- Os valores armazenados nas variáveis duram por quanto tempo?
a) Duram por 2 horas.
b) Duram por 1 dia.
c) Duram até os valores serem alterados pelo programa e/ou após serem
apagadas quando o Arduino for desligado.
d) Nenhuma das anteriores.
68
TEMA 3: CONDICIONAIS
As condicionais são condições impostas para que algo aconteça, ou seja,
espera-se que uma condição seja verdadeira ou falsa, e para cada uma das
situações o programa fará alguma ação especificada pelo programador. As
condicionais são partes fundamentais nos programas, pois devemos tentar prever
as situações que podem ocorrer, por exemplo, imagine que num determinado lugar
exista uma automatização criada para ligar o ar condicionado quando a
temperatura ambiente for maior ou igual a 26ºC. Então, notem que há uma
condição para o ar condicionado ser ligado, ou seja, temperatura maior ou igual, se
a condição for falsa o ar condicionado permanecerá desligado.
69
A condicional é feita utilizando o if, funciona da seguinte forma:
if (condição)
{
Ação caso a condição seja verdadeira.
}
else
{
Ação caso a condição seja falsa.
}
A palavra if significa se, e a palavra else significa senão.
Exemplo:
Criamos uma variável do tipo float chamada temperatura :
Dentro da função setup(), iremos atribuir o número 26 para a variável
temperatura.
70
Na linha 11 observe que utilizamos um if cuja a condição é se a temperatura for
maior ou igual a 26, caso essa condição seja verdadeira irá aparecer uma
mensagem: “O ambiente está quente!”, caso seja falsa aparecerá uma
mensagem:”O ambiente está com uma temperatura agradável”.
Restante do programa:
71
Resultado final no monitor serial.
Operadores de comparação
Os operadores de comparação são essenciais para as condicionais, abaixo
segue os operadores de comparação mais utilizados:
Operadores booleanos
Os operadores booleanos permitem que utilizemos mais de uma condição
dentro de uma condicional, os mais utilizados são os operadores && (e) e o || (ou).
72
Exemplo:
Declaramos duas variáveis como do tipo booleana, a variável janela_aberta
e porta_aberta e atribuímos o valor true (verdadeiro).
Note que o algoritmo possui uma condicional que faz duas verificações, caso
alguma das variáveis janela_aberta ou porta_aberta seja igual a true, irá
aparecer uma mensagem: “Alguém entrou na casa!”.
Resumo
Utilizamos condicionais todos os dias, elas são muito importantes para
tomadas de decisão. Por exemplo, se alguém pensar: “se fizer sol amanhã eu irei
para a praia”, então ir para a praia está condicionado à condição de fazer sol no dia
seguinte. Na programação utilizamos as condicionais para prever cenários, e uma
tomada de ação para cada cenário.
73
Questões
1- Com base no código abaixo, assinale a alternativa correta:
a) Aparecerá a mensagem: “A é maior que zero”.
b) Aparecerá a mensagem: “A é igual a zero”.
c) Aparecerá a mensagem: “A é menor que zero”.
d) Não aparecerá nenhuma mensagem.
2- Com base no código abaixo, assinale a alternativa correta:
a) Aparecerá a mensagem: “A é maior que zero”.
b) Aparecerá a mensagem: “A é igual a zero”.
c) Aparecerá a mensagem: “A é menor ou igual a zero”.
d) Não aparecerá nenhuma mensagem.
74
3- Há um limite de condições que podemos aplicar à uma condicional “if” quando
utilizamos operadores booleanos?
a) Podemos utilizar no máximo duas condições.
b) Podemos utilizar no máximo três condições.
c) Podemos utilizar no máximo quatro condições.
d) Nenhuma das anteriores.
4- O que significa a palavra “if” ?
a) Senão
b) Se
c) Talvez
d) Então
5- O que significa a palavra “else”?
a) Se
b) Talvez
c) Então
d) Senão
6- É obrigatório utilizarmos o “else” quando criamos uma condicional com o “if”?
a) Sim, é obrigatório.
b) Sim, é obrigatório, principalmente se utilizarmos operadores booleanos.
c) Não, é opcional, vai depender do programa.
d) Nenhuma das anteriores.
7- Qual é a função do operador “==” no código abaixo?
a) Comparar/verificar se as variáveis são iguais a “true”.
b) Atribuir o valor “true” para as variáveis.
c) Adiciona o valor “true” duas vezes para as variáveis,
d) Nenhuma das anteriores.
75
8- O operador “&&” significa:
a) ou
b) e
c) Não
d) Nenhuma das alternativas
9- O operador “||” significa:
a) e
b) ou
c) Não
d) Talvez
10- O operador “ != ” significa:
a) Igual
b) Maior
c) Menor
d) Diferente
76
TEMA 4: LAÇOS DE REPETIÇÃO
Os laços de repetição são muito utilizados num programa, muitas vezes
necessitamos que o programa repita várias vezes uma ou mais linhas de código
por alguma finalidade. É importante que o laço de repetição não fique em looping
infinito, para isso são utilizadas variáveis de controle a fim de evitar esse problema.
A função loop() já faz o trabalho de repetir as linhas de código que colocamos
dentro dela, porém não é possível configurá-la quantas vezes quisermos que ela
repita. Portanto, quando desejarmos estipular uma quantidade específica de
repetições das linhas de código, necessitamos utilizar os laços de repetição
específicos para essa tarefa. Os laços de repetição mais utilizados são o for() e o
while().
77
Laço de repetição for()
O laço de repetição “for”, que significa “para”, é um tipo de laço onde
definimos a quantidade de vezes que as instruções serão repetidas. Ele utiliza uma
variável de controle. Segue abaixo como é a estrutura do laço de repetição for():
for (início ; condição ; incremento)
{
Instrução 1;
Instrução 2;
Instrução 3;
…
}
Exemplo:
78
Resultado no monitor serial:
Note que o resultado são números de 1 até 10, graças ao laço de repetição
for() que auto-incrementa a variável “i” a cada repetição, o laço de repetição acaba
quando “i” é igual a 11.
Laço de repetição while()
While que significa enquanto, funciona da seguinte forma, enquanto a
condição for verdadeira as instruções do laço serão repetidas. Segue abaixo como
é a estrutura do laço de repetição while():
while (condição)
{
Instrução 1;
Instrução 2;
Instrução 3;
. . .
}
79
Exemplo:
Note que na linha 9, a variável “i” que é a variável de controle do laço de
repetição while(), é inicializada com o valor 1. Por isso, o laço de repetição é
executado, pois “i” é menor que o número 5. Note que o laço é executado,
enquanto “i” for menor ou igual a 5. Note na linha 14 que a variável de controle “i” é
auto-incrementada, sem não houvesse esse auto-incremento dentro do laço de
repetição, o programa ficaria em looping infinito.
80
Resultado no monitor serial:
Resumo
Verificamos que os laços de repetição for e while, são importantes quando
desejamos que as instruções sejam repetidas numa determinada quantidade de
vezes. Não há um laço de repetição melhor do que outro, cada um pode ser
utilizado para uma finalidade e afinidade do programador.
Questões
1- No laço de repetição “for” é possível definirmos quantas vezes ele irá repetir?
a) Sim, mas até 5 vezes.
b) Sim, mas até 10 vezes.
c) Sim, mas até 15 vezes.
d) Nenhuma das anteriores.
2- Sobre o início da variável de controle no laço de repetição “for”, podemos dizer
que:
a) O início deverá sempre ser igual a 1.
b) O início deverá sempre ser igual a 2.
c) Não é possível começar com o número 0.
d) Nenhuma das anteriores.
3- “For” significa:
a) Próximo
b) Passo
c) Para
d) Nenhuma das anteriores.
81
4- O que é looping infinito?
a) Quando o laço de repetição é executado mais de 100 vezes.
b) Quando o laço de repetição não inicia.
c) Quando o laço de repetição é executado algumas vezes e depois para.
d) Quando o laço de repetição fica repetindo sem parar.
5- O que significa “while”:
a) Para
b) Próximo
c) Enquanto
d) Nenhuma das anteriores.
6- Sobre o laço de repetição “while” podemos dizer que:
a) As instruções são executadas enquanto a condição for falsa.
b) As instruções são executadas enquanto a condição for verdadeira.
c) As instruções são executadas por até no máximo 10 vezes.
d) Nenhuma das anteriores.
7- Sobre o código abaixo podemos dizer que:
a) Não há nenhum erro.
b) O laço de repetição está em looping infinito.
c) Faltou fazer a variável ser auto-incrementada.
d) Nunca entrará no laço de repetição.
82
8- Sobre o código abaixo podemos dizer que:
a) Não há nenhum erro.
b) O laço de repetição está em looping infinito.
c) Faltou fazer a variável ser auto-incrementada.
d) Nunca entrará no laço de repetição.
9- Analisando o código abaixo, qual é o valor de “i” na última repetição?
a) 3
b) 5
c) 4
d) 6
83
10- Se já existe a função loop(), por qual motivo utilizaremos um laço de
repetição?
a) Porque a função loop() só repete até 20 vezes.
b) Porque a função loop() só repete até 100 vezes.
c) Porque a função loop() só repete até 10 vezes.
d) Nenhuma das anteriores.
84
TEMA 5: FUNÇÕES
As funções servem para guardarmos um bloco de código que poderá ser
reutilizado quando precisarmos. Para “alimentar” essas funções, precisamos
passar os dados à elas, mas existem funções que não precisam receber nenhum
dados, apenas basta chamá-las . Elas também servem para organizar melhor o
código fonte. Podemos ter funções que somente imprimirão em tela algum valor e
também teremos as funções que retornarão valores.As funções podem ser
chamadas em qualquer parte do código, inclusive dentro delas mesmas.
O programador pode criar novas funções ou em caso de necessidade utilizar
as funções predefinidas do Arduino.
85
Criando funções
Normalmente as funções são criadas antes da função setup(), segue abaixo
o exemplo de como criar uma função.
tipo_do_retorno nome_função (tipo variável1, tipo variável2)
{
Declaração de variáveis; (opcional)
Instrução 1;
Instrução 2;
. . .
return variável (opcional)
}
Caso a função retorne algum valor, logo ao criar uma função devemos
tipificar qual o tipo de valor que ela irá retornar, por exemplo imagine que a função
faça um cálculo e retorne um número real, então, o tipo do retorno da função deve
ser do tipo float. Funções que não retornam valores são o tipo void, em algumas
linguagens de programação esse tipo de função é chamada de procedimento.
Nomes de funções não devem possuir acentos e nem caracteres especiais.
As variáveis que são criadas dentro das funções são as variáveis locais, ou
seja, elas só serão reconhecidas dentro das funções que elas foram criadas. Jà as
variáveis criadas fora das funções são as variáveis globais que podem ser
utilizadas em qualquer parte do código.
Exemplo:
Neste primeiro exemplo, vamos criar uma função chamada “media” que irá
calcular a média aritmética entre duas notas. Esta função não irá retornar um valor,
ou seja, será uma função do tipo void. Ela irá receber duas variáveis do tipo float,
essas variáveis correspondem à duas notas.
86
Note que a função “media” possui 3 variáveis locais: n1,n2 e resultado.
A função “media” efetua o cálculo da média (linha 4) e depois são utilizados
condicionais para verificar se o aluno foi aprovado ou reprovado. Na linha 28 é
possível visualizar como a função média foi chamada, note que para chamar uma
função é necessário escrever o nome da função, e dentro dos parênteses é
possível enviar os valores das variáveis para a função.
87
Resultado no monitor serial:
Exemplo 2
Neste exemplo, o resultado final será o mesmo, porém a função fará o
cálculo e retornará o resultado do cálculo para função que fez a chamada. Então,
como a função “media” irá retornar um número real, devemos tipificar essa função
como float, conforme o exemplo abaixo:
88
Restante do programa:
Note na linha 19, que a variável “resultado” receberá o valor retornado pela
função “media”.
89
Resultado no monitor serial:
Funções predefinidas do Arduino
Existem várias funções predefinidas para o Arduino, desde funções
matemáticas até funções de controle de tempo de execução de um programa, elas
servem para facilitar o desenvolvimento de um programa, abaixo seguem as mais
utilizadas:
pinMode()
Este comando habilita uma determinada porta da placa do Arduino como
entrada (INPUT) ou saída de dados (OUTPUT)
Por exemplo, configurando a porta 4 como saída:
pinMode (4, OUTPUT);
digitalWrite()
Este comando irá determinar o estado lógico de uma determinada porta
baixo (LOW - 0V) ou nível alto (HIGH - 5V). Antes de utilizar esta função é
necessário primeiro utilizar a função pinMode() para configurar a porta como
entrada ou saída de dados.
Por exemplo vamos supor que desejamos acender um LED na porta 4,
fazemos o seguinte:
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);
90
digitalRead ()
Este comando serve para fazer a verificação do estado numa porta de
entrada, ou seja, se chegar 5V (nível alto) a função irá entender que trata-se do
estado 1 (número binário), caso ela receba 0V (nível baixo) entenderá que o
estado é 0 (número binário). Importante, a porta que será utilizada, deverá ser
configurada anteriormente como entrada através da função pinMode():
PinMode(8,INPUT)
tensao = digitalRead(8)
analogWrite ()
Este comando faz uma determinada porta enviar um sinal PWM (Pulse Width
Modulation ou Modulação por Largura de Pulso), é uma forma de fazer com que a
porta simule uma saída analógica. As portas que podem ser utilizadas como PWM
possuem o sinal de ~ na frente do pino no Arduino. A maioria dos Arduinos não
possuem saídas analógicas e utilizam as portas que podem utilizar PWM para esse
fim.Trata-se de uma onda quadrada que oscila, mantendo-se em nível alto dado
um período, essa variação ocorre dentro da faixa de 0V a 5V.
Acima temos uma representação do sinal gerado pela porta PWM, o atributo valor
em 64, 128 e 196, o que corresponde a pulsos com largura temporal de 25%, 50%
e 75% do período, respectivamente.
91
delay():
Utilizado para retardar a execução de alguma linha de código do programa,
por exemplo, vamos que deseja retardar 2 segundos, então o comando será:
delay(2000)
Note que o número 2000 representa 2000 milissegundos, ou seja, 2 segundos.
Resumo
As funções são módulos de códigos que irão realizar as tarefas repetitivas
dos programas. Sempre que surgir a necessidade, poderemos chamá-las a fim de
economizar tempo, visto que escrever uma linha de código para toda tarefa
repetitiva é algo cansativo. As funções podem ser chamadas em qualquer parte do
programa e podem retornar algum valor.
Questões
1- Qual é a característica de uma função void?
a) Funções que retornam valores.
b) Funções que retornam até dois valores.
c) Funções que retornam até três valores.
d) Trata-se de uma função que não retorna valores.
2- As funções void em algumas linguagens de programação são chamadas de:
a) Processamento.
b) Procedimento.
c) Laço de repetição
d) Nenhuma das anteriores.
3- Uma determinada função retornará um valor do tipo float, então a função deverá
ser do tipo:
a) int
b) char
c) float
d) bool
92
4- Para que a função retorne um valor, utilizamos qual comando?
a) comeback
b) fall
c) counter
d) return
5- Sobre as funções podemos dizer que:
a) Podem ser chamadas somente dentro da função setup().
b) Podem ser chamadas somente dentro da função loop().
c) Podem ser chamadas de qualquer lugar do código.
d) Nenhuma das anteriores.
6- Para utilizarmos a função digitalWrite(), precisamos primeiro configurar a porta
como entrada ou saída de dados através de qual função?
a) delay()
b) digitalRead()
c) analogWrite
d) pinMode()
7- Suponha que desejamos configurar a porta 2 como saída de dados através da
função pinMode(), qual alternativa é a correta?
a) pinMode (4, OUTPUT)
b) pinMode(2, INPUT)
c) pinMode(2,OUTPUT)
d) pinMode(4, INPUT)
8- Desejamos configurar a porta 2 com o estado lógico nível alto (5V), qual é
alternativa correta?
a) digitalWrite(2, LOW)
b) digitalWrite(2, HIGH)
c) digitalWrite(2, INPUT)
d) digitalWrite(2, OUTPUT)
93
9- É a técnica usada para gerar sinais analógicos de um dispositivo digital como
um Microcontrolador e ela é tão eficiente que hoje em dia quase todos os
microcontroladores modernos possuem hardware dedicado para a geração deste
sinal, estamos falando de:
a) Sinal PMM.
b) Sinal PWN.
c) Sinal PWM.
d) Sinal PWD.
10- Suponha que desejamos utilizar a função delay() para retardar 3 segundos
para apresentar alguma informação no monitor serial, qual alternativa está correta?
a) delay(2000)
b) delay(30000)
c) delay(3)
d) delay(3000)
94
TEMA 6: BIBLIOTECAS
Podemos fazer uma analogia e dizer que as bibliotecas são como as
funções, porém o seu código fica fora do programa que irá utilizá-la. É possível
criá-las através de um editor de texto simples, como por exemplo, o bloco de notas,
bastando salvar o código da biblioteca com a extensão de arquivo “.h”, ou seja,
“nome-biblioteca.h”.
Uma vantagem em criarmos uma biblioteca, é que elas permitem que vários
programas as utilizem, ou seja, não é necessário termos vários programas com as
mesmas linhas de código para alguma ação, basta criarmos uma biblioteca e
sempre que necessitarmos chamá-la basta fazermos a importação dela através da
diretiva #include nome-biblioteca.h,normalmente essa importação é feita antes
das funções setup() e loop() e depois chamar a função desta biblioteca
normalmente.
É recomendável que as bibliotecas sejam salvas em: C:Program Files
(x86)Arduinolibraries. Assim, os arquivos das bibliotecas ficarão mais
organizados.
95
Exemplo de como criar uma biblioteca:
1- Abra o bloco de notas ou outro editor de texto e digite o código abaixo:
2- Crie uma pasta chamada “media” dentro do diretório C:Program Files
(x86)Arduinolibraries
96
3- Salve a biblioteca dentro da pasta “media” com o nome de “media.h”.
4- Provavelmente para que seja possível criar uma pasta no diretório libraries do
Arduino, seja necessário alterar as configurações de segurança da pasta libraries,
para isso clique com o botão direito do mouse na pasta libraries, vá na aba
“Segurança” e altere as permissões para que seja possível salvar o arquivo neste
diretório.
97
5- No IDE do Arduino crie o programa abaixo, compile e carregue o código no
Arduino. Note que na linha 2 do código é feita a importação da biblioteca “media.h”
e na linha 13 note que é feita a chamada da função “media_arit” que faz parte da
biblioteca “media.h”.
6- Resultado final no monitor serial:
98
Gerenciador de bibliotecas do Arduino
No IDE do Arduino existe uma área onde é possível buscar bibliotecas que
foram homologadas (testadas) previamente pela equipe do Arduino, então lá é
possível baixar com mais seguranças bibliotecas prontas para serem instaladas no
computador. Para acessar basta ir em: Sketch => Incluir Biblioteca =>
Gerenciar Bibliotecas.
Resumo
Verificamos que as bibliotecas ajudam a organizar melhor o código dos
programas, pois elas reduzem as linhas de código que esses programas teriam se
elas não existissem. É uma boa prática salvar as bibliotecas criadas no diretório
libraries do Arduino, assim os arquivos ficam mais organizados.
Questões
1- Qual é a extensão do arquivo de uma biblioteca?
a) .w
b) .m
c) .b
d) .h
99
2- Qual diretiva utilizamos para importar uma biblioteca no IDE do Arduino?
a) #import nome-biblioteca.extensão-arquivo
b) #insert nome-biblioteca.extensão-arquivo
c) #include nome-biblioteca.extensão-arquivo
d) Nenhuma das anteriores
3- Onde é recomendável que salvemos a biblioteca criada?
a) C:Program Files (x86)Arduinoexamples
b) C:Program Files (x86)Arduinodrivers
c) C:Program Files (x86)Arduinohardware
d) C:Program Files (x86)Arduinolibraries
4- Em qual programa podemos salvar uma biblioteca?
a) WordPad
b) Google Chrome
c) Notepad (Bloco de Notas)
d) Nenhuma das anteriores
5- Sobre as bibliotecas podemos dizer que:
a) Uma biblioteca pode conter várias funções.
b) Uma biblioteca pode ter no máximo duas funções.
c) Uma biblioteca pode ter no máximo três funções.
d) Nenhuma das anteriores.
100
6- As funções das bibliotecas podem retornar valores?
a) Sim.
b) Não.
7- Podemos criar quantas bibliotecas?
a) No máximo 3 bibliotecas.
b) No máximo 10 bibliotecas.
c) No máximo 25 bibliotecas.
d) Nenhuma das anteriores.
8- É recomendável que a importação da biblioteca seja feita:
a) Dentro da função setup().
b) Dentro da função loop().
c) Antes das funções setup() e loop().
d) Nenhuma das anteriores.
9- Em qual menu do IDE do Arduino podemos pesquisar por bibliotecas?
a) Editar => Incluir Biblioteca = Gerenciar Bibliotecas.
b) Arquivo => Incluir Biblioteca = Gerenciar Bibliotecas.
c) Ferramentas => Incluir Biblioteca = Gerenciar Bibliotecas.
d) Sketch => Incluir Biblioteca = Gerenciar Bibliotecas.
10- Um programa pode utilizar quantas bibliotecas?
a) No máximo uma biblioteca.
b) No máximo duas bibliotecas.
c) No máximo três bibliotecas.
d) Não há limites.
101
TEMA 7: PROJETO COM SINCRONIZAÇÃO DE LEDS
As portas digitais, como comentado em capítulos anteriores, podem ser
utilizadas como entradas ou saídas de dados. As saídas digitais servem para fazer
a interação com o mundo físico real. Por exemplo, através delas é possível
acender ou apagar lâmpadas e leds, também será possível ligar ou desligar
motores e etc.
As saídas digitais trabalham normalmente com dois estados, nível alto (5V)
ou nível baixo (0V). Existem algumas placas do Arduino, como por exemplo o
Arduino Nano que o nível alto é de 3,3V. Mas, o Arduino UNO que é o que
utilizamos para os exemplos da apostila, trabalha com nível alto de 5V.
102
No Arduino Uno temos 14 portas digitais, do pino 0 até o pino 13. Nos
Arduinos: Uno, Nano, Mini, e Mega, os pinos 0 e 1 são usados para comunicação
com o computador. Então, conectar qualquer coisa a esses pinos pode interferir
nessa comunicação, incluindo causar falhas na gravação da placa. Portanto prefira
utilizar os pinos 2 até 13 para saídas ou entradas digitais. É possível utilizar os
pinos 0 e 1, porém será necessário configurá-las no programa.
Configuração
A configuração de uma saída digital é feita através da função pinMode(pino,
modo). Então no caso, para configurarmos uma porta digital como saída, fazemos:
pinMode(2,OUTPUT);
No exemplo acima, o pino 2 foi configurado como saída (OUTPUT).
103
Depois alteramos o estado da saída digital através da função
digitalWrite(pino, modo), vejamos o exemplo:
digitalWrite(2,HIGH);
No exemplo acima, o pino 2 que foi configurado como saída digital, foi
também configurado para nível alto, ou seja, 5V.
Projeto utilizando as saídas digitais
Materiais para o projeto
● Placa Arduino Uno
● Protoboard de no mínimo 400 furos
● 4 leds
● 4 resistores de 150Ω
● 9 jumpers macho/macho
Descrição
O projeto que faremos sobre saídas digitais terá como objetivo utilizar as
saídas para acender e apagar um conjunto de 4 leds, os leds acenderão da
esquerda para a direita e apagarão da direita para a esquerda, para dar o efeito
desejado utilizaremos a própria função loop() do arduino para repetir as instruções
que farão esse efeito visual. Também utilizaremos a função delay() para dar o
efeito luminoso desejado.
Caso desejem, é possível fazer a simulação deste projeto no site Tinkercad,
segue o endereço: https://www.tinkercad.com/ vá até a opção “Circuits” para
montar o circuito.
Neste projeto utilizaremos 4 leds e 4 resistores de 150Ω, as portas digitais
utilizadas são as portas: 2,3,4 e 5. Façam a montagem conforme o exemplo
abaixo:
104
No simulador do Tinkercad, digite os códigos abaixo, caso possuam a placa
do Arduino, digite o código abaixo no IDE do Arduino:
Entre as linhas 1 a 8 foram declaradas as variáveis, notem que foram
atribuídos os números das portas digitais para as variáveis chamadas de “led”,
(led1, led2, led3 e led4). Cada uma recebeu respectivamente o número das portas
digitais (2,3,4 e 5). Esta é uma forma de trabalhar com as portas digitais, ou seja,
criar uma variável que irá representá-las, pois é mais fácil entender o código
quando atribuímos uma variável para as portas digitais.
A variável “i”, fará o controle dos laços de repetição e a variável “tempo”,
armazenará o número que representará o tempo em milissegundos que será
utilizado na função delay().
105
Dentro da função setup() foram configuradas como portas de saída, as
portas digitais: 2,3,4 e 5, elas são representadas pelas variáveis: led1, led2, led3 e
led4. Note que foi utilizado um laço de repetição for() para facilitar essa
configuração, trata-se de uma forma mais dinâmica para configurar mais de uma
porta digital como saída.
Note que nos laços de repetição para acender e apagar as luzes é utilizada a
variável de controle “i” que utiliza como referência as variáveis que representam as
portas digitais.
106
Resumo
Verificamos que as saídas digitais permitem que o Arduino interaja com as
coisas do mundo físico, por exemplo ligando ou desligando algum componente ou
aparelho eletrônico. São essenciais para a automatização de alguma coisa. Ela
possui dois estados: nível alto (5V) ou nível baixo (0V). Para utilizá-las é
necessário a configuração delas através das funções pinMode() e digitalWrite().
Questões
1- As postar digitais podem ser:
a) Somente de entrada de dados.
b) Somente de saída de dados.
c) Podem ser tanto de entrada quanto de saída de dados.
d) Nenhuma das anteriores.
2– Quantos volts é o estado nível baixo no Arduino?
a) 5V
b) 6V
c) 4V
d) 0V
3- Quantos volts é o estado nível alto no Arduino Uno?
a) 5V
b) 9V
c) 15V
d) 10V
4- O Arduino Uno possui quantas portas digitais?
a) 10
b) 20
c) 30
d) 14
107
5- No projeto foi utilizado um resistor para cada led no valor de 150Ω, então
podemos dizer que:
a) Como a tensão na saída digital é de 5V podemos utilizar um led de 90Ω,
sem problemas.
b) Como a tensão na saída digital é de 5V podemos utilizar um led de 50Ω,
sem problemas.
c) Como a tensão na saída digital é de 5V podemos utilizar um led de 20Ω,
sem problemas.
d) Como a tensão na saída digital é de 5V, o resistor deve ser maior ou igual a
150Ω.
6- O pino GND da placa do Arduino significa:
a) 5V
b) Terra (negativo)
c) PWM
d) Nenhuma das anteriores.
7- Analise o código abaixo e diga o que ele faz:
a) Configura os 4 Pinos digitais como entradas.
b) Configura os 4 Pinos digitais como saídas.
c) Acende os leds da esquerda para a direita.
d) Desliga os leds da direita para a esquerda.
8- Analise o código abaixo e diga o que ele faz:
a) Configura os 4 Pinos digitais como entradas.
b) Configura os 4 Pinos digitais como saídas.
c) Acende os leds da esquerda para a direita.
d) Desliga os leds da direita para a esquerda.
108
9- Analise o código abaixo e diga o que ele faz:
a) Configura os 4 Pinos digitais como entradas.
b) Configura os 4 Pinos digitais como saídas.
c) Acende os leds da esquerda para a direita.
d) Desliga os leds da direita para a esquerda.
10- Para que serve o “i--” dentro do “for” abaixo?
a) Faz o auto-incremento da variável “i” a cada repetição.
b) Decresce o valor da variável “i” a cada repetição.
c) Faz o valor da variável “i” aumentar de dois em dois a cada repetição.
d) Nenhuma das anteriores.
109
TEMA 8: PROJETO SINCRONIZAÇÃO DE LEDS POR BOTÕES
As entradas digitais permitem que o mundo externo interaja com o Arduino,
por exemplo: sensores de presença, interruptores, botões push button, sensores
de temperaturas e dentre outros poderão enviar um sinal digital, ou seja, 5V ou 0V
para a porta digital de entrada, o Arduino por sua vez dependendo de como foi
programado irá tomar alguma ação com base no sinal digital recebido. O nível alto
para o Arduino Nano é de 3,3V, ou seja no caso do Arduino a tensão de entrada
não poderá ser maior que 3,3V. Já para outros Arduinos como o Arduino Uno a
tensão de entrada na porta digital, não poderá exceder 5V, podendo correr risco de
queimar a placa.
A configuração de uma entrada digital é feita através da função
pinMode(pino, modo). Então no caso, para configurarmos uma porta digital como
entrada, fazemos:
pinMode(2,INPUT);
No exemplo acima, o pino 2 foi configurado como entrada (INPUT).
110
Para a verificação do estado da porta digital, utilizamos a função
digitalRead(pino), ela transformará o estado recebido nível alto(5V) no
número 1 e nível baixo(0V) no número 0, ambos são números
binários.Porém, antes de utilizá-la devemos configurar a porta digital como
entrada através da função pinMode(pino, modo).
pinMode(6,INPUT);
digitalRead(6);
Projeto utilizando as entradas digitais
Materiais para o projeto
● 1 placa Arduino Uno;
● 1 protoboard de no mínimo 400 furos;
● 4 leds;
● 4 resistores de 150Ω;
● 2 resistores de 10kΩ;
● 15 jumpers macho/macho;
● 2 botões push button do tipo N/A;
Descrição
O projeto tem como objetivo utilizar as portas digitais 6 e 7 como entradas
digitais, para isto utilizaremos dois botões push button do tipo N/A (normalmente
aberto) para mudar o sentido dos leds, por exemplo, por padrão os leds serão
acesos da direita para a esquerda, com os botões será possível controlar o sentido
em que os leds serão acesos, então se quisermos que os leds passem a acender
da esquerda para a direita bastará pressionar o botão que estiver à direita.
Para este projeto utilizaremos como base o que fizemos no projeto anterior,
com algumas alterações.
As portas digitais 2,3,4 e 5 continuarão sendo portas de saída, cada um será
responsável por acender ou apagar um led. Os resistores de 10kΩ serão utilizados
como resistores de pull-down, para forçar o estado nível baixo (0V) para as portas
digitais de entrada 6 e 7 quando os botões não estiverem pressionados. Eles são
importantes para garantir o bom funcionamento do programa, visto que ao não
utilizar os resistores de pull-down nas entradas digitais o microcontrolador pode
ficar “confuso” sobre o real estado das portas de entrada quando o botão não
111
estiver pressionado. Abaixo, segue um exemplo do funcionamento de um resistor
de pull down. Note que quando o botão não está pressionado o resistor de pull
down força o estado 0 (zero) para a porta digital de número 6.
Quando o botão é pressionado a corrente elétrica vai direto para a porta
digital 6 que receberá a tensão de 5V, nível alto(estado 1). A corrente elétrica
sempre procura o caminho mais fácil, nesse caso ela vai direto para a porta.
112
Caso desejem, é possível fazer a simulação deste projeto no site Tinkercad,
segue o endereço: https://www.tinkercad.com/ vá até a opção “Circuits” para
montar o circuito.
Segue abaixo o circuito que vocês deverão montar ou no simulador
Tinkercad ou na própria protoboard caso possua os materiais:
Note abaixo que os botões push button são ligados em “x”, ou seja de uma
extremidade para outra.
113
No simulador do Tinkercad, digite os códigos abaixo, caso possuam a placa
do Arduino, digite o código abaixo no IDE do Arduino:
Das linhas 1 a 12 foram declaradas as variáveis, notem que foram atribuídos
os números das portas digitais para as variáveis chamadas de “led”, (led1, led2,
led3 e led4). Cada uma recebeu respectivamente o número das portas digitais
(2,3,4 e 5). Já as variáveis “bot_esq” e “bot_dir” receberam respectivamente os
números correspondentes às portas digitais 6 e 7. A variável “i” é o contador que
será utilizado nos laços de repetição for(), a variável “tempo” armazena o valor do
tempo em milissegundos e a variável “valor” armazena o estado do botão, ou seja,
1 para nível alto (pressionado) ou 0 para nível baixo (não pressionado), esta
variável foi inicializada com o valor 1.
Abaixo, é possível observar que dentro da função setup() é feita a
configuração das portas de entrada e saída do nosso projeto.
114
Segue abaixo a primeira parte do código que ficará dentro da função loop(),
note que na linha 27 há uma condicional que verifica se a variável “valor” é igual a
0, caso seja entrará no laço de repetição “for()”, linha 29, e os leds passarão a
acender da esquerda para a direita.
A condição para permanecer no for() é que a variável “i” seja menor ou igual
a led4+3, ou seja, se led4 representa a porta 5 (número 5), então a condição para
permanecer no laço é “i” ser menor ou igual a 5+3, cujo resultado será 8. Ao final
do laço de repetição é feita uma verificação dos estados dos botões, caso algum
deles seja igual a 1, sairá do laço e irá alterar o sentido conforme o botão
pressionado.
115
Segue abaixo a continuação do código que fica dentro da função loop().
Note que como a variável “valor” recebeu no início do programa o valor 1, a
condicional da linha 53 será verdadeira e por isso os leds passam a acender da
direita para a esquerda.
Note que no for(), linha 55, “i” que é variável de controle do laço e inicia o
laço de repetição recebendo o valor de led4, ou seja, led4 é igual a 5, então “i”
começará com o número 5. A condição do laço de repetição for() é que “i” seja
maior ou igual a led1-3, ou seja, se led1 é igual a 2, 2-3 será igual a -1. A cada
repetição a variável “i” será decrescida em -1.
116
Resumo
Verificamos que as entradas digitais permitem que os componentes
eletrônicos ou sensores externos interajam com o Arduino. Esses componentes
enviam um sinal digital nos estados nível alto (5V) ou nível baixo (0V). Os estados
de nível alto ou nível baixo, também são conhecidos como ligado (1) ou desligado
(0). O arduino após receber o sinal de entrada irá agir conforme foi programado.
Questões
1- Suponha que desejamos configurar a porta 6 como porta digital de entrada,
selecione a alternativa correta:
a) pinMode(6,OUTPUT);
b) pinMode(6,INPUT);
c) pinMode(INPUT,6);
d) pinMode(OUTPUT,6);
2- Para a função digitalRead() o estado nível alto (5V), corresponde ao número:
a) 0
b) 2
c) 3
d) 1
3- Para a função digitalRead() o estado nível baixo (0V), corresponde ao número:
a) 0
b) 1
c) 2
d) 3
4- Os resistores de pull down servem para forçar o estado:
a) 0 (0V)
b) 0 (5V)
c) 1 (0V)
d) 1 (5V)
117
5- O botão abaixo, é um push button do tipo N/A (normalmente aberto), sabendo
que ele não foi pressionado é possível afirmar que a montagem está:
a) Correta, note que o led está aceso.
b) Correta, pois botões push button do tipo N/A ao não serem pressionados
deixam passar corrente elétrica.
c) Errada, botões do tipo N/A não deixam passar corrente, a ligação dos
terminais está errada.
d) Nenhuma das anteriores.
6- Sobre o código do projeto, a variável “tempo” controla:
a) O tempo que os leds acendem.
b) O tempo que os leds acendem ou apagam.
c) O tempo que os leds apagam.
d) Nenhuma das anteriores.
7- Sobre o código do projeto, a variável “bot_esq” recebe qual valor?
a) 4
b) 5
c) 6
d) 7
118
8- Sobre o código do projeto, a variável “bot_dir” recebe qual valor?
a) 5
b) 6
c) 7
d) 8
9- O trecho abaixo foi retirado do código do projeto, qual é a condição do if?
a) Verificar se o botão esquerdo foi pressionado.
b) Verificar se o botão esquerdo não foi pressionado.
c) Verificar se o botão direito foi pressionado.
d) Nenhuma das anteriores.
10- Com base no funcionamento do projeto, após carregar o código do projeto no
Arduino, os leds começam a acender automaticamente em qual sentido?
a) Da direita para a esquerda.
b) Da esquerda para a direita.
c) Não liga automaticamente, para começar a acender é necessário pressionar
algum dos botões.
d) Nenhuma das anteriores.
119
TEMA 9: PROJETO COM LCD
O display LCD é um módulo muito interessante que pode ser utilizado
quando desejamos que o Arduino informe algo através de uma mensagem para o
usuário do dispositivo. O display de LCD para Arduino possui vários tamanhos
sendo o 16x2 o mais utilizado por ser o mais barato. Ele possui 16 colunas e duas
linhas, e pode ser encontrado com backlight azul ou verde. Backlight é a luz de
fundo.
Sobre os tamanhos, os mais comuns para displays de LCD para Arduino
são: 16x2, 20x4, 20x2 e 40x2.
O LCD possui um microcontrolador próprio, o mais popular é o Hitachi
HD44780, que trabalha com LCDs monocromáticos de até 80 caracteres
alfanuméricos e símbolos.
120
Projeto com LCD
O display de LCD 16x2 possui 16 pinos, dos quais usamos 12 para conexão
básica, já incluindo as conexões de alimentação (pinos 1 e 2), backlight (pinos 15 e
16) e contraste (pino 3). Segue abaixo uma tabela que relaciona os pinos do LCD
16x2 com os pinos do Arduino, o projeto seguirá essa tabela:
Abaixo, segue em detalhes os pinos do LCD (16x2), note que o pino 1 é o
primeiro da esquerda para a direita:
121
Materiais para o projeto
● 1 placa Arduino Uno;
● 1 protoboard de no mínimo 830 furos;
● 1 resistor de 220Ω;
● 1 potenciômetro de 5kΩ;
● 19 jumpers macho/macho;
● 1 display LCD 16x2.
Montagem
O módulo LCD (16x2) possui pinos que servem para encaixar diretamente o
módulo numa protoboard. Para este projeto é necessário uma protoboard de no
mínimo 830 furos. Abaixo, segue uma imagem com mais detalhes de como deverá
ser feita as conexões na protoboard:
● O pino 3 do LCD (V0) é o pino onde conectamos o pino central do
potenciômetro.
● Os pinos 4,5 e 6 (RS,RW e E) do LCD são pinos de controle do LCD,
conectamos respectivamente os pinos 10,9 e 8 do Arduino.
● Do pino 7 até o pino 14 são pinos de dados. Utilizaremos somente do
pino 11 até o pino 14, que serão conectados respectivamente pelos
pinos 5,4,3 e 2 do Arduino.
● Por último, teremos os pinos 15 A (positivo) e 16 K (negativo), ambos
deverão ser conectados respectivamente no Vcc 5V e ao GND da
protoboard. Importante, para conectar o pino 15 A ao Vcc 5V utilize
um resistor de 220Ω, conforme a imagem a seguir.
122
Segue abaixo, uma imagem mais detalhada das conexões, o potenciômetro
será responsável por ajustar a luminosidade dos caracteres do LCD:
Conforme as instruções dadas na página 122, segue abaixo uma imagem
com os jumpers que conectam o LCD com a placa do Arduino em suas respectivas
portas digitais:
123
Programação
Para que o programa possa enviar mensagens para a tela de LCD é
necessário primeiro importar a biblioteca LiquidCrystal.h, conforme o exemplo
abaixo:
#include <LiquidCrystal.h>
Depois, devemos utilizar o comando LiquidCrystal lcd() para especificar
quais serão as portas do Arduino que serão utilizadas respectivamente para os
pinos do LCD :RS, RW, E, D4,D5, D6 e D7, veja abaixo:
LiquidCrystal lcd(10, 9, 8, 5, 4, 3, 2);
Dentro da função setup() será necessário utilizar a função lcd.begin(), para
podermos utilizar a tela de LCD com o Arduino e também para especificar o
tamanho da tela.
lcd.begin(16, 2);
O próximo passo é dentro da função setup() configurarmos a posição na tela
onde aparecerá a nossa mensagem, isto é feito através da função
lcd.setCursor(coluna, linha), segue abaixo um exemplo se quisermos posicionar
o texto a partir da coluna 5 e linha 0. As linhas e coluna iniciam com o número zero
e não com o número 1.
lcd.setCursor(5, 0);
Por fim, também dentro da função setup(), para enviar de fato a mensagem
para o LCD devemos utilizar o comando lcd.print(“Mensagem”), segue abaixo um
exemplo:
lcd.print("Projeto");
124
Código do projeto
Digite o código abaixo no simulador Tinkercad, ou caso possua a placa do
Arduino, digite o código abaixo no IDE do Arduino e depois carregue o código para
a placa do Arduino:
Resumo
O LCD possibilita inúmeras aplicações onde é necessário enviar uma
mensagem para o usuário do dispositivo. Os LCDs menores, como por exemplo, o
16x2, exigem um cuidado maior para pensar em como utilizar da melhor forma
possível o espaço disponível para as mensagens.
125
Questões
1- Um display de LCD 16x2 possui:
a) 2 linhas e 16 colunas.
b) 16 colunas e 2 linhas.
c) 32 colunas e 16 linhas.
d) Nenhuma das anteriores.
2- Quantos pinos tem o display de LCD 16x2 ?
a) 8 pinos.
b) 10 pinos
c) 24 pinos
d) 16 pinos.
3- Qual é a função do potenciômetro neste projeto?
a) Liga e desliga o circuito.
b) Muda a cor do texto na tela do LCD.
c) Controla a luminosidade dos caracteres do LCD.
d) Nenhuma das anteriores.
4- O pino central do potenciômetro deverá ser conectado a qual pino do LCD?
a) Pino 3 (V0)
b) Pino 1 (Vss)
c) Pino 5 (RW)
d) Nenhuma das anteriores.
5- Para conectarmos o pino 15 (A) do LCD ao Vcc (5V) devemos:
a) Apenas conectá-lo utilizando um jumper.
b) Fazer a conexão utilizando um resistor de 220Ω.
c) Fazer a conexão utilizando um resistor de 10Ω.
d) Nenhuma das anteriores.
6- Qual é a biblioteca que devemos importar para utilizarmos o módulo de LCD?
a) Lcd.h
b) LiquidCrystal16x2.h
c) LiquidCrystal.h
d) LCD-LiquidCrystal.h
126
7- Qual é o comando que utilizamos para especificar quais serão as portas do
Arduino que serão utilizadas respectivamente para os pinos do LCD :RS, RW, E,
D4,D5, D6 e D7 ?
a) LiquidCrystal lcd()
b) LiquidCrystal ()
c) lcd()
d) Liquid.Crystal lcd()
8- O que faz o comando lcd.print()?
a) Configura o tamanho da tela do LCD no Arduino.
b) Posiciona o cursor na tela do arduino.
c) Limpa o texto do LCD.
d) Nenhuma das anteriores.
9- O comando lcd.begin(16,2), faz:
a) Habilita e configura o Arduino para poder se comunicar com um LCD de 16
colunas e 2 linhas.
b) Habilita e configura o Arduino para poder se comunicar com um LCD de 2
colunas e 16 linhas.
c) Habilita e configura o Arduino para poder se comunicar com um LCD de 16
colunas e 16 linhas.
d) Nenhuma das anteriores.
10- Suponha que desejamos posicionar um texto a partir da primeira linha e
primeira coluna. Qual é a alternativa correta?
a) lcd.setCursor(1, 1);
b) lcd.setCursor(0, 1);
c) lcd.setCursor(1, 0);
d) lcd.setCursor(0, 0);
127
TEMA 10: PROJETO COM SENSOR DE TEMPERATURA
O sensor de temperatura LM35 ou TMP36, são sensores disponíveis no
mercado mais utilizados em projetos com o Arduino. O projeto proposto neste
tema, visa mesclar os conhecimentos adquiridos sobre a interação do Arduino com
o display de LCD visto no tema anterior com o conhecimento que será dado sobre
sensores de temperatura, o objetivo final será de fazer o display de LCD mostrar a
temperatura ambiente lida através dos sensores de temperatura LM35 ou TMP36.
Entradas Analógicas
Os sinais físicos captados por nossos sentidos, assim como qualquer
variável que existe no ambiente, tais como: temperatura, velocidade, peso, fluxo e
etc, são sinais analógicos, ou seja, sinais que variam com o tempo.
Conversor Analógico Digital
O conversor ADC Arduino é responsável pela conversão analógica para o
digital. Ele faz a leitura da porta de entrada analógica e o conversor analógico
digital do Arduino fará uma aproximação discreta do sinal analógico para o digital.
128
Abaixo, segue um gráfico que exemplifica a aproximação discreta feita pelo
conversor analógico digital do Arduino.
Abaixo segue uma tabela com a relação entre tensão de trabalho, pinos
analógicos e resolução máxima para as placas do Arduino. Essas informações são
importantes, pois necessitamos saber a tensão de trabalho e resolução máxima do
Arduino Uno para que o projeto funcione corretamente.
O Conversor Analógico Digital do Arduino irá receber uma tensão na porta
analógica e irá converter essa tensão num número inteiro, que irá variar de 0 até
1023, sendo que 0 para 0V e 1023 para 5V. Ou seja, uma tensão de 2,5V é
equivalente ao número 512.
129
Identificando as entradas analógicas no Arduino
As portas analógicas do Arduino estão identificadas abaixo, são as portas:
A0, A1, A2, A3, A4 e A5.
Lendo as entradas analógicas
Para ler alguma determinada entrada analógica, utilizamos a função
analogRead(pino). Segue abaixo um exemplo:
int valor= analogRead(A0);
Note que no exemplo acima, a variável “valor” está recebendo um número
que no caso do Arduino Uno será um número inteiro entre 0 e 1023 dependendo
da tensão de entrada como explicado anteriormente e a quantidade de bits, a faixa
de números inteiros de 0 a 1023 é referente as placas do Arduino de 10 bits como
o Arduino UNO. A função analogRead() está fazendo a leitura da entrada
analógica A0.
130
Sensor de temperatura LM35 - ADC Arduino
O sensor de temperatura LM35 oferece uma relação linear em sua saída,
que aumenta para uma taxa de 10mV a cada 1ºC. Sua gama de medição é de
-55ºC (-550mV) a 150ºC(1500 mV) com uma precisão de 0,5ºC.
Uma das vantagens deste sensor é o seu baixíssimo custo, por isto ele é o
mais utilizado em aplicações que envolvem medição de temperatura e
microcontroladores e por consequência em projetos para Arduino. Abaixo, segue
uma imagem de um sensor de temperatura LM35 visto de frente:
O LM35 possui 3 pinos, onde as extremidades são os pinos de alimentação,
vendo de frente o Vcc é o pino da esquerda e o GND é o da direita. O pino do meio
será onde faremos a conexão com alguma porta de entrada analógica da placa do
Arduino.
Para calcularmos a temperatura utilizamos a fórmula abaixo:
temperatura = (Valor lido na porta analógica) * 5V / 1023) /0.01V;
Exemplo, vamos supor que o sinal analógico está indo para a porta analógica A0:
temperatura = (float(analogRead(A0)) * 5 / 1023) / 0.01;
131
Projeto com sensor de temperatura
Como dito no começo deste tema, o projeto com sensor de temperatura irá
utilizar como base o projeto que criamos com display LCD, faremos pequenas
modificações na parte física, basicamente iremos apenas adicionar o sensor de
temperatura LM35, o simulador Tinkercad não possui o LM35, mas possui um
similar que é o TMP36.
Materiais para o projeto
● 1 placa Arduino Uno;
● 1 protoboard de no mínimo 830 furos;
● 1 resistor de 220Ω;
● 1 potenciômetro de 5kΩ;
● 22 jumpers macho/macho;
● 1 display LCD 16x2;
● Sensor de temperatura LM35 ou TMP36.
Montagem
A primeira parte do projeto é igual ao projeto do tema anterior, que foi o
“Projeto com LCD”, então, monte exatamente a parte física do projeto anterior,
esta é a primeira coisa que vocês devem fazer.
132
Após, os alunos que estiverem fazendo pelo simulador Tinkercad deverão
acrescentar o sensor TMP36 igual a imagem abaixo. O simulador Tinkercad não
possui o sensor LM35, apenas o TMP36, que é similar. Quem possuir a placa física
do Arduino e os demais componentes, poderá seguir a mesma montagem abaixo,
porém utilizando o sensor LM35 em vez do TMP36.
Note que na montagem do sensor de temperatura, o pino de saída analógica
do sensor de temperatura (pino do meio) é conectado na entrada analógica A0 do
Arduino (jumper azul). O pino da esquerda do sensor de temperatura foi conectado
ao positivo (Vcc) (5V) e o pino da direita foi conectado ao terra (GND) negativo da
protoboard.
133
Programação - Código fonte do projeto
Nas linhas 4 e 5, foram declaradas as variáveis “LM35” e “TMP36” como
constante do tipo inteiro, ambas receberam valor A0, que representa a porta
analógica A0 onde está conectado o sensor LM35 ou TMP36.
Nas linhas 8 e 9, notem que foram criadas duas variáveis
“temperatura_lm35” e “temperatura_tmp36”, cada uma delas armazenará a
temperatura medida pelos sensores. Ocorre que o código do projeto está
preparado para que vocês utilizem tanto o sensor LM35 quanto o TMP36, por isso
foram criadas essas duas variáveis.
Note que na linha 12, foi importada a biblioteca “LiquidCrystal.h”, que é a
biblioteca do display LCD. Na linha 17 foi declarado as portas digitais que serão
utilizadas pelo display LCD.
134
Programação para sistemas embarcados (Arduino
Programação para sistemas embarcados (Arduino
Programação para sistemas embarcados (Arduino
Programação para sistemas embarcados (Arduino
Programação para sistemas embarcados (Arduino

Mais conteúdo relacionado

Semelhante a Programação para sistemas embarcados (Arduino

2 C NoçõEs De Eletricidade 13 11 2005
2 C NoçõEs De Eletricidade 13 11 20052 C NoçõEs De Eletricidade 13 11 2005
2 C NoçõEs De Eletricidade 13 11 2005Santos de Castro
 
Eletroeletrônica (1ª aula)
Eletroeletrônica (1ª aula)Eletroeletrônica (1ª aula)
Eletroeletrônica (1ª aula)zeu1507
 
Aula de Física Aplicada - Conceitos de eletrodinâmica
Aula de Física Aplicada - Conceitos de eletrodinâmicaAula de Física Aplicada - Conceitos de eletrodinâmica
Aula de Física Aplicada - Conceitos de eletrodinâmicadebvieir
 
www.aulasdefisicaapoio.com - Física - Eletrodinâmica
www.aulasdefisicaapoio.com - Física -  Eletrodinâmica www.aulasdefisicaapoio.com - Física -  Eletrodinâmica
www.aulasdefisicaapoio.com - Física - Eletrodinâmica Videoaulas De Física Apoio
 
Aula Introdução à Eletrônica
Aula Introdução à EletrônicaAula Introdução à Eletrônica
Aula Introdução à Eletrônicapaulovader
 
Objetivos Fisica e Quimica 3ºperíodo - teste nº5
Objetivos Fisica e Quimica 3ºperíodo - teste nº5Objetivos Fisica e Quimica 3ºperíodo - teste nº5
Objetivos Fisica e Quimica 3ºperíodo - teste nº5Maria Freitas
 
aula instalações.pptx
aula instalações.pptxaula instalações.pptx
aula instalações.pptxdouglaslima
 
Corrente Elétrica e Lei de Ohm.pptx
Corrente Elétrica e Lei de Ohm.pptxCorrente Elétrica e Lei de Ohm.pptx
Corrente Elétrica e Lei de Ohm.pptxThierry379309
 
Curso eletricista básico iniciante abril 2011
Curso eletricista básico iniciante   abril 2011Curso eletricista básico iniciante   abril 2011
Curso eletricista básico iniciante abril 2011Marcio Roberto Patelli
 
Apostila eletricidade vol 1
Apostila eletricidade vol 1Apostila eletricidade vol 1
Apostila eletricidade vol 1erickfurtado
 

Semelhante a Programação para sistemas embarcados (Arduino (20)

2 C NoçõEs De Eletricidade 13 11 2005
2 C NoçõEs De Eletricidade 13 11 20052 C NoçõEs De Eletricidade 13 11 2005
2 C NoçõEs De Eletricidade 13 11 2005
 
Eletrotécnica - Básico
Eletrotécnica - BásicoEletrotécnica - Básico
Eletrotécnica - Básico
 
exercícios de eletricidade.
exercícios de eletricidade.exercícios de eletricidade.
exercícios de eletricidade.
 
Fazer os exercicios
Fazer os exerciciosFazer os exercicios
Fazer os exercicios
 
Eletroeletrônica (1ª aula)
Eletroeletrônica (1ª aula)Eletroeletrônica (1ª aula)
Eletroeletrônica (1ª aula)
 
Aula de Física Aplicada - Conceitos de eletrodinâmica
Aula de Física Aplicada - Conceitos de eletrodinâmicaAula de Física Aplicada - Conceitos de eletrodinâmica
Aula de Física Aplicada - Conceitos de eletrodinâmica
 
www.aulasdefisicaapoio.com - Física - Eletrodinâmica
www.aulasdefisicaapoio.com - Física -  Eletrodinâmica www.aulasdefisicaapoio.com - Física -  Eletrodinâmica
www.aulasdefisicaapoio.com - Física - Eletrodinâmica
 
Aula Introdução à Eletrônica
Aula Introdução à EletrônicaAula Introdução à Eletrônica
Aula Introdução à Eletrônica
 
Aula 02 projeto de arduino
Aula 02 projeto de arduinoAula 02 projeto de arduino
Aula 02 projeto de arduino
 
Eletricidade básica
Eletricidade básicaEletricidade básica
Eletricidade básica
 
Eletricidadebasica senai
Eletricidadebasica senaiEletricidadebasica senai
Eletricidadebasica senai
 
Eletricidadebasica
EletricidadebasicaEletricidadebasica
Eletricidadebasica
 
Objetivos Fisica e Quimica 3ºperíodo - teste nº5
Objetivos Fisica e Quimica 3ºperíodo - teste nº5Objetivos Fisica e Quimica 3ºperíodo - teste nº5
Objetivos Fisica e Quimica 3ºperíodo - teste nº5
 
aula instalações.pptx
aula instalações.pptxaula instalações.pptx
aula instalações.pptx
 
Corrente Elétrica e Lei de Ohm.pptx
Corrente Elétrica e Lei de Ohm.pptxCorrente Elétrica e Lei de Ohm.pptx
Corrente Elétrica e Lei de Ohm.pptx
 
Curso eletricista básico iniciante abril 2011
Curso eletricista básico iniciante   abril 2011Curso eletricista básico iniciante   abril 2011
Curso eletricista básico iniciante abril 2011
 
Laboatorios de fisica 3
Laboatorios de fisica 3Laboatorios de fisica 3
Laboatorios de fisica 3
 
Apostila eletrônica
Apostila eletrônicaApostila eletrônica
Apostila eletrônica
 
Curso De Eletronica
Curso De EletronicaCurso De Eletronica
Curso De Eletronica
 
Apostila eletricidade vol 1
Apostila eletricidade vol 1Apostila eletricidade vol 1
Apostila eletricidade vol 1
 

Último

10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptxVagner Soares da Costa
 
Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3filiperigueira1
 
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptxVagner Soares da Costa
 
Apresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMApresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMdiminutcasamentos
 
Lista de presença treinamento de EPI NR-06
Lista de presença treinamento de EPI NR-06Lista de presença treinamento de EPI NR-06
Lista de presença treinamento de EPI NR-06AndressaTenreiro
 
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxTRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxFlvioDadinhoNNhamizi
 

Último (6)

10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
 
Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3
 
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
 
Apresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMApresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPM
 
Lista de presença treinamento de EPI NR-06
Lista de presença treinamento de EPI NR-06Lista de presença treinamento de EPI NR-06
Lista de presença treinamento de EPI NR-06
 
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxTRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
 

Programação para sistemas embarcados (Arduino

  • 1. PROGRAMAÇÃO PARA SISTEMAS EMBARCADOS (ARDUINO)
  • 2. SUMÁRIO FUNDAMENTOS DE ELETROELETRÔNICA INTRODUÇÃO À FUNDAMENTOS DE ELETROELETRÔNICA 3 TEMA 1: PRINCÍPIOS DE ELETRICIDADE E ELETRÔNICA 4 TEMA 2: COMPONENTES ELETRÔNICOS 11 TEMA 3: INTRODUÇÃO AOS MICROCONTROLADORES 25 TEMA 4: ARDUINO - HARDWARE 30 TEMA 5: O IDE DO ARDUINO 40 PROGRAMAÇÃO DE MICROCONTROLADORES INTRODUÇÃO - PROGRAMAÇÃO DE MICROCONTROLADORES 51 TEMA 1: INTRODUÇÃO À LINGUAGEM DO ARDUINO 52 TEMA 2: VARIÁVEIS 59 TEMA 3: CONDICIONAIS 69 TEMA 4: LAÇOS DE REPETIÇÃO 77 TEMA 5: FUNÇÕES 85 TEMA 6: BIBLIOTECAS 95 TEMA 7: PROJETO COM SINCRONIZAÇÃO DE LEDS 102 TEMA 8: PROJETO SINCRONIZAÇÃO DE LEDS POR BOTÕES 110 TEMA 9: PROJETO COM LCD 120 TEMA 10: PROJETO COM SENSOR DE TEMPERATURA 128 REFERÊNCIAS BIBLIOGRÁFICAS 139 2
  • 3. INTRODUÇÃO À FUNDAMENTOS DE ELETROELETRÔNICA A eletricidade e a eletrônica revolucionaram o mundo moderno, sem elas não seria possível termos: os computadores, celulares, televisores e dentre outros dispositivos eletrônicos do nosso dia a dia. Portanto, é muito importante o aprendizado de conceitos básicos de eletroeletrônica antes de aprender a programar para sistemas embarcados. Nos temas a seguir vocês aprenderão sobre os princípios básicos de eletricidade e eletrônica, e irão conhecer os principais componentes eletrônicos como: resistores, capacitores, leds, transformadores, relés e dentre outros. 3
  • 4. TEMA 1: PRINCÍPIOS DE ELETRICIDADE E ELETRÔNICA Muitos já fizeram a experiência de atritar uma caneta esferográfica com o cabelo, e após esse ato, perceberam que a caneta passou a atrair papéis pequenos. Para explicar esse fenômeno, precisamos entender que todas as coisas são feitas de átomos, os nossos corpos são feitos de átomos, a caneta é feita de átomos e assim por diante. O átomo é a unidade básica da matéria, é constituído de um núcleo, dentro do núcleo teremos os prótons e os nêutrons. Na eletrosfera teremos os elétrons, veja mais detalhes na figura a seguir. Ao atritarmos um material com outro material diferente, por exemplo, o cabelo com a caneta, um material irá ganhar elétrons e outro irá receber elétrons. Antes de mais nada, é importante entender que os elétrons possuem carga negativa, os prótons possuem carga positiva e os nêutrons não possuem carga. Sempre um material irá perder ou ganhar elétrons, nunca perderá nêutrons ou 4
  • 5. prótons (somente em reações nucleares). Então, no caso, o cabelo perderá elétrons e a caneta irá receber elétrons, portanto a caneta ficará com excesso de elétrons e passará a atrair os papéis pequenos. Por conta da caneta estar com excesso de elétrons nós falamos que ela está eletrizada negativamente, já o cabelo, como perdeu elétrons ele ficará eletrizado positivamente, e os papéis picados possuem carga neutra. Para entender melhor qual material irá receber ou ganhar elétrons, pesquisem sobre a Série Triboelétrica. Tensão Elétrica A tensão elétrica, também conhecida como diferença de potencial (ddp), ocorre quando temos um ambiente com muitos elétrons e outro com poucos elétrons, ou seja, temos uma diferença de potencial. A tensão elétrica é medida em Volts (V), em homenagem ao físico Alessandro Volta (1745-1827). Basicamente quanto maior for a diferença de potencial, maior será a tensão. 5
  • 6. Corrente elétrica O fluxo ordenado de elétrons de um ponto para outro é denominado de corrente elétrica. O sentido real da corrente elétrica é do negativo para o positivo, ou seja, da área onde há excesso de elétrons para a área onde há menos elétrons. Porém, na eletrônica o sentido utilizado é o sentido convencional, que é do positivo para o negativo. Abaixo temos um exemplo de um circuito eletrônico, o sentido da corrente (convencional) é ilustrado através da seta vermelha, ou seja do positivo da fonte de energia para o negativo, note que no circuito temos dois componentes eletrônicos um resistor de 360Ω (ohms) e um led, o resistor é um componente que limita o fluxo de corrente, como o led necessita de uma tensão elétrica menor (aproximadamente 2 V), então o resistor baixa a tensão para que o led não queime, mais adiante veremos em detalhes o funcionamento desses componentes. Sobre corrente elétrica, podemos ressaltar dois tipos. A corrente contínua que é a corrente que é a mostrada na figura acima, onde a corrente parte do polo positivo para o polo negativo, e também temos a corrente alternada que é utilizada na maioria das vezes para transmissão de energia em longas distâncias, por isso nas tomadas a corrente é alternada. A corrente alternada diferente da contínua, não possui uma polarização definida, pois a corrente alterna numa frequência que varia de 50hz (Hertz) a 60hz(Hertz) por segundo. No Brasil a frequência adotada é de 60hz. A unidade de medida de corrente elétrica é o Ampère (A), em homenagem ao físico francês André-Marie Ampère. 6
  • 7. Resistência elétrica Por mais lisa que seja uma superfície, sempre haverá algum tipo de atrito. O mesmo ocorre com a corrente elétrica, por melhor que seja o condutor, sempre haverá uma pequena resistência elétrica. Os circuitos eletrônicos utilizam resistores, que são componentes cuja a função é de limitar a passagem de corrente elétrica, com o objetivo de proteger algum componente eletrônico que trabalha com uma tensão e corrente elétrica menor do que a tensão de entrada. Abaixo, temos uma imagem de um resistor. Adiante veremos mais detalhes sobre esse componente. A unidade de medida da resistência elétrica é o Ohm(Ω), em homenagem ao físico e matemático Georg Simon Ohm. A resistência elétrica é representada pela letra R. A Primeira Lei de Ohm A Primeira Lei de Ohm é a relação entre as três grandezas, Tensão, Corrente e Resistência. A tensão é representada pela letra U, a corrente pela letra I (intensidade da corrente) e a resistência é representada pela letra R. ● Para encontrarmos a tensão, utilizamos a fórmula: U=R.I ● Para encontrarmos a corrente, utilizamos a fórmula: I=U/R ● Para encontrarmos a resistência, utilizamos a fórmula: R=U/I 7
  • 8. Exemplo: Um resistor de 100 Ω é percorrido por uma corrente elétrica de 20 mA. A ddp entre os terminais do resistor, em volts, é igual a quanto? Utilizaremos a fórmula: U=R.I A primeira coisa a fazer é converter a corrente que está em miliampères para ampère, ou seja precisamos dividir 20 por 1000, que dará 0,02. Depois basta substituir os valores na fórmula: U=100.0,02 U= 2V Resumo Através dos elétrons que existe a eletricidade, e sem a eletricidade não existiria a eletrônica. Vimos que a tensão elétrica ocorre através de uma diferença de potencial (ddp), a corrente elétrica é o fluxo ordenado de elétrons e a resistência elétrica é a capacidade de resistir ao fluxo de passagem de corrente elétrica. A lei de Ohm nada mais é do que a relação entre essas três grandezas: tensão, corrente e resistência. 8
  • 9. Questões 1- Do que é feito um átomo? a) Prótons e elétrons. b) Somente de elétrons. c) Prótons e nêutrons. d) Prótons, nêutrons e elétrons. 2- O que ocorre quando atritamos dois materiais diferentes? a) Um material irá ganhar nêutrons e outro irá perder nêutrons. b) Um material irá ganhar elétrons e outro irá perder elétrons. c) Um material irá ganhar prótons e outro irá perder prótons. d) Nenhuma das anteriores. 3- Qual é a carga de um elétron? a) Neutra. b) Negativa. c) Positiva. d) Nenhuma das anteriores. 4- Qual é a unidade de medida de tensão elétrica? a) Volts. b) Ampère. c) Ohms. d) Nenhuma das anteriores. 5- Qual é a unidade de medida de corrente elétrica? a) Ohms. b) Volts. c) Ampère. d) Nenhuma das anteriores. 6- Qual é a unidade de medida de resistência elétrica? a) Ohms. b) Ampère. c) Volts. d) Nenhuma das anteriores. 9
  • 10. 7- A corrente elétrica das tomadas é: a) Contínua. b) Alternada. c) Pulsante. d) Nenhuma das anteriores. 8- O sentido convencional da corrente é: a) Do negativo para o positivo. b) Não há um sentido definido. c) Do positivo para o negativo. d) Nenhuma das anteriores. 9- Conforme a Primeira Lei de Ohm, qual é a fórmula para calcular a resistência elétrica? a) R=U.I b) R=I² c) R=U² d) R=U/I 10- Sabendo que ao aplicar a tensão de 50V sobre um determinado resistor a corrente elétrica é de 5A, qual é o valor do resistor? a) 5Ω b) 7Ω c) 20Ω d) 10Ω 10
  • 11. TEMA 2: COMPONENTES ELETRÔNICOS Todo circuito eletrônico terá um ou mais componentes eletrônicos, sendo que cada componente eletrônico pode ser utilizado para diversas finalidades. Numa placa mãe de um computador, por exemplo, teremos uma grande quantidade desses componentes. Neste capítulo serão mostrados os principais componentes eletrônicos que vocês utilizarão nas aulas, tais como: protoboards, resistores, leds, capacitores, relés, botões e dentre outros. 11
  • 12. Resistores Os resistores são componentes cuja função é limitar o fluxo de corrente numa determinada parte de um circuito eletrônico. Normalmente são feitos de materiais como carbono ou silício. Costumam esquentar por conta da dificuldade que eles aplicam à passagem de corrente elétrica, nesse processo, parte parte da energia elétrica é dissipada em forma de calor, também conhecida como efeito Joule. A unidade de medida dos resistores é em Ohms (Ω), os resistores podem ser classificados como de valor fixo ou variáveis. Abaixo temos um exemplo de um resistor de valor fixo de 100Ω , note que ele possui faixas coloridas, elas servem para mostrar o valor do resistor. Segue abaixo a tabela de código de cores para resistores de 4 faixas : 12
  • 13. A primeira faixa é a faixa mais próxima do terminal, ou seja, neste caso é a faixa marrom, após identificar a primeira faixa, consulte na tabela o número correspondente a cor da faixa, no caso a cor marrom possui o número 1, depois consulte o número da segunda faixa, no caso a cor preta é o número 0, e por último a terceira faixa será a quantidade de zeros, ou seja, a cor marrom é o número 1, então no lugar da terceira faixa colocamos apenas um zero. Portanto o valor do resistor abaixo é de 100 Ω, com tolerância de 5%, lembrando que a faixa de tolerância é a quarta faixa e como no caso ela é dourada, ao consultar na tabela a cor dourada na faixa de tolerância corresponde a 5%. Segue abaixo a simbologia de um resistor de valor fixo: 13
  • 14. Resistores variáveis Potenciômetro Um potenciômetro nada mais é do que um resistor variável, sendo utilizado para possibilitar o ajuste manual do valor de sua resistência elétrica. Segue abaixo a imagem de um potenciômetro e respectivamente a sua simbologia: Trimpot Os trimpots, assim como os potenciômetros, também são resistores variáveis, porém são feitos para ser ajustados somente por técnicos, por isso ele é menor, ele não possui um pino grande para ajuste como ocorre com o potenciômetro. O ajuste de um trimpot normalmente é feito com uma chave de fenda pequena. Segue abaixo a imagem de um trimpot e respectivamente a sua simbologia: 14
  • 15. LED Um led , é uma sigla de Light Emitting Diode, ou Diodo Emissor de Luz, nada mais é do que um componente eletrônico que emite luz, ele é muito utilizado, por exemplo, para sinalizar se um equipamento está ligado ou não, porém pode ser utilizado para diversos fins. Os leds possuem polarização, ou seja, um terminal será o positivo e o outro será negativo, o terminal positivo é o maior, conforme figura abaixo: Os leds trabalham com uma determinada tensão, dependendo da cor. Precisamos sempre nos atentar a tensão de trabalho do led para não corrermos o risco de queimá-lo. Se um determinado led trabalha com a tensão de 2V, ao aplicarmos uma tensão de, por exemplo 5V, o led irá queimar, portanto é uma boa prática sempre utilizar um resistor para ligar um led, assim será difícil queimá-lo por uma sobrecarga de tensão. 15
  • 16. Segue abaixo uma tabela com as tensões dos leds: Para dimensionar o valor do resistor para ligar um led, é muito simples, segue um exemplo. Suponha que temos uma alimentação de entrada de 5V, então utilizaremos a fórmula abaixo: 16
  • 17. Capacitores Um capacitor é um componente eletrônico que possui a capacidade de armazenar cargas elétricas por um período de tempo. É bastante utilizado para corrigir oscilações de tensão num circuito. A capacidade de armazenar cargas elétricas é denominada de capacitância, e a unidade de medida é em Farads (F). Os principais tipos de capacitores são: eletrolítico, poliéster e cerâmico. Capacitor Eletrolítico O capacitor eletrolítico é polarizado, ou seja, possui um terminal positivo e outro negativo. O terminal negativo é sinalizado com uma faixa. É necessário muita atenção para não inverter a polarização desse capacitor para evitar danificá-lo, em casos mais graves o capacitor poderá explodir. Este tipo de capacitor possui a maior capacitância, na casa dos microfarads (uF). Segue abaixo a imagem de um capacitor eletrolítico e respectivamente a sua simbologia: Capacitor de Poliéster São capacitores que normalmente possuem menor capacitância que os eletrolíticos, estando na casa do nanofarads (nF). Os capacitores de poliéster não possuem polarização. Segue abaixo a imagem de um capacitor de poliéster e respectivamente a sua simbologia: 17
  • 18. Capacitor Cerâmico Esse tipo de capacitor é muito utilizado em circuitos com necessidades de oscilações e de rádio frequência. É o que possui menor capacitância e não possui polarização, estando na casa do picofarads (pF). Segue abaixo uma imagem de um capacitor cerâmico e respectivamente a sua simbologia: Botões - Push Button Arduino Os botões do tipo Push Button para Arduino são chaves cuja a função é de fechar ou abrir o circuito, ou seja, deixa passar corrente elétrica ou não após ser pressionado. Temos dois tipos de push button, o normalmente aberto (NA) e o normalmente fechado (NF), a diferença é que o normalmente aberto o circuito está aberto ou seja, não está passando corrente elétrica no circuito, após ser pressionado ele fecha o circuito e assim passará corrente elétrica no circuito, o push button do tipo normalmente fechado possui o funcionamento contrário ao do normalmente aberto. 18
  • 19. Segue abaixo uma tabela ilustrando o funcionamento dos botões push button Arduino, dos tipos normalmente aberto (NA) e normalmente fechado (NF): Protoboard A protoboard é uma placa de ensaio feita para fins didáticos, pois ela facilita a criação de circuitos eletrônicos, bastando apenas conectar os terminais dos componentes eletrônicos nos furos respeitando os barramentos da placa. Existem protoboards de diversos tamanhos, desde as menores de 170 furos até as maiores 3220 furos.O tamanho ideal de uma protoboard para projetos, é a protoboard de 830 furos. Vamos agora entender os barramentos, note que algumas protoboards terão uma indicação com sinais de ( - ) e ( + ) para indicar que naquele local deverá ser energizado com a fonte de energia, bateria ou outros.É importante seguir o padrão, 19
  • 20. ou seja conectar o negativo da bateria em algum furo do barramento que possui a indicação com o sinal de ( - ) e seguindo a mesma lógica para o positivo. Note que na protoboard há colunas, na protoboard abaixo temos 30 colunas, cada coluna tem 5 furos, as colunas são independentes umas das outras, ou seja, ao energizar uma determinada somente ela estará energizada. Existe uma divisão no meio das protoboards, essa divisão divide as colunas. Por exemplo, a coluna 30 é dividida entre as linhas abcde e linhas fghij. 20
  • 21. Abaixo temos um exemplo de um circuito eletrônico, nele temos uma bateria de 9V, um resistor de 360Ω e um led. Segue um exemplo de como esse circuito pode ser montado numa protoboard, esse circuito foi montado através do site Tinkercad (https://www.tinkercad.com). 21
  • 22. Resumo Cada componente eletrônico possui uma determinada função e pode ser utilizado para diversas finalidades dependendo do circuito eletrônico. Os resistores criam uma resistência a passagem de corrente elétrica, os potenciômetros e os trimpots são resistores variáveis, os capacitores armazenam cargas elétricas por um período de tempo, os leds servem muitas vezes para sinalizar alguma coisa e as protoboards facilitam a criação de circuitos eletrônicos. Neste capítulo foram mencionados os principais componentes eletrônicos que vocês utilizarão no curso. Questões 1- Qual é a principal função de um resistor? a) Amplificar o fluxo de corrente elétrica do circuito eletrônico. b) Criar uma limitação para a passagem de corrente elétrica. c) Armazenar cargas elétricas por um período de tempo. d) Nenhuma das anteriores. 2- Qual é o valor da resistência do resistor abaixo? a) 360Ω b) 510Ω c) 100Ω d) 20Ω 3- Qual é o valor da resistência do resistor abaixo? a) 510Ω b) 10Ω c) 150Ω d) 15Ω 22
  • 23. 4- Sobre o potenciômetro, podemos dizer que: a) Trata-se de um resistor variável, cujo valor da resistência pode ser ajustado manualmente. Deve ser usado somente por técnicos. b) Trata-se de um resistor variável, cujo valor da resistência pode ser ajustado manualmente. c) Sua resistência não varia. d) Nenhuma das anteriores. 5- O que diferencia um potenciômetro de um trimpot? a) Os dois não possuem nenhuma diferença. b) O trimpot não possui uma interface para o usuário comum, ou seja, sendo assim, é ajustado normalmente por técnicos. c) O potenciômetro é mais frágil. d) Nenhuma das anteriores. 6- Qual é a tensão de trabalho de um led vermelho? a) Entre 3V a 5V b) Entre 1,8 a 2V c) Entre 1V a 1,8V d) Nenhuma das anteriores. 7- Sobre o capacitor eletrolítico podemos dizer que: a) Não é polarizado. b) É polarizado. c) É polarizado, porém não tem problema se inverter a polarização. d) Nenhuma das anteriores. 8- Sobre os botões push button Arduino do tipo NA, podemos dizer que: a) São normalmente abertos. b) São normalmente fechados. c) Deixam passar corrente sem serem pressionados. d) Nenhuma das anteriores. 9- Sobre os botões push button Arduino do tipo NF, podemos dizer que: a) São normalmente abertos. b) São normalmente fechados. c) Deixam passar corrente sem serem pressionados. d) Nenhuma das anteriores. 23
  • 24. 10- Conforme o circuito abaixo, por quê o LED não acende? a) Está invertida a polarização dos jumpers de alimentação do circuito. b) Não há nenhum problema com o circuito. c) Faltou colocar um jumper entre as colunas 28 e coluna 27, pois o circuito está aberto. d) Nenhuma das anteriores. 24
  • 25. TEMA 3: INTRODUÇÃO AOS MICROCONTROLADORES Os microcontroladores facilitaram a montagem e atualização de circuitos eletrônicos. Antes deles, era necessário montar um circuito específico com resistores, capacitores, indutores, transistores, chaves mecânicas e dentre outros. O problema é que o circuito eletrônico era montado somente com uma finalidade, e caso fosse necessário atualizar ou aplicar alguma melhoria, seria necessário retirar componentes que estivessem soldados nas placas de circuito impresso. Já com a utilização dos microcontroladores, o processo de melhoria, correção ou atualização é muito mais fácil, basta apenas alterar o código fonte que será executado pelos microcontroladores. Dentro dos microcontroladores haverá no mínimo: uma CPU, memória e circuitos de entrada e saída. Também podem ser conhecidos como controladores embarcados, pois eles são embutidos dentro dos circuitos eletrônicos de aparelhos que eles controlam. Os microcontroladores normalmente são programados com a linguagem Assembly, porém muitos já podem ser programados através da linguagem C, C++, BASIC e PASCAL. Os principais fabricantes de microcontroladores são: Atmel, Microchip, Intel, Frescale e dentre outras. 25
  • 26. A CPU (Unidade Central de Processamento) dos microcontroladores pode variar de 8,16 ou 32 bits, dependendo do modelo e fabricante. A CPU é responsável pelas operações matemáticas e lógicas (AND, OR e NOT). Dentro dos microcontroladores temos dois tipos de memória, a memória de programa e a memória de dados. A memória de programa armazena o código fonte escrito pelo programador, já a memória de dados armazena as informações temporárias que são trocadas entre a CPU e os contadores e/ou registradores. A tensão de trabalho dos microcontroladores normalmente é de 5 volts, mas há microcontroladores que podem trabalhar com tensões de 2 volts até 6 volts. Boa parte dos pinos de um microcontrolador são usados para a entrada e saída de dados, também conhecidos como (Ports), sendo que um microcontrolador pode ter de 8 até 100 pinos. O microcontrolador ATmega328 O microcontrolador ATmega328 é um microcontrolador da Atmel Corporation, trata-se de um microcontrolador do tipo AVR, a sigla AVR significa Advanced Virtual RISC, RISC significa Reduced Instruction Set Computer, ou seja, um computador com um conjunto reduzido de instruções. Contém 28 pinos, sendo que 23 pinos são para entrada e saída de dados. Possui uma CPU de 8 bits do tipo AVR e memória flash de 32kB. Alguns modelos de Arduino utilizam esse microcontrolador, como por exemplo o Arduino Uno. 26
  • 27. Abaixo temos uma imagem de uma placa do Arduino Uno R3, em destaque o microcontrolador ATmega328. Resumo Os microcontroladores são os cérebros dos equipamentos que eles controlam, eles recebem um software que pode ser atualizado em caso de necessidade. Sem o software o microcontrolador não terá nenhuma função. Existem vários tipos de microcontroladores, o Arduino Uno R3 utiliza o microcontrolador ATmega328. Questões 1- Um microcontrolador em sua arquitetura terá no mínimo: a) Uma CPU. b) Uma CPU e memória. c) Uma CPU, memória e circuitos de entrada e saída. d) Nenhuma das anteriores. 27
  • 28. 2- Os pinos de entradas e saídas de um microcontrolador também são conhecidos como: a) Torks. b) Ports. c) Forks. d) Nenhum das anteriores. 3- No microcontrolador existe uma memória que armazena o programa escrito pelo programador, o nome dessa memória é: a) Memória de dados. b) Memória de programa. c) Memória volátil. d) Nenhuma das anteriores. 4- No microcontrolador existe uma memória que armazena as informações temporárias que são trocadas entre a CPU e os contadores e/ou registradores, o nome dessa memória é: a) Memória de dados. b) Memória de programa. c) Memória volátil. d) Nenhuma das anteriores. 5- Normalmente qual é a tensão de trabalho dos microcontroladores? a) 1V b) 7V c) 5V d) 16V 6- Sobre o microcontrolador ATmega328, podemos dizer que: a) É do tipo PCR. b) É do tipo AVY. c) É do tipo AVR. d) Nenhuma das anteriores. 7- Sobre o microcontrolador ATmega328, podemos dizer que: a) Possui CPU de 4 bits. b) Possui CPU de 2 bits. c) Possui CPU de 128 bits. d) Possui CPU de 8 bits. 28
  • 29. 8- Selecione a alternativa cuja a linguagem não é uma linguagem de programação para microcontroladores. a) C++ b) C c) HTML d) Assembly 9- A memória flash do microcontrolador ATmega328 é de: a) 64kB b) 16kB c) 8kB d) 32kB 10- Empresa responsável pela fabricação dos microcontroladores da família ATMega: a) Microchip. b) Intel. c) Frescale. d) Nenhuma das anteriores. 29
  • 30. TEMA 4: ARDUINO - HARDWARE O Arduino é uma placa de prototipagem eletrônica de hardware livre, lançado em 2005, na cidade de Ivrea, Itália. Seus idealizadores o criaram com o intuito de criar uma placa de prototipagem eletrônica que fosse de baixo custo e de fácil utilização. Desde então ele é a porta de entrada de muitos estudantes para o mundo da eletrônica, robótica e programação. Atualmente o Arduino possui diversas placas como: Arduino Uno, Arduino Mega 2560, Arduino Leonardo, Arduino Due, Arduino Mega ADK, Arduino Nano, Arduino Pro Mini e o Arduino Esplora. O Arduino também pode ter a sua capacidade expandida através das Shields, que são placas de expansão como módulo bluetooth, LCD Shield com Teclado, Protoshield, Base Shield Groove, Motor Shield L293D e dentre outros. Esses módulos são encaixados no Arduino. A seguir veremos mais detalhes sobre as placas do Arduino. 30
  • 31. Placas do Arduino Arduino Mega 2560 É um Arduino que utiliza o microcontrolador ATMega2560, possui 54 portas digitais, sendo que 15 delas podem ser usadas como PWM, e possui 15 portas analógicas. Arduino Leonardo É muito parecido com o Arduino Uno, porém utiliza o microcontrolador ATMega32u4. Ele possui 20 portas digitais, sendo que 7 delas podem ser utilizadas como PWM, e possui 12 portas analógicas. 31
  • 32. Arduino Due Placa com maior capacidade de processamento, utiliza o microcontrolador ARM de 32 bits e 512kB de memória. Possui 54 portas digitais, das quais 12 podem ser usadas como PWM, além disso possui 12 portas analógicas. Arduino Mega ADK Utiliza o microcontrolador ATMega2560, possui um conector USB específico para a conexão com celulares que utilizam o sistema operacional Android. Possui 54 portas digitais, sendo que 15 delas podem ser usadas como PWM, e também possui 16 portas analógicas. 32
  • 33. Arduino Nano É uma versão menor, utiliza o microcontrolador ATMega328. Não possui um conector de alimentação externa como as outras placas, sendo alimentada diretamente através da porta USB. É recomendado para projetos compactos. Possui 32kB de memória. Arduino PRO Mini O Arduino PRO Mini é uma placa compacta, recomendada para projetos que não irão necessitar de atualizações constantes. Possui 14 portas digitais, sendo que 6 delas podem ser utilizadas como PWM. Além disso possui 8 portas analógicas. 33
  • 34. Arduino Esplora Possui diversos sensores em sua construção, tais como: buzzer, potenciômetro deslizante, microfone, joystick analógico e dentre outros. Arduino Uno Trata-se da placa mais popular do Arduino, pois é indicada para iniciantes. Os exemplos e projetos que serão dados na apostila terão como base o Arduino Uno. 34
  • 35. A placa Arduino Uno possui 14 portas digitais, sendo que 6 delas podem ser utilizadas como PWM. Ela ainda conta com 6 portas analógicas. A placa do Arduino Uno pode ser alimentada através de uma fonte de alimentação externa que deverá ter entre 7V a 12V ou poderá ser alimentada através da porta USB. Para projetos simples não há problema em utilizar a porta USB como alimentação do Arduino, porém para projetos que necessitem uma corrente elétrica maior como por exemplo que envolvam motores, é recomendado que a alimentação seja feita através de uma fonte de alimentação externa. O Microcontrolador ATmega328 é nele onde todo o processamento de dados é feito. Ele possui basicamente uma CPU com clock de 20 MHz, 8 bits e 32 kB de memória flash. Sensores e Atuadores Sensores Sensores são componentes eletrônicos que possuem a capacidade de perceber variações no ambiente (luz, presença, chamas e etc) e por conta disso geram sinais elétricos com o objetivo de alertar ou sinalizar alguma ocorrência. Por exemplo, um sensor de presença poderá gerar um sinal elétrico para algum circuito que fará com que uma lâmpada se acenda. Existem vários tipos de sensores, cada um para uma finalidade, por exemplo: senso de presença, sensor de temperatura, sensor de gases, sensor de corrente elétrica, LDR (luminosidade) e dentre outros. Boa parte dos sensores do Arduino estão em forma de módulos, ou seja, para utilizá-los basta conectá-los ao Arduino. Sensor de Presença PIR - HC-SR501 35
  • 36. Atuadores Os atuadores, ao contrário dos sensores, recebem um sinal elétrico, hidráulico ou pneumático e convertem em energia mecânica. Um bom exemplo, são os motores que convertem energia elétrica em energia mecânica. Motor de passo DC Módulos de expansão (Shields) Os módulos de expansão do Arduino, também conhecidos como Shields, são placas que irão aumentar a capacidade do Arduino, e cada placa possui uma finalidade. Elas são projetadas para ser encaixadas diretamente no pinos da placa do Arduino. Seguem abaixo alguns módulos do Arduino. Módulo RFID Através do módulo RFID, é possível o desenvolvimento de um projeto para controle de acesso de pessoas. 36
  • 37. Módulo Ultrassom O módulo ultrassom, é adequado para projetos onde é necessário medir a distância do equipamento com algum outro objeto, assim dependendo da distância ocorre alguma ação, por exemplo o carrinho para de andar, ou campainha emite algum som e assim por diante. Módulo Giroscópio (MPU) O objetivo dele é de detectar um movimento do Arduino, por exemplo, imagine um robô, este módulo indicará a posição dele, para saber se ele tombou ou não. Módulo Relé Relés são chaves eletromecânicas, após receberem um sinal elétrico ele irá fechar ou abrir um circuito externo, por exemplo, poderá acender uma lâmpada. 37
  • 38. Resumo Verificamos que existem diversas placas do Arduino, as placas variam das simples com poucas portas digitais, PWM e analógicas até mesmo as com maiores capacidades de processamento e com um número alto de portas. O Arduino Uno é o mais popular dentre todas as placas de Arduino, pois ele é feito para iniciantes. Esta será a placa que usaremos nos exemplos da apostila. Os sensores e atuadores prestam um papel fundamental para a criação de projetos de automação. Muitos sensores são embutidos em módulos, assim facilitando a utilização deles. Os módulos são placas de expansão que aumentam a capacidade do Arduino, cada módulo possui uma finalidade diferente. Questões 1- O Arduino Uno pode ser alimentado através: a) Do conector jack fêmea e/ou porta USB. b) Somente através do conector jack fêmea. c) Somente pela porta USB. d) Nenhuma das anteriores. 2- A tensão de alimentação externa do Arduino feita através de uma fonte, não deve ultrapassar: a) 5V b) 7V c) 12V d) 9V 3- O Arduino Due, possui quantas portas digitais? a) 20. b) 15 c) 14 d) 54 4- São os elementos finais de um de controle, atuando sobre uma variação do processo em resposta ao comando recebido, estamos falando de: a) Sensores b) Atuadores c) Controladores d) Processadores 38
  • 39. 5- O módulo RFID para Arduino permite: a) A verificação se a placa do Arduino foi movimentada. b) A medição da distância do Arduino com algum outro objeto. c) A medição da temperatura. d) Nenhuma das anteriores. 6- O módulo Relé para Arduino permite: a) A verificação se a placa do Arduino foi movimentada. b) A medição da distância do Arduino com algum outro objeto. c) O acionamento de um circuito externo. d) Nenhuma das anteriores. 7- O módulo Giroscópio para Arduino permite: a) A verificação se a placa do Arduino foi movimentada. b) A medição da distância do Arduino com algum outro objeto. c) O acionamento de um circuito externo. d) Nenhuma das anteriores. 8- Um motor é um: a) Sensor. b) Atuador. c) Controlador. d) Processador. 9- O Arduino Nano é indicado para: a) Projetos compactos. b) Qualquer projeto. c) Para um projeto que necessita de uma grande quantidade de portas digitais. d) Nenhuma das anteriores. 10- Quantas portas digitais possui o Arduino Uno? a) 10 b) 9 c) 15 d) 14 39
  • 40. TEMA 5: O IDE DO ARDUINO O IDE (Integrated Development Environment), trata-se de um ambiente de desenvolvimento integrado, é um software que os desenvolvedores utilizam para criar programas. Um IDE possui diversas ferramentas que auxiliam os programadores, como por exemplo, um editor de texto que realça a sintaxe das linguagens de programação com cores diferentes e um debugger onde o desenvolvedor pode executar o seu código e caso haja algum problema o IDE irá mostrar em qual linha está o bug do código. O Arduino IDE é o ambiente de desenvolvimento do Arduino, através dele é possível criar programas e gravá-los na placa do Arduino. Os programas feitos na IDE do Arduino são gravados diretamente nos microcontroladores das placas do Arduino. O IDE do Arduino pode ser baixado através do site oficial, ou pode ser utilizado na versão online disponibilizada também no site. 40
  • 41. Instalação do IDE Arduino 1- Acesse o site oficial do Arduino: https://www.arduino.cc/ 2- No menu principal clique em “Software”. 3- Faça o download do instalador conforme o sistema operacional do seu computador. 41
  • 42. 4- Nesta parte basta clicar em “Just download”, que significa “apenas faça o download." 5- Após abrir o arquivo do instalador do IDE do Arduino, clique em “I Agree”. 42
  • 43. 6- Nesta tela basta clicar em “Next”. 7- Nesta tela clique em “Install”. 43
  • 44. 8- Após a conclusão clique em “Close”. Configuração 1- Após a instalação, abra o Arduino clicando no ícone do programa que encontra-se na área de trabalho do seu computador. Aparecerá a tela abaixo: 44
  • 45. As linhas de código que aparecem, já vem por padrão, e serão utilizadas em nossos programas. Na próxima disciplina, Programação para Sistemas Embarcados, vocês aprenderão em detalhes o que significam essas linhas de código. 2- Conecte a placa do Arduino Uno ao seu computador através da porta USB, utilizando o cabo USB que veio junto com a placa do Arduino. 3- Clique em Ferramentas => Placa: => Arduino Uno, poderia ser outra placa, mas no nosso caso será a placa Arduino Uno, que é a placa que usaremos nesta apostila. 45
  • 46. 4- Clique em Ferramentas => Porta: “COM (Arduino Uno)” => COM (Arduino Uno), a numeração da porta COM onde está configurada a placa do Arduino irá variar de computador para computador. 5- Agora vamos fazer um testar se o IDE e a placa do Arduino estão funcionando normalmente, basta clicar em: Arquivo => Exemplos => 01. Basics => Blink. 46
  • 47. 6- Clique no botão carregar para que o IDE envie e faça a gravação do código fonte (sketch) do programa de exemplo na placa (microcontrolador) do Arduino. 7- Verifique se o pequeno led da própria placa do Arduino está piscando, se sim, o teste foi executado com sucesso. Abaixo segue mais detalhes das principais ferramentas do IDE Arduino: 47
  • 48. Resumo O IDE é um ambiente de desenvolvimento integrado, que possui diversas ferramentas para auxiliar o programador. No Arduino IDE é possível criarmos os programas que serão gravados na placa do Arduino. O download do instalador do Arduino IDE deve sempre ser feito através do site oficial do Arduino, sendo que o processo de instalação e configuração é simples e intuitivo. Questões 1- O que é um IDE? a) É um microcontrolador. b) É uma linguagem de programação. c) É um ambiente de desenvolvimento integrado. d) Nenhuma das anteriores. 2- Podemos baixar o IDE do Arduino de outros sites que não seja o oficial do Arduino? a) Sim, pois o importante é ter o instalador, não importa de qual site. b) Sim, não tem problema algum. c) Não, por segurança todo software deve ser baixado do site oficial. d) Nenhuma das anteriores. 3- Existe uma versão online do IDE Arduino? a) Sim, no próprio site oficial tem uma versão online do IDE do Arduino. b) Não, no site oficial só há a opção para fazer o download do instalador do IDE do Arduino. c) Não, a versão online ainda não está disponível para o público. d) Nenhuma das anteriores. 4- Podemos dizer que o IDE do Arduino é multiplataforma? a) Não, só existe versão para Windows. b) Não, só existe versão para Mac OS. c) Sim, existem versões para Windows, Mac Os e Linux. d) Nenhuma das anteriores. 48
  • 49. 5- Após a instalação do IDE do Arduino, não é necessário fazer nenhuma configuração, basta começar a programar. Podemos dizer que essa afirmação está: a) Correta, após a instalação ,o IDE já estará configurado corretamente. b) Errada, pois após a instalação devemos configurar a placa do Arduino que iremos utilizar. c) Errada, pois após a instalação devemos configurar a porta de comunicação que será usada pela Arduino. d) Errada, pois após a instalação devemos configurar a placa do Arduino que iremos usar e também a porta de comunicação que será utilizada pelo Arduino. 6- Para configurar o IDE Arduino para a placa do Arduino que iremos utilizar,em qual opção do menu está disponível essa opção? a) Arquivo b) Editar c) Sketch d) Ferramentas 7- Para configurar a porta de comunicação do Arduino que iremos utilizar, em qual opção do menu está disponível essa opção? a) Arquivo b) Ajuda c) Editar d) Nenhuma das anteriores 8- Sabemos que o IDE Arduino já vem com vários códigos de programas como exemplo, em qual opção do menu está disponível essa opção? a) Arquivo b) Editar c) Sketch d) Ferramentas 49
  • 50. 9- A ferramenta da imagem abaixo possui qual função? a) Carregar o sketch na placa do Arduino. b) Criar um novo sketch. c) Salvar o sketch. d) Compilar o sketch em busca de erros no código. 10- A ferramenta da imagem abaixo possui qual função? a) Carregar o sketch na placa do Arduino. b) Criar um novo sketch. c) Salvar o sketch. d) Compilar o sketch em busca de erros no código. 50
  • 51. INTRODUÇÃO - PROGRAMAÇÃO DE MICROCONTROLADORES A programação de sistemas embarcados tem crescido muito nos últimos anos, trata-se de um mercado muito promissor. Os sistemas embarcados estão em muitas coisas do nosso cotidiano, como por exemplo: em aviões, carros, elevadores, equipamentos médicos e etc. O Arduino é uma plataforma de prototipagem eletrônica, utilizada para fins didáticos com o intuito de ser a porta de entrada dos estudantes para a área de programação, eletrônica e robótica. Nesta disciplina vocês aprenderão a desenvolver programas para microcontroladores, especificamente para microcontroladores do Arduino. Para isso, vocês aprenderão sobre: variáveis, laços de repetição, condicionais, funções, bibliotecas e dentre outras. 51
  • 52. TEMA 1: INTRODUÇÃO À LINGUAGEM DO ARDUINO A linguagem utilizada para criar projetos para o Arduino, é a linguagem baseada em C++. Ela foi adaptada pelos seus idealizadores para facilitar o entendimento daqueles que não conhecem programação. Algoritmo Um algoritmo é um conjunto de instruções de um programa, sendo que todo programa possui um algoritmo. Podemos fazer uma analogia com uma receita de bolo, onde o cozinheiro deverá seguir à risca as instruções da receita, então a receita de bolo também pode ser vista como um algoritmo. 52
  • 53. O IDE do Arduino Toda vez que um projeto é criado no IDE do Arduino, uma estrutura de código padrão é adicionada automaticamente no Editor, além de criar um nome para o seu projeto, o nome automático que é gerado recebe a palavra sketch_ +mês e dia da criação, o nome poderá ser alterado caso seja necessário. Atenção as linhas que fazem parte da estrutura básica do projeto, não podem ser apagadas, ou seja, as funções setup() e loop() são indispensáveis para o funcionamento do programa. Segue abaixo uma tela de exemplo do Editor do IDE do Arduino: 53
  • 54. A palavra void escrita antes das funções, significa que essas funções não retornam nenhum valor. Os parênteses vazios nas duas funções significa que elas não possuem nenhum parâmetro. Importante ressaltar que as linhas de código que ficam dentro da função setup() serão executadas uma única vez. Já as linhas de código que ficam dentro da função loop() serão executadas indefinidamente até que a placa seja desligada ou outro comando interrompa a execução. Exemplo: Neste exemplo utilizaremos saída de dados através do monitor serial. Para utilizarmos monitor serial é necessário que a placa do Arduino esteja conectada ao computador via cabo USB. Para mostrarmos alguma coisa em tela via monitor serial, podemos utilizar as funções Serial.print() ou Serial.println(), a única diferença entre elas é que a função Serial.println() pula uma linha. Porém, para utilizá-las, devemos primeiro carregar a função Serial.begin() dentro da função setup(). O valor de 9600 é referente à taxa de transmissão de dados pela porta USB do computador. Faça a compilação do código acima e depois faça o upload do código para a placa do Arduino. Após fazer isso, vá até Ferramentas => Monitor Serial. 54
  • 55. Conforme a tela abaixo, note que a frase “Olá mundo!”, foi executada apenas uma única vez: Agora vamos testar o código abaixo, note que mantivemos o carregamento da função Serial.begin() dentro da função setup(), a diferença é que a função Serial.println() foi colocada na dentro da função loop(). Após compilar o código, carregue o código na placa do Arduino, vá novamente até o monitor serial.Como a função Serial.println() foi colocada dentro da função loop(), note que a mensagem “Olá mundo!” está sendo exibida num looping infinito (sem fim). 55
  • 56. Comentários Note que na linha 1 do nosso código há um comentário, as linguagens de programação possuem os comentários, que servem unicamente para explicar ou documentar o código para os programadores entenderem com mais facilidade o que o código faz. Trata-se de uma boa prática comentar o seu código, independente da linguagem de programação ou complexidade do programa. Na linguagem do Arduino os comentários são feitos através dos caracteres // para comentar somente uma linha ou /* para comentar mais de uma linha, exemplo: /*Aqui dentro ficará o comentário */. Resumo A linguagem do Arduino é baseada na linguagem C++ com algumas adaptações para facilitar o aprendizado daqueles que são leigos em programação.O código da Arduino possui uma estrutura básica composta pelas funções setup() e loop(), ambas são indispensáveis para o funcionamento do programa. As linhas de código que ficam dentro da função setup() serão executadas somente uma única vez. Já as linhas que ficam dentro da função loop() serão executadas indefinidamente até que a placa do Arduino seja desligada, então a função loop serve como um laço de repetição. A função Serial.println() é uma função de saída de dados, os mesmos poderão ser visualizados no monitor serial. 56
  • 57. Questões 1- Toda linha de código do programa do Arduino deve ser finalizado com: a) ; b) . c) : d) ! 2- Todo programa feito para Arduino possui uma estrutura básica formada pelas funções: a) setup() e Serial.println() b) loop() e Serial.println() c) setup() e Serial.begin() d) setup() e loop() 3- Sobre a função setup() podemos dizer que: a) O código que está dentro dele será executado indefinidamente. b) O código que está dentro dele será executado uma única vez. c) É uma função totalmente dispensável. d) Nenhuma das anteriores. 4- Sobre a função loop() podemos dizer que: a) O código que está dentro dele será executado indefinidamente. b) O código que está dentro dele será executado uma única vez. c) É uma função totalmente dispensável. d) Nenhuma das anteriores. 5- A função Serial.begin() serve para: a) Utilizarmos as funções de tempo. b) Utilizarmos as funções matemáticas. c) Utilizarmos as funções Serial.println() ou Serial.print() d) Nenhuma das anteriores. 6- Para utilizar o monitor serial precisamos: a) Conectar a placa do Arduino ao computador através da porta USB. b) Basta abrir o monitor serial disponível no IDE do Arduino, não há necessidade da placa do Arduino estar conectada ao computador. c) Tanto faz conectar ou não a placa do Arduino ao computador, o monitor serial irá funcionar de qualquer forma. d) Nenhuma das anteriores. 57
  • 58. 7- Selecione a alternativa cujo o comentário foi criado corretamente: a) ///Primeiro programa. b) /Primeiro programa. c) //Primeiro programa. d) Nenhuma das anteriores. 8- Qual valor devemos colocar dentro dos parênteses da função Serial.begin() ? a) 5000 b) 4200 c) 9000 d) 9600 9- Sobre os comentários nos programas, podemos dizer que: a) Não obrigatórios e são dispensáveis para programadores experientes. b) Não são obrigatórios e são dispensáveis para qualquer tipo de programador. c) Não são obrigatórios, mas é uma boa prática, é recomendável mesmo que o programador seja experiente. d) Nenhuma das anteriores. 10- O comentário feito com // é utilizado para comentar: a) Apenas uma linha. b) Apenas duas linhas. c) Apenas três linhas. d) Nenhuma das anteriores. 58
  • 59. TEMA 2: VARIÁVEIS As variáveis posições na memória do computador para armazenar valores, que podem ser: números inteiros, números reais, caracteres, booleanos e dentre outros. No Arduino as variáveis são armazenadas na memória que fica dentro do microcontrolador.Esses valores são armazenados durante a execução do programa e são descartados após o desligamento da placa. Variáveis globais e locais Globais As variáveis globais são variáveis que podem ser utilizadas por todo o algoritmo. 59
  • 60. Locais Já as variáveis locais, são variáveis utilizadas somente numa parte do algoritmo, por exemplo, dentro de funções. Sendo assim, a sua utilização é mais limitada, porém muito útil para evitar confusões. Tipos de variáveis Inteiros A variável do tipo inteiro irá armazenar números que não possuem casa decimal. Exemplo: Números reais As variáveis desse tipo esperam armazenar números que possuem casas decimais após a vírgula (ou ponto). Exemplo: 60
  • 61. Caractere As variáveis do tipo caracter, deverão armazenar somente letras e/ou palavras. Números também podem ser armazenados, porém serão interpretados como palavras e não como números. Exemplo 1: Criando uma variável do tipo inteiro (int) Para criarmos uma variável do tipo inteiro primeiro escrevemos int e depois o nome da variável, veja as linhas 2,3 e 4 do código abaixo, nela declaramos três variáveis a,b e soma: No código, a atribuição de valores para as variáveis a,b e soma, são feitas nas linhas 9,10 e 11. Note que a atribuição de um valor para uma variável é feita através do sinal de = (igual). 61
  • 62. Segue abaixo o restante do programa: Segue abaixo o resultado final no monitor serial: 62
  • 63. Operadores aritméticos Segue abaixo os operadores aritméticos que podem ser utilizados para cálculos matemáticos envolvendo as variáveis. Exemplo 2: Criando uma variável do tipo real (float) Para criarmos uma variável do tipo real (float) primeiro escrevemos float e depois o nome da variável, veja as linhas 2,3 e 4 do código abaixo, nela declaramos três variáveis a,b e soma: 63
  • 64. Segue abaixo o restante do programa, note que os números reais são atribuídos nas linhas 9,10 e 11. Segue abaixo o resultado final no monitor serial: 64
  • 65. Exemplo 3: Criando uma variável do tipo caractere Para criarmos uma variável do tipo caractere (char) primeiro escrevemos char e depois o nome da variável, veja a 2 do código abaixo, nela declaramos a variável chamada letra. Na linha 7 é atribuída a letra “a” para a variável “letra”. Segue abaixo o resultado final no monitor serial: 65
  • 66. Alguns exemplos de nomes inválidos para variáveis: ● while - Não use palavras reservadas da linguagem ● 2x - Não inicie o nome de uma variável com um número; ● acende led - não use espaços em branco entre duas palavras ou deixe todas as palavras juntas ou utilize o underscore _, exemplo: acendeLed ou acende_led; ● você - não utilize caracteres especiais como acentos em nomes de variáveis. Resumo As variáveis são espaços reservados na memória, cujo objetivo é de armazenar algum valor. O tipo da variável irá variar do que ela irá armazenar, por exemplo uma variável que irá armazenar um número inteiro deverá ser declarada com o tipo inteiro. Os valores armazenados nas variáveis serão excluídos após o desligamento da placa do Arduino. Questões 1- Qual alternativa declarou corretamente uma variável do tipo inteiro? a) inteiro temperatura; b) int temperatura; c) float temperatura; d) char temperatura; 2- Qual alternativa declarou corretamente uma variável do tipo real? a) real distancia; b) float distancia; c) int distancia; d) char distancia; 3- Qual alternativa declarou corretamente uma variável do tipo caractere? a) caractere letra; b) carac letra; c) char letra; d) character letra; 66
  • 67. 4- Qual é o problema do código abaixo? a) Não há nenhum problema. b) Todas as variáveis deveriam ser do tipo float, pois armazenam números reais. c) Apenas a variável soma deveria ser do tipo float. d) Nenhuma das anteriores. 5- Qual é o operador aritmético de multiplicação? a) x b) X c) % d) * 6- Qual é o operador aritmético que retorna o resto de uma divisão? a) / b) // c) /* d) % 67
  • 68. 7- Qual variável foi criada corretamente? a) int botao = 0; b) int botão = 0; c) int botão ligado = 0; d) int 1botão = 0; 8- É possível realizar operações entre variáveis que possuem números inteiros e números reais, porém se o resultado for um número real, a variável que receberá o resultado precisa ser do tipo real. Esta afirmação é: a) Verdadeira b) Falsa 9- É possível declarar uma variável e ao mesmo tempo atribuir um valor para ela? a) Sim. b) Não. 10- Os valores armazenados nas variáveis duram por quanto tempo? a) Duram por 2 horas. b) Duram por 1 dia. c) Duram até os valores serem alterados pelo programa e/ou após serem apagadas quando o Arduino for desligado. d) Nenhuma das anteriores. 68
  • 69. TEMA 3: CONDICIONAIS As condicionais são condições impostas para que algo aconteça, ou seja, espera-se que uma condição seja verdadeira ou falsa, e para cada uma das situações o programa fará alguma ação especificada pelo programador. As condicionais são partes fundamentais nos programas, pois devemos tentar prever as situações que podem ocorrer, por exemplo, imagine que num determinado lugar exista uma automatização criada para ligar o ar condicionado quando a temperatura ambiente for maior ou igual a 26ºC. Então, notem que há uma condição para o ar condicionado ser ligado, ou seja, temperatura maior ou igual, se a condição for falsa o ar condicionado permanecerá desligado. 69
  • 70. A condicional é feita utilizando o if, funciona da seguinte forma: if (condição) { Ação caso a condição seja verdadeira. } else { Ação caso a condição seja falsa. } A palavra if significa se, e a palavra else significa senão. Exemplo: Criamos uma variável do tipo float chamada temperatura : Dentro da função setup(), iremos atribuir o número 26 para a variável temperatura. 70
  • 71. Na linha 11 observe que utilizamos um if cuja a condição é se a temperatura for maior ou igual a 26, caso essa condição seja verdadeira irá aparecer uma mensagem: “O ambiente está quente!”, caso seja falsa aparecerá uma mensagem:”O ambiente está com uma temperatura agradável”. Restante do programa: 71
  • 72. Resultado final no monitor serial. Operadores de comparação Os operadores de comparação são essenciais para as condicionais, abaixo segue os operadores de comparação mais utilizados: Operadores booleanos Os operadores booleanos permitem que utilizemos mais de uma condição dentro de uma condicional, os mais utilizados são os operadores && (e) e o || (ou). 72
  • 73. Exemplo: Declaramos duas variáveis como do tipo booleana, a variável janela_aberta e porta_aberta e atribuímos o valor true (verdadeiro). Note que o algoritmo possui uma condicional que faz duas verificações, caso alguma das variáveis janela_aberta ou porta_aberta seja igual a true, irá aparecer uma mensagem: “Alguém entrou na casa!”. Resumo Utilizamos condicionais todos os dias, elas são muito importantes para tomadas de decisão. Por exemplo, se alguém pensar: “se fizer sol amanhã eu irei para a praia”, então ir para a praia está condicionado à condição de fazer sol no dia seguinte. Na programação utilizamos as condicionais para prever cenários, e uma tomada de ação para cada cenário. 73
  • 74. Questões 1- Com base no código abaixo, assinale a alternativa correta: a) Aparecerá a mensagem: “A é maior que zero”. b) Aparecerá a mensagem: “A é igual a zero”. c) Aparecerá a mensagem: “A é menor que zero”. d) Não aparecerá nenhuma mensagem. 2- Com base no código abaixo, assinale a alternativa correta: a) Aparecerá a mensagem: “A é maior que zero”. b) Aparecerá a mensagem: “A é igual a zero”. c) Aparecerá a mensagem: “A é menor ou igual a zero”. d) Não aparecerá nenhuma mensagem. 74
  • 75. 3- Há um limite de condições que podemos aplicar à uma condicional “if” quando utilizamos operadores booleanos? a) Podemos utilizar no máximo duas condições. b) Podemos utilizar no máximo três condições. c) Podemos utilizar no máximo quatro condições. d) Nenhuma das anteriores. 4- O que significa a palavra “if” ? a) Senão b) Se c) Talvez d) Então 5- O que significa a palavra “else”? a) Se b) Talvez c) Então d) Senão 6- É obrigatório utilizarmos o “else” quando criamos uma condicional com o “if”? a) Sim, é obrigatório. b) Sim, é obrigatório, principalmente se utilizarmos operadores booleanos. c) Não, é opcional, vai depender do programa. d) Nenhuma das anteriores. 7- Qual é a função do operador “==” no código abaixo? a) Comparar/verificar se as variáveis são iguais a “true”. b) Atribuir o valor “true” para as variáveis. c) Adiciona o valor “true” duas vezes para as variáveis, d) Nenhuma das anteriores. 75
  • 76. 8- O operador “&&” significa: a) ou b) e c) Não d) Nenhuma das alternativas 9- O operador “||” significa: a) e b) ou c) Não d) Talvez 10- O operador “ != ” significa: a) Igual b) Maior c) Menor d) Diferente 76
  • 77. TEMA 4: LAÇOS DE REPETIÇÃO Os laços de repetição são muito utilizados num programa, muitas vezes necessitamos que o programa repita várias vezes uma ou mais linhas de código por alguma finalidade. É importante que o laço de repetição não fique em looping infinito, para isso são utilizadas variáveis de controle a fim de evitar esse problema. A função loop() já faz o trabalho de repetir as linhas de código que colocamos dentro dela, porém não é possível configurá-la quantas vezes quisermos que ela repita. Portanto, quando desejarmos estipular uma quantidade específica de repetições das linhas de código, necessitamos utilizar os laços de repetição específicos para essa tarefa. Os laços de repetição mais utilizados são o for() e o while(). 77
  • 78. Laço de repetição for() O laço de repetição “for”, que significa “para”, é um tipo de laço onde definimos a quantidade de vezes que as instruções serão repetidas. Ele utiliza uma variável de controle. Segue abaixo como é a estrutura do laço de repetição for(): for (início ; condição ; incremento) { Instrução 1; Instrução 2; Instrução 3; … } Exemplo: 78
  • 79. Resultado no monitor serial: Note que o resultado são números de 1 até 10, graças ao laço de repetição for() que auto-incrementa a variável “i” a cada repetição, o laço de repetição acaba quando “i” é igual a 11. Laço de repetição while() While que significa enquanto, funciona da seguinte forma, enquanto a condição for verdadeira as instruções do laço serão repetidas. Segue abaixo como é a estrutura do laço de repetição while(): while (condição) { Instrução 1; Instrução 2; Instrução 3; . . . } 79
  • 80. Exemplo: Note que na linha 9, a variável “i” que é a variável de controle do laço de repetição while(), é inicializada com o valor 1. Por isso, o laço de repetição é executado, pois “i” é menor que o número 5. Note que o laço é executado, enquanto “i” for menor ou igual a 5. Note na linha 14 que a variável de controle “i” é auto-incrementada, sem não houvesse esse auto-incremento dentro do laço de repetição, o programa ficaria em looping infinito. 80
  • 81. Resultado no monitor serial: Resumo Verificamos que os laços de repetição for e while, são importantes quando desejamos que as instruções sejam repetidas numa determinada quantidade de vezes. Não há um laço de repetição melhor do que outro, cada um pode ser utilizado para uma finalidade e afinidade do programador. Questões 1- No laço de repetição “for” é possível definirmos quantas vezes ele irá repetir? a) Sim, mas até 5 vezes. b) Sim, mas até 10 vezes. c) Sim, mas até 15 vezes. d) Nenhuma das anteriores. 2- Sobre o início da variável de controle no laço de repetição “for”, podemos dizer que: a) O início deverá sempre ser igual a 1. b) O início deverá sempre ser igual a 2. c) Não é possível começar com o número 0. d) Nenhuma das anteriores. 3- “For” significa: a) Próximo b) Passo c) Para d) Nenhuma das anteriores. 81
  • 82. 4- O que é looping infinito? a) Quando o laço de repetição é executado mais de 100 vezes. b) Quando o laço de repetição não inicia. c) Quando o laço de repetição é executado algumas vezes e depois para. d) Quando o laço de repetição fica repetindo sem parar. 5- O que significa “while”: a) Para b) Próximo c) Enquanto d) Nenhuma das anteriores. 6- Sobre o laço de repetição “while” podemos dizer que: a) As instruções são executadas enquanto a condição for falsa. b) As instruções são executadas enquanto a condição for verdadeira. c) As instruções são executadas por até no máximo 10 vezes. d) Nenhuma das anteriores. 7- Sobre o código abaixo podemos dizer que: a) Não há nenhum erro. b) O laço de repetição está em looping infinito. c) Faltou fazer a variável ser auto-incrementada. d) Nunca entrará no laço de repetição. 82
  • 83. 8- Sobre o código abaixo podemos dizer que: a) Não há nenhum erro. b) O laço de repetição está em looping infinito. c) Faltou fazer a variável ser auto-incrementada. d) Nunca entrará no laço de repetição. 9- Analisando o código abaixo, qual é o valor de “i” na última repetição? a) 3 b) 5 c) 4 d) 6 83
  • 84. 10- Se já existe a função loop(), por qual motivo utilizaremos um laço de repetição? a) Porque a função loop() só repete até 20 vezes. b) Porque a função loop() só repete até 100 vezes. c) Porque a função loop() só repete até 10 vezes. d) Nenhuma das anteriores. 84
  • 85. TEMA 5: FUNÇÕES As funções servem para guardarmos um bloco de código que poderá ser reutilizado quando precisarmos. Para “alimentar” essas funções, precisamos passar os dados à elas, mas existem funções que não precisam receber nenhum dados, apenas basta chamá-las . Elas também servem para organizar melhor o código fonte. Podemos ter funções que somente imprimirão em tela algum valor e também teremos as funções que retornarão valores.As funções podem ser chamadas em qualquer parte do código, inclusive dentro delas mesmas. O programador pode criar novas funções ou em caso de necessidade utilizar as funções predefinidas do Arduino. 85
  • 86. Criando funções Normalmente as funções são criadas antes da função setup(), segue abaixo o exemplo de como criar uma função. tipo_do_retorno nome_função (tipo variável1, tipo variável2) { Declaração de variáveis; (opcional) Instrução 1; Instrução 2; . . . return variável (opcional) } Caso a função retorne algum valor, logo ao criar uma função devemos tipificar qual o tipo de valor que ela irá retornar, por exemplo imagine que a função faça um cálculo e retorne um número real, então, o tipo do retorno da função deve ser do tipo float. Funções que não retornam valores são o tipo void, em algumas linguagens de programação esse tipo de função é chamada de procedimento. Nomes de funções não devem possuir acentos e nem caracteres especiais. As variáveis que são criadas dentro das funções são as variáveis locais, ou seja, elas só serão reconhecidas dentro das funções que elas foram criadas. Jà as variáveis criadas fora das funções são as variáveis globais que podem ser utilizadas em qualquer parte do código. Exemplo: Neste primeiro exemplo, vamos criar uma função chamada “media” que irá calcular a média aritmética entre duas notas. Esta função não irá retornar um valor, ou seja, será uma função do tipo void. Ela irá receber duas variáveis do tipo float, essas variáveis correspondem à duas notas. 86
  • 87. Note que a função “media” possui 3 variáveis locais: n1,n2 e resultado. A função “media” efetua o cálculo da média (linha 4) e depois são utilizados condicionais para verificar se o aluno foi aprovado ou reprovado. Na linha 28 é possível visualizar como a função média foi chamada, note que para chamar uma função é necessário escrever o nome da função, e dentro dos parênteses é possível enviar os valores das variáveis para a função. 87
  • 88. Resultado no monitor serial: Exemplo 2 Neste exemplo, o resultado final será o mesmo, porém a função fará o cálculo e retornará o resultado do cálculo para função que fez a chamada. Então, como a função “media” irá retornar um número real, devemos tipificar essa função como float, conforme o exemplo abaixo: 88
  • 89. Restante do programa: Note na linha 19, que a variável “resultado” receberá o valor retornado pela função “media”. 89
  • 90. Resultado no monitor serial: Funções predefinidas do Arduino Existem várias funções predefinidas para o Arduino, desde funções matemáticas até funções de controle de tempo de execução de um programa, elas servem para facilitar o desenvolvimento de um programa, abaixo seguem as mais utilizadas: pinMode() Este comando habilita uma determinada porta da placa do Arduino como entrada (INPUT) ou saída de dados (OUTPUT) Por exemplo, configurando a porta 4 como saída: pinMode (4, OUTPUT); digitalWrite() Este comando irá determinar o estado lógico de uma determinada porta baixo (LOW - 0V) ou nível alto (HIGH - 5V). Antes de utilizar esta função é necessário primeiro utilizar a função pinMode() para configurar a porta como entrada ou saída de dados. Por exemplo vamos supor que desejamos acender um LED na porta 4, fazemos o seguinte: pinMode(4,OUTPUT); digitalWrite(4,HIGH); 90
  • 91. digitalRead () Este comando serve para fazer a verificação do estado numa porta de entrada, ou seja, se chegar 5V (nível alto) a função irá entender que trata-se do estado 1 (número binário), caso ela receba 0V (nível baixo) entenderá que o estado é 0 (número binário). Importante, a porta que será utilizada, deverá ser configurada anteriormente como entrada através da função pinMode(): PinMode(8,INPUT) tensao = digitalRead(8) analogWrite () Este comando faz uma determinada porta enviar um sinal PWM (Pulse Width Modulation ou Modulação por Largura de Pulso), é uma forma de fazer com que a porta simule uma saída analógica. As portas que podem ser utilizadas como PWM possuem o sinal de ~ na frente do pino no Arduino. A maioria dos Arduinos não possuem saídas analógicas e utilizam as portas que podem utilizar PWM para esse fim.Trata-se de uma onda quadrada que oscila, mantendo-se em nível alto dado um período, essa variação ocorre dentro da faixa de 0V a 5V. Acima temos uma representação do sinal gerado pela porta PWM, o atributo valor em 64, 128 e 196, o que corresponde a pulsos com largura temporal de 25%, 50% e 75% do período, respectivamente. 91
  • 92. delay(): Utilizado para retardar a execução de alguma linha de código do programa, por exemplo, vamos que deseja retardar 2 segundos, então o comando será: delay(2000) Note que o número 2000 representa 2000 milissegundos, ou seja, 2 segundos. Resumo As funções são módulos de códigos que irão realizar as tarefas repetitivas dos programas. Sempre que surgir a necessidade, poderemos chamá-las a fim de economizar tempo, visto que escrever uma linha de código para toda tarefa repetitiva é algo cansativo. As funções podem ser chamadas em qualquer parte do programa e podem retornar algum valor. Questões 1- Qual é a característica de uma função void? a) Funções que retornam valores. b) Funções que retornam até dois valores. c) Funções que retornam até três valores. d) Trata-se de uma função que não retorna valores. 2- As funções void em algumas linguagens de programação são chamadas de: a) Processamento. b) Procedimento. c) Laço de repetição d) Nenhuma das anteriores. 3- Uma determinada função retornará um valor do tipo float, então a função deverá ser do tipo: a) int b) char c) float d) bool 92
  • 93. 4- Para que a função retorne um valor, utilizamos qual comando? a) comeback b) fall c) counter d) return 5- Sobre as funções podemos dizer que: a) Podem ser chamadas somente dentro da função setup(). b) Podem ser chamadas somente dentro da função loop(). c) Podem ser chamadas de qualquer lugar do código. d) Nenhuma das anteriores. 6- Para utilizarmos a função digitalWrite(), precisamos primeiro configurar a porta como entrada ou saída de dados através de qual função? a) delay() b) digitalRead() c) analogWrite d) pinMode() 7- Suponha que desejamos configurar a porta 2 como saída de dados através da função pinMode(), qual alternativa é a correta? a) pinMode (4, OUTPUT) b) pinMode(2, INPUT) c) pinMode(2,OUTPUT) d) pinMode(4, INPUT) 8- Desejamos configurar a porta 2 com o estado lógico nível alto (5V), qual é alternativa correta? a) digitalWrite(2, LOW) b) digitalWrite(2, HIGH) c) digitalWrite(2, INPUT) d) digitalWrite(2, OUTPUT) 93
  • 94. 9- É a técnica usada para gerar sinais analógicos de um dispositivo digital como um Microcontrolador e ela é tão eficiente que hoje em dia quase todos os microcontroladores modernos possuem hardware dedicado para a geração deste sinal, estamos falando de: a) Sinal PMM. b) Sinal PWN. c) Sinal PWM. d) Sinal PWD. 10- Suponha que desejamos utilizar a função delay() para retardar 3 segundos para apresentar alguma informação no monitor serial, qual alternativa está correta? a) delay(2000) b) delay(30000) c) delay(3) d) delay(3000) 94
  • 95. TEMA 6: BIBLIOTECAS Podemos fazer uma analogia e dizer que as bibliotecas são como as funções, porém o seu código fica fora do programa que irá utilizá-la. É possível criá-las através de um editor de texto simples, como por exemplo, o bloco de notas, bastando salvar o código da biblioteca com a extensão de arquivo “.h”, ou seja, “nome-biblioteca.h”. Uma vantagem em criarmos uma biblioteca, é que elas permitem que vários programas as utilizem, ou seja, não é necessário termos vários programas com as mesmas linhas de código para alguma ação, basta criarmos uma biblioteca e sempre que necessitarmos chamá-la basta fazermos a importação dela através da diretiva #include nome-biblioteca.h,normalmente essa importação é feita antes das funções setup() e loop() e depois chamar a função desta biblioteca normalmente. É recomendável que as bibliotecas sejam salvas em: C:Program Files (x86)Arduinolibraries. Assim, os arquivos das bibliotecas ficarão mais organizados. 95
  • 96. Exemplo de como criar uma biblioteca: 1- Abra o bloco de notas ou outro editor de texto e digite o código abaixo: 2- Crie uma pasta chamada “media” dentro do diretório C:Program Files (x86)Arduinolibraries 96
  • 97. 3- Salve a biblioteca dentro da pasta “media” com o nome de “media.h”. 4- Provavelmente para que seja possível criar uma pasta no diretório libraries do Arduino, seja necessário alterar as configurações de segurança da pasta libraries, para isso clique com o botão direito do mouse na pasta libraries, vá na aba “Segurança” e altere as permissões para que seja possível salvar o arquivo neste diretório. 97
  • 98. 5- No IDE do Arduino crie o programa abaixo, compile e carregue o código no Arduino. Note que na linha 2 do código é feita a importação da biblioteca “media.h” e na linha 13 note que é feita a chamada da função “media_arit” que faz parte da biblioteca “media.h”. 6- Resultado final no monitor serial: 98
  • 99. Gerenciador de bibliotecas do Arduino No IDE do Arduino existe uma área onde é possível buscar bibliotecas que foram homologadas (testadas) previamente pela equipe do Arduino, então lá é possível baixar com mais seguranças bibliotecas prontas para serem instaladas no computador. Para acessar basta ir em: Sketch => Incluir Biblioteca => Gerenciar Bibliotecas. Resumo Verificamos que as bibliotecas ajudam a organizar melhor o código dos programas, pois elas reduzem as linhas de código que esses programas teriam se elas não existissem. É uma boa prática salvar as bibliotecas criadas no diretório libraries do Arduino, assim os arquivos ficam mais organizados. Questões 1- Qual é a extensão do arquivo de uma biblioteca? a) .w b) .m c) .b d) .h 99
  • 100. 2- Qual diretiva utilizamos para importar uma biblioteca no IDE do Arduino? a) #import nome-biblioteca.extensão-arquivo b) #insert nome-biblioteca.extensão-arquivo c) #include nome-biblioteca.extensão-arquivo d) Nenhuma das anteriores 3- Onde é recomendável que salvemos a biblioteca criada? a) C:Program Files (x86)Arduinoexamples b) C:Program Files (x86)Arduinodrivers c) C:Program Files (x86)Arduinohardware d) C:Program Files (x86)Arduinolibraries 4- Em qual programa podemos salvar uma biblioteca? a) WordPad b) Google Chrome c) Notepad (Bloco de Notas) d) Nenhuma das anteriores 5- Sobre as bibliotecas podemos dizer que: a) Uma biblioteca pode conter várias funções. b) Uma biblioteca pode ter no máximo duas funções. c) Uma biblioteca pode ter no máximo três funções. d) Nenhuma das anteriores. 100
  • 101. 6- As funções das bibliotecas podem retornar valores? a) Sim. b) Não. 7- Podemos criar quantas bibliotecas? a) No máximo 3 bibliotecas. b) No máximo 10 bibliotecas. c) No máximo 25 bibliotecas. d) Nenhuma das anteriores. 8- É recomendável que a importação da biblioteca seja feita: a) Dentro da função setup(). b) Dentro da função loop(). c) Antes das funções setup() e loop(). d) Nenhuma das anteriores. 9- Em qual menu do IDE do Arduino podemos pesquisar por bibliotecas? a) Editar => Incluir Biblioteca = Gerenciar Bibliotecas. b) Arquivo => Incluir Biblioteca = Gerenciar Bibliotecas. c) Ferramentas => Incluir Biblioteca = Gerenciar Bibliotecas. d) Sketch => Incluir Biblioteca = Gerenciar Bibliotecas. 10- Um programa pode utilizar quantas bibliotecas? a) No máximo uma biblioteca. b) No máximo duas bibliotecas. c) No máximo três bibliotecas. d) Não há limites. 101
  • 102. TEMA 7: PROJETO COM SINCRONIZAÇÃO DE LEDS As portas digitais, como comentado em capítulos anteriores, podem ser utilizadas como entradas ou saídas de dados. As saídas digitais servem para fazer a interação com o mundo físico real. Por exemplo, através delas é possível acender ou apagar lâmpadas e leds, também será possível ligar ou desligar motores e etc. As saídas digitais trabalham normalmente com dois estados, nível alto (5V) ou nível baixo (0V). Existem algumas placas do Arduino, como por exemplo o Arduino Nano que o nível alto é de 3,3V. Mas, o Arduino UNO que é o que utilizamos para os exemplos da apostila, trabalha com nível alto de 5V. 102
  • 103. No Arduino Uno temos 14 portas digitais, do pino 0 até o pino 13. Nos Arduinos: Uno, Nano, Mini, e Mega, os pinos 0 e 1 são usados para comunicação com o computador. Então, conectar qualquer coisa a esses pinos pode interferir nessa comunicação, incluindo causar falhas na gravação da placa. Portanto prefira utilizar os pinos 2 até 13 para saídas ou entradas digitais. É possível utilizar os pinos 0 e 1, porém será necessário configurá-las no programa. Configuração A configuração de uma saída digital é feita através da função pinMode(pino, modo). Então no caso, para configurarmos uma porta digital como saída, fazemos: pinMode(2,OUTPUT); No exemplo acima, o pino 2 foi configurado como saída (OUTPUT). 103
  • 104. Depois alteramos o estado da saída digital através da função digitalWrite(pino, modo), vejamos o exemplo: digitalWrite(2,HIGH); No exemplo acima, o pino 2 que foi configurado como saída digital, foi também configurado para nível alto, ou seja, 5V. Projeto utilizando as saídas digitais Materiais para o projeto ● Placa Arduino Uno ● Protoboard de no mínimo 400 furos ● 4 leds ● 4 resistores de 150Ω ● 9 jumpers macho/macho Descrição O projeto que faremos sobre saídas digitais terá como objetivo utilizar as saídas para acender e apagar um conjunto de 4 leds, os leds acenderão da esquerda para a direita e apagarão da direita para a esquerda, para dar o efeito desejado utilizaremos a própria função loop() do arduino para repetir as instruções que farão esse efeito visual. Também utilizaremos a função delay() para dar o efeito luminoso desejado. Caso desejem, é possível fazer a simulação deste projeto no site Tinkercad, segue o endereço: https://www.tinkercad.com/ vá até a opção “Circuits” para montar o circuito. Neste projeto utilizaremos 4 leds e 4 resistores de 150Ω, as portas digitais utilizadas são as portas: 2,3,4 e 5. Façam a montagem conforme o exemplo abaixo: 104
  • 105. No simulador do Tinkercad, digite os códigos abaixo, caso possuam a placa do Arduino, digite o código abaixo no IDE do Arduino: Entre as linhas 1 a 8 foram declaradas as variáveis, notem que foram atribuídos os números das portas digitais para as variáveis chamadas de “led”, (led1, led2, led3 e led4). Cada uma recebeu respectivamente o número das portas digitais (2,3,4 e 5). Esta é uma forma de trabalhar com as portas digitais, ou seja, criar uma variável que irá representá-las, pois é mais fácil entender o código quando atribuímos uma variável para as portas digitais. A variável “i”, fará o controle dos laços de repetição e a variável “tempo”, armazenará o número que representará o tempo em milissegundos que será utilizado na função delay(). 105
  • 106. Dentro da função setup() foram configuradas como portas de saída, as portas digitais: 2,3,4 e 5, elas são representadas pelas variáveis: led1, led2, led3 e led4. Note que foi utilizado um laço de repetição for() para facilitar essa configuração, trata-se de uma forma mais dinâmica para configurar mais de uma porta digital como saída. Note que nos laços de repetição para acender e apagar as luzes é utilizada a variável de controle “i” que utiliza como referência as variáveis que representam as portas digitais. 106
  • 107. Resumo Verificamos que as saídas digitais permitem que o Arduino interaja com as coisas do mundo físico, por exemplo ligando ou desligando algum componente ou aparelho eletrônico. São essenciais para a automatização de alguma coisa. Ela possui dois estados: nível alto (5V) ou nível baixo (0V). Para utilizá-las é necessário a configuração delas através das funções pinMode() e digitalWrite(). Questões 1- As postar digitais podem ser: a) Somente de entrada de dados. b) Somente de saída de dados. c) Podem ser tanto de entrada quanto de saída de dados. d) Nenhuma das anteriores. 2– Quantos volts é o estado nível baixo no Arduino? a) 5V b) 6V c) 4V d) 0V 3- Quantos volts é o estado nível alto no Arduino Uno? a) 5V b) 9V c) 15V d) 10V 4- O Arduino Uno possui quantas portas digitais? a) 10 b) 20 c) 30 d) 14 107
  • 108. 5- No projeto foi utilizado um resistor para cada led no valor de 150Ω, então podemos dizer que: a) Como a tensão na saída digital é de 5V podemos utilizar um led de 90Ω, sem problemas. b) Como a tensão na saída digital é de 5V podemos utilizar um led de 50Ω, sem problemas. c) Como a tensão na saída digital é de 5V podemos utilizar um led de 20Ω, sem problemas. d) Como a tensão na saída digital é de 5V, o resistor deve ser maior ou igual a 150Ω. 6- O pino GND da placa do Arduino significa: a) 5V b) Terra (negativo) c) PWM d) Nenhuma das anteriores. 7- Analise o código abaixo e diga o que ele faz: a) Configura os 4 Pinos digitais como entradas. b) Configura os 4 Pinos digitais como saídas. c) Acende os leds da esquerda para a direita. d) Desliga os leds da direita para a esquerda. 8- Analise o código abaixo e diga o que ele faz: a) Configura os 4 Pinos digitais como entradas. b) Configura os 4 Pinos digitais como saídas. c) Acende os leds da esquerda para a direita. d) Desliga os leds da direita para a esquerda. 108
  • 109. 9- Analise o código abaixo e diga o que ele faz: a) Configura os 4 Pinos digitais como entradas. b) Configura os 4 Pinos digitais como saídas. c) Acende os leds da esquerda para a direita. d) Desliga os leds da direita para a esquerda. 10- Para que serve o “i--” dentro do “for” abaixo? a) Faz o auto-incremento da variável “i” a cada repetição. b) Decresce o valor da variável “i” a cada repetição. c) Faz o valor da variável “i” aumentar de dois em dois a cada repetição. d) Nenhuma das anteriores. 109
  • 110. TEMA 8: PROJETO SINCRONIZAÇÃO DE LEDS POR BOTÕES As entradas digitais permitem que o mundo externo interaja com o Arduino, por exemplo: sensores de presença, interruptores, botões push button, sensores de temperaturas e dentre outros poderão enviar um sinal digital, ou seja, 5V ou 0V para a porta digital de entrada, o Arduino por sua vez dependendo de como foi programado irá tomar alguma ação com base no sinal digital recebido. O nível alto para o Arduino Nano é de 3,3V, ou seja no caso do Arduino a tensão de entrada não poderá ser maior que 3,3V. Já para outros Arduinos como o Arduino Uno a tensão de entrada na porta digital, não poderá exceder 5V, podendo correr risco de queimar a placa. A configuração de uma entrada digital é feita através da função pinMode(pino, modo). Então no caso, para configurarmos uma porta digital como entrada, fazemos: pinMode(2,INPUT); No exemplo acima, o pino 2 foi configurado como entrada (INPUT). 110
  • 111. Para a verificação do estado da porta digital, utilizamos a função digitalRead(pino), ela transformará o estado recebido nível alto(5V) no número 1 e nível baixo(0V) no número 0, ambos são números binários.Porém, antes de utilizá-la devemos configurar a porta digital como entrada através da função pinMode(pino, modo). pinMode(6,INPUT); digitalRead(6); Projeto utilizando as entradas digitais Materiais para o projeto ● 1 placa Arduino Uno; ● 1 protoboard de no mínimo 400 furos; ● 4 leds; ● 4 resistores de 150Ω; ● 2 resistores de 10kΩ; ● 15 jumpers macho/macho; ● 2 botões push button do tipo N/A; Descrição O projeto tem como objetivo utilizar as portas digitais 6 e 7 como entradas digitais, para isto utilizaremos dois botões push button do tipo N/A (normalmente aberto) para mudar o sentido dos leds, por exemplo, por padrão os leds serão acesos da direita para a esquerda, com os botões será possível controlar o sentido em que os leds serão acesos, então se quisermos que os leds passem a acender da esquerda para a direita bastará pressionar o botão que estiver à direita. Para este projeto utilizaremos como base o que fizemos no projeto anterior, com algumas alterações. As portas digitais 2,3,4 e 5 continuarão sendo portas de saída, cada um será responsável por acender ou apagar um led. Os resistores de 10kΩ serão utilizados como resistores de pull-down, para forçar o estado nível baixo (0V) para as portas digitais de entrada 6 e 7 quando os botões não estiverem pressionados. Eles são importantes para garantir o bom funcionamento do programa, visto que ao não utilizar os resistores de pull-down nas entradas digitais o microcontrolador pode ficar “confuso” sobre o real estado das portas de entrada quando o botão não 111
  • 112. estiver pressionado. Abaixo, segue um exemplo do funcionamento de um resistor de pull down. Note que quando o botão não está pressionado o resistor de pull down força o estado 0 (zero) para a porta digital de número 6. Quando o botão é pressionado a corrente elétrica vai direto para a porta digital 6 que receberá a tensão de 5V, nível alto(estado 1). A corrente elétrica sempre procura o caminho mais fácil, nesse caso ela vai direto para a porta. 112
  • 113. Caso desejem, é possível fazer a simulação deste projeto no site Tinkercad, segue o endereço: https://www.tinkercad.com/ vá até a opção “Circuits” para montar o circuito. Segue abaixo o circuito que vocês deverão montar ou no simulador Tinkercad ou na própria protoboard caso possua os materiais: Note abaixo que os botões push button são ligados em “x”, ou seja de uma extremidade para outra. 113
  • 114. No simulador do Tinkercad, digite os códigos abaixo, caso possuam a placa do Arduino, digite o código abaixo no IDE do Arduino: Das linhas 1 a 12 foram declaradas as variáveis, notem que foram atribuídos os números das portas digitais para as variáveis chamadas de “led”, (led1, led2, led3 e led4). Cada uma recebeu respectivamente o número das portas digitais (2,3,4 e 5). Já as variáveis “bot_esq” e “bot_dir” receberam respectivamente os números correspondentes às portas digitais 6 e 7. A variável “i” é o contador que será utilizado nos laços de repetição for(), a variável “tempo” armazena o valor do tempo em milissegundos e a variável “valor” armazena o estado do botão, ou seja, 1 para nível alto (pressionado) ou 0 para nível baixo (não pressionado), esta variável foi inicializada com o valor 1. Abaixo, é possível observar que dentro da função setup() é feita a configuração das portas de entrada e saída do nosso projeto. 114
  • 115. Segue abaixo a primeira parte do código que ficará dentro da função loop(), note que na linha 27 há uma condicional que verifica se a variável “valor” é igual a 0, caso seja entrará no laço de repetição “for()”, linha 29, e os leds passarão a acender da esquerda para a direita. A condição para permanecer no for() é que a variável “i” seja menor ou igual a led4+3, ou seja, se led4 representa a porta 5 (número 5), então a condição para permanecer no laço é “i” ser menor ou igual a 5+3, cujo resultado será 8. Ao final do laço de repetição é feita uma verificação dos estados dos botões, caso algum deles seja igual a 1, sairá do laço e irá alterar o sentido conforme o botão pressionado. 115
  • 116. Segue abaixo a continuação do código que fica dentro da função loop(). Note que como a variável “valor” recebeu no início do programa o valor 1, a condicional da linha 53 será verdadeira e por isso os leds passam a acender da direita para a esquerda. Note que no for(), linha 55, “i” que é variável de controle do laço e inicia o laço de repetição recebendo o valor de led4, ou seja, led4 é igual a 5, então “i” começará com o número 5. A condição do laço de repetição for() é que “i” seja maior ou igual a led1-3, ou seja, se led1 é igual a 2, 2-3 será igual a -1. A cada repetição a variável “i” será decrescida em -1. 116
  • 117. Resumo Verificamos que as entradas digitais permitem que os componentes eletrônicos ou sensores externos interajam com o Arduino. Esses componentes enviam um sinal digital nos estados nível alto (5V) ou nível baixo (0V). Os estados de nível alto ou nível baixo, também são conhecidos como ligado (1) ou desligado (0). O arduino após receber o sinal de entrada irá agir conforme foi programado. Questões 1- Suponha que desejamos configurar a porta 6 como porta digital de entrada, selecione a alternativa correta: a) pinMode(6,OUTPUT); b) pinMode(6,INPUT); c) pinMode(INPUT,6); d) pinMode(OUTPUT,6); 2- Para a função digitalRead() o estado nível alto (5V), corresponde ao número: a) 0 b) 2 c) 3 d) 1 3- Para a função digitalRead() o estado nível baixo (0V), corresponde ao número: a) 0 b) 1 c) 2 d) 3 4- Os resistores de pull down servem para forçar o estado: a) 0 (0V) b) 0 (5V) c) 1 (0V) d) 1 (5V) 117
  • 118. 5- O botão abaixo, é um push button do tipo N/A (normalmente aberto), sabendo que ele não foi pressionado é possível afirmar que a montagem está: a) Correta, note que o led está aceso. b) Correta, pois botões push button do tipo N/A ao não serem pressionados deixam passar corrente elétrica. c) Errada, botões do tipo N/A não deixam passar corrente, a ligação dos terminais está errada. d) Nenhuma das anteriores. 6- Sobre o código do projeto, a variável “tempo” controla: a) O tempo que os leds acendem. b) O tempo que os leds acendem ou apagam. c) O tempo que os leds apagam. d) Nenhuma das anteriores. 7- Sobre o código do projeto, a variável “bot_esq” recebe qual valor? a) 4 b) 5 c) 6 d) 7 118
  • 119. 8- Sobre o código do projeto, a variável “bot_dir” recebe qual valor? a) 5 b) 6 c) 7 d) 8 9- O trecho abaixo foi retirado do código do projeto, qual é a condição do if? a) Verificar se o botão esquerdo foi pressionado. b) Verificar se o botão esquerdo não foi pressionado. c) Verificar se o botão direito foi pressionado. d) Nenhuma das anteriores. 10- Com base no funcionamento do projeto, após carregar o código do projeto no Arduino, os leds começam a acender automaticamente em qual sentido? a) Da direita para a esquerda. b) Da esquerda para a direita. c) Não liga automaticamente, para começar a acender é necessário pressionar algum dos botões. d) Nenhuma das anteriores. 119
  • 120. TEMA 9: PROJETO COM LCD O display LCD é um módulo muito interessante que pode ser utilizado quando desejamos que o Arduino informe algo através de uma mensagem para o usuário do dispositivo. O display de LCD para Arduino possui vários tamanhos sendo o 16x2 o mais utilizado por ser o mais barato. Ele possui 16 colunas e duas linhas, e pode ser encontrado com backlight azul ou verde. Backlight é a luz de fundo. Sobre os tamanhos, os mais comuns para displays de LCD para Arduino são: 16x2, 20x4, 20x2 e 40x2. O LCD possui um microcontrolador próprio, o mais popular é o Hitachi HD44780, que trabalha com LCDs monocromáticos de até 80 caracteres alfanuméricos e símbolos. 120
  • 121. Projeto com LCD O display de LCD 16x2 possui 16 pinos, dos quais usamos 12 para conexão básica, já incluindo as conexões de alimentação (pinos 1 e 2), backlight (pinos 15 e 16) e contraste (pino 3). Segue abaixo uma tabela que relaciona os pinos do LCD 16x2 com os pinos do Arduino, o projeto seguirá essa tabela: Abaixo, segue em detalhes os pinos do LCD (16x2), note que o pino 1 é o primeiro da esquerda para a direita: 121
  • 122. Materiais para o projeto ● 1 placa Arduino Uno; ● 1 protoboard de no mínimo 830 furos; ● 1 resistor de 220Ω; ● 1 potenciômetro de 5kΩ; ● 19 jumpers macho/macho; ● 1 display LCD 16x2. Montagem O módulo LCD (16x2) possui pinos que servem para encaixar diretamente o módulo numa protoboard. Para este projeto é necessário uma protoboard de no mínimo 830 furos. Abaixo, segue uma imagem com mais detalhes de como deverá ser feita as conexões na protoboard: ● O pino 3 do LCD (V0) é o pino onde conectamos o pino central do potenciômetro. ● Os pinos 4,5 e 6 (RS,RW e E) do LCD são pinos de controle do LCD, conectamos respectivamente os pinos 10,9 e 8 do Arduino. ● Do pino 7 até o pino 14 são pinos de dados. Utilizaremos somente do pino 11 até o pino 14, que serão conectados respectivamente pelos pinos 5,4,3 e 2 do Arduino. ● Por último, teremos os pinos 15 A (positivo) e 16 K (negativo), ambos deverão ser conectados respectivamente no Vcc 5V e ao GND da protoboard. Importante, para conectar o pino 15 A ao Vcc 5V utilize um resistor de 220Ω, conforme a imagem a seguir. 122
  • 123. Segue abaixo, uma imagem mais detalhada das conexões, o potenciômetro será responsável por ajustar a luminosidade dos caracteres do LCD: Conforme as instruções dadas na página 122, segue abaixo uma imagem com os jumpers que conectam o LCD com a placa do Arduino em suas respectivas portas digitais: 123
  • 124. Programação Para que o programa possa enviar mensagens para a tela de LCD é necessário primeiro importar a biblioteca LiquidCrystal.h, conforme o exemplo abaixo: #include <LiquidCrystal.h> Depois, devemos utilizar o comando LiquidCrystal lcd() para especificar quais serão as portas do Arduino que serão utilizadas respectivamente para os pinos do LCD :RS, RW, E, D4,D5, D6 e D7, veja abaixo: LiquidCrystal lcd(10, 9, 8, 5, 4, 3, 2); Dentro da função setup() será necessário utilizar a função lcd.begin(), para podermos utilizar a tela de LCD com o Arduino e também para especificar o tamanho da tela. lcd.begin(16, 2); O próximo passo é dentro da função setup() configurarmos a posição na tela onde aparecerá a nossa mensagem, isto é feito através da função lcd.setCursor(coluna, linha), segue abaixo um exemplo se quisermos posicionar o texto a partir da coluna 5 e linha 0. As linhas e coluna iniciam com o número zero e não com o número 1. lcd.setCursor(5, 0); Por fim, também dentro da função setup(), para enviar de fato a mensagem para o LCD devemos utilizar o comando lcd.print(“Mensagem”), segue abaixo um exemplo: lcd.print("Projeto"); 124
  • 125. Código do projeto Digite o código abaixo no simulador Tinkercad, ou caso possua a placa do Arduino, digite o código abaixo no IDE do Arduino e depois carregue o código para a placa do Arduino: Resumo O LCD possibilita inúmeras aplicações onde é necessário enviar uma mensagem para o usuário do dispositivo. Os LCDs menores, como por exemplo, o 16x2, exigem um cuidado maior para pensar em como utilizar da melhor forma possível o espaço disponível para as mensagens. 125
  • 126. Questões 1- Um display de LCD 16x2 possui: a) 2 linhas e 16 colunas. b) 16 colunas e 2 linhas. c) 32 colunas e 16 linhas. d) Nenhuma das anteriores. 2- Quantos pinos tem o display de LCD 16x2 ? a) 8 pinos. b) 10 pinos c) 24 pinos d) 16 pinos. 3- Qual é a função do potenciômetro neste projeto? a) Liga e desliga o circuito. b) Muda a cor do texto na tela do LCD. c) Controla a luminosidade dos caracteres do LCD. d) Nenhuma das anteriores. 4- O pino central do potenciômetro deverá ser conectado a qual pino do LCD? a) Pino 3 (V0) b) Pino 1 (Vss) c) Pino 5 (RW) d) Nenhuma das anteriores. 5- Para conectarmos o pino 15 (A) do LCD ao Vcc (5V) devemos: a) Apenas conectá-lo utilizando um jumper. b) Fazer a conexão utilizando um resistor de 220Ω. c) Fazer a conexão utilizando um resistor de 10Ω. d) Nenhuma das anteriores. 6- Qual é a biblioteca que devemos importar para utilizarmos o módulo de LCD? a) Lcd.h b) LiquidCrystal16x2.h c) LiquidCrystal.h d) LCD-LiquidCrystal.h 126
  • 127. 7- Qual é o comando que utilizamos para especificar quais serão as portas do Arduino que serão utilizadas respectivamente para os pinos do LCD :RS, RW, E, D4,D5, D6 e D7 ? a) LiquidCrystal lcd() b) LiquidCrystal () c) lcd() d) Liquid.Crystal lcd() 8- O que faz o comando lcd.print()? a) Configura o tamanho da tela do LCD no Arduino. b) Posiciona o cursor na tela do arduino. c) Limpa o texto do LCD. d) Nenhuma das anteriores. 9- O comando lcd.begin(16,2), faz: a) Habilita e configura o Arduino para poder se comunicar com um LCD de 16 colunas e 2 linhas. b) Habilita e configura o Arduino para poder se comunicar com um LCD de 2 colunas e 16 linhas. c) Habilita e configura o Arduino para poder se comunicar com um LCD de 16 colunas e 16 linhas. d) Nenhuma das anteriores. 10- Suponha que desejamos posicionar um texto a partir da primeira linha e primeira coluna. Qual é a alternativa correta? a) lcd.setCursor(1, 1); b) lcd.setCursor(0, 1); c) lcd.setCursor(1, 0); d) lcd.setCursor(0, 0); 127
  • 128. TEMA 10: PROJETO COM SENSOR DE TEMPERATURA O sensor de temperatura LM35 ou TMP36, são sensores disponíveis no mercado mais utilizados em projetos com o Arduino. O projeto proposto neste tema, visa mesclar os conhecimentos adquiridos sobre a interação do Arduino com o display de LCD visto no tema anterior com o conhecimento que será dado sobre sensores de temperatura, o objetivo final será de fazer o display de LCD mostrar a temperatura ambiente lida através dos sensores de temperatura LM35 ou TMP36. Entradas Analógicas Os sinais físicos captados por nossos sentidos, assim como qualquer variável que existe no ambiente, tais como: temperatura, velocidade, peso, fluxo e etc, são sinais analógicos, ou seja, sinais que variam com o tempo. Conversor Analógico Digital O conversor ADC Arduino é responsável pela conversão analógica para o digital. Ele faz a leitura da porta de entrada analógica e o conversor analógico digital do Arduino fará uma aproximação discreta do sinal analógico para o digital. 128
  • 129. Abaixo, segue um gráfico que exemplifica a aproximação discreta feita pelo conversor analógico digital do Arduino. Abaixo segue uma tabela com a relação entre tensão de trabalho, pinos analógicos e resolução máxima para as placas do Arduino. Essas informações são importantes, pois necessitamos saber a tensão de trabalho e resolução máxima do Arduino Uno para que o projeto funcione corretamente. O Conversor Analógico Digital do Arduino irá receber uma tensão na porta analógica e irá converter essa tensão num número inteiro, que irá variar de 0 até 1023, sendo que 0 para 0V e 1023 para 5V. Ou seja, uma tensão de 2,5V é equivalente ao número 512. 129
  • 130. Identificando as entradas analógicas no Arduino As portas analógicas do Arduino estão identificadas abaixo, são as portas: A0, A1, A2, A3, A4 e A5. Lendo as entradas analógicas Para ler alguma determinada entrada analógica, utilizamos a função analogRead(pino). Segue abaixo um exemplo: int valor= analogRead(A0); Note que no exemplo acima, a variável “valor” está recebendo um número que no caso do Arduino Uno será um número inteiro entre 0 e 1023 dependendo da tensão de entrada como explicado anteriormente e a quantidade de bits, a faixa de números inteiros de 0 a 1023 é referente as placas do Arduino de 10 bits como o Arduino UNO. A função analogRead() está fazendo a leitura da entrada analógica A0. 130
  • 131. Sensor de temperatura LM35 - ADC Arduino O sensor de temperatura LM35 oferece uma relação linear em sua saída, que aumenta para uma taxa de 10mV a cada 1ºC. Sua gama de medição é de -55ºC (-550mV) a 150ºC(1500 mV) com uma precisão de 0,5ºC. Uma das vantagens deste sensor é o seu baixíssimo custo, por isto ele é o mais utilizado em aplicações que envolvem medição de temperatura e microcontroladores e por consequência em projetos para Arduino. Abaixo, segue uma imagem de um sensor de temperatura LM35 visto de frente: O LM35 possui 3 pinos, onde as extremidades são os pinos de alimentação, vendo de frente o Vcc é o pino da esquerda e o GND é o da direita. O pino do meio será onde faremos a conexão com alguma porta de entrada analógica da placa do Arduino. Para calcularmos a temperatura utilizamos a fórmula abaixo: temperatura = (Valor lido na porta analógica) * 5V / 1023) /0.01V; Exemplo, vamos supor que o sinal analógico está indo para a porta analógica A0: temperatura = (float(analogRead(A0)) * 5 / 1023) / 0.01; 131
  • 132. Projeto com sensor de temperatura Como dito no começo deste tema, o projeto com sensor de temperatura irá utilizar como base o projeto que criamos com display LCD, faremos pequenas modificações na parte física, basicamente iremos apenas adicionar o sensor de temperatura LM35, o simulador Tinkercad não possui o LM35, mas possui um similar que é o TMP36. Materiais para o projeto ● 1 placa Arduino Uno; ● 1 protoboard de no mínimo 830 furos; ● 1 resistor de 220Ω; ● 1 potenciômetro de 5kΩ; ● 22 jumpers macho/macho; ● 1 display LCD 16x2; ● Sensor de temperatura LM35 ou TMP36. Montagem A primeira parte do projeto é igual ao projeto do tema anterior, que foi o “Projeto com LCD”, então, monte exatamente a parte física do projeto anterior, esta é a primeira coisa que vocês devem fazer. 132
  • 133. Após, os alunos que estiverem fazendo pelo simulador Tinkercad deverão acrescentar o sensor TMP36 igual a imagem abaixo. O simulador Tinkercad não possui o sensor LM35, apenas o TMP36, que é similar. Quem possuir a placa física do Arduino e os demais componentes, poderá seguir a mesma montagem abaixo, porém utilizando o sensor LM35 em vez do TMP36. Note que na montagem do sensor de temperatura, o pino de saída analógica do sensor de temperatura (pino do meio) é conectado na entrada analógica A0 do Arduino (jumper azul). O pino da esquerda do sensor de temperatura foi conectado ao positivo (Vcc) (5V) e o pino da direita foi conectado ao terra (GND) negativo da protoboard. 133
  • 134. Programação - Código fonte do projeto Nas linhas 4 e 5, foram declaradas as variáveis “LM35” e “TMP36” como constante do tipo inteiro, ambas receberam valor A0, que representa a porta analógica A0 onde está conectado o sensor LM35 ou TMP36. Nas linhas 8 e 9, notem que foram criadas duas variáveis “temperatura_lm35” e “temperatura_tmp36”, cada uma delas armazenará a temperatura medida pelos sensores. Ocorre que o código do projeto está preparado para que vocês utilizem tanto o sensor LM35 quanto o TMP36, por isso foram criadas essas duas variáveis. Note que na linha 12, foi importada a biblioteca “LiquidCrystal.h”, que é a biblioteca do display LCD. Na linha 17 foi declarado as portas digitais que serão utilizadas pelo display LCD. 134