AULA 2 - Microcontroladores - Engenharia: mudanças entre as edições

De IFSC
Ir para navegação Ir para pesquisar
imported>Fargoud
imported>Fargoud
Linha 201: Linha 201:


Para usar essa função, devemos definir o pino de saída, a frequência do tom e, caso queira, a duração em milissegundos da onda.  
Para usar essa função, devemos definir o pino de saída, a frequência do tom e, caso queira, a duração em milissegundos da onda.  
Uma tabela de Notas musicais:
[[image: MIC2notastone.png|center]]


====Exemplo:====
====Exemplo:====

Edição das 09h20min de 28 de fevereiro de 2020

<< Página do curso


PLANO DE AULA


CARGA HORÁRIA: 5 h
CARGA HORÁRIA TEÓRICA: 2 h CARGA HORÁRIA PRÁTICA: 3 h

MATERIAIS

Por aluno:

  • 1 placa Arduino Uno
  • cabo de comunicação/alimentação USB
  • 1 computador PC com software Arduino IDE instalado
  • 1 proto shield para montagens
  • 10 leds vermelhos;
  • 1 display BCD 7 segmentos catodo comum;
  • 1 componente TTL 7447 ou CMOS 4511
  • 1 resistor de 200 Ω
  • 10 resistores de 150 Ω
  • 1 buzzer;
  • cabos fêmea-macho

METODOLOGIA

  • Exposição dialogada dos conteúdos disponíveis, em projetor multimídia.
  • Navegação assistida em outros sites e portais, de conteúdos relacionados.
  • Montagens práticas e desenvolvimento em computador de aplicativos.
  • Testes de verificação e validação.


Arquitetura do Arduíno

Principais blocos:

Unoarq3.jpg


Como é estruturado o Hardware:

  • 0-5 (azul) - pinos de entradas analógicas.

Entradas para o ADC, podem ser usados como I/O digital.

  • 0-13 (verde) - pinos de I/O digitais . Pinos 0 e 1

também são utilizados para a comunicação serial.

  • AREF(laranja) - referência analógica do ADC.
  • S1 (azul) - botão de inicialização.
  • ICSP (ciano) - conector de gravação In-Circuit.
  • USB (amarelo) - usado para gravar o Arduino ou

energizá-lo.

  • X1 (rosa) - fonte de alimentação externa

(9-12VDC, após diodo estará também em Vin).

Unoarq01.jpg

Mais detalhadamente:

Unoarq2.jpg



Escrita nas portas digitais

Vimos no primeiro exemplo, que o pino digital 13 está ligado diretamente a um LED de sinalização da placa e, portanto, nenhum LED externo foi necessário, para testar a escrita nas portas digitais.

Porém, se quisermos acender um LED externo à placa, podemos conectá-lo diretamente a outra porta digital qualquer, inclusive à própria porta 13.

Podemos utilizar um LED de 5mm que acende com aproximadamente 2,1 V.

O problema, nesse caso, se dá por conta da porta digital: ela assume tensão 0V (nível lógico LOW), ou a tensão 5V (nível lógico HIGH), e caso coloquemos 5V no LED ele irá queimar.

Para solucionar esse problema precisamos ligar algum outro componente que seja responsável por dividir parte dessa tensão com o LED, para que ele não queime, então utilizaremos um resistor.

Portanto, ligamos um resistor de 120 ohms em série com o LED, o resistor à porta 13 e o LED à porta GND (ground ou terra), como na Figura abaixo.

Blink1.jpg


Não precisamos fazer nenhuma alteração no software para que esse circuito funcione: basta ligar o Arduino na porta USB do computador, para que o computador forneça alimentação ao circuito, e então veremos o LED externo piscar, juntamente com o LED interno.

Em vez do LED, poderíamos controlar outros componentes ou equipamentos digitais, como motores, eletrodomésticos, etc.

O componente LED

LED, ou light emitter diode' é um diodo emissor de luz que, quando alimentado corretamente, permite o fluxo de energia apenas em um sentido.

É um componente polarizado (com pólos positivo e negativo) e deve ser corretamente conectado para funcionar.

