Buscar

Introdução ao Arduino Uno R3

Prévia do material em texto

APOSTILA DE INTRODUÇÃO A 
COMPUTAÇÃO 
 
 
ENGENHARIA ELÉTRICA E ELETRÔNICA 
 
 
 
 
 
 
 
 
 
2 
1. CONCEITOS BÁSICOS 
 
Microcontroladores e Microprocessadores, qual a diferença? A diferença entre os 
dois tipos de hardwares está basicamente em sua construção, os microcontroladores 
são dispositivos específicos para controle, em sua construção todos os componentes 
necessários para o seu funcionamento são encapsulados em um único chip. A memória 
RAM e ROM, o conversor AD, os temporizadores estão todos integrados em um único 
bloco, diferentemente dos microprocessadores que é um circuito integrado e depende 
de dispositivos externos para o seu funcionamento, como a memória. 
Os microcontroladores surgiram da necessidade de implementar tarefas mais 
simples com custo mais baixo, como o acionamento de motores de passos, controle de 
impressora, reguladores de velocidade. 
Existem no mercado diversos fabricantes de microcontroladores cada um com 
suas particularidades. Os mais conhecidos e utilizados no ramo educacional são os da 
família PIC, produzidos pela Microchip Technology, os da família ATmega, produzidos 
pela Atmel Corporation e os microcontroladores de 8 bits produzidos pela Intel, sendo o 
mais famoso o 8051. 
Nessa apostila será abordada a plataforma Arduino que utiliza microcontroladores 
da família Atmega. O Arduino é composto de uma placa que contém o hardware, 
composto de um microcontrolador, entradas e saídas e um conjunto de software que 
seria a linguagem de programação e o bootloader que carrega na memória flash o 
software que recebe pela serial, dispensando o uso do gravador externo. 
 
 
 
 
 
 
3 
2. CARACTERÍSTICAS DO ARDUINO UNO R3 
 
Durante o curso será utilizada a plataforma do Arduino UNO R3 com o 
microcontrolador Atmega328. Na figura 2.1 podemos ver a disposição dos 
componentes na placa Arduino. 
 
Figura 2.1 - Placa Arduino UNO R3 
 
Esquematicamente o Arduino Uno é representado por um retângulo com vários 
terminais conforme podemos observar na figura 2.2. 
 
 Figura 2.2. – Diagrama esquemático do Arduino Uno. 
 
 
 
 
4 
Na tabela 2.1 está uma breve descrição das características da placa Arduino 
UNO R3. 
 
UNO R3 
Controlador: ATmega328 
Tensão de Operação: 5V 
Tensão de alimentação (recomendado): 7-12V 
Portas I/O digitais: 14 (6 com PWM) 
Portas Analógicas: 6 
Memória Flash: 32 KB (0.5 KB usado para bootloader) 
Corrente DC (I/O): 40 mA 
Corrente DC p/ 3.3V: 50 mA 
SRAM: 2 KB 
EEPROM: 1 KB 
Clock: 16 MHz 
Tabela 2.1 - Características UNO R3 
 
 
 
 
 
 
5 
3. IDE ARDUINO 
 
Para programar o Arduino não é necessário utilizar somente a IDE Arduino, é 
possível utilizar outras IDEs como Eclipse, AtmelStudio e o Netbeans, no site oficial do 
Arduino é possível fazer o download do ambiente oficial de programação. 
A IDE oficial apresenta diversas facilidades, a começar a inclusão automática de 
uma biblioteca que inicializa os dispositivos, registradores, entradas/ saídas e etc. A 
programação do microcontrolador é realizada utilizando uma linguagem derivada do C++ 
e o upload dos sketches (códigos) é realizado facilmente devido a existência do padrão 
de conexão dos Shields. 
Como qualquer plataforma a IDE Arduino possui desvantagens, uma delas é o 
Debug, não sendo possível visualizar passo a passo do programa e visualizar o seu 
comportamento. Após a instalação da IDE Arduino uma interface semelhante a da figura 
3.1 será exibida. 
 
Figura 3.1 – IDE Arduino 
 
 
 
 
 
6 
A seguir será descrito detalhes da interface de desenvolvimento Arduino. 
 
  Verify – verifica se há algum erro de sintaxe no código, o erro será indicado na 
parte inferior da interface. 
 
 Upload – compila e envia o código para a placa Arduino. 
 
  New – Cria um novo sketch. 
 
  Open – Abre um sketch salvo anteriormente. 
 
  Save – Salva o sketch aberto. 
 
  Serial Monitor – Abre o terminal serial, que auxilia no recebimento e envio de 
dados para a placa. 
 
Após abrir a IDE Arduino é necessário configurar dois itens relacionados à placa, 
o modelo e a porta que está conectada. 
 
 Modelo da placa: Tools > Board > Arduino Uno 
 Porta que a placa está conectada: Tools > Port /Serial Port > COMX 
 
 
Figura 3.2 – Selecionando modelo da placa utilizada 
 
 
 
 
 
 
 
7 
A estrutura da programação Arduino é composta por duas funções essenciais, a 
setup e o loop. 
 
 
 A função void setup() é inicializada 
somente uma vez, quando a sketch inicia ou 
quando o reset do Arduino é acionado. É 
possível iniciar as variáveis e as bibliotecas e 
indicar ao Arduino onde estão ligados os 
componentes. 
 
 
 A função void loop() é iniciada logo após 
a setup, todo o código de controle da placa é 
executado no loop, permitindo mudanças no 
programa de acordo com a leitura de 
sensores, estado lógico e etc. É importante 
lembrar que as funções escritas no loop 
estarão em ciclo constante. 
 
 
 
 
 
8 
4. PORTAS DIGITAIS 
 
Os pinos digitais servem para receber ou transmitir níveis lógicos digitais. Quando 
estamos lendo ou escrevendo em um pino digital existem apenas dois valores que um 
pino deste tipo pode ter: HIGH (alto) e LOW (baixo). 
 
 HIGH: O significado de HIGH (em referência a um pino) pode variar um 
