Arduino: Entradas e Saidas
Minicurso: Arduíno e eletrônica
- Professor Evandro Cantú
- Instituto Federal do Paraná - Campus Foz do Iguaçu
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 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
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.
Para utilizar um led é necessário alguns conceitos de Eletricidade Básica.
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 15 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 (Prefixos SI)
- Calculando:
R = (5 - 2)/10 . (1/10-3) = 3/10 . 103 = 300Ω
- Valores comerciais:
270Ω ou 330Ω
Laboratório 2: 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 3: Chave digital
- digitalRead
- Montar hardware com chave (push botton), utilizando resistores de proteção de 10 KΩ.
- Carregar programa exemplo Arquivo/Exemplos/Digital/Button para ligar ou desligar led em função de pressão em chave digital.
- Carregar programa exemplo Arquivo/Exemplos/Basic/DigitalReadSerial para verificar no terminal serial o valor da chave digital.
Laboratório 4: 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);
Divisor de Tensão
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.
- Quedas de tensão ao longo da malha (2a Lei de Kirchhoff)
V = I.R1 + I.R2
- Isolando I:
I = V / (R1 + R2)
- Mas:
V1 = R1.I
- Substituindo I temos:
V1 = R1/(R1 + R2) . V
- O mesmo para V2:
V2 = R2/(R1 + R2) . V
- Note que, Se:
R = R1 = R2
- Temos:
V1 = V2 = R/(R + R) . V = R/(2.R) . V = V / 2
- Simulação do funcionamento do Divisor de Tensão
- Circuits -> Basic -> Voltage Divider
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.
- Simulação do funcionamento do Potenciômetro Divisor de Tensão
- Circuits -> Basic -> Potentiometer Divider
Laboratório 5: 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.
Sensores baseados em resistência variável para Arduíno
Sensores de luminosidade (LDR) e sensores de temperatura (como o NTC) possuem um resistor variável em função da grandeza que estão medindo.
Laboratório 6: Sensor de luminosidade LDR
- LDR
- Montar hardware com o sensor LDR, conforme mostrado no link do exemplo Arquivo/Exemplos/Analog/AnalogInput, e verificar o valor da frequência do pulsar do led em função do valor da luminosidade.
Laboratório 7: Sistema indicador de luminosidade
- 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
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 8: 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.
Comunicação Serial
A comunicação serial permite enviar dados do computador ao Arduíno pela interface serial.
Laboratório 9: Comunicação 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.
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.
Os leds RGB são encontrados em duas estruturas:
- Anodo comum;
- Catodo comum.
Tabela de mistura das cores primárias
A tabela abaixa mostra a mistura das cores primárias utilizada na Linguagem HTML com uma paleta de 256 cores RBG.
A tabela mostra a quantidade de cada cor em valores de 8 bits, expressos em hexadecimal (00 a FF) (ou de 0 a 255 em decimal):
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) .
Laboratório 10: 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.
- 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.
Acionamento de Cargas com Relés
Um relé é um interruptor eletromecânico ou eletrônico que pode ser utilizado para ligar ou desligar cargas conectadas em 127/220V CA (Corrente Alternada).
O acionamento do relé pelo Arduíno é realizado a partir de uma saída digital, além do fornecimento das tensões 5V e GNG para alimentar o relé.
A carga CA é conectada nos terminais de potência do relé, o qual geralmente apresenta três terminais:
- NA - Normalmente Aberto
- COM - Comum
- NF - Normalmente Fechado
Para acionamento de uma carga simples, como uma lâmpada, utilizar NA-COM como chave liga-desliga.
Laboratório 11: Acionamento de uma lâmpada com relé
- LDR e relé
- Montar hardware com sensor LDR e um relé para acionamento pelo Arduíno de uma lâmpada 127/220V.
- O circuito da lâmpada na rede 127/220 V CA é mostrado na figura abaixo.
Sensor de Temperatura NTC 10k
O sensor de temperatura NTC 10k é um thermistor, isto é, um resistor cuja resistência varia com a temperatura, podendo medir de −90 °C a 130 °C.
Existem dois tipos de thermistores:
- NTC (Negative Temperature Coefficient), no qual a resistência diminui com o aumento da temperatura;
- PTC (Positive Temperature Coefficient), no qual a resistência aumenta com o aumento da temperatura.
Para leitura com o Arduíno, o sensor NTC 10k é utilizado numa estrutura com um divisor de tensão com um resistor de 10K Ω.
Esquema de ligação com Arduíno:
- Cálculo da resistência do NTC
- Na temperatura de 25 oC a resistência do NTC é 10 k Ω, variando linearmente com a temperatura.
- Portando, quando:
RNTC = 10k Ω (25 oC)
- Temos:
leitura_analógica = 512 (Vdivisor = 2,5V)
- Logo, para qualquer leitura analógica temos:
RNTC = 10k . (1023/leitura_analógica - 1)
- Equação de Steinhart–Hart
- A equação de Steinhart–Hart (https://en.wikipedia.org/wiki/Thermistor), detalha a operação do thermistor NTC relacionando a variação de temperatura (Kelvin) com a resistência (Ω).
- onde a, b e c são parâmetros de Steinhart–Hart específicos para cada dispositivo.
- Valores típicos para um thermistor com resistência de 10K Ω na temperatura de (25 oC = 298.15 K) é:
- a = 0.001129148,
- b = 0.000234125,
- c = 0.0000000876741.
Laboratório 12: Sensor de Temperatura com NTC
Monte o hardware para o sensor de temperatura NTC10k e teste o código abaixo (adaptado de [3]):
//Sensor de temperatura NTC10k
#include <math.h>
const double a = 0.001129148; //
const double b = 0.000234125; //Parâmetros de Steinhart–Hart
const double c = 0.0000000876741; //
void setup()
{
Serial.begin(9600);
}
void loop()
{
double R; //Resistência do NTC
double T; //Temperatura em Kelvin
int leitura; //Leitura analógica (0 a 1023)
leitura = analogRead(A0);
R = (10000.0 * ((float)1023/leitura - 1)); //Calcula valor de R em função da leitura
T = 1 / (a + (b * log(R)) + (c * pow(log(R),3))); //Equação de Steinhart–Hart
T = T - 273.15; //Converte Kelvin para Celcius
Serial.print("Temperatura: ");
Serial.print(T);
Serial.println(" oC");
delay(1000);
}
Referências
--Evandro.cantu (discussão) 16h33min de 12 de setembro de 2016 (BRT)