Você está na página 1de 264

PROJETO 1

Prof. Eng. Luiz Gustavo


OBJETIVO GERAL DO PROJETO

 Projeto: Pisca LED (o famoso blink)


-Objetivo: Fazer um led acender e apagar por
intervalos de tempo pré-definidos resultando
no efeito de um pisca-pisca.
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno com cabo USB 1
Jumpers macho-macho 2
Protoboard 400 furos 1
Led 1
Resistor 220 ohms 1
ANÁLISE DO HARDWARE

ARDUINO
É um pequeno computador capaz de lê entradas,
processar dados e programar saídas

Plataforma de computação física ou embarcada,


ou seja, pode interagir com o ambiente por meio
de hardware e software

Ele é uma plataforma de prototipagem

Ele não é um microcontrolador, e sim possui um.


ANÁLISE DO HARDWARE

PROTOBOARD
É um dispositivo reutilizável, sem solda, utilizado para
prototipar um circuito eletrônico ou para experimentar
projetos de circuitos.

A placa consiste em uma série de furos em grade; sob a


placa , estes furos são conectados por uma tira de metal
condutivo exatamente como mostrado na figura ao lado.

É importante lembrar que há um espaço vazio no meio da


protoboard que tem o objetivo de encaixar Circuitos
integrados, de modo que cada pino do chip vá em um
barramento diferente.
ANÁLISE DO HARDWARE

LED – Características básicas

LED siginifica: Light Emitting Diode


DIODO EMISSOR DE LUZ

O diodo é um dispositivo que permite o fluxo de


corrente elétrica em apenas um sentido.

Um LED também é um diodo todavia ele também


emite luz.

Existem vários tipos de cores e intensidades


luminosas além da parte ultravioleta e infravermelha
do espectro.
ANÁLISE DO HARDWARE

LED – Características físicas


O LED possui dois terminais de
comprimentos diferentes:
ÂNODO E CATODO

O ÂNODO é o terminal de maior comprimento ,


parte cilíndrica do LED, e recebe o potencial
POSITIVO do Arduino (Ex: +3,3V)
O CÁTODO é o terminal de menor comprimento,
parte chanfrada do LED, e recebe o potencial GND,
ou também chamado de terra.
Se você conectar o LED com o lado invertido ele não
vai funcionar e dependendo da corrente ele pode ser
danificado de forma permanente
ANÁLISE DO HARDWARE

É possível obter LED’s bicollores ou tricolores, que possui


vários terminais saindo dele.

Um LED RGB oferece um LED vermelho, verde e


azul. (Red, green, blue) .

É possível variar a intensidade de cada cor obtendo


qualquer cor desejada.
ANÁLISE DO HARDWARE

RESISTOR
É um dispositivo projetado para provocar resistência à
passagem da corrente elétrica, causando uma queda na
voltagem em seus terminais

O valor de sua resistência é conhecido, e sua unidade é


dada em Ohm , e seu símbolo é o ômega grego [Ω].

Seu valor é determinado por Neste caso, a função do resistor é Limitar a tensão e
meio de um código de cores que a corrente que o led ficará submetido.
fica gravado no seu corpo.
ANÁLISE DO HARDWARE

POR QUE É IMPORTANTE O COLOCAR UM RESISTOR?

Especificação do LED Pino digital do Arduino


Grandeza Valor Grandeza Valor
Tensão 2V Tensão 5V
Corrente 35 mA Corrente 40 mA
ANÁLISE DO HARDWARE

RESISTOR: CALCULANDO A RESITÊNCIA NECESSÁRIA


R ??
5v
iL 2v 3v

VR = R.iL R = 85,7 Ω
3 = R.35. 10-³ Como não existe resistor comercial com este
valor é escolhido uma resistência próxima
com um valor maior, no caso: 100 Ω
ANÁLISE DO HARDWARE

Calculei o valor. Como identifico fisicamente a


resistência com o valor desejado?
Resistores vêm com valor padrão, e devemos escolher
sempre aquele que tiver a resistência próxima daquela
que calculamos

Para este caso, sempre escolha o valor mais próximo e


MAIOR que o valor calculado pois se você fizer o
contrário poderá queimar o LED

Nós identificamos o valor da resistência por meio do


código de cores gravado em seu corpo de ACORDO COM
A TABELA A SEGUIR
ANÁLISE DO HARDWARE
ESQUEMÁTICO DE MONTAGEM

A perna maior do Led


A perna menor do Led
deve ser conectada no
deve ser conectada no
pino 9.
pino GND.
Esta perna é chamada de
Esta perna é chamada de
Anodo.
catodo.
ALGORITMO OU PASSO-A-PASSO
Início

Declarar o pino digital 9


como saída

Acender o Led

Esperar 1 segundo

Apagar o led

Esperar 1 segundo
Vamos escrever o código?

AGORA SUA MISSÃO É TRANSFORMAR ESTE


ALGORITMO, PASSO-A-PASSO EM UM CÓDIGO DE
PROGRAMAÇÃO.
ANÁLISE DO CÓDIGO ARDUINO

Trata-se apenas de um comentário textual. É essencial


para o código pois ajuda na compreensão do mesmo
como ajuda na recordação das funcionalidades.

// PROJETO 1 – LED PISCANTE Se o seu código estiver sendo lido por outra
pessoa, os comentários ajuda na compreensão.

Os comentários são iniciados por // e são


desprezados pelo compilador, ou seja, NÃO FAZ
/* PARTE DA PROGRAMAÇÃO.
PROJETO 1 – LED PISCANTE
*/
ANÁLISE DO CÓDIGO ARDUINO
Coloque nome da variável Esta linha se refere à declaração de uma variável.
que seja descritivo, ou
seja, que faça sentido
dentro do código
Uma variável é um local em que podemos
armazenar dados, ou seja, é como se fosse uma
int ledPin = 9; caixinha que guardamos objetos.

O nome deve iniciar com uma A variável tem três característica:


LETRA e não pode ser igual a 1.Tipo. Ex: inteiro (int)
nenhuma palavra chave da 2. Nome. Ex: ledPin
linguagem C (while, if ,etc) 3. Valor armazenado

Um inteiro para o Arduino é um Ao final da instrução há um ponto e vírgula. Este


número entre -32768 a 32767 símbolo diz ao compilador que a instrução está
completa.
ANÁLISE DO CÓDIGO ARDUINO
O sketch(código) do Arduino deve ter uma
void: Significa que a função setup() e outra função loop(), do
função não retorna contrário, não funcionará
nenhum resoltado
A função setup é executada apenas uma vez no
início do programa. Geralmente é utilizada para
configurar parâmetros gerais do programa.
void setup() {
pinMode(ledPin, OUTPUT) ; Uma função é uma porção de código agrupada em
} um bloco. É muito útil quando você quer realizar
uma série de operações complicadas. Quando você
Os parênteses vazios () indica coloca dentro de uma função, você pode executar
que não é necessário fornecer quantas vezes quiser apenas chamando seu nome.
nenhum parâmetro para que
esta função seja executada.
Todo código dentro da função deve está contido
entre as chaves. O símbolo “{ “inicia e o outro “} “
termina o bloco
ANÁLISE DO CÓDIGO ARDUINO
A função setup neste programa possui apenas
uma instrução dentro dela: pinMode.

Ela define o modo de um dos pinos digitais do


Arduino. No caso, ela definiu como saída
(OUTPUT), e não como entrada (INPUT).
pinMode(ledPin, OUTPUT) ;
Neste caso, o pino escolhido foi o ledPin, que no
caso vale 10, já declarado anteriormente

Esta função está dizendo o seguinte para o Arduino:


DEFINA O PINO 9 COMO SAÍDA DE DADOS
ANÁLISE DO CÓDIGO ARDUINO
A função loop() é uma função do programa que
executa continuamente enquanto o Arduino
estiver ligado.

Cada instrução é executada passo-a-passo, uma


void loop() { por voz, na sequência escrita e mostrada ao lado,
digitalWrite(ledPin, HIGH); até que se alcance o fim da função
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
Depois de todas as instruções da função loop serem
} executadas, o loop reinicia desde o príncipio e
executada infinitamente, ou até que o Arduino seja
desligado, ou botão de Reset seja pressionado
ANÁLISE DO CÓDIGO ARDUINO
Esta função escreve um valor ou também
Acender o Led chamado de nível lógico digital HIGH(alto) ou
LOW(baixo) para o pino de dentro da instrução

Quando se define HIGH o Arduino envia 5V para o


digitalWrite(ledPin, HIGH); respectivo pino digital enquanto que o LOW envia
0V ou terra.

Como no esquemático o anodo do led está


ligado na porta digital do Arduino e o catodo no
terra, ao enviar HIGH para o pino, o LED ACENDE.
ANÁLISE DO CÓDIGO ARDUINO
Esperar 1 segundo com o
LED ACESO

Diz ao Arduino esperar um tempo especificado


em milissegundos, antes de executar a próxima
instrução.
delay(1000);

Neste caso, o Arduino vai aguardar 1 SEGUNDO


ANÁLISE DO CÓDIGO ARDUINO

APAGAR O LED digitalWrite(ledPin, LOW);

ESPERAR 1 SEGUNDO delay(1000);


PROJETO 2

Prof. Eng. Luiz Gustavo


OBJETIVO GERAL DO PROJETO

 Projeto: CÓDIGO MORSE S.O.S