pouco dependendo se este pino é uma entrada (INPUT) ou saída 
(OUTPUT). Quando um pino é configurado como INPUT com a função 
pinMode, e lido com a função digitalRead, o microcontrolador considera 
como HIGH se a voltagem for de 3V ou mais. Um pino também pode ser 
configurado como um INPUT com o pinMode, e posteriormente receber um 
HIGH com um digitalWrite, isto vai “levantar” o resistor interno de 20KΩ que 
vai manter a leitura do pino como HIGH a não ser que ela seja alterada 
para LOW por um circuito externo. Quando um pino é configurado como 
OUTPUT com o pinMode, e marcado como HIGH com o digitalWrite, ele 
está a 5V. Neste estado ele pode enviar corrente para, por exemplo, 
acender um LED que está conectado com um resistor ou a outro pino 
configurado como OUTPUT e marcado como LOW; 
 
 LOW: O significado de LOW também pode variar dependendo do pino ser 
marcado como INPUT ou OUTPUT. Quando um pino é configurado como 
INPUT com a função pinMode, e lido com a função digitalRead, o 
microcontrolador considera como LOW se a voltagem for de 2 Volts ou 
menos. Quando um pino é configurado como OUTPUT com a função 
pinMode, e marcado como LOW com a função digitalWrite, ele está a 0V. 
Neste estado ele pode “drenar” corrente para, por exemplo, acender um 
LED que está conectado com um resistor em série ao +5V, ou a outro pino 
configurado como OUTPUT e marcado como HIGH. 
 
 
 
 
 
9 
A placa do Arduino Uno possui 14 pinos digitais que podem ser utilizados como 
entrada ou saída. Estes pinos operam em 5V, onde cada pino pode receber ou fornecer 
uma corrente máxima de 40 mA. Cada pino possui um resistor interno de 20KΩ chamado 
de pull-up, utilizado para garantir que o estado de um pino de entrada seja sempre alto. 
 
 Pinos 0 (RX) e 1 (TX): São usados para receber (RX) e transmitir (TX) 
dados seriais TTL. Esses pinos são conectados aos pinos correspondentes 
do chip serial USB para TL ATmega8U2; 
 
 Pinos 2 ao 13: São utilizados para entrada e saída de dados. Os pinos 2 
e 3 são usados para interrupções externas, podem ser configurados para 
disparar interrupções com nível lógico baixo, com borda de subida ou 
descida, oucom mudança de valor. Os pinos 3, 5, 6, 9, 10 e 11 possuem 
suporte a PWM (Modulação por largura de Pulso). O pino 13 está 
associado ao LED que vem integrado na placa do Arduino UNO. 
 
Nas figuras 4.1a e 4.1b podemos ver a localização das conexões referentes às 
portas digitais. 
 
 
 
 
 
 
 
 
 
 
 
EXEMPLO I: Acionamento do LED acoplado no pino 13 da placa Arduino 
Figura 4.1b – Diagrama esquemático: localização 
das portas digitais 
 Figura 4.1a – Localização das portas digitais 
 
 
 
 
10 
 
Para exemplificar o funcionamento dos pinos digitais iremos acionar o LED que 
está acoplado na placa do Arduino. Na figura 4.2 está a placa do Arduino com a indicação 
do LED. 
 
 
 
 
 
 
 
Figura 4.2 – Placa Arduino. 
 
Código fonte: 
Sintaxe: pinMode(pin, mode) 
Parâmetros: 
 pin: refere-se o número do pino que deseja utilizar. 
 mode: o modo como o pino será utilizado, ou seja, 
INPUT, OUTPUT ou INPUT_PULLUP. 
Retorno: nada 
 
Código fonte: 
Sintaxe: digitalWrite(pin, value) 
Parâmetros: 
 pin: refere-se o número do pino que deseja utilizar. 
 value: o estado que a saída deve assumir HIGH ou 
LOW. 
Retorno: nada 
 
Explicação do código fonte: Dentro da função void setup(), foi utilizado a sintaxe 
“pinMode(13, OUTPUT)”. Esta sintaxe é responsável pela configuração do pino, ou seja, 
é nela que determinamos se o pino será de entrada ou saída. Primeiramente, temos que 
LED acoplado a placa e 
associado ao pino 13 
void setup() { 
 
pinMode(13, OUTPUT); 
 
} 
 
void loop() { 
 
digitalWrite(13, HIGH); 
 
} 
void setup() { 
 
pinMode(13, OUTPUT); 
 
} 
 
void loop() { 
 
digitalWrite(13, HIGH); 
 
} 
 
 
 
 
 
11 
informar o número do pino e depois o modo que iremos trabalhar. No caso do exemplo, 
o pino está configurado como saída. Na função seguinte, void loop(), foi utilizado a 
sintaxe “digitalWrite(pino, HIGH)”. Esta sintaxe é responsável por escrever um valor no 
pino especificado. Neste exemplo, o pino 13 está recebendo o valor HIGH, que 
fisicamente a placa estará enviando para o pino 5V, proporcionando o acionamento do 
LED. Porém o LED só irá acender se for adicionada a linha de comando no loop, que é 
composta pelo digitalWrite. Um detalhe importante é a forma de escrita DIGITALWRITE 
é diferente de digitalWrite. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
EXEMPLO II: Fazer o LED acoplado no pino 13 da placa Arduino piscar 
 
 
 
 
 
12 
Se analisarmos o código anterior o mandamos o LED acender, porém ele não irá 
apagar, para isso acontecer devemos acrescentar mais uma linha de comando 
digitalWrite(pin, LOW). Com essa linha o LED irá acender e apagar muito rapidamente e 
claro que não queremos, para isso iremos adicionar mais uma função a delay(). 
 
Código fonte: 
Sintaxe: delay(ms) 
Parâmetros: 
 ms: o tempo de pausa em milissegundos 
Retorno: nada 
 
 
 
 
 
 
Explicação do código fonte: Para que o estado do Led seja alterado é necessário fazer 
com que o pino 13 mude seu estado também, para isso foi utilizado a função digitalWrite 
igualmente no exemplo anterior e o estado do pino foi alterado de HIGH para LOW. Desta 
forma o Led irá piscar tão rapidamente que não iremos notar ele piscando, para isso foi 
acrescentado a função delay() é uma função que pausa todo o sistema durante o tempo 
programado, dentro dos parênteses é acrescentado o tempo desejado em 
milissegundos, assim no código acima como podemos notar que o Led ficará 1 segundo 
aceso e 1 segundo apagado. 
 
 
 
 
 
Capítulo 4 – Exercícios 
 
void setup() { 
pinMode(13, OUTPUT); 
} 
 