Note que o polo positivo possui uma perna maior (terminal maior) que a outra (veja a figura abaixo).


Já o polo negativo possui a menor perna (terminal menor).

Led1.jpg

Obs.: alguns LED's apresentam o polo negativo chanfrado (plano) no seu exterior.

Há vários tipos de LED's, que variam tanto em cor, quanto em tamanho. Cada led utiliza uma tensão nominal, suficiente para fazê-lo emitir a luminância adequada e uma corrente máxima, que ele pode suportar.

Tabela de tensões e correntes para cada tipo de led:
Tabelaled.jpg


Cálculos de resistência

Para chegar ao valor de 120 ohms acima, é necessário fazer-se alguns cálculos(e arredondamentos).

Vamos aprender agora a calcular o valor dos resistores que precisamos utilizar.

Se precisarmos acender um LED verde, que é alimentado com tensão de 2,1 V e corrente de 20mA através do Arduino, precisaremos de um resistor, como já vimos, já que o Arduino só consegue fornecer ou 0V ou 5V.


Colocaremos o resistor em série com o LED, e com isso podemos concluir que:

  • A tensão total (soma das tensões no resistor e no LED) será de 5V, ou seja: VLED + VR = 5V
  • A corrente total que deve passar pelo resistor e pelo LED (já que eles estão em série, é a mesma) será de 20mA, ou seja: ILED = IR = 20mA
  • Precisamos colocar uma tensão de 2,1 V no LED, ou seja: VLED = 2,1 V

Sabendo desses detalhes, podemos concluir que a tensão no resistor será de:

VR =( 5V - VLED ) 
VR = 5V - 2,1 V 
VR = 2,9V  

Como IR = 20mA e VR = 2,9 V , podemos calcular o valor da resistência R do resistor que iremos utilizar através da Lei de Ohm:

V = R.I

Assim, temos:

2,9 V = R. 0,020A 
R = 2,9 V/0,020A 
R = 145 ohms

Depois de feito o cálculo, podemos generalizar com a seguinte equação:

R = (Vfonte - VLED)/IR


Para o LED verde, precisamos de um resistor de 145 ohms, porém não existem resistores com esse valor para venda (os valores, chamados de valores comerciais são pré-definidos).

Dada essa situação, temos duas alternativas:

  • Utilizar um resistor de maior resistência e limitar mais a corrente (que fará com que o LED brilhe menos, mas que é responsável, para aumentar a vida útil do LED);

ou

  • Associar dois ou mais resistores em série ou paralelo para conseguir o valor desejado.

Geralmente escolhemos um resistor de valor próximo, já que uma alteração pequena de corrente não causará danos ao dispositivo, porém em alguns casos precisaremos combinar resistores de valores diferentes para conseguir o valor equivalente.

Pela tabela abaixo, podemos ver que nosso problemas estaria resolvido se utilizássemos um resistor de 120 a 150 ohms, ou dois resistores de 68 ohms em série, por exemplo.

Tabela de Cores de Resistores

Resistcom.jpg

Para maiores informações: Alimentando corretamente seus leds

Alimentação do circuito

Internamente, o circuito do Arduino é alimentado com uma tensão de 5V.

Quando ligamos o Arduino em uma porta USB do PC, o próprio PC, através do cabo USB, alimenta o Arduino.

Porém nem sempre temos um PC por perto; para esses casos, podemos utilizar uma outra fonte de energia de 5V (a fonte deve ser ligada diretamente nos pinos 5V e GND do Arduino).

Como não possuímos pilhas/baterias em abundância no mercado com tensão de 5V, é complicado alimentar um Arduino dessa forma alternativa (se dispusermos uma tomada de 127/220VAC por perto, poderíamos ligar uma fonte AC/DC ).

Para resolver esse problema, o Arduino possui um regulador de tensão que aceita tensões de 7 a 12V (na verdade, ele consegue funcionar com tensões entre 6 e 20V, apesar de não ser recomendado). Com o regulador de tensão podemos combinar pilhas em série, utilizar uma bateria de 9V ou mesmo baterias de carros, motos e no-breaks (12V).


Alimentacao.jpg

Usando um buzzer como saída:

