AULA 2 - Microcontroladores - Engenharia

De IFSC
Revisão de 14h36min de 21 de agosto de 2025 por imported>Fargoud (→‎Escrita nas portas digitais)
Ir para navegação Ir para pesquisar

<< 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 anodo 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 220 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
// Acender e apagar led ligado no pino digital 13
// com 1 segundo de intervalo
int LED = 13;

void setup()
{  pinMode(LED, OUTPUT);
}

void loop()
{ 
   digitalWrite(LED, HIGH);
   delay(1000);
   digitalWrite(LED, LOW);
   delay(1000);  
}

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.

OBS: como o led tem polaridade, vc tem duas maneiras de ligá-lo:
LigacoesLED.png

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:

 #define NOTE_B0  31
 #define NOTE_C1  33
 #define NOTE_CS1 35
 #define NOTE_D1  37
 #define NOTE_DS1 39
 #define NOTE_E1  41
 #define NOTE_F1  44
 #define NOTE_FS1 46
 #define NOTE_G1  49
 #define NOTE_GS1 52
 #define NOTE_A1  55
 #define NOTE_AS1 58
 #define NOTE_B1  62
 #define NOTE_C2  65
 #define NOTE_CS2 69
 #define NOTE_D2  73
 #define NOTE_DS2 78
 #define NOTE_E2  82
 #define NOTE_F2  87
 #define NOTE_FS2 93
 #define NOTE_G2  98
 #define NOTE_GS2 104
 #define NOTE_A2  110
 #define NOTE_AS2 117
 #define NOTE_B2  123
 #define NOTE_C3  131
 #define NOTE_CS3 139
 #define NOTE_D3  147
 #define NOTE_DS3 156
 #define NOTE_E3  165
 #define NOTE_F3  175
 #define NOTE_FS3 185
 #define NOTE_G3  196
 #define NOTE_GS3 208
 #define NOTE_A3  220
 #define NOTE_AS3 233
 #define NOTE_B3  247
 #define NOTE_C4  262
 #define NOTE_CS4 277
 #define NOTE_D4  294
 #define NOTE_DS4 311
 #define NOTE_E4  330
 #define NOTE_F4  349
 #define NOTE_FS4 370
 #define NOTE_G4  392
 #define NOTE_GS4 415
 #define NOTE_A4  440
 #define NOTE_AS4 466
 #define NOTE_B4  494
 #define NOTE_C5  523
 #define NOTE_CS5 554
 #define NOTE_D5  587
 #define NOTE_DS5 622
 #define NOTE_E5  659
 #define NOTE_F5  698
 #define NOTE_FS5 740
 #define NOTE_G5  784
 #define NOTE_GS5 831
 #define NOTE_A5  880
 #define NOTE_AS5 932
 #define NOTE_B5  988
 #define NOTE_C6  1047
 #define NOTE_CS6 1109
 #define NOTE_D6  1175
 #define NOTE_DS6 1245
 #define NOTE_E6  1319
 #define NOTE_F6  1397
 #define NOTE_FS6 1480
 #define NOTE_G6  1568
 #define NOTE_GS6 1661
 #define NOTE_A6  1760
 #define NOTE_AS6 1865
 #define NOTE_B6  1976
 #define NOTE_C7  2093
 #define NOTE_CS7 2217
 #define NOTE_D7  2349
 #define NOTE_DS7 2489
 #define NOTE_E7  2637
 #define NOTE_F7  2794
 #define NOTE_FS7 2960
 #define NOTE_G7  3136
 #define NOTE_GS7 3322
 #define NOTE_A7  3520
 #define NOTE_AS7 3729
 #define NOTE_B7  3951
 #define NOTE_C8  4186
 #define NOTE_CS8 4435
 #define NOTE_D8  4699
 #define NOTE_DS8 4978


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.

Exemplo 2:

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

void loop() {
 int i; 
 for (i = 30; i< 5000; i++)
      tone(9,i, 500); // vai testar várias frequências
}

Outros exemplos:

Sons no arduino usando buzzer - Arduino & Cia

Tocando Super Mario no arduino - UsinaInfo

Lista de Várias músicas, temas de filme e clássicas

Para executar áudio MP3

Atualmente, a plataforma arduino dispõe de módulos que executam diretamente arquivos MP3, WAV e WMA, a partir de um cartão de memória, como este: módulo MP3 Player

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, anodo comum, utilizando sete saídas digitais do Arduino.
    Bcd7seg2.png
    Bcd7seg.png

Solução do Exercício 5 - Aula 2

  1. 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 para 4511 e display CATODO COMUM Solução para 7447 e display ANODO COMUM
    Tvdecbcd7s.png
  2. Pesquise o acionamento do módulo TM1637, que é 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 2.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>>