void loop() { 
digitalWrite(13, HIGH); 
delay(1000); 
 digitalWrite(13, LOW); 
delay(1000); 
} 
 
 
 
 
 
13 
1) Ligar um LED a porta 10 do Arduino e fazer o mesmo piscar de 0,5s em 0,5s. 
 
2) Ligar 2 LEDs ao Arduino e fazer eles piscarem alternadamente. 
 
3) Montar um semáforo com os seguintes estágios: 
 
 Vermelho Amarelo Verde Duração 
Estágio 1 Aceso Apagado Apagado 5,0 s 
Estágio 2 Aceso Aceso Apagado 1,5 s 
Estágio 3 Apagado Aceso Aceso 1,5 s 
Estágio 4 Apagado Apagado Aceso 5,0 s 
Estágio 5 Apagado Aceso Aceso 1,5 s 
Estágio 6 Aceso Aceso Apagado 5,0 s 
 
 
 
 
 
 
 
14 
5. ESTRUTURAS DE CONTROLE 
 
Para apreender a programar é necessário ter uma base sólida em cada assunto 
referente à linguagem de programação que se deseja programar. Geralmente toda a 
programação é executada em torno das estruturas de controle de fluxo, por isso 
consideramos a parte mais importante da programação. As estruturas de controle são 
blocos de instruções que de acordo com uma condição podem executar comandos 
diferentes e também podem repetir uma série de comandos várias vezes, dessa forma 
são conhecidas como comandos de seleção e de repetição. 
Como comandos condicionais ou de seleção podemos citar a estrutura if e como 
comandos de repetições temos while e for. 
 
IF – ELSE 
A estrutura if é utilizada em conjunto com um operador de comparação1 e também 
é possível combiná-la com else. A estrutura if - else permite múltiplos testes agrupados 
entre si e com isso um maior controle de fluxo do código. O if - else basicamente verifica 
e executa o comando indicado, se a condição for TRUE (verdadeiro, 1) um comando é 
executado, caso contrário se a condição for FALSE (falsa, 0) um outro comando é 
executado. 
 
 
 
 
 
 
 
 
 
 
 
1 Operadores de comparação mais utilizados: == (“igual a”), != (“diferente de”), > (“maior que”), < (“menor que”), 
>= (“maior ou igual a”), <= (“menor ou igual a”), ! (“não”), && (“e”), || (“ou”). 
if(condição) { 
 ... 
} 
 
 
 
 
15 
 
 
 
 
 
 
 
 
 
 
WHILE 
O while é uma estrutura que funciona como um loop de repetição. O while executa 
um comando ou um conjunto de comandos enquanto a condição permanecer verdadeira, 
quando a condição for falsa o programa continua normalmente. 
É importante tomar alguns cuidados na utilização da estrutura while, ao utilizarmos 
uma variável para determinar uma condição devemos inicializa-la antes, pois o C/C++ 
não inicia automaticamente em zero, ou seja, quando comparamos a variável sem 
inicializa-la estamos comparando com qualquer coisa ou até mesmo o zero. Também é 
importante lembrarmos que podemos entrar em um loop infinito, assim devemos indicar 
a partir de uma entrada que o loop termine, pois diferentemente da for o while não 
trabalha com incremento ou decremento da variável em sua estrutura. 
if(condição) { 
 ... 
} 
else { 
 ... 
} 
 
 
 
 
 
16 
 
 
 
 
 
 
 
 
 
 
FOR 
A estrutura for também executa um comando ou um conjunto de comandos por um 
número definido de vezes. Uma das diferenças do for em relação ao while é que não 
precisamos inicializar a variável antes, outra diferença é que a estrutura for é composta 
de três partes, inicialização, condição e finalização. A parte da inicialização é executada 
apenas uma vez no inicio do for, é também onde iniciamos a variável. A condição é o 
bloco que trabalha com o loop, toda vez que a função for repetida a condição será testada 
e enquanto ela for verdadeira os comandos entre as chaves continuam sendo 
executados. O incremento é executado se a condição for verdadeira, se a condição for 
falsa o loopé terminado. 
 
while(condição) { 
 ... 
} 
 
 
 
 
17 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
EXEMPLO I: Acionar o LED acoplado no pino 13 ao pressionar um Push Button 
 
 Para acionarmos o LED acoplado a placa do Arduino ao pressionar um botão 
(Push Button) é necessária à montagem do circuito abaixo, figuras 5.1a e 5.1b. 
 
for(inicialização; condição; incremento) { 
 ... 
} 
 
 
 
 
18 
 
Figura 5.1a – Acionar um LED a partir de um Push Button. 
 
 
Figura 5.1b – Diagrama esquemático: acionar um LED a partir de um Push Button. 
 
Componentes: 
 1 resistor de 10KΩ; 
 1 botão (tipo: Push Button). 
 
Explicação do circuito: Para acender o LED quando ao pressionar um botão, temos 
que ligar um botão (tipo: Push Button) em um dos pinos digitais da placa Arduino, neste 
exemplo, o botão foi ligado no pino 2. Porém, devido ao Push Button trabalhar com uma 
corrente muito baixa o que faz com que o pino digital do Arduino não seja capaz de 
identificar se o botão foi pressionado, por isso, não podemos ligar o botão diretamente 
ao pino desejado. O botão e o pino devem estar ligados a um circuito de resistor pull-up 
 
 
 
 
19 
ou pull-down para obtermos o funcionamento correto do projeto. No exemplo em 
questão, estamos utilizando um circuito de resistor pull-down, figura 4.3. 
 
 
Figura 4.3: Circuito de resistor pull-down 
 
O circuito de resistor pull-down está sendo utilizado para garantir que o pino 2 receba 
nível lógico baixo (0V) enquanto o botão não estiver pressionado e quando for 
pressionado receba nível lógico alto (5V). Assim, evita-se que o pino 2 flutue, ou seja, 
varie entre 0V e 5V o que ocasionaria um funcionamento não desejável do projeto. 
 
Código fonte: 
Sintaxe: if (condição) { código...} 
 else {código...} 
Instrução: 
 if: valida uma condição, e mediante o resultado, 
executar o código correspondente. 
 else: só será executado se o “ if ” for falso. 
Parâmetros: 
 condição: informação a ser comparada. 
Retorno: TRUE ou FALSE 
 
Código fonte: 
 
