Escolar Documentos
Profissional Documentos
Cultura Documentos
Arquiteturas Créditos: 4
Principais fabricantes:
Difere do microprocessador por não necessitar de periféricos. Por
Microchip exemplo: memória, conversor A/D, etc.
Atmel
Texas Instruments PIC (Programmable Intelligent Controller): família de
microcontroladores desenvolvido pela Microchip Technology.
Freescale
Site: https://www.arduino.cc/
6 Pinagem
7 Pinagem
Microcontrolador presente: Atmega 328P
Voltagem operacional: 5V
Pinos I/O (Entrada/Saída): 14 (6 podem ser
usando como PWM(~))
Corrente contínua: 40mA (5V), 50mA (3,3V)
Memória flash: 32kB
Memória SRAM: 2kB
Memória EEPROM: 1kB
Clock: 16MHz
IDE do arduino
8 IDE (Integrated Development Environment): Ambiente
Integrado de Desenvolvimento (tela de programação,
compilador e depurador), utilizado para se comunicar
com o Arduino.
IDE do arduino
9 IDE (Integrated Development Environment): Ambiente
Integrado de Desenvolvimento (tela de programação,
compilador e depurador), utilizado para se comunicar
com o Arduino.
7. Nome do Sketch.
8. Área de Código.
9. Barra de status : Existência de erros.
10. Console de texto: Descrição de erros.
11. Placa e Porta serial.
Monitor serial
10
Monitor serial do Arduino: Exibe dados seriais
sendo enviados da placa Arduino para o
computador. Para enviar dados para a placa,
digite o texto e clique no botão "enviar" ou
pressione enter.
A comunicação entre a placa Arduino e seu
computador pode acontecer em várias
velocidades padrão pré-definidas. Para que isso
ocorra é importante que seja definida a mesma
velocidade tanto na Sketch quanto no Monitor
Serial.
Na Sketch esta escolha é feita através da função
Serial.begin. E no Monitor Serial através do menu
drop down do canto inferior direito.
IDE do Arduino
11 Menu: Arquivo
Novo: Cria uma nova instância fornecido pelo Arduino Configurações da página: Ele
do editor, com a estrutura Software (IDE) ou biblioteca mostra a janela de
mínima de um esboço já aparece neste item de menu. Configuração da Página para
existente. Todos os exemplos estão impressão.
estruturados em uma árvore
Abrir: Permite carregar um Impressão: Envia o esboço
que permite acesso fácil por
arquivo de esboço navegando atual para a impressora de
tópico ou biblioteca.
pelas unidades e pastas do acordo com as configurações
computador. Fechar: Fecha a instância do definidas na Configuração da
software Arduino do qual é Página.
Aberto recentemente: Fornece
clicado.
uma pequena lista dos esboços Preferências: Abre a janela
mais recentes, pronto para ser Salvar: Salva o esboço com o Preferências onde algumas
aberto. nome atual. Se o arquivo não configurações do IDE podem
tiver sido nomeado ser personalizadas, como o
Sketchbook: Mostra os esboços
anteriormente, um nome será idioma da interface IDE.
atuais dentro da estrutura da
fornecido em uma janela
pasta do bloco de desenho; Sair: Fecha todas as janelas IDE.
"Salvar como ...".
Clicar em qualquer nome abre Os mesmos esboços abertos
o esboço correspondente em Salvar como...: Permite salvar o quando o Quit foi escolhido
uma nova instância de editor. esboço atual com um nome serão automaticamente
diferente. reabertos na próxima vez que
Exemplos: Qualquer exemplo
você iniciar o IDE.
IDE do Arduino
12 Menu: Editar
Desfazer/refazer: Desfaz/Refaz código do seu esboço para a (identação): Adiciona ou
uma ação realizada. área de transferência como subtrai um espaço no início de
HTML, adequado para cada linha selecionada,
Cortar: Remove o texto
incorporação em páginas da movendo o texto para um
selecionado do editor e
web. espaço à direita ou
coloca-o na área de
eliminando um espaço no
transferência. Colar: Coloca o conteúdo da
começo.
área de transferência na
Copiar: Duplica o texto
posição do cursor, no editor. Localizar: Abre a janela
selecionado no editor e
Localizar e Substituir onde
coloca-o na área de Selecionar tudo: Seleciona e
você pode especificar texto
transferência. destaca todo o conteúdo do
para pesquisar dentro do
editor.
Copiar para o Fórum: Copia o esboço atual de acordo com
código do seu esboço para a Comentar/Descomentar: várias opções.
área de transferência em um Coloca ou remove o //
Localizar o próximo: Destaca a
formulário adequado para marcador de comentário no
próxima ocorrência.
publicação no fórum, com início de cada linha
cores sintáticas. selecionada. Localizar Anterior: Destaca a
ocorrência.
Copie como HTML: Copia o Aumento/Diminuição da recuo
IDE do Arduino
13 Menu: Sketch
Verificar/Compilar: Verifica Exportar binário compilado: atual). O novo arquivo
seu esboço para erros Salva um arquivo .hex que aparece em uma nova
compilando-o; Ele relatará pode ser mantido como guia na janela de esboço.
o uso de memória para arquivo ou enviado para a Os arquivos podem ser
código. placa usando outras removidos do esboço
ferramentas. usando o menu de guia
Carregar: Compila e
acessível clicando no
carrega o arquivo binário Mostrar pasta de sketch:
pequeno ícone de triângulo
na placa configurada Abre a pasta de esboço
abaixo do monitor serial um
através da porta atual.
no lado direito da barra de
configurada.
Incluir Biblioteca: Adiciona ferramentas.
Carregar usando o uma biblioteca ao seu
Programador: Isso substituirá esboço inserindo instruções
o bootloader; Você #include no início do seu
precisará usar Ferramentas código.
> Gravar bootloader para
Adicionar arquivo...:
restaurá-lo e poder carregar
Adiciona um arquivo de
para a porta serial USB
origem ao esboço (ele será
novamente.
copiado da sua localização
IDE do Arduino
14 Menu: Ferramentas
Autoformatação: organiza a na Porta atualmente Hardware ao programar uma
formatação do sketch. selecionada. Isso placa ou chip e não usar a
normalmente reinicia a conexão USB-serial integrada.
Arquivar Sketch: Arquiva uma
placa, se a placa suportar a
cópia do esboço atual no Gravar Bootloader: Os itens
Redefinição na abertura da
formato .zip. O arquivo é deste menu permitem gravar
porta serial.
colocado no mesmo diretório um bootloader no
que o esboço. Plotter serial: plotar gráficos microcontrolador da placa
de forma serial. Arduino. Isso não é
Corrigir codificação e
necessário para o uso normal
recarregar: Corrige possíveis Placa: Selecione a placa
de uma placa Arduino ou
discrepâncias entre a Arduino que você está
Genuino, mas é útil se você
codificação do mapa de usando.
comprar um novo
caracteres do editor e outros
Porta: Este menu contém microcontrolador ATmega
mapas gráficos de sistemas
todos os dispositivos de série (que normalmente vem sem
operacionais.
(reais ou virtuais) em sua um bootloader).
Monitor Serial: Abre a janela máquina.
do monitor serial e inicia a
Programador: Para selecionar
troca de dados com
um programador de
qualquer placa conectada
15 Simuladores
Proteus
Biblioteca simulino
Arduino interno
SimulIDE
https://sourceforge.net/projects/simulide/
TinkerCAD
https://www.tinkercad.com/circuits
Ciclo de desenvolvimento de projeto
16
As saídas, ou outputs, são atuadores, ou outros dispositivos que convertem os sinais de corrente
ou voltagem em sinais fisicamente úteis como movimento, luz, som, força ou rotação, entre
outros. Exemplos de saídas são motores, LEDs ou sistemas de luzes que acendem
automaticamente quando escurece ou um buzzer que gere diversos tons.
18 Entradas e saídas – Arduino UNO
Entradas digitais:
Funciona de acordo com os princípios booleanos (0: 0V e 1: 5V).
Limite de corrente em uma porta do Arduino: 40mA
Entradas analógicas:
Sinais variantes no tempo (assumem valores diferentes constantemente).
Hello World
19 Este exemplo mostra a experiência mais simples que você pode fazer com um Arduino
para verificar uma saída física: piscar um LED. Neste exemplo, você irá aprender a
acionar uma carga (LED) conectada a um pino do Arduino.
Hello World
20
21
Análise do código: funções digitais
22
Análise do código: função de tempo delay
23
Análise do código: constantes
24
29
Configuração PULL UP
30
Com resistor Pull Up interno
Análise do código: estruturas de controle
if, é usado em conjunto com um operador de If...else:
comparação, utilizado para testar se uma
determinada condição foi atingida, como uma
entrada que está acima de um determinado
número.
31
Análise do código: Operadores lógicos e aritméticos
32
𝑖𝑓 (𝑥 == 𝑦){
𝑦 + +;
𝑒𝑙𝑠𝑒 {
𝑥 + +;
}
Botão 2
33
34 Leitura serial de uma entrada digital
Este exemplo mostra como monitorar o estado de um interruptor (botão) estabelecendo a
comunicação serial entre seu Arduino e o computador (através da USB).
Leitura serial de uma entrada digital
35
Análise do código: função serial
36
Análise do código: função serial
37
Utilizando a função serial
38
Comando via monitor serial
39
Através deste tutorial você vai controlar o acionamento de um LED através do Monitor
Serial de seu computador.
Comando via monitor serial
40
Leitura serial de uma entrada analógica
41
Este exemplo mostra como ler um pino de uma entrada analógica, mapear o resultado para
um intervalo de 0 a 255, e usar esse resultado para definir a modulação PWM de um pino de
saída para acender e apagar um LED.
Conversões para entradas analógicas
42
1023
47 2. Revisão:
Linguagem de programação
Estruturas de controle
A declaração for é usada para repetir
declarações em um bloco. Um contador de
incremento geralmente é usado para
incrementar e encerrar o loop. A instrução for é
útil para qualquer operação repetitiva, e muitas
vezes é usada em combinação com arrays para
operar em conjunto de dados/pinos.
48
Estruturas de controle
Switch ... case: controla o fluxo de programas, permitindo
que os programadores especifiquem um código diferente
que deve ser executado em várias condições. Em
particular, essa estrutura compara o valor de uma variável
com os valores especificados nas instruções case.
Quando uma declaração de case é encontrada cujo
valor corresponde ao da variável, o código na
declaração desse case é executado.
49
Estruturas de controle
While: é um loop contínuo, até que a expressão
dentro dos parênteses () torne-se falsa. Algo
deve mudar a variável testada, ou o loop será
infinito. Isso pode estar no seu código, como
uma variável incrementada ou uma condição
externa, como testar um sensor.
50
Estruturas de controle
Definindo variável
global:
#𝑑𝑒𝑓𝑖𝑛𝑒 𝑋 10
Definindo variável
local:
𝑖𝑛𝑡 𝑥 = 10;
𝑓𝑙𝑜𝑎𝑡 𝑦 = 5,5;
Constantes e variáveis
54
Semelhante aos inteiros, pontos flutuante são usadas para tornar o código mais legível. As
constantes de ponto flutuante são trocadas no tempo de compilação para o valor ao
qual a expressão é avaliada.
Tipo de dados
56
void: (vazio) é usada apenas nas declarações de função. Isso indica que a função não
deve retornar nenhuma informação para a função a partir da qual foi chamado.
boolean: pode ser, true or false, (false = 0; true = qualquer número diferente de 0).
char: dado que ocupa 1 byte de memória para armazenar um valor de caractere. As
literais de caracteres são escritos com citações simples, como: 'A' (para caracteres
múltiplos - strings - use aspas duplas: "ABC"). Entretanto, os caracteres são armazenados
como números: 'A' + 1 = 66.
float: 32 bits (valores até 3.4028235e+38 ou -3.4028235E+38), possui 6-7 dígitos de precisão
(double é igual a float).
Tipo de dados
string: pode ser representado de duas maneiras: utilizando vetor de caracteres, terminado com o
caractere nulo (\0) ou criando um objeto de tipo próprio.
Declare uma série de caracteres sem inicializar como no Str1;
Declare uma série de caracteres (com um caractere adicional) e o compilador adicionará o
caractere nulo necessário, como no Str2;
Adicione explicitamente o caractere nulo, Str3;
Inicialize com uma string entre aspas; O compilador dimensionará a matriz para ajustar a string e
um caractere nulo de término, Str4;
Inicialize a matriz com um tamanho explícito e string, Str5;
Inicialize a matriz, deixando espaço extra para uma string maior, Str6.
58
Tipo de dados
string: pode ser representado de duas maneiras: utilizando vetor de caracteres, terminado com o
caractere nulo (\0) ou criando um objeto de tipo próprio.
59
60 Conversão de dados
char(): converte o valor para um dado tipo caractere.
Atribuindo valor:
Lendo um valor:
Loop:
61 Deslocando valores
62 Funções
63 3. Periféricos:
Sensores, atuadores, cargas e displays.
Sensor de luz com LDR
64
Acione um LED sempre que algum objeto for detectado pelo sensor óptico.
Display LCD
73
O display de LCD é uma peça importante em projetos em que você precisa visualizar a
leitura de um sensor ou mesmo para transmitir uma informação para o usuário. Neste
exercício você aprenderá a conectar o Display LCD 2x16 do seu Kit, que já vem com os
pinos soldados.
Display LCD
Biblioteca <LiquidCrystal.h>
74
LiquidCrystal()
LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
begin(): lcd.begin(cols, rows) – inicializa o lcd.
clear(): lcd.clear() – limpa o lcd.
home(): lcd.home() – vai para a posição da primeira coluna e linha.
setCursor(): lcd.setCursor(col, row) – vai para a posição especificada.
write(): lcd.write(data) – envia dados em formato ASCII
print() – envia dados
lcd.print(data)
lcd.print(data, BASE)
cursor(): lcd.cursor() – exibe o cursor no display
noCursor(): lcd.noCursor() – esconde o cursor no display
scrollDisplayLeft() e scrollDisplayRight(): lcd.scrollDisplayLeft() – desliza uma posição
Display LCD
75 Pino 1: GND do Arduino;
Pino 2: 5V do Arduino;
Pino 3: Pino central do potenciômetro;
Pino 4: I/O digital 12;
Pino 5: GND Arduino;
82
Motor DC
Motor de corrente contínua
83
Motor DC
com Ponte H
A ponte H é utilizada para inverter o sentido de giro de um motor DC.
84
Motor DC
com Ponte H
A ponte H (CI L293D) permite o
controle do sentido de giro de até dois
motores DC.
85
86
Lista de Exercícios I
Exercitando...
1. Pisca-Pisca: Um LED conectado a um pino qualquer deverá piscar em um
intervalo de 500ms (use a função delay e millis).
2. Botão e LED: Ao pressionar um botão conectado no pino 8, deverá acender um
LED conectado no pino 10, de tal forma que o mesmo deverá permanecer
aceso por 5s após desativar o botão, após esse tempo o LED apagará.
3. Barra de LEDs: Um conjunto de 8 LEDs (Pino 2 a 9) será ativado de modo
sequencial após o botão 1 (conectado no pino 10) ser pressionado. Os LEDs
serão desativados também pelo botão 1.
4. Barra de LEDs: Um conjunto de 8 LEDs será ativado de modo sequencial após o
botão 1 ser pressionado. Os LEDs serão desativados após realizar o mesmo ciclo 5
vezes.
5. Barra de LEDs: Um conjunto de 8 LEDs será ativado de modo sequencial após o
botão 1 ser pressionado. Os LEDs serão desativados pelo botão 2.
87
Exercitando...
6. Pisca-Pisca: Repita as questões 3 e 4 utilizando resistores pull up internos
do Arduino.
7. Pisca-Pisca com Relé: Um LED conectado a um relé deverá piscar em um
intervalo de 500ms.
8. Faça com que em uma sequência de seis LEDs, os presentes em AMBAS
as extremidades da sequencia iniciem acesos. Então, avance as luzes,
uma em direção da outra, dando a impressão de que estão se
encontrando e após isso retornando as extremidades, em que só as da
extremidade permanecem acesas.
9. Para evitar acidentes no ambiente de trabalho, uma regra de segurança
em vários equipamentos industriais é obrigar que um usuário aperte dois
botões, um com cada mão, para acionar uma máquina. É o caso da
máquina de corte usada em fábricas de papel. Monte um circuito em
que um LED somente acende se os dois botões do circuito estiverem
88 pressionados.
Exercitando...
10. Faça mais uma modificação na questão 10, em que um LED vermelho
deve acender ao pressionar o botão 1 ou o botão 2. Se ambos forem
pressionados um LED verde deve acender. Ao deixar de pressionar
ambos os botões, ambos os LEDs se apagam.
11. Faça mais uma modificação na questão 10, agora um LED vermelho
deve acender ao iniciar o processo, após 1 segundo esse LED vermelho é
apagado e um LED amarelo deve piscar 5 vezes (intervalo de 500ms) e
depois permanecer aceso indicando que os botões 1 e 2 podem ser
acionados. Ao acionar ambos os botões no mesmo instante, um LED
verde deve acender e o amarelo apagar, do contrário o LED verde não
acende (se pressionar somente um botão por vez). É importante ressaltar
que ao pressionar ambos os botões o LED verde só irá acender se o LED
amarelo estiver aceso continuamente (sem piscar).
89
Exercitando...
12. Semáforo: Projete um semáforo para o cruzamento entre as ruas 01 e 02.
As luzes acedem de modo a nunca coincidirem, permitindo um tráfego
seguro.
13. Dessa vez, considere uma avenida de mão dupla, com um semáforo em
cada uma das vias, e inclua um farol de pedestre e um botão, que será
pressionado pelos pedestres para solicitar a travessia da rua. Ambos os
semáforos presentes na via vão estar no mesmo estado. O Arduino
reagirá quando o botão for pressionado, alterando o estado das luzes
90 para que os carros parem e os pedestres possam atravessar.
Exercitando...
14. Projete um hardware e um software utilizando Arduino que realize a leitura do ADC A0 com
10 bits e que, acenda um LED vermelho quando o valor lido for menor que 2,5V e acenda o
LED amarelo quando for maior. Exiba no monitor serial o valor da tensão.
15. Solução de um programa que implemente as funções soma, subtração, multiplicação e
divisão, em que todas estas são chamadas por uma função exclusiva para a operação,
inclusive pedindo os valores de entrada de cada função e apresentando as saídas das
mesmas no final. Os valores resultantes devem ser inseridos e exibidos no monitor serial.
16. Solução para um programa utilizando um vetor que armazena 5 números. Encontre o maior,
o menor e a média dos números existentes no vetor. Os valores resultantes devem ser
exibidos no monitor serial.
17. Projete um hardware e um software utilizando o Arduino que implemente um ou exclusivo
(XOR) de 3 entradas e acione um LED para demonstrar as saídas com nível lógico alto.
18. Projete um hardware e um software utilizando o Arduino que implemente um codificador
BCD para display de 7 segmentos. Pode ser empregado quatro botões nas entradas para
representar o BCD.
19. Projete um hardware e um software utilizando Arduino que realize a leitura do ADC AN0
com 10 bits e demonstre o resultado da parte inteira da tensão em um display de 7
91 segmentos.
Display 7 segmentos
92
93
Exercitando...
94
20. Utilize um Display 7 seg. para fazer um contador Up/Down (0 a 9, 9 a 0).
21.Botão e display de 7 segmentos: Ao pressionar um botão, o número 0
será incrementado em n+1 até 9
22.Botão e display de 7 segmentos: Ao pressionar um botão, o número 9
será decrementado em n-1 até 0.
23.Botão e display de 7 segmentos: Utilize um botão de decremento e um
botão de incremento para alterar o valor apresentado em um display
de 7 segmentos. Ao pressionar o botão de incremento o número é
somado com 1. Ao pressionar o de decremento o número 1 deve
ser subtraído.
24.Display de 7 segmentos: Faça um programa que acione dois displays de
sete segmentos e apresente uma contagem progressiva de 0 a 99.
25.Display de 7 segmentos: Faça um programa que acione dois displays de
sete segmentos e apresente uma contagem regressiva de 99 a 0.
95
4. Interrupções
Interrupção externa
As interrupções são úteis para que as
coisas aconteçam automaticamente no
instante que forem acionadas e podem
ajudar a resolver problemas de
temporização.
Serviço de interrupção de rotinas (ISR) são
tipos especiais de funções que possuem
algumas limitações únicas que a maioria
das outras funções não possuem. Um ISR
não pode ter nenhum parâmetro, e eles
não devem retornar nada.
Normalmente utiliza-se variáveis globais
para passar dados entre um ISR e o
programa principal. Para garantir que as
variáveis compartilhadas entre um ISR e o
programa principal sejam atualizadas
corretamente, declare-as como volatile
(armazenado na memória de RAM ao
invés de registradores temporários).
96
97
Interrupção externa
98
Interrupção externa
Acendendo um LED por 0,005 segundos, e um
segundo LED (Pin13) ao pressionar um botão
99
Interrupção interna:
Timers
É possível utilizar o temporizador para medir
repetidamente um período de tempo. No final
de cada período, uma função de interrupção
pode ser executada.
100
TimerOne.h
Configuração:
Timer1.initialize(time): define o tempo desejado para ativar a interrupção. Esta função deve
ser utilizada antes de qualquer outra para inicializar o temporizador, e time deve ser definido
em microssegundos. time varia de 1 a 8.388.480 microssegundos (8,3 segundos).
Timer1.setPeriod(time): modifica o tempo desejado para ativar a interrupção, após o
temporizador ter sido inicializado.
Controle:
Timer1.start(): inicializa o temporizador.
Timer1.stop(): pausa o temporizador.
Timer1.restart(): reseta o temporizador.
Timer1.resume(): retoma a contagem do temporizador após ter sido pausado.
101
TimerOne.h
Interrupção:
Timer1.attachInterrupt(função): função a ser executada ao término do tempo predefinido. Essa
função será acionada como uma interrupção.
Timer1.detachInterrupt(): desabilita a função de interrupção.
PWM:
Timer1.pwm(pin, duty): permite o uso dos pinos de PWM. O duty cycle varia de 0 a 1023, em
que 0 representa o 0V e 1023 o 5V.
Timer1.setPwmDuty(pin, duty): permite o reajuste do duty cycle do PWM sem reconfigurar o
pino para uso de PWM. Timer1.pwm(pin, duty) deve ser utilizado pelo menos uma vez antes
desta função.
Timer1.disablePwm(pin): desabilita o uso do PWM no pino, e o mesmo volta a funcionar com a
função digitalWrite();.
102
TimerOne.h
103
104
Exercitando...
1. Pisca-Pisca: Um LED conectado a um pino qualquer deverá piscar em um
intervalo de 500ms acionado por uma rotina de interrupção (ISR).
2. Botão e LED: Um LED deve alternar o seu estado a cada 50ms, e ao pressionar
um botão, um segundo LED deverá acender ao pressionar o botão.
3. Projeto um semáforo para uma avenida de mão dupla, com um semáforo em cada uma
das vias, e inclua um farol de pedestre e um botão, que será pressionado pelos pedestres
para solicitar a travessia da rua. Ambos os semáforos presentes na via devem estar
sempre no mesmo estado. O Arduino reagirá quando o botão for pressionado através de
uma ISR, alterando o estado das luzes para que os carros parem e os pedestres possam
atravessar.
105