Arduino: Entradas e Saidas: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
 
(251 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
=Minicurso: Arduíno e eletrônica=
=Arduíno: Entradas e Saídas=


Este minicurso tem como objetivos realizar uma introdução ao microcontrolador '''Arduíno''' e a '''eletrônica''' a partir de atividades teóricas e práticas.
O Arduíno pode ler '''sensores''' através de pinos de '''entrada digitais e analógicas''', assim como  controlar '''atuadores''' através de '''saídas digitais''' e '''saídas PWM'''.


O minicurso está organizados em '''módulos''', cada um deles trabalhando conceitos específicos sobre o microcontrolador '''Arduíno''' e os correspondentes conceitos de '''eletricidade''' e '''eletrônica''' envolvidos.
==Características do microcontrolador Arduíno==
 
;[[Arduino]]


==Características do microcontrolador Arduíno==
;[https://www.arduino.cc/ Site oficial do Arduíno]:


;[[Arduíno]]
;Arduino UNO:
[[Arquivo:PinosArduinoUno.png|300px]]


==Saídas digitais==
==Saídas digitais==
Linha 14: Linha 17:
*As entradas/saídas digitais estão localizadas nos '''pinos''' '''0''' a '''13'''.
*As entradas/saídas digitais estão localizadas nos '''pinos''' '''0''' a '''13'''.
*Estas entradas/saídas operam com valores '''digitais''' '''LOW''' e '''HIGH''', os quais correspondem aos valores de '''tensão''' '''0 V''' e '''5 V''', respectivamente..  
*Estas entradas/saídas operam com valores '''digitais''' '''LOW''' e '''HIGH''', os quais correspondem aos valores de '''tensão''' '''0 V''' e '''5 V''', respectivamente..  
*Cada pino fornece '''corrente''' de até '''20 mA''', sendo que qualquer corrente solicitada acima de 40mA pode danificar o Arduíno.
*Cada pino fornece '''corrente''' de até '''20 mA''', sendo que qualquer corrente solicitada acima de '''40mA''' pode danificar o Arduíno.


;pinMode: Comando da linguagem de programação do Arduíno que configura o '''pino digital''' como '''entrada''' ('''INPUT''') ou '''saída''' ('''OUTPUT''').
;pinMode: Comando da linguagem de programação do Arduíno que configura o '''pino digital''' como '''entrada''' ('''INPUT''') ou '''saída''' ('''OUTPUT''').
Linha 21: Linha 24:


;digitalWrite: Comando para '''escrever''' na saída digital.
;digitalWrite: Comando para '''escrever''' na saída digital.
  digitalWrite(pino, HIGH/LOW)
  digitalWrite(13, HIGH/LOW);


===Laboratório 1: Saída digital===
===Laboratório 1: Saída digital===
;Blink:  
;digitalWrite:  
*Carregar no Arduíno o programa exemplo para '''piscar''' o '''led do pino 13''', mantendo acesso por 1 seg e em seguida apagada por 1 seg. O '''led do pino 13''' é um led instalado na própria placa do Arduíno.
*Carregar no Arduíno o programa exemplo '''[https://www.arduino.cc/en/Tutorial/Blink Arquivo/Exemplos/Basic/Blink]''' para '''piscar''' o '''led do pino 13''', mantendo acesso por 1 seg e em seguida apagada por 1 seg. O '''led do pino 13''' é um led instalado na própria placa do Arduíno.
*Modificar o '''tempo''' ('''''delay''''') e verificar a mudança na '''frequência''' do piscar do led.
*Modificar o '''tempo''' ('''''delay''''') e verificar a mudança na '''frequência''' do piscar do led.
:A função '''delay(1000);''' estabelece um atraso em '''ms''' (mili segundos), logo '''1000 ms = 1 s'''.
<!--==Matriz de Contatos==


==Leds==
Uma '''matriz de contatos''' (ou '''''protoboard''''') é uma placa repleta de contatos que facilitam a montagem e testes de circuitos eletrônicos.


Para entender o funcionamento dos leds, alguns conceitos são necessários:
[[Arquivo:Matriz_Contatos.png|300px]]


;[[Eletricidade Básica]]: Conceito e relação entre '''tensão''', '''corrente''' e '''resistência elétrica''' - '''Lei de Ohm'''.
Internamente uma matriz de contatos apresenta conexões elétricas entre os pinos, permitindo a montagem de circuitos.


;[[Resistores]]: '''Código de cores''' para resistores
[[Arquivo:Matriz_Contatos_Conexoes.png|300px]]-->


;[[Diodos e Leds]]: Cálculo do '''resistor de proteção''' de um circuito com '''led'''.
==Leds==


===Laboratório 2: Semáforo automatizado com leds===
[[Arquivo:Arduino_Blink.png|600px]]
;Blink:
*Montar hardware para acionamento de  '''3 leds''' (vermelho, verde e amarelo), comandados por 3 saídas digitais independentes do Arduíno, utilizando '''resistores''' de proteção adequados.
*Modificar programa '''''blink''''' para acionar os leds como um '''semáforo''', com '''temporização''' adequada para cada cor.


==Frequência e período de um sinal periódico==
Um '''led''' é um '''diodo emissor de luz''' (''light emitting diode''). Ele se comporta como um [[Diodos|'''Diodo''']], conduzindo apenas quanto polarizado diretamente.


A '''frequência''' é uma grandeza física que indica o número de ocorrências de um evento (ciclo ou oscilações) em um determinado intervalo de tempo.  Esse tempo recebe o nome de '''período''' (T).
[[Arquivo:led.jpeg | 200px]]


A unidade de medida de '''frequência''' é o '''Hertz (Hz)''':
Um '''led''' não pode receber tensão diretamente em seus terminais sob risco de colocar o componente em '''curto-circuito'''. A '''corrente elétrica''' no led deve ser limitada, tipicamente entre '''10 mA''' a '''30 mA''' por um '''resistor''' externo.  
  1 Hz =    1 ciclo/segundo
60  Hz =  60 ciclos/segundo (p. ex. frequência da tensão alternada senoidal da rede elétrica)
  1 KHz = 1000 ciclos/segundo


Relação entre '''frequência''' (f) e '''período''' (T):
A '''queda de tensão direta''' nos leds depende da '''cor do led'''. De modo simplificado, tipicamente se usa-se queda de tensão de '''2 V'''.
f = 1 / T


Sinais periódicos digitais geralmente são '''ondas quadradas''', com os níveis lógicos '''LOW''' ('''0 V''') e '''HIGH''' ('''5 V'''). A transição LOW para HIGH é chamada '''transição positiva''' (borda de subida) e a transição de HIGH para LOW é chamada '''transição negativa''' (borda de descida).
;Exemplo cálculo do resistor de proteção de um circuito com led: Supondo:


[[Arquivo:PulsosClock.png | 500px]]
I<sub>led</sub> = 10 mA


<!--
[[Arquivo:CircuitoLed.png | 150px]]
==Led RGB==
Um '''led RGB''' apresenta em um único led a possibilidade de fornecer todas as cores, obtidas a partir da mistura das '''cores primárias luz''', ou '''cores primárias aditivas''', que são '''vermelho''' (<font color="red">'''''R'''ed''</font>), '''verde''' (<font color="green">'''''G'''reen''</font>) e '''azul''' (<font color="blue">'''''B'''lue''</font>).


[[Arquivo:CoresPrimarias.jpg|300px]]
Soma das tensões ao longo da malha (2<sup>a</sup> Lei de Kirchhoff):
V = V<sub>led</sub> + R.I
:Isolando R:
R = (V - V<sub>led</sub>) / I
:Atribuindo valores:
V = 5V, V<sub>led</sub> = 2V, I = 10mA
:Calculando:
R = (5 - 2)/(10/1000) = 3/(1/100) = 3 . 100 = 300&Omega;
:Valores comerciais:
270&Omega; ou 330&Omega;


Um '''led RGB''', portanto, reúne em um único componente três leds diferentes, utilizando um terminal comum. Os leds RGB são encontrados em duas estruturas:
;[[Resistores | Código de cores de resistores]]:
*Anodo comum;
*Catodo comum.


[[Arquivo:ledRGB.jpeg|250px]]
===Projeto 1: Semáforo automatizado com leds===
[[Arquivo:LedRGB.png]]
;Semáforo:  
*Montar hardware para acionamento de  '''3 leds''' (vermelho, verde e amarelo), comandados por 3 saídas digitais independentes do Arduíno, utilizando '''resistores''' de proteção adequados.
*Modificar programa '''[https://www.arduino.cc/en/Tutorial/Blink Arquivo/Exemplos/Basic/Blink]''' para acionar os leds como um '''semáforo''', com '''temporização''' adequada para cada cor.


===Laboratório 3: Led RGB===
[[Arquivo:Arduino_Semaforo.png|600px]]
;Blink:
*Montar hardware para '''led RGB anodo comum''' utilizando '''resistores''' de proteção adequados.
*Modificar programa '''''blink''''' para piscar cores '''vermelho''' (R), '''verde''' (G) e '''azul''' (B) alternadamente;
*Variar a '''frequência''' do piscar de leds RGB nos seguintes valores:
**1 Hz
**10 Hz
**100 Hz
**1000Hz
:Verificar o resultado nas cores observadas.
-->


==Entradas digitais==
==Entradas digitais==


Um '''pino digital''' do Arduíno pose ser definido como  '''entrada''' (INPUT).
Um '''pino digital''' do Arduíno pose ser definido como  '''entrada''' (INPUT).
  pinMode(2, INPUT)
  pinMode(2, INPUT);


;digitalRead: Comando para '''ler''' o estado de uma entrada digital.
;digitalRead: Comando para '''ler''' o estado de uma entrada digital.
  estadoPino = digitalRead(pino)
int estadoPino;
  estadoPino = digitalRead(2);


Neste caso o Arduíno vai '''ler''' se o '''estado''' do pino é LOW (0 V) ou HIGH (5 V).
Neste caso o Arduíno vai '''ler''' se o '''estado''' do pino é '''LOW''' (0 V) ou '''HIGH''' (5 V).


==Chave digital==
==Chave digital==


Uma chave digital fornecerá 0 V (LOW) ou 5 V (HIGH) caso estiver aberta ou fechada.
Uma '''chave digital''' fornecerá '''0 V''' ('''LOW''') ou '''5 V''' ('''HIGH''') caso estiver aberta ou fechada.


[[Arquivo:ChaveDigital.png]]  
[[Arquivo:ChaveDigital.png]]  
*Caso a chave estiver '''aberta''', não haverá sobre o resistor e a tensão entregue ao pino do Arduíno será 0 V.
 
*Caso a chave estiver '''fechada''', haverá corrente no resistor e a tensão entregue ao pino do Arduíno será 5 V.
Funcionamento:
**Corrente no resistor:
*Caso a chave estiver '''aberta''', não haverá corrente no o resistor e a tensão entregue ao pino do Arduíno será '''0 V'''.
*Caso a chave estiver '''fechada''', haverá corrente no resistor e a tensão entregue ao pino do Arduíno será '''5 V'''.
 
Corrente no resistor:
V = R I (Lei de Ohm)
:Isolando I:
  I = V / R
  I = V / R
  5 (V) / 10k (&Omega;) = 0,5 mA
:Atribuindo valores:
  V=5V, R=10k(&Omega;) ([https://pt.wikipedia.org/wiki/Prefixos_do_Sistema_Internacional_de_Unidades#Lista_de_prefixos_do_SI Prefixos SI])
:Calculando:
I = 5/10 . (1/10<sup>3</sup>) = 0,5 . 10<sup>-3</sup> = 0,5 mA
:Corrente desprezível para o Arduíno.
 
===Laboratório 2: Chave digital===
[[Arquivo:Arduino_Botao.png|600px]]


===Laboratório 3: Chave digital===
;digitalRead:  
;Button:  
*Montar hardware com '''chave''' ('''''push botton'''''), utilizando '''resistores''' de proteção de 10 K&Omega;.
*Montar hardware com '''chave''' ('''''push botton'''''), utilizando '''resistores''' de proteção de 10 K&Omega;.
*Carregar programa exemplo '''[http://www.arduino.cc/en/Tutorial/Button Button]''' para ligar ou desligar led em função de pressão em chave digital.
*Carregar programa exemplo '''[http://www.arduino.cc/en/Tutorial/Button Arquivo/Exemplos/Digital/Button]''' para ligar ou desligar led em função de pressão em chave digital.
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/DigitalReadSerial Arquivo/Exemplos/Basic/DigitalReadSerial]''' para verificar no terminal serial o valor da chave digital.


===Laboratório 4: Coreografia com leds===
===Projeto 2: Coreografia com leds===
Implementar uma '''coreografia de luzes''' com 6 '''leds''' e 2 '''chaves digitais''', de forma que, a cada combinação de chaves acionadas uma coreografia de luzes seja executada.
Implementar uma '''coreografia de luzes''' com 6 '''leds''' e 2 '''chaves digitais''', de forma que, a cada combinação de chaves acionadas uma coreografia de luzes seja executada.


==Entradas Analógicas==
==Entradas Analógicas==
;O Arduíno UNO possui 6 entradas analógicas:
;O Arduíno UNO possui 6 entradas analógicas: As '''entradas analógicas''' utilizam um processo de '''[[Conversao Analogico Digital|Conversão Analógico Digital]] (ADC)''' para obter valores digitais correspondentes a cada entrada.
*As '''entradas analógicas''' são nomeadas de '''A0''' até '''A5'''.  
*As '''entradas analógicas''' são nomeadas de '''A0''' até '''A5'''.  
*Cada entrada analógica recebe '''valores analógicos''' entre '''0 V''' e '''5 V''', os quais são convertidos para '''valores digitais''' com '''10 bits de resolução''' (valores entre '''0''' e '''1023''').
*Cada entrada analógica recebe '''valores analógicos''' entre '''0 V''' e '''5 V'''.
*Os valores analógicos são convertidos para '''valores digitais''' com '''10 bits de resolução''' (valores entre '''0''' (0000000000) a '''1023''' (1111111111).


;analogRead: Comando para '''ler''' entrada analógica.
;analogRead: Comando para '''ler''' entrada analógica.
  valorPino = analogRead(pinoAnalogico)
int valorPino;
  valorPino = analogRead(A0);
 
==Potenciômetros==
São '''resistências variáveis''' através de um cursor.
 
:Na figura, através de um '''potenciômetro''' é possível implementar um '''divisor de tensão''' com uma tensão variável V<sub>x</sub> obtida a partir do terminal central do potenciômetro.
 
[[Arquivo:Potenciometro.png]] [[Arquivo:potenciometro.jpg|150px]]
 
===Laboratório 3: Leitura de entrada analógica===


==Divisor de Tensão==
[[Arquivo:Arduino_Potenciometro.png|600px]]
Quando uma '''tensão''' é aplicada sobre '''resistores em série''', a tensão total sobre os dois resistores é igual a somas das quedas de tensão sobre cada resistor.


[[Arquivo:DivisorTensao.png]]
;analogRead:
*Montar hardware com utilizando o ponto central de um '''potenciômetro''' conectado a '''entrada analógica A0''' (com os demais terminais conectados ao GND e 5V, respectivamente).
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/AnalogReadSerial Arquivo/Exemplos/Basic/AnalogReadSerial]''' e verificar o valor da entrada analógica no '''monitor serial'''.
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage Arquivo/Exemplos/Basic/ReadAnalogVoltage]''' e verificar o valor da entrada analógica em '''Volts''' no '''monitor serial'''.
*Carregar programa exemplo '''[http://www.arduino.cc/en/Tutorial/AnalogInput Arquivo/Exemplos/Analog/AnalogInput]''' e verificar o valor da '''frequência''' do pulsar do '''led''' em função do valor do '''potenciômetro'''.


V = V<sub>1</sub> + V<sub>2</sub>
===Projeto 3: Coluna de leds e potenciômetro===
V = I.R<sub>1</sub> + I.R<sub>2</sub>
*Montar hardware com uma '''coluna de 5 leds''' utilizando um resistor de proteção para cada led e um '''potenciômetro'''.
ou
*Acender a '''coluna de leds''' em função da tensão lida no ponto central do '''potenciômetro'''.
V<sub>1</sub> = R<sub>1</sub>/(R<sub>1</sub> + R<sub>2</sub>) . V
V<sub>2</sub> = R<sub>2</sub>/(R<sub>1</sub> + R<sub>2</sub>) . V


;Potenciômetros: São resistências variáveis através de um cursor.
==Saídas Analógicas==


:Na figura, através de um '''potenciômetro''' é possível implementar um '''divisor de tensão''' com uma tensão variável Vx obtida a partir do terminal central do potenciômetro.
O Arduíno emula '''saídas analógicas''' através de '''modulação PWM''' (''Pulse Width Modulation'').  


[[Arquivo:Potenciometro.png]] [[Arquivo:potenciometro.jpg|150px]]
O '''sinal PWM''' é uma '''onda quadrada''', com frequência constante, mas a fração de tempo em que o sinal é HIGH (5V) (''duty cycle'') pode variar entre 0 e 100%, fornecendo uma média de tensão variável na saída <ref>https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM</ref>.
[[Arquivo:PWM.gif]]
 
As '''6 Saídas PWM''' são identificadas pelo sinal '''~''' e fornecem '''saídas analógicas''' através de '''pulsos PWM''' de '''8 bits''', possibilitando, portanto, '''256 valores''' diferentes de '''tensão analógica''' entre '''0V e 5V''', com passos de '''0 a 255'''.


===Laboratório 5: Leitura de entrada analógica===
===Laboratório 4: Saída analógica===
;AnalogReadSerial:  
;analogWrite:
;analogRead:
;map;
*Montar hardware para acionamento de '''led''' conectado ao '''pino 9''', escolhendo resistor de proteção adequado;
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/Fade Arquivo/Exemplos/Basic/Fade]''' e verificar a variação da luminosidade do '''led''' da porta 9.
*Montar hardware com utilizando o ponto central de um '''potenciômetro''' conectado a '''entrada analógica A0''' (com os demais terminais conectados ao GND e 5V, respectivamente).
*Montar hardware com utilizando o ponto central de um '''potenciômetro''' conectado a '''entrada analógica A0''' (com os demais terminais conectados ao GND e 5V, respectivamente).
*Carregar programa exemplo '''Basic/AnalogReadSerial''' e verificar o valor da entrada analógica no '''monitor serial'''.
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/AnalogInOutSerial Arquivo/Exemplos/Analog/AnalogInOutSerial]''' e verificar a variação da luminosidade do '''led''' da '''pino 9''' em função do '''potenciômetro'''.


==Aplicação do Divisor de Tensão==
==Monitor Serial==
O '''monitor serial''' permite enviar dados do '''computador''' ao '''Arduíno''' pela '''interface serial USB'''.


;Sensores baseados em resistência variável para Arduíno: '''Sensores de luminosidade (LDR)''' e '''sensores de temperatura''' possuem um resistor variável em função da grandeza que estão medindo.
===Laboratório 5: Monitor serial===
*Carregar programa exemplo '''[http://www.arduino.cc/en/Tutorial/PhysicalPixel Arquivo/Exemplos/Communication/PhysicalPixel]''' e '''acionar''' o '''led''' do '''pino 13''' a partir de comandos '''H''' e '''L''' enviados pelo terminal serial.
*Montar hardware para acionamento de '''led''' conectado ao '''pino 9''', escolhendo resistor de proteção adequado;
*Carregar programa exemplo '''[http://www.arduino.cc/en/Tutorial/Dimmer Arquivo/Exemplos/Communication/Dimmer]''' e '''controlar a intensidade''' do '''led''' do '''pino 9''' a partir do envio de valores entre '''0 e 255''' pelo terminal serial.
*:No programa exemplo acima, trocar a linha:
brightness = Serial.read();
::por
brightness = Serial.parseInt();
::para converter os caracteres ASCII lidos para inteiros.


===Laboratório 6: Entrada analógica===
==Led RGB==
;AnalogInput:
Um '''led RGB''' apresenta em um único led a possibilidade de fornecer todas as cores, obtidas a partir da mistura das '''cores primárias luz''', ou '''cores primárias aditivas''', que são <font color="red">'''vermelho'''</font> (<font color="red">'''''R'''ed''</font>), <font color="lime">'''verde'''</font> (<font color="lime">'''''G'''reen''</font>) e <font color="blue">'''azul'''</font> (<font color="blue">'''''B'''lue''</font>).
*Montar hardware com utilizando o ponto central de um '''potenciômetro''' conectado a '''entrada analógica A0''' (com os demais terminais conectados ao GND e 5V, respectivamente).
 
*Carregar programa exemplo '''[http://www.arduino.cc/en/Tutorial/AnalogInput Analog/AnalogInput]''' e verificar o valor da '''frequência''' do pulsar do '''led''' em função do valor do '''potenciômetro'''.
*As '''cores primárias''' não resultam da mistura de nenhuma cor.  
;Sensor de luminosidade LDR:
*A '''cor branca''' é a soma das três cores primárias.  
*Montar hardware com o '''sensor LDR''', conforme mostrado no link do exemplo '''[http://www.arduino.cc/en/Tutorial/AnalogInput Analog/AnalogInput]''', e verificar o valor da '''frequência''' do pulsar do '''led''' em função do valor da '''luminosidade'''.
*As '''cores secundárias''' são misturas de duas cores, como o <font color="yellow">'''amarelo'''</font>, <font color="aqua">'''ciano'''</font> e <font color="fuchsia">'''magenta'''</font>.
*A '''cor preta''' é a ausência de cores.
*As '''demais cores''' requerem '''mistura''' das três cores primárias em quantidades específicas.
 
[[Arquivo:CoresPrimarias.jpg|300px]]
 
;COLOR PICKER: A ferramenta '''[http://htmlcolorcodes.com/color-picker/ color picker]''' é utilizada para obter as '''misturas das cores primárias''' utilizada na '''Linguagem HTML''' com uma paleta de '''256 cores RBG'''.
:A quantidade de cada cor '''<font color="red">R</font><font color="green">G</font><font color="blue">B</font>''' está expressa em '''hexadecimal''' de '''8 bits''', por exemplo, o '''amarelo''' é '''#FFFF00''', ou seja, é o resultado da mistura do '''vermelho''' (FF ou 255) e do '''verde''' (FF ou 255), sem nada de '''azul''' (00 ou 0) .
:A quantidade de cada cor '''<font color="red">R</font><font color="green">G</font><font color="blue">B</font>''' também é mostrada em valores de 0 a 255.


===Laboratório 7: Sensor de luminosidade LDR===
===Leds <font color="red">R</font><font color="green">G</font><font color="blue">B</font>===
;LDR:
*Montar hardware com '''sensor LDR''' e '''três leds''' (vermelho, amarelo e verde), utilizando '''divisor de tensão''' para o sensor e '''resistores de proteção''' adequados para os leds.
*Construir programa para acender '''led verde''' com '''alta luminosidade''', '''led amarelo''' com '''média luminosidade''' e '''led vermelho''' com '''baixa luminosidade'''.


==Saídas Analógicas==
Os '''leds RGB''' são encontrados em duas estruturas:
*Anodo comum;
*Catodo comum.


O Arduíno emula '''saídas analógicas''' através de '''modulação PWM'''  (''Pulse Width Modulation''). O sinal PWM é uma onda quadrada, com frequência constante, mas a fração de tempo em que o sinal é HIGH (5V) (duty cycle) pode variar entre 0 e 100%, fornencedo uma média de tensão variável na saída <ref>https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM</ref>.
[[Arquivo:ledRGB.jpeg|250px]]
[[Arquivo:PWM.gif]]
[[Arquivo:LedRGB.png]]


As '''6 Saídas PWM''' são identificadas pelo sinal '''~''' e fornecem '''saídas analógicas''' através de pulsos PWM de 8 bits, possibilitando, portanto, 256 valores diferentes de tensão analógica entre 0V e 5V, com passos de 0 a 255.
===Laboratório 6: Led RGB===
;Cores primárias: digitalWrite.
*Montar hardware para '''led RGB anodo comum''' utilizando '''resistores''' de proteção adequados.
*Modificar programa '''''blink''''' para piscar cores '''vermelho''' (R), '''verde''' (G) e '''azul''' (B) alternadamente;
*Variar a '''[[Frequência e período de um sinal periódico | frequência]]''' do piscar de leds RGB nos seguintes valores:
**1 Hz
**10 Hz
**100 Hz
**1000Hz
:Verificar o resultado nas cores observadas.


===Projeto 4: Misturando as cores primárias com leds RGB===


;Misturando as cores primárias: analogWrite


<!--
*Montar hardware para '''led RGB anodo comum''' utilizando os pinos 3, 5 e 6 respectivamente.
Outros exemplos:
*Carregar programa exemplo '''[https://www.arduino.cc/en/Tutorial/ReadASCIIString Arquivo/Exemplos/Communication/ReadASCIIString]''' e '''misturar as cores''' do '''led RGB''' utilizando quantidades de RGB de 0 a 255, de modo a obter as cores mostrada na '''tabela de cores''' acima.
AnalogInputSerial: analog write
*Montar hardware com utilizando três '''potenciômetros''' conectado a três '''entradas analógicas''', as quais devem ser combinadas para  '''misturar as cores''' do '''led RGB'''.
SerialPixel: digital read
Dimmer: analog read-->


==Referências==
==Referências==
Linha 178: Linha 230:


----
----
--[[Usuário:Evandro.cantu|Evandro.cantu]] ([[Usuário Discussão:Evandro.cantu|discussão]]) 16h33min de 12 de setembro de 2016 (BRT)
[[Usuário:Evandro.cantu|Evandro.cantu]] ([[Usuário Discussão:Evandro.cantu|discussão]]) 09h41min de 17 de setembro de 2021 (-03)
----
----


[[Categoria: Arduíno]]
[[Categoria: Arduíno]] [[Categoria: IoT]]

Edição atual tal como às 17h45min de 18 de novembro de 2024

Arduíno: Entradas e Saídas

O Arduíno pode ler sensores através de pinos de entrada digitais e analógicas, assim como controlar atuadores através de saídas digitais e saídas PWM.

Características do microcontrolador Arduíno

Arduino
Site oficial do Arduíno
Arduino UNO

Saídas digitais

O Arduíno UNO possui 14 Entradas/Saídas Digitais
  • As entradas/saídas digitais estão localizadas nos pinos 0 a 13.
  • Estas entradas/saídas operam com valores digitais LOW e HIGH, os quais correspondem aos valores de tensão 0 V e 5 V, respectivamente..
  • Cada pino fornece corrente de até 20 mA, sendo que qualquer corrente solicitada acima de 40mA pode danificar o Arduíno.
pinMode
Comando da linguagem de programação do Arduíno que configura o pino digital como entrada (INPUT) ou saída (OUTPUT).
Exemplo:
pinMode(13, OUTPUT);
digitalWrite
Comando para escrever na saída digital.
digitalWrite(13, HIGH/LOW);

Laboratório 1: Saída digital

digitalWrite
  • Carregar no Arduíno o programa exemplo Arquivo/Exemplos/Basic/Blink para piscar o led do pino 13, mantendo acesso por 1 seg e em seguida apagada por 1 seg. O led do pino 13 é um led instalado na própria placa do Arduíno.
  • Modificar o tempo (delay) e verificar a mudança na frequência do piscar do led.
A função delay(1000); estabelece um atraso em ms (mili segundos), logo 1000 ms = 1 s.

Leds

Um led é um diodo emissor de luz (light emitting diode). Ele se comporta como um Diodo, conduzindo apenas quanto polarizado diretamente.

Um led não pode receber tensão diretamente em seus terminais sob risco de colocar o componente em curto-circuito. A corrente elétrica no led deve ser limitada, tipicamente entre 10 mA a 30 mA por um resistor externo.

A queda de tensão direta nos leds depende da cor do led. De modo simplificado, tipicamente se usa-se queda de tensão de 2 V.

Exemplo cálculo do resistor de proteção de um circuito com led
Supondo:
Iled = 10 mA

Soma das tensões ao longo da malha (2a Lei de Kirchhoff):

V = Vled + R.I
Isolando R:
R = (V - Vled) / I
Atribuindo valores:
V = 5V, Vled = 2V, I = 10mA
Calculando:
R = (5 - 2)/(10/1000) = 3/(1/100) = 3 . 100 = 300Ω 
Valores comerciais:
270Ω ou 330Ω
Código de cores de resistores

Projeto 1: Semáforo automatizado com leds

Semáforo
  • Montar hardware para acionamento de 3 leds (vermelho, verde e amarelo), comandados por 3 saídas digitais independentes do Arduíno, utilizando resistores de proteção adequados.
  • Modificar programa Arquivo/Exemplos/Basic/Blink para acionar os leds como um semáforo, com temporização adequada para cada cor.

Entradas digitais

Um pino digital do Arduíno pose ser definido como entrada (INPUT).

pinMode(2, INPUT);
digitalRead
Comando para ler o estado de uma entrada digital.
int estadoPino; 
estadoPino = digitalRead(2);

Neste caso o Arduíno vai ler se o estado do pino é LOW (0 V) ou HIGH (5 V).

Chave digital

Uma chave digital fornecerá 0 V (LOW) ou 5 V (HIGH) caso estiver aberta ou fechada.

Funcionamento:

  • Caso a chave estiver aberta, não haverá corrente no o resistor e a tensão entregue ao pino do Arduíno será 0 V.
  • Caso a chave estiver fechada, haverá corrente no resistor e a tensão entregue ao pino do Arduíno será 5 V.

Corrente no resistor:

V = R I (Lei de Ohm)
Isolando I:
I = V / R
Atribuindo valores:
V=5V, R=10k(Ω)  (Prefixos SI)
Calculando:
I = 5/10 . (1/103) = 0,5 . 10-3 = 0,5 mA
Corrente desprezível para o Arduíno.

Laboratório 2: Chave digital

digitalRead

Projeto 2: Coreografia com leds

Implementar uma coreografia de luzes com 6 leds e 2 chaves digitais, de forma que, a cada combinação de chaves acionadas uma coreografia de luzes seja executada.

Entradas Analógicas

O Arduíno UNO possui 6 entradas analógicas
As entradas analógicas utilizam um processo de Conversão Analógico Digital (ADC) para obter valores digitais correspondentes a cada entrada.
  • As entradas analógicas são nomeadas de A0 até A5.
  • Cada entrada analógica recebe valores analógicos entre 0 V e 5 V.
  • Os valores analógicos são convertidos para valores digitais com 10 bits de resolução (valores entre 0 (0000000000) a 1023 (1111111111).
analogRead
Comando para ler entrada analógica.
int valorPino;
valorPino = analogRead(A0);

Potenciômetros

São resistências variáveis através de um cursor.

Na figura, através de um potenciômetro é possível implementar um divisor de tensão com uma tensão variável Vx obtida a partir do terminal central do potenciômetro.

Laboratório 3: Leitura de entrada analógica

analogRead
  • Montar hardware com utilizando o ponto central de um potenciômetro conectado a entrada analógica A0 (com os demais terminais conectados ao GND e 5V, respectivamente).
  • Carregar programa exemplo Arquivo/Exemplos/Basic/AnalogReadSerial e verificar o valor da entrada analógica no monitor serial.
  • Carregar programa exemplo Arquivo/Exemplos/Basic/ReadAnalogVoltage e verificar o valor da entrada analógica em Volts no monitor serial.
  • Carregar programa exemplo Arquivo/Exemplos/Analog/AnalogInput e verificar o valor da frequência do pulsar do led em função do valor do potenciômetro.

Projeto 3: Coluna de leds e potenciômetro

  • Montar hardware com uma coluna de 5 leds utilizando um resistor de proteção para cada led e um potenciômetro.
  • Acender a coluna de leds em função da tensão lida no ponto central do potenciômetro.

Saídas Analógicas

O Arduíno emula saídas analógicas através de modulação PWM (Pulse Width Modulation).

O sinal PWM é uma onda quadrada, com frequência constante, mas a fração de tempo em que o sinal é HIGH (5V) (duty cycle) pode variar entre 0 e 100%, fornecendo uma média de tensão variável na saída [1].

As 6 Saídas PWM são identificadas pelo sinal ~ e fornecem saídas analógicas através de pulsos PWM de 8 bits, possibilitando, portanto, 256 valores diferentes de tensão analógica entre 0V e 5V, com passos de 0 a 255.

Laboratório 4: Saída analógica

analogWrite
analogRead
map;
  • Montar hardware para acionamento de led conectado ao pino 9, escolhendo resistor de proteção adequado;
  • Carregar programa exemplo Arquivo/Exemplos/Basic/Fade e verificar a variação da luminosidade do led da porta 9.
  • Montar hardware com utilizando o ponto central de um potenciômetro conectado a entrada analógica A0 (com os demais terminais conectados ao GND e 5V, respectivamente).
  • Carregar programa exemplo Arquivo/Exemplos/Analog/AnalogInOutSerial e verificar a variação da luminosidade do led da pino 9 em função do potenciômetro.

Monitor Serial

O monitor serial permite enviar dados do computador ao Arduíno pela interface serial USB.

Laboratório 5: Monitor serial

  • Carregar programa exemplo Arquivo/Exemplos/Communication/PhysicalPixel e acionar o led do pino 13 a partir de comandos H e L enviados pelo terminal serial.
  • Montar hardware para acionamento de led conectado ao pino 9, escolhendo resistor de proteção adequado;
  • Carregar programa exemplo Arquivo/Exemplos/Communication/Dimmer e controlar a intensidade do led do pino 9 a partir do envio de valores entre 0 e 255 pelo terminal serial.
    No programa exemplo acima, trocar a linha:
brightness = Serial.read();
por
brightness = Serial.parseInt();
para converter os caracteres ASCII lidos para inteiros.

Led RGB

Um led RGB apresenta em um único led a possibilidade de fornecer todas as cores, obtidas a partir da mistura das cores primárias luz, ou cores primárias aditivas, que são vermelho (Red), verde (Green) e azul (Blue).

  • As cores primárias não resultam da mistura de nenhuma cor.
  • A cor branca é a soma das três cores primárias.
  • As cores secundárias são misturas de duas cores, como o amarelo, ciano e magenta.
  • A cor preta é a ausência de cores.
  • As demais cores requerem mistura das três cores primárias em quantidades específicas.

COLOR PICKER
A ferramenta color picker é utilizada para obter as misturas das cores primárias utilizada na Linguagem HTML com uma paleta de 256 cores RBG.
A quantidade de cada cor RGB está expressa em hexadecimal de 8 bits, por exemplo, o amarelo é #FFFF00, ou seja, é o resultado da mistura do vermelho (FF ou 255) e do verde (FF ou 255), sem nada de azul (00 ou 0) .
A quantidade de cada cor RGB também é mostrada em valores de 0 a 255.

Leds RGB

Os leds RGB são encontrados em duas estruturas:

  • Anodo comum;
  • Catodo comum.

Laboratório 6: Led RGB

Cores primárias
digitalWrite.
  • Montar hardware para led RGB anodo comum utilizando resistores de proteção adequados.
  • Modificar programa blink para piscar cores vermelho (R), verde (G) e azul (B) alternadamente;
  • Variar a frequência do piscar de leds RGB nos seguintes valores:
    • 1 Hz
    • 10 Hz
    • 100 Hz
    • 1000Hz
Verificar o resultado nas cores observadas.

Projeto 4: Misturando as cores primárias com leds RGB

Misturando as cores primárias
analogWrite
  • Montar hardware para led RGB anodo comum utilizando os pinos 3, 5 e 6 respectivamente.
  • Carregar programa exemplo Arquivo/Exemplos/Communication/ReadASCIIString e misturar as cores do led RGB utilizando quantidades de RGB de 0 a 255, de modo a obter as cores mostrada na tabela de cores acima.
  • Montar hardware com utilizando três potenciômetros conectado a três entradas analógicas, as quais devem ser combinadas para misturar as cores do led RGB.

Referências


Evandro.cantu (discussão) 09h41min de 17 de setembro de 2021 (-03)