void setup(){ 
 pinMode(13, OUTPUT); 
 pinMode(2, INPUT); 
} 
 
void loop(){ 
 if(digitalRead(2)==HIGH){ 
 digitalWrite(13, HIGH); 
 } 
 else{ 
 digitalWrite(13, LOW); 
 } 
} 
 
 
 
 
20 
Sintaxe: digitalRead(pin) 
Parâmetros: 
 pin: refere-se o número do pino que deseja 
utilizar. 
Retorno: TRUE ou FALSE 
 
 
 
 
Explicação do código fonte: Para que o estado do LED seja alterado quando for 
pressionado o botão, primeiramente, temos que definir os pinos de entrada e saída. 
Estes foram definidos dentro da função void setup. O pino 13 foi definido como saída, 
pinMode(13, OUTPUT), e o pino 2 como entrada, pinMode(2, INPUT). 
Na função void loop foi inserida uma condição para verificar o estado do botão. Através 
do comando if, que serve para validar uma condição. Neste caso, a condição passada 
como parâmetro foi “digitalRead(2) == HIGH”, onde, a sintaxe digitalRead(2) é 
responsável pela leitura do estado de um determinado pino digital de entrada. Então, na 
condição mencionada será feita a seguinte verificação: 
 
 Se (if), o pino 2 for igual ao nível lógico alto, significa que o botão foi pressionado 
e executará a linha a seguir, digitalWrite(13, HIGH). 
 Senão (else), significa que a condição é falsa, e o programa executará a seguinte 
linha, digitalWrite(13, LOW). 
 
 
void setup(){ 
 pinMode(13, OUTPUT); 
 pinMode(2, INPUT); 
} 
 
void loop(){ 
 if(digitalRead(2)==HIGH){ 
 digitalWrite(13, HIGH); 
 } 
 else{ 
 digitalWrite(13, LOW); 
 } 
} 
 
 
 
 
21 
EXEMPLO II: Fazer o LED piscar utilizando a estrutura WHILE 
 
Nesse exemplo iremos utilizar a estrutura while para fazer o LED piscar, 
inicialmente ele irá piscar cinco vezes, saíra do loop e piscará mais cinco vezes e assim 
sucessivamente. 
 
Código fonte: 
Sintaxe: while(condição) { código..} 
Instrução: 
 while: verifica se a condição é verdadeira e 
executa o código até que a condição seja falsa. 
Parâmetros: 
 condição: informação a ser comparada. 
Retorno: TRUE ou FALSE 
 
 
 
 
 
Explicação do código fonte: Analisando a primeira linha do código podemos notar na 
expressão int led = 7; definindo que a variável led será equivalente ao pino 7, logo 
declaramos a variável led como saída pinMode(led, OUTPUT); Em seguida uma variável 
que chamamos de cont será o nosso contador indicando quantas vezes o led irá piscar, 
essa variável será a nossa condição de saída da estrutura while. Dentro da estrutura 
while tem-se a expressão cont = cont + 1; que realiza a soma do contador. No caso do 
nosso exemplo enquanto a variável cont for menor que 5 o programa continuará sendo 
executado e quando a condição for atingida será executado um delay de 2 segundos e 
a variável cont é zerada. Dessa forma com a variável cont = 0 o while será executado 
novamente e assim sucessivamente o programa será repetido infinitamente. 
 
EXEMPLO III: Fazer o LED piscar utilizando a estrutura FOR 
int led = 7; 
 
void setup() { 
 pinMode(led, OUTPUT); 
} 
 
void loop(){ 
 int cont = 0; 
 
 while(cont < 5){ 
 digitalWrite(led, HIGH); 
 delay(500); 
 digitalWrite(led, LOW); 
 delay(500); 
 cont = cont + 1; 
 } 
 delay(2000); 
} 
 
 
 
 
22 
 
Nesse programa utilizamos basicamente o código do exemplo II, porém alterando 
a estrutura while para for. 
 
Código fonte: 
 
Sintaxe: for(inicialização; condição; 
incremento) { código..} 
Instrução: 
 for: verifica se a condição é verdadeira, 
executa o código e incrementa o contador 
até que a condição seja falsa. 
Parâmetros: 
 condição: informação a ser comparada. 
Retorno: TRUE ou FALSE 
 
 
Explicação do código fonte: Nesse exemplo fica claro que o for é praticamente um 
while. A diferença está na estrutura, quando utilizamos o for podemos inicializar e 
incrementar a variável cont, garantindo que o loop será finalizado em algum momento. 
 
 
 
 
 
 
 
 
 
Capítulo 5 – Exercícios 
 
int led = 7; 
 
void setup() { 
 pinMode(led, OUTPUT); 
} 
 
void loop(){ 
 int cont; 
 
 for(cont = 0; cont < 5; cont++){ 
 digitalWrite(led, HIGH); 
 delay(500); 
 digitalWrite(led, LOW); 
 delay(500); 
 } 
 delay(2000); 
} 
 
 
 
 
23 
1) Montar um circuito com um LED e um botão (push button), se o botão estiver 
pressionado o LED deve piscar em intervalos de 0,5s caso contrário deve piscar 
em intervalos de 2s. 
 
 
 
 
 
 
 
 
 
 
 
 
 
Funcionamento do Push Button de 4 terminais: Quando o botão não está pressionado 
os terminais estão ligados entre si na vertical, ou seja, o 1 com 3 e o 2 com 4 e quando 
o botão esta pressionado todos os terminais ficam ligados entre si. 
 
 
 
 
 
2) Montar um circuito contendo 4 LEDs e 2 botões (push button), cada botão 
pressionado deve acender dois LEDs conforme mostrado na figura abaixo. 
 
 
 
OBS.: Para os exercícios de 3 até 5 utilizar um intervalo de pelo menos 1 segundo entre 
as alterações de estados das sequências. 
3) Aproveite o circuito montado no exercício 2, faça com que os LEDs acendam em 
sequência conforme a figura abaixo representada. 
 
 
 
 
24 
 Embora não sejam utilizados os botões neste exercício não retire da 
protoboard,pois serão utilizados posteriormente. 
 
 
 
 
4) Utilizar o circuito do exercício 3 e faça com que os LEDs se acendam conforme a 
sequência abaixo representada. 
 
 
 
 
 
 
 
 
25 
5) Utilizar o circuito do exercício 2, enquanto o botão da esquerda estiver 
pressionado a sequência de LEDs deve acender no sentido da esquerda para 
direita e enquanto o botão da direita estiver pressionado a sequência de LEDs 
deve acender no sentido da direita para esquerda. Se os dois botões estiverem 
pressionados todos os LEDs devem estar acesos e se nenhum botão estiver 
pressionado os LEDs devem permanecer apagados. 
 
 
 