-Objetivo: Fazer um led piscar simulando o sinal de socorro
internacional em código Morse através das letras S.O.S.

O código Morse é um tipo de codificação de


caracteres que transmite letras e números utilizando
o padrão ligado e desligado
Código MORSE

Traço curto: Tempo curto: 150 ms


Traço Longo: Tempo longo: 400 ms
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno com cabo USB 1
Jumpers macho-macho 2
Protoboard 400 furos 1
Led 1
Resistor 220 ohms 1
ANÁLISE DO HARDWARE

ARDUINO RESISTOR

A ANÁLISE JÁ FOI FEITA NO


PROTOBOARD VÍDEO ANTERIOR:
LED PROJETO 1 – LED PISCANTE
ESQUEMÁTICO DE MONTAGEM
MESMO
ESQUEMÁTICO
DO VÍDEO
ANTERIOR:
PROJETO 1 – LED
PISCANTE

A perna maior do Led


A perna menor do Led
deve ser conectada no
deve ser conectada no
pino 9.
pino GND.
Esta perna é chamada de
Esta perna é chamada de
Anodo.
catodo.
ALGORITMO OU PASSO-A-PASSO
Início

Declarar o pino digital 9


como saída

Marca 3 pontos Símbolo: S

Esperar 1 segundo Intervalo entre letras

Marca 3 traços Símbolo: O

Esperar 1 segundo Intervalo entre letras

Marca 3 pontos Símbolo: S

Esperar 1 segundo Intervalo entre letras


Vamos escrever o código?

AGORA SUA MISSÃO É TRANSFORMAR ESTE


ALGORITMO, PASSO-A-PASSO EM UM CÓDIGO DE
PROGRAMAÇÃO.
ANÁLISE DO CÓDIGO ARDUINO

Iremos fazer a análise detalhada apenas dos


conceitos novos. O restante já foi analisado
anteriormente no projeto 1.

Nos demais projetos só serão analisados os novos


conceitos de hardware e software
ANÁLISE DO CÓDIGO ARDUINO
Este bloco é responsável pela saída dos 3 pontos
A CADA LOOP A
CONDIÇÃO É TESTADA!

Isto é feito utilizando a função loop: for.


for (int x=0; x<3; x++) { É uma função de repetição.
digitalWrite(ledPin, HIGH);
delay(150);
digitalWrite(ledPin, LOW); A função “for” precisa de 3 parâmetros:
delay(100); 1. Inicialização
} 2. Condição
3. Incremento
QUANDO A CONDIÇÃO SE
TORNA FALSA , O PROGRAMA
SAI DA FUNÇÃO. As instruções dentro deste bloco são repetidas e o
incremento somado enquanto a condição for
verdadeira.
ANÁLISE DO CÓDIGO ARDUINO

DETALHANDO A FUNÇÃO FOR


1º Definir uma variável “x” e declarar como zero para ser
o inicializador . int x = 0
• == (igual a)
2º Definir uma condição para decidir quantas vezes o
• != (nao igual a)
código será repetido. x<3. As instruções do bloco serão
• < (menor que)
repetidas 3 vezes.
• > (maior que)
• <= (menor ou igual a)
3º Inserir um incremento: x++. É uma instrução que
• >= (maior ou igual a)
eleva o valor de x em uma unidade. Pode ser escrito
também x = x +1.

•1+1=2
•3-2=1
•2*4=8
•8/2=4
PROJETO 3

Prof. Eng. Luiz Gustavo


PROJETOS BÁSICOS
3. Semáforo
 Projeto: Semáforo de trânsito
-Objetivo: Fazer 3 leds simularem o
funcionamento de um sinal de trânsito.
PROJETOS BÁSICOS
3. Semáforo
Lista de componentes
Componente Quantidade
Arduino uno 1
Jumpers macho-macho 4
Protoboard 400 furos 1
Led vermelho 1
Led amarelo 1
Led verde 1
Resistor 220 ohms 3
Análise do código e Hardware

Este projeto contempla os mesmos componentes e


códigos da linguagem de programação dos projetos
anteriores.
PROJETOS BÁSICOS
3. Semáforo
Esquemático de montagem
ALGORITMO OU PASSO-A-PASSO
Início
1.Declarar os 3 pinos como saída.
2. Apagar todos os leds
Configurar parâmetros 3. Define o tempo de espera do
verde ou vermelho
Acender o verde
Apagar o vermelho

Esperar 5 segundo Sinal verde por 5 segundos

Apagar o verde
Acender o amarelo

Esperar 1 segundo Sinal amarelo por 1 segundo

Apagar o amarelo
Acender o vermelho

Esperar 5 segundo Sinal vermelho por 5 segundos


PROJETO 4

Prof. Eng. Luiz Gustavo


PROJETO 4
Semáforo Interativo
Projeto: Semáforo de trânsito Interativo
-Objetivo: Inserir no projeto anterior(semáforo), um semáforo
para pedestres, e um botão para que os pedestres solicitem a
travessia da rua.
Este é o primeiro projeto em que nós iremos interagir com o
Arduino, fazendo-o realizar algo, que neste caso, é por meio do
botão.
PROJETOS BÁSICOS
3. Semáforo
Lista de componentes
Componente Quantidade
Arduino uno 1
Jumpers macho-macho 4
Protoboard 400 furos 1
Led vermelho 2
Led amarelo 1
Led verde 2
Resistor 220 ohms 5
Resistor de 150 Ω 1
Botão táctil(push button) 1
ANÁLISE DO HARDWARE

1.Temos um componente novo neste projeto:

Botão táctil ou botão momentâneo ou push button


2. O resistor de 150 Ω estará conectado no botão mas
terá uma função diferente daquela que vimos nos
projetos anteriores.
ANÁLISE DO HARDWARE

ESTADOS LÓGICOS
Um circuito lógico é um circuito para
emitir uma saída de ligado ou
desligado, representado pelos números
binários 1 e 0, respectivamente.

Estado Número binário Nível de Tensão Nível lógico


Mas... O que
é resistor DESLIGADO 0 0V (ou próximo) LOW
pull-up e LIGADO 1 5V(ou próximo) HIGH
pull-down?
Se a voltagem não ficar próxima de 0V ou 5V, podemos considerar esta
parte do circuito como flutuante ou ruído elétrico . Por isso, é comum
trabalhar com resistores pull-up e pull-down para FORÇAR o estado
desejado (alto ou baixo).
ANÁLISE DO HARDWARE

RESISTORES PULL-DOWN E PULL-UP

Diversos circuitos necessitam ter alguns pinos constantemente


em nível lógico baixo ou alto para ativar ou desativar
funcionalidades importantes no circuito.
Por isso, estes resistores são muito importantes para estas
aplicações.
ANÁLISE DO HARDWARE
RESISTOR PULL-DOWN

Objetivo: Evitar que o nível lógico no pino do


Arduino fique flutuando entre dois valores (0 e 1V).
i
i

Quando o botão é pressionado a corrente flui pelo


caminho de menor resistência.

Desta forma é possível fazer com que o nível


lógico no pino quando o botão for pressionado
seja ALTO (HIGH- 5V) e quando estiver solto
BAIXO(LOW – 1v)
ANÁLISE DO HARDWARE
RESISTOR PULL-UP

Objetivo: Evitar que o nível lógico no pino do


Arduino fique flutuando entre dois valores (0 e 1V).
i

Quando o botão é pressionado a corrente flui pelo


caminho de menor resistência.

i
Desta forma é possível fazer com que o nível
lógico no pino quando o botão for pressionado
seja BAIXO(LOW – 1v) e quando estiver solto ALTO
(HIGH- 5V).
ANÁLISE DO HARDWARE
RESISTORES PULL-UP INTERNO DO ARDUINO

Nos pinos digitais e analógicos do Arduino, temos uma


resistência pull-up interna de 20 KΩ que devem ser
ativadas via software.
São bastante úteis e evitam em alguns casos as
resistências pull-up que acabamos de estudar.
ESQUEMÁTICO DE MONTAGEM
ALGORITMO OU PASSO-A-PASSO

Início

Configurar parâmetros

Verde para os carros


Vermelho para os pedestres

Marca “este” momento da Botão pedestre foi


alteração do sinal pressionado
E
Já passou 5 segundo desde NÃO
a última alteração de sinal?
Verde para os carros
Vermelho para os SIM
pedestres Espera um tempo para os Vermelho para os carros
pedestres atravessar Verde para os pedestres
ANÁLISE DO CÓDIGO

Este tipo de variável “long” diferentemente do


tipo “inteiro” armazena um número entre
-2.137.483.648 a 2.147.483.647.

Como foi especificado “unsigned” significa que


unsigned long changeTime a variável não pode armazenar valores
negativos. Ou seja, 0 a 4.294.967.295.

Com a variável “inteira” só era possível


armazenar o equivalente a 32 segundos. Já com
a long, podemos chegar a 49 dias esperando
alguém apertar o botão
4.294.967.295 ms = 49 dias
ANÁLISE DO CÓDIGO

Espera um pouco... É praticamente Variáveis ocupam espaço de memória!


inevitável que ao menos uma vez Portanto, quanto maior o número maior o
dentro de espaço de memória consumido do
49 dias, algum pedestre pressione o microcontrolador (neste caso, o Atmega328).
botão.

Esta tolerância de tempo não está


muito grande?

Será que tem algum problema em usar


