MICROCONTROLADORES
Yuri Ferreira de Sousa
contato 719 96396014
Ementa
 Magnetismo e Eletromagnetismo
 Fundamentos de Eletricidade
 Condutores & isolantes
 Semicondutores
É uma forma de energia
associadas aos fenômenos
causados por cargas elétricas, em
repouso (eletrostática) e em
movimento (eletrodinâmica).
Na natureza nada se perde e nada se
cria tudo se transforma
Existem várias fontes de energia
Origem da eletricidade
 A eletricidade tem origem nas cargas elétricas, que são propriedades de
partículas subatômicas, como os prótons e elétrons. Essas duas partículas
apresentam a mesma quantidade de carga elétrica, cerca de 1,6.10-19 C,
entretanto, possuem sinais opostos.
Uma vez que não é possível que existam frações de prótons ou elétrons
no interior dos átomos, dizemos que a carga elétrica é uma
propriedade discreta ou quantizada, já que toda a carga elétrica
presente em um corpo eletrizado é igual a um múltiplo inteiro da carga
elétrica fundamental, assim como mostramos na expressão a seguir:
Q – carga elétrica
n – número de elétrons em falta ou excesso
e – carga fundamental
 Portanto, o átomo é formado por:
 Elétron:
 É a menor partícula encontrada na natureza,
com carga negativa. Os elétrons estão sempre
em movimento em suas órbitas ao redor do
núcleo.
 Próton:
 É a menor partícula encontrada na natureza,
com carga positiva. Situa-se no núcleo do
átomo.
 Nêutron:
 São partículas eletricamente neutras, ficando
também situadas no núcleo do átomo,
juntamente com os prótons.
Átomos com Menos Elétrons Possui
• Mais Camadas
• A Força de atração
exercida pelo núcleo é
menor
• Os elétrons da última
camada ficam mais
livres
• Mais instável
eletricamente
• Melhor condutor
ÁTOMO DE COBRE
ÁTOMO DE COBRE
Átomos com Menos Elétrons Possui
• Menos Camadas
• A Força de Atração
Exercida pelo
Núcleo é Maior
• Menos Elétrons
Livres
• Mais Estável
Eletricamente
• Melhor Isolante
ÁTOMO DE SELÊNIO
( Mica )
Materiais
Observação:
Semicondutores são materiais que não sendo bons
condutores, não são tampouco bons isolantes.
O germânio e o silício são substâncias semicondutoras. Esses
materiais, devido às suas estruturas cristalinas, podem sob
certas condições, se comportar como condutores e sob
outras como isolantes.
Unidades Medidas Elétricas
Tesão elétrica
Tensões elétricas continua
Tensões elétricas alternada
Tensão Elétrica - é a pressão exercida sobre os
elétrons livres para que estes se movimentem no
interior de um condutor.
Para que eles se movimentem, é necessário termos
uma pressão elétrica.
Simbolizada por E (para os geradores ) e U (para
os circuitos).
Às vezes a tensão é simbolizada por V.
Tensão Elétrica
Tensão Elétrica
 Símbolo – V (intensidade de tensão elétrica)
 Unidade - Volt (V)
 Exemplo: = 3 Volts
 V = 3V
Múltiplos e submúltiplos
V
KV
MV
GV
nV
V
mV
Para subir um degrau
divida por 1000
Para descer um degrau
multiplica por 1000
Tensão Elétrica
Corrente Elétrica
O Coulomb não é, porém, uma unidade muito
prática. Então, para se poder realmente medir e
comparar a corrente elétrica, houve a
necessidade de se medir a intensidade da
corrente em relação ao tempo.
Portanto, criou-se uma unidade prática, o
ampère, que é representado pela letra ( A ) e
equivale a 1 Coulomb por segundo.
Símbolo - I (intensidade de corrente elétrica)
Unidade - ampère (A )
Exemplo:
I = 3 ampères
I = 3A 3
coulomb/seg
Corrente Elétrica
Múltiplos e submúltiplos
A
kA
MA
GA
nA
A
mA
Para subir um degrau
divida por 1000
Para descer um degrau
multiplica por 1000
Resistencia elétrica
Resistência Elétrica
Resistência elétrica: É a oposição a passagem da corrente.
No geral, os materiais variam de ”comportamento elétrico”,
conforme sua estrutura atômica. apresentando-se como
condutores e outros como isolantes.
Os materiais isolantes são os de maior resistência elétrica, ou
seja: os que mais se opõem à passagem da corrente elétrica.
Os materiais condutores, apesar de sua boa condutividade
elétrica, também oferecem resistência à passagem da
corrente, embora em escala bem menor.
Resistência Elétrica
Resistência elétrica: É a oposição a passagem
da corrente.
1 OHM: É a resistência que permite a
passagem de 1 AMPÈRE quando submetida a
tensão de 1 VOLT
Símbolo - R
Símbolo - R
Unidade - OHM ()
Unidade - OHM ()
Resistência Elétrica
Múltiplos e submúltiplos
Ω
KΩ
MΩ
GΩ
nΩ
Ω
mΩ
Para subir um degrau
divida por 1000
Para descer um degrau
multiplica por 1000
Lei de Ohm
George
Simon Ohm
Lei de Ohm
As Leis de Ohm, criadas pelo físico Gergor
Simon Ohn em 1827, mostram a resistência
elétrica dos condutores. Ela permite calcular
grandezas como: tensão, corrente e resistência
elétrica dos elementos presentes em um
circuito.
Potencia elétrica
Potência Elétrica
Capacidade de
produzir trabalho
de 100 W
Se for ligada a uma
fonte de 127 V
Potência da Lâmpada
Capacidade de
produzir trabalho
de 100 W
Se for ligada a uma
fonte de 220 V
Potência Elétrica
A potência depende de outras
grandezas
• R - Resistência
• V - Tensão
• I – Corrente
• Aplicando a tensão V na resistência
R circula a corrente I
Assim temos:
P = V x I
Circuito Elétrico
É um caminho fechado por condutores
elétricos ligando uma carga elétrica a
uma fonte geradora.
Associação de Resistores
Circuitos elétricos complexos na prática nada mais são
que simples associações de dois tipos de circuitos
fundamentais:
Circuito em Série.
Circuito Paralelo
GERA
DOR
Orienta o movimento
dos elétrons
CONDU
TOR
Assegura a transmissão
da corrente elétrica.
CARGA
Utiliza a corrente elétrica
(transforma em trabalho)
Semicondutores
 Os semicondutores são essenciais para
eletrônicos modernos, como transistores,
diodos, circuitos integrados, chips, placas
fotovoltaicas, LEDs e muito mais.
Resistores
 Resistor e um componente
elétrico passivo com a função
primaria de regular e4 limitar o
fluxo da corrente elétrica em um
circuito.
No exemplo abaixo, temos:
primeira faixa: vermelha – 2
segundo faixa: preta – 0
terceira faixa: vermelha – x100 (dois
zeros)
quarta faixa: ouro – 5%
Valor do resistor: 2000 Ω com
tolerância de 5%
Associação em Série
 Vamos nos fixar em três resistores apenas. Dizemos
que a associação é em série, quando pelos resistores
passa a mesma corrente.
A tensão total entre os pontos A e B do
circuito é Vt.
A resistência equivalente é uma única
resistência R que submetida à mesma
tensão Vt, é percorrida pela mesma
corrente i que percorre a associação.
A relação entre a tensão total Vt e as
tensões em cada resistência é:
VT = V1 + V2+ V3
Veq =VT
Resistência Equivalente em Série
 Pela Lei de Ohm, teremos que: R1I + R2I + R3I + R4I +R5I
= ReqI = V, ou seja, (R1 + R2 + R3 + R4 +R5)I = ReqI.
 Pela equação, deduz-se que a resistência equivalente é
igual ao somatório das resistências, ou seja:
Req = R1 + R2 + R3 + R4 +R5.
 Pode-se concluir que: a resistência total (ou equivalente)
de uma associação de resistores em série é igual à soma
dos resistores que constituem a associação série.
se ao passar por eles. Nesse tipo de
associação, a resistência elétrica
equivalente será sempre menor do
que a menor das resistências
Na Associação em paralelo, os
resistores são submetidos a mesma
tensão
Resistencia Equivalente
em Paralelo
Generalizando, o inverso da resistência total
(equivalente) de uma associação em paralelo é
igual à soma dos inversos das resistências que
compõem a associação paralela.
É importante atentarmos para algumas
observações.
1. Se no circuito tivermos apenas dois
resistores em paralelo, a resistência
equivalente será dada pelo produto das
resistências dividido pela sua soma.
2. Se as duas resistências forem iguais, as
correntes sobre elas serão iguais à metade
da corrente total.
RESUMO DE FÓRMULAS
Re
1
R1
1
R2
1
R3
1
Rn
1
CIRCUITO SÉRIE
CIRCUITO PARALELO
= + + +...
Re
= R1+ R2
+ Rn
R3+...
 Internamente todos os dispositivos
digitais conversam em BASE 2, ou seja
sequencias de 0 e 1:
 Ex:0001111010101
 Como seria por exemplo 5 em base 2?
 5 = 0101
 Esses ENDEREÇOS DE MEMÓRIA devem
ter TAMANHOS DETERMINADOS:
 (BIT/BOOL), (BYTE/SINT), (WORD/INT),
(DWORD/DINT), REAL
 Introdução aos MICROCONTROLADORES
 Os microcontroladores são circuitos
integrados que possuem internamente
todos os componentes necessário para
seu funcionamento, dependendo apenas
de uma fonte de alimentação externa.
Esta é a principal diferença entre um
microcontrolador e um microprocessador,
no qual para o funcionamento é
necessário a integração com componentes
externos
Estrutura microcontrolador
 A velocidade de processamento, a quantidade
de memória e os tipos de periféricos de um
microcontrolador variam de modelo para
modelo e também entre fabricantes, pois
cada microcontrolador é desenvolvido para
um tipo de aplicação. Uma das principais
características dos microcontroladores é sua
versatlidade, pois uma vez que o controlador
depende do software gravado nele, pode ser
utilizado para uma infinidade de aplicações
bastando apenas mudar o seu software.
 Outra vantagem é a possibilidade de