6) Montar um circuito com um LED e um botão (push button), se o botão estiver 
pressionado continuamente o LED deve permanecer aceso, um toque rápido no 
botão deve fazer com que o LED pisque em intervalos de 0,3s e, neste caso, para 
parar de piscar o botão deve ser mantido pressionado por mais de 1s (durante o 
tempo pressionado o LED pode permanecer aceso). 
 
 
 
 
 
 
26 
6. RELÉ 
 
Os relés são dispositivos elétricos que funcionam como interruptores, a sua 
aplicação mais comum é quando precisamos acionar componentes que demandam alta 
intensidade de corrente como motores e lâmpadas através de um dispositivo com baixa 
intensidade de corrente, no caso os transistores e CI’s. Além disso, o dispositivo 
eletromecânico possui outras vantagens: 
 
 Acionam um ou mais circuitos ao mesmo tempo; 
 Os sinais de saída são isolados e independentes dos de entrada; 
 O relé pode controlar um sinal DC por meio de tensão AC e vice-versa; 
 
Se analisarmos o seu funcionamento notamos que é algo bem simples. As partes 
que constituem um relé podem ser vistas na figura 6.1a, no caso são as bobinas, uma 
armadura de ferro móvel, um conjunto de contatos, uma mola de arame e os terminais 
para conexão. 
 
 
 Figura 6.1a - Estrutura do relé Figura 6.1b – Diagrama esquemático: relé 
 
Todo o funcionamento do relé está em torno de sua bobina, que nada mais é que 
um fio em torno de um núcleo de aço. Quando a bobina é energizada ela se torna um 
eletroímã, pois os materiais que a constituem apresentam baixa relutância para o fluxo 
magnético, gerando assim um campo magnético. Esse campo magnético irá atuar sobre 
a armadura móvel atraindo-a podendo abrir, fechar ou comutar os contatos do relé. 
C 
B 
B 
NF 
NA 
 
 
 
 
27 
Proteção do circuito de acionamento: quando a corrente que circula pela bobina é 
cortada às linhas de força do campo magnético começam a se contrair havendo a 
indução de uma tensão alta com polaridade oposta aquela que criou o campo. Para evitar 
que o circuito de acionamento do relé seja danificado um diodo é colocado em paralelo 
com as bobinas do relé no sentido inverso a tensão que aciona o relé. Assim o diodo 
absorverá a energia gerada que poderia danificar outros componentes. Para 
dimensionamento é recomendado à utilização de um diodo com tensão reversa mínima 
de 10 vezes a tensão do circuito e a corrente direta maior que a corrente da carga, para 
obter esses dados é necessária à consulta no datasheet do fabricante. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28 
EXEMPLO I: Acionamento do relé utilizando o transistor 
 
O circuito que está demonstrado na figura 6.2 será o exemplo que iremos utilizar 
para testar o acionamento do relé a partir do Arduino. Nesse circuito foi utilizado um 
transistor BC-337, um resistor de 47Ω, um motor DC e um relé 5V. O circuito montado é 
destinado a acionar o motor em apenas um sentido, assim caso queira acionar nos dois 
sentidos uma ponte H deve ser construída. 
 
 
 
Figura 6.2 – Acionamento do relé simulado na protoboard. 
É importante notar que nesse exemplo foram utilizadas duas fontes de 
alimentação, um lado da protoboard é alimentado pelo 5V do Arduino e o outro lado é 
alimentado por uma fonte externa. A parte de controle comandada pela placa Arduino 
está totalmente isolada da carga (motor) que é acionada por outra fonte. Dessa forma a 
parte de controle não tem nenhum contato com a carga, na figura 6.3 é possível observar 
que a saída é independente da entrada. 
 
 
 
 
29 
 
Figura 6.3 – Diagrama esquemático de acionamento do relé. 
 
Código fonte: 
 
 
 
 
 
 
 
 
Explicação do código fonte: Para o controle do motor foi utilizada a porta 8 do Arduino 
pinMode(8, OUTPUT);, O código faz com que o motor seja acionado indefinidamente por 
2 segundos em um intervalo de 1 segundo, pois não temos nenhuma condição de pausa. 
Capítulo 6 – Exercícios 
void setup() { 
pinMode(8, OUTPUT); 
} 
 
void loop() { 
 digitalWrite(8, HIGH); 
 delay(2000); 
 digitalWrite(8, LOW); 
 delay(2000); 
} 
 
 
 
 
30 
 
1) Utilizar o sensor reed switch para o acionamento do relé. 
 
 O Arduino deve receber o sinal do reed switch para poder ativar o circuito de 
acionamento do relé. 
 O relé deverá ligar um motor CC. 
 
 
Figura 1a - Sugestão de montagem do circuito referente ao exercício 1. 
 
Figura 2b – Diagrama esquemático da sugestão de montagem do circuito referente ao exercício 1. 
 
2) Elaborar um circuito que simule a ré do carro, o circuito deve atender os requisitos 
abaixo: 
B 
B 
NF 
NA 
+ 
- 
C 
 
 
 
 
31 
 Deverão ser utilizados dois botões, um botão para simular que foi engatada a 
marcha e outro botão sendo o acelerador do carro. 
 Botão 1: quando o botão 1 for acionado um LED ( utilizar o LED interno do 
Arduino – porta 13) deverá indicar que a marcha ré foi engatada e habilitará o 
botão da aceleração, se o mesmo for pressionado novamente a luz apaga e o 
botão da aceleração não poderá funcionar. 
 Botão 2: deverá funcionar somente depois que o botão 1 for acionado, o botão 
2 indica o acelerador e deverá acionar o motor. 
 Um sensor do tipo reed switch deverá ser utilizado para indicar a proximidade 
de um objeto, caso o sensor seja acionado o sistema todo deverá ser 
desligado. 
 
 
 
Figura 3a - Sugestão de montagem do circuito referente ao exercício 2. 
 
 
 
 
32 
 
