Arduino - Primeiros Passos - Parte 1
Arduino - Primeiros Passos - Parte 1
Apoio
F Considerado uma extensão da filosofia “Do It Yourself!” (DIY), que teve início
na década de 1960, o movimento da cultura maker apresenta a ideia de que
qualquer pessoa consegue construir, consertar ou criar seus próprios objetos.
(https://blog.lyceum.com.br/o-que-e-cultura-maker/)
2
Apoio
Fonte:https://www.columbiaspectator.com/spectrum/2019/11/
08/your-guide-to-the-makeover-at-the-columbia-makerspace/ Fonte:https://www.cie.auckland.ac.nz/newsroom/inno
vation-hub-and-maker-space/
3
Apoio
4
Apoio
Apoio
Ø Conhecendo o Arduino
F Segundo o próprio site (https://www.arduino.cc/en/Guide/Introduction) do Arduino,
trata-se de uma plataforma de prototipagem eletrônica, open-source, que se
baseia em hardware e software flexíveis e fáceis de usar. Ou seja:
F É um equipamento adequado para o desenvolvimento de protótipos
eletrônicos. Várias ideias podem ser testadas antes de serem construídas de
forma definitiva.
F O Arduino é open-source. Todos os detalhes para construção de cada placa
Arduino foram amplamente divulgados. Qualquer um pode criar sua própria
placa Arduino.
F Embora a programação do Arduino seja essencialmente em linguagem C, um
conjunto de bibliotecas e arquivos de configuração são usados para criar a
chamada linguagem de programação Arduino, baseada na linguagem Wiring.
F Segundo o próprio site (http://wiring.org.co/): Wiring é uma estrutura
(framework) de programação de código aberto (open-source) especialmente
desenvolvidas para trabalhar com microcontroladores”.
6
6
Apoio
Ø O que é Arduino
F Qualquer um pode fazer seu próprio Arduino! E como já vimos, existe
uma grande variedade de modelos.
F Porém, a parte mais importante de um Arduino, “seu cérebro”, é seu
microcontrolador. No caso, um microcontrolador ATMega, da Atmel.
F Qualquer um pode fazer seu
próprio Arduino! E como já
vimos, existe uma grande
variedade de modelos.
F Porém, a parte mais
importante de um Arduino é
seu microcontrolador. No
caso, um microcontrolador
ATMega, da Atmel.
Fonte:https://aergiaee.wordpress.com/2014/09/01/aergia-
arduino-o-arduino-preguicoso-que-aguenta-12-meses-a-
7 pilhas/ Fonte:https://www.arduino.cc/en/Main/Standalone
Apoio
8 Fonte: https://content.arduino.cc/assets/UNO-TH_Rev3e_sch.pdf
8
Apoio
Apoio
Ø Sinal PWM
F Neste momento do nosso curso,
pode ser interessante relembramos
como funciona um PWM (Pulse
Width Modulation).
F Alguns dos pinos do Arduino
(3,5,6,9,10 e 11, no UNO) podem
enviar um sinal PWM.
11
11
Apoio
12
12
Apoio
13
13
Apoio
14
14
Apoio
15
15
Apoio
16
16
Apoio
17
17
Apoio
Ø Programando o Arduino
F O microcontrolador na placa do Arduino UNO, o ATMEGA328, foi criado para
ser programado com a linguagem de programação Arduino, baseada na
linguagem Wiring (http://wiring.org.co/), usando o ambiente de
desenvolvimento integrado (IDE) própria do Arduino, que, por sua vez, é
baseado no ambiente Processing (https://www.processing.org/).
F Na verdade a linguagem de programação do Arduino é, essencialmente,
C/C++, acrescido de alguns comandos específicos para utilização das
funções dos microcontroladores.
F Quem já está habituado a programar, especialmente em C ou C++, não
deverá encontrar qualquer problema para programar um Arduino.
F Mas, mesmo para quem tem pouca experiência com programação, deverá se
familiarizar com a IDE do Arduino, e seus principais comandos, sem maiores
dificuldades.
18
18
Apoio
Ø Programando o Arduino
F O primeiro passo é fazer o download (gratuito) do arquivo de instalação da IDE,
em: https://www.arduino.cc/en/Main/Software.
F Porém, a IDE do Arduino foi
desenvolvida em Java. Então,
para instalar a IDE é
necessário já ter o Java
instalado e, de preferência,
atualizado.
F É possível verificar se há uma
versão instalada ou baixar,
gratuitamente, a versão mais
recente do java em:
https://www.java.com/pt_BR/
F Com o Java instalado, o próximo passo é instalar a IDE.
F Depois de instalar, é só abrir a IDE, usando um ícone ou atalho que tenha sido
19 criado, ou procurando o arquivo “arduino.exe”.
19
Apoio
Ø Programando o Arduino
F Com a IDE aberta é possível identificar 4 partes principais: Menu, Barra de
Ferramentas, Área, ou janela, do código e uma área de mensagens.
F Através do menu podemos realizar várias ações
relacionadas a própria IDE, aos programas,
configurações e muito mais.
F A barra de ferramenta traz atalhos para:
Verificar erros no programa aberto, Transferir o
programa para um Arduino conectado (Upload),
Criar novo programa, Abrir um programa
existente, Salvar o programa aberto e Abrir o
Monitor Serial.
F Na área do código podermos editar nossos
programas.
F E, a área de mensagens irá apresentar uma
série de mensagens (erros, compilação, upload
20
20
...), dependendo das configurações usadas.
20
Apoio
Ø Programando o Arduino
F No Menu podemos realizar várias ações. Cada opção do menu abre um
conjunto de novas opções.
21
21
Apoio
Ø Programando o Arduino
F No Menu podemos realizar várias ações. Cada opção do menu abre um
conjunto de novas opções.
22
22
Apoio
Ø Programando o Arduino
F Como já mencionado, a barra de ferramenta traz atalhos para:
Verificar erros no programa aberto
Fazer o Upload do programa
Criar novo programa
Abrir um programa existente
Salvar o programa aberto
Abrir o Monitor Serial
23
23
Apoio
Ø Programando o Arduino
F É na Área do código que escrevemos, e editamos, nossos programas.
F No contexto da programação do Arduino os programas, ou códigos
computacionais, são comumente chamados de SKETCH.
F Ao iniciar um novo sketch, com
duas funções, (void). São elas:
void setup() e void loop().
F A void setup() é executada uma
única vez, assim que o programa
começa a funcionar no Arduino.
F Já a void loop(), como o próprio nome sugere, fica sendo executada em
loop (infinito) até que o Arduino seja desligado, resetado ou tenha um novo
sketch carregado.
F Sendo assim, a void setup() conterá essencialmente comandos de
configuração daquilo que usaremos em nosso sketch. Mas, também poderá
conter alguns outros comando, que garantam que, quando a parte principal do
24 programa (void loop()) comece a rodar, esteja tudo conforme desejamos.
24
Apoio
Ø Programando o Arduino
F Na void loop() estará toda a lógica que desejamos implementar no Arduino.
F Há uma infinidade de comandos que podemos utilizar para fazer com que o
Arduino realize aquilo que queremos. Porém, com um pequeno conjunto de
comandos já conseguimos fazer muita coisa funcionar!
F Além destas duas partes principais,
existem outras partes comuns à
maioria dos sketchs.
F Antes mesmo da void setup()
podemos começar cada sketch com
um cabeçalho, um conjunto que
linhas do tipo comentário contendo
informações importantes sobre o
sketch que estamos criando.
F Em seguida, ainda antes da void setup(), devemos incluir as bibliotecas (se
for o caso) e definir as variáveis que usaremos.
F Por fim, em qualquer parte do código, que não seja dentro das void setup()
e void loop(), podemos criar outras funções (void).
25
25
Apoio
Ø Programando o Arduino
F No exemplo da imagem,
temos um exemplo de sketch
que faz um LED, existente na
própria placa Arduino, piscar.
F Primeiro temos alguns
comentários (entre: /* */).
F Depois, definimos 2
variáveis do tipo inteiras: int.
(https://www.arduino.cc/referen
ce/pt/)
F Daí, na void setup(),
configuramos o pino que será
usado como sendo de saída.
Pois usaremos ele para que o
Arduino envie (escreva) um
sinal para o LED.
F Por fim, na void loop(),
temos a lógica que desejamos
implementar.
26
26
Apoio
Ø Programando o Arduino
F Então, já usamos /* e */, para comentar
blocos inteiros, e //, para comentar uma linha
ou, no caso, um trecho dela.
F Também já definimos uma variável do tipo
inteira (integer), usando int, que, no Arduino
UNO tem resolução de 2 bytes. Ou seja,
armazena valores de -32,768 a 32,767 (-2^15
a (2^15 - 1)).
F Existem muitos outros tipos de dados que
podemos usar. Podemos saber mais em:
https://www.arduino.cc/reference/pt/.
F Configuramos um pino digital do Arduino
para funcionar como pino de saída, usando o
comando pinMode(PINO, MODO).
pinMode(PINO, MODO): Configura o modo como cada pino (digital) do Arduino será usado. Os
modos possíveis são: INPUT, OUTPUT ou INPUT_PULLUP, que correspondem, respetivamente, a:
entrada, saída e entrada com sistema de pull-up ativado.
OBS.: Os pinos digitais do Arduino UNO estão numerados de 0 a 13. Mas, podemos usar os
números
27 de 14 a 19 para configurar os pinos analógicos como pinos digitais.
27
Apoio
Ø Programando o Arduino
F Dentro da void loop(), por enquanto,
usamos apenas dois comandos.
F Primeiro usamos o comando
digitalWrite(PINO, VALOR) e em seguida
delay(MILIS). Repetindo duas vezes
essa sequência de comandos.
digitalWrite(PINO, VALOR) escreve um valor no pino selecionado. Como o próprio comando sugere
(digital) só podem ser enviados dois valores 0 (LOW => Nível Baixo = 0v) ou 1 (HIGH => Nível Alto = 5v).
28
Apoio
Ø Usando Protoboards
F Porém, para experimentos mais interessantes, será sempre necessário criar
algum circuito eletrônico, usando componentes, kits e módulos.
F Uma forma prática e rápida de conectar todos esses dispositivos e
componentes entre si, bem como ao Arduino, sem precisar de soldas, é através
da utilização de uma protoboard (ou Matriz de Contatos ou Breadboard(inglês)).
29
29
Apoio
Ø Usando Protoboards
F A Protoboard, também conhecida como placa de ensaio, matriz de contato ou
breadboard (em inglês), é um equipamento que permite a prototipagem e teste
de circuitos eletrônicos sem a necessidade de soldar.
F Basta apenas ir “espetando” os componentes na protoboard.
F Com isso, é possível montar um circuito, realizar testes e, se necessário
substituir componentes da forma que desejar e só soldar o circuito em uma
placa definitiva quando tudo estiver testado e funcionando perfeitamente.
F Porém, existem algumas limitações e possíveis problemas, como a presença
de capacitâncias e indutâncias parasitas, resistências dos próprios contatos,
mau contato entre componentes e a protoboard, incapacidade de acomodar
circuitos integrados de montagem superficial (SMD) sem o uso de adaptadores.
F Por isso, na hora da montagem, certifique-se que tudo está bem preso em seu
devido lugar, isso pode economizar muitas horas de trabalho mais pra frente,
dependendo do tamanho do projeto que você está executando.
30
30
Apoio
Ø Usando Protoboards
F Uma protoboard consiste em um conjuntos de tiras de
metal condutivo embutidas em um encapsulamento de
material não condutivo, normalmente plástico.
F A disposição das tiras de metal condutivo podem ter
uma organização diferente em cada modelo de
protoboard.
F Mas, geralmente, existe uma certa quantidade de
colunas (numeradas) com 5 contatos cada. Podendo
haver, ou não, barramentos de alimentação.
31
31
Apoio
Ø Usando Protoboards
F Vamos analisar uma protoboard de 830 pontos (ou furos, ou contatos).
F Este modelo contém barramento de alimentação duplo (+ e -), formando
linhas, em cada lado da protoboard. Eles podem ser contínuos, de uma ponta
à outra da protoboard, assim teríamos 2 barramentos de alimentação.
F Ou podem apresentar um espaçamento, bem no meio dos barramentos,
indicando uma descontinuidade. Assim, teremos 4 barramentos de
alimentação distintos, permitindo usarmos, facilmente, 4 valores diferentes de
tensão em nosso circuito.
F O espaçamento central, entre as
fileiras de colunas, serve para o
encaixe de circuitos integrados
(Cis) e botões e outros
componentes.
32
32
Apoio
Ø Usando Protoboards
F É muito importante observar que cada conjunto de 5 contatos, partes superior
e inferior de uma coluna, representa um único nó de circuito. Por estarem
interligados, os 5 pontos estarão sempre o mesmo nível de tensão.
F Então, ligar, p.ex., os dois
terminais de um LED em pontos
de um mesmo conjunto de 5
contatos colocará esse LED em
situação de curto circuito.
33
Apoio
34
Apoio
35
Apoio
Típica: 1,8
Laranja
F Além de ter cores diferentes, LEDs construídos a partir de Máxima: 2,3
Típica: 1,8
materiais diferentes irão suportar níveis de tensão diferentes. Vermelho Máxima: 2,3
Típica: 3,2
F Por exemplo, os LEDs de 5mm, que normalmente usamos, Rosa Máxima: 3,4
Típica: 3,2
receba uma tensão acima de seu limite operacional. Senão UV
Máxima: 3,4
36
36
Apoio
Fonte: Porw:en:user:Adam850-w:en:Image:Led2.PNG,Domíniopúblico,
pela corrente na malha, no caso, a corrente
https://commons.wikimedia.org/w/index.php?curid=1849185
𝑉!"#$%&'!çã* − 𝑉+,- fornecida por um pino do Arduino, podemos
𝑅=
𝐼 determinar que resistor deve ser usado para
cada LED e cada Fonte.
F Não é só uma tensão errada que pode queimar um LED. Esse
tipo de componente precisa ser ligado com a polaridade correta.
Senão, também poderá queimar.
F Se o LED for novo, deverá ter um terminal (perninha) maior que
o outro. O terminal mais comprido é o Ânodo (+) e deve ser
ligado ao Vcc (+) do circuito. Logo, o terminal curto é o Cátodo
37 (-) e deve ser ligado ao GND (-) do circuito.
37
Apoio
39
Apoio
40
Apoio
41
Apoio
42
Apoio
43
Apoio
45
45
Apoio
46
Apoio
47
47
Apoio
Ø Programando o Arduino
F Seguiremos a estrutura que já conhecemos para edição do sketch.
F Começaremos com um bloco de comentários, contendo uma descrição do sketch.
F Em seguida, definiremos as variáveis necessárias (nesse caso os 2 pinos usados).
F Depois, configuraremos os pinos de entradas (INPUT) e saídas (OUTPUT).
F Por fim, na void loop(), implementamos a lógica desejada. Onde usaremos dois
novos comandos: digitalRead(PINO) e if...else.
48
48
Apoio
Ø Programando o Arduino
F Primeiramente, precisamos ter um ideia bem clara de qual é a lógica que queremos
implementar. Ou seja, o que queremos que nosso sistema faça.
F Queremos que o Arduino saiba (receba/leia) se o botão está pressionado (sinal alto)
e, então, ligue (envie/escreva um sinal alto para) o LED. Caso contrário, se o botão não
estiver pressionado, o Arduino (envie /escreva um sinal baixo para) desliga o LED.
F Então, a primeira coisa é testar se o botão está pressionado. Para isso, precisamos
ler o sinal digital que chega ao pino ao qual o botão está ligado. Fazemos isso usando o
comando: digitalRead(chavePin).
F Se o valor lido for alto (HIGH ou
1), pela forma como montamos
nosso circuito, significa que o
botão está pressionado.
F Para realizarmos este teste (este SE), usaremos um comando classificado como
CONDICIONAL: o comando if (condição) {comandos}. Se a condição for satisfeita todos
os comandos entre chaves {comandos} serão executados. Porém, se a condição não for
satisfeita, todos esses comandos serão desconsiderados.
49
49
Apoio
Ø Programando o Arduino
F Se quisermos executar um outro conjunto de comandos caso a condição do
comando if NÃO seja satisfeita, devemos o usar o comando else {comandos}, como
complemento do if.
F Se, para você, parece que o
comando complementar else é
desnecessário, podemos testar
comentar esse bloco e ver como nosso
experimento funciona sem o else.
F Uma coisa interessante sobre o comando if (condição) {comandos} é que seu
resultado é uma expressão lógica (verdadeiro-TRUE ou falso-FALSE). Então, se
desejamos testar se a condição é TRUE ou ou, simplesmente 1, nem precisamos digitar
a parte == TRUE ou == HIGH.
F Podemos apagar o == HIGH do
comando if para verificar se tudo
continua funcionando como desejado.
50
50
Apoio
Ø Aprimorando o Experimento
F O dispositivo de entrada utilizado no experimento é uma chave táctil comum, sem
retenção. Então, da forma como montamos nosso circuito, quando a pressionamos
obtemos um nível alto na leitura do pino digital do Arduino. Mas, assim que a soltamos
passamos a ter uma leitura de nível baixo.
F Como poderíamos refazer a lógica do nosso sketch para não precisarmos ficar
segurando o botão para que o LED fique ligado?
F Poderíamos pressionar uma vez para ligar e outra vez para desligar (e assim por
diante).
51
51
Apoio
Ø Aprimorando o Experimento
F Uma possibilidade é usarmos uma ‘flag’, uma variável que nos auxiliaria a inverter o
estado do LED (Ligado ou Desligado) cada vez que o botão é pressionado.
53
Apoio
Ø Usando um Potenciômetro
F Um potenciômetro pode ser utilizado como um dispositivo de entrada analógica.
F Trata-se de um resistor variável que, quando submetido a níveis diferentes de
tensão em seus terminais fixos, p.ex.: 0V e 5V, funcionará como um divisor de tensão,
apresentando no terminal do cursor uma tensão, entre 0V e 5V, conforme o cursor é
girado de um lado até o outro.
54
54
Apoio
55
Apoio
56
56
Apoio
Ø Usando um Potenciômetro
F Voltando a falar sobre a utilização de potenciômetros como
dispositivos de entrada analógica, vamos usar um modelo linear de
10KW (B10K).
F Os terminais fixos deverão ser conectados aos barramentos de
alimentação da protoboard, um lado ao barramento negativo (GND /
0V) e o outro lado ao barramento positivo (Vcc / 5V).
F O terminal do cursor, terminal do meio do potenciômetro, será
ligado a uma entrada analógica do Arduino, como p.ex. o A0.
57
57
Apoio
Ø Programando o Arduino
F Vamos salvar nosso último sketch com novo nome e então editá-lo, criando nosso
terceiro sketch.
F Como sempre, começaremos atualizando o bloco inicial de comentários,
acrescentando informações sobre a utilização do potenciômetro.
F Depois criaremos uma variável para definir o
pino analógico A0 como sendo o pino onde
conectaremos o potenciômetro.
F Lembrando que os pinos analógicos, quando
usados para realizar um leitura analógica, não
precisam se configurados como pino de entrada.
F Por isso, não precisaremos fazer nenhuma
mudança na void setup().
F Por fim, a void loop() terá algumas
alterações:
F Precisamos, entre outras mudanças, realizar a
leitura do potenciómetro, calcular o valor do PWM
e enviar o PWM para o pino que aciona o LED.
58
58
Apoio
Ø Programando o Arduino
59
59
Apoio
Ø Programando o Arduino
F A leitura do sinal que vem do potenciômetro é feita pelo comando
analogRead(PINO).
F É importante lembramos que os pinos do Arduino UNO, entradas e saídas digitais e
analógicas, aceitam uma tensão máxima de 5V.
F Então, se os terminais fixos do potenciômetro estão ligados no barramento de
alimentação da protoboard, que por sua vez está alimentado pelos pinos 5V e GND(0V)
do Arduino, então o pino analógico ao qual o terminal cursor do potenciômetro está
conectado irá receber uma tensão entre 0V e 5V, conforme giramos o cursor.
F Com uma resolução de 210 bits, o comando analogRead(PINO) retornará o valor 0
quando o pino receber 0V e 1023, quando o pino receber 5V.
60
60
Apoio
Ø Programando o Arduino
F Porém, enquanto as entradas analógicas têm uma resolução de 210 bits (0 - 1023),
as saídas analógicas, através de sinal PWM, têm uma resolução 4 vezes menores, de
28 bits (0 - 255).
F Então, simplesmente dividindo o retorno do comando analogRead(PINO) por 4, já
obtemos um valor compatível com o parâmetro do PWM, que usaremos no comando
analogWrite(PINO, VALOR), para ajustar a luminosidade do LED.
F Além disso, precisamos fazer uma pequena mudança na lógica de acionamento do
LED.
F Se a variável ‘estado’ receber um valor LOW, desligamos o LED usando o comando
digitalWrite. Caso contrário, ligamos o LED usando um sinal PWM.
61
61
Apoio
62
62
Apoio
63
63
Apoio
Ø Programando o Arduino
F Novamente, vamos salvar
nosso último sketch com novo
nome e então editá-lo, criando
nosso quarto sketch.
F Como sempre, começaremos
atualizando o bloco inicial de
comentários, acrescentando
informações sobre a utilização dos
2 novos LEDs e Resistores.
F A partir do próximo exemplo,
não apresentaremos, nem
descreveremos, as novas
alterações no cabeçalho inicial de
comentários, sobre a descrição
dos sketchs.
F Porém, gostaríamos de
ressaltar, novamente, a
importância de se gastar um certo
tempo para comentar bem cada
código que desenvolvemos.
64
64
Apoio
Ø Programando o Arduino
F Podemos observar que nosso
sketch está começando a ficar
grande.
F Existe uma grande quantidade
de técnicas de programação que
podemos usar para deixar nossos
códigos “mais enxutos”, mais
eficientes e, porque não dizer, mais
elegantes.
F Notem que existe um conjunto
de 3 comandos que se repetem 4
vezes em nosso sketch, mudando
apenas seus parâmetros.
F Isso nos dá uma excelente
oportunidade para começarmos a
conversar sobre a criação e
utilização de FUNÇÕES (VOID).
65
65
Apoio
Ø Programando o Arduino
F Mas, primeiro, vamos entender o novo sketch.
F Agora, estamos usando 3 LEDs, então vamos definir 3
pinos, só para os LEDS. Fora o potenciômetro e o botão.
F Também precisamos definir esses 3 pinos como saída.
F Daí, temos a nova lógica.
F Agora, temos 4 estados possíveis, e não apenas 2 como
anteriormente.
F Por isso, não adiante ficar apenas trocando o valor da
variável entre 0 e 1. Em vez disso, incrementamos o valor da
variável em 1, cada vez que a chave táctil é pressionada.
F Assim, conforme o valor da variável ‘estado’ vai
aumentando ativamos uma das quatro configurações
possíveis. Até chegar em 4, quando o valor é retornado à 0.
66
66
Apoio
Ø Programando o Arduino
F Podemos fazer exatamente a mesma coisa, porém usando uma função para evitar
a repetição de conjuntos de linhas de comando.
F Vamos criar uma função, usando o comando VOID, chamada ligaLEDs().
67
Apoio
Ø Programando o Arduino
F Então, usando nossa função , no lugar de:
F Temos, simplesmente:
68
Apoio
69
69
Apoio
Apoio
72
Apoio
73
Apoio
Ø Programando o Arduino
F Com relação ao sketch para utilização
do potenciômetro, este novo sketch precisa
de pouquíssima modificação.
F Apenas, mudamos o nome da variável
potPin por ldrPin., nas 2 linhas onde essa
variável aparece.
74
74
Apoio
Ø Aprimorando Nosso Sketch
F Como é muito difícil, em um ambiente comum, obter tanto a incidência máxima de
luz sobre o LDR, quanto a absoluta ausência de luz, acabamos não conseguindo enviar
ao pino analógico do Arduino valores nem tão próximo dos 5v, nem tão pouco de 0V.
F Consequentemente, não conseguimos valores da leitura do pino analógico tão
próximas dos limites de 0 e 1023.
F E, como estamos, simplesmente, dividindo a leitura analógica por 4 para obter o
valor do sinal PWM a ser enviado para os LEDs, podemos não conseguir nem iluminar
totalmente, nem desligar totalmente, os LEDs.
F Mas, como podemos saber que valores estamos obtendo?
F Já conversamos sobre o Monitor Serial da IDE do Arduino! Então, vamos usá-lo!!
F Para começarmos, precisaremos de apenas 2 comandos:
Serial.begin(baudrate) e Serial.println(MSG):
75
Apoio
76
76
Apoio
77
Apoio
F A leitura do LDR, através do pino analógico, deverá ficar bem melhor assim.
F Porém surgi um problema com a variável valPWM. 800 divido por 4 é 200, um pouco
longe dos 255 máximos do PWM. Além disso, o inteiro mais próximo de 70/4 é 17, que
não desliga totalmente os LEDs.
78
78
Apoio
F Assim, garantimos que, sob uma baixa iluminação, o Arduino ilumine o LED ao
máximo, com um PWM de 255, e com alta incidência de luz sobre o LDR, o LED será
completamente desligado, com parâmetro 0 no PWM.
79
79
Apoio
80
80
Apoio
1x Arduino (UNO);
1x Protoboard (830);
1x LED RGB;
3x Resistores 220W;
3x Potenciômetros;
(linear de 10KW)
Vários Jumpers M-M.
81
81
Apoio
Ø Sobre LED RGB
F A novidade em nosso novo experimento é a utilização de um LED do tipo RGB.
F Então precisamos conhecer um pouco mais sobre este tipo de LED.
F Um LED RGB pode ser entendido como sendo 3 LEDs, um vermelho, um
verde e um azul, todos em um mesmo encapsulamento.
F Ou seja, temos 3 diferentes junções de materiais semicondutores, cada
uma com seus próprios terminais, 3 ânodos e 3 cátodos.
F Porém, para simplificar sua utilização, os LEDs RGB podem ter seus 3
cátodos unidos em um único terminal de cátodo comum, mantendo os 3
ânodos independentes. Outros modelos são construídos unindo os 3 ânodos
em um único terminal comum e mantendo os 3 cátodos independentes.
82
82
Apoio
Ø Sobre LED RGB
F Seja um modelo de ânodo comum, ou de cátodo comum, é possível acionar, de
forma independente, cada cor básica (R-G-B) com a intensidade que se queira e, com
isso, produzir outras cores.
F Se usarmos, p.ex., sinais PWM de um Arduino, temos 256 (28) diferentes
intensidades para cada uma das 3 cores básicas, podendo formar (256x256x256 = 224)
mas de 16 milhões de cores.
F O organização dos terminais costuma seguir uma padronização: O maior terminal é
o comum (seja cátodo, ou ânodo). De um lado do comum, temos o terminal individual
da cor vermelha e do outro lado do comum, temos os terminais das outras cores.
F Normalmente, o mais próximo ao
comum é terminal da cor verde e o
mais afastado é o terminal da cor
azul.
83
Apoio
Ø Sobre LED RGB
F Para usarmos um LED RGB com uma fonte de 5V, p.ex.: um Arduino, precisamos
usar 3 resistores, um para cada terminal independente. Enquanto que, o terminal
comum, seja ânodo ou cátodo, será ligado diretamente à tensão correspondente.
F Se for um LED RGB de ânodo comum, o ânodo deverá ser ligado a um ponto do
circuito com tensão positiva constante (Vcc), p.ex., de 5V. Os outros terminais deverão
ser ligados a resistores e então, cada um, a um pino PWM. Porém, esse tipo de LED
RGB por um sinal complementar ao PWM (255 - PWM).
F O LED RGB de cátodo comum tem um funcionamento um pouco mais simples de
entender.
F O terminal do cátodo comum deve
ser ligado diretamente a um ponto GND.
Cada um dos terminais de cada cor será
ligado a um resistor, e então a um pino
PWM.
F O valor do sinal PWM enviado ao
terminal fará a cor correspondente variar
de apagada (PWM = 0) até sua
intensidade máxima (PWM = 255). Obs.: Ver: i) Limite de tensão por cor do LED na tabela do slide 36
e, ii) Fórmula para determinação do valor do resistor, no slide 37.
84
84
Apoio
85
85
Apoio
86
86
Apoio
87
87
Apoio
Ø Programando o Arduino
F O sketch para este experimento usa apenas
conhecimentos que já forma vistos anteriormente.
F Vamos definir as variáveis para os pinos a serem
usados e, na void setup(), configurar os pinos de saída.
F Na void loop(),
usaremos o comando
analogRead(PINO), para
fazer a leitura dos
potenciômetros, definindo
os valores dos PWMs.
F E, para concluir,
reutilizaremos a função:
void ligaLEDs(r, g, b)
88
88
Apoio
89
89
Apoio
90
90
Apoio
91
91
Apoio
Ø Um Novo Projeto!
F Vamos desenvolver um novo projeto, no qual usaremos um código de cores,
através do LED RGB, como sinalização de alerta de proximidade.
F Para avaliar a proximidade de um ‘obstáculo’ usaremos um Sensor de Distância
Ultrassônico HC-SR04.
F A ideia é que um obstáculo a mais de 20cm mostre uma luz verde. Conforme o
obstáculo se aproxime a luz vai mudando para amarela, até 15cm. Entre 15cm e 10cm
a luz vai mudando para vermelha, até ficar totalmente vermelha, para menos de 10cm.
92
92
Apoio
93
Apoio
94
Apoio
95
Apoio
96
Apoio
F Wire – Biblioteca que permite enviar e receber dados por meio de uma interface TWI/I2C
(interface a dois fios) em uma rede de dispositivos ou sensores.
97
97
Apoio
98
98
Apoio
F Depois, basta selecionar o arquivo .ZIP, que foi baixado da Internet, contendo a
biblioteca que desejamos instalar.
99
99
Apoio
100
100
Apoio
101
101
Apoio
Ø Baixando e Instalando uma Biblioteca para o HC-SR04
F Uma vez adicionada a nova biblioteca, ela aparecerá na lista de bibliotecas que
podemos incluir em nossos sketch: Menu: Sketch à Incluir Biblioteca.
F Muitas vezes, serão incluídos sketchs de exemplos: Menu: Arquivo à Exemplos.
102
102
Apoio
103
103
Apoio
104
104
Apoio
Ø Programando o Arduino
F Vamos começar um sketch novo: Arquivo à Novo.
F Para começar nosso novo sketch, vamos incluir a
biblioteca do sensor ultrassônico: Sketch à Incluir
Biblioteca à Ultrasonic-master.
F Acima da linha de
comando que inclui a
biblioteca do sensor, vamos
incluir nosso cabeçalho de
descrição.
F E, logo após ela,
definiremos as variáveis que
usaremos.
105
Apoio
Ø Programando o Arduino
F A biblioteca Ultrasonic.h, assim como acontece com várias outras, pode ser
usadas para manipular vários sensores ultrassônicos simultaneamente.
F Para cada sensor que desejemos utilizar, precisamos criar um ‘objeto’, que será
associado ao sensor desejado através de certos parâmetros, como, neste caso, os
pinos digitais do Arduino o o sensor está ligado.
Ultrasonic NomeObjeto(Pino do Trigger, Pino do Echo);
F A linha de código que cria este objeto ficará junto com a definição das variáveis,
antes da void setup().
106
106
Apoio
Ø Programando o Arduino
F Começaremos a implementar a lógica desejada, na void loop(), com dois
comandos específicos da biblioteca Ultrasonic.h: O primeiro, varTempo =
NomeObjeto.timing();, para determinar o tempo entre o disparo e o retorno do
pulso ultrassônico e o segundo, varDist = NomeObjeto.convert(varTempo,
Ultrasonic::CM);, para calcular a distância, em função do tempo medido.
Apoio
108
108
Apoio
109
Apoio
Ø Sobre Buzzers
F Vamos começar falando sobre os buzzers, ou buzinas, que são um tipo de
transdutor piezoelétrico apropriados para geração de sinais elétricos de baixa potência.
F Um buzzer típico e composto por 1 camada de material piezoelétrico, envolvida por
2 camadas de metal, uma de cada lado do piezoelétrico.
F Então, primeiramente, temos que entender um
pouco sobre o funcionamento de materiais
piezoelétricos.
F O materiais construídos à base de cristais
piezoelétricos tem uma propriedade eletromecânica
muito interessante: Se ele for deformado, por uma
pressão em suas faces, ele produz, instantaneamente,
um diferencial de tensão.
F Isso é conhecido como efeito piezoelétrico e, o mais
interessante é que, é um efeito reversível.
F No efeito piezoelétrico reverso, quando quando
Fonte:https://commons.wikimedia.org/wiki/File:Schema
submetemos o material a um diferencial de tensão, ele Piezo.gif#/media/File:SchemaPiezo.gif
se deforma.
110
110
Apoio
Ø Sobre Buzzers
F Baseado no efeito piezoelétrico reverso, enviando um sinal eletrônico que oscile em
determinadas frequências, podemos fazer uma pastilha de cristais piezoelétricos (ou
simplesmente: pastilha piezoelétrica) vibrar, produzindo sons.
F Este é o principio por trás dos buzzers, que podem ser de 2 tipos:
111
111
Apoio
Ø Usando um Buzzer Ativo em Nosso Protótipo
F Como desejamos emitir um sinal sonoro, um buzzer ativo é o mais adequado.
F Ele é muito fácil de usar. Vamos inseri-lo em um cantinho da protoboard e,
observando sua polaridade, vamos liga-lo ao barramento negativo da protoboard
(GND) e ao pino digital 6 do Arduino.
112
112
Apoio
Ø Programando o Arduino
F A programação, para utilizar o buzzer ativo, também é simples.
F Vamos definir a variável que determina o pino que será usado para o buzzer e, em
seguida, na void setup(), configurar ele como saída.
113
Apoio
114
114
Apoio
115
115
Apoio
116
116
Apoio
117
117
Apoio
118
Apoio
119
119
Apoio
120
Apoio
Ø Programando o Arduino
F Vamos começar um sketch novo: Arquivo à Novo.
F Após os comentários iniciais, na definição das
variáveis, já teremos algumas novidades.
F Vamos utilizar vetores (nomeVetor[elementos]) e
matrizes (nomeMatriz[linhas][colunas]).
F Também usaremos um
novo tipo de variável: bool.
F Uma variável lógica, do
tipo booleana, aceita
valores de TRUE (1) e
FALSE (0), e pode ser
manipulada através de
operadores lógicos.
121
121
Apoio
Ø Programando o Arduino
F Na void setup(), usaremos o comando na for(), classificado como “estrutura de
controle”, para configurar todos os 8 pinos definidos no vetor seteSegsPins, como
pinos de saída.
12 13 14 15 16 ...
122
Apoio
Ø Programando o Arduino
F Na void loop(), simplesmente, iremos percorrer as 16 linhas da matriz que define
os dígitos, fazendo com que cada dígito seja exibido no display.
123
123
Apoio
124
124
Apoio
125
Apoio
126
Apoio
127
Apoio
128 Fonte:https://clintonwhitehouse4.archives.gov/Initiatives/Millennium/capsule/mayo.html
128
Apoio
Emissor
Fonte:https://commons.wikimedia.org/wiki/File:Transbauformen.jpg#/media/Ficheiro:Transbauformen.jpg Fonte:https://commons.wikimedia.org/wiki/File:Transistor_animation.gif#/media/File:Transistor
_animation.gif
129
129
Apoio
130
Apoio
131
Apoio
132
Apoio
133
133
Apoio
134
Apoio
135
135
Apoio
136
Apoio
Ø Observações Finais Sobre Displays
F Aprendemos a forma mais básica de exibir múltiplos dígitos com displays de 7
segmentos. Usando múltiplos displays!
F Mas, como já foi mostrado, existem displays de 7 segmentos de 2, 3, 4, 8 e até mais
dígitos juntos em um único invólucros.
F Alguns apresentam um terminal para
cada segmento, de cada dígito,
necessitando de conexões equivalentes
às usadas em múltiplos displays.
137
Apoio
138
138
Apoio
139
139
Apoio
140
Apoio
Ø Programando o Arduino
F Nosso nono sketch pode ser visto como uma junção dos sétimo e oitavo sketchs,
obviamente, com as devidas adaptações.
F Após uma boa descrição inicial, definimos os pinos e
as variáveis que serão usadas.
F Temos a junção dos 2 códigos anteriores, acrescido
da definição dos pinos usados para os transistores.
F Não usaremos o pino 19 (A5), para o ponto decimal.
141
141
Apoio
Ø Programando o Arduino
F Na void setup() são necessárias mais algumas pequenas adaptações:
F Como não estamos
usando o pino 19, para o
ponto decimal (DP), temos 7,
e não 8, pinos para serem
configurados.
F Precisamos configurar os
pinos usados para acionar os
2 transistores.
F Na void loop()
temos apenas uma linha
a mais que no sétimo
sketch.
F Essa linha chama
uma função que, a partir
da distância medida,
determinará os dígitos
que serão exibidos em
cada display.
142
142
Apoio
Ø Programando o Arduino
F Na void determinaDigitos(int valor) o primeiro ‘truque’ está em receber o
valor enviado como um número inteiro (sem casas decimais, como em um float).
F Como o sensor pode medir até 4 metros, mas estamos trabalhando com distâncias
de apenas alguns centímetros, vamos impor uma limitação para que qualquer distância
maior que 99cm corresponda a um valor de 99.
F Assim, qualquer que seja a distância medida, teremos um variável ‘valor’ com
apenas dois dígitos, o dígito das dezenas e o dígito das unidades.
F Com um pouco de álgebra, conseguimos separar os dois dígitos da variável valor,
em duas novas variáveis.
F Enviamos os 2 dígitos para uma nova função: mostraDispaly(digito1, digito2).
143
143
Apoio
Ø Programando o Arduino
F Na void mostraDispaly(int valor1, int valor2), ligamos o primeiro display,
desligamos o segundo e chamamos a função de acionamento dos LEDs dos
segmentos para exibir o dígito das dezenas.
F Então esperamos um pouco (5 milissegundos) para estabilizar o acendimento dos
LEDs.
F Depois, desligamos o primeiro display, ligamos o segundo e chamamos novamente
a função de acionamento dos LEDs dos segmentos, agora para exibir o dígito das
unidades.
F E, terminamos esperando mais 5 milissegundos para estabilizar o segundo display.
144
144
Apoio
145
Apoio
Ø Problema Resolvido!
F Se tivermos um sketch muito grande, cujo
processamento leve muito tempo, ou se precisamos
usar pausas (comando delay(tempo)) em nosso
sketch, o ‘truque’ de desligar e ligar os displays ficará
compromentido.
F O último display a ser ligado, ficará assim por muito
tempo, enquanto os demais ficaram desligados por
muito tempo.
F Podemos notar que, no nosso caso, o primeiro
display fica desligado por mais tempo, principalmente,
quando temos distâncias entre 10 e 20cm.
F Isso acontece por que nesta faixa de distância
precisamos usar pausas para controlar a frequência de
acionamento do buzzer.
146
146
Apoio
Ø Problema Resolvido!
F Uma forma simples de lidar com o problema de sketchs muito grandes é repetir o
comando que chama a função de acionamento dos displays mais vezes, dentro do
fluxo lógico do nosso código.
F Também precisamos encontrar uma forma alternativa para realizar as pausas.
F Nossa função de
acionamento dos displays é
bastante simples, mas
contém duas pausas de 5
milissegundos. Ou seja, a
‘duração’ da função deve
ser de aproximadamente 10
milissegundos.
F Cada vez que chamamos esta função passamos 10ms
pausados.
F Então, uma forma de fazer uma pausa, p.ex., de 50ms
(delay(50)) é chamar esta função 5 vezes.
F Assim, podemos substituir os comandos delay(tempo),
de nosso skecth, por loops, em múltiplos de 10, de
chamados da função de acionamento dos displays.
147
147
Apoio
148
148
Apoio
Resumo do Curso
F Tomamos conhecimento da Cultura Maker.
F Conhecemos os sistemas de prototipagem rápida, como: Arduino, ESP e Raspberry.
F Aprendemos um pouco sobre:
F O Arduino UNO.
F Sinal PWM.
F Entradas e Saídas Digitais e Analógicas.
F Tivemos um contato inicial com a IDE de programação do Arduino e alguns de
seus principais comandos.
F Além da estrutura de um Sketch, criação de funções e utilização de bibliotecas.
F Vimos como uilizar Protoboards e Jumpers para criar e testar protótipos.
F Tivemos a oportunidade de aprender a utilizar componentes eletrônicos
importantes e muito úteis:
F Chave Táctil (Push Button) e Buzzer Ativo(buzina).
F LEDs comuns, RGB e Displays de 7 segmentos.
F Resistores e Potenciômetros (divisor de tensão).
F Sensor de luminosidade LDR (Resistor Dependente de Luz).
F Módulo Sensor de Distância Ultrassônico HC-SR04.
F O importantíssimo TRANSISTOR.
149
149
Apoio
150
Apoio
Material Recomendado
Componente Quantidade
Arduino UNO R3 + Cabo USB 1
Protoboard 830 Pontos 1
Protoboard 400 Pontos 1
LED difuso 5mm Vermelho 4
LED difuso 5mm Verde 4
LED difuso 5mm Amarelo 4
LED difuso 5mm Azul 4
LED difuso 5mm Branco 4
LED difuso 5mm RGB 2
Chave Táctil (push button) (4 terminais / 12x12mm com capa) 5
Resistor 220Ω - 1/4w (220R) 10
Resistor 1KΩ - 1/4w (1K) 10
Resistor 10KΩ - 1/4w (10K) 10
Potenciômetro 10KΩ Ohms – Linear (B10K) 3
Knob para Potenciômetro Estriado (1 Vermelho, 1 Verde e 1 Azul) 3
Sensor de Luminosidade LDR (5mm) 1
Sensor de Distância Ultrassônico HC-SR04 1
Buzzer Ativo 5V 12mm Bip Contínuo 1
Display 7 Segmentos 1 Dígito 0,56" Cátodo Comum 2
Transistor 2N2222A 2
Jumpers 20cm Macho-Macho 40
Jumpers 20cm Macho-Fêmea 40
151 Jumpers 20cm Fêmea-Fêmea 40
151
Apoio
Componente Quantidade
Fonte de Alimentação Chaveada 12VDC 1A Plug P4-Compat. c/ Arduino 1
Outros Itens Básicos para Iniciantes
152
Apoio