atualização de um produto através da
atualização do software do microcontrolador,
o que não é possível de obter com circuios
analógicos ou digitais tradicionais.
Aplicações de Microcontroladores
Os microcontroladores são utilizados e diversos
dispositivos eletrônicos que utilizamos no
cotidiano, como por exemplo, dispositivos de
computadores, centrais de alarmes, telefones,
televisores, automóveis, aviões, impressoras
relógios etc.
No meio industrial os microcontroladores são
amplamente utilizados, como por exemplo nos
controladores de processos, sebsores
inteligentes, inversores de frequência,
softstartes, sistemas de inteface humana
máquinas entre outros.
Devido a sua versatilidade e ao seu baixo
custo, qualquer dispositivo eletrônico pode
fazer uso de microcontroladores.
Registradores
Os registradores são a base para o
funcionamento de qualquer CPU, e é
formado por um grupo de elementos
capazes de armazenar uma informação, e
que funcionam juntos como uma unidade.
Os registradores mais simples armazenam
uma palavra binária que pode ter “n” bits.
Memórias
Memórias são dispositivos utilizados para armazenar palavras
binárias na ordem de centenas de milhares. Podem-se utilizar flip-
flop’s para o armazenamento em memórias ou outro dispositivo
qualquer que sirva para este fim. Os circuitos de memória
normalmente têm as seguintes entradas e saídas:
• Algumas vias de entrada para gravação e/ou saídas para leitura
(que fisicamente podem ser as mesmas);
• Algumas vias para endereçamento, que selecionará qual
registrador será lido/escrito, de acordo com um código (endereço
de memória);
• Um pino que habilita o circuito (Chip Select - CS). Se o circuito
não estiver habilitado, as saídas permanecem em alta impedância;
• Um pino de leitura/escrita, que habilita uma destas duas
operações ou apenas leitura, dependendo do tipo de memória.
Memória RAM
A memória RAM é uma memória de leitura
e escrita, isto é, que pode ser gravada com
um determinado valor e este valor pode ser
posteriormente lido.
Além disso, podemos acessar qualquer
registrador desejado aleatoriamente para
ler ouescrever uma palavra. A memória
RAM comum necessita de alimentação
elétrica para manter a integridade de seus
dados. É por este motivo, pertencente ao
grupo de memórias voláteis.
Memória RAM
Quanto à sua construção, as memórias RAM podem ser
de dois tipos básicos: estática ou dinâmica.
Na memória RAM estática, os bits são armazenados em
flip-flop’s individuais e permanecem armazenados
indefinidamente enquanto o circuito possuir
alimentação.
A memória RAM dinâmica armazena os bits através de
carga em diminutos capacitores.Como um capacitor
deste tipo ocupa muito menos espaço que um flip-flop
em um CI, a memória dinâmica resultante é bem mais
compacta que a estática. Em compensação, o bit em
um capacitor permanece íntegro por apenas uma fração
de tempo (aprox. 2 ms), devido às fugas de corrente.
Para contornar este problema este tipo de memória
deve ter um circuito auxiliar que verifique
temporariamente os capacitores e os recarregue se for
necessário. Esta operação é denominada refresh.
Memória RAM
A maioria das memórias tem saídas em coletor aberto
ou terceiro estado para permitir a ligação em paralelo e
consequentemente melhorar a capacidade de manuseio
de dados. Assim, quando o “Chip Select” não estiver
ativo, o componente ficará em estado de alta
impedância, e não se pode nem escrever na memória
nem ler os seus conteúdos. Isto significa que a
memória estará desconectada dos demais componentes
do circuito.
A operação de gravação ou escrita é feita colocando-se
os dados nas vias de entrada, colocando-se os sinais de
endereço na posição desejada, habilitando a escrita da
memória e finalmente habilitando-se o chip. Deste
modo os dados das vias de entrada serão escritos na
posição selecionada. Do mesmo modo, a operação de
leitura é feita colocando-se os sinais de endereço na
posição desejada, habilitando a leitura da memória e
finalmente habilitando-se o chip
Memória ROM
Uma memória ROM (do inglês : Read Only
Memory) é um tipo de memória no qual podemos
ler, mas não escrever. Os conteúdos são fixos e
inalterados, sendo estabelecidos na hora da
fabricação. Em uma ROM, os conteúdos não
precisam ser alterados. Portanto não necessitamos
de flip-flop’s ou dispositivos semelhantes. Uma
ROM na verdade nada mais é do que um conversor
de código e pode ser construído a partir de
dispositivos mais simples e baratos que as portas
normalmente utilizadas.
Memórias programáveis e apagáveis
Na EPROM, os dados são armazenados em dispositivos
baseados em MOSFET’s. Estes dispositivos fazem ou não a
conexão (guardam bit “um” ou “zero”) conforme haja ou não
carga elétrica na porta do transistor. A programação é feita
através de um programador de EPROM’s. Uma característica
importante é a de que a exposição à luz ultravioleta forte
(por aproximadamente 30 min.) permite a fuga das cargas,
apagando a memória. O apagamento possibilita uma nova
programação (gravação).
Já nas memórias EEPROM e FLASH o processo para apagar
pode ser feito eletricamente, facilitando muito assim o
processo de alteração das informações armazenadas.
Apesar de estas memórias serem graváveis e apagáveis elas
não são iguais as memórias RAM, pois as informações não
são perdidas quando a energia é desligada. Outra
característica que difere este tipo de memórias das memórias
RAM é que o tempo gasto para armazenar a informação
nestas que é muito maior, e o numero de gravações que se
pode fazer que é limitado
ARQUITETURA DE MICROCONTROLADORES
Os microprocessadores são o coração de
um microcontrolador, assim para
compreendermos o funcionamento de um
microcontrolador é necessário primeiro
compreender o funcionamento de um
microprocessador.
Embora todos os microprocessadores
tenham suas peculiaridades, a maioria
deles possui grande semelhança quanto a
seu modo geral de funcionamento.
Registradores de propósito geral
São registradores nomeados de Reg. A até
Reg. D. O número destes registradores
varia de um microprocessador para outro.
Por exemplo, no AVR, são 32 registradores
de 8 bits, no Z80, são 16 de 8 bits, no
8051 são 8 de 8 bits. A função destes
registradores é armazenar os dados que
estão sendo processados pelo
microprocessador.
Unidade Lógica Aritimética
Essa unidade é o centro do
microprocessador, ela possui somador,
subtrator (em alguns, multiplicador e
divisor), operadores AND, OR e XOR bit a
bit, incrementador e decrementador, tudo
integrado em uma única unidade. Portanto,
todas as operações lógicas e aritméticas
passam obrigatoriamente por esta unidade.
Registrador temporário
 Serve apenas para armazenar
