Escolar Documentos
Profissional Documentos
Cultura Documentos
Microcontroladores
e Microprocessadores
Prof. Kevin Rabelo Costa
Indaial – 2021
1a Edição
Copyright © UNIASSELVI 2021
Elaboração:
Prof. Kevin Rabelo Costa
C837t
ISBN 978-65-5663-735-8
ISBN Digital 978-65-5663-736-5
CDD 004
Impresso por:
Apresentação
Caro acadêmico, apresentamos a você o livro de Microcontroladores
e Microprocessadores. Através dele, você terá acesso ao conhecimento
necessário para realizar os seus primeiros projetos e acompanhar uma área
que é base para as mais recentes inovações tecnológicas, como: internet das
coisas, robótica, monitoramento de dados, entre muitos outras. Esperamos
que esse livro didático seja um diferencial no seu futuro profissional.
Você já me conhece das outras disciplinas? Não? É calouro? Enfim, tanto para
você que está chegando agora à UNIASSELVI quanto para você que já é veterano, há novi-
dades em nosso material.
O conteúdo continua na íntegra, mas a estrutura interna foi aperfeiçoada com nova diagra-
mação no texto, aproveitando ao máximo o espaço da página, o que também contribui
para diminuir a extração de árvores para produção de folhas de papel, por exemplo.
Todos esses ajustes foram pensados a partir de relatos que recebemos nas pesquisas
institucionais sobre os materiais impressos, para que você, nossa maior prioridade, possa
continuar seus estudos com um material de qualidade.
Acesse o QR Code, que levará ao AVA, e veja as novidades que preparamos para seu estudo.
REFERÊNCIAS....................................................................................................................................... 66
REFERÊNCIAS..................................................................................................................................... 131
REFERÊNCIAS..................................................................................................................................... 192
UNIDADE 1 —
OBJETIVOS DE APRENDIZAGEM
A partir do estudo desta unidade, você deverá ser capaz de:
PLANO DE ESTUDOS
Esta unidade está dividida em três tópicos. No decorrer da unidade,
você encontrará autoatividades com o objetivo de reforçar o conteúdo
apresentado.
CHAMADA
1
2
UNIDADE 1 TÓPICO 1 —
1 INTRODUÇÃO
A automatização de tarefas, ou as rotinas, como é mais comum falarmos,
estão presentes na vida de todos. Você, todos os dias acorda e, provavelmente,
escova os dentes, arruma a cama e toma café da manhã, antes de iniciar seus estudos
ou outra atividade. As rotinas são ações sequenciais realizadas diariamente,
que você realiza muitas vezes sem perceber e de forma automática. Da mesma
forma que uma rotina, como ir à academia todos os dias, pode ser aprendida,
as máquinas podem ser programadas para executar uma sequência de ações
ininterruptamente. Hoje isso já é extremamente comum: você programa o seu
despertador para tocar todos os dias no mesmo horário, programa a sua geladeira
para manter acima de uma determinada temperatura, ou a sua Alexa para dizer
“Oi” quando você chegar em casa. Mas nem sempre foi assim. As primeiras
máquinas consideradas programáveis não eram nem elétricas. Como você vai
ver nesse tópico foi preciso longos anos de estudo para chegar onde chegamos.
Mesmo a humanidade já tendo avançado bastante, a ponto de chegarmos a
miniaturizações como o celular, ainda existe espaço para muito mais.
3
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
2 OS PRIMEIROS COMPUTADORES
Em vez de já irmos explorando os primeiros computadores, é interessante
primeiro entendermos por que eles surgiram. Como vimos, o nosso dia a dia
é formado de rotinas, em outras palavras, atividades repetitivas, que fazemos
sempre da mesma forma e normalmente com os mesmos materiais. Ao longo da
história a tendência sempre foi de melhorar mais esses processos, de forma a deixá-
los mais rápidos, menos onerosos e mais simples. Foi a partir dessa tendência de
facilitar processos que surgiram as primeiras máquinas programáveis. A primeira
delas, conforme afirma Pereira (2009), foram os teares, que eram programadas
através de cartões perfurados para repetir padrões em tecidos. Essas máquinas
são consideradas as percussoras dos computadores justamente por exibir esse
padrão programado e repetitivo que vemos ainda hoje em vários códigos
computacionais.
4
TÓPICO 1 — HISTÓRIA DOS MICROCONTROLADORES E MICROPROCESSADORES
NTE
INTERESSA
Apesar de os relés não terem sido utilizados por muito tempo na construção
de computadores, eles são utilizados ainda hoje, principalmente para o chaveamento de
cargas em corrente alternada. Um exemplo interessante é o acionamento remoto de uma
lâmpada através de um microcontrolador. O relé permite, nesse caso, o acionamento de
uma carga em corrente alternada, normalmente conectada em 220V ou 110V, através de
um pulso de 5V gerado pelo microcontrolador.
6
TÓPICO 1 — HISTÓRIA DOS MICROCONTROLADORES E MICROPROCESSADORES
NOTA
DICAS
7
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
4 OS PRIMEIROS MICROPROCESSADORES
No final dos anos 1960, os transistores passaram a ser utilizados na
construção dos mais diferentes tipos de circuitos lógicos. Entre eles, começaram
a surgir dispositivos capazes de executar sequência de instruções, assim como os
microprocessadores modernos. Inicialmente, esses circuitos eram formados pela
conexão discreta de diversos circuitos integrados e transistores. Só no início da
década de 1970 surgiram os primeiros microprocessadores totalmente integrados
e encapsulados em um único chip, como conhecemos hoje (TECHTUDO, 2012).
8
TÓPICO 1 — HISTÓRIA DOS MICROCONTROLADORES E MICROPROCESSADORES
5 MICROCONTROLADORES
Você já deve ter percebido que nos computadores modernos os
microprocessadores não atuam de forma autônoma, sendo necessários
componentes externos como: memória RAM (para armazenamento de dados
e variáveis) e memória ROM (para armazenamento de programas), além de
geradores de clock externo, endereçamento, dispositivos de regulação, entre
outros. A partir dessa necessidade, surgiu ainda em meados de 70, o primeiro
MCU (Micro Controller Unit), ou microcontroladores como passaremos a chamar
aqui. O primeiro microcontrolador foi inventado pela Texas Instrument e era
basicamente o encapsulamento de um microprocessador com memórias RAM e
ROM integradas (AUGARTEN, s.d.).
9
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
6 ESTADO DA ARTE
As aplicações para microcontroladores e microprocessadores crescem
dia após dia, do mesmo modo que a pesquisa nessas áreas. A necessidade por
miniaturização e eficiência trouxe a eletrônica a um nível fantástico nos dias de
hoje. Em menos de 70 anos, computadores passaram de dispositivos imensos
para pequenas telas que carregamos no nosso bolso, e não para por aí. A seguir
é apresentado o estado da arte de microcontroladores e microprocessadores, o
que nada mais é do que estado atual de conhecimento nessa área. Por ser uma
área muito grande e com diversas ramificações, principalmente, no que se
refere às aplicações dessas tecnologias, focaremos nos lançamentos recentes de
microprocessadores e microcontroladores que estão ao nosso alcance, e que como
profissionais da área temos grandes chances de um dia chegar a trabalhar com
eles.
DICAS
que os dos servidores. Como você verá na sua trajetória profissional, cada centavo
economizado na escolha correta de um componente eletrônico, significa uma
economia de milhares em equipamentos que são produzidos em série.
E
IMPORTANT
12
TÓPICO 1 — HISTÓRIA DOS MICROCONTROLADORES E MICROPROCESSADORES
13
RESUMO DO TÓPICO 1
Neste tópico, você aprendeu que:
14
AUTOATIVIDADE
I- Teares.
II- Pascaline.
III- Z1.
IV- ENIAC.
V- i4004.
15
( ) Um dos primeiros computadores a válvula a ser construído, atingindo
velocidades de até 5 kHz.
16
7 Dependo da foram como são construídos, os microcontroladores podem
ser utilizados nas mais diversas aplicações, sendo esse um fator decisivo
na escolha de um componente ou outro. Sobre os microcontroladores
utilizados na indústria aeroespacial e militar, disserte acerca do que esses
dispositivos possuem de diferente dos convencionais.
17
18
UNIDADE 1 TÓPICO 2 —
ARQUITETURA DE UM MICROPROCESSADOR
1 INTRODUÇÃO
Como estudamos no Tópico 1, os microprocessadores são parte
fundamental dos computadores modernos, todo o processamento de dados,
cálculos e requisições para dispositivos periféricos passam por ele.
19
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
Dito isso, vamos analisar como ela funciona. A ULA possui basicamente
duas entradas: uma para os registradores e outra para a unidade de controle, e
duas saídas: uma de flags e a outra de registradores. Sempre que uma operação for
realizada, os dados a serem calculados são apresentados através de registradores
(que como veremos mais adiante armazenam esses valores), ao passo que a
unidade de controle informa o que deve ser feito com eles. A ULA realiza então
essa operação e o resultado é armazenado novamente em um registrador. Ao
final da operação uma flag pode ainda ser gerada. As flags normalmente passam
alguma informação ao bloco que receberá o resultado. Ao executar uma operação
de soma em que o resultado for maior que o espaço destinado para o seu
armazenamento, por exemplo, uma flag de overflow (transbordamento, em uma
tradução direta) é gerada informando que o resultado não foi corretamente salvo
no registrador por conta do espaço disponível ser insuficiente.
Dessa forma, a ULA funciona com uma calculadora que recebe comandos
através da unidade de controle e entrega esses dados através de registradores as
demais partes do microprocessador.
20
TÓPICO 2 — ARQUITETURA DE UM MICROPROCESSADOR
3 UNIDADE DE CONTROLE
Chegamos à unidade de controle do microprocessador. Você tem ideia
do que essa unidade faz? Bem, a unidade de controle é quem gera os gatilhos
para que ações sejam tomadas dentro do processador. Basicamente, a unidade de
controle emite sinais para dispositivos externos ao processador como: periféricos
e memórias, e internamente para a ULA, de modo que determinada função interna
seja realizada, recebendo como entrada instruções, flags e sinais de controles de
fontes externas, através dos registradores. Em termos práticos podemos dizer que
a unidade de controle é quem garante a correta execução das tarefas, ou instruções
como passaremos a chamar daqui em diante, no microprocessador. Veremos a
seguir como as instruções são processadas, dessa forma, entenderemos melhor
como a unidade de controle funciona.
LEMBRETE
Como você deve se lembrar, uma das entradas da ULA vem justamente da
unidade de controle. É ela que informa a ULA o que deve ser feito com os dados nos
registradores.
Pode parecer complexo, mas na verdade tudo o que foi falado aqui pode
ser resumido na Figura 7.
21
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
NOTA
22
TÓPICO 2 — ARQUITETURA DE UM MICROPROCESSADOR
4 REGISTRADORES
Não sei se você percebeu, mas falamos bastante de registradores nos
dois subtópicos anteriores, isso porque eles também desempenham um papel
fundamental no funcionamento de um processador. Para entendermos os
registradores, precisamos saber primeiramente que eles tratam de memórias, ou
seja, são capazes de armazenar bits durante o funcionamento do processador.
Em uma escala hierárquica, os registradores são as memórias mais compactas,
rápidas e caras que existem em um computador. Mas por que elas precisam ser
tão rápidas assim, você deve se perguntar. Pois bem, são os registradores que
guardam os dados que são processados em todo o microprocessador. Por exemplo,
os operadores de uma soma realizada pela ULA? São salvas em registradores.
O resultado dessa operação? Também. O byte que informa a próxima instrução
23
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
NOTA
5 BARRAMENTOS
Tente imaginar agora como todos esses dados vão para lá e para cá.
Como a ULA recebe os operandos, como a unidade de controle é informada que
um overflow aconteceu, ou como os dados são passados para os registradores.
Obviamente toda essa informação tem que ter um meio para ser transmitida, e
este meio são os barramentos. Os barramentos são linhas que interligam os mais
diversos dispositivos em um computador. Memórias, periféricos e placas de vídeo
são todas conectadas ao processador através de barramentos. Internamente, o
processador possui barramentos para endereços, para dados e para controle, que
interligam a ULA, a unidade de controle e os registradores.
24
TÓPICO 2 — ARQUITETURA DE UM MICROPROCESSADOR
6 SET DE INSTRUÇÕES
Falamos bastante anteriormente sobre as instruções. Como você deve ter
percebido as instruções são comandos que são interpretados pelo processador a
fim de executar uma determinada função, seja a divisão entre dois operandos, ou
mover o conteúdo de um registrador para outro. Assim, podemos dizer que as
instruções são a forma mais primitiva de um código de programação. Isso significa
que todo código que desenvolvermos utilizando linguagens de alto nível como C,
Phyton, Java, será convertido pelo compilador em forma de instruções que serão
interpretadas pelo processador. Para todos os efeitos, as linguagens de alto nível
são desenvolvidas para facilitar a vida do programador e aproximar mais ainda a
forma como nos comunicamos com a forma que de programar. Contudo, mesmo
programando sempre em alto nível, as instruções nos dizem muito sobre como
o microprocessador funciona, e são bastante importantes para você que está se
habituando com eles.
NOTA
26
TÓPICO 2 — ARQUITETURA DE UM MICROPROCESSADOR
Bem mais simples, não acha? Com esses exemplos podemos ver a diferença
entre as linguagens de baixo e alto nível. Enquanto o Assembly foca muito mais
em mover dados para registradores, a linguagem de alto nível utiliza variáveis,
tornando a forma algébrica nesse último caso bem mais simples.
DICAS
27
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
28
TÓPICO 2 — ARQUITETURA DE UM MICROPROCESSADOR
Perceba como reduzimos duas operações em apenas uma. Muito bom, não
é? Contudo, apesar da vantagem para o programador que faz mais escrevendo
menos, instruções com três endereços são instruções maiores, com mais campos, e
que requerem registradores maiores para armazenar e executar essas instruções.
Quanto maior o registrador, como você já deve imaginar, mais caro o processador.
6.4.1 Números
O que você precisa entender aqui é que a representação dos números em
um computador vai mais além do que representar algarismos. Os números em
um computador são utilizados também para representar endereços, contadores
e o tamanho do campo das instruções. No entanto, ao contrário dos números
utilizados na matemática, que são um conjunto infinito, os números em um
computador têm um limite. Esse limite vai tanto com relação à magnitude dos
números inteiros como também a precisão (em termos práticos, a quantidade
29
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
6.4.3 Caracteres
Frequentemente há a necessidade de se representar textos, usando
sistemas de computação. Esses dados são complemente compreensíveis para o
usuário, mais difícil de serem representados pelo computador, basicamente pela
natureza binária dele. Contudo, como você está lendo esse texto possivelmente
em um computador, é de se imaginar que alguém já propôs uma solução para
isso. A solução veio através da representação de cada caractere por um conjunto
de bits. Na tabela ASCII (American Standard Code for Information Interchange), por
exemplo, cada caractere é representado por uma sequência única de 7 bits, sendo
possível até 128 caracteres diferentes.
30
TÓPICO 2 — ARQUITETURA DE UM MICROPROCESSADOR
6.5 ENDEREÇAMENTO
Estudando os elementos de instrução (Tópico 6.1), nós temos a tentação de
achar que o valor dos operadores pode ser diretamente informado na instrução,
ou até diretamente obtidos em um endereço de memória, contudo não são essas
as únicas formas de endereçamento.
• Imediato.
• Imediato.
• Direto.
• Indireto
• Por registrador.
• Indexado.
• Base mais deslocamento.
6.5.1 Imediato
Esse é o modo de endereçamento mais simples que veremos. Na Figura 9,
quando adicionamos 0x0A ao valor de W, estávamos endereçando diretamente
o valor 0x0A como operador. Desse modo, no endereçamento imediato sempre
apresentamos diretamente o operando na instrução. Apesar da praticidade, o valor
que endereçamos (operando) deve sempre ser menor que o valor máximo para
o operador, ou seja, caso tenhamos 6 bits de operador na instrução, é impossível
endereçar no modo imediato um valor com 8 bits. A vantagem desse método,
como já vimos, é que um subpasso na execução da instrução é economizado,
sendo o tipo de endereçamento mais rápido. Dessa forma, podemos utilizá-lo
na inicialização de contadores e na maioria das operações com números inteiros.
6.5.2 Direto
No modo de endereçamento direto, um endereço da memória é
referenciado no campo do operador. Como você deve imaginar, esse endereço
diz respeito ao local onde o processador deve procurar pelo operando. Dessa
forma, podemos lidar com números binário bem maiores, uma vez que a memória
31
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
é bem mais ampla que o campo do operador. Contudo, ainda temos aqui uma
limitação em relação ao endereço que pode ser referenciado no campo operador.
Com o nosso operador de 6 bits, por exemplo, só poderíamos referenciar até 63
endereços de memória, o que é muito pouco se considerarmos a quantidade de
endereços de memória nos processadores modernos.
6.5.3 Indireto
Quando o endereço do operando é muito maior que o campo reservado
para o operador, devemos utilizar o modo de endereçamento indireto. Nesse
modo, é passado ao operador um endereço de memória, que por sua vez se
refere a outro endereço de memória, onde o operando está armazenado. O
endereço que se refere, ou “aponta” para onde o operando está é conhecido como
ponteiro. Como vimos, nesse caso temos a necessidade do subpasso indireto, e
consequentemente, maior demora para a execução da instrução.
6.5.5 Indexado
A fim de entendermos melhor o modo indexado, se faz interessante
estabelecermos uma analogia. Imagine as vagas de um estacionamento de um
shopping center. Devido à quantidade de carros, esse estacionamento foi divido
em blocos indexados como A, B, C e D. Dessa forma, cada carro estacionado é
identificado através da identificação do bloco, e a posição da vaga. Sendo A0 a
primeira vaga do estacionamento A, por exemplo. Essa forma é especialmente
útil pois em vez de identificarmos, a última vaga como 180 identificamos como
D60, entendido? Pois bem, vamos trazer esse exemplo para a realidade dos
computadores.
33
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
34
TÓPICO 2 — ARQUITETURA DE UM MICROPROCESSADOR
35
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
Assim como nas arquiteturas CISC e RISC, aqui também não é possível
indicar qual seria a melhor arquitetura de dados, uma vez que temos pontos
positivos e negativos em cada uma das arquiteturas. Enquanto a arquitetura Von
Neumann possui uma simplicidade de implementação menor, principalmente da
unidade de controle e dos barramentos, a arquitetura Harvard é mais eficiente na
execução das instruções. Dessa forma, a arquitetura Von Neumann é empregada,
na maior parte do tempo em computadores de uso pessoal, como desktops e
notebooks, e a arquitetura Harvard em microcontroladores e DSP (Digital Signal
Processing) (KHILLAR, 2018).
36
RESUMO DO TÓPICO 2
Neste tópico, você aprendeu que:
37
• Apesar de já estarem presentes nos primeiros computadores, as arquiteturas
Von Neumann e Harvard são utilizadas até hoje dependendo da aplicação. A
principal diferença entre elas está na presença de um barramento único para
dados e instruções na arquitetura Von Neumann, enquanto na arquitetura
Harvard um barramento duplo é observado.
38
AUTOATIVIDADE
I- Imediato
II- Direto
III- Indireto
39
IV- Por registrador
V- Indexado
40
UNIDADE 1 TÓPICO 3 —
O MICROCONTROLADOR ATMEGA328
1 INTRODUÇÃO
A necessidade por componentes eletrônicos pequenos e versáteis fez
com que os microcontroladores se destacassem no desenvolvimento de projetos.
Principalmente quando falamos de sistemas embarcados, robótica e até em
aplicações médicas os microcontroladores são unanimidade, por possuírem
agregados todos os componentes necessários para o desenvolvimento dessas
aplicações, tais como, microprocessador, memória RAM e ROM, temporizadores
e circuitos de clock. A grande maioria possui ainda funcionalidades como:
memórias EEPROM e flash, conversores AD, timers, controle PWM, e RTC.
41
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
2 FAMILIA AVR
O conceito de família em microprocessadores não é recente. Desde os
primórdios, os dispositivos de uma mesma família possuíam características
em comum e diferiam na maior parte do tempo em recursos adicionais como:
memória ou capacidade de processamento, ou mais recentemente em recursos
auxiliares, como: presença de módulo de comunicação WiFi, Bluetooth ou display
de LED. Dessa forma, o estudo de um indivíduo facilita bastante o conhecimento
da família como um todo.
42
TÓPICO 3 — O MICROCONTROLADOR ATMEGA328
3 ARQUITETURA
Agora que temos uma visão geral da família AVR, vamos nos aprofundar
no estudo do microcontrolador Atmega328, presente na placa de desenvolvimento
Arduino Uno, conforme já comentamos. A melhor forma de estudar qualquer
43
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
44
TÓPICO 3 — O MICROCONTROLADOR ATMEGA328
FONTE: <https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-
-PA-328-P-DS-DS40002061B.pdf>. Acesso em: 8 abr. 2021.
45
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
4 MEMÓRIAS DE PROGRAMA
Como já sabemos, existem tipos diferentes de memórias em um
microcontrolador. Termos como EEPROM, flash, SRAM podem causar uma certa
confusão, então, vamos começar apresentando essas definições.
NTE
INTERESSA
46
TÓPICO 3 — O MICROCONTROLADOR ATMEGA328
47
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
5 MEMÓRIA DE DADOS
Partindo da definição que vimos na seção anterior, vamos explorar a
memória SRAM presente no Atmega328. No dispositivo, os 2 KB de memória SRAM
presentes são divididos entre os 32 registradores de uso geral, 64 registradores
para dispositivos externos, e como o Atmega328 possui uma capacidade de
periféricos maior que esses 64 registradores seriam capazes de suportar, mais
160 registradores adicionais são destinados para esse fim. As 2048 localizações
de memória restantes endereçam os dados temporários no microcontrolador. A
Figura 16 apresenta a divisão da memória SRAM conforme descrevemos aqui.
48
TÓPICO 3 — O MICROCONTROLADOR ATMEGA328
6 REGISTRADORES
Como você deve se lembrar, estudamos anteriormente os registradores
como memórias muito rápidas que são responsáveis pelo armazenamento de
variáveis dentro do processador. Essa informação não deixa de ser verdade, mas
acontece que nos microcontroladores os registradores são salvos também na
memória SRAM, sendo eles, na verdade, trechos dela. Dessa forma, cada trecho
da memória SRAM é divido em trechos onde são implementados registradores.
Por exemplo, nominalmente, o intervalo de memória que vai do 0x0000 ao 0x001F
(lembre-se, endereços de memória sempre em hexadecimal) na memória SRAM
do Atmega328 é reservada para os 32 registradores de uso geral, que como o
nome sugere, podem armazenar quaisquer valores, desde que caibam no espaço
definido.
Nome do Endereço
Descrição
Registrador na SRAM
Esse registrador pode ser lido ou escrito, ao
PORTB 0x25
escrever o estado dos pinos é alterado.
Registrador utilizado para dizer se os pinos
associados ao PORTB serão de saída ou entrada.
DDRB 0x24
Escrever “0” define o pino como entrada e “1”
como saída.
Registrador apenas de leitura. Ao ler o registrador
PINB 0x23 PINB são retornados os estados do próprio
registrador PORTB.
FONTE: O autor (2021)
NOTA
50
TÓPICO 3 — O MICROCONTROLADOR ATMEGA328
Caso o código da Figura 17 não tenha parecido tão simples para você,
tenha calma! O conceito da programação em C para microcontroladores será visto
mais à frente nesse livro, o que queremos entender aqui é como os registradores
funcionam. Dessa forma, vimos duas operações com registradores nesse código,
vamos analisar cada uma delas. Na primeira o valor 0xFF em hexadecimal foi
atribuído para o registrador DDRB, o que na prática significa que mandamos
o número 11111111 em binário para dentro do registrador, como cada bit do
registrador faz referência a um pino de PORTB, o que fizemos aqui foi configurar
todos os pinos de PORTB, ou seja, de PB0 a PB7 como saída. Na segunda
operação, enviamos o número 00000001 em binário para dentro de PORTB, que
como você já deve imaginar ativa apenas o pino PB0 do microcontrolador. E, caso
você esteja curioso, o operador while (do inglês enquanto) executa um bloco de
código enquanto uma determinada condição (entre parênteses) for verdadeira.
No nosso código exemplo, a condição 1 é sempre satisfeita e o código será sempre
executado de maneira ininterrupta.
O que vimos aqui é uma pequena fração das configurações que podem ser
executadas pelos registradores. Quase tudo dentro de um microcontrolador pode
ser configurado através de um registrador, desde a interface com dispositivos
externos até as interrupções que acontecem durante a operação dele.
51
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
7 INTERRUPÇÕES
Apesar não de parecer, as interrupções não são um conceito novo neste
livro. Você deve lembrar que no Tópico 2 estudamos o subpasso de interrupção,
em que o microprocessador para sua atividade atual e trata um determinado
evento que está acontecendo. Nos microcontroladores esse recurso é amplamente
utilizado por vários módulos. Vamos nos atentar aqui aos contadores, onde
poderemos ver mais claramente como configurar e tratar uma interrupção.
52
TÓPICO 3 — O MICROCONTROLADOR ATMEGA328
DICAS
8 PINAGEM
Obviamente, nem tudo é interno ao microcontrolador. Apesar de toda
a “magia” ocorrer dentro dele, o microcontrolador veio para fazer interface
com o meio externo, seja recebendo dados através de sensores, ou enviando
informações e comandos para motores, LEDs, e outros atuadores. Apesar de
muitos microcontroladores já possuírem tecnologias wireless como WiFi e
Bluetooth integradas, a forma mais utilizada de se comunicar com o meio externo
continua sendo através dos pinos do microcontrolador. Quando falamos da
pinagem nos aproximamos mais do hardware da aplicação, uma vez que teremos
que considerar quais pinos possuem melhor desempenho, adaptabilidade,
ou mesmo os recursos que precisamos para interligar cada hardware externo.
Contudo, temos que levar em consideração também como cada pino impacta
o software ou vice-versa. Quando estamos estudando os registradores, aqui
mesmo nesse tópico, tivemos que entender quais pinos estavam associados ao
registrador PORTB para assim configurá-los, via software, como entrada ou
saída. Devido à importância da pinagem para o desenvolvimento de qualquer
projeto, analisaremos nesse tópico os pinos do microcontrolador Atmega328, de
modo a entender como cada pino funciona e como está interconectado com os
recursos principais do microcontrolador. O mapeamento dos pinos do Atmega328
é apresentado na Figura 18.
53
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
54
TÓPICO 3 — O MICROCONTROLADOR ATMEGA328
55
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
LEITURA COMPLEMENTAR
Equipe Embarcados
Introdução
Antes de apontarmos as linguagens para sistemas embarcados, precisamos,
antes, entender o que é um sistema embarcado e a sua diferença para um sistema
desktop.
Veja nesse estudo que foi apontado pelo público que a linguagem C é
usada na maioria dos projetos onde atuam, mais de 70%. Não é uma surpresa,
visto as suas características, que serão mostradas logo a seguir. Para efeito de
comparação e conhecimento, confiram também o índice TIOBE, que mede a
popularidade das linguagens de programação pelo mundo uma vez por mês.
56
TÓPICO 3 — O MICROCONTROLADOR ATMEGA328
Assembly
Como o contato direto com o hardware é uma característica frequente
encontrada em sistemas embarcados, o contato com a linguagem Assembly torna-
se praticamente inevitável.
C
A linguagem C foi criada em 1973 por Dennis Ritchie a partir da linguagem
B (criada por Ken Thompson) e BCPL, com a finalidade de evitar futuras reescritas
do sistema operacional UNIX em Assembly quando um novo hardware fosse
criado para ser suportado.
Ela tem sido evoluída, visto que o seu primeiro padrão foi estabelecido
em 1989/1990 pela ANSI e ISO, conhecido como C89 ou C90. O padrão mais atual
é o C11, estabelecido pela ISO em 2011.
57
UNIDADE 1 — HISTÓRIA E ARQUITETURA DOS MICROCONTROLADORES E MICROPROCESSADORES
C#
A linguagem de programação C# foi desenvolvida com o propósito de
ser simples, moderna, de propósito-geral e orientada a objetos, com capacidades
tais como tratamento de exceções, coleta de lixo de memória (garbage collection),
e foi projetada tendo em vista a capacidade de ser adequada para a escrita de
aplicações nativas e embarcadas.
Tanto é que tão logo quanto saiu, já era então possível escrever aplicações
em C# para dispositivos com WindowsCE, e anos depois para os famosos
PocketPCs, chegando ao ponto em que estamos com sistemas Windows Embedded,
Windows Phone e Windows RT, todos eles compatíveis com a plataforma .Net, e,
consequentemente, compatíveis com programas escritos em C#.
58
TÓPICO 3 — O MICROCONTROLADOR ATMEGA328
Java
Desenvolvida por James Gosling na Sun Microsystems, em 1995, Java
nasceu com o objetivo de ser uma linguagem simples, robusta, orientada a objetos,
independente de arquitetura, interpretada e dinâmica. Um programa compilado
deve ser executado em qualquer arquitetura, sem necessidade de recompilação
(“write once, run anywhere” – WORA).
Python
É uma linguagem moderna, interpretada, funcional, orientada a objetos,
com tipagem dinâmica e forte, criada por Guido van Rossum em 1991. O que
ouvimos com frequência quando se comenta de Python, principalmente no
mundo dos embarcados, é: “Mas Python é lento, C é mais rápido!”.
Mas Python pode chegar lá embaixo também, com, por exemplo, pyserial
para comunicação serial e pymodbus para comunicação Modbus (que por sinal
utiliza pyserial). Facilmente você pode interagir com o GPIO da sua Raspberry
Pi, Beaglebone Black, Intel Galileo, usando módulos prontos como rpi.GPIO,
Adafruit_BBIO, PinGO (esta suporta todas as demais), além de módulos para I2C
(SMBus), SPI (spidev), CAN (python-can), entre outros.
Conclusões
É incontestável que o uso de C dentre as linguagens para sistemas
embarcados é predominante e que tem seu espaço garantido por muito tempo,
dadas as características e requisitos exigidos pela maioria dos projetos eletrônicos
atuais. Além disso, tem sido utilizada para se criar novas linguagens.
60
RESUMO DO TÓPICO 3
Neste tópico, você aprendeu que:
61
• Associados aos pinos estão muitos dos recursos internos do microcontrolador,
cabendo ao programador ajustar através do registrador específico como cada
pino será utilizado.
CHAMADA
62
AUTOATIVIDADE
I- Program Counter
II- Watchdog timer
III- I/O Lines
IV- SPI Unit
V- Analog Comparator
63
( ) registrador responsável por armazenar o endereço da próxima instrução
a ser executada pelo microcontrolador.
64
d) ( ) As marcações VCC e GND indicam como o microcontrolador deve ser
conectado com a fonte de alimentação, sendo necessário atenção apenas
com relação à tensão máxima de alimentação.
65
REFERÊNCIAS
ALECRIM, E. Memórias RAM e ROM. 2011. Disponível em: https://www.
infowester.com/memoria.php. Acesso em: 21 abr. 2021.
66
MONTEIRO, M. A. Introdução à organização de computadores. 5. ed. Rio de
Janeiro: Livros Técnicos e Científicos, 2007.
PATTERSON, D. A.; DITZEL, D. R. The case for the reduced instruction set
computer – computer architecture news. Vol. 8, n. 6 ,1980. Disponível em:
https://dl.acm.org/doi/10.1145/641914.641917. Acesso em: 15 jul. 2021.
ZHU, Y.; XIE, L.; YUAN, T. Monitoring system for forest fire based on wireless
sensor network. Proceedings of the 10th World Congress on Intelligent Con-
trol and Automation, Beijing, v. 1, n. 1, p. 4245-4248, jul. 2012.
67
68
UNIDADE 2 —
OBJETIVOS DE APRENDIZAGEM
A partir do estudo desta unidade, você deverá ser capaz de:
PLANO DE ESTUDOS
Esta unidade está dividida em três tópicos. No decorrer da unidade,
você encontrará autoatividades com o objetivo de reforçar o conteúdo
apresentado.
CHAMADA
69
70
UNIDADE 2
TÓPICO 1 —
1 INTRODUÇÃO
Pode não parecer, mas a programação se baseia em uma lógica bem
próxima com a que pensamos e tomamos decisões. Você, provavelmente, já
pensou coisas do tipo: “Se estiver chovendo amanhã eu levo um guarda-chuva”.
Esse tipo de estrutura condicional, “se isso acontecer, faça aquilo”, é uma das que
ocorrem com bastante frequência na programação e uma das que vamos estudar
durante o tópico. Apesar de a lógica ser a mesma para qualquer linguagem de
programação, algumas são mais adequadas para determinados propósitos
que outras. O desenvolvimento web, por exemplo, utiliza linguagens como
Javascript e PHP, que já não são vistas tão facilmente para a programação de
microcontroladores.
71
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
2 LÓGICA DE PROGRAMAÇÃO
Antes de conhecermos em detalhes a linguagem C++, vamos nos ater ao
que seria o ponto em comum de todas as linguagens: a lógica de programação. A
lógica por si só é um termo interessante de ser visto. Segundo o dicionário, pode-
se definir lógica como “Modo de raciocinar coerente que expressa uma relação de
causa e consequência; raciocínio, método [...]” (DICIO, 2021, s.p.).
2.1 DESCRIÇÃO
Na descrição, o algoritmo é dito diretamente em linguagem escrita. É o
caso das receitas e manuais que descrevemos anteriormente, sendo especialmente
útil para explicar como o algoritmo funciona através de linguagem escrita.
Tomaremos como exemplo o algoritmo para acionamento de um LED. Veremos
no parágrafo a seguir como seria a descrição desse algoritmo.
Verifique se o LED está acesso, caso sim, não faça nada. Enquanto o
LED estiver desligado, verifique se o botão foi pressionado. Quando o botão for
pressionado acione o LED e encerre.
72
TÓPICO 1 — INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO C++
2.2 FLUXOGRAMA
O fluxograma é a representação gráfica do algoritmo, sendo utilizadas
formas e setas para indicar o sentido de execução das instruções e as decisões
tomadas pelo algoritmo. Vamos representar agora o mesmo algoritmo para
acionamento do LED através de um fluxograma. O fluxograma de acionamento
do LED está representado na Figura 1.
73
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
DICAS
2.3 PSEUDOCÓDIGO
O pseudocódigo é a forma mais próxima de se representar um algoritmo,
utilizando assim uma linguagem genérica próxima da linguagem escrita, mas
estruturada em formato de código. Veremos, a seguir, como ficaria o algoritmo
de acionamento do LED em um pseudocódigo.
Algoritmo <Acionamento_LED>
Var LED_STATUS
Var BOTÃO_STATUS
Inicio
SE LED_STATUS == 1
FIM
SENÃO
ENQUANTO LED_STATUS != 1
SE BOTÃO_STATUS == 1
ACIONA_LED
FIM SE
FIM ENQUANTO
FIM SE
Fim
74
TÓPICO 1 — INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO C++
3 A LINGUAGEM C++
Apesar de a lógica de programação ser a base de qualquer código, é
importante que saibamos nos comunicar com o dispositivo que vai executá-lo.
Essa comunicação fica a cargo de uma linguagem de programação, que determina
exatamente como o dispositivo deve se comportar.
É interessante saber que a linguagem C++ não foi construída do zero. Ela
foi desenvolvida a partir da linguagem C, em 1983, no famoso Bell Labs, por
Bjarne Stroustrup. O intuito era desenvolver uma nova linguagem baseado em
C, que fosse tão simples quanto a linguagem original, mas com alguns recursos a
mais (PANOSSO, 2019).
75
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
76
TÓPICO 1 — INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO C++
77
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
Outro fato que precisamos nos atentar é que a linguagem C++ é o que
chamamos de Case Sensitive. Isso indica que a mudança entre maiúsculas e
minúscula muda totalmente o significado do elemento. Observe, por exemplo, as
duas variáveis a seguir.
E
IMPORTANT
Outra forma de deixar o código mais claro e entendível é através dos co-
mentários. Os comentários são textos que o programador pode inserir no código sem
que estes sejam considerados pelo compilador. Em C++, para inserir um comentário em
apenas uma linha, basta incluir no início desta o caractere (//). Para comentários de mais
de uma linha basta incluir antes e depois do trecho de código os caracteres (/*) e (*/).
4.3 CONSTANTES
Enquanto o valor de uma variável pode mudar a qualquer momento
durante a execução de um código, o valor das constantes permanece inalterado do
começo ao fim da execução. Dentro da programação, as constantes são bastante
úteis para armazenar o valor de constantes matemáticas ou físicas, como o valor
de PI, por exemplo, e para armazenar valores que se repetem durante o código.
Suponha que queiramos que um determinado LED seja acesso e apagado duas
vezes em intervalos de um segundo. Poderíamos fazer isso em C++ pelo código
a seguir.
#define TIME 1;
bool ledStatus = false;
int main() {
ledStatus = true;
sleep(TIME);
ledStatus = false;
sleep(TIME);
ledStatus = true;
sleep(TIME);
ledStatus = false;
}
Observe que o tempo que o código deve aguardar para apagar e acender
se repete três vezes dentro do código. Agora imagine que queiramos mudar
esse intervalo de 1 segundo para 3 segundos. Com a constante que definimos
na primeira linha, bastaria que trocássemos o valor após o nome da constante
sem a necessidade de alterar todas as ocorrências do mesmo valor uma a uma no
código. Dessa forma, em códigos maiores o uso de constantes é primordial para
manter a praticidade do código.
79
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
Cada uma dessas validações pode ser realizada com auxílio dos operadores
lógicos e relacionais. Para entender a diferença entre eles basta sabermos que
enquanto operadores relacionais investigam a diferença entre duas expressões,
os operadores lógicos executam funções lógicas dentro de um código.
Símbolo Descrição
< Menor que
> Maior que
<= Menor ou igual que
>= Maior ou igual que
== Igual a
!= Diferente a
FONTE: O autor (2021)
80
TÓPICO 1 — INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO C++
int main()
{
int nascimento = 2005;
int ano_atual = 2021;
int idade = ano_atual - nascimento;
printf("Pode comprar? %d\n", idade >= 18);
nascimento = 2001;
idade = ano_atual - nascimento;
printf("Pode comprar? %d", idade >= 18);
}
No código citado são feitas duas tentativas de saber se uma pessoa pode
comprar bebidas alcoólicas, na primeira calculamos a idade de uma pessoa
que nasceu em 2005 e verificamos se ela tem mais de 18 anos. O resultado é
apresentado através da função printf, que imprime na tela o valor que está entre
aspas na função. Perceba, no entanto, que existem dois valores estranhos dentro
das aspas: o %d e o \n. Bem, o %d, imprime naquele local do texto a operação que
está após a vírgula. Isso significa que o resultado da nossa operação (idade >= 18),
vai ser impresso logo ali após a vírgula. O \n, é um caractere especial que pula a
linha de impressão, tendo a mesma função da tecla ENTER nos editores de texto.
Símbolo Descrição
! NÃO (negação)
&& E
|| OU
FONTE: O autor (2021)
81
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
! (4 == 4) // retorna (0)
82
TÓPICO 1 — INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO C++
6 ESTRUTURAS DE SELEÇÃO
Baseado no resultado de operações lógicas e relacionais podemos criar
condições para que um bloco de código seja executado. Mas como poderíamos
fazer isso? Como podemos garantir que o ar condicionado do nosso último
exemplo seja acionado apenas na condição de temperatura e quantidade de pessoas
que queremos? Essa possibilidade pode ser atingida com o uso de estruturas de
seleção. Como o nome nos diz, essas estruturas selecionam os trechos de código
que serão executados ou não, de acordo com as condições impostas. Por essa
característica, podemos dizer também que essas estruturas têm a capacidade de
causar um desvio na execução do código (DELGADO, 2018). Lembra do nosso
exemplo em pseudocódigo? Lá utilizamos uma estrutura chamada SE-SENÃO,
pois bem, essa estrutura de seleção ocorre em C++ também e é chamada de IF-
ELSE. A outra estrutura de seleção se chama SWITCH e veremos também como
ela funciona aqui nesse tópico.
if (condição) {
[bloco de código a ser executado]
}
Observe que código dentro das chaves será executado apenas se a condição
dentro dos parênteses for aceita. Caso a condição não seja verdadeira, o bloco de
código é ignorado e a execução do restante do código continua. E se quiséssemos
incluir uma estrutura que fosse executada apenas quando a condição do IF não
fosse aceita? É aí que entra a estrutura ELSE. Observe a seguir o código anterior
com o ELSE.
if (condição) {
[bloco de código a ser executado]
}
else {
[bloco executado caso a condição não seja aceita]
}
83
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
NOTA
switch (variavel) {
case opção1:
[bloco de código 1]
break
case opção2:
[bloco de código 2]
break
case opção3:
[bloco de código 3]
break
default:
[bloco de código padrão]
break
}
NOTA
84
TÓPICO 1 — INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO C++
int main() {
char op;
scanf ("%c", &op);
switch (op) {
case '+':
printf ("Selecionado adição");
break;
case '-':
printf ("Selecionado subtração");
break;
case '/':
printf ("Selecionado divisão");
break;
case '*':
printf ("Selecionado multiplicação");
break;
default:
printf ("Nenhuma operação selecionada");
break;
}}
7 ESTRUTURA DE REPETIÇÃO
Frequentemente existe a necessidade de executarmos uma mesma instrução
várias vezes dentro de uma mesma execução. Digamos que quiséssemos acender
e apagar um LED dez vezes, em intervalos de 3 segundos. Se fossemos escrever as
instruções de acionamento do LED, do intervalo de 3 segundos e de desligamento
85
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
int LED_status;
int main() {
for (int i = 0; i < 10; i++){
LED_status = 1;
sleep(3);
LED_status = 0;
sleep(3);
}}
86
TÓPICO 1 — INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO C++
NOTA
while (condição) {
[bloco a ser executado]
}
int i = 0;
while( i < 10) {
i++;
[bloco de código a ser executado]
}
87
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
do {
[bloco de código a ser executado]
} while (condição);
8 VETORES
Quando falamos em vetores na Unidade 1 nos referimos a um elemento
que referenciava um endereço de memória onde o operador estava. Dessa forma,
através de um vetor, o processador tinha acesso à localização do operador. Na
prática é como se o vetor “apontasse” para onde o operador está. Na linguagem
C++ podemos utilizar também os vetores, mas em um sentido mais amplo. Os
vetores em C++ são utilizados para armazenar uma coleção de elementos de um
mesmo tipo (PANOSSO, 2019). Considere, por exemplo, a idade de três irmãos.
Podemos dizer que o primeiro possui 25 anos, o segundo 31, e o terceiro 19. As
três variáveis aqui são inteiras e, portanto, podemos utilizar um único vetor para
armazená-las. Na prática, ao ser declarado esse vetor, o compilador reservaria três
endereços de memória sequenciais, onde cada endereço receberia um valor. Veja
como seria realizada a declaração do vetor exemplo no trecho de código a seguir.
88
TÓPICO 1 — INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO C++
nome [índice];
idade[1] = 56;
printf(“%i”, &idade[1]) // imprime na tela o valor 56
int a = idade[1]; // a variável a recebe o valor 56
int b = idade[1]*3; // a variável b recebe o valor 168
NOTA
9 STRINGS
Durante o estudo de vetores vimos a possibilidade de armazenar uma
sequência de dados de forma sequencial na memória. Esses dados podem ser dos
mais diversos tipos como inteiros, pontos flutuantes ou até mesmo caracteres.
Dessa maneira, podemos utilizar um vetor para representar uma sequência de
caracteres, ou seja, uma palavra. Esses vetores do tipo char são chamados de
strings na linguagem C++. A seguir é apresentada a forma tradicional como uma
string pode ser declarada, a partir da definição de vetores.
89
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
Declarar uma string dessa forma é muito dispendioso uma vez que temos
que declarar cada caractere individualmente entre aspas simples, e o caractere
nulo ao final. Uma forma mais simples, que existe na linguagem C++ é declarar o
texto completo entre aspas duplas, conforme a declaração a seguir.
Observe que nesse caso não tivemos que apresentar o caractere nulo. Nesse
tipo de declaração o compilador acrescenta-o automaticamente ao final. Contudo,
observe que ao definir o tamanho de uma string para receber uma determinada
palavra, temos necessariamente que incluir esse caractere na contagem. Por
exemplo, ao declarar a string nome para receber “João”, teríamos que declarar
uma string de cinco caracteres e não quatro, como esperado.
10 FUNÇÕES
Frequentemente nos deparamos com projetos complexos e que exigem
uma numerosa quantidade de linhas de código para atender todas as suas
funcionalidades. Dentro dessa perspectiva, ao invés de apresentar o código
todo como uma grande sequência, se faz interessante dividi-lo em trechos, que
executam uma função especifica dentro do código. Podemos dizer assim que cada
trecho de código dessa divisão seria uma função. Uma função é, basicamente,
um encapsulamento de código que executa uma determinada ação. A divisão do
código em funções, além de permitir uma melhor visualização do que está escrito,
garante que haja um reaproveitamento do código escrito dentro da função em
vários trechos do programa, sendo em geral uma excelente maneira de reduzir o
volume de linhas.
90
TÓPICO 1 — INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO C++
NOTA
void imprime_ola(void) {
printf("Olá ");
printf("me chamo ");
printf("robô");
}
int main() {
printf("Quem é você? ");
imprime_ola();
}
fazer essa declaração fora e antes de dela ser chamada. Como vemos no exemplo,
a função imprime_ola foi chamada dentro da função main apenas pelo seu nome
seguido de parênteses vazios.
Essa seria talvez a forma mais simples de declararmos uma função. Mas
se quiséssemos incluir parâmetros e também receber um retorno de uma função?
Bem, primeiro precisaríamos definir o tipo de retorno da nossa função e logo em
seguida determinar os parâmetros que ela vai receber. Uma forma de vermos isso
em prática é na função a seguir que calcula o quadrado de um número.
int main() {
int numero;
printf("Digite um numero: ");
scanf("%i",&numero);
int quadrado = cal_quadrado(numero);
printf("O resultado é: %i", &quadrado);
}
Além das funções citadas podem existir ainda funções com parâmetros
e sem retorno e, inversamente, sem parâmetros e com retorno. Contudo, essas
funções são apenas variações das já apresentadas, sendo necessárias apenas em
situação bem específicas.
92
TÓPICO 1 — INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO C++
NOTA
93
RESUMO DO TÓPICO 1
Neste tópico, você aprendeu que:
94
AUTOATIVIDADE
I- int
II- float
III- char
IV- bool
V- String
95
Assinale a alternativa que apresenta a sequência CORRETA:
a) ( ) V – III – I – II – IV.
b) ( ) III – I – IV – V – II.
c) ( ) II – I – IV – V – III.
d) ( ) V – I – IV – III – II.
96
UNIDADE 2
TÓPICO 2 —
APRESENTAÇÃO DA PLACA DE
DESENVOLVIMENTO ARDUINO
1 INTRODUÇÃO
Como estudamos até aqui, os microcontroladores desempenham papel
fundamental no desenvolvimento de novas tecnologias, sendo vistos nos
mais diversos contextos e aplicações. Contudo, programar diretamente um
microcontrolador é, muitas vezes, uma tarefa desafiadora, principalmente para
quem está iniciando nessa área. Além da necessidade de se programar diretamente
em relação ao hardware desses dispositivos, são necessários componentes a mais
como reguladores de tensão, adaptadores USB-Serial, osciladores, entre outros.
Foi pensando nessa necessidade que surgiram as placas de desenvolvimento. Elas
propiciam, principalmente para quem está iniciando, todo o hardware necessário
para o desenvolvimento, além de oferecer uma forma mais fácil de programar e
enviar os códigos a placa. Por conta de ser uma solução geral, muitas vezes, as
placas de desenvolvimento não são indicadas para a produção de projetos em
grande escala. Contudo, elas proporcionam uma forma mais simples de aprender
e desenvolver os primeiros projetos.
97
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
NOTA
98
TÓPICO 2 — APRESENTAÇÃO DA PLACA DE DESENVOLVIMENTO ARDUINO
99
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
NOTA
3 A FAMILIA ARDUINO
Dentro da perspectiva de mercado, a Arduino é hoje uma marca que oferta
ao mercado diversos tipos de placas de desenvolvimento, shields (veremos o que
é isso nessa mesma sessão) e acessórios. Apesar da variedade de dispositivos,
todos possuem hardware aberto, sendo possível acessar o arquivo esquemático
e a PCB diretamente nas especificações técnicas de cada dispositivo, na página:
https://www.arduino.cc/en/Main/Products. Apesar de serem apresentados aqui
os principais modelos da família Arduino é recomendado o acesso diretamente
a página.
NOTA
100
TÓPICO 2 — APRESENTAÇÃO DA PLACA DE DESENVOLVIMENTO ARDUINO
4 ARQUITETURA
Como vimos na sessão anterior, o Arduino Uno é a placa de
desenvolvimento mais indicada para de fato colocarmos a mão na massa e
começarmos a programar um microcontrolador. Além disso, já conhecemos bem
o microcontrolador presente nessa placa: o Atmega328P, o que sem dúvida irá
facilitar nossos primeiros passos. Neste subtópico veremos a arquitetura que
compõe a placa de desenvolvimento Arduino Uno. O intuito é saber os recursos
que podem ser utilizados durante o desenvolvimento de projetos e os limites
elétricos da placa, de forma a evitar danos permanentes, decorrentes do mal-uso.
102
TÓPICO 2 — APRESENTAÇÃO DA PLACA DE DESENVOLVIMENTO ARDUINO
103
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
104
RESUMO DO TÓPICO 2
Neste tópico, você aprendeu que:
• A tensão ideal para alimentação do Arduino Uno fica entre 7V e 20V, com
exceção da alimentação via USB que é feita diretamente em 5V. A entrada de
tensão é ainda regulada para tensões de 3,3V e 5V.
105
AUTOATIVIDADE
I- Arduino Uno.
II- Arduino Leonardo.
III- Arduino Mega.
IV- Arduino Nano.
106
3 A placa de desenvolvimento Arduino Uno oferece todo o hardware
necessário para o desenvolvimento de projetos, bastando para projetos
mais simples apenas um cabo USB e um computador para desenvolvimento
do sketch. Com base na estrutura presente no Arduino Uno, analise as
sentenças a seguir:
107
108
UNIDADE 2
TÓPICO 3 —
1 INTRODUÇÃO
Assim como o conhecimento do hardware, o uso de um bom ambiente
de programação auxilia muito o desenvolvimento de novos projetos. De forma
simples, poderíamos criar um arquivo do bloco de notas, por exemplo, e começar
a digitar ali o código que seria enviado ao microcontrolador. Com bastante esforço
e o auxílio de um compilador, esse código poderia ser enviado ao dispositivo e
teríamos a aplicação funcionando. Contudo, essa forma de desenvolvimento não
é prática, não existe um apoio ao programador no sentido de organizar o código
e reunir as ferramentas necessárias. É nesse sentido que surgem os Ambientes de
Desenvolvimento Integrado, ou IDE, do inglês. Esses programas reúnem todas
as ferramentas como editor de código, compilador e gerador de código em um
mesmo lugar, possibilitando ao programador um desenvolvimento mais ágil da
aplicação.
Para facilitar a vida dos usuários, o Arduino possui uma IDE própria
utilizada para programar as placas de desenvolvimento. O software permite a
criação de sketches, que são basicamente os códigos enviados a placa. Os sketches
são programados utilizando uma linguagem própria, baseada fortemente na
linguagem C++ (de forma geral tudo que vimos de C++ poderá ser utilizado
dentro da IDE). Dentro da IDE não há a necessidade de se referir a estrutura
interna do microcontrolador, não existe a necessidade de configurar registradores
individualmente. Antes do sketch ser enviado à placa de desenvolvimento, ele é
inicialmente convertido para a linguagem C e, em seguida, o compilador transfere
para a linguagem de máquina (SOUZA, 2013b).
109
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
110
TÓPICO 3 — CONFIGURANDO E CONHECENDO A IDE DO ARDUINO
3 CONECTANDO O ARDUINO
Como sabemos, as placas Arduino se comunicam com o computador
através de um cabo USB fornecido pelo próprio fabricante. Apesar da conexão não
ser nada complicada, na primeira vez que conectamos o Arduino ao computador
precisamos realizar um procedimento, tanto no computador como na IDE do
Arduino para que tudo funcione bem. Exploraremos essa configuração neste
subtópico.
112
TÓPICO 3 — CONFIGURANDO E CONHECENDO A IDE DO ARDUINO
113
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
114
TÓPICO 3 — CONFIGURANDO E CONHECENDO A IDE DO ARDUINO
5 MONITOR SERIAL
O monitor serial é sem dúvida a melhor ferramenta, já que a IDE do
Arduino não possui debug, para verificação de erros em um código. O monitor
serial funciona como uma espécie de janela de comandos entre o Arduino e o
computador. Os dados inseridos pelo usuário através do teclado são enviados ao
Arduino via conexão USB. Da forma contrária, o Arduino pode enviar mensagens
que são exibidas na tela do computador.
NOTA
115
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
117
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
Com tudo pronto, podemos enviar o código ao Arduino Uno. Para fazer
isso basta conectar o Arduino via USB e pressionar a tecla de Upload, na barra de
ferramentas. O status da operação de aparecer, conforme a Figura 16, como “Done
Uploading”.
7 IMPORTANDO BIBLIOTECAS
Apesar da IDE do Arduino já vir com uma quantidade interessante de
funções integradas, que não necessitam de declaração para serem usadas, não é
difícil que tenhamos que incluir no código ou até mesmo no diretório do Arduino
novas bibliotecas. Neste subtópico veremos justamente sobre isso, como incluir
novas bibliotecas no diretório do Arduino e como declarar as que já existem.
118
TÓPICO 3 — CONFIGURANDO E CONHECENDO A IDE DO ARDUINO
Acessando essas pastas temos acesso ao código fonte de cada uma das
bibliotecas, bem como exemplos e outros arquivos de configuração. É através
dos exemplos que podemos visualizar como incluir cada uma das bibliotecas.
Por exemplo, abrindo o arquivo CardInfo.ino, apresentado na Figura 19, vimos
que para utilizar a biblioteca para leitura de cartões SD (cartão de memória)
precisamos incluir duas bibliotecas, que já estão instaladas, chamadas SPI.h e
SD.h.
119
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
121
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
LEITURA COMPLEMENTAR
Fábio Souza
122
TÓPICO 3 — CONFIGURANDO E CONHECENDO A IDE DO ARDUINO
Também foram lançadas novas placas Arduino Nano, agora com o foco
em conectividade.
123
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
Com toda essa sequência de lançamentos de placas com recursos para IoT,
nota-se que a empresa Arduino está focando suas energias em prover hardware
para prototipagem rápida de soluções para Internet das coisas.
124
TÓPICO 3 — CONFIGURANDO E CONHECENDO A IDE DO ARDUINO
Apesar do Arduino não ter sido concebido para aplicações industriais, hoje
é possível encontrar placas Arduino ou projetos feitos com base nos hardwares
de placas Arduino oficiais ou compatíveis, em ambientes industriais. Em alguns
casos pode ser preocupante o uso das placas Arduino em projetos que requerem
requisitos de segurança e imunidade a ruídos. Confira o artigo que aborda o Uso
de kits comerciais para desenvolvimento de produtos.
125
UNIDADE 2 — PRIMEIROS PASSOS NA PROGRAMAÇÃO DE DISPOSITIVOS MICROCONTROLADOS
Preocupações
Mas nem tudo são flores! Apesar das facilidades e recursos disponíveis
não dá para fazer e aprender tudo com Arduino.
126
TÓPICO 3 — CONFIGURANDO E CONHECENDO A IDE DO ARDUINO
Conclusão
127
RESUMO DO TÓPICO 3
Neste tópico, você aprendeu que:
• As bibliotecas que vêm por padrão na IDE Arduino estão longe de ser uma
lista exaurível, muitas outras presentes na Internet podem ser adicionadas,
acrescentando funcionalidades e possibilitando o trabalhar com deferentes
tipos de hardware.
CHAMADA
128
AUTOATIVIDADE
I- Serial.begin(velocidade)
II- Serial.print(valor)
III- Serial.println(valor)
IV- Serial.available()
V- Serial.read()
130
REFERÊNCIAS
CANALTECH. O que é open source? 2021. Disponível em: https://canaltech.
com.br/produtos/O-que-e-open-source/. Acesso em: 19 maio 2021.
131
132
UNIDADE 3 —
DESENVOLVIMENTO DE PROJETOS
COM ARDUINO
OBJETIVOS DE APRENDIZAGEM
A partir do estudo desta unidade, você deverá ser capaz de:
PLANO DE ESTUDOS
Esta unidade está dividida em três tópicos. No decorrer da unidade,
você encontrará autoatividades com o objetivo de reforçar o conteúdo
apresentado.
CHAMADA
133
134
UNIDADE 3 TÓPICO 1 —
1 INTRODUÇÃO
O desenvolvimento de novas aplicações normalmente envolve uma
sequência de passos em que o projetista experimenta, altera e desenha as
funcionalidades que serão desenvolvidas. Esse é um processo trabalhoso,
que, muitas vezes, se desenrola através de várias tentativas. Antigamente,
cada tentativa deveria ser realizada através da montagem de um circuito, com
compras de equipamentos, soldagem, entre outros passos. Hoje, esse processo se
tornou mais prático através dos softwares de simulação. Através do software de
simulação é possível experimentar um determinado circuito, a fim de verificar
se ele atinge o resultado esperado, isso tudo sem a necessidade de adquirir nem
montar nenhum dos componentes.
135
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
137
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
3 AJUSTANDO PARAMÊTROS
Frequentemente estamos interessados em personalizar nossa simulação,
seja por um resistor que deve possuir um valor diferente de resistência, um
capacitor com um valor diferente de capacitância ou até um sensor que deve
possuir um valor padrão diferente. Tudo isso pode ser feito através do ajuste de
parâmetros que também está disponível no Tinkercad. Para alterar os parâmetros
de um componente basta clicar nele com o botão esquerdo do mouse. A Figura 4
apresenta o exemplo dos parâmetros de um capacitor.
139
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
3.1 OSCILOSCÓPIO
O osciloscópio é um instrumento de fundamental importância em qualquer
laboratório de eletrônica. Basicamente, ele permite a visualização de sinais, além
de quantificar os parâmetros como: frequência, valor máximo, valor eficaz, valor
médio, entre outros parâmetros (MATTEDE, 2021). No Tinkercad, o osciloscópio
possui apenas um canal, o que significa que só podemos visualizar um sinal
140
TÓPICO 1 — SIMULANDO O ARDUINO ATRAVÉS DO TINKERCAD
141
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
3.3 MULTÍMETRO
O multímetro é um equipamento facilmente encontrado em laboratórios de
eletrônica, tendo a capacidade de medir diversos valores, sendo os mais comuns:
tensão, corrente e resistência. O multímetro do Tinkercad mede exatamente os
parâmetros citados anteriormente, havendo a possibilidade de mudar de um tipo
de medição para outro durante a simulação. A Figura 8 apresenta o símbolo do
multímetro junto aos parâmetros que podem ser alterados.
142
TÓPICO 1 — SIMULANDO O ARDUINO ATRAVÉS DO TINKERCAD
4 DEPURADOR
Algo que não encontramos na IDE do Arduino é um depurador (ou debug)
para verificação de erros dentro do código. Trabalhando unicamente com a IDE
do Arduino teríamos que verificar os erros através do monitor serial o que nem
sempre é trivial. Já no Tinkercad é possível encontrar essa ferramenta. Veremos
como ela funciona nesse tópico.
Observe que ao fim da primeira iteração temos o valor de “a” sendo igual
a dois, como era esperado. Para continuar com a execução do código basta clicar
na seta na parte superior direita da tela.
143
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
5 ADICIONANDO BIBLIOTECAS
Como já sabemos, em alguns momentos é necessário incluir bibliotecas
dentro de um determinado código, a fim de utilizar as funções que estão dentro
desta. Normalmente, em aplicações para microcontroladores, uma biblioteca está
associada a utilização de um determinado componente, como o cartão SD que
vimos no tópico anterior. Incluir a biblioteca SD.h no nosso código permite a
utilização de funções prontas para leitura e gravação de dados nesses cartões. No
Tinkercad também são disponibilizadas bibliotecas que já estão instaladas dentro
da IDE e que podem ser incluídas diretamente. Diferente da IDE do Arduino
no Tinkercad não é possível instalar novas bibliotecas. Contudo, todos os
componentes que podem ser utilizados dentro da aplicação possuem a biblioteca
associada. A Figura 11 apresenta as bibliotecas disponíveis e também a sequência
para adicionar uma biblioteca ao código.
144
TÓPICO 1 — SIMULANDO O ARDUINO ATRAVÉS DO TINKERCAD
6 EXEMPLO PRÁTICO
Daqui para a frente utilizaremos o Tinkercad para visualizar como alguns
dos recursos do Arduino funcionam na prática. A nossa abordagem daqui em
diante vai partir de um estudo mais específico dos recursos do Arduino para
um estudo macro, através de projetos que resolvem problemas reais do dia a
dia. A fim de ir se acostumando com tudo isso, vamos dedicar essa seção para
apresentar exemplo prático e ver como uma simulação de forma geral funciona.
145
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
NOTA
146
TÓPICO 1 — SIMULANDO O ARDUINO ATRAVÉS DO TINKERCAD
NOTA
147
RESUMO DO TÓPICO 1
Neste tópico, você aprendeu que:
148
AUTOATIVIDADE
I- Osciloscópio.
II- Gerador de Função.
III- Fonte de Energia.
IV- Multímetro.
149
c) ( ) I – III – II – IV.
d) ( ) II – I – IV – III.
150
UNIDADE 3 TÓPICO 2 —
1 INTRODUÇÃO
Como forma de interagir com o meio físico, o Arduino deve ser dotado
de recursos que possibilitem, o acionamento de motores, a leitura de sensores,
a comunicação entre dispositivos, entre outras utilidades. Esses recursos estão
disponíveis de forma nativa, ou seja, não possuem necessidade de nenhum
hardware adicional, nem mesmo da instalação de novas bibliotecas.
Ao longo da nossa jornada neste livro didático, vimos de forma superficial
muitos desses recursos que o Atmega328 possui e que consequentemente pode-
se utilizar no Arduino Uno. No entanto, boa parte deles foram apenas citados
e nunca nos aprofundamos a ponto de entendê-los e utilizá-los. Falamos, por
exemplo, dos pinos de entrada e saída, conversores analógico-digital, saídas
PWM e outros desses recursos, que são fundamentais para utilizar o Arduino
Uno na sua totalidade e também para ampliar o leque de projetos que se pode
desenvolver. Agora com Tinkercad, o aprendizado desses recursos se torna mais
didático, porque poderemos visualizar como tudo funciona, não se restringindo
apenas a teoria.
151
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
3 CONVERSORES ANALÓGICO-DIGITAIS
Na natureza, a maioria dos valores variam de forma analógica. Entre os
exemplos mais conhecidos podemos citar a temperatura, pressão, velocidade e
a luminosidade. Dentro da perspectiva de interação do Arduino com o meio, o
mesmo deve ser capaz também de ler e interpretar esses resultados, sendo utilizado
para isso um conversor analógico-digital interno. O conversor analógico-digital
(AD) nada mais é do que um circuito presente no Atmega328 capaz de realizar
a leitura de valores analógicos, a partir da conversão desses em valores digitais.
Apesar de na prática, a leitura de um valor analógico ser muito simples por conta
da facilidade que o Arduino proporciona, vale a pena entender como esse recurso
funciona por detrás dos panos.
152
TÓPICO 2 — EXPLORANDO RECURSOS NATIVOS DO ARDUINO
(1)
153
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
154
TÓPICO 2 — EXPLORANDO RECURSOS NATIVOS DO ARDUINO
4 SAIDAS PWM
Como sabemos, os sistemas digitais trabalham com sinais binários: 0 ou 1,
ligado ou desligado, alto ou baixo. Contudo, frequentemente existe a necessidade
de se replicar valores analógicos utilizando esses sistemas. É nesse panorama que
a Modulação por Largura de Pulso (PWM) entre em cena. Segundo Souza (2014),
a técnica consiste em manter a frequência de uma onda quadrada fixa e variar o
tempo que o sinal fica em nível lógico alto.
A relação entre o tempo que a onda passa em nível alto e nível baixo é
conhecida como duty cicle, ou razão cíclica, em português. À medida que a razão
cíclica varia tem-se também uma variação do valor médio da onda. A Figura 17
apresenta a onda quadrada para diferentes valores de razão cíclica. Observe que
quanto maior esse valor, maior o valor médio da onda.
155
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
Dessa forma, para uma onda com razão cíclica de 0% tem-se uma onda
com nível baixo sempre, enquanto que para uma razão cíclica de 100% tem-se
nível lógico alto sempre. No entanto, entre esses valores, se obtém uma onda com
nível médio entre o valor máximo e mínimo. Para uma razão cíclica de 50%, por
exemplo, tem-se nível alto na metade do tempo e, portanto, um nível médio na
saída de 50% do valor máximo. De forma geral, o nível médio da onda de saída
pode ser calculado através da Equação 2.
(2)
156
TÓPICO 2 — EXPLORANDO RECURSOS NATIVOS DO ARDUINO
157
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
saída. Por fim, na função loop() são declarados dois blocos for, um para incremento
da variável brightness e outro para decremento. A cada iteração do bloco o valor
de luminosidade é passado como parâmetro para a função analogWrite, gerando o
efeito inicialmente de aumento da luminosidade e por fim de diminuição.
5 TRANSMISSÃO SERIAL
Se tratando de microcontroladores é comum que um dispositivo tenha
que enviar ou receber informações de outro dispositivo. Um exemplo disso, é o
próprio monitor serial do Arduino. Sem perceber, estávamos nos comunicando
de forma serial com o computador ao qual o Arduino está conectado, recebendo
e enviando informações. Da mesma forma é possível comunicar o Arduino com
outros dispositivos, como módulos Bluetooth e até mesmo com outro Arduino.
158
TÓPICO 2 — EXPLORANDO RECURSOS NATIVOS DO ARDUINO
159
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
6 TIMERS
Os timers, ou contadores em português, são utilizados na maioria dos
processos internos do Arduino. Por detrás da função delay(), por exemplo,
existem contadores que determinam o tempo exato que a aplicação deve aguardar
antes de fazer qualquer outra coisa. Da mesma forma, existe um contador que
160
TÓPICO 2 — EXPLORANDO RECURSOS NATIVOS DO ARDUINO
armazena o tempo que o código atual começou a ser executado. O valor desse
contador é retornado em milissegundos pela função millis(), sendo também um
ótimo exemplo de aplicação dos contadores no Arduino. Além da temporização,
os contadores são utilizados para a contagem de eventos externos, para a geração
de ondas PWM, para as interrupções, entre outras aplicações (SOUZA, 2015).
delay: algo que não focamos tanto sobre a função delay(tempo) até agora
é que existe uma pausa na execução do programa pelo tempo em milissegundos
determinado.
Para aplicações mais simples, utilizar a função delay() talvez não seja
um problema, pois normalmente apenas um recurso é utilizado. Contudo, à
medida que o código vai crescendo em complexidade, se torna cada vez mais
arriscado parar a aplicação totalmente para uma contagem de tempo através da
função delay(). Imagine que um motor deva ser acionado a cada 30 segundos,
permanecendo mais 30 segundos ligado. Durante esse tempo digamos que seja
possível interromper essa operação apertando um botão. Com os períodos de
pausa gerados pela função delay(), simplesmente não teríamos como saber se o
botão foi pressionado. Uma solução nesse caso, envolve a utilização da função
millis() ou micros(), e é justamente isso que veremos como exemplo nesse tópico.
161
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
Observe que não podemos utilizar a função delay() pois corre o risco de o
botão ser pressionado exatamente enquanto a função está sendo executada. Assim,
o código desenvolvido utilizando a função millis() como base é apresentado na
Figura 24.
162
TÓPICO 2 — EXPLORANDO RECURSOS NATIVOS DO ARDUINO
163
RESUMO DO TÓPICO 2
Neste tópico, você aprendeu que:
164
AUTOATIVIDADE
165
3 Se comparado à transmissão paralela, a transmissão seria tem se mostrado
como melhor opção para comunicação entre dispositivos, sendo encontrada
não somente no Arduino mas em outras placas como ESP32 e Raspberry.
Com base transmissão paralela entre o Arduino e outros dispositivos,
analise as sentenças a seguir:
166
UNIDADE 3
TÓPICO 3 —
1 INTRODUÇÃO
Os últimos anos têm trazido uma série de avanços na tecnologia, que,
por sua vez, impacta diretamente na forma como vivemos. Esses avanços estão
intimamente ligados à eletrônica e ao desenvolvimento de projetos embarcados.
O próprio conceito de Cidades Inteligentes, que está em evidência ultimamente,
é baseado no uso de circuitos microcontrolados para a aquisição e envio de
informações, buscando resolver problemas da sociedade. Entre as propostas
nessa área está a redução da violência, o monitoramento de crimes ambientais,
o melhor controle dos gastos públicos e a economia de recursos. Dessa forma, o
conteúdo que estudamos até agora, quando desenvolvido em forma de projetos,
tem aplicabilidade real em problemas da sociedade.
167
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
168
TÓPICO 3 — PROJETOS COM SENSORES E ATUADORES
169
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
NOTA
Uma opção um pouco mais barata que o DTH11, para que deseja medir
apenas temperatura, é o TMP36. O sensor é apresentado em um circuito integrado
com o mesmo encapsulamento de um transistor (Figura 28). Ao contrário do
DHT11, no entanto, o TMP36 apresenta a temperatura medida proporcionalmente
através de uma saída de tensão. Dessa forma, cada 10mV de tensão representa
1ºC, sendo essa conversão feita via código pelo programador. O sensor é capaz
de medir em um intervalo que vai de -40 ºC a 125 ºC, enquanto a precisão fica em
torno de ± 2 ºC (OLIVEIRA, 2020).
170
TÓPICO 3 — PROJETOS COM SENSORES E ATUADORES
171
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
2.4 MOTOR CC
Continuaremos nossa exploração agora com os motores. Os motores
elétricos em geral são componentes que convertem energia elétrica em um campo
magnético capaz de gerar movimento. Motores de corrente continua (CC) são
bastante utilizados em eletrônica para dar movimento a aplicações, como veículos
autônomos e drones. Cada aplicação, no entanto, exige um tipo de motor CC com
características diferentes. Dessa forma, encontramos motores CC com tensão de
alimentação, rotações por minuto (RPM) e torque diferentes no mercado.
172
TÓPICO 3 — PROJETOS COM SENSORES E ATUADORES
FIGURA 32 – MOTOR CC 3V
173
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
174
TÓPICO 3 — PROJETOS COM SENSORES E ATUADORES
175
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
176
TÓPICO 3 — PROJETOS COM SENSORES E ATUADORES
177
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
178
TÓPICO 3 — PROJETOS COM SENSORES E ATUADORES
179
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
interpretar o resultado obtido. Nesse projeto iremos criar nossa própria versão
de um termômetro digital, mas com umas melhorias. Serão incluídos dois LEDs,
um vermelho e outro azul, que indicarão febre ou hipotermia, respectivamente,
a partir do valor medido. Para exibir o resultado da medição um display LCD
16x2 será utilizado. Dito isso, podemos chegar a uma descrição do circuito. Ele
deve receber o valor de um sensor de temperatura, exibir esse valor no display
e caso este seja menor ou igual que 35 ºC, deve acionar o LED azul, indicando
hipotermia. Em contrapartida, ao registrar uma temperatura maior ou igual a
38ºC, o LED vermelho deve ser acesso, indicando febre.
181
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
em tensão temos que converter esse valor em temperatura. Para realizar essa
conversão temos que saber que a 10mV temos 1 ºC. Dessa forma o valor de tensão
obtido deve ser dividido por 10mV para obter o valor em temperatura. Contudo,
para o TMP36 a tensão é dada com um deslocamento de 0,5V, de forma que esse
valor deve ser subtraído antes de se dividir pela escala.
182
TÓPICO 3 — PROJETOS COM SENSORES E ATUADORES
LEITURA COMPLEMENTAR
Newton C. Braga
Por que não começar uma indústria no próprio quintal de sua casa,
com um produto criado por você mesmo? Lembramos que Bill Gates começou
seu rendoso negócio lendo uma revista de eletrônica (Popular Electronics) nos
Estados Unidos, de onde tirou a ideia de montar seu primeiro computador e
depois criar o sistema operacional que se tornou o produto que o enriqueceu
(DOS). Para fazer tudo isso não basta ter um local apropriado e boa disposição. É
preciso saber como montar e o que se pode montar.
183
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
184
TÓPICO 3 — PROJETOS COM SENSORES E ATUADORES
elas podem ser feitas em diversos níveis. Podemos ter montagens simples com
poucos componentes que o iniciante, ou mesmo estudante das escolas de nível
fundamental e médio podem completar com facilidade. Podemos ter montagens
intermediárias adotadas no curso técnico e elaboradas por professores para
ilustrar suas aulas. Podemos finalmente ter montagens complexas utilizadas pelos
desenvolvedores e profissionais que até podem criar algo novo e comercializar
com vantagens. Este é o motivo que na seção de “Artigos” neste site, fizemos uma
divisão de categorias, para que cada um possa ir exatamente aonde está o que
deseja.
A maioria dos aparelhos que podemos montar são coisas que normalmente
não podem ser encontradas prontas nas casas especializadas, já falamos disso.
Por isso, a grande vantagem de saber montar coisas eletrônicas é que podemos
ter um produto exclusivo. Dificilmente posso encontrar pronto um circuito que
acione uma campainha quando meu rádio relógio despertar, mas posso montar
um. Dificilmente posso encontrar pronto um controle para um motor de um
brinquedo que pretendo adaptar, mas posso montar um. Não encontrarei pronto
um sistema que controle a maquete que estou desenvolvendo, mas posso montar
um. Não encontro nas lojas um espião eletrônico que possa interceptar conversas
à distância, mas posso montar um.
185
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
186
TÓPICO 3 — PROJETOS COM SENSORES E ATUADORES
b) Profissionais de desenvolvimento
Controles de motores.
Circuitos simples de corrente contínua.
Pequenos transmissores.
Excitadores de LEDs.
Osciladores de Áudio.
Rádios experimentais.
b) Projetos Intermediários
187
UNIDADE 3 — DESENVOLVIMENTO DE PROJETOS COM ARDUINO
cursos como para próprio uso. Como elaborar as placas de circuito impresso para
essas montagens é algo que ensinaremos neste livro. Nesta categoria podemos
enquadrar os seguintes projetos:
c) Projetos avançados
FONTE: <https://www.newtoncbraga.com.br/index.php/projetos-educacionais/405-montagens-
-eletronicas-como-fazer-e-o-que-montar-art018.html>. Acesso em: 22 jul. 2021.
188
RESUMO DO TÓPICO 3
Neste tópico, você aprendeu que:
CHAMADA
189
AUTOATIVIDADE
I- LDR
II- Módulo Infravermelho
III- Sensor MLX90614
IV- LM35
190
Assinale a alternativa que apresenta a sequência CORRETA:
a) ( ) II – I – III – IV.
b) ( ) III – I – II – IV.
c) ( ) I – III – I – IV.
d) ( ) II – I – IV – III.
191
REFERÊNCIAS
AOSONG. Temperature and humidity module: dht11 product manual. DHT11
Product Manual. 2021. Disponível em: https://img.filipeflop.com/files/downlo-
ad/Datasheet_DHT11.pdf. Acesso em: 20 jun. 2021.
192