Figura 4b – Diagrama esquemático da sugestão de montagem do circuito referente ao exercício 2. 
 
 
B 
B 
NF 
NA 
+ 
- 
C 
 
 
 
 
33 
7. PORTA SERIAL 
 
Quando ligamos o cabo USB no Arduino e a outra extremidade no computador 
podemos dizer que é por meio desse cabo que o Arduino se comunica com o 
computador ou a outros dispositivos que tenham também uma interface. Quando 
conectado ao computador a placa também é alimentada através dos 5V da porta. 
Todas as placas Arduino possui pelo menos uma porta Serial, conhecida como 
UART ou USART. No Arduino UNO a comunicação é feita através dos pinos digitais 
0 (RX) e 1(TX). 
 O termo serial significa um após o outro, ou seja, quando transferimos os dados 
enviamos um bit de cada vez, um após o outro. 
 
 
Figura 7.1 – Transmissão dos bits 
 
A transmissão da informação entre o Arduino e o Computador é feita através do 
cabo USB. A informação é transmitida com zero (0) e um (1), conhecido também como 
bits. Na figura 7.1 está a representação de uma informação sendo transmitida. 
Para analisar se a placa está enviando ou recebendo informação é só verificar os 
LEDs indicadores na placa Arduino, que podem ser visualizados na figura 7.2. Notamos 
que ao lado do TX e RX existem dois LEDs e à medida que enviamos ou recebemos34 
informações eles acendem ou apagam, assim um pisca quando o Arduino está 
recebendo dados (RX) e o outro pisca quando o Arduino está transmitindo dados (TX). 
 
Figura 7.2 – TX e RX da placa Arduino. 
 
Porém se só executarmos a transmissão e recepção dos dados através do código 
programado conseguiremos ver somente as luzes piscando, para conseguir visualizar o 
que está acontecendo devemos abrir o Serial Monitor que já está incorporado na IDE do 
Arduino. 
Através desse ícone é possível acessar o Serial Monitor e monitorar a 
comunicação serial entre o Arduino e o computador. Ou através da barra de ferramentas: 
Tools> Serial Monitor 
É importante lembrar que só podemos abrir o Serial Monitor com uma placa 
Arduino conectada, pois ela precisa iniciar uma conexão. Na figura 7.3 podemos 
visualizar o monitor serial incorporado na IDE do Arduino. 
 
 
Figura 7.3 - Serial Monitor. 
EXEMPLO I: ESCREVENDO UMA FRASE NO SERIAL MONITOR 
 
 
 
 
35 
 
Nesse exemplo iremos transmitir apenas a frase “Hello World!” pela porta serial. 
 
Código fonte: 
 Sintaxe: Serial.begin(taxa); 
Parâmetros: 
Serial.begin: habilita a porta serial. 
taxa: fixa a taxa de transmissão e recepção em 
bits por segundo entre o computador e o Arduino. 
Retorno: nada. 
 
Código fonte: 
 Sintaxe: Serial.println(valor, formato); 
Parâmetros: 
Serial.println: envia para a porta serial um 
caractere ASCII que pode ser capturado por um 
terminal de comunicação. 
 valor: o caractere que será enviado. 
 Formato: é opcional e especifica com quantas casas decimais ou com que base 
numérica vai ser o número transmitido. 
Retorno: Caracteres ASCII que fazem o cursor ir para o início da próxima linha, caso 
deseje continuar escrevendo na mesma linha deve utilizar o comando Serial.print . 
 
Explicação do código fonte: No código mostrado no exemplo I a função setup() ativa 
a porta serial em 9600 bits/s e a função loop(), transmite a frase “Hello World” pela porta 
serial a cada 2 segundos. 
 
OBS.: Para que a transmissão seja realizada corretamente é necessário que a 
velocidade no painel da Serial Monitor seja a mesma utilizada pelo arduino. Este valor 
pode ser fixado na parte inferior direita da janela como podemos ver na figura 7.4. 
 
void setup(){ 
 Serial.begin(9600); 
} 
 
void loop(){ 
 Serial.println("Hello World!"); 
 delay(2000); 
} 
void setup(){ 
 Serial.begin(9600); 
} 
 
void loop(){ 
 Serial.println("Hello World!"); 
 delay(2000); 
} 
 
 
 
 
36 
 
Figura 7.4 – Velocidade do Serial Monitor 
 
 
 
 
 
 
37 
EXEMPLO II: ESCREVENDO UMA LETRA(BYTE) A PARTIR DE UMA ENTRADA 
NO SERIAL MONITOR 
 
Iremos utilizar o Serial Monitor para escrever uma letra (ou byte) e quando a mensagem 
for enviada faremos com que seja escrita no monitor. 
 
Código fonte: 
 Sintaxe: Serial.available(); 
Parâmetros: 
 Serial.available: obtém o número de bytes 
disponíveis para leitura no buffer da porta serial. 
Retorno: retorna o número de bytes disponíveis ou zero 
(0) quando não há informação na porta serial. 
 
Código fonte: 
 Sintaxe: Serial.read(); 
Parâmetros: 
 Serial.read: lê o primeiro byte que está no buffer da 
porta serial 
Retorno: retorna o primeiro byte de dados da porta serial 
ou -1 quando não há informação na porta serial. 
 
Código fonte: 
 Sintaxe: Serial.write(); 
Parâmetros: 
 Serial.write: Escreve os dados em binário na porta 
serial, para enviar os caracteres que representam os 
dígitos utilizar a função Serial.print() em seu lugar. 
Retorno: retorna o número de bytes escritos, a leitura é 
opcional. 
byte msg; 
 
void setup() { 
 Serial.begin(9600); 
} 
void loop() { 
 if (Serial.available()){ 
 msg = Serial.read(); 
 Serial.write(msg); 
 } 
} 
byte msg; 
 
void setup() { 
 Serial.begin(9600); 
} 
void loop() { 
 if (Serial.available()){ 
 msg = Serial.read(); 
 Serial.write(msg); 
 } 
} 
byte msg; 
 
void setup() { 
 Serial.begin(9600); 
} 
void loop() { 
 if (Serial.available()){ 
 msg = Serial.read(); 
 Serial.write(msg); 
 } 
} 
 
 
 
 
38 
Explicação do código fonte: Inicialmente não será exibido nada no monitor serial, pois 
precisamos de uma entrada. Assim que enviarmos um dado a função Serial.available() 
reconhecerá o número de caracteres disponível para leitura e em seguida o dado é lido 
através da função Serial.read() e posteriormente é escrito no monitor através da função 
Serial.write(). 
 