temporariamente um dos operadores da
ULA
Acumulador
Trata-se de um registrador especial
dedicado às operações envolvendo a ULA.
Esse registrador é um dos operandos
envolvidos nas operações da ULA e também
é o registrador que Recebe o resultado das
operação. Assim como os registradores de
propósito geral, admite transferência
bidirecional.
Program counter (PC)
É nesse registrador que o microprocessador
guarda o endereço de memória que aponta
para a instrução do programa que esta sendo
executada. O microprocessador usa esse
conteúdo para informar à memória o endereço
onde está a instrução, faz a leitura desta
instrução e guarda a instrução lida no
REGISTRADOR DE INSTRUÇÃO. Logo após ter
lido a instrução o conteúdo do registrador PC é
automaticamente incrementado para que o
microprocessador possa ler a próxima
instrução.
Registrador de instrução
É nesse registrador que o microprocessador
guarda a instrução lida da memória para
que possa ser decodificada e executada.
Decodificador de instrução e Unidade de controle
Quando uma instrução é lida da memória, ela não passa de
um byte qualquer. Como saber qual a instrução que
corresponde a esse byte e como tomar as devidas
providências (micro instruções) para fazer o que a instrução
está mandando? Cada registrador do microprocessador
precisa ser comandado pelos seus sinais de controle,
não só os registradores, mas todo o sistema precisa ser
comandado pelos sinais de controle para que todo o sistema
possa funcionar. Esses sinais de controle precisam obedecer
a uma sequência adequada para que não ocorram conflitos. A
instrução lida passa por uma unidade com um número
imenso de portas lógicas que geram os sinais de controle de
todo o sistema. Pode-se dizer que esta unidade é realmente
o cérebro de todo o sistema.
Unidade de deslocamento
A unidade de deslocamento contém um
registrador de deslocamento série
bidirecional e é capaz de realizar um
deslocamento dos bits à esquerda ou à
direita ou então não realizar deslocamento
nenhum.
Arquitetura de HAVARD e VON NEUMAN
As arquiteturas Harvard e Von Neumann dizem respeito
à forma como a memória é conectada ao
microprocessador. Na arquitetura Harvard, há dois
barramentos de endereços independentes e dois de
dados também independentes. Enquanto um desses
barramentos serve para a leitura de instruções de um
programa, o outro serve para a leitura e escrita de
dados. Com isso, é possível operar simultaneamente
uma instrução e um byte de dados. Isso garante maior
velocidade de processamento. Atualmente, os
processadores de sinais digitais (DSP – digital signal
processor) utilizam essa arquitetura. DSP’s são
processadores especializados no processamento dos
sinais em tempo real.
Já na arquitetura Von Neumann, há apenas
um barramento de dados e endereços. Neste
caso, as instruções estariam em uma faixa de
endereços que ative a memória que possui as
instruções e os dados estão em outra faixa de
endereços que ative outra memória onde se
pode ler e escrever os dados.
Comparando ambas, conclui-se que Harvard é mais veloz,
mas exige mais um barramento. Assim o custo de produção
das placas que utilizam este tipo de processadores é maior.
Von Neumann utiliza apenas um barramento, mas não pode
efetuar acessos simultâneos às memórias. Assim seu custo
de produção é menor, porem seu desempenho também é
menor.
Como exemplos podemos citar o computador pessoal que
utiliza a arquitetura Von Neumann e os microcontroladores
AVR que utilizam a arquitetura Harward.
A arquitetura Harward é bastante utilizada nos
microcontroladores pelo fato das memórias estarem
integradas no próprio componente, o que não acarreta em
placas de circuito complexas com várias trilhas de
endereçamento e dados.
Sinais de controle
Para que o microprocessador possa se comunicar com as
memórias são necessários alguns sinais de controle:
• Endereços: Esse conjunto de sinais serve para localizar
a informação dentro da memória.
• Dados: Trata-se normalmente de 8 bits que conduzirão
o byte lido da memória para o microprocessador ou do
microprocessador para a memória.
• RD (Read): Sinal enviado pelo microprocessador
requisitando que a memória coloque no barramento de
dados o byte previamente endereçado. O
microprocessador lê esse byte e logo após desativa o
sinal RD.
• WR (write): Sinal enviado pelo microprocessador
requisitando que a memória armazene o byte presente
no barramento de dados no endereço presente no
barramento de endereços. (o byte e o endereço já devem
estar preparados antes da ativação deste sinal).
Introdução ao Arduino
Arduino é um projeto que engloba software e hardware
e tem como objetivo fornecer uma plataforma fácil para
prototipação de projetos interativos, utilizando um
microcontrolador. Ele faz parte do que chamamos de
computação física: área da computação em que o
software interage diretamente com o hardware,
tornando possível integração fácil com sensores,
motores e outros dispositivos eletrônicos.
A parte de hardware do projeto, uma placa que cabe na
palma da mão, é um computador como qualquer outro:
possui microprocessador, memória RAM, memória flash
(para guardar o software), temporizadores, contadores,
dentre outras funcionalidades.
Como qualquer computador, o Arduino
precisa de um software para executar
comandos. Esse software será desenvolvido
na Arduino IDE em nosso PC, utilizando a
linguagem C++. Após escrever o código, o
compilaremos e então faremos o envio da
versão compilada à memória flash do
Arduino, através da porta USB. A partir do
momento que o software é gravado no
Arduino não precisamos mais do PC: o
Arduino, como é um computador
independente, conseguirá sozinho executar
o software que criamos, desde que seja
ligado a uma fonte de energia.
Alimentação do arduino
Internamente, o circuito do Arduino é alimentado
com uma tensão de 5V. Quando ligamos o Arduino
em uma porta USB do PC, o próprio PC, através do
cabo USB, alimenta o Arduino. Porém nem sempre
temos um PC por perto; para esses casos,
podemos utilizar uma outra fonte de energia de 5V
(a fonte deve ser ligada diretamente nos pinos 5V
e GND do Arduino).
O Arduino possui um regulador de tensão que
aceita tensões de 7 a 12V. Com o regulador de
tensão podemos combinar pilhas em série, utilizar
uma bateria de 9V ou mesmo baterias de carros,
motos e no-breaks (12V).
Biblioteca e shields
Assim como a IDE já vem com diversas funções pré-definidas, o
Arduino possui outras bibliotecas para controle de servomotores,
displays LCD, geração de áudio, recepção de sinais de sensores e
outros dispositivos. A estensibilidade do Arduino não se restringe à
parte de software: o Arduino possui o que chamamos de shields,
que são placas que se acoplam a placa original, agregando
funcionalidades a mesma.
Existem shields dos mais variados tipos, para as mais diversas
funções. Alguns servem como entrada, outros como saída, e ainda
outros como entrada e saída. Com os shields conseguimos, por
exemplo, fazer o Arduino se comunicar numa rede Ethernet, ou
ainda transmitir dados para qualquer dispositivo via Bluetooth, Wi-
Fi ou Zigbee. Existem shields com circuitos integrados prontos para
controlarmos motores sem que precisemos nos preocupar com
complicações eletrônicas envolvidas, outros possuem leitor de
cartão SD, acelerômetro, GPS e diversos outros sensores que
podem gerar dados importantes para o software que está rodando
no microcontrolador.
Integração com o PC
Apesar de o Arduino ser um computador
independente, em alguns casos podemos nos
aproveitar de um PC por perto e explorar outra
funcionalidade muito boa do projeto: o Arduino
consegue conversar com o computador através
da porta USB. Isso nos permite desenvolver um
software que roda no PC e se comunica com o
software que roda no Arduino.
Existem inúmeros projetos interessantes que
fazem interface entre linguagens de
programação e o Arduino – existem
implementações para Python, Ruby, Java, C,
dentre outras linguagens. Além do software que
é executado no PC recebere dados, ele pode
também enviar dados, controlando o arduino.
Portas Digitais e Analógicas
O Arduino possui dois tipos de portas de entrada: analógicas e
digitais. Além disso, as portas digitais também servem como
portas de saída, funcionando com dois tipos básicos de saída:
saída digital comum e saída PWM – o PWM pode ser utilizado
para simular uma saída analógica, dentre outras coisas.
Utilizamos as portas digitais quando precisamos trabalhar com
valores bem definidos de tensão. Geralmente trabalhamos
com valores digitais binários, ou seja, projetamos sistemas
que utilizam apenas dois valores bem definidos de tensão.
Existem sistemas ternários, quaternários, mas focaremos no
binário, já que é esse o utilizado pelo Arduino.
Como o sistema é binário, temos que ter apenas duas tensões.
São elas: 0V e 5V. Dessa forma, as portas digitais do Arduino
podem trabalhar apenas com essas duas tensões – e o
software que desenvolveremos poderá requisitar ao
microcontrolador do Arduino que:
• Coloque uma determinada porta em 0V;
• Coloque uma determinada porta em 5V;
• Leia o valor de uma determinada porta (terá 0V ou 5V como
resposta).
Apesar de ser possível, não é recomendável utilizar as
portas 0 e 1 pois elas estão diretamente ligadas ao
sistema de comunicação do Arduino (pinos RX e TX –
recepçãoo e transmissãoo, respectivamente) e, por
isso, seu uso pode conflitar com o upload do software.
Caso queira utilizá-las, certifique-se de desconectar
quaisquer circuitos conectados a ela no momento do
upload.
PWM significa Modulação por Largura de Pulso (Pulse-
Width Modulation, do Inglês) e consiste em
manipularmos a razão cíclica de um sinal (conhecida do
Inglês como duty cycle) a fim de transportar
informação ou controlar a potência de algum outro
circuito. Basicamente, teremos um sinal digital que
oscila entre 0V e 5V com determinada frequência (o
Arduino trabalha com um padrão perto de 500Hz) –
funciona como se fosse um clock, porém os tempos em
que o sinal permanece em 0V e 5V podem ser
diferentes. Duty cycle é a razão do tempo em que o
sinal permanece em 5V sobre o tempo total de uma
oscilação.
O que controlamos através de software é justamente a
duty cycle, ou seja, o percentual de tempo em que o
sinal fica em 5V. Dessa forma, podemos utilizar essa
técnica para limitar a potência de algum circuito. Por
exemplo, considere que um LED L1 seja alimentado o
tempo inteiro por um sinal constante de 5V; já o LED L2
é alimentado pelo sinal PWM acima (duty cycle de
25%). Através de um cálculo simples
de potência podemos notar que o LED L2 consumir a
apenas 25% da potência do primeiro.
Além das portas digitais o Arduino possui as portas
analógicas. Ao contrário das portas digitais, as portas
analógicas são apenas de entrada e nelas podemos ter
como entrada infinitos valores de tensão (delimitados
na faixa de 0V a 5V). Como os conversores analógico-
digitais (ADC – analog-digital converter, do Inglês) do
Arduino possuem 10 bits de precisão, a precisão das
medições de tensão no Arduino é de por volta de
0,005V ou 5mV.
Estrutura
setup ()
A função setup() é chamada quando um programa começa a
rodar. É usada para inicializar as variáveis, os tipo dos pinos,
declarar o uso de bibliotecas, entre outros. Esta função será
executada apenas uma vez após a placa Arduino ser ligada ou
reiniciada.
Exemplo:
int buttonPin = 3;
void setup(){
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}
void loop(){
// ...
}
loop ()
Após criar uma função setup() que declara
os valores iniciais, a função loop() faz
exatamente o que seu nome sugere, entra
em looping (executa sempre o mesmo
bloco de código), permitindo ao seu
programa fazer mudanças e responder.
Esta função é usada para controlar
ativamente a placa Arduino.
Exemplo:
int buttonPin = 3;
// setup inicializa o serial e o pino do button (botão)
void setup(){
beginSerial(9600);
pinMode(buttonPin, INPUT);
}
// loop checa o botão a cada vez,
// e envia o serial se ele for pressionado
void loop(){
if (digitalRead(buttonPin) == HIGH){
serialWrite('H');
}
else{
serialWrite('L');
}
delay(1000);
}
Estrutura de controle
if e operadores de comparação
Essa estrutura, que é usada em conjunto
com um operador de comparação, testa
alguma condição imposta pelo
programador. Para testar se o valor de uma
variável é maior do que 100 por exemplo,
if (variavel > 100){
// faça algo aqui
}
O programa testa se variavel é maior do
que 100. Se for, o programa executa a ação
seguinte. Caso contrário, o programa
ignora a ação dentro das chaves e segue a
rotina. Caso a ação tenha apenas uma
linha, as chaves podem ser omitidas.
20
Para fazer as comparações, é necessária a
utlilização dos operadores que podem ser
visto a seguir:
if / else
A estrutura if/else fornece um controle maior sobre o código
do que simplesmente o if, permitindo múltiplos testes
agrupados. Por exemplo, uma entrada analógica poderia se
testada e uma ação executada caso o valor fosse menor do
que 500. Caso seja maior ou igual a 500, executaria a
segunda ação.
if (x < 500){
// ação A
}
else{
// ação B
}
Também é possível colocar uma condição logo
após do else. Não há limites de condições a
serem colocadas.
if (x< 500){
// ação A
}
21
else if (x>= 1000){
// ação B
}
else {
// ação C
}
switch / case
Como a estrutura if, switch...case controla os
programas permitindo os programadores
especificar diferentes código que poderão ser
executados em diferentes condições. Em
particular, a estrutura do switch compara o
valor da variável com o valor em cada caso
específico. Quando o caso é encontrado, ou
seja, o valor é o da variável, a ação
correspondente é executada.
A palavra reservada break interrompe o switch,
e é típicamente usado no final de cada case.
Sem o break, a estrutura do switch irá ser
executada até encontrar uma interrupção, ou o
final das comparações.
Exemplo:
switch (var) {
case 1:
//faça algo quando var equivale a 1
case 2:
//faça algo quando var equivale a 1
break;
default:
// se nenhuma comparação for verdadeira, faz-se o padrão
// o padrão pode ou não, existir
}
For
For é chamada de estrutura de laço, pois cada bloco de
programa se repete uma determinada quantidade de vezes.
Um contador é normalmente usado para terminar e dar ritmo
ao loop. É útil para qualquer operação que se repita. Uma
aplicação comum é operações com vetores.
for (inicialização; condição; incremento) {
//ação;
}
A inicialização começa pela primeira e única vez. Cada vez que
iniciará um novo loop, a condição é testada. Se for verdadeira,
a ação é executada e a variável de passo incrementada.
Quando a condição se tornar falsa, o loop termina.
While
O laço do while acontece infinitamente até
que a expressão dentro dos parênteses se
torne falsa. Algo deve ser modificado ao
testar a variável para o término do loop,
caso contrário ele nunca terminará.
while(expressão){
// ação
}
Parâmetros:
expressão - A estrutura (booleana)de C que
verifica se é verdadeiro ou falso.
Exemplo:
var = 0;
while(var < 200){
// faça algo duzentas vezes
var++;
}
do-while
Muito parecido com o while, o do-while
possui a diferença que sua condição é
testada ao final do loop, assim executando a
ação garantidamente uma vez.
do{
// bloco de ações
}
while (teste de condição);
Exemplo:
do{
delay(50); // esperar sensores
Estabilizarem
x = readSensors(); // leitura de sensores.
fará 100 leituras
} while (x < 100);
break
Interrompe alguma condição de loop. Também é
usado na estrutura de switch.
Exemplo:
for (x = 0; x < 255; x ++){
digitalWrite(PWMpin, x);
sens = analogRead(sensorPin);
if (sens > threshold){
x = 0;
break;
}
delay(50);
}
continue
Ignora o resto da iteração atual de um loop. continue
continua marcando a expressão condicional do loop, e
prossegue com as iterações subsequentes
Exemplo:
for (x = 0; x < 255; x ++){
if (x > 40 && x < 120){
continue;
}
digitalWrite(PWMpin, x);
delay(50);
}
return
Termina a função e retorna um valor de uma função para a
função de chamada.
return;
return valor; // ambas as formas são válidas
Exemplo:
int checkSensor(){
if (analogRead(0) > 400) {
return 1;
}
else{
return 0;
}
}
Elementos de Sintaxe
; - ponto e vírgula
Usado ao terminar uma linha
Exemplo:
int a = 13;
Terminar uma linha sem o ponto e vírgula
resultará em um erro de compilação. Uma
das primeiras coisas a se verificar quando
há algum erro sem razão, é um ponto e
vírgula esquecido, que precede a linha em
que o compilador reclamou.
{} – Chaves
As chaves são largamente usadas na programação em C. Possuem diversas
aplicações, descritas abaixo, que podem causar confusão em iniciantes.
Toda chave de abertura ({) deve ser fechada (}). Essa é a condição que se
refere às chaves estarem balanceadas. A IDE (Integrated Development
Enviroment, em inglês) do Arduino inclui um artifício que confere se as
chaves estão devidamente balanceadas. Para isso, deve-se apenas selecionar
uma chave que a correspondente irá ser destacada.
Atualmente, esse artifício possui um pequeno bug onde ele também destaca
(incorretamente) as chaves que estão comentadas. Programadores iniciantes
e programadores que habituados com BASIC normalmente encontram
dificuldades com o uso de chaves. Não obstante, as chaves substituem a
instrução RETURN em uma subrotina (função), a estrutura ENDIF por uma
condicional e a instrução Next por um loop for.
Por conta do uso das chaves ser bem variado, uma dica para praticar é
imediatamente após se abrir uma chave é fechá-la. Chaves desbalanceadas
causam muitos erros de compilação. Muitas vezes fica complicado encontrar
o erro de sintaxe em um código de muitas linhas. Por conta de seu largo uso,
as chaves são muito importantes para a sintaxe do programa. Movendo uma
ou duas linhas de lugar, o sentido do código pode-se alterar drasticamente.
Funções
void minhafunção(parâmetro){
ações
}
Loops
while (expressão booleana) { ações
}
27
do {
ações
} while (expressão booleana);
for (incialização; condição de término; expressão de incremento) {
ações
}
Estruturas condicionais
if (expressão booleana) {
ações
}
else if (expressão booleana) {
ações
}
else {
ações
}
// e / - Comentários
Comentários são linhas de programa que
são usadas para informar o próprio
programador ou outra pessoa que venha a
usar o código como o programa funciona.
Essas linhas são ignoradas pelo compilador
e nem são enviadas para o processador,
logo, não ocupam espaço no chip do
Atmega. Comentários possuem o propósito
de
ajudar o programador a entender (ou
lembrar) como o programa funciona ou
para informar a outros. Existem duas
formas diferentes de comentar:
x = 5; // Essa é uma linha simples de
comentário.
// Tudo escrito aqui não será considerado
// outra linha de comentário
/* a barra seguida do asterisco indica um
bloco de comentário. até um asterisco
seguido de barra, nada será considerado.
define
define permite ao programador nomear um valor de
uma constante antes do programa ser compilado.
Constantes nomedadas por define não usam
memória do chip. O compilador irá fazer referências
para essas constantes com o valor de nido no
momento da compilação.
Isso pode causar alguns efeitos indesejáveis como o
nome definido por define ser incluído em outra
constante ou nome de variável.Nesse caso o texto
deverá ser trocado pelo número ou texto que se
usou o define.
Em geral, a palavra reservada const é melhor para
se de nir constantes do que o define.
Exemplo:
#define ledPin 3 // O compilador irá trocar ledPin por
3 no momento de compilar.
Include
#include é usado para incluir bibliotecas.
Possibilita ao programador usar um largo
grupo de funções pré-definidas. Existem
bibliotecas escritas especi camente para
Arduino.
Note que o include é similar ao define, não
há ponto e vírgula para terminar a linha,
causando assim um erro de sintaxe caso
seja colocado.
Exemplo:
#include <servo.H>
Operadores
Operadores
Operadores
Variáveis
true | false
false
false é definida como 0 (zero).
true
true é normalmente definida como 1, o que
está certo, apesar de possuir uma definição
mais larga. Qualquer inteiro diferente de
zero é true, no pensamento Booleano.
Então, pode-se chegar a conclusão que -1,
2 e -200 são todos definidos como true
também.
Repare que diferentemente das palavras
reservadas HIGH, LOW, INPUT e OUTPUT,
true e false são escritas em letras
minúsculas.
HIGH | LOW
No momento que se for ler ou escrever em
um pino digital, há apenas dois valores que
o pino pode assumir: HIGH ou LOW.
HIGH
Em relação aos pinos, o significado de HIGH é diferente
dependendo de qual modo o pino for colocado, se INPUT ou
OUTPUT. Quando o pino é configurado como INPUT com a
função pinMode e lido com a função digitalRead, o
microcontrolador irá considerar como HIGH se a tensão for
maior ou igual a 3 volts no pino.
Também é o possível configurar com pinMode o pino como
INPUT e, posteriormente, com a leitura do digitalWrite como
HIGH definirá os 20K resistores pull-up internos que
orientarão o pino de entrada para o valor de HIGH exceto no
caso que for puxado para LOW pelo circuito externo. É dessa
forma que a função INPUT_PULLUP funciona.
Quando um pino é configurado como OUTPUT com pinMode,
e definido como HIGH com digitalWrite, o pino está com 5
volts. Neste estado, é possível fornecer corrente, por
exemplo, acender um LED que está conectado através de um
resistor em série para o terra ou para o outro pino
configurado como OUTPUT, e definido como LOW.
LOW
O significado de LOW também difere
dependendo de como o pino foi definido.
Quando configurado como INPUT com
pinMode, e lido com digitalRead, o
microcontrolador irá considerar como HIGH se
a tensão for menor ou igual a 2 volts no pino.
Quando um pino é configurado como OUTPUT
com pinMode, e definido como LOW com
digitalWrite, o pino está com 0 volts. Neste
estado, é possível reduzir corrente, por
exemplo, acender um LED que está conectado
através de um resistor em série para Vcc, ou
para o outro pino configurado como OUTPUT, e
definido como HIGH.
INPUT | OUTPUT | INPUT PULLUP
Pinos digitais podem ser usados como
INPUT, INPUT_PULLUP, ou OUTPUT.
Modificar o pino com pinMode() singnifica
modificar o comportamento elétrico do
pino.
Pinos configurados como INPUT
Os pinos do Arduino definidos como INPUT
com pinMode() estão em estado de
altaimpedância. Pinos configurados como
INPUT possuem capacidade apenas para
executar ações de pequeno porte.
Equivalem a uma resistência em série de
100MΩ na frente do pino. Isso os torna
úteis para a leitura de um sensor, mas não
alimentar um LED.
Pinos configurados como INPUT
PULLUP
O chip interno Atmega do Arduino possui
resistores do tipo pull-up internos que
podem ser acessados. Caso seja
necessários usar esses resistores ao invés
de resistores externos pulldown2 , deve-se
usar INPUT_PULLUP como argumento de
pinMode(). Isso efetivamente inverte o
comportamento, onde HIGH significaria
que o sensor está desligado e LOW, ligado.
Pinos configurados como Output
Pinos configurados como OUTPUT com
pinMode() estão em estado de baixa-
impedância. Podem prover uma quantidade
considerável de corrente para outros circuitos.
Pinos da Atmega fornecem corrente possitiva
ou negativa até 40mA (miliampères) de
corrente para outros circuitos. Isso é útil para
acender LEDs, mas não para ler sensores.
Pinos definidos como OUTPUT podem ser
destruídos caso sejam submetidos a curto-
circuito com 5 volts. A quantidade de corrente
fornecida por um pino Atmega também não é
suficiente para abastecer a maioria dos relés
ou motores, e alguns circuitos de interface
serão necessários.
Tipos de dados
Void
A palavra reservada void é usada apenas
no momento de declarar a função. Indica
que a função é esperada para retornar a
informação para a função que foi chamada.
Exemplo:
// ações acontecem nas funções "setup" e
"loop“
// mas nenhuma informação foi repassada
para a maior parte do programa
void setup(){
// ...
}
void loop(){
// ...
}
boolean
Uma variável do tipo booleana assume dois
valores, de true ou false. Cada variável
deste tipo ocupa um byte de memória.
char
É um tipo de dado que utiliza apenas um
byte de memória para guardar o valor de
um caractere. Para um caractere usamos
aspas simples 'A', por exemplo, e para
múltiplos caracteres(strings) aspas duplas:
"ABC".
Int
Inteiro é a primeira forma com que se inicia
a guardar números.
No Arduino Uno (e outras placas da
ATMega) uma variável do tipo inteiro (int)
guarda um valor de 16 bits (2 bytes). Isso
permite um intervalo de −32, 768 a 32,
767 (valor mínimo de −2 15 e valor
máximo de (2 15-1)).
Exemplo
int ledPin = 13;
short
short é um tipo de dados de 16 bits. Em
todos os Arduinos short guarda valores de
16 bits. Possui o intervalo de valores de
−32.768 a 32.767 (valor mínimo de −2 15
e máximo de (215)−1).
Exemplo:
short ledPin = 13;
float
Basicamente são números com vírgula.
Números de ponto atuante são normalmente
usados para aproximar números analógicos e
contínuos por conta de sua maior precisão do
que os números inteiros.
Exemplo
float minha_variavel;
float sensorCalibrado = 1.117;
Funções
Entrada e saída digital
pinMode()
Configura um pino específico para definir o comportamento
entre input ou output. No Arduino 1.0.1, é possivel
habilitar os resistores internos pullup no modo
INPUT_PULLUP. O modo INPUT explicitamente desabilita os
pullups internos.
Exemplo:
int ledPin = 13; // LED conectado no pino 13
void setup(){
pinMode(ledPin, OUTPUT); // definindo o pino como output
}
void loop(){
digitalWrite(ledPin, HIGH); // liga o LED
delay(1000); // aguarda um segundo
digitalWrite(ledPin, LOW); // desliga o LED
delay(1000); // aguarda um segundo
}
digitalWrite()
Escreve o valor de HIGH ou LOW em um pino
digital. Se o pino for configurado como OUTPUT
com pinMode(), essa tensão será aplicada a seu
valor correspondente: 5V (ou 3.3V nas placas de
3.3V) para HIGH, 0V (ground) para LOW. O pino é
configurado como INPUT, digitalWrite() irá habilitar
(HIGH) ou desabilitar (LOW) o resistor interno
pullup no pino. Recomenda-se configurar o
pinMode() como INPUT_PULLUP para permitir que
a resistência interno pull-up. Ao configurar
pinMode() como OUTPUT, e conectar o LED a um
pino, ao chamar digitalWrite(HIGH), o LED pode
acender de forma fraca. Sem explicitar o modo do
pino, digitalWrite() irá habilitar os resistores
internos pull-up, que age como um resistor largo
limitador de corrente.
Exemplo:
int ledPin = 13; // LED conectado ao pino
digital 13
void setup(){
pinMode(ledPin, OUTPUT); // define o pino
digital como output
}
void loop(){
digitalWrite(ledPin, HIGH); // liga o LED
delay(1000); // aguardar um segundo
digitalWrite(ledPin, LOW); // desliga o LED
delay(1000); // aguardar um segundo
}
digitalRead()
Faz a leitura de um pino digital especí co, tanto HIGH
ou LOW.
Exemplo:
int ledPin = 13; // LED conectado ao pino digital 13
int inPin = 7; // botão conectado ao pino digital 7
int val = 0; // variável para guardar o valor lido
void setup(){
pinMode(ledPin, OUTPUT); // define o pino digital 13
como output
pinMode(inPin, INPUT); // define o pino digital 7 como
input
}
void loop(){
val = digitalRead(inPin); // faz a leitura do pino definido
como input
digitalWrite(ledPin, val);
}
Entrada e saída analógica
analogReference()
Configura a tensão de referência usada na
entrada analógica (isto é, o valor usado
como topo do intervalo).
Parâmetros
O parâmetro type define a fonte de tensão de
referência, e pode ser um dos seguintes
valores, dependendo da placa Arduino:
DEFAULT: Usa a tensão de alimentação da
placa (5V ou 3.3V, dependendo do modelo).
INTERNAL: Usa uma referência interna
específica (geralmente 1.1V ou 2.56V,
dependendo da placa).
EXTERNAL: Permite conectar uma tensão de
referência externa ao pino AREF da placa.
Se você estiver usando um sensor que
fornece uma saída analógica de até 1.1V,
pode usar:
void setup() {
analogReference(INTERNAL); // Define a
tensão de referência como 1.1V interna
}
void loop() {
int leitura = analogRead(A0); // Lê o pino
analógico A0
}
analogRead()
Faz a leitura de valores de um pino analógico.
A placa possui 6 canais (8 canais no Mini e
Nano, 16 no Mega) de 10 bits no conversor
analógico para digital. Isso significa que as
tensões de entrada serão mapeadas em
valores entre 0 e 5 volts para valores inteiros
de 0 a 1023. Isso gera uma resolução entre as
leituras de: 5 volts por 1024 unidades, ou
0,0049 volts (4,9 mV) por unidade. O alcance
e a resolução de entrada podem ser alterados
usando analogReference(). Demora cerca de
100 microssegundos (0,0001s) para ler uma
entrada analógica, então a taxa máxima de
leitura é de cerca de 10.000 vezes por
segundo.
Exemplo
int analogPin = 3;
int val = 0; // variável para guardar o valor
lido
void setup(){
Serial.begin(9600);
}
void loop(){
val = analogRead(analogPin); // pino de
entrada de leitura
Serial.println(val);
}
analogWrite() – PWM
Escreve um valor analógico (onda PWM) para o pino. Pode
ser usada para acender um LED variando sua intensidade
luminosa ou acionar um motor em diferentes velocidades.
Depois de chamar analogWrite(), o pino vai gerar uma onda
quadrada constante do ciclo de trabalho especificado até a
próxima chamada analogWrite() (ou uma chamada
digitalRead() ou digitalWrite() no mesmo pino). A frequência
do sinal PWM na maioria dos pinos é aproxidamente 490 Hz.
No Uno e placas similares, os pinos 5 e 6 têm uma frequência
de aproximadamente 980 Hz. Na maioria dos Arduinos (com
ATmega168 ou ATmega328), a função funciona nos pinos 3,
5, 6, 9, 10, and 11. No Arduino Mega, funciona nos pinos 2 -
13 e 44 - 46. Em Arduinos mais antigos com ATmega8 só
funciona analogWrite() nos pinos 9, 10, e 11.
No Arduino Due analogWrite() funciona nos pinos 2 até 13,
somados aos pinos DAC0 e DAC1. Ao contrário dos pinos
PWM, DAC0 e DAC1 são conversores Digital para Analógico, e
funcionam como verdadeiros pinos de saída analógicos. Não
é necessário chamar pinMode() para determinar o pino como
de saída antes de chamar analogWrite().
A função analogWrite() não tem relação com os pinos
analógicos ou com a função analogRead().
Exemplo:
int ledPin = 9; // LED conectado ao pino digital
9
int analogPin = 3; // potenciômetro conectado
ao pino analógico 3
int val = 0; // variável para armazenar o valor
lido
void setup(){
pinMode(ledPin, OUTPUT); // determina o pino
como de saída
}
void loop(){
val = analogRead(analogPin); // lê o pino de
entrada
analogWrite(ledPin, val / 4); // analogRead
valores vão de 0 à 1023,
//analogWrite vão de 0 à 255 }
Temporização
millis()
Retorna o número em milisegundos desde
que o Arduino começou a rodar o programa
em questão. Este número vai sobrecarregar
(voltar para zero), aproximadamente após
50 dias.
Exemplo:
unsigned long time;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
time = millis();
//printa o tempo desde que o programa
começou
Serial.println(time);
//espera um segundo para não enviar grande
quantidade de dados
delay(1000);
}
delay()
Pausa o programa na quantidade de tempo
(em milisegundos) especificada como
parâmetro. (Há 1000 milisegundos em um
segundo).
int ledPin = 13; // LED conectado ao pino
digital 13
void setup(){
pinMode(ledPin, OUTPUT); // define o pino
digital como output
}
void loop(){
digitalWrite(ledPin, HIGH); // liga o LED
delay(1000); // aguardar um segundo
digitalWrite(ledPin, LOW); // desliga o LED
delay(1000); // aguardar um segundo

Aula microcontroladores. E suas aplicaçoes

  • 1.
    MICROCONTROLADORES Yuri Ferreira deSousa contato 719 96396014
  • 2.
    Ementa  Magnetismo eEletromagnetismo  Fundamentos de Eletricidade  Condutores & isolantes  Semicondutores
  • 8.
    É uma formade energia associadas aos fenômenos causados por cargas elétricas, em repouso (eletrostática) e em movimento (eletrodinâmica).
  • 10.
    Na natureza nadase perde e nada se cria tudo se transforma Existem várias fontes de energia
  • 11.
    Origem da eletricidade A eletricidade tem origem nas cargas elétricas, que são propriedades de partículas subatômicas, como os prótons e elétrons. Essas duas partículas apresentam a mesma quantidade de carga elétrica, cerca de 1,6.10-19 C, entretanto, possuem sinais opostos. Uma vez que não é possível que existam frações de prótons ou elétrons no interior dos átomos, dizemos que a carga elétrica é uma propriedade discreta ou quantizada, já que toda a carga elétrica presente em um corpo eletrizado é igual a um múltiplo inteiro da carga elétrica fundamental, assim como mostramos na expressão a seguir: Q – carga elétrica n – número de elétrons em falta ou excesso e – carga fundamental
  • 12.
     Portanto, oátomo é formado por:  Elétron:  É a menor partícula encontrada na natureza, com carga negativa. Os elétrons estão sempre em movimento em suas órbitas ao redor do núcleo.  Próton:  É a menor partícula encontrada na natureza, com carga positiva. Situa-se no núcleo do átomo.  Nêutron:  São partículas eletricamente neutras, ficando também situadas no núcleo do átomo, juntamente com os prótons.
  • 13.
    Átomos com MenosElétrons Possui • Mais Camadas • A Força de atração exercida pelo núcleo é menor • Os elétrons da última camada ficam mais livres • Mais instável eletricamente • Melhor condutor ÁTOMO DE COBRE ÁTOMO DE COBRE
  • 14.
    Átomos com MenosElétrons Possui • Menos Camadas • A Força de Atração Exercida pelo Núcleo é Maior • Menos Elétrons Livres • Mais Estável Eletricamente • Melhor Isolante ÁTOMO DE SELÊNIO ( Mica )
  • 15.
    Materiais Observação: Semicondutores são materiaisque não sendo bons condutores, não são tampouco bons isolantes. O germânio e o silício são substâncias semicondutoras. Esses materiais, devido às suas estruturas cristalinas, podem sob certas condições, se comportar como condutores e sob outras como isolantes.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
    Tensão Elétrica -é a pressão exercida sobre os elétrons livres para que estes se movimentem no interior de um condutor. Para que eles se movimentem, é necessário termos uma pressão elétrica. Simbolizada por E (para os geradores ) e U (para os circuitos). Às vezes a tensão é simbolizada por V. Tensão Elétrica
  • 21.
    Tensão Elétrica  Símbolo– V (intensidade de tensão elétrica)  Unidade - Volt (V)  Exemplo: = 3 Volts  V = 3V
  • 22.
    Múltiplos e submúltiplos V KV MV GV nV V mV Parasubir um degrau divida por 1000 Para descer um degrau multiplica por 1000 Tensão Elétrica
  • 24.
    Corrente Elétrica O Coulombnão é, porém, uma unidade muito prática. Então, para se poder realmente medir e comparar a corrente elétrica, houve a necessidade de se medir a intensidade da corrente em relação ao tempo. Portanto, criou-se uma unidade prática, o ampère, que é representado pela letra ( A ) e equivale a 1 Coulomb por segundo. Símbolo - I (intensidade de corrente elétrica) Unidade - ampère (A ) Exemplo: I = 3 ampères I = 3A 3 coulomb/seg
  • 25.
    Corrente Elétrica Múltiplos esubmúltiplos A kA MA GA nA A mA Para subir um degrau divida por 1000 Para descer um degrau multiplica por 1000
  • 26.
  • 27.
    Resistência Elétrica Resistência elétrica:É a oposição a passagem da corrente. No geral, os materiais variam de ”comportamento elétrico”, conforme sua estrutura atômica. apresentando-se como condutores e outros como isolantes. Os materiais isolantes são os de maior resistência elétrica, ou seja: os que mais se opõem à passagem da corrente elétrica. Os materiais condutores, apesar de sua boa condutividade elétrica, também oferecem resistência à passagem da corrente, embora em escala bem menor.
  • 28.
    Resistência Elétrica Resistência elétrica:É a oposição a passagem da corrente. 1 OHM: É a resistência que permite a passagem de 1 AMPÈRE quando submetida a tensão de 1 VOLT Símbolo - R Símbolo - R Unidade - OHM () Unidade - OHM ()
  • 29.
    Resistência Elétrica Múltiplos esubmúltiplos Ω KΩ MΩ GΩ nΩ Ω mΩ Para subir um degrau divida por 1000 Para descer um degrau multiplica por 1000
  • 30.
  • 31.
    Lei de Ohm AsLeis de Ohm, criadas pelo físico Gergor Simon Ohn em 1827, mostram a resistência elétrica dos condutores. Ela permite calcular grandezas como: tensão, corrente e resistência elétrica dos elementos presentes em um circuito.
  • 35.
  • 36.
    Potência Elétrica Capacidade de produzirtrabalho de 100 W Se for ligada a uma fonte de 127 V Potência da Lâmpada Capacidade de produzir trabalho de 100 W Se for ligada a uma fonte de 220 V
  • 37.
    Potência Elétrica A potênciadepende de outras grandezas • R - Resistência • V - Tensão • I – Corrente • Aplicando a tensão V na resistência R circula a corrente I Assim temos: P = V x I
  • 39.
    Circuito Elétrico É umcaminho fechado por condutores elétricos ligando uma carga elétrica a uma fonte geradora.
  • 40.
    Associação de Resistores Circuitoselétricos complexos na prática nada mais são que simples associações de dois tipos de circuitos fundamentais: Circuito em Série. Circuito Paralelo
  • 41.
    GERA DOR Orienta o movimento doselétrons CONDU TOR Assegura a transmissão da corrente elétrica. CARGA Utiliza a corrente elétrica (transforma em trabalho)
  • 42.
    Semicondutores  Os semicondutoressão essenciais para eletrônicos modernos, como transistores, diodos, circuitos integrados, chips, placas fotovoltaicas, LEDs e muito mais.
  • 43.
    Resistores  Resistor eum componente elétrico passivo com a função primaria de regular e4 limitar o fluxo da corrente elétrica em um circuito.
  • 46.
    No exemplo abaixo,temos: primeira faixa: vermelha – 2 segundo faixa: preta – 0 terceira faixa: vermelha – x100 (dois zeros) quarta faixa: ouro – 5% Valor do resistor: 2000 Ω com tolerância de 5%
  • 47.
    Associação em Série Vamos nos fixar em três resistores apenas. Dizemos que a associação é em série, quando pelos resistores passa a mesma corrente. A tensão total entre os pontos A e B do circuito é Vt. A resistência equivalente é uma única resistência R que submetida à mesma tensão Vt, é percorrida pela mesma corrente i que percorre a associação. A relação entre a tensão total Vt e as tensões em cada resistência é: VT = V1 + V2+ V3 Veq =VT
  • 48.
    Resistência Equivalente emSérie  Pela Lei de Ohm, teremos que: R1I + R2I + R3I + R4I +R5I = ReqI = V, ou seja, (R1 + R2 + R3 + R4 +R5)I = ReqI.  Pela equação, deduz-se que a resistência equivalente é igual ao somatório das resistências, ou seja: Req = R1 + R2 + R3 + R4 +R5.  Pode-se concluir que: a resistência total (ou equivalente) de uma associação de resistores em série é igual à soma dos resistores que constituem a associação série.
  • 49.
    se ao passarpor eles. Nesse tipo de associação, a resistência elétrica equivalente será sempre menor do que a menor das resistências Na Associação em paralelo, os resistores são submetidos a mesma tensão
  • 50.
    Resistencia Equivalente em Paralelo Generalizando,o inverso da resistência total (equivalente) de uma associação em paralelo é igual à soma dos inversos das resistências que compõem a associação paralela. É importante atentarmos para algumas observações. 1. Se no circuito tivermos apenas dois resistores em paralelo, a resistência equivalente será dada pelo produto das resistências dividido pela sua soma. 2. Se as duas resistências forem iguais, as correntes sobre elas serão iguais à metade da corrente total.
  • 51.
    RESUMO DE FÓRMULAS Re 1 R1 1 R2 1 R3 1 Rn 1 CIRCUITOSÉRIE CIRCUITO PARALELO = + + +... Re = R1+ R2 + Rn R3+...
  • 52.
     Internamente todosos dispositivos digitais conversam em BASE 2, ou seja sequencias de 0 e 1:  Ex:0001111010101
  • 53.
     Como seriapor exemplo 5 em base 2?  5 = 0101
  • 54.
     Esses ENDEREÇOSDE MEMÓRIA devem ter TAMANHOS DETERMINADOS:  (BIT/BOOL), (BYTE/SINT), (WORD/INT), (DWORD/DINT), REAL
  • 55.
     Introdução aosMICROCONTROLADORES
  • 56.
     Os microcontroladoressão circuitos integrados que possuem internamente todos os componentes necessário para seu funcionamento, dependendo apenas de uma fonte de alimentação externa. Esta é a principal diferença entre um microcontrolador e um microprocessador, no qual para o funcionamento é necessário a integração com componentes externos
  • 57.
  • 58.
     A velocidadede processamento, a quantidade de memória e os tipos de periféricos de um microcontrolador variam de modelo para modelo e também entre fabricantes, pois cada microcontrolador é desenvolvido para um tipo de aplicação. Uma das principais características dos microcontroladores é sua versatlidade, pois uma vez que o controlador depende do software gravado nele, pode ser utilizado para uma infinidade de aplicações bastando apenas mudar o seu software.  Outra vantagem é a possibilidade de atualização de um produto através da atualização do software do microcontrolador, o que não é possível de obter com circuios analógicos ou digitais tradicionais.
  • 60.
    Aplicações de Microcontroladores Osmicrocontroladores são utilizados e diversos dispositivos eletrônicos que utilizamos no cotidiano, como por exemplo, dispositivos de computadores, centrais de alarmes, telefones, televisores, automóveis, aviões, impressoras relógios etc. No meio industrial os microcontroladores são amplamente utilizados, como por exemplo nos controladores de processos, sebsores inteligentes, inversores de frequência, softstartes, sistemas de inteface humana máquinas entre outros. Devido a sua versatilidade e ao seu baixo custo, qualquer dispositivo eletrônico pode fazer uso de microcontroladores.
  • 62.
    Registradores Os registradores sãoa base para o funcionamento de qualquer CPU, e é formado por um grupo de elementos capazes de armazenar uma informação, e que funcionam juntos como uma unidade. Os registradores mais simples armazenam uma palavra binária que pode ter “n” bits.
  • 64.
    Memórias Memórias são dispositivosutilizados para armazenar palavras binárias na ordem de centenas de milhares. Podem-se utilizar flip- flop’s para o armazenamento em memórias ou outro dispositivo qualquer que sirva para este fim. Os circuitos de memória normalmente têm as seguintes entradas e saídas: • Algumas vias de entrada para gravação e/ou saídas para leitura (que fisicamente podem ser as mesmas); • Algumas vias para endereçamento, que selecionará qual registrador será lido/escrito, de acordo com um código (endereço de memória); • Um pino que habilita o circuito (Chip Select - CS). Se o circuito não estiver habilitado, as saídas permanecem em alta impedância; • Um pino de leitura/escrita, que habilita uma destas duas operações ou apenas leitura, dependendo do tipo de memória.
  • 65.
    Memória RAM A memóriaRAM é uma memória de leitura e escrita, isto é, que pode ser gravada com um determinado valor e este valor pode ser posteriormente lido. Além disso, podemos acessar qualquer registrador desejado aleatoriamente para ler ouescrever uma palavra. A memória RAM comum necessita de alimentação elétrica para manter a integridade de seus dados. É por este motivo, pertencente ao grupo de memórias voláteis.
  • 66.
    Memória RAM Quanto àsua construção, as memórias RAM podem ser de dois tipos básicos: estática ou dinâmica. Na memória RAM estática, os bits são armazenados em flip-flop’s individuais e permanecem armazenados indefinidamente enquanto o circuito possuir alimentação. A memória RAM dinâmica armazena os bits através de carga em diminutos capacitores.Como um capacitor deste tipo ocupa muito menos espaço que um flip-flop em um CI, a memória dinâmica resultante é bem mais compacta que a estática. Em compensação, o bit em um capacitor permanece íntegro por apenas uma fração de tempo (aprox. 2 ms), devido às fugas de corrente. Para contornar este problema este tipo de memória deve ter um circuito auxiliar que verifique temporariamente os capacitores e os recarregue se for necessário. Esta operação é denominada refresh.
  • 67.
    Memória RAM A maioriadas memórias tem saídas em coletor aberto ou terceiro estado para permitir a ligação em paralelo e consequentemente melhorar a capacidade de manuseio de dados. Assim, quando o “Chip Select” não estiver ativo, o componente ficará em estado de alta impedância, e não se pode nem escrever na memória nem ler os seus conteúdos. Isto significa que a memória estará desconectada dos demais componentes do circuito. A operação de gravação ou escrita é feita colocando-se os dados nas vias de entrada, colocando-se os sinais de endereço na posição desejada, habilitando a escrita da memória e finalmente habilitando-se o chip. Deste modo os dados das vias de entrada serão escritos na posição selecionada. Do mesmo modo, a operação de leitura é feita colocando-se os sinais de endereço na posição desejada, habilitando a leitura da memória e finalmente habilitando-se o chip
  • 68.
    Memória ROM Uma memóriaROM (do inglês : Read Only Memory) é um tipo de memória no qual podemos ler, mas não escrever. Os conteúdos são fixos e inalterados, sendo estabelecidos na hora da fabricação. Em uma ROM, os conteúdos não precisam ser alterados. Portanto não necessitamos de flip-flop’s ou dispositivos semelhantes. Uma ROM na verdade nada mais é do que um conversor de código e pode ser construído a partir de dispositivos mais simples e baratos que as portas normalmente utilizadas.
  • 69.
    Memórias programáveis eapagáveis Na EPROM, os dados são armazenados em dispositivos baseados em MOSFET’s. Estes dispositivos fazem ou não a conexão (guardam bit “um” ou “zero”) conforme haja ou não carga elétrica na porta do transistor. A programação é feita através de um programador de EPROM’s. Uma característica importante é a de que a exposição à luz ultravioleta forte (por aproximadamente 30 min.) permite a fuga das cargas, apagando a memória. O apagamento possibilita uma nova programação (gravação). Já nas memórias EEPROM e FLASH o processo para apagar pode ser feito eletricamente, facilitando muito assim o processo de alteração das informações armazenadas. Apesar de estas memórias serem graváveis e apagáveis elas não são iguais as memórias RAM, pois as informações não são perdidas quando a energia é desligada. Outra característica que difere este tipo de memórias das memórias RAM é que o tempo gasto para armazenar a informação nestas que é muito maior, e o numero de gravações que se pode fazer que é limitado
  • 70.
    ARQUITETURA DE MICROCONTROLADORES Osmicroprocessadores são o coração de um microcontrolador, assim para compreendermos o funcionamento de um microcontrolador é necessário primeiro compreender o funcionamento de um microprocessador. Embora todos os microprocessadores tenham suas peculiaridades, a maioria deles possui grande semelhança quanto a seu modo geral de funcionamento.
  • 72.
    Registradores de propósitogeral São registradores nomeados de Reg. A até Reg. D. O número destes registradores varia de um microprocessador para outro. Por exemplo, no AVR, são 32 registradores de 8 bits, no Z80, são 16 de 8 bits, no 8051 são 8 de 8 bits. A função destes registradores é armazenar os dados que estão sendo processados pelo microprocessador.
  • 73.
    Unidade Lógica Aritimética Essaunidade é o centro do microprocessador, ela possui somador, subtrator (em alguns, multiplicador e divisor), operadores AND, OR e XOR bit a bit, incrementador e decrementador, tudo integrado em uma única unidade. Portanto, todas as operações lógicas e aritméticas passam obrigatoriamente por esta unidade.
  • 74.
    Registrador temporário  Serveapenas para armazenar temporariamente um dos operadores da ULA
  • 75.
    Acumulador Trata-se de umregistrador especial dedicado às operações envolvendo a ULA. Esse registrador é um dos operandos envolvidos nas operações da ULA e também é o registrador que Recebe o resultado das operação. Assim como os registradores de propósito geral, admite transferência bidirecional.
  • 76.
    Program counter (PC) Énesse registrador que o microprocessador guarda o endereço de memória que aponta para a instrução do programa que esta sendo executada. O microprocessador usa esse conteúdo para informar à memória o endereço onde está a instrução, faz a leitura desta instrução e guarda a instrução lida no REGISTRADOR DE INSTRUÇÃO. Logo após ter lido a instrução o conteúdo do registrador PC é automaticamente incrementado para que o microprocessador possa ler a próxima instrução.
  • 77.
    Registrador de instrução Énesse registrador que o microprocessador guarda a instrução lida da memória para que possa ser decodificada e executada.
  • 78.
    Decodificador de instruçãoe Unidade de controle Quando uma instrução é lida da memória, ela não passa de um byte qualquer. Como saber qual a instrução que corresponde a esse byte e como tomar as devidas providências (micro instruções) para fazer o que a instrução está mandando? Cada registrador do microprocessador precisa ser comandado pelos seus sinais de controle, não só os registradores, mas todo o sistema precisa ser comandado pelos sinais de controle para que todo o sistema possa funcionar. Esses sinais de controle precisam obedecer a uma sequência adequada para que não ocorram conflitos. A instrução lida passa por uma unidade com um número imenso de portas lógicas que geram os sinais de controle de todo o sistema. Pode-se dizer que esta unidade é realmente o cérebro de todo o sistema.
  • 79.
    Unidade de deslocamento Aunidade de deslocamento contém um registrador de deslocamento série bidirecional e é capaz de realizar um deslocamento dos bits à esquerda ou à direita ou então não realizar deslocamento nenhum.
  • 80.
    Arquitetura de HAVARDe VON NEUMAN As arquiteturas Harvard e Von Neumann dizem respeito à forma como a memória é conectada ao microprocessador. Na arquitetura Harvard, há dois barramentos de endereços independentes e dois de dados também independentes. Enquanto um desses barramentos serve para a leitura de instruções de um programa, o outro serve para a leitura e escrita de dados. Com isso, é possível operar simultaneamente uma instrução e um byte de dados. Isso garante maior velocidade de processamento. Atualmente, os processadores de sinais digitais (DSP – digital signal processor) utilizam essa arquitetura. DSP’s são processadores especializados no processamento dos sinais em tempo real.
  • 81.
    Já na arquiteturaVon Neumann, há apenas um barramento de dados e endereços. Neste caso, as instruções estariam em uma faixa de endereços que ative a memória que possui as instruções e os dados estão em outra faixa de endereços que ative outra memória onde se pode ler e escrever os dados.
  • 83.
    Comparando ambas, conclui-seque Harvard é mais veloz, mas exige mais um barramento. Assim o custo de produção das placas que utilizam este tipo de processadores é maior. Von Neumann utiliza apenas um barramento, mas não pode efetuar acessos simultâneos às memórias. Assim seu custo de produção é menor, porem seu desempenho também é menor. Como exemplos podemos citar o computador pessoal que utiliza a arquitetura Von Neumann e os microcontroladores AVR que utilizam a arquitetura Harward. A arquitetura Harward é bastante utilizada nos microcontroladores pelo fato das memórias estarem integradas no próprio componente, o que não acarreta em placas de circuito complexas com várias trilhas de endereçamento e dados.
  • 84.
    Sinais de controle Paraque o microprocessador possa se comunicar com as memórias são necessários alguns sinais de controle: • Endereços: Esse conjunto de sinais serve para localizar a informação dentro da memória. • Dados: Trata-se normalmente de 8 bits que conduzirão o byte lido da memória para o microprocessador ou do microprocessador para a memória. • RD (Read): Sinal enviado pelo microprocessador requisitando que a memória coloque no barramento de dados o byte previamente endereçado. O microprocessador lê esse byte e logo após desativa o sinal RD. • WR (write): Sinal enviado pelo microprocessador requisitando que a memória armazene o byte presente no barramento de dados no endereço presente no barramento de endereços. (o byte e o endereço já devem estar preparados antes da ativação deste sinal).
  • 85.
    Introdução ao Arduino Arduinoé um projeto que engloba software e hardware e tem como objetivo fornecer uma plataforma fácil para prototipação de projetos interativos, utilizando um microcontrolador. Ele faz parte do que chamamos de computação física: área da computação em que o software interage diretamente com o hardware, tornando possível integração fácil com sensores, motores e outros dispositivos eletrônicos. A parte de hardware do projeto, uma placa que cabe na palma da mão, é um computador como qualquer outro: possui microprocessador, memória RAM, memória flash (para guardar o software), temporizadores, contadores, dentre outras funcionalidades.
  • 87.
    Como qualquer computador,o Arduino precisa de um software para executar comandos. Esse software será desenvolvido na Arduino IDE em nosso PC, utilizando a linguagem C++. Após escrever o código, o compilaremos e então faremos o envio da versão compilada à memória flash do Arduino, através da porta USB. A partir do momento que o software é gravado no Arduino não precisamos mais do PC: o Arduino, como é um computador independente, conseguirá sozinho executar o software que criamos, desde que seja ligado a uma fonte de energia.
  • 88.
    Alimentação do arduino Internamente,o circuito do Arduino é alimentado com uma tensão de 5V. Quando ligamos o Arduino em uma porta USB do PC, o próprio PC, através do cabo USB, alimenta o Arduino. Porém nem sempre temos um PC por perto; para esses casos, podemos utilizar uma outra fonte de energia de 5V (a fonte deve ser ligada diretamente nos pinos 5V e GND do Arduino). O Arduino possui um regulador de tensão que aceita tensões de 7 a 12V. Com o regulador de tensão podemos combinar pilhas em série, utilizar uma bateria de 9V ou mesmo baterias de carros, motos e no-breaks (12V).
  • 90.
    Biblioteca e shields Assimcomo a IDE já vem com diversas funções pré-definidas, o Arduino possui outras bibliotecas para controle de servomotores, displays LCD, geração de áudio, recepção de sinais de sensores e outros dispositivos. A estensibilidade do Arduino não se restringe à parte de software: o Arduino possui o que chamamos de shields, que são placas que se acoplam a placa original, agregando funcionalidades a mesma. Existem shields dos mais variados tipos, para as mais diversas funções. Alguns servem como entrada, outros como saída, e ainda outros como entrada e saída. Com os shields conseguimos, por exemplo, fazer o Arduino se comunicar numa rede Ethernet, ou ainda transmitir dados para qualquer dispositivo via Bluetooth, Wi- Fi ou Zigbee. Existem shields com circuitos integrados prontos para controlarmos motores sem que precisemos nos preocupar com complicações eletrônicas envolvidas, outros possuem leitor de cartão SD, acelerômetro, GPS e diversos outros sensores que podem gerar dados importantes para o software que está rodando no microcontrolador.
  • 92.
    Integração com oPC Apesar de o Arduino ser um computador independente, em alguns casos podemos nos aproveitar de um PC por perto e explorar outra funcionalidade muito boa do projeto: o Arduino consegue conversar com o computador através da porta USB. Isso nos permite desenvolver um software que roda no PC e se comunica com o software que roda no Arduino. Existem inúmeros projetos interessantes que fazem interface entre linguagens de programação e o Arduino – existem implementações para Python, Ruby, Java, C, dentre outras linguagens. Além do software que é executado no PC recebere dados, ele pode também enviar dados, controlando o arduino.
  • 93.
    Portas Digitais eAnalógicas O Arduino possui dois tipos de portas de entrada: analógicas e digitais. Além disso, as portas digitais também servem como portas de saída, funcionando com dois tipos básicos de saída: saída digital comum e saída PWM – o PWM pode ser utilizado para simular uma saída analógica, dentre outras coisas. Utilizamos as portas digitais quando precisamos trabalhar com valores bem definidos de tensão. Geralmente trabalhamos com valores digitais binários, ou seja, projetamos sistemas que utilizam apenas dois valores bem definidos de tensão. Existem sistemas ternários, quaternários, mas focaremos no binário, já que é esse o utilizado pelo Arduino. Como o sistema é binário, temos que ter apenas duas tensões. São elas: 0V e 5V. Dessa forma, as portas digitais do Arduino podem trabalhar apenas com essas duas tensões – e o software que desenvolveremos poderá requisitar ao microcontrolador do Arduino que: • Coloque uma determinada porta em 0V; • Coloque uma determinada porta em 5V; • Leia o valor de uma determinada porta (terá 0V ou 5V como resposta).
  • 95.
    Apesar de serpossível, não é recomendável utilizar as portas 0 e 1 pois elas estão diretamente ligadas ao sistema de comunicação do Arduino (pinos RX e TX – recepçãoo e transmissãoo, respectivamente) e, por isso, seu uso pode conflitar com o upload do software. Caso queira utilizá-las, certifique-se de desconectar quaisquer circuitos conectados a ela no momento do upload. PWM significa Modulação por Largura de Pulso (Pulse- Width Modulation, do Inglês) e consiste em manipularmos a razão cíclica de um sinal (conhecida do Inglês como duty cycle) a fim de transportar informação ou controlar a potência de algum outro circuito. Basicamente, teremos um sinal digital que oscila entre 0V e 5V com determinada frequência (o Arduino trabalha com um padrão perto de 500Hz) – funciona como se fosse um clock, porém os tempos em que o sinal permanece em 0V e 5V podem ser diferentes. Duty cycle é a razão do tempo em que o sinal permanece em 5V sobre o tempo total de uma oscilação.
  • 97.
    O que controlamosatravés de software é justamente a duty cycle, ou seja, o percentual de tempo em que o sinal fica em 5V. Dessa forma, podemos utilizar essa técnica para limitar a potência de algum circuito. Por exemplo, considere que um LED L1 seja alimentado o tempo inteiro por um sinal constante de 5V; já o LED L2 é alimentado pelo sinal PWM acima (duty cycle de 25%). Através de um cálculo simples de potência podemos notar que o LED L2 consumir a apenas 25% da potência do primeiro. Além das portas digitais o Arduino possui as portas analógicas. Ao contrário das portas digitais, as portas analógicas são apenas de entrada e nelas podemos ter como entrada infinitos valores de tensão (delimitados na faixa de 0V a 5V). Como os conversores analógico- digitais (ADC – analog-digital converter, do Inglês) do Arduino possuem 10 bits de precisão, a precisão das medições de tensão no Arduino é de por volta de 0,005V ou 5mV.
  • 99.
    Estrutura setup () A funçãosetup() é chamada quando um programa começa a rodar. É usada para inicializar as variáveis, os tipo dos pinos, declarar o uso de bibliotecas, entre outros. Esta função será executada apenas uma vez após a placa Arduino ser ligada ou reiniciada. Exemplo: int buttonPin = 3; void setup(){ Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop(){ // ... }
  • 100.
    loop () Após criaruma função setup() que declara os valores iniciais, a função loop() faz exatamente o que seu nome sugere, entra em looping (executa sempre o mesmo bloco de código), permitindo ao seu programa fazer mudanças e responder. Esta função é usada para controlar ativamente a placa Arduino.
  • 101.
    Exemplo: int buttonPin =3; // setup inicializa o serial e o pino do button (botão) void setup(){ beginSerial(9600); pinMode(buttonPin, INPUT); } // loop checa o botão a cada vez, // e envia o serial se ele for pressionado void loop(){ if (digitalRead(buttonPin) == HIGH){ serialWrite('H'); } else{ serialWrite('L'); } delay(1000); }
  • 102.
    Estrutura de controle ife operadores de comparação Essa estrutura, que é usada em conjunto com um operador de comparação, testa alguma condição imposta pelo programador. Para testar se o valor de uma variável é maior do que 100 por exemplo, if (variavel > 100){ // faça algo aqui }
  • 103.
    O programa testase variavel é maior do que 100. Se for, o programa executa a ação seguinte. Caso contrário, o programa ignora a ação dentro das chaves e segue a rotina. Caso a ação tenha apenas uma linha, as chaves podem ser omitidas. 20 Para fazer as comparações, é necessária a utlilização dos operadores que podem ser visto a seguir:
  • 105.
    if / else Aestrutura if/else fornece um controle maior sobre o código do que simplesmente o if, permitindo múltiplos testes agrupados. Por exemplo, uma entrada analógica poderia se testada e uma ação executada caso o valor fosse menor do que 500. Caso seja maior ou igual a 500, executaria a segunda ação. if (x < 500){ // ação A } else{ // ação B }
  • 106.
    Também é possívelcolocar uma condição logo após do else. Não há limites de condições a serem colocadas. if (x< 500){ // ação A } 21 else if (x>= 1000){ // ação B } else { // ação C }
  • 107.
    switch / case Comoa estrutura if, switch...case controla os programas permitindo os programadores especificar diferentes código que poderão ser executados em diferentes condições. Em particular, a estrutura do switch compara o valor da variável com o valor em cada caso específico. Quando o caso é encontrado, ou seja, o valor é o da variável, a ação correspondente é executada. A palavra reservada break interrompe o switch, e é típicamente usado no final de cada case. Sem o break, a estrutura do switch irá ser executada até encontrar uma interrupção, ou o final das comparações.
  • 108.
    Exemplo: switch (var) { case1: //faça algo quando var equivale a 1 case 2: //faça algo quando var equivale a 1 break; default: // se nenhuma comparação for verdadeira, faz-se o padrão // o padrão pode ou não, existir }
  • 109.
    For For é chamadade estrutura de laço, pois cada bloco de programa se repete uma determinada quantidade de vezes. Um contador é normalmente usado para terminar e dar ritmo ao loop. É útil para qualquer operação que se repita. Uma aplicação comum é operações com vetores. for (inicialização; condição; incremento) { //ação; } A inicialização começa pela primeira e única vez. Cada vez que iniciará um novo loop, a condição é testada. Se for verdadeira, a ação é executada e a variável de passo incrementada. Quando a condição se tornar falsa, o loop termina.
  • 110.
    While O laço dowhile acontece infinitamente até que a expressão dentro dos parênteses se torne falsa. Algo deve ser modificado ao testar a variável para o término do loop, caso contrário ele nunca terminará. while(expressão){ // ação }
  • 111.
    Parâmetros: expressão - Aestrutura (booleana)de C que verifica se é verdadeiro ou falso. Exemplo: var = 0; while(var < 200){ // faça algo duzentas vezes var++; }
  • 112.
    do-while Muito parecido como while, o do-while possui a diferença que sua condição é testada ao final do loop, assim executando a ação garantidamente uma vez. do{ // bloco de ações } while (teste de condição);
  • 113.
    Exemplo: do{ delay(50); // esperarsensores Estabilizarem x = readSensors(); // leitura de sensores. fará 100 leituras } while (x < 100);
  • 114.
    break Interrompe alguma condiçãode loop. Também é usado na estrutura de switch. Exemplo: for (x = 0; x < 255; x ++){ digitalWrite(PWMpin, x); sens = analogRead(sensorPin); if (sens > threshold){ x = 0; break; } delay(50); }
  • 115.
    continue Ignora o restoda iteração atual de um loop. continue continua marcando a expressão condicional do loop, e prossegue com as iterações subsequentes Exemplo: for (x = 0; x < 255; x ++){ if (x > 40 && x < 120){ continue; } digitalWrite(PWMpin, x); delay(50); }
  • 116.
    return Termina a funçãoe retorna um valor de uma função para a função de chamada. return; return valor; // ambas as formas são válidas Exemplo: int checkSensor(){ if (analogRead(0) > 400) { return 1; } else{ return 0; } }
  • 117.
    Elementos de Sintaxe ;- ponto e vírgula Usado ao terminar uma linha Exemplo: int a = 13; Terminar uma linha sem o ponto e vírgula resultará em um erro de compilação. Uma das primeiras coisas a se verificar quando há algum erro sem razão, é um ponto e vírgula esquecido, que precede a linha em que o compilador reclamou.
  • 118.
    {} – Chaves Aschaves são largamente usadas na programação em C. Possuem diversas aplicações, descritas abaixo, que podem causar confusão em iniciantes. Toda chave de abertura ({) deve ser fechada (}). Essa é a condição que se refere às chaves estarem balanceadas. A IDE (Integrated Development Enviroment, em inglês) do Arduino inclui um artifício que confere se as chaves estão devidamente balanceadas. Para isso, deve-se apenas selecionar uma chave que a correspondente irá ser destacada. Atualmente, esse artifício possui um pequeno bug onde ele também destaca (incorretamente) as chaves que estão comentadas. Programadores iniciantes e programadores que habituados com BASIC normalmente encontram dificuldades com o uso de chaves. Não obstante, as chaves substituem a instrução RETURN em uma subrotina (função), a estrutura ENDIF por uma condicional e a instrução Next por um loop for. Por conta do uso das chaves ser bem variado, uma dica para praticar é imediatamente após se abrir uma chave é fechá-la. Chaves desbalanceadas causam muitos erros de compilação. Muitas vezes fica complicado encontrar o erro de sintaxe em um código de muitas linhas. Por conta de seu largo uso, as chaves são muito importantes para a sintaxe do programa. Movendo uma ou duas linhas de lugar, o sentido do código pode-se alterar drasticamente.
  • 119.
    Funções void minhafunção(parâmetro){ ações } Loops while (expressãobooleana) { ações } 27 do { ações } while (expressão booleana); for (incialização; condição de término; expressão de incremento) { ações } Estruturas condicionais if (expressão booleana) { ações } else if (expressão booleana) { ações } else { ações }
  • 120.
    // e /- Comentários Comentários são linhas de programa que são usadas para informar o próprio programador ou outra pessoa que venha a usar o código como o programa funciona. Essas linhas são ignoradas pelo compilador e nem são enviadas para o processador, logo, não ocupam espaço no chip do Atmega. Comentários possuem o propósito de ajudar o programador a entender (ou lembrar) como o programa funciona ou para informar a outros. Existem duas formas diferentes de comentar:
  • 121.
    x = 5;// Essa é uma linha simples de comentário. // Tudo escrito aqui não será considerado // outra linha de comentário /* a barra seguida do asterisco indica um bloco de comentário. até um asterisco seguido de barra, nada será considerado.
  • 122.
    define define permite aoprogramador nomear um valor de uma constante antes do programa ser compilado. Constantes nomedadas por define não usam memória do chip. O compilador irá fazer referências para essas constantes com o valor de nido no momento da compilação. Isso pode causar alguns efeitos indesejáveis como o nome definido por define ser incluído em outra constante ou nome de variável.Nesse caso o texto deverá ser trocado pelo número ou texto que se usou o define. Em geral, a palavra reservada const é melhor para se de nir constantes do que o define. Exemplo: #define ledPin 3 // O compilador irá trocar ledPin por 3 no momento de compilar.
  • 123.
    Include #include é usadopara incluir bibliotecas. Possibilita ao programador usar um largo grupo de funções pré-definidas. Existem bibliotecas escritas especi camente para Arduino. Note que o include é similar ao define, não há ponto e vírgula para terminar a linha, causando assim um erro de sintaxe caso seja colocado. Exemplo: #include <servo.H>
  • 124.
  • 125.
  • 126.
  • 127.
    Variáveis true | false false falseé definida como 0 (zero).
  • 128.
    true true é normalmentedefinida como 1, o que está certo, apesar de possuir uma definição mais larga. Qualquer inteiro diferente de zero é true, no pensamento Booleano. Então, pode-se chegar a conclusão que -1, 2 e -200 são todos definidos como true também. Repare que diferentemente das palavras reservadas HIGH, LOW, INPUT e OUTPUT, true e false são escritas em letras minúsculas.
  • 129.
    HIGH | LOW Nomomento que se for ler ou escrever em um pino digital, há apenas dois valores que o pino pode assumir: HIGH ou LOW.
  • 130.
    HIGH Em relação aospinos, o significado de HIGH é diferente dependendo de qual modo o pino for colocado, se INPUT ou OUTPUT. Quando o pino é configurado como INPUT com a função pinMode e lido com a função digitalRead, o microcontrolador irá considerar como HIGH se a tensão for maior ou igual a 3 volts no pino. Também é o possível configurar com pinMode o pino como INPUT e, posteriormente, com a leitura do digitalWrite como HIGH definirá os 20K resistores pull-up internos que orientarão o pino de entrada para o valor de HIGH exceto no caso que for puxado para LOW pelo circuito externo. É dessa forma que a função INPUT_PULLUP funciona. Quando um pino é configurado como OUTPUT com pinMode, e definido como HIGH com digitalWrite, o pino está com 5 volts. Neste estado, é possível fornecer corrente, por exemplo, acender um LED que está conectado através de um resistor em série para o terra ou para o outro pino configurado como OUTPUT, e definido como LOW.
  • 131.
    LOW O significado deLOW também difere dependendo de como o pino foi definido. Quando configurado como INPUT com pinMode, e lido com digitalRead, o microcontrolador irá considerar como HIGH se a tensão for menor ou igual a 2 volts no pino. Quando um pino é configurado como OUTPUT com pinMode, e definido como LOW com digitalWrite, o pino está com 0 volts. Neste estado, é possível reduzir corrente, por exemplo, acender um LED que está conectado através de um resistor em série para Vcc, ou para o outro pino configurado como OUTPUT, e definido como HIGH.
  • 132.
    INPUT | OUTPUT| INPUT PULLUP Pinos digitais podem ser usados como INPUT, INPUT_PULLUP, ou OUTPUT. Modificar o pino com pinMode() singnifica modificar o comportamento elétrico do pino.
  • 133.
    Pinos configurados comoINPUT Os pinos do Arduino definidos como INPUT com pinMode() estão em estado de altaimpedância. Pinos configurados como INPUT possuem capacidade apenas para executar ações de pequeno porte. Equivalem a uma resistência em série de 100MΩ na frente do pino. Isso os torna úteis para a leitura de um sensor, mas não alimentar um LED.
  • 134.
    Pinos configurados comoINPUT PULLUP O chip interno Atmega do Arduino possui resistores do tipo pull-up internos que podem ser acessados. Caso seja necessários usar esses resistores ao invés de resistores externos pulldown2 , deve-se usar INPUT_PULLUP como argumento de pinMode(). Isso efetivamente inverte o comportamento, onde HIGH significaria que o sensor está desligado e LOW, ligado.
  • 135.
    Pinos configurados comoOutput Pinos configurados como OUTPUT com pinMode() estão em estado de baixa- impedância. Podem prover uma quantidade considerável de corrente para outros circuitos. Pinos da Atmega fornecem corrente possitiva ou negativa até 40mA (miliampères) de corrente para outros circuitos. Isso é útil para acender LEDs, mas não para ler sensores. Pinos definidos como OUTPUT podem ser destruídos caso sejam submetidos a curto- circuito com 5 volts. A quantidade de corrente fornecida por um pino Atmega também não é suficiente para abastecer a maioria dos relés ou motores, e alguns circuitos de interface serão necessários.
  • 136.
    Tipos de dados Void Apalavra reservada void é usada apenas no momento de declarar a função. Indica que a função é esperada para retornar a informação para a função que foi chamada.
  • 137.
    Exemplo: // ações acontecemnas funções "setup" e "loop“ // mas nenhuma informação foi repassada para a maior parte do programa void setup(){ // ... } void loop(){ // ... }
  • 138.
    boolean Uma variável dotipo booleana assume dois valores, de true ou false. Cada variável deste tipo ocupa um byte de memória.
  • 139.
    char É um tipode dado que utiliza apenas um byte de memória para guardar o valor de um caractere. Para um caractere usamos aspas simples 'A', por exemplo, e para múltiplos caracteres(strings) aspas duplas: "ABC".
  • 140.
    Int Inteiro é aprimeira forma com que se inicia a guardar números. No Arduino Uno (e outras placas da ATMega) uma variável do tipo inteiro (int) guarda um valor de 16 bits (2 bytes). Isso permite um intervalo de −32, 768 a 32, 767 (valor mínimo de −2 15 e valor máximo de (2 15-1)). Exemplo int ledPin = 13;
  • 141.
    short short é umtipo de dados de 16 bits. Em todos os Arduinos short guarda valores de 16 bits. Possui o intervalo de valores de −32.768 a 32.767 (valor mínimo de −2 15 e máximo de (215)−1). Exemplo: short ledPin = 13;
  • 142.
    float Basicamente são númeroscom vírgula. Números de ponto atuante são normalmente usados para aproximar números analógicos e contínuos por conta de sua maior precisão do que os números inteiros. Exemplo float minha_variavel; float sensorCalibrado = 1.117;
  • 143.
    Funções Entrada e saídadigital pinMode() Configura um pino específico para definir o comportamento entre input ou output. No Arduino 1.0.1, é possivel habilitar os resistores internos pullup no modo INPUT_PULLUP. O modo INPUT explicitamente desabilita os pullups internos. Exemplo: int ledPin = 13; // LED conectado no pino 13 void setup(){ pinMode(ledPin, OUTPUT); // definindo o pino como output } void loop(){ digitalWrite(ledPin, HIGH); // liga o LED delay(1000); // aguarda um segundo digitalWrite(ledPin, LOW); // desliga o LED delay(1000); // aguarda um segundo }
  • 144.
    digitalWrite() Escreve o valorde HIGH ou LOW em um pino digital. Se o pino for configurado como OUTPUT com pinMode(), essa tensão será aplicada a seu valor correspondente: 5V (ou 3.3V nas placas de 3.3V) para HIGH, 0V (ground) para LOW. O pino é configurado como INPUT, digitalWrite() irá habilitar (HIGH) ou desabilitar (LOW) o resistor interno pullup no pino. Recomenda-se configurar o pinMode() como INPUT_PULLUP para permitir que a resistência interno pull-up. Ao configurar pinMode() como OUTPUT, e conectar o LED a um pino, ao chamar digitalWrite(HIGH), o LED pode acender de forma fraca. Sem explicitar o modo do pino, digitalWrite() irá habilitar os resistores internos pull-up, que age como um resistor largo limitador de corrente.
  • 145.
    Exemplo: int ledPin =13; // LED conectado ao pino digital 13 void setup(){ pinMode(ledPin, OUTPUT); // define o pino digital como output } void loop(){ digitalWrite(ledPin, HIGH); // liga o LED delay(1000); // aguardar um segundo digitalWrite(ledPin, LOW); // desliga o LED delay(1000); // aguardar um segundo }
  • 146.
    digitalRead() Faz a leiturade um pino digital especí co, tanto HIGH ou LOW. Exemplo: int ledPin = 13; // LED conectado ao pino digital 13 int inPin = 7; // botão conectado ao pino digital 7 int val = 0; // variável para guardar o valor lido void setup(){ pinMode(ledPin, OUTPUT); // define o pino digital 13 como output pinMode(inPin, INPUT); // define o pino digital 7 como input } void loop(){ val = digitalRead(inPin); // faz a leitura do pino definido como input digitalWrite(ledPin, val); }
  • 147.
    Entrada e saídaanalógica analogReference() Configura a tensão de referência usada na entrada analógica (isto é, o valor usado como topo do intervalo).
  • 148.
    Parâmetros O parâmetro typedefine a fonte de tensão de referência, e pode ser um dos seguintes valores, dependendo da placa Arduino: DEFAULT: Usa a tensão de alimentação da placa (5V ou 3.3V, dependendo do modelo). INTERNAL: Usa uma referência interna específica (geralmente 1.1V ou 2.56V, dependendo da placa). EXTERNAL: Permite conectar uma tensão de referência externa ao pino AREF da placa.
  • 149.
    Se você estiverusando um sensor que fornece uma saída analógica de até 1.1V, pode usar: void setup() { analogReference(INTERNAL); // Define a tensão de referência como 1.1V interna } void loop() { int leitura = analogRead(A0); // Lê o pino analógico A0 }
  • 150.
    analogRead() Faz a leiturade valores de um pino analógico. A placa possui 6 canais (8 canais no Mini e Nano, 16 no Mega) de 10 bits no conversor analógico para digital. Isso significa que as tensões de entrada serão mapeadas em valores entre 0 e 5 volts para valores inteiros de 0 a 1023. Isso gera uma resolução entre as leituras de: 5 volts por 1024 unidades, ou 0,0049 volts (4,9 mV) por unidade. O alcance e a resolução de entrada podem ser alterados usando analogReference(). Demora cerca de 100 microssegundos (0,0001s) para ler uma entrada analógica, então a taxa máxima de leitura é de cerca de 10.000 vezes por segundo.
  • 151.
    Exemplo int analogPin =3; int val = 0; // variável para guardar o valor lido void setup(){ Serial.begin(9600); } void loop(){ val = analogRead(analogPin); // pino de entrada de leitura Serial.println(val); }
  • 152.
    analogWrite() – PWM Escreveum valor analógico (onda PWM) para o pino. Pode ser usada para acender um LED variando sua intensidade luminosa ou acionar um motor em diferentes velocidades. Depois de chamar analogWrite(), o pino vai gerar uma onda quadrada constante do ciclo de trabalho especificado até a próxima chamada analogWrite() (ou uma chamada digitalRead() ou digitalWrite() no mesmo pino). A frequência do sinal PWM na maioria dos pinos é aproxidamente 490 Hz. No Uno e placas similares, os pinos 5 e 6 têm uma frequência de aproximadamente 980 Hz. Na maioria dos Arduinos (com ATmega168 ou ATmega328), a função funciona nos pinos 3, 5, 6, 9, 10, and 11. No Arduino Mega, funciona nos pinos 2 - 13 e 44 - 46. Em Arduinos mais antigos com ATmega8 só funciona analogWrite() nos pinos 9, 10, e 11. No Arduino Due analogWrite() funciona nos pinos 2 até 13, somados aos pinos DAC0 e DAC1. Ao contrário dos pinos PWM, DAC0 e DAC1 são conversores Digital para Analógico, e funcionam como verdadeiros pinos de saída analógicos. Não é necessário chamar pinMode() para determinar o pino como de saída antes de chamar analogWrite(). A função analogWrite() não tem relação com os pinos analógicos ou com a função analogRead().
  • 153.
    Exemplo: int ledPin =9; // LED conectado ao pino digital 9 int analogPin = 3; // potenciômetro conectado ao pino analógico 3 int val = 0; // variável para armazenar o valor lido void setup(){ pinMode(ledPin, OUTPUT); // determina o pino como de saída } void loop(){ val = analogRead(analogPin); // lê o pino de entrada analogWrite(ledPin, val / 4); // analogRead valores vão de 0 à 1023, //analogWrite vão de 0 à 255 }
  • 154.
    Temporização millis() Retorna o númeroem milisegundos desde que o Arduino começou a rodar o programa em questão. Este número vai sobrecarregar (voltar para zero), aproximadamente após 50 dias.
  • 155.
    Exemplo: unsigned long time; voidsetup(){ Serial.begin(9600); } void loop(){ Serial.print("Time: "); time = millis(); //printa o tempo desde que o programa começou Serial.println(time); //espera um segundo para não enviar grande quantidade de dados delay(1000); }
  • 156.
    delay() Pausa o programana quantidade de tempo (em milisegundos) especificada como parâmetro. (Há 1000 milisegundos em um segundo).
  • 157.
    int ledPin =13; // LED conectado ao pino digital 13 void setup(){ pinMode(ledPin, OUTPUT); // define o pino digital como output } void loop(){ digitalWrite(ledPin, HIGH); // liga o LED delay(1000); // aguardar um segundo digitalWrite(ledPin, LOW); // desliga o LED delay(1000); // aguardar um segundo