LÓGICA DE PROGRAMAÇÃO
AULA 1
Prof. Vinicius Pozzobon Borin
CONVERSA INICIAL
Ao longo desta aula, iremos conhecer um pouco sobre os conceitos que
envolvem os sistemas computacionais e que servirão como base para consolidar
os estudos de vocês. Esta aula tem como objetivo apresentar:
• a terminologia e os conceitos atrelados à computação e programação;
• as partes utilizadas na construção de um sistema computacional;
• o que é um microcontrolador e as partes principais que o compõem;
• o Arduino.
TOP – CONCEITOS DE COMPUTAÇÃO
Neste primeiro tópico da aula, precisamos conhecer alguns termos
utilizados na área da computação que continuarão aparecendo ao longo dos
nossos estudos, pois são a base para a compreensão de nosso conteúdo.
O sistema computacional é um hardware capaz de executar instruções de
máquina e realizar cálculos matemáticos complexos de maneira bastante rápida,
armazenando as informações em uma memória. Um sistema computacional
pode ser um microcomputador, como um laptop ou desktop, um smartphone, ou
mesmo dispositivos eletrônicos com processamento matemático, como
monitores, TVs, ou dispositivos inteligentes.
Hardware é todo aparato físico responsável por compreender instruções
de códigos desenvolvidos e executá-las. São todos os circuitos e dispositivos
eletrônicos que constituem um sistema computacional, como:
microprocessador/microcontrolador, memória RAM, memória de disco rígido,
teclado, monitor, mouse, microfone etc.
O bit é a abreviação de dígito binário (binary digit). É a menor informação
possível de ser armazenada por um computador. O bit nada mais é do que um
nível de tensão armazenada em uma memória. Quando esse nível de tensão é
dito alto (valor 1), isso significa que a tensão aplicada naquele ponto do circuito
eletrônico é de, normalmente, 5 V ou 3,3 V. Quando o nível de tensão é chamado
de baixo (valor 0), a tensão aplicada naquele ponto do circuito é de 0 V (Gimenez,
2010).
2
O byte é uma convenção adotada na área da computação para
nomearmos um conjunto de 8 bits (1 Byte = 8 bits). Esse conjunto consegue
representar números de 0 a 255 (28 = 256 valores distintos).
ROLÊ 1 – CONCEITOS DE PROGRAMAÇÃO
Agora, vamos conhecer alguns termos específicos da área de
programação e desenvolvimento de software. Esses termos continuarão
aparecendo ao longo de toda a nossa disciplina, pois são a base para a
compreensão de nosso conteúdo.
Para compreender a lógica de programação, partindo de conhecimentos
fundamentais para isso, temos que a lógica foi pela primeira vez conceituada na
Grécia Antiga por Aristóteles (384-322 a.C.). Essa palavra tem sua origem no
termo grego logos, e significa “linguagem racional”. Em outras palavras, lógica é
o exercício do raciocínio lógico para realizarmos tarefas cotidianas, como fazer
um bolo, escolher a roupa para sair de casa, escolher um jogo de videogame
para comprar etc. O raciocínio lógico é também exercido quando escrevemos
um programa de computador, como veremos mais adiante em nossa disciplina.
A instrução é executada por um microprocessador, ou um
microcontrolador (em breve iremos conceituar ambos). Instruções são
operações bastante simples que servem para realizar operações aritméticas
e/ou lógicas, bem como leituras e escritas na memória. Elas são também
chamadas de código de linguagem de máquina.
A linguagem de máquina (linguagem baixo nível), por sua vez, refere-se
às instruções executadas literalmente pelo microprocessador. Cada família de
microprocessadores possui o seu próprio conjunto de instruções. Também é
chamada de linguagem assembly.
O programa ou software é o conjunto de instruções escritas em uma
linguagem de programação e empregando uma sequência lógica. Dentre
exemplos de softwares, podemos citar aplicativos utilizados pelos usuários
(Word, Excel, Google Chrome etc.) e sistemas operacionais (Windows, Linux
etc.). É preciso levar em consideração que, atualmente, podemos desenvolver
tanto para sistemas computacionais voltados para laptops/desktops quanto para
smartphones, ou mesmo para web. Os softwares ficam armazenados na
memória.
3
A linguagem de programação (linguagem alto nível) é um conjunto rígido
de regras que programadores utilizam para escrever programas em uma
linguagem mais amigável e mais próxima do que nós compreendemos. Dentre
exemplos populares de linguagens de programação, podemos citar Python,
Java, Javascript, C/C++ e PHP.
Quanto ao compilador (software de compilação), nós, programadores,
escrevemos um código em alto nível (linguagem de programação), mas o
hardware só consegue entender uma linguagem de baixo nível (linguagem de
máquina). Desse modo, utilizamos um software para realizar a tradução de uma
linguagem para a outra. Esse software é o compilador, responsável por gerar um
arquivo executável dentro de um sistema operacional, por exemplo.
Firmware é um programa desenvolvido para ser colocado dentro de um
hardware embarcado. É o nome dado ao programa executado pelo próprio
microprocessador/microcontrolador em uma linguagem de máquina. Portanto, é
um software desenvolvido pensando nas nuanças e variações do próprio
hardware.
ROLÊ 2 – A ARQUITETURA DE UM COMPUTADOR
Precisamos, agora, conhecer com mais detalhes o que existe dentro de
um computador e o que é capaz de executar nossos programas.
Vamos começar com um breve histórico.
Nem sempre os computadores foram construídos da maneira como
conhecemos hoje. Até meados da década de 1940, eles eram máquinas
gigantes, construídas com milhares de válvulas e relés, pesando toneladas,
consumindo montantes gigantescos de energia elétrica e ocupando salas
inteiras, sendo necessária a operação de dezenas de pessoas. Um exemplo de
computador construído dessa maneira é o ENIAC (Electronic Numerical
Integrator and Compute).
Com a crescente necessidade de realizar cálculos matemáticos cada vez
mais rápidos e mais complexos, especialmente devido à Segunda Guerra
Mundial e ao surgimento do transistor (utilizado como uma chave digital), nessa
época, deu-se o surgimento do que veio a ser a base dos computadores
modernos. Essa idealização, conhecida como a arquitetura de um computador,
é chamada de máquina (ou arquitetura) de von Neumann.
4
Todo e qualquer sistema computacional nos dias atuais contém em seu
hardware, no mínimo, os seguintes componentes: microprocessador ou CPU
(Central Process Unit), memória e dispositivos de entrada/saída. A CPU contém
em seu interior duas partes muito importantes: a ULA e a UC. Vejamos a seguir:
• Memória – armazena o programa em execução pela máquina, bem como
outras informações usadas pelo programa, como dados e informações de
controle. A memória que mantém os programas de alto nível em execução
é a memória RAM (Random Acess Memory). Já a memória que armazena
o firmware normalmente é uma memória do tipo flash.
• Unidade Lógica e Aritmética (ULA) – contida na CPU, essa unidade é
responsável por todos os cálculos aritméticos e lógicos do computador.
Todas as operações são realizadas aqui. Uma máquina computacional é
capaz de realizar somente cálculos aritméticos e lógicos dos mais simples
possíveis, como somas, subtrações e operações relacionais (como
relação de maior ou menor). Dentro dessa unidade, temos pequenas
memórias chamadas de registradores. São memórias de alto
desempenho usadas nos cálculos dentro da ULA.
• Unidade de Controle (UC) – contida na CPU, essa unidade gerencia o
fluxo de execução dos programas dentro do computador. Define qual será
a próxima instrução a ser a executada e onde ela se encontra na memória.
• Dispositivos de entrada – são as maneiras físicas pelas quais inserimos
informações em nossos programas. Um dispositivo de entrada comum é
um teclado, no qual digitamos e as informações são transferidas ao
programa.
• Dispositivos de saída – são maneiras pelas quais o resultado final de uma
ação do programa informa o usuário. Podemos citar como dispositivos de
saída uma tela/monitor, ou mesmo lâmpadas/LEDs indicativas acessas.
A ULA e a UC formam o que é de chamado de processador, ou seja, a
CPU (Central Process Unit) de um computador, e são sempre construídas juntas
dentro de um único chip. Portanto, atualmente, quando você compra um
processor, está adquirindo minimamente esses dois módulos.
Com o passar das décadas, soluções mais modernas começaram a ser
propostas dentro da arquitetura de von Neumann. Por exemplo, a replicação de
5
partes da CPU (da própria CPU inteira) dentro do chip para criarmos
processamento de dados em paralelo. Ainda, hoje nas máquinas modernas,
temos memórias de altíssimas velocidades inseridas dentro desse chip com o
objetivo de melhorar o desempenho de processamento. Essas memórias
inclusas no chip são chamadas de memória cache.
Em suma, a arquitetura de von Neumann, hoje considerada clássica
dentro dos computadores modernos, é tida como o hardware mínimo necessário
para um computador digital funcionar. Qualquer software de computador que
iremos aprender a desenvolver ao longo desta disciplina requer uma máquina de
von Neumann.
Figura 1 – Arquitetura de von Neumann
Fonte: Borin, 2021.
TRILHA 1 – O MICROCONTROLADOR E SEUS PERIFÉRICOS
Até agora falamos somente do conceito de microprocessador. No entanto,
ao longo de nossos estudos, iremos trabalhar com um hardware chamado
microcontrolador. De modo geral, ambos são uma CPU construída em uma
pastilha de silício (chip), mas um microcontrolador difere um pouco de um
microprocessador em seus aspectos construtivos. Vamos diferenciar ambos
agora.
Um microprocessador é projetado como um dispositivo eletrônico capaz
de realizar processamento matemático de altíssimo desempenho. São
6
empregados em sistemas complexos e de alto custo. Mas também gastam
bastante energia. Utilizamos microprocessadores em nossos computadores
pessoais e smartphones, por exemplo. Exemplos de microprocessadores são a
família Core e a família Pentium, da Intel. E a família Ryzen ou Athlon, da AMD.
Um microprocessador, além de seu alto custo e consumo, não é capaz de
fazer nada sozinho, ao menos que conectemos a ele outros dispositivos
eletrônicos externos.
Um microcontrolador, embora seja construído de maneira bastante similar
a um microprocessador, contendo CPU, é desenvolvido de uma maneira em que
tudo o que é necessário para ele funcionar é colocado dentro do seu próprio chip.
Ou seja, todos os periféricos, como barramentos de comunicação, conversores
analógico/digital, timers, e até mesmo memória, são inseridos dentro do seu
próprio chip, o que não acontece em um microprocessador.
Um microcontrolador é projetado de uma maneira que seu consumo de
energia seja bastante reduzido, embora seu desempenho e velocidade também
(se comparados ao microprocessador). Ainda assim, essas características
tornam um microcontrolador ideal para construirmos aplicações mais simples,
como automação residencial ou industrial, eletrodomésticos, brinquedos
eletrônicos, lâmpadas inteligentes etc.
Vamos agora conhecer um pouco dos periféricos mais comuns existentes
em microcontroladores e que quase sempre vêm embutidos dentro do seu chip.
4.1 Conversor analógico/digital (a/d)
Sinais elétricos presentes na natureza são analógicos, como temperatura,
pressão, umidade, sinais sonoros, intensidade luminosa, vibração etc. Desse
modo, precisamos de sensores analógicos para medi-los. Como um
microcontrolador trabalha somente com sinais digitais, necessitamos de um
conversor de analógico para digital (A/D), que irá receber um dado analógico e
converter para alto que o hardware irá compreender.
O que um sensor faz é pedir uma grandeza da natureza, como a medição
de temperatura, e convertê-la para um nível de tensão analógica, normalmente
entre 0 V e 5 V. Esse sinal será, então, codificado em um valor digital dentro do
microcontrolador.
7
Figura 2 – Exemplo de sinal analógico e de sinal digital
Créditos: Petrroudny43/Shutterstock.
4.2 Contadores/timers
Os contadores/timers são dispositivos utilizados para fazer uma
contagem, sendo assim, são bastante utilizados para gerar marcadores de
tempo em um microcontrolador por meio de um temporizador. Um forno de
micro-ondas, por exemplo, que contém um relógio e faz contagem de tempo
utiliza esse tipo de recurso.
Todo microcontrolador tem uma frequência de operação interna (clock).
Caso essa frequência seja selecionada, a contagem a partir do clock do
microcontrolador é considerado um timer ou temporizador. Por outro lado, se for
selecionado que a contagem será a partir de sinais de entrada externos ao
microcontrolador, este será um contador. Neste caso, podemos exemplificar uma
contagem como sendo um sensor de barreira/presença que está em uma porta.
Dessa forma, ocorre a contagem de pessoas que passam por esse sensor.
Os timers são dispositivos muito usados nas mais diversas aplicações
pelo fato de criar uma noção exata de tempo. Isso é uma característica que pode
parecer simples, mas sem ela seria impossível desenvolver qualquer sistema
preciso ou até mesmo criar os sistemas operacionais utilizados nos
computadores.
4.3 Interface de comunicação serial
Uma comunicação serial serve para transmitir e receber dados entre um
microcontrolador e um dispositivo externo conectado a ele. Por exemplo,
podemos ter um rádio de comunicação Wi-Fi conectado no microcontrolador. O
8
rádio poderá receber alguns dados através de sua antena e enviar o dado via
comunicação serial para dentro do microcontrolador.
Figura 3 – Exemplo de módulo/rádio Wi-Fi que contém uma antena e se
comunica via serial com o microcontrolador
Créditos: Igor Podgorny/Shutterstock.
Exemplos de comunicação serial comumente presentes em
microcontroladores são:
• UART (Universal Asynchrounous Receiver/Transmiter);
• SPI (Serial Peripheral Interface);
• I²C (Inter-Integrated Circuit);
• USB (Universal Serial Bus).
Em qualquer comunicação serial, para transmitir dados, temos dois
elementos: transmissor, também chamado de TX, que é a origem da transmissão
e faz o envio dos dados, e o receptor, representado por RX, que apenas recebe
os dados da transmissão. A transmissão e recepção dos dados podem ser
realizadas simultaneamente pelas vias separadas, ou seja, podemos transmitir
e receber ao mesmo tempo.
9
TRILHA 2 – O ARDUINO
O Arduino é uma plataforma de hardware open-source, projetada sobre o
microcontrolador da família AVR da Atmel, e que pode ser programada por uma
linguagem de programação bastante similar ao C/C++, permitindo a elaboração
de projetos com pouco conhecimento de eletrônica (Oliveira, 2015).
A placa Arduino é muito similar à de um computador de pequeno porte,
sendo composta minimamente por um microcontrolador, aparatos eletrônicos
para que possa funcionar, uma porta de comunicação USB para alimentação e
configuração, LEDs indicativos e barramentos de pinos para conexão externa de
sensores.
Existem diferentes placas de Arduino no mercado. A que iremos utilizar
em nossos estudos e que é uma das mais utilizadas é a Arduino Uno,
apresentada na Figura 4.
Figura 4 – Arduino Uno
Créditos: Pozdeyev Vitaly/Shutterstock.
Na parte inferior da Figura 4, vemos o microcontrolador da Atmel; do lado
esquerdo da placa, temos uma porta USB e uma entrada para fonte de
alimentação; no meio da placa, temos um botão e LEDs; e ao redor dela, temos
barramentos para conexão externa. É valido observar que o aspecto físico do
Arduino Uno pode ser ligeiramente alterado, dependendo da versão do hardware
que você tiver em mãos.
10
Junto ao Arduino, no site da empresa 1 é possível encontrar uma
ferramenta para programação de Arduino, que chamamos de IDE (Integrated
Development Environment – ambiente de desenvolvimento integrado). Nessa
IDE, escrevemos os códigos do firmware que serão colocados dentro da
memória do Arduino, fazendo com que ele seja capaz de realizar a leitura de
sensores, o acionamento de motores, LEDs etc.
Além disso, no site encontramos diversos exemplos de projetos para
todos os tipos de estudantes e desenvolvedores, do mais básico ao mais
avançado. Dependendo do projeto são necessários mais recursos de hardware
ou simplesmente mais portas de entrada e saída de dados. Para isso, foram
criados outros modelos de placas de Arduino, como o Arduino Nano e o Arduino
Mega, como mostrado na figura a seguir.
Figura 5 – Diferentes tipos de Arduinos
Créditos: AlexCorv/Shutterstock.
Por fim, uma inovação do Arduino foi a criação dos chamados shields
(“escudos”, em português), que são placas de funcionalidades específicas, como
sensores de gás, temperatura ou umidade, infravermelho, relés e diversos
outros, que podem ser usados apenas encaixando ao seu projeto de uma
1
Disponível em: <https://www.arduino.cc/>. Acesso em: 11 nov. 2021.
11
maneira bastante intuitiva. A figura a seguir ilustra alguns shields utilizados em
projetos de Arduino. Um deles é de um display LCD para mostrar mensagens e
o outro é usado para a leitura de um cartão SD e conexão de sensores.
Figura 6 – Arduino UNO com dois shields
Créditos: Andrei Kuzmik/Shutterstock.
ELO
Nesta aula, aprendemos os conceitos básicos e teóricos que regem a área
da computação e programação. Também aprendemos como um computador é
construído e diferenciamos um microprocessador de um microcontrolador.
Finalizamos nossa aula vendo que nesta disciplina iremos trabalhar com o
Arduino Uno, que contém um microcontrolador da Atmel. Nas próximas aulas,
vamos começar a aprender programação por intermédio do Arduino Uno.
12
REFERÊNCIAS
GIMENEZ, S. P. Microcontroladores 8051: teoria e prática. 1. ed. São Paulo:
Érica, 2010.
OLIVEIRA, C. L. V.; ZANETTI, H. A. P. Arduino Descomplicado – como
elaborar projetos de eletrônica. São Paulo: Editora Saraiva, 2015.
13