O componente buzzer nada mais é que um cristal que, como a maioria dos cristais, apresenta a propriedade piezoelétrica de vibrar, quando submetido a uma corrente elétrica; ou, vice-versa, de gerar corrente elétrica em seus terminais, quando submetido a uma compressão física.

Assim, o buzzer que vamos utilizar, quando submetido à um tensão de saída na porta digital, vai vibrar, deslocar o ar e gerar som audível (qualquer sinal alternado de frequência entre 20 e 20 kHz).

MIC2buzzer.png


Função tone()

é a função que gera uma onda pulsante na frequência desejada. A sintaxe é:

tone(pino de saída,frequência);
tone(pino de saída,frequência,duração);


Para usar essa função, devemos definir o pino de saída, a frequência do tom e, caso queira, a duração em milissegundos da onda.

Uma tabela de Notas musicais:

Exemplo:

Vamos acionar um buzzer, com uma frequência de som fixa, ligado à saída digital 9:

MIC2cirbuzzer.png

O código é muito simples:

int frequencia;
 
void setup() {
//define o pino 9 como saída
pinMode(9,OUTPUT);
}

void loop() {
 frequencia=440; // frequência correspondente a notá "Lá"
 tone(9,frequencia);
}

Experimente variar o valor da frequência, para ouvir outros sons.

Outros exemplos:

[Sons no arduino usando buzzer - Arduino & Cia]

[Tocando Super Mario no arduino - UsinaInfo ]

Exercícios:

  1. Altere o código para acender sequencialmente leds ligados aos pinos digitais 5 e 10 do Arduíno. Solução do Exercício 1 - Aula 2
  2. Altere o código para que a porta digital 12 acione 3 LEDs vermelhos em série. O que deverá ser mudado?
  3. Pesquise sobre a corrente/potência que cada saída digital do Arduíno pode fornecer.
  4. O que deveria ser feito, para poder-se acionar equipamentos que drenassem maior potência, corrente, além dos ~40mA que o Arduíno pode fornecer?
  5. Mostre a letra "F" em um display BCD 7 seg, catodo comum, utilizando sete saídas digitais do Arduino.
    Bcd7seg2.png
    Bcd7seg.png
  6. Utilize o componente TTL 7447 Datasheet 7447 ou o CMOS 4511 Datasheet 4511 para mostrar os números de 0 a 9, em um intervalo de 2 segundos cada, em um display BCD 7 seg, utilizando apenas 4 saídas digitais. Solução do Exercício 6 - Aula 2
  7. Pesquise o acionamento de um display BCD 7 seg de 4 digitos, utilizando o arduino
    Bcd7s4dig.png

Link Exemplo: Construindo um relógio com arduino

Outro exemplo:

Utilizando o Arduino para acionar um display de 4 BCDs 7 seg

Projeto Display deslizante, usando matriz de leds

Neste projeto vamos criar um display 3x3, com texto que corre na tela, usando o arduino. O projeto também pode ser expandido para um display maior, por exemplo, 8x10, mas aí utilizando um contador 40

MONTAGEM:

Matriz3x3.png


CÓDIGO:

// anodes
int row[] = {8,9,10};
// cathodes
int col[] = {5,6,7};
 
void setup()
{
 for (int i=0;i<3;i++)
 {
   pinMode(row[i], OUTPUT);
   pinMode(col[i], OUTPUT);
 } 
  allOn();
}

void loop()
{
  for(int i=0;i<3;i++)
  {  digitalWrite(row[i], LOW);
    for(int j=0;j<3;j++)
   { 
      digitalWrite(col[j],HIGH);
      delay(500);
      digitalWrite(col[j],LOW);
   }
   digitalWrite(row[i], HIGH);
  }
}
 
void allOn()
{
 for (int i=0;i<3;i++)
 {
   digitalWrite(row[i], LOW);
   digitalWrite(col[i], HIGH);
 }
}

Display com tela de rolagem 3x3


Outro projeto, agora usando módulos de led:

Display com tela de rolagem, usando módulos de led MAX7219 e arduino


<< Página do curso

Introdução aos Microcontroladores AULA 2 - Arquitetura do Arduíno Leitura das portas digitais>>