Funções e comandos extras: 
 digitalWrite(porta,!digitalRead(porta)): inverte o estado do porta digital. 
 Operador +=: é utilizado para concatenar os bytes, formando uma string. 
 '0': geralmente as strings são terminadas com caractere nulo que na tabela ASCII 
é representado por 0 indicando o final da string. 
 tone(porta,frequência): envia um sinal para porta indicada na frequência 
selecionada. 
 noTone(porta) : desliga o sinal gerado pela função “tone()” na porta selecionada. 
 
 
 
 
 
 
39 
Capítulo 7 – Exercícios 
 
1) Se a taxa de transferência de dados do Arduino está em 9600 bps e você está 
enviando 12 bytes de dados, quanto tempo leva para enviar esta informação? 
 
2) Se a taxa de transferência de dados do Arduino está em 19200 bps e você está 
enviando 12 bytes de dados, quanto tempo leva para enviar esta informação? 
 
3) Exibir um contador no Serial Monitor atualizado a cada 1s, quando o contador chegar 
a 10 ele deve ser reiniciado. 
 
4) Ligue dois LEDs ao arduino, ao digitar o número da porta do LED ele deve acender 
e se estiver aceso ele deve apagar. 
 
5) Ligue dois LEDs e dois botões (um para cada LED) ao arduino, quando o botão for 
pressionado o LED deve mudar de estado (aceso/apagado) e deve ser informado no 
Serial Monitor qual seria o estado do LED. 
 
6) A partir da nota musical digitada no Serial Monitor o buzzer deverá ser acionado na 
frequência correspondente. 
 
• Frequência das notas musicais: 
• Sol (396Hz) 
• Lá (440Hz) 
• Si(495Hz) 
• Dó(528Hz) 
• Ré(594Hz) 
• Mi(660Hz) 
• Fá(704Hz) 
 
 
 
 
 
 
 
40 
8. FUNÇÃO pulseIn() E O SENSOR DE ULTRASSOM 
 
A função pulseIn() retorna o tempo que um pino leva até receber o estado indicado 
(LOW ou HIGH) ou seja, ao ser iniciada esta função começa a contar o tempo em 
microssegundos, quando o pino recebe o estado configurado na função ela interrompe 
o contador retornando o total de tempo. 
 
Sintaxe: pulseIn(pino,estado,tempo limite) 
 pino: inserir o número do pino a ser verificado. 
 estado: definir o estado a ser verificado (HIGH ou LOW). 
 tempo limite: este parâmetro é opcional e define o tempo máximo que a 
função vai esperar para que ocorra o estado indicado. Por default o tempo 
limite é de 1 segundo. 
 
Exemplo: long Tempo = pulseIn(6,HIGH); 
Neste exemplo é criada uma variável chamada Tempo que recebe o tempo decorrido até 
o pino 6 receber o valor HIGH. 
 
SENSOR DE ULTRASSOM 
 
Os sensores de ultrassom são equipamentos que utilizam as ondas sonoras para 
medir a distância entre o sensor e um determinado objeto. O sensor é composto por um 
emissor e um receptor de ultrassom, o emissor emite uma onda na frequência do 
ultrassom e se houver algum objeto na frente parte da onda vai refletir e voltar para o 
ultrassom. O sinal de saída do sensor é dado pelo tempo que a onda levou para ir e 
voltar, assim para o calculo da distância basta multiplicar o tempo pela velocidadedo 
som no ar (343 m/s) e depois dividir por dois, ida e volta da onda. 
 Os sensores mais comuns de ultrassom normalmente são constituídos por dois 
módulos de ultrassom, um emissor e o outro receptor, o emissor está ligado ao pino Trig 
e o receptor ao pino Echo. Quando aplicamos uma tensão (normalmente 5V) no pino Trig 
o módulo passa a emitir um sinal ultrassônico, o modulo ligado ao pino Echo, quando 
 
 
 
 
41 
recebe um sinal ultrassônico fornece uma tensão neste pino, ou seja, através da 
diferença de tempo entre a emissão e a recepção podemos calcular a distância do sensor 
até um objeto. No sensor existem ainda mais dois pinos um de alimentação (Vcc) e um 
de terra (Gnd), como podemos observar na figura 8.1. 
 
 
Figura 9.1 – Sensor HC-SR04 
 
 
 
 
Capítulo 8 – Exercício 
 
1) Utilizar o sensor de ultrassom e mostrar no Serial Monitor a distância, em centímetros, 
de um objeto até o sensor. 
 
Obs.: Para calcular a distância você pode utilizar a seguinte expressão: 
 Distância = Velocidade da onda * tempo em microssegundos / 20000 
 
 
 
 
 
 
42 
9. DISPLAY LCD 16X02 
 
Os displays LCD são componentes essenciais em muitas aplicações onde se 
utiliza um microcontrolador, pois deixa o projeto muito mais amigável e atraente. Com a 
inclusão do display é possível disponibilizar parâmetros e informações ao usuário, 
aumentando assim a gama de funções e operações com baixo custo de implementação. 
Um diferencial do display é a sua simplicidade de uso, alguns modelos como o 
que utiliza o processador HD44780 podem ser utilizados com apenas 4 vias de dados 
(modo 4 bits), economizando as portas do microcontrolador. Porém para quem está 
desenvolvendo um projeto que exige muito do display e precisa de uma taxa de 
atualização mais eficiente recomenda-se utilizar o display no modo 8 bits, obtendo assim 
um ganho de performance. Nas figuras 9.1 e 9.2 pode-se observar o diagrama 
esquemático do display LCD. 
 
Figura 9.1 – Diagrama esquemático do display LCD. 
 
 
Figura 9.2 – Display LCD. 
Na tabela 9.1 está descrito a função de cada pino de controle. 
 
 
 
 
43 
 
Pino Nome Função 
1 Vss Terra/ GND 
2 Vdd Positivo (5V) 
3 V0/ Vee Controla o contraste, a partir de uma tensão de 0 à +5V. Para o controle basta 
utilizar um potenciômetro entre 10kΩ e 20kΩ. 
4 RS Indica se o dado enviado é um comando ou um caractere. 
5 R/W Informa se o comando é de leitura (1) e gravação (0) 
6 E Informa que o dado está pronto para ser lido pelo display LCD. 
7 D0 
 