este tipo de variável?
ANÁLISE DO CÓDIGO
TIPOS DE DADOS

Veja o tamanho e
tipo do dado a
ser armazenado
e depois escolha
o tipo de variável!
ANÁLISE DO CÓDIGO

A instrução digitalRead lê o valor do pino digital


int state = digitalRead(button); que está entre os parênteses e retorna o valor
para a variável inteiro state.

Este bloco de instruções verifica 2 condições: se


if (state == HIGH && (millis() - changeTime) > 5000) {
// Chama a função para alterar as luzes o botão foi pressionado, e se já se passaram
changeLights(); pelo menos 5 segundos desde a última
} alteração de sinal.

VAMOS ANALISAR DETALHADAMENTE CADA


INSTRUÇÃO E FUNÇÃO DESTE BLOCO?
ANÁLISE DO CÓDIGO

millis() - changeTime
A função millis() é integrada à linguagem
Arduino ,e retorna o tempo em millisegundos
desde o início da execução do programa atual

A variável changeTime irá armazenar o


momento em que houve a última alteração do
sinal de pedestre.
ANÁLISE DO CÓDIGO
Exemplo:
if (x>500) {digitalWrite(ledPin, HIGH);
A função if é uma estrutura de controle, cujo
propósito é verificar se determinada condição
foi ou não atingida.

Caso a condição seja verdadeira, as instruções


que estão dentro do bloco são executadas.
ANÁLISE DO CÓDIGO

state == HIGH && (millis() – changeTime)>5000

Símbolo Operador O QUE FAZ O símbolo && é um operador


booleano, ou seja, são
== IGUAL Verifica se as duas condições são instruções lógicas.
iguais.

&& E LÓGICO É verdadeiro apenas se ambas as


condições forem Eles são úteis para testar
diversas condições em funções
|| OU LÓGICO É verdadeiro se um ou mais dos if.
operandos forem verdadeiros

! NÃO É verdadeira apenas se o operando


for falso.
ANÁLISE DO CÓDIGO

VERDADEIRA
ANÁLISE DO CÓDIGO
Este é um exemplo de
chamada de função . O
programa sai da linha atual,
changeLights(); pula para a função desejada
e depois retorna ao ponto do
código logo após à chamada
. de funcão.
.
.
Função é tão somente um
bloco de código separado que
recebeu um nome .
changeLights{
Instrução 1;
Instrução 2;
Instrução 3; Elas podem receber ou retornar
Instrução 4 dados.
}
PROJETO 5

Prof. Eng. Luiz Gustavo


PROJETO 5
Iluminação sequencial com leds
Projeto: Iluminação sequencial com Leds
-Objetivo: Realizar um efeito de iluminação sequencial,
semelhante ao do carro KITT, da série da TV “A Super Máquina” ou
do rosto do Cylons da série “Battlestar Galactica”.
PROJETOS BÁSICOS
5. Iluminação sequencial
Lista de componentes
Componente Quantidade
Arduino uno 1
Jumpers macho-macho 11
Protoboard 400 furos 1
Led vermelho 10
Resistor 220 ohms 10
PROJETOS BÁSICOS
Esquemático de Montagem
ANÁLISE DO HARDWARE

Não utilizaremos nenhum componente novo,


portanto não teremos esta análise.
ALGORITMO OU PASSO-A-PASSO

Início

Configurar parâmetros
Início

Apaga todos os Leds


Marca o tempo inicial da
alteração entre os LED’s Acende o Led da vez

Incrementa o valor da
sequência dos LEDs

O LED já ficou o
tempo mínimo SIM
Está no INÍCIO
aceso? NÃO da sequência?

sentido
sequência:
NÃO
INÍCIO-> FIM
SIM Está no FIM da
Marca este momento que Direciona o programa para a sequência?
rotina(função) SIM
o led aceso foi alterado
de alteração dos leds sentido NÃO
sequência:
FIM -> INÍCIO
ANÁLISE DO CÓDIGO

Estes números
representam os
pinos a que os
Leds estão Este tipo de variável “byte” é do tipo
conectados array(vetor). Um array é um conjunto de
variáveis acessadas por meio de um índice.
Arrays são indexados a partir do zero, logo:
ledPin[0] possui o valor 4
ledPin[3] possui o valor 6

Elementos do array
Você deve declarar o tamanho o array se não inicializá-
lo com valores, por exemplo: ledPin[10];
Mas como você atribuiu valores ( 4 a 13), o compilador
0– 1– 2– 3– 4– 5 6 7 8 9 é capaz de contar e mensurar o tamanho array por
Índices do array conta própria.
PROJETO 5

Prof. Eng. Luiz Gustavo


PROJETO 5
Iluminação sequencial com leds
Projeto: Iluminação sequencial com Leds
-Objetivo: Realizar um efeito de iluminação sequencial,
semelhante ao do carro KITT, da série da TV “A Super Máquina” ou
do rosto do Cylons da série “Battlestar Galactica”.
PROJETOS BÁSICOS
5. Iluminação sequencial
Lista de componentes
Componente Quantidade
Arduino uno 1
Jumpers macho-macho 11
Protoboard 400 furos 1
Led vermelho 10
Resistor 220 ohms 10
PROJETOS BÁSICOS
Esquemático de Montagem
ANÁLISE DO HARDWARE

Não utilizaremos nenhum componente novo,


portanto não teremos esta análise.
ALGORITMO OU PASSO-A-PASSO

Início

Configurar parâmetros
Início

Apaga todos os Leds


Marca o tempo inicial da
alteração entre os LED’s Acende o Led da vez

Incrementa o valor da
sequência dos LEDs

O LED já ficou o
tempo mínimo SIM
Está no INÍCIO
aceso? NÃO da sequência?

sentido
sequência:
NÃO
INÍCIO-> FIM
SIM Está no FIM da
Marca este momento que Direciona o programa para a sequência?
rotina(função) SIM
o led aceso foi alterado
de alteração dos leds sentido NÃO
sequência:
FIM -> INÍCIO
ANÁLISE DO CÓDIGO

Estes números
representam os
pinos a que os
Leds estão Este tipo de variável “byte” é do tipo
conectados array(vetor). Um array é um conjunto de
variáveis acessadas por meio de um índice.
Arrays são indexados a partir do zero, logo:
ledPin[0] possui o valor 4
ledPin[3] possui o valor 6

Elementos do array
Você deve declarar o tamanho o array se não inicializá-
lo com valores, por exemplo: ledPin[10];
Mas como você atribuiu valores ( 4 a 13), o compilador
0– 1– 2– 3– 4– 5 6 7 8 9 é capaz de contar e mensurar o tamanho array por
Índices do array conta própria.
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 6

Prof. Eng. Luiz Gustavo


PROJETO 6
Iluminação sequencial
com leds - INTERATIVA
Projeto: Iluminação sequencial com Leds - INTERATIVA
-Objetivo: Alterar a velocidade das luzes por meio de um
potenciômetro enquanto o código está em execução.
PROJETOS BÁSICOS
5. Iluminação sequencial
Lista de componentes
Componente Quantidade
Arduino uno 1
Jumpers macho-macho 11
Protoboard 400 furos 1
Led vermelho 10
Resistor 220 ohms 10
Potenciômetro Giratório de 4,7 kΩ 1
ANÁLISE DO HARDWARE

Potenciômetro
O potenciômetro é um resistor ajustável com um
alcance de zero a um valor definido
(vem gravado em seu corpo). Neste caso, seu valor é
de 4,7 KΩ, ou seja, pode variar de 0 a 4,7 K Ω (4700 Ω).

Se conectar apenas dois, teremos um resistor


variável. Se conectarmos os três, ele será um divisor
de tensão. Precisamos desta última forma, para
conectá-lo na entrada analógica por meio do seu pino
central

Ajustando o botão, teremos no pino central


uma tensão de 0 a 5V, que será lida na entrada
analógica do Arduino.
ANÁLISE DO HARDWARE

GND VCC
5v
ENTRADA
ANALÓGICA
ARDUINO
PROJETOS BÁSICOS
Esquemático de Montagem
ALGORITMO OU PASSO-A-PASSO
Início

Configurar parâmetros

Marca o tempo inicial da


Início
alteração entre os LED’s
Apaga todos os Leds
Fazer a leitura do potenciômetro
Acende o Led da vez
Ajustar a velocidade de alteração das luzes
Incrementa o valor da
sequência dos LEDs

O LED já ficou o
tempo mínimo SIM
Está no INÍCIO
aceso? NÃO da sequência?

sentido
sequência:
NÃO
INÍCIO-> FIM
SIM Está no FIM da
Marca este momento que Direciona o programa para a sequência?
rotina(função) SIM
o led aceso foi alterado
de alteração dos leds sentido NÃO
sequência:
FIM -> INÍCIO
ANÁLISE DO CÓDIGO

Os pinos
analógicos não
precisam ser Para ler o valor de um pino analógico, devemos
definidos como utilizar a função analogRead. Para isso,
entrada ou saída podemos utilizar qualquer um dos 6 pinos
analógicos (A0 a A5).
Cada entrada possui um conversos analógico-para-
digital de 10bits. Isso possibilita uma leitura de 0 a 5V,
utilizando valores inteiros de 0(0V) a 1023 (5V).
Resolução de 5V/1024 = 4,9mV/unidade

O valor lido do pino analógico que está conectado ao


potenciômetro será o valor do tempo: 0 a 1023 ms,
para ajustar a velocidade do efeito.
Índices do array
ANÁLISE DO CÓDIGO
NÚMEROS DE DIVISÕES (10 BITS) TENSÃO EM VOLTS LIDA NO
PINO ANALÓGICO DO ARDUINO
0 0
1 0,0049
2 0,0098
3 0,0147
. .
. .
. .
1022 4,9951
1023 5v
PROJETO 7

Prof. Eng. Luiz Gustavo


PROJETO 7
LÂMPADA PULSANTE

Objetivo: Controlar a intensidade do brilho do LED, ao invés, de


apenas acender ou apagar. Iremos utilizar os pinos PWM bem
como os conceitos de programação para gerar este efeito.
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 2
Protoboard 400 furos 1
Led vermelho 1
Resistor 220 ohms 1
ANÁLISE DO HARDWARE

Não existem componentes novos. Os


componentes deste projeto já foram analisados no
Projeto 1.
Veremos novos conceitos de programação.
ESQUEMÁTICO DE MONTAGEM

A perna maior do Led


A perna menor do Led
deve ser conectada no
deve ser conectada no
pino PWM 9.
pino GND.
Esta perna é chamada de
Esta perna é chamada de
Anodo.
catodo.
ALGORITMO OU PASSO-A-PASSO
Início

Configurar parâmetros

Entra em um loop “for” para


mudar a intensidade do LED
Contador
Condição
Configurar parâmetros Aplicar o valor obtido na
Incremento
FOR saída PWM (Brilho do LED)
LED apagado
(brilho nulo)
Converter graus para Incrementa o valor de x
radiano

Transforma em um valor Brilho do Led está SIM


inteiro de 0 a 255 no máximo?
(Rotina for chegou
ao fim)
NÃO
ANÁLISE DO CÓDIGO

Você precisa
transformar de
graus para Neste projeto você está criando uma onda
radiano. senoidal e fazendo com que o brilho do LED
acompanhe esta onda. Isto causa o efeito
pulsante no LED.

A função sin() é uma função matemática no Arduino


para calcular o seno de um ângulo. Dentro da função, o
ângulo deve estar em radianos.

O resultado desta expressão deve ser positivo


(0 a 255), portanto, o ângulo não pode estar fora do
intervalo de 0 a 179, pois estamos utilizando o seno.
Índices do array
ANÁLISE DO CÓDIGO

O resultado deve ser armazenado dentro de


uma variável chamada ledVal, multiplicando por
255.

É necessário converter o tipo flutuante de sinVal para


inteiro, utilizando a função int().
ANÁLISE DO CÓDIGO

Esta função envia o valor inteiro ledVal para o pino


PWM ledPin, o qual está conectado no pino 9.

Os pinos PWM na Arduino estão identificados NA


PLACA por um ~ e o nome PWM.
No Arduino Uno, são seis (3,5,6,9,10 e 11).

Por meio desta função (analogWrite) estes pinos são


diferentes dos outros pois eles são capazes de enviar
(escrever) um SINAL PWM em suas saídas.
ANÁLISE DO CÓDIGO

O que é sinal PWM?


PWM significa Pulse Width Modulation, ou
A duração do modulação por largura de pulso (MLP), e
tempo em que a representa uma técnica para obter resultados
saída permanece
ligada é chamada analógicos por meio digitais.
de LARGURA DE
PULSO
Nestes pinos, o Arduino envia uma onda quadrada,
Tensão do pino PWM ligando e desligando o pino muito rapidamente.
Nível lógico alto(HIGH)
5V(ligado)
Este padrão ligado/desligado, permite simular uma
voltagem entre 0 e 5V. Isto é feito alterando a quantidade
Pino do
de tempo em que a saída permanece alta(ligada) e baixa
Arduino 0V(desligado) tempo (desligada).
Nível lógico baixo(LOW)
Período do
pulso:
2ms(500Hz)
ANÁLISE DO CÓDIGO A duração do
tempo em que a
saída permanece
ligada é chamada
de CICLO DE
Entenda o que é: Ciclo de trabalho (duty cycle) TRABLHO OU DUTY
CYCLE!

Ciclo de trabalho igual a zero – DT = 0%


Tempo em que o LED fica aceso é nulo LED APAGADO

Valor enviado: 63
(25% do total de 255) – DT = 25% LED COM 25% DE INTENSIDADE
Tempo em que o LED fica aceso é 25% DO BRILHO
do período do pulso

Valor enviado: 127 (50% do total de 255) LED COM 50% DE INTENSIDADE
DT = 50% DO BRILHO

LED COM 100% DE


Valor enviado: 255 (100% do total de 255) INTENSIDADE DO BRILHO
DT = 100%

CICLO DE
TRABALHO
0%→ 0
100% -→ 255
PROJETO 8

Prof. Eng. Luiz Gustavo


PROJETO 8
LAMPADA RGB

Objetivo: Iremos aproveitar o recurso PWM do projeto anterior


utlizando 3 leds (vermelho, azul e verde) para
misturar estas cores resultando na cor que você
quiser.
RGB: R (RED/VERMELHO)
G (GREEN/VERDE)
B(BLUE/AZUL)
Vamos criar uma mood Lamp, como aquela que
vemos nas lojas que muda de cor para caracterizar
o humor do ambiente.
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 4
Protoboard 400 furos 1
Led vermelho 1
Led verde 1
Led azul 1
Resistor 220 ohms 3
ANÁLISE DO HARDWARE

Não existem componentes novos. Os


componentes deste projeto já foram analisados no
Projeto 1.
Veremos novos conceitos de programação.
ESQUEMÁTICO DE MONTAGEM
ALGORITMO OU PASSO-A-PASSO
Início

Configurar parâmetros

Define um ponto de partida


para gerar valores aleatórios

Cria um array para os valores


iniciais dos leds (desligados)

Cria um array para os valores


finais aleatórios RGB dos leds

Define o incremento para


Incrementa o valor de cada
avançar de um valor para
LED
o outro em 256 passos

Atribui os valores Finalizou os


SIM Define um novo valor
aleatórios para cada LED 256 passos? final aleatório

NÃO
ANÁLISE DO CÓDIGO
Afinal de contas, o que é RGB?

RGB é a combinação das


3 cores primátias:
Pode ser um Led RGB
vermelha, verde e azul com quatro terminais
(Um é o catodo comum)

Podem ser 3 Leds


ANÁLISE DO CÓDIGO
Variando os valores analógicos que são enviados pelo PWM a cada um dos
3 Leds, você pode conseguir a cor que quiser (não apenas as cores da tabela
abaixo). Observe:

Você pode LED Vermelho LED verde LED azul COR


conseguir até 255 0 0 Vermelha
16.777.216 cores!
(255x255x255) 0 255 0 Verde
0 0 255 Azul
255 255 0 Amarela
0 255 255 Ciano
255 0 255 Maganeta
255 255 255 Branco
ANÁLISE DO CÓDIGO

O comando randomSeed cria números pseudo-


aleatórios, para o chip iniciar a contagem.

É necessário definir uma semente(seed) para


que o microcontrolador possa iniciar a
contagem, pois um chip de computador não é
capaz de gerar números aleatórios de verdade.
Ele pega dados da sua memória.

Nós coletamos esta semente fazendo uma leitura do


pino analógico do Arduino. Como ele não está
conectado a nada, o valor lido será um número
aleatório gerado por um ruído analógico.
ANÁLISE DO CÓDIGO

Será necessário dois conjuntos de arrays de 3


elementos para gerar valores para RGB para as
lâmpadas.

RGB1 contém os valores inicias das lâmpadas


(tem como função deixar os leds, desligados)
RGB2 contém valores aleatórios nos quais
desejamos que a lâmpada faça a transição.

random(256): Gera um valor aleatório de 256 valores


( entre 0 e 255).
random(10,100): Gera um valor aleatório entre 10 e 99.
Perceba que o limite superior não faz parte do sorteio.
ANÁLISE DO CÓDIGO

O objetivo desta
função dentro deste
projeto é evitar
números negativos, constrain é uma função que força os valores
como também aleatórios estarem dentro de um intervalo.
maiores que 255.

Ela requer 3 parâmetros: constrain (x,a,b)


x: Número desejado para restringir
a: menor valor do intervalo
b: maior valor do intervalo

Então esta função verifica o valor de x, e garante que o


resultado estará entre a e b. Se o número aleatório
gerado for menor que a, o resultado é a. Se for maior
que b, o resultado é b.
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 9

Prof. Eng. Luiz Gustavo


PROJETO 9
EFEITO DE FOGO

Objetivo: Utilizar o PWM para gerar um efeito aleatório de


cintilação para imitar o efeito de uma chama
cintilante.

Lâmpadas

Teatro

Dioramas

Maquete de
ferromodelismo
Filmes
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 4
Protoboard 400 furos 1
Led vermelho 1
Led amarelo 2
Resistor 220 ohms 3
ANÁLISE DO HARDWARE E DO
CÓDIGO

Não existem componentes novos. Os


componentes deste projeto já foram analisados no
Projeto 1.
Também não há novos conceitos de
programação.
ESQUEMÁTICO DE MONTAGEM
ALGORITMO OU PASSO-A-PASSO
Início

Configura os parâmetros

Escreve um valor aleatório


na saída de todos os leds

Esperar um tempo
aleatório entre 0 e 99 ms
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 10
00111010

Prof. Eng. Luiz Gustavo


PROJETO 10
CONTROLE SERIAL RGB – MOOD LAMP

Objetivo: Controlar a lâmpada RGB enviando


comandos do PC para o Arduino utilizando o Serial
Monitor, do IDE Arduino.
Veremos o conceito de comunicação serial e a
manipulação de strings de texto.
LISTA DE COMPONENTES
ESQUEMÁTICO DE MONTAGEM
ANÁLISE DO HARDWARE

Os componentes e o esquemático de montagem


já foram visto no Projeto 8 – LED RGB.
A análise do Hardware já foi feita no projeto 1.
ESQUEMÁTICO DE MONTAGEM
ALGORITMO OU PASSO-A-PASSO
Início

Configurar parâmetros...
Novo: Iniciar comunicação Serial

Foi enviado
algum dado
pela serial?
Não
Sim
Armazena os dados da Serial em
um buffer

Envia o valor PWM para o pino


Faz o tratamento dos dados
do LED correspondente

Verifica qual Letra e Número


foram enviados
ALGORITMO
Faz o tratamento dos dados

Início
Envia o buffer preenchido para a
função de tratamento da informação
Define um ponteiro para o
números de caracteres Cria outra variável para acessar o buffer

Remove os espaços e vírgulas do valor


Espera 100 ms para o buffer encher enviado

Armazena o valor tratado na variável


Armazena o número de caracteres
data
recebidos em uma variável

Lê e armazena o caractere lido Limpa o buffer e a linha serial


dentro de um array buffer
Envia o valor PWM para o pino
do LED correspondente
Leitura
Não finalizada? Sim

FIM
ANÁLISE DO CÓDIGO
O QUE É UM PSEUDOCÓDIGO??

Linguagem do computador descrita com mais detalhes, utilizando


palavras e pensamentos.
ANÁLISE DO CÓDIGO

-Inicia comunicações Serias

-O número entre parênteses define a taxa


de transmissão em pulsos por segundos.
Neste caso, podemos dizer 9600 bits por
00111010 segundos.

-A comunicação serial é uma das formas


que os dispositivos, módulos e
computadores se comunicam.
Comunicação serial
ANÁLISE DO CÓDIGO

Buffer com dados


0001010100101 Liberará caracteres que estejam na linha
010101010101 serial, deixando-a vazia e pronta para
entradas/saidas.

Buffer Limpo

Comunicação serial
ANÁLISE DO CÓDIGO

Serve para verificar se algum caractere


foi enviado pela linha serial.
001010101011

Comunicação serial
ANÁLISE DO CÓDIGO

while é um loop condicional que é


executada enquanto uma condição
está sendo atendida.

O comando Serial.read(), lê dados seriais,


um bit por vez.

Todos os bits são armazenados dentro do


buffer.
ANÁLISE DO CÓDIGO

O monitor serial é uma ferramenta


muito importante para quem
programa pois conseguimos imprimir
nesta tela qualquer dado desejado em
relação ao nosso programa.

Nesta tela é possível visualizar os


dados que são enviados do Arduino,
como também escrever por meio da
janela de texto os dados a serem
enviados para a Arduino.
ANÁLISE DO CÓDIGO

Deixa o curso ao final do texto


É a forma de enviarmos dados da
Arduino para o PC.
O comando print envia o que estiver
dentro dos parenteses para o PC, por
meio do cabo USB, e voce pode ler o
resultado na janela do Serial Monitor.
Imprime a informação data , e depois avança uma
linha. O próximo texto será impresso na linha É um recurso importante, pois podemos
abaixo.
enxergar tudo o que está acontecendo na
Arduino se enviarmos os dados para o PC.
ANÁLISE DO CÓDIGO

Tem como propósito dividir strings


em partes menores.

Ele vai eliminar o espaço ou vírgula da


informação que você digitar.
R127 G56 B98 → R127G56B98

Ela divide quanto encontra um espaço ou


vírgula.
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 11

Prof. Eng. Luiz Gustavo


PROJETO 11
ALARME COM SONORIZADOR PIEZO

Objetivo: Iremos criar o som de uma sirene de


carro
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 4
Protoboard 400 furos 1
Sonorizador ou disco piezo (opcional) 1
Módulo buzzer 1
ANÁLISE DO HARDWARE
É um dispositivo feito de uma fina camada de
cerâmica, ligada a um disco metálico.

Materiais piezoelétricos, feitos de cristais e


cerâmica, têm a capacidade de produzir
eletricidade quando uma pressão mecânica é
aplicada a eles.

O efeito é reversível: Se um campo elétrico for


aplicado em um material piezoelétrico, ele fará
com que o material mude de forma.

O campo elétrico é desligado e ligado


mudando a forma do material, e
conseqüentemente gerando sons.
ESQUEMÁTICO DE MONTAGEM
ALGORITMO OU PASSO-A-PASSO
Início

Configurar parâmetros

Entra em um loop “for” para


mudar a frequência do SOM

Configurar parâmetros Gera uma frequência a


FOR partir do valor do seno

Converter graus para Insere a frequência no módulo


radiano buzzer e aguarda 2 segundos

Calcular o valor do seno Frequência está no SIM


máximo ?
(Rotina for chegou ao
fim)

NÃO
ANÁLISE DO CÓDIGO
O comando tone() é utilizado para
gerar a freqüência do sonorizador

O comando tone() requer dois ou tres parametros, da


seguinte maneira:
tone(pin, frequency)
tone(pin, frequency, duration)

Pino: Pino digital utilizado para o buzzer


Frequência: Frequência da nota musical utilizada
Duração (opcional): Duração em millisegundos do som

Se a duração não for especificada, o som


será emitido até o comando noTone(pino)
ser executado.
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 12

Prof. Eng. Luiz Gustavo


PROJETO 12
MELODIA COM SONORIZADOR PIEZO

Objetivo: Usar o piezo para tocar musica e


melodias. Vamos tocar o refrão da música
“Puff, o dragão mágico”
LISTA DE COMPONENTES / ANÁLISE DO
HARDWARE / ESMÁTICO DE MONTAGEM

IREMOS UTILIZAR OS MESMOS COMPONENTES E


O MESMO ESQUEMÁTICO DE MONTAGEM DO
PROJETO PASSADO.
ALGORITMO OU PASSO-A-PASSO

Início

Configurar parâmetros

Tocar melodia

Melodia
chegou ao
fim? NÃO
Sim

Aguardar 5 segundos
ANÁLISE DO CÓDIGO
# define... É uma diretiva que define
o valor e seu token correspondente.

É útil pois evita que você substitua o mesmo valor


(que pode ser bem grande, pi, por exemplo:
3,14592653... )em diversas linhas do seu código.

Facilita a leitura do seu código por você e


principalmente por terceiros.

Para alterar o valor de uma diretiva basta


alterar o seu valor ao lado, e o novo valor
é repassado para todo o código, pois o
token é o mesmo.
Não precisa de ponto-e-vírgula ao final
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 13

Prof. Eng. Luiz Gustavo


PROJETO 13
SENSOR DE BATIDA PIEZO

Objetivo: Fazer o Arduino ler o sinal de corrente


elétrica vinda o sensor piezo.
Um disco piezo se deforma ao ser atravessado por
uma corrente elétrica, e o inverso também ocorre:
quando se bate nele ou ele sofre algum tipo de
pressão, a força do material provoca a geração de uma
corrente elétrica.
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 4
Protoboard 400 furos 1
Sensor piezo ou módulo buzzer 1
Led vermelho 1
Resistor de 1 MΩ 1
ANÁLISE DO HARDWARE

Não precisa pois já vimos nos projetos anteriores.


ESQUEMÁTICO DE MONTAGEM
ALGORITMO OU PASSO-A-PASSO
Início

Configurar parâmetros:

Piscar o Led 2 vezes para iniciar

Decrementar o
Fazer a leitura do sinal do sensor
valor do brilho

Sinal detectado Atribuir valor do


maior/igual que o brilho ao LED
limiar?
NÃO
Sim
Definir brilho máximo
para o LED
ANÁLISE DO CÓDIGO

Não precisa pois já vimos nos projetos anteriores.


Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 14

Prof. Eng. Luiz Gustavo


PROJETO 14
SENSOR DE LUZ LDR
Objetivo: Neste projeto, iremos utilizar um LDR para detectar a luz, e um
sonorizador piezo para fornecer feedback sonoro da quantidade
de luz detectada.

Aplicações com a configuração do projeto de hoje:


Alarmes

Instrumentos musicais, como o teremim


LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 4
Protoboard 400 furos 1
Módulo buzzer 1
Resistor de 1o kΩ 1
Sensor LDR 1
ANÁLISE DO HARDWARE

LDR (Light Dependent Resistor, ou LDR) :


Resistor dependente de Luz, é utilizado para
medir a luminosidade de um ambiente.

É composto por Sulfeto de Cádmio (CdS)

Também é chamado de fotorresistor, pois sua


resistência elétrica depende da luz que incide
Maior resistência sobre o material fotocondutor.

Quando a luz atinge o LDR, ele perde sua resistência


SENSOR LDR (ficando em torno de 10kΩ ou menos, por exemplo). Se o
ambiente for escuro, ele pode chegar até 100 kΩ.
Menor resistência
ANÁLISE DO HARDWARE

Também chamado de divisor de potencial é


utilizado para converter de um para outro
nível de tensão, por exemplo.

Como a resistência de R1 é fixa, e a do LDR


varia com a luz, podemos ter diferentes
valores para Vout que está indo para o pino
analógico do Arduino.

LDR
LUZ
Os valores de tensão lidos são analisados
como variação da luminosidade do ambiente
ANÁLISE DO HARDARE
ESQUEMÁTICO DE MONTAGEM

10 kΩ
ALGORITMO OU PASSO-A-PASSO
Início

Configurar parâmetros:

Fazer a leitura do sinal do sensor

Emite um bip

Espera 25 ms

Interrompe o som

Espera um tempo conforme a


leitura do sensor
ANÁLISE DO CÓDIGO

Não há conceitos novos de programação!


Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 15

Prof. Eng. Luiz Gustavo


PROJETO 15
CONTROLE DE UM MOTOR CC

Objetivo: Controlar a velocidade do motor CC em apenas uma direção.


Este projeto é útil para diversas aplicações móveis como robôs,
por exemplo.
LISTA DE COMPONENTES

Componente Quantidade

Arduino uno 1

Jumpers macho-macho 6

Protoboard 400 furos 1

MOTOR CC 5V 1

Transistor TIP 1

Potenciômetro 10 kΩ 1

Diodo 1N4001

Fonte de alimentação externa 1


(5V) 3
Pilhas AA de 1,5V
ANÁLISE DO HARDWARE

Um motor gera um campo magnético (em sua


bobina – enrolamento) quando uma energia é
fornecida nos seus terminais, fazendo um rotor
girar.

Pela lei de Lenz, quando a alimentação é removida


surge uma corrente reversa que pode retornar pela
afiação e danificar o Arduino. Por isso, é necessário
um diodo para proteger o Arduino.

Ele pode girar no sentido horário ou anti-horário


dependendo da polaridade da alimentação
fornecida.
ANÁLISE DO HARDWARE
O diodo é uma válvula de uma via. Só permite a
passagem de corrente elétrica em apenas um
sentido semelhantemente à válvula de retenção de
um encanamento residencial, por exemplo.

O terminal do diodo que tem a faixa branca é


chamado de catodo, enquanto que o outro é
chamado de anodo.

Para ele conduzir, o potencial aplicado no Anodo


deve ser maior e ter pelo menos 0,7 V(diodo de silício) de
São essenciais em circuitos de proteção
diferença do potencial aplicado no catodo.
contra alimentação incorreta, tensão
reversa etc.
ANÁLISE DO HARDWARE
O transistor pode ser utilizado como chave digital ou
amplificador de potência. Neste circuito, iremos utilizá-lo
como uma chave.

Ele possui 3 terminais: coletor, base e emissor. É possível


controlar ligar ou desligar o transistor por meio da
aplicação de uma determinada. tensão em sua base.

Ele é utilizado para controlar correntes maiores daquela


que o Arduino é capaz de suportar.

Quando ele é ligado ele permite o fluxo de corrente entre


o coletor e o emissor, fazendo o motor funcionar.
Datasheet TIP 122
ESQUEMÁTICO ELETRÔNICO
MOTOR

GND

M
ARDUINO
PINO PWM 9

FONTE DE
ALIMENTAÇÃO 5V
OU 3 pilhas AA

GND
ESQUEMÁTICO DE MONTAGEM
10 kΩ
TIP-122
Base-coletor-emissor

Verificar o
datasheet caso
seja outro
transistor

Diodo
1N4001

FONTE DE
ALIMENTAÇÃO 5V
OU 3 pilhas AA
ALGORITMO OU PASSO-A-PASSO

Início

Configurar parâmetros:

Fazer a leitura do sinal do


potenciômetro e divide por 4

Ajusta a velocidade do motor


ANÁLISE DO CÓDIGO

Não há conceitos novos de programação!


Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 16

Prof. Eng. Luiz Gustavo


PROJETO 16
CI L293D – CONTROLADOR DE MOTOR

Objetivo: Utilizar um CI (Circuito integrado) controlador de motor L293D.


Vantagens:
LISTA DE COMPONENTES
Componente Quantidade
Arduino uno 1
Jumpers macho-macho 12
Protoboard 400 furos 1
MOTOR CC 5V 1
CI L293D 1
Potenciômetro 10 kΩ 1
Chave seletora 1
Fonte de alimentação externa (5V) 1 Se não utilizar o
Pilhas AA de 1,5V 3 dissipador no
chip L293D pode
Resistor 10 kΩ 1
derreter o chip,
Dissipador de calor 1 e até a
protoboard!!!
Lista de componentes
ANÁLISE DO HARDWARE

Além do chip L293D, poderíamos estar utilizando


outros chips controladores como SN754410, ou
módulos específicos para controles de motores,
como a mini ponte victory L298N

O L293D é uma ponte H dupla. Um conceito


importantíssimo na eletrônica .
ELE CONTROLA VELOCIDADE E SENTIDO DE
Você pode usar também... ROTAÇÃO DO MOTOR COM APENAS 3 PINOS DE
CONTROLE.

Veja a seguir, o conceito e o princípio de


Cuidado com as especificações elétricas!! A montagem
pode mudar! funcionamento de uma ponte H.
ANÁLISE DO HARDWARE
Datasheet
PONTE H
i
Uma ponte H é uma configuração com 4 chaves e
uma carga no centro. Leva este nome, pois lembra
a letra H.

Cada par de chaves na diagonal gira o motor em


sentidos contrários.

i Dentro deste chip não utilizadas chaves comuns, e sim


transistores para realizarem a função de chave como o
projeto 15 (projeto passado).

O chip L293D possui duas pontes como esta e portanto


são capazes de controlar 2 motores: velocidades e
direção, ao mesmo tempo.
ESQUEMÁTICO DE MONTAGEM

10 kΩ

5v
10 kΩ

FONTE DE
ALIMENTAÇÃO 5V a
12V OU 3 pilhas AA
Esquemático de montagem
Mapeamento de pinos
L293D
CHIP L293D CIRCUITO CIP L293D CIRCUITO
Enable 1 Pino 6 Arduino VSS 5V (Arduino)
Input1 Pino 3 Arduino Input3
Output1 Motor 1 Output3
GND GND GND GND
GND GND GND GND
Output2 Motor 1 Output4
Input 2 Pino 4 Arduino Input 4
VS (12V) Fonte Externa (+) Enable 2
ALGORITMO OU PASSO-A-PASSO
Início

Configurar parâmetros:

Fazer a leitura do sinal do


potenciômetro e divide por 4

Ajusta a velocidade do motor

Não
Chave está em Gira o motor no sentido
nível lógico HIGH? anti- horário

Sim
Gira o motor no sentido horário
ANÁLISE DO CÓDIGO

Não há conceitos novos de programação!


Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 17

=9

Prof. Eng. Luiz Gustavo


PROJETO 17
CONTADOR BINÁRIO 8 BITS
REGISTRADOR DE DESLOCAMENTO 74HC595

Objetivo: Fazer com 8 leds contem de forma binária. Na prática iremos controlar
8 leds utilizando apenas 3 pinos de saída do Arduino.
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 20
Protoboard 400 furos 1
Led vermelho 8
CI – Registrador de deslocamento 74HC595 1
Resistor 220 Ω 8
Sistema de números binários

Seres humanos utilizam o sistema Contagem.


decimal ou numérico de base 10, pois Posseum 10 dígitos, de 0 a 9.
temos 10 dedos

Os computadores sabem o que é ON (ligado) e


OFF(desligado) , níveis lógicos de tensão Contagem.
diferentes. Por isso, usam o sistema binário, ou de
base 2. Posseum 2 dígitos, de 0 e 1.
SISTEMA DE NÚMEROS BINÁRIOS
Cada dígito (0 ou 1) representa um bit
Um número de 8 bits é chamado de 1 byte
ANÁLISE DO HARDWARE
É um registrador de deslocamento de 8 bits com
entrada serial e saída serial ou paralela, latches de
saída. Você envia 1 bit por vez, e tem na saída 8 bits
ao mesmo tempo.

Serial: Um bit por vez


Paralela: Muitos bits por vez(8 bits neste caso)
Latches: travas de saída

O pino Latch é semelhante a um portão: permite


que dados apenas entrem no chip quando está em
LOW, e o contrário quando está em HIGH.
Datasheet do CI74HC595
ANÁLISE DO HARDWARE
PINO do 595 Função

11 Latch (portão)

12 Clock

14 10
Entrada de dados
1 0

1 0 1 0
1 0 01
HIGH
1 0 10
(bit 1)
1 01 0 1 1 1 1
0 0 00
1 0 1 0 LOW HIGH
0 0
0 0 LOW HIGH
1 0 1 0
ANÁLISE DO HARDWARE

SEQUÊNCIA DE EVENTOS
ESQUEMÁTICO DE MONTAGEM

Q7 Q6

3.3V

LED

LED
Mapeamento de pinos
CI74HC595
CI 74HC595 CIRCUITO CI 74HC595 Circuito
Q1 Led1 VCC 3.3V Arduino
Q2 Led2 Q0 Led0
Q3 Led3 DS Pino 11 Arduino
Q4 Led4 OE GND Arduino
Q5 Led5 ST_CP Pino 8 Arduino
Q6 Led6 SH_CP Pino 12 Arduino
Q7 Led7 MR 3.3V Arduino
GND GND Arduino Q7’
ALGORITMO OU PASSO-A-PASSO
Lógica de
Início programação

Configurar parâmetros:
Função dos 8 bits de saída

Entra no loop for até 256 Limpa a linha de dados para o


envio de mais bits

Permite o fluxo de dados pelo


pino Latch Gera 8 bits(LOW ou HIGH) por
meio de uma operação lógica
entre a contagem e uma
Direciona o programa para a
máscara de bits (Função FOR)
função bits de saída enviando o
valor sequencial “i” da
contagem Armazena o bit no registrador

Interrompe o fluxo de dados


Envia os bits para o pino de saída
ANÁLISE DO CÓDIGO

A condição “dataOut & (1<<i), é


chamada de máscara de bits.

O operador “&” é chamado de


operador de bit a bit.
Eles são operadores lógicos porém
atua nos níveis dos bits.

Neste caso, realizam a operação


lógica E(&) entre dois números:
dataOut
Resultado de: (1<<i)
Operadores bit a bit

Realizam cálculos em variáveis no nível dos bits

Podem ser utilizados


apenas entre interios.

Cada operação desta obedece a uma


regra lógica. Confira a seguir!
Operador: E (&) bit a bit

Se ambas as entradas forem 1, a saída


será 1. Do contrário, será zero.
OU ( | ) bit a bit

Se qualquer das entradas forem 1, a


saída será 1. Do contrário, será zero.
XOU ( ^ ) bit a bit

Se apenas uma das entradas forem 1,


a saída será 1. Do contrário, será zero.
NÃO ( ~ ) bit a bit

A saída se torna o oposto da entrada.


Deslocamento para a esquerda (<<)
Deslocamento para a direita (>>)

Operadores de deslocamento
movimentam os bits para a esquerda
ou para a direita, pelo número
posições no operando da direita.

Os bits do fim da linha são


perdidos para sempre.
Entendendo estes conceitos no
código...
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 18

Prof. Eng. Luiz Gustavo


PROJETO 18
CONTADOR BINÁRIO DUPLO
REGISTRADOR DE DESLOCAMENTO 74HC595

Objetivo: Montar um contador binário duplo, por meio da montagem de dois


CI’s 74HC595 conectados em cascata.
Um CI irá contar na ordem crescente e outro na ordem decrescente,e
vice-versa
Primeiro CI: 0 a 256 ////// 256 a 0
Segundo CI: 256 a 0 ///// 0 a 256
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 20
Protoboard 400 furos 1
Led vermelho 8
CI – Registrador de deslocamento 74HC595 2
Resistor 220 Ω 16
Led verde 8
ANÁLISE DO HARDWARE E DO
CÓDIGO
ESQUEMÁTICO DE MONTAGEM – CI 595 (1)

Q7 Q6

3.3V

LED

LED

PINO 14 DO CI 2
ESQUEMÁTICO DE MONTAGEM – CI 595 (2)

Q7 Q6

PINO 9 DO CI 1

3.3V

LED

LED
Mapeamento de pinos
CI74HC595 (1)
CI 74HC595 CIRCUITO CI 74HC595 Circuito
Q1 Led1 VCC 3.3V Arduino
Q2 Led2 Q0 Led0
Q3 Led3 DS Pino 11 Arduino
Q4 Led4 OE GND Arduino
Q5 Led5 ST_CP Pino 8 Arduino
Q6 Led6 SH_CP Pino 12 Arduino
Q7 Led7 MR 3.3V Arduino
GND GND Arduino Q7’ Pino 14 CI 2
Mapeamento de pinos
CI74HC595 (2)
CI 74HC595 CIRCUITO CI 74HC595 Circuito
Q1 Led1 VCC 3.3V Arduino
Q2 Led2 Q0 Led 0
Q3 Led3 DS Pino 9 CI 1
Q4 Led4 OE GND Arduino
Q5 Led5 ST_CP Pino 8 Arduino
Q6 Led6 SH_CP Pino 12 Arduino
Q7 Led7 MR 3.3V Arduino
GND GND Arduino Q7’
ALGORITMO OU PASSO-A-PASSO
Lógica de
Início programação

Configurar parâmetros:
Função dos 8 bits de saída

Entra no loop for de 0 a 256 Limpa a linha de dados para o


envio de mais bits

Permite o fluxo de dados pelo


pino Latch Gera 8 bits(LOW ou HIGH) por
meio de uma operação lógica
entre a contagem e uma
Direciona o programa para a
máscara de bits (Função FOR)
função bits de saída enviando o
valor sequencial “i” da
contagem Armazena o bit no registrador

Envia os bits para o pino de saída Interrompe o fluxo de dados

Entra no loop for de 256 a 0, e


repete o mesmo processo!
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 19

Prof. Eng. Luiz Gustavo


PROJETO 19
DISPLAY DE MATRIZ DE PONTOS
ANIMAÇÃO BÁSICA

Objetivo: Utilizar os dois CI’s 74HC595 conectados a uma matriz de pontos para
mostrar o funcionamento deste novo componente, e o efeito de multiplexação.
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 20
Protoboard 400 furos 1
Display de Matriz de pontos (8x8) (C+) 1
C+ :Catodo comum
(Veja o datasheet)
CI – Registrador de deslocamento 74HC595 2
Resistor 220 Ω 8
ANÁLISE DO HARDWARE

É uma matriz de pontos vermelhos formada


por Leds. Neste caso, uma matriz 8x8, com
16 pinos: 8 para linhas e 8 para colunas.

Com ele é possível controlar 64 Leds com 2 CI’s


74HC595 utilizados no projeto passado.
É possível criar imagens, e outros efeitos

Conectando todos os catodos dos leds da


Cada Led é chamado de pixel. Estes Leds mesma linha , e os anodos na mesma coluna,
poderiam ser RGB, com isso seria possível
gerar intensidades e cores diferentes! é possível obter este fenômeno.
ANÁLISE DO HARDWARE
5V
As linhas e colunas existem para
minimizar o número de pinos utilizados!
Se não, iríamos utilizar 65 pinos!!!
0V Acender o Led da 3ª Linha e 5ª Coluna :
Basta aplicar 5V à 5ª Coluna, e 0V na 3ª
coluna:
ANÁLISE DO HARDWARE
E para acender também o Led da
5ª linha e 3ª coluna?
5V 5V
Para se evitar isso, iremos recorrer a um
recurso importantíssimo na Eletrônica:
A multiplexação.
0V Se fizermos isso, veremos que 2 Leds
indesejados acenderão!

0V
MULTIPLEXAÇÃO

É a técnica de controlar diversas saídas alternando


o momento de acionamento!
Neste projeto, esta técnica irá acender uma linha
por vez, e cada led de forma sequencial.

Se isso for feito em uma velocidade suficiente


(mais de 100 Hz), o fenômeno de persistência
da visão, fará com que o display pareça acender
por inteiro (mesmo isso não sendo verdade)
ESQUEMÁTICO DE MONTAGEM
Mapeamento de pinos
CI74HC595 (1)
CI 74HC595 CIRCUITO CI 74HC595 Circuito
Q1 PINO MATRIZ: 3 VCC 3.3V Arduino
Q2 PINO MATRIZ: 4 Q0 PINO MATRIZ: 13
Q3 PINO MATRIZ: 10 DS Pino 11 Arduino
Q4 PINO MATRIZ: 6 OE GND Arduino
Q5 PINO MATRIZ: 11 ST_CP Pino 8 Arduino
Q6 PINO MATRIZ: 15 SH_CP Pino 12 Arduino
Q7 PINO MATRIZ: 16 MR 3.3V Arduino
GND GND Arduino Q7’ Pino 14 CI 2
Mapeamento de pinos
CI74HC595 (2)
CI 74HC595 CIRCUITO CI 74HC595 Circuito
Q1 PINO MATRIZ: 14 VCC 3.3V Arduino
Q2 PINO MATRIZ: 8 Q0 PINO MATRIZ: 9
Q3 PINO MATRIZ: 12 DS Pino 9 CI 1
Q4 PINO MATRIZ: 1 OE GND Arduino
Q5 PINO MATRIZ: 7 ST_CP Pino 8 Arduino
Q6 PINO MATRIZ: 2 SH_CP Pino 12 Arduino
Q7 PINO MATRIZ: 5 MR 3.3V Arduino
GND GND Arduino Q7’
ALGORITMO OU PASSO-A-PASSO
Lógica de
Início programação
Configurar parâmetros:
Inserir representação binária da imagem
Função de exibição da imagem

Configurar parâmetros:
Inicializar Timer e configurar função timer Envia o array de leds para as colunas

Inverte a imagem a cada 1 segundo


Envia o número binário da linha
para os chips (aqui determina
qual linha vai ser acesa)
Espera 500 ms

Exibe a imagem
Análise do código
Este projeto utiliza um recurso
do chip Atmega, conhecido
como Hardware Time.

É um timer que serve para


disparar um evento. No nosso
Intervalo caso, é um Serviço de rotina de
interrupção (ISR) que dispara a
cada 10 mil microsegundos
TimerOne é uma biblioteca
Função de disparo
externa, e por isso precisa ser
incluída no códgo.

É necessário fornecer apenas


dois parâmetros: o intervalo, e o
nome da função que será
ativada a cada disparo.
ANÁLISE DO CÓDIGO

É operador bit a bit NÃO (~).

Transforma a imagem binária em


um negativo dela mesma.
Transforma todos os bits 1 em 0,
e todos os bits 0 em 1.
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 20
0 1 0
1
1 0
0 1

ROTAÇÃO BIT A BIT

Prof. Eng. Luiz Gustavo


PROJETO 20
DISPLAY DE MATRIZ DE PONTOS
SPRITE COM ROLAGEM HORIZONTAL

Objetivo: Criar uma animação com vários quadros (frames), que se


movimentará da direita para a esquerda. Será apresentado o conceito de arrays
multidimensionais
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 20
Protoboard 400 furos 1
Display de Matriz de pontos (8x8) (C+) 1
C+ :Catodo comum
(Veja o datasheet)
CI – Registrador de deslocamento 74HC595 2
Resistor 220 Ω 8
ANÁLISE DO HARDWARE /
ESQUEMÁTICO DE MONTAGEM
ALGORITMO OU PASSO-A-PASSO
Lógica de
Início programação
Configurar parâmetros:
Inserir os quadros de uma animação
Exibiu 8 Não
Configurar parâmetros: quadros?
Inicializar Timer e configurar função timer
Sim
Rotaciona cada palavra binária nas Volta ao
linhas e colunas para dar a ideia de quadro(frame) inicial

movimento

Função de exibição da imagem


Vai para o próximo
quadro de animação
8 Frames

Frame 1
2ª Linha
00111000 = 56
ANÁISE DO CÓDIGO

Este é um array bidimensional.

Ele possui dois conjuntos de


índices: linhas e colunas para
acessar qualquer um dos seus
64 elementos (8x8)

Para acessar o número 158 na


linha 6 e coluna 4, você usaria:
byte led [6] [4]
Análise do código

Este é o truque para a imagem


“correr” no display, chamado:
ROTAÇÃO BIT A BIT

Precisamos deslocar para esquerda


todos os bits de cada elemento do
array sem perder informação

Com o comando << 1 , você desloca


os bits para a esquerda, e com >>7,
em seguida somando “OU”, você
consegue recuperar o bit perdido.
Veja a seguir:
ANÁLISE DO CÓDIGO

Rotacionar bit a bit: 156 - 10011100

Deslocar um bit para a esquerda


00111000

Deslocar 7 bits para a direita


0000001
00111001
Somar “OU” lógico
ANÁLISE DO CÓDIGO

Esta técnica é conhecida como


rotação bit a bit ou deslocamento
circular!
Técnica bastante utilizada em
Criptografia digital
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO
PROJETO 21

Prof. Eng. Luiz Gustavo


PROJETO 21
DISPLAY DE MATRIZ DE PONTOS
MENSAGEM COM ROLAGEM HORIZONTAL

Objetivo: Controlar o display com o uso do chip MAX7219 sem o uso de


biblioteca para aprender exatamente como este chip funciona.
LISTA DE COMPONENTES

Componente Quantidade
Arduino uno 1
Jumpers macho-macho 20
Protoboard 400 furos 1
Display de Matriz de pontos (8x8) (C-) 1
C- :Catodo comum
(Veja o datasheet)
CI – MAX7219 OU AS1107 1
Resistor 220 Ω 1
Esquemático de Montagem
Mapeamento de pinos
CIMAX7219 (1)
CI MAX7219 CIRCUITO CI MAX7219 Circuito
DIG1 PINO MATRIZ: 3 + 5V Arduino
DIG2 PINO MATRIZ: 4 DIG0 PINO MATRIZ: 13
DIG3 PINO MATRIZ: 10 DIN Pino 2 Arduino
DIG4 PINO MATRIZ: 6 OE GND Arduino
DIG5 PINO MATRIZ: 11 LOAD Pino 3 Arduino
DIG6 PINO MATRIZ: 15 CLK Pino 4 Arduino
DIG7 PINO MATRIZ: 16 SET RESISTOR 20K (se display
não acender tente outro
maior) EM 5V Arduino

GND GND Arduino


(PINOS)
Mapeamento de pinos
CIMAX7219 (2)
CI MAX7219 CIRCUITO CI MAX7219 Circuito
SEG A PINO MATRIZ: 14
SEG B PINO MATRIZ: 8 SEG DP PINO MATRIZ: 9
SEG C PINO MATRIZ: 12
SEG D PINO MATRIZ: 1
SEG E PINO MATRIZ: 7
SEG F PINO MATRIZ: 2
SEG G PINO MATRIZ: 5
ANÁLISE DO HARDWARE

Este chip MAX7219 funciona de mofo


semelhante aos registradores de
deslocamento. Recebe dados seriais
(bit a bit) e fornece saída paralela.

A IDE Arduino possui uma biblioteca


própria para ele para facilitar o controle
de display’s. A biblioteca é Matrix
ANÁLISE DO HARDWARE

Ele recebe os dados de forma serial pelo


pino DIN, e coloca na saída de forma
paralela pelos pinos DIG0. a DIG15.

O chip aceita dados de 16 bits enviado na


ordem do mais significativo (MSB) para o
menos significativo (LSB).
ANÁLISE DO HARDWARE

O controle de envio dos bits, do


armazenamento de dados e saída é
semelhante aos projetos anteriores com
contadores de deslocamento!
ANÁLISE DO HARDWARE
É possível ativar ,desativar ou ajustar alguma
função deste chip por acessando o endereço
dos seus registradores e enviando o comando
desejado

Sem importância Endereço do Dados


(don’t care) registrador
ANÁLISE DO HARDWARE

Veja os endereços dos


registradores:
D11-D10-D09-D08
1001: Modo de decodificação
1010: Intensidade do brilho
1011: Limite de varredura(scan)
1100:: Desligamento
1111: Teste do display

Exemplo: Acessar o resgistrador de


intensidade colocando brilho
máximo (valor 15):
0000101000001111

Conforme falamos, devemos enviar


primeiro o bit mais significativo, ou
seja, na ordem inversa:
B1111000001010000
ANÁLISE DO HARDWARE

Decide quanto dos 8 dígitos devem ser acesos


(vale para display de 7 segmentos). Os dígitos
correspondem às colunas no display de matriz.

Vale apenas para display de 7 segmentos

Operação normal ou desligamento


(display em branco).
ALGORITMO OU PASSO-A-PASSO
Início

Lógica de
Inserir bibliotecas programação
Configurar parâmetros:
Inserir um array bidimensional
Interrupção Não
Configurar parâmetros: acionada?
Inicializar Timer e configurar função timer
Sim
Inicializar o chip MAX7219 Executar função de
Configura Intensidade do brilho exibição

Limpar display Escrever as mensagens


de saída

Configurar as mensagens
ANÁLISE DO CÓDIGO

Biblioteca : pgmspace
Biblioteca dos utilitários do Progam Space, cuja
funções permitem ao seu programa
acessar dados armazenados em espaço de
programa ou memória flash.

O Arduino UNO tem 32 Kb de memória flash,


onde 2Kb são utizados pelo bootloader
(software programado no chip para habilitá-lo a utilizá-lo a IDE do Arduino)
Bootloader
Espaço de programa (utiliza a memória flash) é
exatamente o lugar onde seu programa vai ser
armazenado.
ANÁLISE DO CÓDIGO

Comando : PROGMEN

Esta função dos utilitários do Progam Space, diz ao


programa para armazenar este extenso array na
memória flash em vez de armazenar na
SRAM( Static Random Acess Memory).
ANÁLISE DO CÓDIGO

É o espaço de memória do chip Atmega


normalmente utilizado para armazenar variáveis e
strings de caracteres de seu sketch.

Memória: SRAM
O array que nós utilizamos possui 96 caracteres,
compostos de 8 bits cada. O espaço de memória
para variáveis é de aproximadamente 2 Kb.

Se a memória ficar pequena, o Arduino pode parar de


funcionar ou rodar o programa lentamente. Por isso, é
aconselhável utilizar a memória Flash.
ANÁLISE DO CÓDIGO

ASCII
Estas variáveis terão a função de armazenar o valor
ASCII (American Standart Code for Information) do
caractere atual, a ser exibido, e do próximo.

Todas as letras, números, símbolos e demais coisas


que aparecem na tela do computador ou enviados
via linha serial, têm um código ASCII.

Este código é um número de índice que corresponde a


um caractere na tabela ASCII, que aparecerá na tela do
display.
ANÁLISE DO CÓDIGO

CARACTERES
IMPRIMÍVEIS
PRESTE ATENÇÃO!!!
ASCII Os caracteres de 0 a 31, são apenas códigos de
controle, e não serão utilizados. Eles não aparecem
no display de matriz de pontos.

Os caracteres que podem ser impressos (32 a 126)


neste display são mostrados ao lado.
TABELA ASCII
ANÁLISE DO CÓDIGO

pgm_read_byte
Para imprimir estes caracteres é
necessário acessar a fonte de texto, e
saber qual padrão de bits enviar.

Este padrão se encontra no espaço de


memória, e não na SRAM.

“pgm_read_byte”, sabe o endereço na


memória flash dos dados que você
deseja recuperar.
Gostou do conteúdo?

 Curta, comente e compartilhe


 Prof. Eng. Luiz Gustavo
 Inscreva-se em nosso canal

 Email: LGUSTAVOSDP@YAHOO.COM.BR
 CANAL YOUTUBE: L GUSTAVO

Você também pode gostar