Barramentos de dados de 8 bits. O barramento pode ser utilizado de duas 
formas, com os oito sinais em paralelo ou quatro sinais (D4 a D7) que são 
transmitidos em dois pacotes, conhecido também como “nibble”. 
8 D1 
9 D2 
10 D3 
11 D4 
12 D5 
13 D6 
14 D7 
15 A Controle da luz de fundo (Anodo) 
16 K Controle da luz de fundo (Catodo) 
Tabela 9.1 – Características do Display LCD. 
 
UTILIZANDO BIBLIOTECAS COM O ARDUINO 
 
Quando pensamos em bibliotecas temos em mente uma sala cheia de livros de 
diversas áreas, podemos fazer essa analogia à biblioteca utilizada com os 
microcontroladores, nesse caso seria uma pasta que contém arquivos de diversos 
dispositivos. 
Cada dispositivo possui suas particularidades, como por exemplo, o display LCD, 
na tabela 9.1 podemos ver que existem pinos de controle de gravação, controle de dados 
e assim por diante, o que a biblioteca faz é se encarregar de toda essa parte de baixo 
nível e deixa de forma mais simples a sua utilização. Mas para isso ser possível um 
usuário precisou estudar toda a estrutura do dispositivo, qualquer pessoa é capaz de 
desenvolver a sua biblioteca basta conhecer/ estudar o dispositivo desejado. 
Na web existem diversas bibliotecas disponíveis para download e a que iremos 
estudar é a LiquidCrystal. Como essa biblioteca vem com a IDE do Arduino não é 
necessário baixá-la. 
EXEMPLO I: Demonstração do funcionamento do display LCD 
 
 
 
 
44 
 
O intuito do exemplo é demonstrar o funcionamento do display LCD através da 
biblioteca LiquidCrystal. 
 
 
Figura 9.3 – Montagem do display LCD no Arduino. 
 
Figura 9.4 – Circuito esquemático da montagem do display LCD no Arduino. 
 
 
 
 
45 
 
Explicação do circuito: No circuito esquemático na figura 9.3 demonstra a ligação dos 
pinos do display LCD. É válido lembrar que o pino R/W do display foi colocado no GND, 
pois está indicando o modo de gravação. O display também está ligado no modo 4bits, 
ou seja, apenas os pinos de dados D4, D5, D6, D7 foram ligados. O pino V0 do display 
é correspondente ao contraste e para o seu ajuste foi acionado um potenciômetro de 
10KΩ, sem o potenciômetro os caracteres podem não aparecer no visor. 
 
Adicionando a biblioteca LiquidCrystal 
 No início do programa é onde adicionamos as bibliotecas que iremos utilizar ao 
longo da programação. Para adicionar a biblioteca LiquidCrystal basta acessar 
na IDE do Arduino Sketch/ Import Library/ LiquidCrystal. Na figura 9.1 segue a 
demonstração de como adicionar a biblioteca. 
 
Figura 9.5 – Inserindo a biblioteca LiquidCrystal. 
 
 
 
 
 
 
46 
Código fonte: 
 
Sintaxe: LiquidCrystal lcd(RS, Enable, D4, D5, 
D6, D7); 
 
Parâmetros: 
 lcd: é uma variável do tipo LiquidCrystal. 
 RS: deve ser inserido o número da porta que o 
RS que está conectado ao Arduino. 
 Enable: deve ser inserido o número da porta 
que o Enable está conectado ao Arduino. 
 D4 – D7: inserir os números das portas que os 
pinos de dados estão conectados ao Arduino. 
 Retorno: nada 
 
 
Código fonte: 
 
Sintaxe: lcd.begin(colunas, linhas) 
 
Parâmetros: 
 lcd: é uma variável do tipo LiquidCrystal. 
 colunas: inserir o número de colunas do 
display que está sendo utilizado. 
 linhas: inserir o número de linhas do display 
que está utilizado. 
 Retorno: nada 
 
 
 
 
#include <LiquidCrystal.h> 
 
LiquidCrystal lcd(12, 11, 10, 
5, 4, 3, 2); 
 
void setup() 
{ 
 lcd.begin(16,2); 
 lcd.print("hello, world!"); 
} 
 
void loop() {} 
#include <LiquidCrystal.h> 
 
LiquidCrystal lcd(12, 11, 10, 
5, 4, 3, 2); 
 
void setup() 
{ 
 lcd.begin(16,2); 
 lcd.print("hello, world!"); 
} 
 
void loop() {} 
 
 
 
 
47 
Código fonte: 
 
Sintaxe: lcd.print(data) 
 
Parâmetros: 
 lcd: uma variável do tipo LiquidCrystal. 
 print: exibe as informações desejadas no 
display. 
 data: inserir as informações que se deseja 
exibir no display (char, byte, int, long ou string). 
 Retorno: o print() retorna o número de bytes 
escrito, a leitura desse dado é opcional. 
 
 
Explicação do código fonte: No exemplo o pino RS do display foi ligado ao pino 12 do 
Arduino e o pino Enable foi ligado na porta 11. Os pinos de dados D4, D5, D6, D7 estão 
ligados respectivamente nas portas 5, 4, 3, 2. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include <LiquidCrystal.h> 
 
LiquidCrystal lcd(12, 11, 10, 
5, 4, 3, 2); 
 
void setup() 
{ 
 lcd.begin(16,2); 
 lcd.print("hello, world!"); 
} 
 
void loop() {} 
 
 
 
 
48 
 
Capítulo 9 – Exercícios 
 
1) Fazer um cronômetro para marcar minutos e segundos exibidos em um display LCD, 
ligar um botão ao circuito e quando este for pressionado o cronômetro deve ser 
zerado. 
 
2) Desenvolver um circuito para sinalizar a proximidade do objeto com o sensor de 
ultrassom, o circuito deve atender os requisitos abaixo: 
 A distância do objetodeve ser exibida display LCD; 
 Assim que a distância for menor que 30 cm um alarme deve ser ativado, no caso 
um buzzer que imitirá bips. 
 Se a distância for menor que 15 cm o alarme sonoro deve ficar contínuo. 
 Se a distância for menor que 8 cm o circuito deve ser desligado e uma fileira de 
LEDs deverá acender da esquerda para esquerda indicando que o sistema está 
desligado.

Continue navegando